diff --git a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx index ba4e9ce..c86fced 100644 --- a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx +++ b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx @@ -48,13 +48,10 @@ export function ComboDescripcion(props: IComboDescripcionProps) { descripcion: Descripcion, confirmaDescripcion: Validacion } - DSAmazon.SetDescripcion(data) + DSAmazon.DescripcionSET(data) .then((response) => { UpdateInfo() setShowModal(false) - /* setHeader('Confirmacion') - setMsg('La descripcion se ha guardado correctamente') - setShowMsg(true) */ return }) .catch((e: Error) => { @@ -126,7 +123,7 @@ export function ComboDescripcion(props: IComboDescripcionProps) { confirmaDescripcion: Validacion } setDescripcion(props.DescripcionOriginal) - DSAmazon.SetDescripcion(data) + DSAmazon.DescripcionSET(data) .then((response) => { UpdateInfo() setShowModal(false) diff --git a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx index d48a90c..2fb9aed 100644 --- a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx +++ b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx @@ -107,7 +107,7 @@ export function ComboFraccion(props: IComboFraccionProps) { fraccion: Fraccion, confirmaFraccion: Validacion } - DSAmazon.SetFraccion(data) + DSAmazon.FraccionSET(data) .then((response) => { UpdateInfo(response.data) return @@ -120,7 +120,7 @@ export function ComboFraccion(props: IComboFraccionProps) { }, [Validacion, UserChanged]) const saveFraccion = () => { - DSAmazon.GetValidaFraccion(Fraccion) + DSAmazon.ValidaFraccionGET(Fraccion) .then((response) => { if (response.data.respuesta === 'Si') { const data: DTO2096Fraccion = { @@ -128,7 +128,7 @@ export function ComboFraccion(props: IComboFraccionProps) { fraccion: Fraccion, confirmaFraccion: Validacion } - DSAmazon.SetFraccion(data) + DSAmazon.FraccionSET(data) .then((response) => { console.log('respuesta de set fraccion:'+JSON.stringify(response.data)) UpdateInfo(response.data) diff --git a/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx b/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx index 0c2fa8d..35c290b 100644 --- a/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx +++ b/src/Components/Clientes/Amazon/Reportes/AmazonNoPartes.tsx @@ -4,8 +4,6 @@ import DataTable from 'react-data-table-component' import I2096NoParte from '../Interfaces/I2096NoParte' import AmazonDS from '../Services/Amazon.Services' import { - addNoPartes, - deleteNoPartes, populateNoPartes } from '../../../../store/features/Clientes/2096/AmazonNoPartes' import { RootState } from '../../../../store/store' @@ -153,7 +151,7 @@ export function AmazonNoPartes(props: IAmazonNoPartesProps) { } useEffect(() => { - AmazonDS.Get$Pais$Claves() + AmazonDS.PaisClavesGET() .then((response) => { setPaisClaves(response.data) }) diff --git a/src/Components/Clientes/Amazon/Reportes/RptAmazonFinishedClasificationInvoices.tsx b/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoices.tsx similarity index 87% rename from src/Components/Clientes/Amazon/Reportes/RptAmazonFinishedClasificationInvoices.tsx rename to src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoices.tsx index e680e74..020cf03 100644 --- a/src/Components/Clientes/Amazon/Reportes/RptAmazonFinishedClasificationInvoices.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoices.tsx @@ -2,23 +2,28 @@ import { useEffect, useState } from 'react' import { Button, Card, Col, Form, Row, Table } from 'react-bootstrap' import { IconContext } from 'react-icons' import { BsChevronDown, BsChevronRight, BsSearch } from 'react-icons/bs' -import { FaCheckCircle, FaFileExcel, FaQuestionCircle } from 'react-icons/fa' +import { + FaAmazon, + FaCheckCircle, + FaFileExcel, + FaQuestionCircle +} from 'react-icons/fa' import { ImCross } from 'react-icons/im' -import { ComboDescripcion } from '../Components/ComboSelect/ComboDescripcion' -import { ComboFraccion } from '../Components/ComboSelect/ComboFraccion' -import { TextBoxFraccion } from '../Components/TextBox/TextBoxFraccion' -import I2096Detail from '../Interfaces/I2096Detail' -import I2096Headers from '../Interfaces/I2096Header' -import DSAmazon from '../Services/Amazon.Services' +import { ComboDescripcion } from '../../Components/ComboSelect/ComboDescripcion' +import { ComboFraccion } from '../../Components/ComboSelect/ComboFraccion' +import { TextBoxFraccion } from '../../Components/TextBox/TextBoxFraccion' +import I2096Detail from '../../Interfaces/I2096Detail' +import I2096Headers from '../../Interfaces/I2096Header' +import DSAmazon from '../../Services/Amazon.Services' import * as XLSX from 'xlsx' -import DTO2096PrevioExcel from '../DTO/DTO2096PrevioExcel' -import { MsgInformativo } from '../../../Utils/Toast/msgInformativo' -import { RootState } from '../../../../store/store' +import DTO2096PrevioExcel from '../../DTO/DTO2096PrevioExcel' +import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' +import { RootState } from '../../../../../store/store' import { initializeInvoice, populateInvoices, updateInvoice -} from '../../../../store/features/Clientes/2096/AmazonInvoices' +} from '../../../../../store/features/Clientes/2096/AmazonInvoices' import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail' // Redux import { useDispatch, useSelector } from 'react-redux' @@ -50,7 +55,7 @@ export default function RptAmazonFinishedInvoices( } const loadReport = () => { - DSAmazon.AmazonFinishedClasificationInvoice$GET() + DSAmazon.AmazonFinishedClasificationInvoiceGET() .then((response) => { dispatch(initializeInvoice([])) dispatch(populateInvoices(response.data)) @@ -61,10 +66,10 @@ export default function RptAmazonFinishedInvoices( } const downloadExcel = (id: number) => { - DSAmazon.TerminaFactura(id) + DSAmazon.SePuedeTerminardeClasificarFactura(id) .then((response) => {}) .catch((e: Error) => {}) - DSAmazon.GetNoPartesAmazon2SIR(id) + DSAmazon.NoPartesAmazon2SIRGET(id) .then((response: any) => { if (response.status === 200) { const url = window.URL.createObjectURL(new Blob([response.data])) @@ -94,21 +99,6 @@ export default function RptAmazonFinishedInvoices( dispatch(updateInvoice(Obj)) } - const filtraReporte = (e: any) => { - /* setFiltro(e.target.value) - if (e.target.value.length > 0) { - setData( - Data.filter(function (row) { - return row.invoiceNumber - .toLowerCase() - .includes(e.target.value.toLocaleLowerCase()) - }) - ) - } else { - setData(DataOriginal) - } */ - } - const openLink = (item: string) => { window.open('https://www.amazon.com/dp/' + item) } @@ -117,56 +107,15 @@ export default function RptAmazonFinishedInvoices( - - Amazon: facturas terminadas + + + + + {' '} + CLASIFICACION : facturas terminadas + - {/* Inicio - setInicio(e.target.value)} - size="sm" - /> - Hasta - setFin(e.target.value)} - size="sm" - /> */} - {/* - - - - { - filtraReporte(e) - }} - /> - */} @@ -186,11 +135,11 @@ export default function RptAmazonFinishedInvoices( Commercial Invoice Date Invoice Number - Trailer Number + {/* Trailer Number Trailer Id Por Of Loading Port of entry - Payments Terms + Payments Terms */} Incoterms HAWB Qty Unit of measure @@ -200,6 +149,7 @@ export default function RptAmazonFinishedInvoices( Tot Charge or allowance Tot currency ISO code Tot Monetary amount + Total de partidas @@ -261,7 +211,7 @@ export default function RptAmazonFinishedInvoices( {MasterData.invoiceNumber} - + {/* {MasterData.trailerNumber} @@ -275,7 +225,7 @@ export default function RptAmazonFinishedInvoices( {MasterData.paymentsTerms} - + */} {MasterData.incoterms} @@ -303,6 +253,18 @@ export default function RptAmazonFinishedInvoices( {MasterData.totalInvoiceValueMonetaryAmount} + + {mInvoices + .filter((value) => value.id === MasterData.id) + .map((row) => { + return row.detail.length + })} + {MasterData.max ? ( Valida + + Confirme fraccion + Qty Shipped + + Unit of measure + { - DSAmazon.AmazonPendingClasificationInvoice$GET() + DSAmazon.AmazonPendingClasificationInvoiceGET() .then((response) => { dispatch(initializeInvoice([])) dispatch(populateInvoices(response.data)) @@ -62,33 +62,34 @@ export default function RtpAmazonPendingInvoices( } const downloadExcel = (id: number) => { - DSAmazon.TerminaFactura(id) - .then((response) => {}) - .catch((e: Error) => {}) - DSAmazon.GetNoPartesAmazon2SIR(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.xlsx') - document.body.appendChild(link) - link.click() - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return + DSAmazon.TerminaClasificarFactura(id) + .then((response) => { + DSAmazon.NoPartesAmazon2SIRGET(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.xlsx') + document.body.appendChild(link) + link.click() + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) }) + .catch((e: Error) => {}) } const downloadExceptionsFile = (id: number) => { - DSAmazon.TerminaFactura(id) + DSAmazon.SePuedeTerminardeClasificarFactura(id) .then((response) => {}) .catch((e: Error) => {}) - DSAmazon.Get$ExceptionsFile$Amazon(id) + DSAmazon.ExceptionsFileAmazonGET(id) .then((response: any) => { if (response.status === 200) { const url = window.URL.createObjectURL(new Blob([response.data])) @@ -141,7 +142,7 @@ export default function RtpAmazonPendingInvoices( } const facturaTerminada = (row: I2096Headers) => { - DSAmazon.Se$Puede$Terminar$Factura(row.id) + DSAmazon.SePuedeTerminardeClasificarFactura(row.id) .then((response) => { if (response.data.respuesta.includes('lista')) { setIDFactura(row.id) @@ -169,8 +170,13 @@ export default function RtpAmazonPendingInvoices( - - Amazon: facturas pendientes + + + + + {' '} + CLASIFICACION : facturas pendientes + @@ -187,22 +193,23 @@ export default function RtpAmazonPendingInvoices( - + - + - - - - - - - + + + + + + + + @@ -244,7 +251,6 @@ export default function RtpAmazonPendingInvoices( )} - - {/* */} @@ -323,6 +326,18 @@ export default function RtpAmazonPendingInvoices( + {MasterData.max ? ( Qty Shipped + + + + - Amazon: facturas pendientes - - - - - - - - - - - - -
-
id Commercial Invoice DateInvoice NumberInvoice Number Name IncotermsQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amountQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amountTotal de partidas
{MasterData.id} {existsExeptions(MasterData.id) > 0 ? ( @@ -299,9 +305,6 @@ export default function RtpAmazonPendingInvoices( {MasterData.incoterms} - {MasterData.hawb} - {MasterData.totalInvoiceQuantityUnitOfMeasure} {MasterData.totalInvoiceValueMonetaryAmount} + {mInvoices + .filter((value) => value.id === MasterData.id) + .map((row) => { + return row.detail.length + })} +
+ Unit Of measure + Unit Net Weight { editArray(id, !props.detail.autorizado) setShowModal(false) @@ -199,7 +197,7 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -356,6 +354,14 @@ export default function RtpAmazonPendingInvoivesDetail( > {props.detail.quantity} + {props.detail.weightValue} + {props.detail.netWeightUnitOfMeasure} state.AmazonInvoices.Invoice - ) - const [header, setHeader] = useState('') - const [IDFactura, setIDFactura] = useState(0) - const [show, setShowMsg] = useState(false) - const [ShowModal, setShowModal] = useState(false) - const [msg, setMsg] = useState('') - const msgColor = 'primary' - - function currentDate(days: number): string { - var today = new Date() - today.setDate(today.getDate() + days) - var dd = String(today.getDate()).padStart(2, '0') - var mm = String(today.getMonth() + 1).padStart(2, '0') - var yyyy = today.getFullYear() - return yyyy + '-' + mm + '-' + dd - } - - const loadReport = () => { - DSAmazon.AmazonPendingTraficInvoice$GET() - .then((response) => { - dispatch(initializeInvoice([])) - dispatch(populateInvoices(response.data)) - }) - .catch((e: Error) => { - alert('Ocurrio un error' + e.message.toString()) - }) - } - - const downloadExcel = (id: number) => { - DSAmazon.TerminaFactura(id) - .then((response) => {}) - .catch((e: Error) => {}) - DSAmazon.GetNoPartesAmazon2SIR(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.xlsx') - document.body.appendChild(link) - link.click() - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } - - const downloadExceptionsFile = (id: number) => { - DSAmazon.TerminaFactura(id) - .then((response) => {}) - .catch((e: Error) => {}) - DSAmazon.Get$ExceptionsFile$Amazon(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', - 'Formato de consultas (Exceptions Handling 2021).xlsx' - ) - document.body.appendChild(link) - link.click() - } - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - } - - useEffect(() => { - loadReport() - }, []) - - const changeToggle = (row: I2096Headers) => { - let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id) - const Obj = { ...Invoice[0] } - Obj.max = !Obj.max - dispatch(updateInvoice(Obj)) - } - - const openLink = (item: string) => { - window.open('https://www.amazon.com/dp/' + item) - } - - const existsExeptions = (IDMaster: number) => { - const Exceptions = mInvoices - .filter((element) => - element.detail.some((sub) => sub.idHeader === IDMaster) - ) - .map((element) => { - let newElt = Object.assign({}, element) // copies element - return newElt.detail.filter( - (child) => child.idHeader === IDMaster && !child.autorizado - ) - }) - console.log(JSON.stringify(Exceptions[0])) - return Exceptions[0].length ? Exceptions[0].length : 0 - } - - const facturaTerminada = (row: I2096Headers) => { - DSAmazon.Se$Puede$Terminar$Factura(row.id) - .then((response) => { - if (response.data.respuesta.includes('lista')) { - setIDFactura(row.id) - setShowModal(true) - return - } else { - setIDFactura(0) - setHeader('Informativo') - setMsg(response.data.respuesta) - setShowMsg(true) - return - } - }) - .catch((e: Error) => { - setIDFactura(0) - setHeader('Error') - setMsg('Ocurrio un error') - setShowMsg(true) - return - }) - - } - - return ( -
- - - -
- - - - - -{/* - */} - - - - - - - - - - - - - - - {mInvoices - ? mInvoices.map((MasterData) => { - return ( - <> - - - - - - - - - - - - - - - - - {MasterData.max ? ( - - - - ) : null} - - ) - }) - : null} - -
idCommercial Invoice DateInvoice NumberNameIncotermsQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amount
{ - changeToggle(MasterData) - }} - > - {MasterData.max === true ? ( - - - - ) : ( - - - - )} - {MasterData.id} - { - facturaTerminada(MasterData) - } - } - label="" - /> - - {MasterData.commercialInvoiceDate} - - {MasterData.invoiceNumber} - - {MasterData.name} - - {MasterData.incoterms} - - {MasterData.totalInvoiceQuantityUnitOfMeasure} - - {MasterData.totalInvoiceQuantity} - - {MasterData.totalInvoiceWeightUnitOfMeasure} - - {MasterData.totalInvoiceWeight} - - {MasterData.totalInvoiceValueChargeOrAllowance} - - {MasterData.totalInvoiceValueCurrencyISOCode} - - {MasterData.totalInvoiceValueMonetaryAmount} -
- - - - - - - - - - - - - - - - - - - - - - - {mInvoices.map((MD) => { - return ( - <> - {MD.detail - .filter( - (detail) => - MasterData.id === - detail.idHeader - ) - .map((detail) => { - return ( - - ) - })} - - ) - })} - -
- Item Id - - Item Description - - Fraccion GEMCO - - Descripcion GEMCO - - Country of Origin - - ProductGroup - - Brand - - Model - - Unit Measure - - Qty Shipped - - Unit Net Weight - - Unit Cost - - Total value - - Sight line - - Comentarios -
-
- -
-
- { - setShowModal(false) - }} - size={'sm'} - dialogClassName={'modal-50w'} - > - -
- - - - - La factura esta lista para terminarse, desea terminarla? - - - - - - - - - - - - -
-
-
- { - setShowMsg(false) - }} - /> - - ) -} diff --git a/src/Components/Clientes/Amazon/Reportes/RptAmazonPendingTraficInvoiceDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx similarity index 60% rename from src/Components/Clientes/Amazon/Reportes/RptAmazonPendingTraficInvoiceDetail.tsx rename to src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx index ada699a..1cd626a 100644 --- a/src/Components/Clientes/Amazon/Reportes/RptAmazonPendingTraficInvoiceDetail.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx @@ -15,47 +15,49 @@ import { import { IconContext } from 'react-icons' import { FaCheckCircle, FaQuestionCircle } from 'react-icons/fa' import { ImCross } from 'react-icons/im' -import { MsgInformativo } from '../../../Utils/Toast/msgInformativo' -import { ComboDescripcion } from '../Components/ComboSelect/ComboDescripcion' -import { ComboFraccion } from '../Components/ComboSelect/ComboFraccion' -import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza' -import I2096Detail from '../Interfaces/I2096Detail' -import I2096Headers from '../Interfaces/I2096Header' -import DSAmazon from '../Services/Amazon.Services' +import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' +import { ComboDescripcion } from '../../Components/ComboSelect/ComboDescripcion' +import { ComboFraccion } from '../../Components/ComboSelect/ComboFraccion' +import DTO2096ItemAutoriza from '../../DTO/DTO2096ItemAutoriza' +import I2096Detail from '../../Interfaces/I2096Detail' +import I2096Headers from '../../Interfaces/I2096Header' +import DSAmazon from '../../Services/Amazon.Services' // Redux -import { RootState } from '../../../../store/store' +import { RootState } from '../../../../../store/store' import { useDispatch, useSelector } from 'react-redux' -import { - updateInvoice, -} from '../../../../store/features/Clientes/2096/AmazonInvoices' +import { updateInvoice } from '../../../../../store/features/Clientes/2096/AmazonInvoices' import * as CurrencyFormat from 'react-currency-format' import { AiOutlineFileSearch } from 'react-icons/ai' import { BsFillChatRightTextFill } from 'react-icons/bs' -import DTO2096SightLine from '../DTO/DTO2096SightLine' -export interface IRptAmazonPendingTraficInvoiceDetailProps { +export interface IRtpAmazonInvoiceTrafficDetailProps { IDMaster: number detail: I2096Detail Habilitado: boolean } -export default function RptAmazonPendingTraficInvoiceDetail (props: IRptAmazonPendingTraficInvoiceDetailProps) { +export default function RtpAmazonInvoiceTrafficDetail (props: IRtpAmazonInvoiceTrafficDetailProps) { const dispatch = useDispatch() const mInvoices = useSelector( (state: RootState) => state.AmazonInvoices.Invoice ) const [ShowModal, setShowModal] = useState(false) - const [EstatusSwith, setEstatusSwitch] = useState(props.detail.sightLine) + const [EstatusSwith, setEstatusSwitch] = useState(props.detail.autorizado) const [UserChanged, setUserChanged] = useState(false) const [header, setHeader] = useState('') const [show, setShowMsg] = useState(false) const [Show, setShow] = useState(false) const [msg, setMsg] = useState('') - const [Comentarios, setComentarios] = useState( - props.detail.comentariosSightLine - ? props.detail.comentariosSightLine + const [RequerimientoNormativo, setRequerimientoNormativo] = useState( + props.detail.requerimientoNormativo + ? props.detail.requerimientoNormativo : '' ) + const [Comentarios, setComentarios] = useState( + props.detail.comentarios + ? props.detail.comentarios + : 'Clasificacion Incorrecta' + ) const msgColor = 'primary' const openLink = (item: string) => { window.open('https://www.amazon.com/dp/' + item) @@ -113,29 +115,33 @@ export default function RptAmazonPendingTraficInvoiceDetail (props: IRptAmazonPe UpdateInfo(Invoice[0], newDetail) } - const ToggleSightLine = (id: number) => { - const data: DTO2096SightLine = { + const autoriceItem = (id: number) => { + if (RequerimientoNormativo.length === 0 && EstatusSwith) { + setHeader('Error') + setMsg( + 'Antes de poder guardar la informacion es necesario que proporcione el reparto normativo' + ) + setShowMsg(true) + return + } + const data: DTO2096ItemAutoriza = { id: id, - sightLine: EstatusSwith, - comentariosSightLine: Comentarios + autorizado: EstatusSwith, + requerimientoNormativo: RequerimientoNormativo, + comentarios: Comentarios } - DSAmazon.SightLineSET(data) + console.log(data) + DSAmazon.AutorizadoSET(data) .then((response) => { - console.log(response.data) - //editArray(id, !props.detail.autorizado) + editArray(id, !props.detail.autorizado) setShowModal(false) }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error, no se guardo la informacion en BD') - setShowMsg(true) - return - }) + .catch((e: Error) => {}) } useEffect(() => { - if (UserChanged) setShowModal(true) - //ToggleSightLine(props.detail.id) + if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO) + autoriceItem(props.detail.id) }, [EstatusSwith, UserChanged]) const popover = ( @@ -178,6 +184,73 @@ export default function RptAmazonPendingTraficInvoiceDetail (props: IRptAmazonPe > {props.detail.itemDescription} + + {props.detail.pedimentoDescription} + + +   {props.detail.destinationHTSCode} + + + {props.detail.validaFraccionOriginal === 0 ? ( + + + + ) : props.detail.validaFraccionOriginal === 1 ? ( + + + + ) : ( + + + + )} + + + + + + + {props.detail.quantity} + + {props.detail.weightValue} + {props.detail.netWeightUnitOfMeasure} + @@ -300,7 +403,11 @@ export default function RptAmazonPendingTraficInvoiceDetail (props: IRptAmazonPe className="form-check form-switch form-control-lg" id="switchEnabled" type="switch" - checked={EstatusSwith} + disabled={ + props.detail.fraccionGEMCO === + props.detail.destinationHTSCode.replaceAll('.', '') + } + checked={EstatusSwith && props.detail.autorizado} onChange={() => { setEstatusSwitch(!EstatusSwith) setUserChanged(true) @@ -312,13 +419,15 @@ export default function RptAmazonPendingTraficInvoiceDetail (props: IRptAmazonPe {' '} {Comentarios}} + overlay={ + {RequerimientoNormativo} + } > {({ ref, ...triggerHandler }) => ( + )} + + + + {' '} + {Comentarios}} + > + {({ ref, ...triggerHandler }) => ( + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + {mInvoices + ? mInvoices.map((MasterData) => { + return ( + <> + + + + + + + + + + + + + + + + + + {MasterData.max ? ( + + + + ) : null} + + ) + }) + : null} + +
id[...]Commercial Invoice DateInvoice NumberIncotermsHAWBQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amountTotal de partidas
{ + changeToggle(MasterData) + }} + > + {MasterData.max === true ? ( + + + + ) : ( + + + + )} + {MasterData.id} + toggleInvoice(MasterData.id)} + /> + + {MasterData.commercialInvoiceDate} + + {MasterData.invoiceNumber} + + {MasterData.incoterms} + + {MasterData.hawb} + + {MasterData.totalInvoiceQuantityUnitOfMeasure} + + {MasterData.totalInvoiceQuantity} + + {MasterData.totalInvoiceWeightUnitOfMeasure} + + {MasterData.totalInvoiceWeight} + + {MasterData.totalInvoiceValueChargeOrAllowance} + + {MasterData.totalInvoiceValueCurrencyISOCode} + + {MasterData.totalInvoiceValueMonetaryAmount} + + {mInvoices + .filter((value) => value.id === MasterData.id) + .map((row) => { + return row.detail.length + })} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + {mInvoices.map((MD) => { + return ( + <> + {MD.detail + .filter( + (detail) => + MasterData.id === + detail.idHeader + ) + .map((detail) => { + return ( + + ) + })} + + ) + })} + +
+ Item Id + + Item Description + + Pedimento Description + + Destination HTS Code + + Valida + + Confirme fraccion + + Fraccion GEMCO + + Confirme descripcion + + Descripcion GEMCO + + Country of Origin + + ProductGroup + + Brand + + Model + + Unit Measure + + Qty Shipped + + Unit of measure + + Unit Net Weight + + Unit Cost + + Total value +
+
+
+
+
+ { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ + + + Para asociar estar facturas proporcione la referencia de SIR + + + setReferencia(e.target.value)} + /> + + + + + + + + + + + +
+
+
+ { + setShowMsg(false) + }} + /> + + ) +} diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonPendingTraficInvoiceDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonPendingTraficInvoiceDetail.tsx new file mode 100644 index 0000000..fd4496b --- /dev/null +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonPendingTraficInvoiceDetail.tsx @@ -0,0 +1,408 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { + Alert, + Button, + Col, + Form, + FormCheck, + Modal, + OverlayTrigger, + Popover, + Row, + Tooltip +} from 'react-bootstrap' +import { IconContext } from 'react-icons' +import { FaCheckCircle, FaQuestionCircle } from 'react-icons/fa' +import { ImCross } from 'react-icons/im' +import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' +import { ComboDescripcion } from '../../Components/ComboSelect/ComboDescripcion' +import { ComboFraccion } from '../../Components/ComboSelect/ComboFraccion' +import DTO2096ItemAutoriza from '../../DTO/DTO2096ItemAutoriza' +import I2096Detail from '../../Interfaces/I2096Detail' +import I2096Headers from '../../Interfaces/I2096Header' +import DSAmazon from '../../Services/Amazon.Services' +// Redux +import { RootState } from '../../../../../store/store' +import { useDispatch, useSelector } from 'react-redux' +import { updateInvoice } from '../../../../../store/features/Clientes/2096/AmazonInvoices' +import * as CurrencyFormat from 'react-currency-format' +import { AiOutlineFileSearch } from 'react-icons/ai' +import { BsFillChatRightTextFill } from 'react-icons/bs' +import DTO2096SightLine from '../../DTO/DTO2096SightLine' + +export interface IRptAmazonPendingTraficInvoiceDetailProps { + IDMaster: number + detail: I2096Detail + Habilitado: boolean +} + +export default function RptAmazonPendingTraficInvoiceDetail( + props: IRptAmazonPendingTraficInvoiceDetailProps +) { + const dispatch = useDispatch() + const mInvoices = useSelector( + (state: RootState) => state.AmazonInvoices.Invoice + ) + const [ShowModal, setShowModal] = useState(false) + const [EstatusSwith, setEstatusSwitch] = useState(props.detail.sightLine) + const [UserChanged, setUserChanged] = useState(false) + const [header, setHeader] = useState('') + const [show, setShowMsg] = useState(false) + const [Show, setShow] = useState(false) + const [msg, setMsg] = useState('') + const [Comentarios, setComentarios] = useState( + props.detail.comentariosSightLine ? props.detail.comentariosSightLine : '' + ) + const msgColor = 'primary' + const openLink = (item: string) => { + window.open('https://www.amazon.com/dp/' + item) + } + const target = React.useRef(null) + + const UpdateInfo = (Invoice: I2096Headers, Detail: I2096Detail[]) => { + const updatedInvoice: I2096Headers = { + id: props.IDMaster, + commercialInvoiceDate: Invoice.commercialInvoiceDate, + invoiceNumber: Invoice.invoiceNumber, + name: Invoice.name, + trailerNumber: Invoice.trailerNumber, + trailerId: Invoice.trailerId, + porOfLoading: Invoice.porOfLoading, + portOfEntry: Invoice.portOfEntry, + paymentsTerms: Invoice.paymentsTerms, + 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, + footNote: Invoice.footNote, + archivo: Invoice.archivo, + fCreacion: Invoice.fCreacion, + estatus: Invoice.estatus, + max: true, + detail: Detail + } + dispatch(updateInvoice(updatedInvoice)) + } + + const editArray = (id: number, valor: boolean) => { + const Invoice = mInvoices + .filter((el) => el.id === props.IDMaster) + .map((el) => { + return el + }) + const newDetail = Invoice[0].detail.map((el) => { + if (el.id === id) { + return { + ...el, + autorizado: valor + } + } + return el + }) + UpdateInfo(Invoice[0], newDetail) + } + + const ToggleSightLine = (id: number) => { + const data: DTO2096SightLine = { + id: id, + sightLine: EstatusSwith, + comentariosSightLine: Comentarios + } + DSAmazon.SightLineSET(data) + .then((response) => { + console.log(response.data) + //editArray(id, !props.detail.autorizado) + setShowModal(false) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error, no se guardo la informacion en BD') + setShowMsg(true) + return + }) + } + + useEffect(() => { + if (UserChanged) setShowModal(true) + //ToggleSightLine(props.detail.id) + }, [EstatusSwith, UserChanged]) + + const popover = ( + + Popover right + + And here's some amazing content. It's very engaging. + right? + + + ) + + return ( + <> + + +   + + openLink(props.detail.itemId)} + > + {props.detail.itemId} + + + {props.detail.itemDescription} + + + + + + {props.detail.descripcionGEMCO} + + + {props.detail.countryOfOrigin} + + + {props.detail.productGroup} + + + {props.detail.brand} + + + {props.detail.model} + + + {props.detail.itemQuantityUnitOfMeasure} + + + {props.detail.quantity} + + + {props.detail.weightValue} + + + {props.detail.netWeightUnitOfMeasure} + + + {props.detail.actualUnitCostMonetaryAmount} + + + {props.detail.totalUnitValueMonetaryAmount} + + + { + setEstatusSwitch(!EstatusSwith) + setUserChanged(true) + setShowModal(!EstatusSwith) + }} + label="" + /> + + + {' '} + {Comentarios}} + > + {({ ref, ...triggerHandler }) => ( + + )} + + + + + { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + backdrop="static" + disableEscapeKeyDown={true} + > + +
+ + Comentarios + + {' '} + setComentarios(e.target.value)} + /> + +   + + + + + + + + + +
+
+
+ { + setShowMsg(false) + }} + /> + + ) +} diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice.tsx new file mode 100644 index 0000000..2bd9c9c --- /dev/null +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice.tsx @@ -0,0 +1,533 @@ +import { useEffect, useState } from 'react' +import { + Alert, + Button, + Card, + Col, + FormCheck, + Modal, + Row, + Table +} from 'react-bootstrap' +import { IconContext } from 'react-icons' +import { BsChevronDown, BsChevronRight } from 'react-icons/bs' +import I2096Headers from '../../Interfaces/I2096Header' +import DSAmazon from '../../Services/Amazon.Services' +import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' +import { RootState } from '../../../../../store/store' +import { + initializeInvoice, + populateInvoices, + updateInvoice +} from '../../../../../store/features/Clientes/2096/AmazonInvoices' +// Redux +import { useDispatch, useSelector } from 'react-redux' +import RtpAmazonPendingTraficInvoiceDetail from './RptAmazonPendingTraficInvoiceDetail' +import { FaAmazon } from 'react-icons/fa' + +export interface IRptAmazonPendingTraficInvoiceProps {} + +export function RptAmazonPendingTraficInvoice( + props: IRptAmazonPendingTraficInvoiceProps +) { + const dispatch = useDispatch() + const mInvoices = useSelector( + (state: RootState) => state.AmazonInvoices.Invoice + ) + const [header, setHeader] = useState('') + const [IDFactura, setIDFactura] = useState(0) + const [show, setShowMsg] = useState(false) + const [ShowModal, setShowModal] = useState(false) + const [msg, setMsg] = useState('') + const msgColor = 'primary' + + function currentDate(days: number): string { + var today = new Date() + today.setDate(today.getDate() + days) + var dd = String(today.getDate()).padStart(2, '0') + var mm = String(today.getMonth() + 1).padStart(2, '0') + var yyyy = today.getFullYear() + return yyyy + '-' + mm + '-' + dd + } + + const loadReport = () => { + DSAmazon.AmazonPendingTraficInvoiceGET() + .then((response) => { + dispatch(initializeInvoice([])) + dispatch(populateInvoices(response.data)) + }) + .catch((e: Error) => { + alert('Ocurrio un error' + e.message.toString()) + }) + } + + useEffect(() => { + loadReport() + }, []) + + const InvoiceToggle = (row: I2096Headers) => { + let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id) + const Obj = { ...Invoice[0] } + Obj.max = !Obj.max + dispatch(updateInvoice(Obj)) + } + + const openLink = (item: string) => { + window.open('https://www.amazon.com/dp/' + item) + } + + const finishInvoice = (id: number) => { + DSAmazon.SePuedeTerminarXTraficoFactura(id) + .then((response) => { + if (response.data.respuesta.includes('lista')) { + DSAmazon.TerminaXTraficoFactura(id) + .then((response) => { + 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', 'AmazonInvoice.pdf') + document.body.appendChild(link) + link.click() + } + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) + }) + .catch((e: Error) => {}) + setShowModal(false) + } else { + setIDFactura(0) + setHeader('Informativo') + setMsg(response.data.respuesta) + setShowMsg(true) + return + } + }) + .catch((e: Error) => { + setIDFactura(0) + setHeader('Error') + setMsg('Ocurrio un error') + setShowMsg(true) + return + }) + } + + return ( +
+ + + + + + + + {' '} + TRAFICO : facturas pendientes + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + {mInvoices + ? mInvoices.map((MasterData) => { + return ( + <> + + + + + + + + + + + + + + + + + + {MasterData.max ? ( + + + + ) : null} + + ) + }) + : null} + +
idCommercial Invoice DateInvoice NumberNameIncotermsQty Unit of measureTot QtyWeight unit of measureTot weightTot Charge or allowanceTot currency ISO codeTot Monetary amountTotal de partidas
{ + InvoiceToggle(MasterData) + }} + > + {MasterData.max === true ? ( + + + + ) : ( + + + + )} + {MasterData.id} + { + /* facturaTerminada(MasterData) */ + setIDFactura(MasterData.id) + setShowModal(true) + }} + label="" + /> + + {MasterData.commercialInvoiceDate} + + {MasterData.invoiceNumber} + + {MasterData.name} + + {MasterData.incoterms} + + {MasterData.totalInvoiceQuantityUnitOfMeasure} + + {MasterData.totalInvoiceQuantity} + + {MasterData.totalInvoiceWeightUnitOfMeasure} + + {MasterData.totalInvoiceWeight} + + {MasterData.totalInvoiceValueChargeOrAllowance} + + {MasterData.totalInvoiceValueCurrencyISOCode} + + {MasterData.totalInvoiceValueMonetaryAmount} + + {mInvoices + .filter((value) => value.id === MasterData.id) + .map((row) => { + return row.detail.length + })} +
+ + + + + + + + + + + + + + + + + + + + + + + + {mInvoices.map((MD) => { + return ( + <> + {MD.detail + .filter( + (detail) => + MasterData.id === + detail.idHeader + ) + .map((detail) => { + return ( + + ) + })} + + ) + })} + +
+ Item Id + + Item Description + + Fraccion GEMCO + + Descripcion GEMCO + + Country of Origin + + ProductGroup + + Brand + + Model + + Unit Measure + + Qty Shipped + + Unit of measure + + Unit Net Weight + + Unit Cost + + Total value + + Sight line + + Comentarios +
+
+
+
+
+ { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ + + + + La factura esta lista para terminarse, desea terminarla? + + + + + + + + + + + + +
+
+
+ { + setShowMsg(false) + }} + /> +
+ ) +} diff --git a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts index 72f71b8..50053cc 100644 --- a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts +++ b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts @@ -11,40 +11,58 @@ import DTORespuesta from '../../ZincInternacional/DTO/DTORespuesta' import DTO2096SightLine from '../DTO/DTO2096SightLine' class AmazonDataService { - AmazonPendingClasificationInvoice$GET() { + AmazonPendingClasificationInvoiceGET() { return http.get(`/AmazonInvoice/AmazonPendingClasificationInvoiceGet`) } - AmazonFinishedClasificationInvoice$GET() { + AmazonFinishedClasificationInvoiceGET() { return http.get(`/AmazonInvoice/AmazonFinishedClasificationInvoiceGet`) } - AmazonPendingTraficInvoice$GET() { + SePuedeTerminardeClasificarFactura(id: number) { + return http.get(`/AmazonInvoice/SePuedeTerminardeClasificarFactura?id=${id}`) + } + TerminaClasificarFactura(id: number) { + return http.get(`/AmazonInvoice/TerminaClasificarFactura?id=${id}`) + } + + AmazonPendingTraficInvoiceGET() { return http.get(`/AmazonInvoice/AmazonPendingTraficInvoiceGet`) } - AmazonFinishedTraficInvoice$GET() { + /* AmazonFinishedTraficInvoiceGET() { return http.get(`/AmazonInvoice/AmazonFinishedTraficInvoiceGet`) + } */ + AmazonLinkInvoice2TrafficGet() { + return http.get(`/AmazonInvoice/AmazonLinkInvoice2TrafficGet`) + } + SePuedeTerminarXTraficoFactura(id: number) { + return http.get(`/AmazonInvoice/SePuedeTerminarXTraficoFactura?id=${id}`) } - GetValidaFraccion(Fraccion: string) { + TerminaXTraficoFactura(id: number) { + return http.get(`/AmazonInvoice/TerminaXTraficoFactura?id=${id}`) + } + +/* SePuedeTerminarFactura(id: number) { + return http.get(`/AmazonInvoice/SePuedeTerminarFactura?id=${id}`) + } */ + ValidaFraccionGET(Fraccion: string) { return http.get(`/AmazonInvoice/C2096ValidaFraccion?Fraccion=${Fraccion}`) } - SetFraccion(data: DTO2096Fraccion) { + FraccionSET(data: DTO2096Fraccion) { return http.post(`/AmazonInvoice/C2096FraccionSet`, data) } - SetDescripcion(data: DTO2096Descripcion) { + DescripcionSET(data: DTO2096Descripcion) { return http.post(`/AmazonInvoice/C2096DescripcionSet`, data) } - Set$Autorizado(data: DTO2096ItemAutoriza) { + AutorizadoSET(data: DTO2096ItemAutoriza) { return http.post(`/AmazonInvoice/C2096ItemAutorizado`, data) } SightLineSET(data: DTO2096SightLine) { return http.put(`/AmazonInvoice/AmazonSightLineSET`, data) } - TerminaFactura(id: number) { - return http.get(`/AmazonInvoice/TerminaFactura?id=${id}`) - } - Get$Pais$Claves() { + + PaisClavesGET() { return http.get(`/AmazonInvoice/PaisClavesGet`) } - GetNoPartesAmazon2SIR(id: number) { + NoPartesAmazon2SIRGET(id: number) { return http.get(`/AmazonInvoice/GetNoPartesAmazon2SIR?id=${id}`, {responseType: 'arraybuffer'}) .then(function (response) { return response @@ -53,7 +71,7 @@ class AmazonDataService { console.log(error) }) } - Get$ExceptionsFile$Amazon(id: number) { + ExceptionsFileAmazonGET(id: number) { return http.get(`/AmazonInvoice/GetArchivoExcepcionesAmazon?id=${id}`, {responseType: 'arraybuffer'}) .then(function (response) { return response @@ -62,11 +80,21 @@ class AmazonDataService { console.log(error) }) } + PDFAmazonInvoiceGET(id: number) { + return http.get(`/AmazonInvoice/PDFAmazonInvoiceGET?id=${id}`, {responseType: 'arraybuffer'}) + .then(function (response) { + return response + }) + .catch(function (error) { + console.log(error) + }) + } + + + + NoPartesGet(Search: string) { return http.get(`/AmazonInvoice/NoPartesGet?Search=${Search}`) } - Se$Puede$Terminar$Factura(id: number) { - return http.get(`/AmazonInvoice/SePuedeTerminarFactura?id=${id}`) - } } export default new AmazonDataService() diff --git a/src/Components/Dashboard/DashboardTrafico.tsx b/src/Components/Dashboard/DashboardTrafico.tsx index 912598b..98ce58e 100644 --- a/src/Components/Dashboard/DashboardTrafico.tsx +++ b/src/Components/Dashboard/DashboardTrafico.tsx @@ -51,7 +51,7 @@ export default function DashboardTrafico (props: IDashboardTraficoProps) { +

Sorry, no matching page

) @@ -58,42 +59,42 @@ ReactDOM.render( - }> - }> - } /> - } /> - } /> - } /> - } /> - }> + }> + } /> + } /> + } /> + } /> + } /> + } /> } /> - } /> + } /> } /> - } /> - } /> + } /> + } /> } /> } /> } /> } /> - } /> + } /> } /> } /> - } /> + } /> } /> } /> + } /> } - /> - } /> } /> } /> - } /> - } /> - } /> + } /> + } /> + } /> } /> - } /> - } /> + } /> + } /> } > - } /> - } /> - } /> - } /> + } + /> + } + /> + } /> + } + /> + } + /> - } /> + } />