From 3e81191bfb130f7cba44cc8c17ec51b63e26dbd2 Mon Sep 17 00:00:00 2001 From: Felix Morales Date: Fri, 26 Apr 2024 12:32:01 -0500 Subject: [PATCH] Creacion del reporte de archivo electronico, seleccionar referencias y descargar sus archivos oficiales comprimidos en un zip --- .../Reportes/ArchivoElectronico/DialogAE.tsx | 87 +++++++++++-------- .../Reportes/customCells/verDocumentos.tsx | 19 +++- .../ReporteArchivoElectronico.tsx | 5 +- .../Catalogos/ArchivoElectronico.Services.ts | 14 ++- src/Services/Reportes/reportes.services.ts | 9 -- src/Services/Utils/FileManager.Services.ts | 6 +- 6 files changed, 88 insertions(+), 52 deletions(-) diff --git a/src/Components/Reportes/ArchivoElectronico/DialogAE.tsx b/src/Components/Reportes/ArchivoElectronico/DialogAE.tsx index 6b5660f..ed1cf83 100644 --- a/src/Components/Reportes/ArchivoElectronico/DialogAE.tsx +++ b/src/Components/Reportes/ArchivoElectronico/DialogAE.tsx @@ -16,11 +16,16 @@ import ArchivoElectronicoDataServices from '../../../Services/Catalogos/ArchivoE import { AgGridReact } from 'ag-grid-react' import { MsgInformativo } from '../../Utils/Toast/msgInformativo' import { TargetURL } from '../../../Constants/TargetURL' +import IFileManager from '../../../Interfaces/Utils/IFileManager' +import FileManagerServices from '../../../Services/Utils/FileManager.Services' +import { IconContext } from 'react-icons' +import { FaDownload } from 'react-icons/fa' interface IProps { showDialog: boolean header: string closeDialog: (arg: boolean) => void + archivos: IFileManager[] } interface ListaArchivos { @@ -34,17 +39,31 @@ export const DialogAE: FC = (props) => { const Referencia = useSelector((state: RootState) => state.ArchivoElectronico.Referencia) const Pedimento = useSelector((state: RootState) => state.ArchivoElectronico.Pedimento) const NoCliente = useSelector((state: RootState) => state.ArchivoElectronico.NoCliente) - const [filteredData, setFilteredData] = useState>() + const [filteredData, setFilteredData] = useState([]) const [columnDefs] = useState([ { - field: 'archivo', + field: 'nombreArchivo', + cellRender: (params:any) => {return params.data.nombreArchivo}, width: 430, - headerCheckboxSelection: true, - headerCheckboxSelectionFilteredOnly: true, - checkboxSelection: true, + headerCheckboxSelection: false, + headerCheckboxSelectionFilteredOnly: false, + checkboxSelection: false, sortable: true, filter: true, - }, + },{ + field: 'Descargar', + width: 100, + cellRenderer: (params:any) => { + return ( +
+ + + +
+ ) + //return + }, + } ]) const gridRef = React.useRef(null) const [msgColor, setMsgColor] = React.useState('primary') @@ -52,34 +71,32 @@ export const DialogAE: FC = (props) => { const [header, setHeader] = useState('') const [msg, setMsg] = useState('') - useEffect(() => { - const data: IArchivoElectronico = { - Referencia: Referencia, - PedimentoLargo: Pedimento.trim(), - NoCliente: NoCliente, - IdUsuario: 0, - Archivo: 'dummy', - } - ArchivoElectronicoDataServices.getFileList(data) - .then((response) => { - const lista: ListaArchivos[] = [] - response.data.forEach((item) => { - lista.push({ archivo: item }) - }) - setFilteredData(lista) - }) - .catch((e: Error) => { - console.log(e) - return - }) - }, [Referencia]) - const viewFileContent = (fileName: string) => { window.open( `${curURL}/ArchivoElectronico/getFileContent?Referencia=${Referencia}&PedimentoLargo=dummy&NoCliente=${NoCliente}&IdUsuario=0&Archivo=${fileName}` ) } + useEffect(() => { + setFilteredData(props.archivos) + }, [props.archivos]) + + const getFile = (file: IFileManager) => { + FileManagerServices.getFileContent(parseInt(file.tags), file.proceso).then((resp: any) => { + const url = window.URL.createObjectURL(new Blob([resp.data])) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', file.nombreArchivo) + document.body.appendChild(link) + link.click() + }).catch(() => { + setHeader('Error') + setMsg('Ocurrio un error durante la descarga, favor de intentar nuevamente') + setShowMsg(true) + return + }) + } + const getFilesByReference = () => { let selectedNodes = gridRef.current.api.getSelectedNodes() let selectedData = selectedNodes.map((node: any) => node.data) @@ -92,7 +109,7 @@ export const DialogAE: FC = (props) => { Archivo: 'dummy', Archivos: Archivos, } - AEOServices.getTheseFilesByReferences(data) + /* AEOServices.getTheseFilesByReferences(data) .then((response: any) => { const url = window.URL.createObjectURL(new Blob([response.data])) const link = document.createElement('a') @@ -106,7 +123,7 @@ export const DialogAE: FC = (props) => { setMsg('Ocurrio un error: ' + e) setShowMsg(true) return - }) + }) */ props.closeDialog(false) } @@ -126,22 +143,22 @@ export const DialogAE: FC = (props) => { {filteredData ? ( -
+
) : ( 'Sin archivos que mostrar' )} - + {/* @@ -170,7 +187,7 @@ export const DialogAE: FC = (props) => { - + */} setShowMsg(false)} />
diff --git a/src/Components/Reportes/customCells/verDocumentos.tsx b/src/Components/Reportes/customCells/verDocumentos.tsx index fbabde1..6c6d50f 100644 --- a/src/Components/Reportes/customCells/verDocumentos.tsx +++ b/src/Components/Reportes/customCells/verDocumentos.tsx @@ -1,11 +1,26 @@ import React, { FC, useState } from 'react' import { Button } from 'react-bootstrap' import { DialogAE } from '../ArchivoElectronico/DialogAE' -interface IProps {} +import ArchivoElectronicoDataServices from '../../../Services/Catalogos/ArchivoElectronico.Services' +import IFileManager from '../../../Interfaces/Utils/IFileManager'; +import FileManagerServices from '../../../Services/Utils/FileManager.Services'; +interface IProps { + referencia: string; +} export const VerDocumentos: FC = (props) => { const [showDialog, setShowDialog] = useState(false) + const [Archivos, setArchivos] = useState([]); const showDocumentos = () => { + FileManagerServices.getFileListByreferencia(props.referencia) + .then((response) => { + const filteredFileList = response.data.filter(x=> [2,10,11,12,13,14,15,19,17,18,37,38,39,41].includes(x.proceso)) + setArchivos(filteredFileList) + }) + .catch((e: Error) => { + console.log(e) + return + }) setShowDialog(true) } @@ -20,7 +35,7 @@ export const VerDocumentos: FC = (props) => { ver Documentos - + ) } diff --git a/src/Components/ReportesClientes/ReporteArchivoElectronico.tsx b/src/Components/ReportesClientes/ReporteArchivoElectronico.tsx index 5379416..be97578 100644 --- a/src/Components/ReportesClientes/ReporteArchivoElectronico.tsx +++ b/src/Components/ReportesClientes/ReporteArchivoElectronico.tsx @@ -13,6 +13,7 @@ import DTOAEPeriodo from "../../DTO/DTOAEPeriodo" import ClientesServices from "../../Services/Catalogos/Clientes.Services" import reportesServices from "../../Services/Reportes/reportes.services" import loadingImg from '../../images/ajaxloader.gif' +import ArchivoElectronicoServices from "../../Services/Catalogos/ArchivoElectronico.Services" export const ReporteArchivoElectronico:React.FC = () => { //const dispatch = useDispatch() @@ -58,7 +59,7 @@ export const ReporteArchivoElectronico:React.FC = () => { sortable: true, filter: true, }, - { field: 'ver documentos', sortable: true, cellRenderer: VerDocumentos }, + { field: 'ver documentos', sortable: true, cellRenderer: (params: any) => {return } }, { field: 'aduana', sortable: true, filter: true }, { field: 'patente', sortable: true, filter: true }, { field: 'pedimento', sortable: true, filter: true }, @@ -206,7 +207,7 @@ export const ReporteArchivoElectronico:React.FC = () => { Referencias: Referencias, } console.log(data) - reportesServices.getZippedReferences(data) + ArchivoElectronicoServices.getZippedReferences(data) .then((response: any) => { const url = window.URL.createObjectURL(response.data) const link = document.createElement('a') diff --git a/src/Services/Catalogos/ArchivoElectronico.Services.ts b/src/Services/Catalogos/ArchivoElectronico.Services.ts index b24b781..200a5e3 100644 --- a/src/Services/Catalogos/ArchivoElectronico.Services.ts +++ b/src/Services/Catalogos/ArchivoElectronico.Services.ts @@ -8,7 +8,7 @@ import http from "../common/http-common"; class ArchivoElectronicoDataService { - getFile(data: IArchivoElectronico) { + /* getFile(data: IArchivoElectronico) { return http.get(`/ArchivoElectronico/getFile`, { params: data }) } getFileList(data: IArchivoElectronico) { @@ -55,6 +55,16 @@ class ArchivoElectronicoDataService { .catch(function (error) { console.log(error) }) - } + } */ + getZippedReferences(data : DTOAEPeriodo) { + return http.post("/ArchivoElectronico/DownloadZippedArchivosOficiales", data, {responseType: 'blob'}) + .then(function (response) { + return response + }) + .catch(function (error) { + console.log(error) + }) + } + } export default new ArchivoElectronicoDataService(); \ No newline at end of file diff --git a/src/Services/Reportes/reportes.services.ts b/src/Services/Reportes/reportes.services.ts index c554bb2..72e8a4b 100644 --- a/src/Services/Reportes/reportes.services.ts +++ b/src/Services/Reportes/reportes.services.ts @@ -67,14 +67,5 @@ class reportsDataService { getRptOperacionesDiarias(data: DTOReporte) { return http.get(`/reportes/RptOperacionesDiarias?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}`); } - getZippedReferences(data : DTOAEPeriodo) { - return http.post("/ArchivoElectronico/DownloadZippedArchivosOficiales", data, {responseType: 'blob'}) - .then(function (response) { - return response - }) - .catch(function (error) { - console.log(error) - }) - } } export default new reportsDataService(); \ No newline at end of file diff --git a/src/Services/Utils/FileManager.Services.ts b/src/Services/Utils/FileManager.Services.ts index 3d1061a..d21736a 100644 --- a/src/Services/Utils/FileManager.Services.ts +++ b/src/Services/Utils/FileManager.Services.ts @@ -5,7 +5,7 @@ import IFileManager from "../../Interfaces/Utils/IFileManager"; class FileManagerDataService { getFileContent(id: number, Proceso: number) { - return http.get(`/FileManager/getFile?id=${id}&proceso=${Proceso}`, {responseType: 'arraybuffer'}) + return http.get(`/FileManager/getFile?id=${id}&proceso=${Proceso}`, {responseType: 'arraybuffer'}) .then(function (response) { return response }) @@ -40,6 +40,8 @@ class FileManagerDataService { console.log(error) }) } - + getFileListByreferencia(referencia: string) { + return http.get(`/FileManager/FileListByReferencia?Referencia=${referencia}`) + } } export default new FileManagerDataService(); \ No newline at end of file