|
|
|
@ -0,0 +1,93 @@ |
|
|
|
|
using CORRESPONSALBackend.Contracts.ArchivoElectronico; |
|
|
|
|
using CORRESPONSALBackend.Contracts.Corresponsalias; |
|
|
|
|
using CORRESPONSALBackend.Contracts.Utils; |
|
|
|
|
using CORRESPONSALBackend.DTO.ArchivoElectronico; |
|
|
|
|
using CORRESPONSALBackend.Models.Utils; |
|
|
|
|
using CORRESPONSALBackend.Repository.Utils; |
|
|
|
|
using GEMCO.Backend.Models.Reportes; |
|
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
|
|
|
|
|
|
namespace CORRESPONSALBackend.Controllers.Utils{ |
|
|
|
|
[Route("api/[controller]")]
|
|
|
|
|
[ApiController] |
|
|
|
|
public class ArchivoElectronicoController : ControllerBase { |
|
|
|
|
|
|
|
|
|
private readonly IArchivoElectronicoRepository _AERepo; |
|
|
|
|
private readonly IConfiguration _config; |
|
|
|
|
private readonly IFilePaths4ProcessRepository _RepoRelativePath; |
|
|
|
|
private readonly string RootPathCorresponsales; |
|
|
|
|
private readonly ICorresponsaliasTraficosRepository _traficosRepository; |
|
|
|
|
private readonly IFileManagerRepository _fileManagerRepo; |
|
|
|
|
public ArchivoElectronicoController(IArchivoElectronicoRepository AERepo, IConfiguration config, |
|
|
|
|
ICorresponsaliasTraficosRepository traficosRepository, IFilePaths4ProcessRepository RepoRelativePath, |
|
|
|
|
IFileManagerRepository fileManagerRepo){ |
|
|
|
|
_AERepo = AERepo; |
|
|
|
|
_traficosRepository = traficosRepository; |
|
|
|
|
_config = config; |
|
|
|
|
_RepoRelativePath = RepoRelativePath; |
|
|
|
|
_fileManagerRepo = fileManagerRepo; |
|
|
|
|
RootPathCorresponsales = _config.GetValue<string>("AllFiles"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[HttpGet] |
|
|
|
|
[Route("RptArchivoElectronicoOficial")] |
|
|
|
|
public async Task<List<RptPedimentosPagadosAEO>> GetReporteArchivElectronicoOficial([FromQuery] DTOAEPeriodo DTOData) |
|
|
|
|
{ |
|
|
|
|
List<RptPedimentosPagadosAEO> data = await _AERepo.getRptPedimentoPagadosAEO(DTOData); |
|
|
|
|
return data; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[HttpPost] |
|
|
|
|
[Route("DownloadZippedArchivosOficiales")] |
|
|
|
|
public async Task<IActionResult> DownloadZippedArchivosOficiales([FromBody] DTOAEPeriodoSeleccion data){ |
|
|
|
|
try{ |
|
|
|
|
//Se obtiene la ruta donde se alojará temporalmente el zip |
|
|
|
|
FilePaths4Process tempFilesRelativePath = await _RepoRelativePath.getPaths4ProcessById(45); // Path: Corresponsales\Zips\Facturacion\Entregas\ |
|
|
|
|
var tempFilesPath = RootPathCorresponsales + tempFilesRelativePath.Path;// Path: C:data\Corresponsales\Zips\Clientes\ArchivosElectronicos |
|
|
|
|
string tempFolderName = "ReporteArchivosElectronicos";//Nombre del folder Temporal |
|
|
|
|
string tempFolderPath= tempFilesPath + $"{tempFolderName}\\";//ruta del folder temporal Path: C:data\Corresponsales\Zips\Clientes\ArchivosElectronicos\ReporteArchivosElectronicos |
|
|
|
|
string zipFileName = $"{tempFolderName}.zip";//Nombre del zip final |
|
|
|
|
var zipFilePath = tempFilesPath + zipFileName;//Ruta del zip final Path: C:data\Corresponsales\Zips\Clientes\ArchivosElectronicos\ReporteArchivosElectronicos.zip |
|
|
|
|
|
|
|
|
|
if(System.IO.File.Exists(zipFilePath)){//Si ya existe un zip de una descarga anterior lo borra |
|
|
|
|
System.IO.File.Delete(zipFilePath); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(System.IO.Directory.Exists(tempFolderPath)){//Si ya existe la carpeta temporal de una descarga anterior la borra |
|
|
|
|
System.IO.Directory.Delete(tempFolderPath, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
System.IO.Directory.CreateDirectory(tempFolderPath);//Se crea el folder temporal donde se pondran los archivos oficiales |
|
|
|
|
foreach(var referencia in data.Referencias){ |
|
|
|
|
var trafico = await _traficosRepository.GetByReferencia(referencia); |
|
|
|
|
string folderAE = tempFolderPath + $"{referencia}\\";//Se obtiene el nombre de la subcarpeta del AE de cada referencia |
|
|
|
|
if(System.IO.Directory.Exists(folderAE)){//Si existe la carpeta se borra |
|
|
|
|
System.IO.Directory.Delete(folderAE); |
|
|
|
|
} |
|
|
|
|
System.IO.Directory.CreateDirectory(folderAE);//Se crea la carpeta |
|
|
|
|
//Obtener la lista de archivos de la referencia actual. |
|
|
|
|
var filesLog = await _fileManagerRepo.GetTraficoFiles(trafico.id); |
|
|
|
|
var filteredFilesLog = filesLog.Where(x => new List<int>(){2,10,11,12,13,14,15,19,17,18,37,38,39,41}.Contains(x.Proceso)); |
|
|
|
|
foreach(var fileLog in filteredFilesLog){ |
|
|
|
|
FilePaths4Process fileRelativePath = await _RepoRelativePath.getPaths4ProcessById(fileLog.Proceso);//Se obtiene la ruta relativa donde debe estar alojado el archivo |
|
|
|
|
var filePath = RootPathCorresponsales + fileRelativePath.Path + fileLog!.NombreArchivo;//Ahora se obtiene la ruta completa del archivo. |
|
|
|
|
if(System.IO.File.Exists(filePath)){ |
|
|
|
|
var bytes = await System.IO.File.ReadAllBytesAsync(filePath); |
|
|
|
|
var originalFileStream = new MemoryStream(bytes); |
|
|
|
|
using(var tempFileStream = System.IO.File.Create(folderAE + fileLog.NombreArchivo)){ |
|
|
|
|
await originalFileStream.CopyToAsync(tempFileStream); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
System.IO.Compression.ZipFile.CreateFromDirectory(tempFolderPath, zipFilePath);//Se comprime la carpeta con los archivos electronicos de las referencias |
|
|
|
|
Directory.Delete(tempFolderPath, true);//Se borra el folder temporal |
|
|
|
|
var zipBytes = await System.IO.File.ReadAllBytesAsync(zipFilePath); |
|
|
|
|
var zipStream = new MemoryStream(zipBytes); |
|
|
|
|
return File(zipStream, "application/zip", zipFileName); |
|
|
|
|
}catch(Exception ex){ |
|
|
|
|
return BadRequest(ex.Message); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |