diff --git a/src/Components/Reportes/RptCorresponsalesTraficos.tsx b/src/Components/Reportes/RptCorresponsalesTraficos.tsx index f86995c..02f6737 100644 --- a/src/Components/Reportes/RptCorresponsalesTraficos.tsx +++ b/src/Components/Reportes/RptCorresponsalesTraficos.tsx @@ -1,4 +1,4 @@ -import React, { FC, useEffect, useState } from 'react' +import React, { FC, useEffect, useRef, useState } from 'react' import { useParams } from 'react-router-dom' import { useDispatch } from 'react-redux' import { IconContext } from 'react-icons' @@ -30,10 +30,18 @@ import ICatCorresponsales from '../../Interfaces/Catalogos/ICatCorresponsales' import ClientesDataService from '../../Services/Catalogos/Clientes.Services' import CorresponsalesDataService from '../../Services/Catalogos/Corresponsales.Services' import reportesServices from '../../Services/Reportes/reportes.services' +import CContDataService from '../../Services/Corresponsalias/Corresponsales.Contenedores.Services' +import CTrafDataService from '../../Services/Corresponsalias/Corresponsales.Trafico.Services' +import ProvDataService from '../../Services/Catalogos/Proveedores.Services' +import CFacDataService from '../../Services/Corresponsalias/Corresponsales.Facturas.Services' import { InitCorresponsalesFacturas } from '../../store/features/Corresponsales/CorresponsalesFacturasSlice' import { InitCorresponsalesFacturasTerceros } from '../../store/features/Corresponsales/CorresponsalesFacturasTercerosSlice' -import { InitCorresponsalesContenedores } from '../../store/features/Corresponsales/CorresponsalesContenedoresSlice' +import { InitCorresponsalesContenedores, addCorresponsalesContenedores } from '../../store/features/Corresponsales/CorresponsalesContenedoresSlice' +import ICorresponsalContenedores from '../../Interfaces/Corresponsales/ICorresponsalContenedores' +import ICorresponsalFacturas from '../../Interfaces/Corresponsales/ICorresponsalFacturas' +import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores' +import { FaCrow } from 'react-icons/fa' /* import '../../css/generic01.css' */ interface IProps {} @@ -72,6 +80,7 @@ export default function RptCorresponsalesTraficos(props: IProps) { const [DataCorresponsales, setDataCorresponsales] = useState< ICatCorresponsales[] >([]) + const hiddenFileInputRef = useRef(null); const [columnDefs] = useState([ { field: 'id', headerName: 'id', width: 70, sortable: true, filter: true }, { @@ -84,13 +93,13 @@ export default function RptCorresponsalesTraficos(props: IProps) { cellRenderer: ProgressBar, }, { - field: 'folio', + field: 'folioGemco', headerName: 'Trafico', width: 140, sortable: true, filter: true, cellRenderer: (params: any) => { - return params.data.folio + return params.data.folioGemco }, }, { @@ -344,88 +353,277 @@ export default function RptCorresponsalesTraficos(props: IProps) { } } + const readFile = (event: any) => { + const fileUploaded = event.target.files[0]; + if(!fileUploaded) return; + const fileReader = new FileReader(); + fileReader.readAsText(fileUploaded); + + fileReader.onload = async () => { + const validDataArry = await cleanUpFileData(fileReader.result?.toString()!); + let proveedores:ICatProveedores[] = []; + await ProvDataService.getAll(0).then(async (response) => {proveedores = response.data}); + validDataArry.forEach(async element => { + const model = filteredData.find(x => x.folioGemco === element[0]); + if(model?.proceso === 1){ + model.pedimento = +element[6]; + model.clave = element[8]; + if(element[7] !== '') model.fechaPago = moment(new Date(element[7])).format("MM/DD/YYYY hh:mm:ss") + model.tipoCambio = +element[15]; + model.noCuenta = element[9]; + model.semaforoFiscal = +element[23] === 1 ? 1 : 0; + model.descripcionMercancia = element[14]; + if(element[22] !== '') model.fechaPago = moment(new Date(element[22])).format("MM/DD/YYYY hh:mm:ss") + + await CTrafDataService.Append(model) + .then(async (response) => { + if (response.data.estatusCode === 0) { + + } + }).catch((error) => { + setHeader('Error') + setMsg('Ocurrio un error al actualizar la referencia: ' + model.folioGemco) + setShowMsg(true) + return + }) + + await CContDataService.getAll(model.id) + .then(async (response) => { + if(response.data.length > 0){ + let contenedor = response.data.filter(x => x.contenedor === element[32])[0] + if(contenedor){ + contenedor.fSemaforo = element[22] + contenedor.semaforo = +element[23] === 1 ? 2 : 1 + await saveTxtContenedores(contenedor); + }else{ + await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1}); + } + }else{ + await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1}); + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error al guardar el contenedor: ' + element[32]) + setShowMsg(true) + return + }); + + + let proveedor = proveedores.filter(x => x.nombre.includes(element[10]))[0] + if(proveedor){ + await CFacDataService.getAll(model.id) + .then(async (response) => { + let factura = response.data.filter(f => f.factura === element[13])[0] + if(factura){ + factura.valorFacturaDls = +element[16] + factura.pedido = element[29] + factura.proveedor = proveedor.id + await saveFacturasTxt(factura).catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error al actualizar la factura: ' + factura.factura) + setShowMsg(true) + return + }) + }else{ + await CFacDataService.Append({ + id: 0, + factura: element[13], + idTrafico: model.id, + valorFacturaDls: +element[16], + proveedor: proveedor.id, + corresponsal: model.idCorresponsal, + pedido: element[29], + code: 0, + folioGEMCO: '' + }).catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error al guardar la factura: ' + element[13]) + setShowMsg(true) + return + }) + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error: ' + e) + setShowMsg(true) + return + }) + }else{ + setHeader('Error') + setMsg('No se encontraron uno o más proveedores, favor de verificar los nombres'); + setShowMsg(true) + return + } + } + }); + if(hiddenFileInputRef.current !== null ) hiddenFileInputRef.current.value = ""; + }; + + fileReader.onerror = () => {} + }; + + const cleanUpFileData = async (fileData: string) => { + //Se separa el contenido del txt en renglones separandolo cada que encuentra un salto de linea + let dataArray = fileData.split("\r\n")!; + //Se filtran los renglones para dejar solamente los que tienen informacion de referencias + let dataArrayWithoutJunkRows = dataArray.filter(x => x.startsWith("23-")); + //La informacion de cada renglon se separa para poder manejar los datos invidualmente. + let splitedDataArray: string[][] = []; + dataArrayWithoutJunkRows.forEach(row => { + splitedDataArray.push(row.split("\t")); + }); + //Se vuelven a filtrar los renglones para quitar los que contengan pedimentos o referencas invalidas que hayan pasado los primeros filtros + let validFormatDataArray = splitedDataArray.filter(x => +x[6] > 2000000 && !x[0].includes(",") && !x[0].includes("|")); + let uniqueReferences: string[][] = []; + let validDataArray = validFormatDataArray.filter( element => { + let isDuplicate = uniqueReferences.filter(x => x[0] === element[0]); + + if(isDuplicate.length === 0){ + uniqueReferences.push(element); + return true; + } + return false; + }); + + return validDataArray; + } + + const saveTxtContenedores = async (contenedor: ICorresponsalContenedores) => { + await CContDataService.Append(contenedor) + .catch((e: Error) => { + return + }) + } + + const saveFacturasTxt = async(factura: ICorresponsalFacturas) => { + await CFacDataService.Append(factura) + .catch((e: Error) => { + return + }) + } + return (
- - setInicio(e.target.value)} - size='sm' - /> - - - setFin(e.target.value)} - size='sm' - /> + + + + { + filtraReporte(e) + }} + /> + + + setInicio(e.target.value)} + size='sm' + /> + + + setFin(e.target.value)} + size='sm' + /> + + - - Tipo oper - - - setTipoOperacion(parseInt(e.target.value))} - className='form-select form-select-sm' - > - - - - + + + + + Tipo operacion + setTipoOperacion(parseInt(e.target.value))} + className='form-select form-select-sm' + > + + + + + - - Cliente + + + Cliente + { + setCliente(parseInt(e.target.value)) + }} + className='form-select form-select-sm' + > + + {Clientes + ? Clientes.map((c) => { + return ( + + ) + }) + : null} + + - - { - setCliente(parseInt(e.target.value)) - }} - className='form-select form-select-sm' - > - - {Clientes - ? Clientes.map((c) => { - return ( - - ) - }) - : null} - + + + Corresponsal + { + setCorresponsal(parseInt(e.target.value)) + }} + className='form-select form-select-sm' + > + + {DataCorresponsales + ? DataCorresponsales.map((c) => { + return ( + + ) + }) + : null} + + - + + + - - - - {(Depto === 'Corresponsalias' || Depto === 'Sistemas') ? ( + { parseInt(proc!.replace('proc=', '')) === 1 && parseInt(modo!.replace('modo=', '')) === 1? <> + + + : ""} - Corresponsal - - { - setCorresponsal(parseInt(e.target.value)) - }} - className='form-select form-select-sm' - > - - {DataCorresponsales - ? DataCorresponsales.map((c) => { - return ( - - ) - }) - : null} - - -