diff --git a/src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon.tsx b/src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon.tsx index e2b314a..9bbbde4 100644 --- a/src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon.tsx @@ -56,6 +56,7 @@ export default function RptPendingAnswerFromAmazon( }) const [Data, setData] = useState([]) const [ResumeData, setResumeData] = useState([]) + const [AmazonAnswerFile, setAmazonAnswerFile] = useState([]) const [header, setHeader] = useState('') const [IDFactura, setIDFactura] = useState(0) const [Factura, setFactura] = useState('') @@ -65,6 +66,7 @@ export default function RptPendingAnswerFromAmazon( const [WaitingDialog, setWaitingDialog] = useState(false) const [WaitingMessage, setWaitingMessage] = useState('Generando...') const [ShowModalAnswerFile, setShowModalAnswerFile] = useState(false) + const [ConfirmApplyAnswerFile, setConfirmApplyAnswerFile] = useState(false) const [msg, setMsg] = useState('') const msgColor = 'primary' @@ -238,15 +240,16 @@ export default function RptPendingAnswerFromAmazon( }) } - const ApplyAnswerFiles2Invoice = (Files: IFileManager[]) => { - const Filenames= Files.map(element => element.nombreArchivo); - //console.log(Filenames); + const ApplyAnswerFiles2Invoice = () => { + const Filenames = AmazonAnswerFile.map(element => element.nombreArchivo); DSAmazon.ApplyAnswerFile2Invoice(Filenames) .then((response) => { loadReport() + setAmazonAnswerFile([]) setShowModal(false) }) .catch((e: Error) => { + setAmazonAnswerFile([]) setIDFactura(0) setHeader('Error') setMsg('Ocurrio un error ' + e.toString()) @@ -792,7 +795,7 @@ export default function RptPendingAnswerFromAmazon( variant={'danger'} style={{ textAlign: 'center' }} > - Proporcione el archivo de respuesta de Amazon +

Proporcione el archivo de respuesta de Amazon

@@ -805,8 +808,9 @@ export default function RptPendingAnswerFromAmazon( showPreview={3} canEdit={true} Leyenda="Sube archivos de respuesta de Amazon" onAppendMFM={function (Files: IFileManager[]): void { - ApplyAnswerFiles2Invoice(Files) - } } /> + setAmazonAnswerFile(Files) + setConfirmApplyAnswerFile(true) + }}/> @@ -814,6 +818,59 @@ export default function RptPendingAnswerFromAmazon( + { + setConfirmApplyAnswerFile(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ + + +

Desea aplicar el archivo de respuesta de Amazon?

+
+ +
+ +   + + + + + + + + + +
+
+
+ { diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx index bb1664e..2585385 100644 --- a/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx @@ -10,14 +10,8 @@ import { Table } from 'react-bootstrap' import { IconContext } from 'react-icons' -import { - BsChevronDown, - BsChevronRight, - BsFilePdfFill, -} from 'react-icons/bs' -import { - FaAmazon, -} from 'react-icons/fa' +import { BsChevronDown, BsChevronRight, BsFilePdfFill } from 'react-icons/bs' +import { FaAmazon } from 'react-icons/fa' import I2096Headers from '../../../Interfaces/I2096Header' import DSAmazon from '../../../Services/Amazon.Services' import { MsgInformativo } from '../../../../../Utils/Toast/msgInformativo' @@ -34,6 +28,7 @@ import DTO2096LinkInvoice2Reference from '../../../DTO/DTO2096LinkInvoice2Refere import { AiFillFileExcel } from 'react-icons/ai' import RptAmazonLinkInvoice2TrafficDetail from './RptAmazonLinkInvoice2TrafficDetail' import loadingImg from '../../../../../../images/ajaxloader.gif' +import * as XLSX from 'xlsx' export interface IRptAmazonLinkInvoice2TrafficProps {} @@ -75,7 +70,7 @@ export default function RptAmazonLinkInvoice2Traffic( const url = window.URL.createObjectURL(new Blob([response.data])) const link = document.createElement('a') link.href = url - link.setAttribute('download', 'FAC_'+InvoiceNumber+'.pdf') + link.setAttribute('download', 'FAC_' + InvoiceNumber + '.pdf') document.body.appendChild(link) link.click() setWaitingDialog(false) @@ -97,7 +92,7 @@ export default function RptAmazonLinkInvoice2Traffic( const url = window.URL.createObjectURL(new Blob([response.data])) const link = document.createElement('a') link.href = url - link.setAttribute('download', Referencia+'_FACTURAS_MODIFICA.xls') + link.setAttribute('download', Referencia + '_FACTURAS_MODIFICA.xls') document.body.appendChild(link) link.click() loadReport() @@ -119,7 +114,7 @@ export default function RptAmazonLinkInvoice2Traffic( const url = window.URL.createObjectURL(new Blob([response.data])) const link = document.createElement('a') link.href = url - link.setAttribute('download', Referencia+'_PARTIDAS_MODIFICA.xls') + link.setAttribute('download', Referencia + '_PARTIDAS_MODIFICA.xls') document.body.appendChild(link) link.click() loadReport() @@ -140,7 +135,7 @@ export default function RptAmazonLinkInvoice2Traffic( const check4Updates = (IDInvoice: number) => { DSAmazon.SETInvoiceDetailRevalidateParts(IDInvoice) .then((response) => { - DSAmazon.AmazonInvoiceGET(IDInvoice) + DSAmazon.AmazonInvoiceGET(IDInvoice) .then((response) => { dispatch(updateInvoice(response.data[0])) let Invoice: I2096Headers[] = response.data.filter( @@ -163,7 +158,6 @@ export default function RptAmazonLinkInvoice2Traffic( }) } - const changeToggle = (row: I2096Headers) => { let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id) const Obj = { ...Invoice[0] } @@ -174,7 +168,9 @@ export default function RptAmazonLinkInvoice2Traffic( const updateDataGrid = (IDInvoice: number) => { //toggleInvoice(IDInvoice) - let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === IDInvoice) + let Invoice: I2096Headers[] = mInvoices.filter( + (item) => item.id === IDInvoice + ) const Obj = { ...Invoice[0] } Obj.max = !Obj.max dispatch(updateInvoice(Obj)) @@ -218,56 +214,155 @@ export default function RptAmazonLinkInvoice2Traffic( } const asociaFacturasReferencia = () => { - const data : DTO2096LinkInvoice2Reference = { + const data: DTO2096LinkInvoice2Reference = { referencia: Referencia, - facturas : Invoices + facturas: Invoices } DSAmazon.AsignaFacturasReferencia(data) - .then((response: any) => { - setHeader('Confirmacion') - setMsg('Las facturas se asociaron correctamente con la referencia') - //setShowMsg(true) - setInvoices([]) - setShowModal(false) - loadReport() - return - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) + .then((response: any) => { + setHeader('Confirmacion') + setMsg('Las facturas se asociaron correctamente con la referencia') + //setShowMsg(true) + setInvoices([]) + setShowModal(false) + loadReport() + return + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) } const desasociaFacturasReferencia = () => { - const data : DTO2096LinkInvoice2Reference = { + const data: DTO2096LinkInvoice2Reference = { referencia: Referencia, - facturas : Invoices + facturas: Invoices } DSAmazon.AsignaFacturasReferencia(data) - .then((response: any) => { - setHeader('Confirmacion') - setMsg('Las facturas se desasociaron correctamente') - // setShowMsg(true) - setInvoices([]) - setShowModalUnlink(false) - loadReport() - return - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) + .then((response: any) => { + setHeader('Confirmacion') + setMsg('Las facturas se desasociaron correctamente') + // setShowMsg(true) + setInvoices([]) + setShowModalUnlink(false) + loadReport() + return + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) } function getReceiver(Cadena: string, char1: string[1], char2: string[1]) { - return Cadena.slice( - Cadena.indexOf(char1) + 1, - Cadena.lastIndexOf(char2), - ); + return Cadena.slice(Cadena.indexOf(char1) + 1, Cadena.lastIndexOf(char2)) + } + + const downloadExcel = () => { + interface IRptExcel { + id: number + referencia: string + commercialInvoiceDate: string + invoiceNumber: string + receiver: string + incoterms: string + hawb: string + totalInvoiceQuantityUnitOfMeasure: string + totalInvoiceQuantity: number + totalInvoiceWeightUnitOfMeasure: string + totalInvoiceWeight: string + totalInvoiceValueChargeOrAllowance: string + totalInvoiceValueCurrencyISOCode: string + totalInvoiceValueMonetaryAmount: string + totalPartidas: number + } + + const RptExcel: IRptExcel[] = [] + mInvoices.forEach(function (invoice) { + var data: IRptExcel = { + id: invoice.id, + referencia: invoice.referencia, + commercialInvoiceDate: invoice.commercialInvoiceDate, + invoiceNumber: invoice.invoiceNumber, + receiver: getRec(invoice.id), + incoterms: invoice.incoterms, + hawb: invoice.hawb, + totalInvoiceQuantityUnitOfMeasure: + invoice.totalInvoiceQuantityUnitOfMeasure, + totalInvoiceQuantity: invoice.totalInvoiceQuantity, + totalInvoiceWeightUnitOfMeasure: + invoice.totalInvoiceWeightUnitOfMeasure, + totalInvoiceWeight: invoice.totalInvoiceWeight, + totalInvoiceValueChargeOrAllowance: + invoice.totalInvoiceValueChargeOrAllowance, + totalInvoiceValueCurrencyISOCode: + invoice.totalInvoiceValueCurrencyISOCode, + totalInvoiceValueMonetaryAmount: invoice.totalInvoiceValueMonetaryAmount, + totalPartidas: getTotPartidas(invoice.id) + } + RptExcel.push(data) + }) + //console.log(RptExcel) + exportExcel(RptExcel, 'Reporte de trafico - facturas terminadas') + } + + const getRec: any = (IDInvoice: number) => { + const result = mInvoices + .filter((value) => value.id === IDInvoice) + .map((row) => { + return getReceiver(row.detail[0].amazonShipmentReferenceId, '_', '_') + }) + return result[0] + } + + const getTotPartidas: any = (IDInvoice: number) => { + let Tot=0; + const result = mInvoices + .filter((value) => value.id === IDInvoice) + .map((row) => { + return row.detail.length + }) + return result[0] + } + + function exportExcel(jsonData: any[], fileName: string): void { + let Heading = [ + [ + 'id', + 'Referencia', + 'Commercial invoice date', + 'Invoice number', + 'Receiver', + 'Incoterms', + 'HAWB', + 'Qty Unit of measure', + 'Tot qty', + 'Weight unit of measure', + 'Tot weight', + 'Tot charge or allowance', + 'Tot currency ISO code', + 'Tot Monetary amount', + 'Total de partidas' + ] + ] + 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, jsonData, { 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; C <= range.e.c; ++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 ( @@ -284,7 +379,8 @@ export default function RptAmazonLinkInvoice2Traffic( - - + + + + + - @@ -763,7 +922,12 @@ export default function RptAmazonLinkInvoice2Traffic( - @@ -777,9 +941,9 @@ export default function RptAmazonLinkInvoice2Traffic( onHide={() => { setWaitingDialog(false) }} - backdrop='static' + backdrop="static" keyboard={false} - size='sm' + size="sm" dialogClassName={'modal-50w'} centered > @@ -787,7 +951,7 @@ export default function RptAmazonLinkInvoice2Traffic( - proccessing + proccessing Generando {WaitingMessage}... diff --git a/src/Components/Corresponsales/TraficoCorresponsales.tsx b/src/Components/Corresponsales/TraficoCorresponsales.tsx index 7ea8e49..f644610 100644 --- a/src/Components/Corresponsales/TraficoCorresponsales.tsx +++ b/src/Components/Corresponsales/TraficoCorresponsales.tsx @@ -1177,7 +1177,7 @@ export default function TraficoCorresponsales (props:IProps) { { setIDCliente(parseInt(e.target.value)) }} diff --git a/src/Components/Reportes/RptCorresponsalesTraficos.tsx b/src/Components/Reportes/RptCorresponsalesTraficos.tsx index eb6a3cc..67caff4 100644 --- a/src/Components/Reportes/RptCorresponsalesTraficos.tsx +++ b/src/Components/Reportes/RptCorresponsalesTraficos.tsx @@ -415,7 +415,7 @@ export default function RptCorresponsalesTraficos (props: IProps) {
- {Depto === 'Corresponsalias' ? ( + {(Depto === 'Corresponsalias' || Depto ==='Sistemas') ? (