Compare commits
4 Commits
dcff6f0e91
...
b68cffe741
Author | SHA1 | Date |
---|---|---|
Felix Morales | b68cffe741 | 5 months ago |
Felix Morales | 7b75d79348 | 5 months ago |
Felix Morales | ce5f7a2971 | 5 months ago |
Felix Morales | 8170a2a56b | 5 months ago |
@ -0,0 +1,9 @@ |
|||||||
|
using CORRESPONSALBackend.DTO.ArchivoElectronico; |
||||||
|
using GEMCO.Backend.Models.Reportes; |
||||||
|
|
||||||
|
namespace CORRESPONSALBackend.Contracts.ArchivoElectronico{ |
||||||
|
public interface IArchivoElectronicoRepository |
||||||
|
{ |
||||||
|
public Task<List<RptPedimentosPagadosAEO>> getRptPedimentoPagadosAEO(DTOAEPeriodo dTOData); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
namespace CORRESPONSALBackend.Contracts.ArchivoElectronico{ |
||||||
|
public interface IArchivoElectronicoService{ |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -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(44); // 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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
using System.Data; |
||||||
|
using CORRESPONSALBackend.Context; |
||||||
|
using CORRESPONSALBackend.Contracts.ArchivoElectronico; |
||||||
|
using CORRESPONSALBackend.DTO.ArchivoElectronico; |
||||||
|
using Dapper; |
||||||
|
using GEMCO.Backend.Models.Reportes; |
||||||
|
|
||||||
|
namespace CORRESPONSALBackend.Repository{ |
||||||
|
public class ArchivoElectronicoRepository : IArchivoElectronicoRepository |
||||||
|
{ |
||||||
|
private readonly DapperContext _context; |
||||||
|
public ArchivoElectronicoRepository(DapperContext context) { _context = context; } |
||||||
|
public async Task<List<RptPedimentosPagadosAEO>> getRptPedimentoPagadosAEO(DTOAEPeriodo data) |
||||||
|
{ |
||||||
|
var query = "getRptArchivoElectronicoOficial"; |
||||||
|
using (var connection = _context.CreateConnection()) |
||||||
|
{ |
||||||
|
var entrada = await connection.QueryAsync<RptPedimentosPagadosAEO>(query, |
||||||
|
new |
||||||
|
{ |
||||||
|
@Anio = data.Anio, |
||||||
|
@Mes = data.Mes, |
||||||
|
@NoCliente = data.NoCliente, |
||||||
|
@TipoOperacion = data.TipoOperacion |
||||||
|
}, |
||||||
|
commandType: CommandType.StoredProcedure); |
||||||
|
return entrada.ToList(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
using CORRESPONSALBackend.Contracts.ArchivoElectronico; |
||||||
|
|
||||||
|
namespace CORRESPONSALBackend.Services{ |
||||||
|
public class ArchivoElectronicoService : IArchivoElectronicoService{ |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue