From d986f06084fe2475e7faf1b79f005badd6fd0c11 Mon Sep 17 00:00:00 2001 From: Luis Rendon Date: Mon, 23 Oct 2023 00:59:58 -0500 Subject: [PATCH] Se actualio el componente Estatus fatura para agregar Inicio y fin y boton exel --- .../Amazon/DTO/DTO2096InvoiceStatus.ts | 9 +- .../Estatus/RtpAmazonInvoiceStatus.tsx | 1124 ++++++++++------- .../Amazon/Services/Amazon.Services.ts | 4 +- 3 files changed, 702 insertions(+), 435 deletions(-) diff --git a/src/Components/Clientes/Amazon/DTO/DTO2096InvoiceStatus.ts b/src/Components/Clientes/Amazon/DTO/DTO2096InvoiceStatus.ts index 49c41ca..ff86286 100644 --- a/src/Components/Clientes/Amazon/DTO/DTO2096InvoiceStatus.ts +++ b/src/Components/Clientes/Amazon/DTO/DTO2096InvoiceStatus.ts @@ -1,3 +1,5 @@ +import { number } from "yup" + export default interface DTO2096InvoiceStatus { id: number referencia: string @@ -25,5 +27,10 @@ export default interface DTO2096InvoiceStatus { estatus: string, idArchivoACK: number, archivoACK: string, - fhArchivoACK: string + fhArchivoACK: string + clasificador: string + fechaRecepcion: string + cantidadASIN: number + + } \ No newline at end of file diff --git a/src/Components/Clientes/Amazon/Reportes/Estatus/RtpAmazonInvoiceStatus.tsx b/src/Components/Clientes/Amazon/Reportes/Estatus/RtpAmazonInvoiceStatus.tsx index 08db8c4..dee5ee4 100644 --- a/src/Components/Clientes/Amazon/Reportes/Estatus/RtpAmazonInvoiceStatus.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Estatus/RtpAmazonInvoiceStatus.tsx @@ -10,6 +10,7 @@ import { Card, Col, Form, + FormControl, Modal, Row, Table @@ -24,155 +25,189 @@ import { MFileManager } from '../../../../Utils/MFileManager/MFileManager' import DTO2096RptPayedOperations from '../../DTO/DTO2096RptPayedOperations' import DTO2096InvoiceStatus from '../../DTO/DTO2096InvoiceStatus' import IFileManager from '../../../../../Interfaces/Utils/IFileManager' +import * as XLSX from 'xlsx' +export interface IRptAmazonInvoiceStatusProps {} -export interface IRptAmazonInvoiceStatusProps { -} +export default function RptAmazonInvoiceStatus( + props: IRptAmazonInvoiceStatusProps +) { + const dispatch = useDispatch() + const mInvoices = useSelector( + (state: RootState) => state.AmazonInvoices.Invoice + ) + const [header, setHeader] = useState('') + const [Referencia, setReferencia] = useState('') + const [Factura, setFactura] = useState('') + const [Inicio, setInicio] = useState(currentDate()) + const [Fin, setFin] = useState(currentDate()) + const [Data, setData] = useState([]) + const [show, setShowMsg] = useState(false) + const [ShowModal, setShowModal] = useState(false) + const [WaitingDialog, setWaitingDialog] = useState(false) + const [WaitingMessage, setWaitingMessage] = useState('') + const [msg, setMsg] = useState('') + const [ShowModalAnswerFile, setShowModalAnswerFile] = useState(false) + const [IDProcess, setIDProcess] = useState(25) + const [IDFactura, setIDFactura] = useState(0) + const [Invoices, setInvoices] = useState([]) + const msgColor = 'primary' -export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusProps) { - const dispatch = useDispatch() - const mInvoices = useSelector( - (state: RootState) => state.AmazonInvoices.Invoice - ) - const [header, setHeader] = useState('') - const [Referencia, setReferencia] = useState('') - const [Factura, setFactura] = useState('') - const [Inicio, setInicio] = useState(currentDate()) - const [Fin, setFin] = useState(currentDate()) - const [Data, setData] = useState([]) - const [show, setShowMsg] = useState(false) - const [ShowModal, setShowModal] = useState(false) - const [WaitingDialog, setWaitingDialog] = useState(false) - const [WaitingMessage, setWaitingMessage] = useState('') - const [msg, setMsg] = useState('') - const [ShowModalAnswerFile, setShowModalAnswerFile] = useState(false) - const [IDProcess, setIDProcess] = useState(25) - const [IDFactura, setIDFactura] = useState(0) - const [Invoices, setInvoices] = useState([]) - const msgColor = 'primary' - - function currentDate(): string { - var today = new Date() - var dd = String(today.getDate()).padStart(2, '0') - var mm = String(today.getMonth() + 1).padStart(2, '0') //January is 0! - var yyyy = today.getFullYear() - return yyyy + '-' + mm + '-' + dd + function currentDate(): string { + var today = new Date() + var dd = String(today.getDate()).padStart(2, '0') + var mm = String(today.getMonth() + 1).padStart(2, '0') //January is 0! + var yyyy = today.getFullYear() + return yyyy + '-' + mm + '-' + dd + } + + // const loadReport = () => { + // // if (Factura.length == 0) { + // // setHeader('Error') + // // setMsg('Para continuar, proporcione la factura a buscar') + // // setShowMsg(true) + // // return + // // } + // DSAmazon.AmazonInvoiceStatusGET(Factura, Inicio, Fin) + // .then((response) => { + // setData(response.data) + // }) + // .catch((e: Error) => { + // alert('Ocurrio un error' + e.message.toString()) + // }) + // } + + const loadReport = () => { + // Inicializa Inicio y Fin como cadenas vacías por defecto. + let InicioValue = '' + let FinValue = '' + + // Verifica si se proporcionaron valores para Inicio y Fin. + if (Factura) { + // Si se proporciona la factura, Inicio y Fin se establecen como vacíos. + InicioValue = '' + FinValue = '' + + // Limpia el campo de factura. + setFactura('') + } else { + // Si no se proporciona la factura, se mantienen los valores actuales de Inicio y Fin. + InicioValue = Inicio + FinValue = Fin } - - const loadReport = () => { - if (Factura.length==0) { + + // Realiza la solicitud con los valores actualizados de Inicio y Fin. + DSAmazon.AmazonInvoiceStatusGET(Factura, InicioValue, FinValue) + .then((response) => { + setData(response.data) + }) + .catch((e: Error) => { + alert('Ocurrió un error: ' + e.message.toString()) + }) + } + + const handleFacturaChange = (event: React.ChangeEvent) => { + setFactura(event.target.value) + } + + const downloadPDF = (id: number, InvoiceNumber: string) => { + setWaitingDialog(true) + setWaitingMessage(' archivo PDF ') + DSAmazon.PDFAmazonInvoiceGET(id) + .then((response: any) => { + if (response.status === 200) { + const url = window.URL.createObjectURL(new Blob([response.data])) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', 'FAC_' + InvoiceNumber + '.pdf') + document.body.appendChild(link) + link.click() + setWaitingDialog(false) + } + }) + .catch((e: Error) => { setHeader('Error') - setMsg('Para continuar, proporcione la factura a buscar') + setMsg('Ocurrio un error') setShowMsg(true) return - } - DSAmazon.AmazonInvoiceStatusGET(Factura) - .then((response) => { - setData(response.data) - }) - .catch((e: Error) => { - alert('Ocurrio un error' + e.message.toString()) - }) - } - - const downloadPDF = (id: number, InvoiceNumber: string) => { - setWaitingDialog(true) - setWaitingMessage(' archivo PDF ') - DSAmazon.PDFAmazonInvoiceGET(id) - .then((response: any) => { - if (response.status === 200) { - const url = window.URL.createObjectURL(new Blob([response.data])) - const link = document.createElement('a') - link.href = url - link.setAttribute('download', 'FAC_' + InvoiceNumber + '.pdf') - document.body.appendChild(link) - link.click() - setWaitingDialog(false) - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } - - const downloadExcelInvoices = (Referencia: string) => { - setWaitingMessage(' archivo Excel ') - DSAmazon.GETAmazonFacturasByReference(Referencia) - .then((response: any) => { - if (response.status === 200) { - const url = window.URL.createObjectURL(new Blob([response.data])) - const link = document.createElement('a') - link.href = url - link.setAttribute('download', Referencia + '_FACTURAS_MODIFICA.xls') - document.body.appendChild(link) - link.click() - loadReport() - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } - - const downloadExcelPartidas = (Referencia: string) => { - setWaitingMessage(' archivo Excel ') - DSAmazon.GETAmazonPartidasByReference(Referencia) - .then((response: any) => { - if (response.status === 200) { - const url = window.URL.createObjectURL(new Blob([response.data])) - const link = document.createElement('a') - link.href = url - link.setAttribute('download', Referencia + '_PARTIDAS_MODIFICA.xls') - document.body.appendChild(link) - link.click() - loadReport() - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } - - const downloadNoPartes = (id: number, Factura: string) => { - DSAmazon.NoPartesAmazonFinal(id) - .then((response: any) => { - if (response.status === 200) { - const url = window.URL.createObjectURL(new Blob([response.data])) - const link = document.createElement('a') - link.href = url - link.setAttribute( - 'download', - 'Plantilla de partes ' + Factura + '.xls' - ) - document.body.appendChild(link) - link.click() - setWaitingDialog(false) - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } + }) + } + + const downloadExcelInvoices = (Referencia: string) => { + setWaitingMessage(' archivo Excel ') + DSAmazon.GETAmazonFacturasByReference(Referencia) + .then((response: any) => { + if (response.status === 200) { + const url = window.URL.createObjectURL(new Blob([response.data])) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', Referencia + '_FACTURAS_MODIFICA.xls') + document.body.appendChild(link) + link.click() + loadReport() + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) + } + + const downloadExcelPartidas = (Referencia: string) => { + setWaitingMessage(' archivo Excel ') + DSAmazon.GETAmazonPartidasByReference(Referencia) + .then((response: any) => { + if (response.status === 200) { + const url = window.URL.createObjectURL(new Blob([response.data])) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', Referencia + '_PARTIDAS_MODIFICA.xls') + document.body.appendChild(link) + link.click() + loadReport() + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) + } + + const downloadNoPartes = (id: number, Factura: string) => { + DSAmazon.NoPartesAmazonFinal(id) + .then((response: any) => { + if (response.status === 200) { + const url = window.URL.createObjectURL(new Blob([response.data])) + const link = document.createElement('a') + link.href = url + link.setAttribute( + 'download', + 'Plantilla de partes ' + Factura + '.xls' + ) + document.body.appendChild(link) + link.click() + setWaitingDialog(false) + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) + } - const downloadACKFile = (id: number, filename: string) => { - DSAmazon.GETACKFileById(id) + const downloadACKFile = (id: number, filename: string) => { + DSAmazon.GETACKFileById(id) .then((response: any) => { if (response.status === 200) { const url = window.URL.createObjectURL(new Blob([response.data])) const link = document.createElement('a') link.href = url - link.setAttribute('download',filename) + link.setAttribute('download', filename) document.body.appendChild(link) link.click() //loadReport() @@ -184,325 +219,550 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr setShowMsg(true) return }) - } + } + + const downloadExcel = () => { + exportExcel(Data, 'Reporte de EstatusFacturas') + } - const getOnlyDate = (dt: string) => { - return dt ? dt.substring(0, 16) : '' + function exportExcel( + jsonData: DTO2096InvoiceStatus[], + fileName: string + ): void { + let Heading = [ + [ + 'Id', + 'Referencia', + 'ComercialInvoiceDate', + 'InvoiceNumber', + 'Incoterms', + 'HAWB', + 'QtyUnitoOfMeasure', + 'totQty', + 'weightUnitOfMeasure', + 'TotWeight', + 'TotChargeorAllowance', + 'TotCurrencyIsoCode', + 'TotMonetaryAmout', + 'FechaPago', + 'Patente', + 'Aduana', + 'Pedimentos', + 'Estatus', + 'ACK', + 'Clasificador', + 'FechaRecepcion', + 'CantidadASIN' + ] + ] + const dataOnly = jsonData.map( + ({ + id, + referencia, + commercialInvoiceDate, + invoiceNumber, + incoterms, + hawb, + totalInvoiceQuantityUnitOfMeasure, + totalInvoiceQuantity, + totalInvoiceWeightUnitOfMeasure, + totalInvoiceWeight, + totalInvoiceValueChargeOrAllowance, + totalInvoiceValueCurrencyISOCode, + totalInvoiceValueMonetaryAmount, + fPago, + patente, + aduana, + pedimento, + estatus, + archivoACK, + clasificador, + fechaRecepcion, + cantidadASIN + }) => { + return { + id, + referencia, + commercialInvoiceDate, + invoiceNumber, + incoterms, + hawb, + totalInvoiceQuantityUnitOfMeasure, + totalInvoiceQuantity, + totalInvoiceWeightUnitOfMeasure, + totalInvoiceWeight, + totalInvoiceValueChargeOrAllowance, + totalInvoiceValueCurrencyISOCode, + totalInvoiceValueMonetaryAmount, + fPago, + patente, + aduana, + pedimento, + estatus, + archivoACK, + clasificador, + fechaRecepcion, + cantidadASIN + } + } + ) + const Report = dataOnly.map( + ({ + id, + referencia, + commercialInvoiceDate, + invoiceNumber, + incoterms, + hawb, + totalInvoiceQuantityUnitOfMeasure, + totalInvoiceQuantity, + totalInvoiceWeightUnitOfMeasure, + totalInvoiceWeight, + totalInvoiceValueChargeOrAllowance, + totalInvoiceValueCurrencyISOCode, + totalInvoiceValueMonetaryAmount, + fPago, + patente, + aduana, + pedimento, + estatus, + archivoACK, + clasificador, + fechaRecepcion, + cantidadASIN + }) => { + return { + id, + referencia, + commercialInvoiceDate, + invoiceNumber, + incoterms, + hawb, + totalInvoiceQuantityUnitOfMeasure, + totalInvoiceQuantity, + totalInvoiceWeightUnitOfMeasure, + totalInvoiceWeight, + totalInvoiceValueChargeOrAllowance, + totalInvoiceValueCurrencyISOCode, + totalInvoiceValueMonetaryAmount, + fPago, + patente, + aduana, + pedimento, + estatus, + archivoACK, + clasificador, + fechaRecepcion, + cantidadASIN + } + } + ) + const wb = XLSX.utils.book_new() + const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([]) + XLSX.utils.sheet_add_aoa(ws, Heading) + XLSX.utils.sheet_add_json(ws, Report, { origin: 'A2', skipHeader: true }) + XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') + XLSX.writeFile(wb, fileName + '.xlsx') + var range = XLSX.utils.decode_range(ws['!ref?']) + for (var C = range.s.c + 1; C <= range.e.c + 1; ++C) { + var address = XLSX.utils.encode_col(C) + '1' // <-- first row, column number C + if (!ws[address]) continue + ws[address].v = ws[address].v.toUpperCase() } - - return ( -
- - - - - - - - - Operaciones Pagadas - - - - Factura - - setFactura(e.target.value)} - size="sm" - /> - - {loadReport()}}> - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {Data - ? Data.map((MasterData) => { - return ( - <> - { + return dt ? dt.substring(0, 16) : '' + } + + return ( +
+ + + +
+ + + + + Operaciones Pagadas + + + Inicio + + setInicio(e.target.value)} + size="sm" + /> + + Fin + + setFin(e.target.value)} + size="sm" + /> + + Factura + + setFactura(e.target.value)} + onChange={handleFacturaChange} + size="sm" + /> + + { + loadReport() + }} + > + + + + + + + + + + + +
+
idPDFFacturasPartidasArch Excep.No PartesReferenciaCommercial Invoice DateInvoice NumberIncotermsHAWBQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amountFecha pagoPatenteAduanaPedimentoEstatusACK
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {Data + ? Data.map((MasterData) => { + return ( + <> + + - - + - + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - ) - }) - : null} - -
idPDFFacturasPartidasArch Excep.No PartesReferenciaCommercial Invoice DateInvoice NumberIncotermsHAWBQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amountFecha pagoPatenteAduanaPedimentoEstatusACKClasificadorFechaRecepcionCantidadASIN
- + +
{ + downloadPDF( + MasterData.id, + MasterData.invoiceNumber + ) + }} style={{ - textAlign: 'right', - paddingRight: '10px' + visibility: MasterData.estatus.includes( + 'Clasificacion' + ) + ? 'hidden' + : 'visible' }} > - {MasterData.id} -
-
{ - downloadPDF( - MasterData.id, - MasterData.invoiceNumber - ) - }} - style={{visibility: (MasterData.estatus.includes('Clasificacion')) ? 'hidden':'visible'}} + - - - -
-
+ + + +
{ + downloadExcelInvoices(MasterData.referencia) }} > -
{ - downloadExcelInvoices(MasterData.referencia) - }} + - - - -
-
+ + + +
{ + downloadExcelPartidas(MasterData.referencia) }} > -
{ - downloadExcelPartidas(MasterData.referencia) - }} + - - - -
-
+ + + +
{ + setIDFactura(MasterData.id) + setShowModalAnswerFile(true) }} > -
{ - setIDFactura(MasterData.id) - setShowModalAnswerFile(true) - }} + - - - -
-
+ + + +
{ + downloadNoPartes( + MasterData.id, + MasterData.invoiceNumber + ) + }} style={{ - width: '50px', - textAlign: 'center', - visibility: MasterData.referencia - ? 'visible' - : 'hidden' + visibility: MasterData.estatus.includes( + 'Clasificacion' + ) + ? 'hidden' + : 'visible' }} > -
{ - downloadNoPartes( - MasterData.id, - MasterData.invoiceNumber - ) - }} - style={{visibility: (MasterData.estatus.includes('Clasificacion')) ? 'hidden':'visible'}} + - - - -
-
- {MasterData.referencia} - - {MasterData.commercialInvoiceDate} - - {MasterData.invoiceNumber} - - {MasterData.incoterms} - - {MasterData.hawb} - - {MasterData.totalInvoiceQuantityUnitOfMeasure} - - {MasterData.totalInvoiceQuantity} - - {MasterData.totalInvoiceWeightUnitOfMeasure} - - {MasterData.totalInvoiceWeight} - - {MasterData.totalInvoiceValueChargeOrAllowance} - - {MasterData.totalInvoiceValueCurrencyISOCode} - - {MasterData.totalInvoiceValueMonetaryAmount} - - {MasterData.fPago.substring(0,10)} - - {MasterData.patente} - - {MasterData.aduana} - - {MasterData.pedimento} - - {MasterData.estatus} - + + + + {MasterData.referencia} + + {MasterData.commercialInvoiceDate} + + {MasterData.invoiceNumber} + + {MasterData.incoterms} + + {MasterData.hawb} + + {MasterData.totalInvoiceQuantityUnitOfMeasure} + + {MasterData.totalInvoiceQuantity} + + {MasterData.totalInvoiceWeightUnitOfMeasure} + + {MasterData.totalInvoiceWeight} + + {MasterData.totalInvoiceValueChargeOrAllowance} + + {MasterData.totalInvoiceValueCurrencyISOCode} + + {MasterData.totalInvoiceValueMonetaryAmount} + + {MasterData.fPago.substring(0, 10)} + + {MasterData.patente} + + {MasterData.aduana} + + {MasterData.pedimento} + + {MasterData.estatus} + { - downloadACKFile(MasterData.idArchivoACK, MasterData.archivoACK) + downloadACKFile( + MasterData.idArchivoACK, + MasterData.archivoACK + ) }} > {getOnlyDate(MasterData.fhArchivoACK)}
-
-
-
- - { - setWaitingDialog(false) - }} - backdrop="static" - keyboard={false} - size="sm" - dialogClassName={'modal-50w'} - centered - > - - - - - proccessing - Generando {WaitingMessage}... - - - - - { - setShowModalAnswerFile(false) - }} - size={'sm'} - dialogClassName={'modal-50w'} - > - -
- - - - - - - -
-
-
- - { - setShowMsg(false) - }} - /> -
- ); + + {MasterData.clasificador} + + + {MasterData.fechaRecepcion} + + + {MasterData.cantidadASIN} + + + + ) + }) + : null} + + + + + + + { + setWaitingDialog(false) + }} + backdrop="static" + keyboard={false} + size="sm" + dialogClassName={'modal-50w'} + centered + > + + + + + proccessing + Generando {WaitingMessage}... + + + + + { + setShowModalAnswerFile(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ + + + + + + +
+
+
+ + { + setShowMsg(false) + }} + /> + + ) } diff --git a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts index ef2b0ee..935ffea 100644 --- a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts +++ b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts @@ -85,8 +85,8 @@ class AmazonDataService { AmazonFacturasPagadasGET(Inicio: string, Fin: string) { return http.get(`/AmazonInvoice/AmazonFacturasPagadasGET?Inicio=${Inicio}&Fin=${Fin}`) } - AmazonInvoiceStatusGET(Invoice: string) { - return http.get(`/AmazonInvoice/AmazonInvoiceStatusGET?Invoice=${Invoice}`) + AmazonInvoiceStatusGET(Invoice: string , Inicio: string, Fin: string) { + return http.get(`/AmazonInvoice/AmazonInvoiceStatusGET?Invoice=${Invoice}&Inicio=${Inicio}&Fin=${Fin}`) } AmazonInvoicePrioritySET(Id: number, Prioridad: boolean) { return http.get(`/AmazonInvoice/AmazonInvoicePrioritySET?id=${Id}&prioridad=${Prioridad}`)