diff --git a/src/Components/Clientes/Amazon/DTO/DTO2096NoParteVerificacion.ts b/src/Components/Clientes/Amazon/DTO/DTO2096NoParteVerificacion.ts new file mode 100644 index 0000000..3f08909 --- /dev/null +++ b/src/Components/Clientes/Amazon/DTO/DTO2096NoParteVerificacion.ts @@ -0,0 +1,9 @@ +export default interface DTO2096NoParteVerificacion { + factura: string, + fFactura: string, + referencia: string, + patente: string, + aduana: string, + pedimento: string, + fPago: string +} \ No newline at end of file diff --git a/src/Components/Clientes/Amazon/Interfaces/I2096NoParte.ts b/src/Components/Clientes/Amazon/Interfaces/I2096NoParte.ts index 4f0378a..5b8486f 100644 --- a/src/Components/Clientes/Amazon/Interfaces/I2096NoParte.ts +++ b/src/Components/Clientes/Amazon/Interfaces/I2096NoParte.ts @@ -12,7 +12,7 @@ export default interface I2096NoParte { paisOrigen: string unidadMedidaFactura: string unidadMedidaCOVE: string - FHActualizacion: string + fhActualizacion: string usuarioActualizacion: number activo: number } diff --git a/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx b/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx index 839dd33..1c8396e 100644 --- a/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx +++ b/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx @@ -12,12 +12,15 @@ import { useDispatch, useSelector } from 'react-redux' import { useEffect, useState } from 'react' import { MsgInformativo } from '../../../Utils/Toast/msgInformativo' import { IconContext } from 'react-icons' -import { BsFillPencilFill, BsFillTrashFill } from 'react-icons/bs' +import { BsFillPencilFill } from 'react-icons/bs' + import I2096PaisClave from '../Interfaces/I2096PaisClave' import DTO2096PerfilesParecidos from '../DTO/DTO2096PerfilesParecidos' import DSAmazon from '../Services/Amazon.Services' import DTO2096NoParte from '../DTO/DTO2096NoParte' import I2096NoParteLog from '../Interfaces/I2096NoParteLog' +import { HiClipboardCheck } from 'react-icons/hi' +import DTO2096NoParteVerificacion from '../DTO/DTO2096NoParteVerificacion' export interface IAmazonNoPartesProps {} export default function AmazonNoPartes(props: IAmazonNoPartesProps) { @@ -32,8 +35,10 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { const [NoParteLOG, setNoParteLOG] = useState([]) const [PaisClaves, setPaisClaves] = useState([]) const [Data, setData] = useState([]) + const [DataNoParteVerificacion, setDataNoParteVeriifcacion] = useState([]) const [ShowModal, setShowModal] = useState(false) const [ShowModalLog, setShowModalLog] = useState(false) + const [ShowModalNoParteVerificacion, setShowModalNoParteVerificacion] = useState(false) const [header, setHeader] = useState('') const [msgColor, setMsgColor] = useState('primary') const [show, setShowMsg] = useState(false) @@ -68,6 +73,31 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { ), sortable: true }, + { + name: '', + width: '60px', + cell: (row: I2096NoParte) => ( + + +
{ + loadDataNoParteVerificacion(row) + setShowModalNoParteVerificacion(true) + + }} + > + + + +
+ +
+ ), + sortable: true + }, { name: '', width: '50px', @@ -136,13 +166,13 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { { name: 'UMF', width: '80px', - selector: (row: I2096NoParte) => row.unidadMedidaFactura, + selector: (row: I2096NoParte) => row.unidadMedidaFactura ? row.unidadMedidaFactura : '', sortable: true }, { name: 'UMC', width: '80px', - selector: (row: I2096NoParte) => row.unidadMedidaCOVE, + selector: (row: I2096NoParte) => row.unidadMedidaCOVE ? row.unidadMedidaCOVE : '', sortable: true }, { @@ -161,8 +191,8 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { }, { name: 'Fecha / Hora', - width: '200px', - selector: (row: I2096NoParte) => row.fechaConfirmacion, + width: '220px', + selector: (row: I2096NoParte) => row.fhActualizacion, wrap: true, sortable: true }, @@ -232,6 +262,50 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { } ] + const colsNoPartesVerificacion = [ + { + name: 'Factura', + width: '350px', + cell: (row: DTO2096NoParteVerificacion) => row.factura, + sortable: true + }, + { + name: 'Fecha factura', + width: '130px', + cell: (row: DTO2096NoParteVerificacion) => row.fFactura, + sortable: true + }, + { + name: 'Referencia', + width: '140px', + cell: (row: DTO2096NoParteVerificacion) => row.referencia, + sortable: true, + center: true + }, + { + name: 'Patente', + width: '110px', + cell: (row: DTO2096NoParteVerificacion) => row.patente, + sortable: true, + center: true + }, + { + name: 'Aduana', + width: '100px', + cell: (row: DTO2096NoParteVerificacion) => row.aduana, + wrap: true, + sortable: true, + }, + { + name: 'Pedimento', + width: '150px', + cell: (row: DTO2096NoParteVerificacion) => row.pedimento, + wrap: true, + sorteable: true + } + ] + + const openLink = (item: string) => { window.open('https://www.amazon.com/dp/' + item) } @@ -274,14 +348,27 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { setTipoOperacion(row.tipoOperacion) setFraccion(row.fraccion.substring(0, 8)) setSubdivision(row.subdivision) - setPaisOrigen(row.paisOrigen) + setPaisOrigen(row.paisOrigen ? row.paisOrigen : '') setDescripcionFactura(row.descripcionFactura) setDescripcionAgenteAduanal(row.descripcionAgenteAduanal) - setUMF(row.unidadMedidaFactura) - setFechaInsercion(row.FHActualizacion) + setUMF(row.unidadMedidaFactura ? row.unidadMedidaFactura : '') + setFechaInsercion(row.fhActualizacion) setClasificador(getUser(row.usuarioActualizacion)) } + const loadDataNoParteVerificacion = (row: I2096NoParte) => { + AmazonDS.NoParteVerificacionGET(row.parte) + .then((response) => { + setDataNoParteVeriifcacion(response.data) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error: ' + e) + setShowMsg(true) + return + }) + } + const loadPaisesClaves = () => { AmazonDS.PaisClavesGET() .then((response) => { @@ -309,7 +396,6 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { } AmazonDS.NoPartesGet(Search) .then((response) => { - //console.log(JSON.stringify(response.data)) dispatch(populateNoPartes(response.data)) }) .catch((e: Error) => { @@ -552,6 +638,40 @@ export default function AmazonNoPartes(props: IAmazonNoPartesProps) { {/* */} + + { + setShowModalNoParteVerificacion(false) + }} + size={'sm'} + dialogClassName={'modal-90w'} + > + + No Parte: {Search} + + + + + + + + {/* */} + + { - setShowModalW(false) - setWaitingMessage('Archivo de excepciones') - setWaitingDialog(true) - DSAmazon.ExceptionsFileAmazonGET(IDFactura) - .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', 'Excepciones '+Factura+'.xlsx') - document.body.appendChild(link) - link.click() - DSAmazon.EnviaEsperaRespuestaAmazon(IDFactura) - .then((response) => { - loadReport() - setWaitingDialog(false) - }) - .catch((e: Error) => { - setHeader('Error') - setMsg( - 'Ocurrio un error, no se pudo actualizar informacion' + - e.message.toString() - ) - setShowMsg(true) - return - }) + DSAmazon.SETInvoiceDetail2Unchecked(row.id) + .then((response) => { + DSAmazon.AmazonInvoiceGET(row.id) + .then((response) => { + if (response.data) { + //dispatch(updateInvoice(response.data[0])) + const Obj = { ...response.data[0] } + console.log(JSON.stringify(Obj)) + Obj.max = !Obj.max + dispatch(updateInvoice(Obj)) + return } }) .catch((e: Error) => { setHeader('Error') setMsg('Ocurrio un error') - setShowMsg(true) + setShowModalDeleteInvoice(false) return }) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowModalDeleteInvoice(false) + return + }) } - const descargaPantillaPartes = () => { - let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === IDFactura) - let TotalPartidas = Invoice[0].detail.length - let TotalFraccionesPreviamenteRegistradas = Invoice[0].detail.filter((item) => item.confirmaFraccion === 3).length - if (TotalPartidas===TotalFraccionesPreviamenteRegistradas) { - setShowModal(false) - DSAmazon.TerminaClasificarFactura(IDFactura) - .then((response) => { - loadReport() - setWaitingDialog(false) + const descargaArchivoExcepciones = () => { + setShowModalW(false) + setWaitingMessage('Archivo de excepciones') + setWaitingDialog(true) + DSAmazon.ExceptionsFileAmazonGET(IDFactura) + .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', 'Excepciones ' + Factura + '.xlsx') + document.body.appendChild(link) + link.click() */ + DSAmazon.EnviaEsperaRespuestaAmazon(IDFactura) + .then((response) => { + loadReport() + setWaitingDialog(false) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg( + 'Ocurrio un error, no se pudo actualizar informacion' + + e.message.toString() + ) + setShowMsg(true) + return + }) + } }) .catch((e: Error) => { setHeader('Error') - setMsg( - 'Ocurrio un error, no se pudo actualizar informacion' + - e.message.toString() - ) + setMsg('Ocurrio un error') setShowMsg(true) return }) + } + + const descargaPantillaPartes = () => { + let Invoice: I2096Headers[] = mInvoices.filter( + (item) => item.id === IDFactura + ) + let TotalPartidas = Invoice[0].detail.length + let TotalFraccionesPreviamenteRegistradas = Invoice[0].detail.filter( + (item) => item.confirmaFraccion === 3 + ).length + if (TotalPartidas === TotalFraccionesPreviamenteRegistradas) { + setShowModal(false) + DSAmazon.TerminaClasificarFactura(IDFactura) + .then((response) => { + loadReport() + setWaitingDialog(false) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg( + 'Ocurrio un error, no se pudo actualizar informacion' + + e.message.toString() + ) + setShowMsg(true) + return + }) } else { - setShowModal(false) - setWaitingMessage('Plantilla de partes') - setWaitingDialog(true) - DSAmazon.NoPartesAmazon2SIRGET(IDFactura) - .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() - DSAmazon.TerminaClasificarFactura(IDFactura) - .then((response) => { - loadReport() - setWaitingDialog(false) - }) - .catch((e: Error) => { - setHeader('Error') - setMsg( - 'Ocurrio un error, no se pudo actualizar informacion' + - e.message.toString() - ) - setShowMsg(true) - return - }) - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } + setShowModal(false) + setWaitingMessage('Plantilla de partes') + setWaitingDialog(true) + DSAmazon.NoPartesAmazon2SIRGET(IDFactura) + .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() + DSAmazon.TerminaClasificarFactura(IDFactura) + .then((response) => { + loadReport() + setWaitingDialog(false) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg( + 'Ocurrio un error, no se pudo actualizar informacion' + + e.message.toString() + ) + setShowMsg(true) + return + }) + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) + } } const facturaTerminada = (row: I2096Headers) => { @@ -187,13 +230,76 @@ export default function RtpAmazonPendingInvoices( setFactura(row.invoiceNumber) setShowModalW(true) } else if (response.data.estatus === 2) { - setIDFactura(row.id) - setFactura(row.invoiceNumber) + setIDFactura(row.id) + setFactura(row.invoiceNumber) setShowModal(true) } }) } + const eliminaFactura = () => { + DSAmazon.EliminaFactura(IDFactura) + .then((response) => { + if (response.data) { + setIDFactura(0) + setFactura('') + setShowModalDeleteInvoice(false) + loadReport() + return + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowModalDeleteInvoice(false) + return + }) + } + + const syncInvoicesInFilePath = () => { + setWaitingDialog(true) + DSAmazon.UploadAndSyncAmazonInvoicesInFilePath() + .then((response) => { + if (response.data) { + setIDFactura(0) + setFactura('') + setShowModalInvoiceFile(false) + setWaitingDialog(false) + loadReport() + return + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowModalDeleteInvoice(false) + setWaitingDialog(false) + return + }) + } + + const syncInvoicesByFTP = () => { + setWaitingDialog(true) + DSAmazon.UploadAndSyncAmazonInvoicesByFTP() + .then((response) => { + if (response.data) { + setIDFactura(0) + setFactura('') + setShowModalInvoiceFile(false) + setWaitingDialog(false) + loadReport() + return + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowModalDeleteInvoice(false) + setWaitingDialog(false) + return + }) + } + return (
@@ -203,11 +309,53 @@ export default function RtpAmazonPendingInvoices( - {' '} + CLASIFICACION : facturas pendientes - + + + + { + setShowModalInvoiceFile(true) + }} + > + + + + + + { + syncInvoicesByFTP() + }} + > + + + + + + @@ -251,9 +399,11 @@ export default function RtpAmazonPendingInvoices( ) { return a } else if ( - ['Clasificador lider', 'Administrador', 'Clasificador'].includes( - Perfil - ) + [ + 'Clasificador lider', + 'Administrador', + 'Sistemas' + ].includes(Perfil) ) { return a } @@ -315,6 +465,29 @@ export default function RtpAmazonPendingInvoices( {MasterData.invoiceNumber} + { + setIDFactura(MasterData.id) + setFactura(MasterData.invoiceNumber) + setShowModalDeleteInvoice(true) + }} + > + + + + Unit Net Weight - - + { @@ -736,9 +908,9 @@ export default function RtpAmazonPendingInvoices( onHide={() => { setWaitingDialog(false) }} - backdrop='static' + backdrop="static" keyboard={false} - size='sm' + size="sm" dialogClassName={'modal-50w'} centered > @@ -746,11 +918,109 @@ export default function RtpAmazonPendingInvoices( - proccessing + proccessing Generando {WaitingMessage}... + + { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ + + + + ¿Esta seguro de eliminar esta factura: {Factura}? + + + + + + + + + + + + +
+
+
+ + { + setShowModalInvoiceFile(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ + + + Proporcione la(facturas) que llegaron por correo en el proceso + de Amazon + + + + + + + + + + + + + + + + +
+
+
+ { - DSAmazon.ArchivoRespuestaAmazon(IDFactura, idFile) - .then((response) => { - }) - .catch((e: Error) => { - setIDFactura(0) - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } */ - return (
@@ -748,6 +735,7 @@ export default function RptPendingAnswerFromAmazon(
+ { diff --git a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts index 2feddc5..77036dc 100644 --- a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts +++ b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts @@ -17,11 +17,15 @@ import I2096NoParteLog from '../Interfaces/I2096NoParteLog' import DTO2096TraficoFieldsUpdate from '../DTO/DTO2096TraficoFieldsUpdate' import DTO2096RELParteFactura from '../DTO/DTO2096RELParteFactura' import DTO2096RptPayedOperations from '../DTO/DTO2096RptPayedOperations' +import DTO2096NoParteVerificacion from '../DTO/DTO2096NoParteVerificacion' class AmazonDataService { AmazonPendingClasificationInvoiceGET() { return http.get(`/AmazonInvoice/AmazonPendingClasificationInvoiceGet`) } + AmazonInvoiceGET(id: number) { + return http.get(`/AmazonInvoice/AmazonInvoiceGET?id=${id}`) + } InvoicePendingFromAmazonGET() { return http.get(`/AmazonInvoice/InvoicePendingFromAmazonGET`) } @@ -34,9 +38,9 @@ class AmazonDataService { SeRecibioRespuestaDeAmazon(id: number) { return http.get(`/AmazonInvoice/SeRecibioRespuestaDeAmazon?id=${id}`) } - /*SePuedeTerminardeClasificarFacturaEsperandoRespuesta(id: number) { - return http.get(`/AmazonInvoice/SePuedeTerminardeClasificarFacturaEsperandoRespuesta?id=${id}`) - } */ + EliminaFactura(id: number) { + return http.delete(`/AmazonInvoice/AmazonInvoiceDelete?id=${id}`) + } EnviaEsperaRespuestaAmazon(id: number) { return http.get(`/AmazonInvoice/EnviaEsperaRespuestaAmazon?id=${id}`) } @@ -161,11 +165,23 @@ class AmazonDataService { NoPartesLogGET(id: number) { return http.get(`/AmazonInvoice/NoPartesLogGET?id=${id}`) } + NoParteVerificacionGET(Parte: string) { + return http.get(`/AmazonInvoice/NoParteVerificacionGET?Parte=${Parte}`) + } PerfilesParecidosGet(Perfil: string) { return http.get(`/Usuarios/Catalogo/Usuarios/PerfilesParecidos?Perfil=${Perfil}`) } AsignaFacturaClasificador(IdUsuario: number, IdFactura: number) { return http.put(`/AmazonInvoice/AsignaFactura?IdUsuario=${IdUsuario}&IdFactura=${IdFactura}`) } + UploadAndSyncAmazonInvoicesInFilePath() { + return http.get(`/AmazonInvoice/SyncInvoicesInFilePath`) + } + UploadAndSyncAmazonInvoicesByFTP() { + return http.get(`/AmazonInvoice/SyncInvoicesByFTP`) + } + SETInvoiceDetail2Unchecked(id: number) { + return http.get(`/AmazonInvoice/SETInvoiceDetail2Unchecked?id=${id}`) + } } export default new AmazonDataService() diff --git a/src/Components/Dashboard/DashboardClasificacion.tsx b/src/Components/Dashboard/DashboardClasificacion.tsx index c9cd9ed..908ef7d 100644 --- a/src/Components/Dashboard/DashboardClasificacion.tsx +++ b/src/Components/Dashboard/DashboardClasificacion.tsx @@ -111,7 +111,7 @@ export function DashboardClasificacion(props: IDashboardClasificacionProps) { to='../RptPendingAnswerFromAmazon' style={{ textDecoration: 'none', float: 'left' }} > - Pendientes de respuesta ({PendientesRespuesta}) + Facturas con excepciones ({PendientesRespuesta}) diff --git a/src/store/features/Clientes/2096/AmazonNoPartes.ts b/src/store/features/Clientes/2096/AmazonNoPartes.ts index d957446..d894995 100644 --- a/src/store/features/Clientes/2096/AmazonNoPartes.ts +++ b/src/store/features/Clientes/2096/AmazonNoPartes.ts @@ -8,6 +8,8 @@ export const AmazonNoPartesSlice = createSlice({ initialState: initialState, reducers: { populateNoPartes : (state, action: PayloadAction) => { + const newArr = state.NoPartes.filter(data => data.id === 0); + state.NoPartes=newArr action.payload.forEach(newItem => { var Existe = state.NoPartes.find(function(onMemoryItem) { return onMemoryItem.id === newItem.id;