diff --git a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx index c86fced..dcb2eca 100644 --- a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx +++ b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx @@ -19,7 +19,7 @@ export interface IComboDescripcionProps { IDInvoice: number IDDetail: number DescripcionOriginal: string - Habilitado: boolean + Deshabilitado: boolean ConfirmaDescripcion: number } @@ -143,7 +143,7 @@ export function ComboDescripcion(props: IComboDescripcionProps) {
changeValidacion(parseInt(e.target.value))} value={Validacion} diff --git a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx index 38ff829..274ef31 100644 --- a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx +++ b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx @@ -15,12 +15,13 @@ import DTO2096Fraccion from '../../DTO/DTO2096Fraccion' import DSAmazon from '../../Services/Amazon.Services' import I2096Headers from '../../Interfaces/I2096Header' import I2096Detail from '../../Interfaces/I2096Detail' +import DTO2096FraccionDescripcion from '../../DTO/DTO2096FraccionDescripcion' export interface IComboFraccionProps { IDInvoice: number IDDetail: number FraccionOriginal: string - Habilitado: boolean + Deshabilitado: boolean ConfirmaFraccion: number Detail: I2096Detail } @@ -35,11 +36,12 @@ export function ComboFraccion(props: IComboFraccionProps) { const [showModal, setShowModal] = useState(false) const [Fraccion, setFraccion] = useState(props.FraccionOriginal) const [header, setHeader] = useState('') + const [DescripcionGEMCO, setDescripcionGEMCO] = useState(props.Detail.pedimentoDescription) const [show, setShowMsg] = useState(false) const [msg, setMsg] = useState('') - const [RequerimientoNormativo, setRequerimientoNormativo] = useState( - props.Detail.requerimientoNormativo - ? props.Detail.requerimientoNormativo + const [CumplimientoNormativo, setCumplimientoNormativo] = useState( + props.Detail.cumplimientoNormativo + ? props.Detail.cumplimientoNormativo : '' ) const [Comentarios, setComentarios] = useState( @@ -95,6 +97,7 @@ export function ComboFraccion(props: IComboFraccionProps) { return { ...el, fraccionGEMCO: Fraccion, + descripcionGEMCO: DescripcionGEMCO, autorizado: newData.autorizado } } @@ -134,14 +137,18 @@ export function ComboFraccion(props: IComboFraccionProps) { DSAmazon.ValidaFraccionGET(Fraccion) .then((response) => { if (response.data.respuesta === 'Si') { - const data: DTO2096Fraccion = { + const data: DTO2096FraccionDescripcion = { id: props.IDDetail, fraccion: Fraccion, - confirmaFraccion: Validacion + cumplimientoNormativo: CumplimientoNormativo, + comentarios: Comentarios, + descripcionGEMCO: DescripcionGEMCO } - DSAmazon.FraccionSET(data) + DSAmazon.SETFraccionDescripcion(data) .then((response) => { - console.log('respuesta de set fraccion:'+JSON.stringify(response.data)) + console.log( + 'respuesta de set fraccion:' + JSON.stringify(response.data) + ) UpdateInfo(response.data) setShowModal(false) return @@ -166,6 +173,7 @@ export function ComboFraccion(props: IComboFraccionProps) { changeValidacion(parseInt(e.target.value))} value={Validacion} > @@ -183,7 +191,7 @@ export function ComboFraccion(props: IComboFraccionProps) { > - Proporcione la facccion GEMCO + Fraccion GEMCO { @@ -207,40 +215,51 @@ export function ComboFraccion(props: IComboFraccionProps) { - Cumplimiento normativo - - {' '} - setRequerimientoNormativo(e.target.value)} - /> - -   - - - Comentarios - - {' '} - setComentarios(e.target.value)} - /> - -   - - - - + Cumplimiento normativo + + {' '} + setCumplimientoNormativo(e.target.value)} + /> + +   + + + Comentarios + + {' '} + setComentarios(e.target.value)} + /> + +   + + + Descripcion GEMCO + + + + + + + - + { }) + .catch((e: Error) => { + alert('Ocurrio un error' + e.message.toString()) + }) } }) .catch((e: Error) => { @@ -135,11 +140,6 @@ export default function RptAmazonFinishedInvoices( Commercial Invoice Date Invoice Number - {/* Trailer Number - Trailer Id - Por Of Loading - Port of entry - Payments Terms */} Incoterms HAWB Qty Unit of measure @@ -193,7 +193,7 @@ export default function RptAmazonFinishedInvoices( {MasterData.id} - {MasterData.estatus === 2 ? ( + {MasterData.estatus >= 3 ? (
downloadExcel(MasterData.id)} > @@ -211,21 +211,6 @@ export default function RptAmazonFinishedInvoices( {MasterData.invoiceNumber} - {/* - {MasterData.trailerNumber} - - - {MasterData.trailerId} - - - {MasterData.porOfLoading} - - - {MasterData.portOfEntry} - - - {MasterData.paymentsTerms} - */} {MasterData.incoterms} @@ -274,7 +259,7 @@ export default function RptAmazonFinishedInvoices( : 'normalSelected2' } > - + { return ( - = 3 } /> ) diff --git a/src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoicesDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoicesDetail.tsx new file mode 100644 index 0000000..cb39e2c --- /dev/null +++ b/src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoicesDetail.tsx @@ -0,0 +1,561 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { + Alert, + Button, + Col, + Form, + 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' + +export interface IRptAmazonFinishedClasificationInvoicesDetailProps { + IDMaster: number + detail: I2096Detail + Deshabilitado: boolean +} + +export default function RptAmazonFinishedClasificationInvoicesDetail( + props: IRptAmazonFinishedClasificationInvoicesDetailProps +) { + const dispatch = useDispatch() + const mInvoices = useSelector( + (state: RootState) => state.AmazonInvoices.Invoice + ) + const [ShowModal, setShowModal] = useState(false) + 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 [CumplimientoNormativo, setCumplimientoNormativo] = useState( + props.detail.cumplimientoNormativo ? props.detail.cumplimientoNormativo : '' + ) + 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) + } + 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 autoriceItem = (id: number) => { + /* if (CumplimientoNormativo.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, + autorizado: EstatusSwith, + cumplimientoNormativo: CumplimientoNormativo, + comentarios: Comentarios + } + console.log(data) + DSAmazon.AutorizadoSET(data) + .then((response) => { + editArray(id, !props.detail.autorizado) + setShowModal(false) + }) + .catch((e: Error) => {}) */ + } + + useEffect(() => { + if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO) + autoriceItem(props.detail.id) + }, [EstatusSwith, UserChanged]) + + const popover = ( + + Popover right + + And here's some amazing content. It's very engaging. + right? + + + ) + + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ +
+ + + ¿Esta seguro que esta fraccion ya la autorizo Amazon? + + + + + + Cumplimiento normativo + + {' '} + setCumplimientoNormativo(e.target.value)} + /> + +   + + + Comentarios + + {' '} + setComentarios(e.target.value)} + /> + +   + + + + + + + + + + + + + { + setShowMsg(false) + }} + /> + + ) +} diff --git a/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonPendingClasificationInvoices.tsx b/src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoices.tsx similarity index 83% rename from src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonPendingClasificationInvoices.tsx rename to src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoices.tsx index be20a3d..30a7bf8 100644 --- a/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonPendingClasificationInvoices.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoices.tsx @@ -12,18 +12,18 @@ import { import { IconContext } from 'react-icons' import { BsChevronDown, BsChevronRight } from 'react-icons/bs' import { FaAmazon, FaFileExcel } from 'react-icons/fa' -import I2096Headers from '../../Interfaces/I2096Header' -import DSAmazon from '../../Services/Amazon.Services' -import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' -import { RootState } from '../../../../../store/store' +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' +} from '../../../../../../store/features/Clientes/2096/AmazonInvoices' // Redux import { useDispatch, useSelector } from 'react-redux' -import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail' +import RtpAmazonPendingClasificationInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail' import { AiTwotoneFileExcel } from 'react-icons/ai' export interface IRtpAmazonPendingInvoicesProps {} @@ -38,6 +38,7 @@ export default function RtpAmazonPendingInvoices( const [IDFactura, setIDFactura] = useState(0) const [show, setShowMsg] = useState(false) const [ShowModal, setShowModal] = useState(false) + const [ShowModalW, setShowModalW] = useState(false) const [msg, setMsg] = useState('') const msgColor = 'primary' @@ -73,6 +74,8 @@ export default function RtpAmazonPendingInvoices( link.setAttribute('download', 'Plantilla de partes.xlsx') document.body.appendChild(link) link.click() + setShowModal(false) + loadReport() } }) .catch((e: Error) => { @@ -134,14 +137,41 @@ export default function RtpAmazonPendingInvoices( .map((element) => { let newElt = Object.assign({}, element) // copies element return newElt.detail.filter( - (child) => child.idHeader === IDMaster && child.destinationHTSCode.replaceAll('.','')!==child.fraccionGEMCO + (child) => + child.idHeader === IDMaster && + child.destinationHTSCode.replaceAll('.', '').trim() !== + child.fraccionGEMCO ) }) - //console.log(JSON.stringify(Exceptions)) + //console.log(JSON.stringify(Exceptions.length)+' '+IDMaster) +/* if (IDMaster === 2) { + console.log(JSON.stringify(Exceptions)) + } */ return Exceptions && Exceptions.length ? Exceptions[0].length : 0 } + const invoiceIncomplete = (IDMaster: number) => { + let itemsChecked = 0 + mInvoices.forEach((invoice) => { + invoice.detail.forEach((det) => { + if (det.idHeader === IDMaster && det.checked) itemsChecked++ + }) + }) + + let totItems = 0 + mInvoices.forEach((invoice) => { + invoice.detail.forEach((det) => { + if (det.idHeader === IDMaster) totItems++ + }) + }) + + //console.log(JSON.stringify(Exceptions.length)+' '+IDMaster) + console.log(IDMaster + ' ' + itemsChecked + ' ' + totItems) + return itemsChecked !== totItems + } + const facturaTerminada = (row: I2096Headers) => { + if (!existsExeptions(row.id)) { DSAmazon.SePuedeTerminardeClasificarFactura(row.id) .then((response) => { if (response.data.respuesta.includes('lista')) { @@ -163,6 +193,37 @@ export default function RtpAmazonPendingInvoices( setShowMsg(true) return }) + } else { + DSAmazon.SePuedeTerminardeClasificarFacturaEsperandoRespuesta(row.id) + .then((response) => { + if (response.data.respuesta.includes('lista')) { + setIDFactura(row.id) + setShowModalW(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 + }) + } + } + const send2WaitingProcess = (id: number) => { + DSAmazon.EnviaEsperaRespuestaAmazon(id) + .then((response) => { + setShowModalW(false) + loadReport() + }) + .catch((e: Error) => {}) } return ( @@ -252,39 +313,17 @@ export default function RtpAmazonPendingInvoices( )} - - +
+   + openLink(props.detail.itemId)} + > + {props.detail.itemId} + + {props.detail.itemDescription} + + {props.detail.pedimentoDescription} + +   {props.detail.destinationHTSCode} + + {props.detail.validaFraccionOriginal === 0 ? ( + + + + ) : props.detail.validaFraccionOriginal === 1 ? ( + + + + ) : ( + + + + )} + + + + + + + + {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="" + /> */} + + {' '} + {CumplimientoNormativo} + } + > + {({ ref, ...triggerHandler }) => ( + + )} + + + {' '} + {Comentarios}} + > + {({ ref, ...triggerHandler }) => ( + + )} + +
{MasterData.id} - {/* {existsExeptions(MasterData.id) > 0 ? ( -
- downloadExceptionsFile(MasterData.id) - } - title="Archivo de excepciones" - > - - - -
- ) : null} */} -
- {/* {MasterData.estatus === 1 ? ( -
downloadExcel(MasterData.id)} - > - - - -
- ) : null} */} -
0 ? 'hidden' : 'visible'}} + /* style={{ + visibility: + (existsExeptions(MasterData.id) > 0) && invoiceIncomplete( + MasterData.id + ) + ? 'hidden' + : 'visible' + }} */ id="switchEnabled" type="switch" checked={false} @@ -348,7 +387,7 @@ export default function RtpAmazonPendingInvoices( : 'normalSelected2' } > - + Comm + @@ -582,11 +630,14 @@ export default function RtpAmazonPendingInvoices( ) .map((detail) => { return ( - ) @@ -652,6 +703,52 @@ export default function RtpAmazonPendingInvoices( + + + { + setShowModalW(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ +
+ + + La factura esta lista para enviarse al proceso de esperar respuesta de Amazon + + + + + + + + + + + + + + + state.AmazonInvoices.Invoice ) - const [ShowModal, setShowModal] = useState(false) + const [ShowModal, setShowModal] = useState(false) + const [Checked, setChecked] = useState(props.detail.checked) 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 [RequerimientoNormativo, setRequerimientoNormativo] = useState( - props.detail.requerimientoNormativo - ? props.detail.requerimientoNormativo - : '' + const [CumplimientoNormativo, setCumplimientoNormativo] = useState( + props.detail.cumplimientoNormativo ? props.detail.cumplimientoNormativo : '' ) const [Comentarios, setComentarios] = useState( props.detail.comentarios @@ -118,7 +116,7 @@ export default function RtpAmazonPendingInvoivesDetail( } const autoriceItem = (id: number) => { - if (RequerimientoNormativo.length === 0 && EstatusSwith) { + if (CumplimientoNormativo.length === 0 && EstatusSwith) { setHeader('Error') setMsg( 'Antes de poder guardar la informacion es necesario que proporcione el reparto normativo' @@ -129,16 +127,16 @@ export default function RtpAmazonPendingInvoivesDetail( const data: DTO2096ItemAutoriza = { id: id, autorizado: EstatusSwith, - requerimientoNormativo: RequerimientoNormativo, + cumplimientoNormativo: CumplimientoNormativo, comentarios: Comentarios } console.log(data) - DSAmazon.AutorizadoSET(data) + /* DSAmazon.AutorizadoSET(data) .then((response) => { editArray(id, !props.detail.autorizado) setShowModal(false) }) - .catch((e: Error) => {}) + .catch((e: Error) => {}) */ } useEffect(() => { @@ -156,13 +154,20 @@ export default function RtpAmazonPendingInvoivesDetail( ) + const checkDetail = () => { + DSAmazon.CheckDetail(props.detail.id) + .then((response) => { + setChecked(!Checked) + }) + .catch((e: Error) => {}) + } + return ( <> + > + setRequerimientoNormativo(e.target.value)} + value={CumplimientoNormativo} + onChange={(e) => setCumplimientoNormativo(e.target.value)} />   diff --git a/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoicesDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoicesDetail.tsx deleted file mode 100644 index e27b522..0000000 --- a/src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoicesDetail.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import * as React from 'react'; - -export interface IRptAmazonFinishedClasificationInvoicesDetailProps { -} - -export default function RptAmazonFinishedClasificationInvoicesDetail (props: IRptAmazonFinishedClasificationInvoicesDetailProps) { - return ( -
- -
- ); -} diff --git a/src/Components/Clientes/Amazon/Reportes/Clasification/RptPendingAnswerFromAmazon.tsx b/src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazon.tsx similarity index 97% rename from src/Components/Clientes/Amazon/Reportes/Clasification/RptPendingAnswerFromAmazon.tsx rename to src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazon.tsx index 7f29f21..2366266 100644 --- a/src/Components/Clientes/Amazon/Reportes/Clasification/RptPendingAnswerFromAmazon.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazon.tsx @@ -13,18 +13,18 @@ import { import { IconContext } from 'react-icons' import { BsChevronDown, BsChevronRight } from 'react-icons/bs' import { FaAmazon, FaFileExcel } from 'react-icons/fa' -import I2096Headers from '../../Interfaces/I2096Header' -import DSAmazon from '../../Services/Amazon.Services' -import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' -import { RootState } from '../../../../../store/store' +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' +} from '../../../../../../store/features/Clientes/2096/AmazonInvoices' // Redux import { useDispatch, useSelector } from 'react-redux' -import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail' +import RtpPendingAnswerFromAmazonDetail from './RptPendingAnswerFromAmazonDetail' import { AiTwotoneFileExcel } from 'react-icons/ai' export interface IRptPendingAnswerFromAmazonProps {} @@ -293,7 +293,7 @@ export default function RptPendingAnswerFromAmazon( ) : null}
+ Chk +
@@ -171,7 +176,8 @@ export default function RtpAmazonPendingInvoivesDetail( openLink(props.detail.itemId)} @@ -180,32 +186,36 @@ export default function RtpAmazonPendingInvoivesDetail( {props.detail.itemDescription} {props.detail.pedimentoDescription}   {props.detail.destinationHTSCode} @@ -240,7 +250,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -249,13 +260,14 @@ export default function RtpAmazonPendingInvoivesDetail( IDDetail={props.detail.id} FraccionOriginal={props.detail.destinationHTSCode} ConfirmaFraccion={props.detail.confirmaFraccion} - Habilitado={props.Habilitado} + Deshabilitado={props.Deshabilitado} Detail={props.detail} /> @@ -286,7 +298,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -295,12 +308,13 @@ export default function RtpAmazonPendingInvoivesDetail( IDDetail={props.detail.id} DescripcionOriginal={props.detail.pedimentoDescription} ConfirmaDescripcion={props.detail.confirmaDescripcion} - Habilitado={props.Habilitado} + Deshabilitado={props.Deshabilitado} /> @@ -308,7 +322,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -316,7 +331,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -324,7 +340,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -332,7 +349,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -340,7 +358,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -348,7 +367,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -356,7 +376,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -364,7 +385,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -373,7 +395,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -381,7 +404,8 @@ export default function RtpAmazonPendingInvoivesDetail( @@ -391,6 +415,7 @@ export default function RtpAmazonPendingInvoivesDetail( style={{ textAlign: 'center', paddingLeft: '30px', + backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff', visibility: props.detail.destinationHTSCode.replaceAll('.', '').trim() !== (props.detail.fraccionGEMCO @@ -400,35 +425,19 @@ export default function RtpAmazonPendingInvoivesDetail( : 'hidden' }} className="DetailData" - > - {/* { - setEstatusSwitch(!EstatusSwith) - setUserChanged(true) - setShowModal(!EstatusSwith) - }} - label="" - /> */} - {' '} {RequerimientoNormativo} + {CumplimientoNormativo} } > {({ ref, ...triggerHandler }) => ( @@ -448,8 +457,9 @@ export default function RtpAmazonPendingInvoivesDetail( {' '} @@ -472,6 +482,11 @@ export default function RtpAmazonPendingInvoivesDetail( )} +
+ { checkDetail()}} checked={Checked}/> + +
- + /> */} {MasterData.commercialInvoiceDate} @@ -358,7 +358,7 @@ export default function RptPendingAnswerFromAmazon( : 'normalSelected2' } > - + Unit Net Weight - + + + + + + + + + + + + + + + + + + + + + + + + + + + { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ +
+ + ¿Esta seguro que esta fraccion ya la autorizo Amazon? + + + + + Fraccion GEMCO + + { + const { value } = values + setFraccion(value) + }} + format={'######## ##'} + value={Fraccion} + displayType={'input'} + style={{ + fontSize: '18px', + backgroundColor: '#F1EEF9', + border: '2px solid #5923F6', + color: '#5923F6', + width: '120px', + textAlign: 'right', + borderRadius: '10px' + }} + /> + + + + + Cumplimiento normativo + + {' '} + setCumplimientoNormativo(e.target.value)} + /> + +   + + + Comentarios + + {' '} + setComentarios(e.target.value)} + /> + +   + + + Descripcion GEMCO + + + + + + + + + + + + + + + + { + setShowMsg(false) + }} + /> + + ) +} diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonInvoiceTrafficDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonInvoiceTrafficDetail.tsx new file mode 100644 index 0000000..74ddfd9 --- /dev/null +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonInvoiceTrafficDetail.tsx @@ -0,0 +1,562 @@ +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' + +export interface IRtpAmazonInvoiceTrafficDetailProps { + IDMaster: number + detail: I2096Detail + Habilitado: boolean +} + +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.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 [CumplimientoNormativo, setCumplimientoNormativo] = useState( + props.detail.cumplimientoNormativo ? props.detail.cumplimientoNormativo : '' + ) + 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) + } + 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 autoriceItem = (id: number) => { + if (CumplimientoNormativo.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, + autorizado: EstatusSwith, + cumplimientoNormativo: CumplimientoNormativo, + comentarios: Comentarios + } + console.log(data) +/* DSAmazon.AutorizadoSET(data) + .then((response) => { + editArray(id, !props.detail.autorizado) + setShowModal(false) + }) + .catch((e: Error) => {}) */ + } + + useEffect(() => { + if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO) + autoriceItem(props.detail.id) + }, [EstatusSwith, UserChanged]) + + const popover = ( + + Popover right + + And here's some amazing content. It's very engaging. + right? + + + ) + + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + setShowModal(false) + }} + size={'sm'} + dialogClassName={'modal-50w'} + > + +
+ +
+ + + ¿Esta seguro que esta fraccion ya la autorizo Amazon? + + + + + + Cumplimiento normativo + + {' '} + setCumplimientoNormativo(e.target.value)} + /> + +   + + + Comentarios + + {' '} + setComentarios(e.target.value)} + /> + +   + + + + + + + + + + + + + { + setShowMsg(false) + }} + /> + + ) +} diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonLinkInvoice2Traffic.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx similarity index 97% rename from src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonLinkInvoice2Traffic.tsx rename to src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx index 0b603c9..918dbe0 100644 --- a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonLinkInvoice2Traffic.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx @@ -18,21 +18,21 @@ import { 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 RptAmazonInvoiceTrafficDetail from './RptAmazonInvoiceTrafficDetail' // Redux diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonPendingTraficInvoiceDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RptAmazonPendingTraficInvoiceDetail.tsx similarity index 94% rename from src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonPendingTraficInvoiceDetail.tsx rename to src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RptAmazonPendingTraficInvoiceDetail.tsx index fd4496b..4c49ab6 100644 --- a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonPendingTraficInvoiceDetail.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RptAmazonPendingTraficInvoiceDetail.tsx @@ -15,21 +15,21 @@ 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' +import DTO2096SightLine from '../../../DTO/DTO2096SightLine' export interface IRptAmazonPendingTraficInvoiceDetailProps { IDMaster: number diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice.tsx similarity index 98% rename from src/Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice.tsx rename to src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice.tsx index 2bd9c9c..924aaed 100644 --- a/src/Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice.tsx +++ b/src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice.tsx @@ -11,15 +11,15 @@ import { } 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 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' +} from '../../../../../../store/features/Clientes/2096/AmazonInvoices' // Redux import { useDispatch, useSelector } from 'react-redux' import RtpAmazonPendingTraficInvoiceDetail from './RptAmazonPendingTraficInvoiceDetail' diff --git a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx b/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx deleted file mode 100644 index 16a0501..0000000 --- a/src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx +++ /dev/null @@ -1,563 +0,0 @@ -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' - -export interface IRtpAmazonInvoiceTrafficDetailProps { - IDMaster: number - detail: I2096Detail - Habilitado: boolean -} - -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.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 [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) - } - 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 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, - autorizado: EstatusSwith, - requerimientoNormativo: RequerimientoNormativo, - comentarios: Comentarios - } - console.log(data) - DSAmazon.AutorizadoSET(data) - .then((response) => { - editArray(id, !props.detail.autorizado) - setShowModal(false) - }) - .catch((e: Error) => {}) - } - - useEffect(() => { - if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO) - autoriceItem(props.detail.id) - }, [EstatusSwith, UserChanged]) - - const popover = ( - - Popover right - - And here's some amazing content. It's very engaging. - right? - - - ) - - return ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - setShowModal(false) - }} - size={'sm'} - dialogClassName={'modal-50w'} - > - -
- -
- - - ¿Esta seguro que esta fraccion ya la autorizo Amazon? - - - - - - Cumplimiento normativo - - {' '} - setRequerimientoNormativo(e.target.value)} - /> - -   - - - Comentarios - - {' '} - setComentarios(e.target.value)} - /> - -   - - - - - - - - - - - - - { - setShowMsg(false) - }} - /> - - ) - } - \ No newline at end of file diff --git a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts index f53dd68..41af31d 100644 --- a/src/Components/Clientes/Amazon/Services/Amazon.Services.ts +++ b/src/Components/Clientes/Amazon/Services/Amazon.Services.ts @@ -9,6 +9,7 @@ import I2096PaisClave from '../Interfaces/I2096PaisClave' import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza' import DTORespuesta from '../../ZincInternacional/DTO/DTORespuesta' import DTO2096SightLine from '../DTO/DTO2096SightLine' +import DTO2096FraccionDescripcion from '../DTO/DTO2096FraccionDescripcion' class AmazonDataService { AmazonPendingClasificationInvoiceGET() { @@ -23,16 +24,25 @@ class AmazonDataService { SePuedeTerminardeClasificarFactura(id: number) { return http.get(`/AmazonInvoice/SePuedeTerminardeClasificarFactura?id=${id}`) } + SePuedeTerminardeClasificarFacturaEsperandoRespuesta(id: number) { + return http.get(`/AmazonInvoice/SePuedeTerminardeClasificarFacturaEsperandoRespuesta?id=${id}`) + } + EnviaEsperaRespuestaAmazon(id: number) { + return http.get(`/AmazonInvoice/EnviaEsperaRespuestaAmazon?id=${id}`) + } TerminaClasificarFactura(id: number) { return http.get(`/AmazonInvoice/TerminaClasificarFactura?id=${id}`) } + CheckDetail(id: number) { + return http.put(`/AmazonInvoice/C2096CheckDetail?id=${id}`) + } +/* ClasificationFinish(data: DTO2096ItemAutoriza) { + return http.post(`/AmazonInvoice/C2096ItemAutorizado`, data) + } */ AmazonPendingTraficInvoiceGET() { return http.get(`/AmazonInvoice/AmazonPendingTraficInvoiceGet`) } - /* AmazonFinishedTraficInvoiceGET() { - return http.get(`/AmazonInvoice/AmazonFinishedTraficInvoiceGet`) - } */ AmazonLinkInvoice2TrafficGet() { return http.get(`/AmazonInvoice/AmazonLinkInvoice2TrafficGet`) } @@ -43,21 +53,24 @@ class AmazonDataService { 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}`) } + SETFraccionDescripcion(data: DTO2096FraccionDescripcion) { + return http.put(`/AmazonInvoice/C2096FraccionDescripcionSET`, data) + } FraccionSET(data: DTO2096Fraccion) { return http.post(`/AmazonInvoice/C2096FraccionSet`, data) } DescripcionSET(data: DTO2096Descripcion) { return http.post(`/AmazonInvoice/C2096DescripcionSet`, data) } - AutorizadoSET(data: DTO2096ItemAutoriza) { - return http.post(`/AmazonInvoice/C2096ItemAutorizado`, data) + AutorizaItemFacturaAmazon(data: DTO2096FraccionDescripcion) { + return http.put(`/AmazonInvoice/C2096AutorizaItemFactura`, data) } + /* SETAutorizado(data: DTO2096FraccionDescripcion) { + return http.put(`/AmazonInvoice/C2096ItemAutorizadoSET`, data) + } */ SightLineSET(data: DTO2096SightLine) { return http.put(`/AmazonInvoice/AmazonSightLineSET`, data) } diff --git a/src/Components/Dashboard/DashboardClasificacion.tsx b/src/Components/Dashboard/DashboardClasificacion.tsx index 2507bce..f81b6a9 100644 --- a/src/Components/Dashboard/DashboardClasificacion.tsx +++ b/src/Components/Dashboard/DashboardClasificacion.tsx @@ -56,7 +56,7 @@ export function DashboardClasificacion(props: IDashboardClasificacionProps) { - + {Terminadas} - + {Pendientes} diff --git a/src/Components/Register/register.tsx b/src/Components/Register/register.tsx index c18c7b1..3430a14 100644 --- a/src/Components/Register/register.tsx +++ b/src/Components/Register/register.tsx @@ -13,7 +13,7 @@ import { Table, Tabs, Toast, - ToastContainer, + ToastContainer } from 'react-bootstrap' import { useEffect, useState } from 'react' import IPerfilesMenu from '../../Interfaces/IPerfilesMenu' @@ -47,7 +47,7 @@ const SignupSchema = Yup.object().shape({ contrasena: Yup.string() .min(6, 'Contraseña demasiado corta') .max(50, 'Contraseña demasiado larga'), - correo: Yup.string().email('Correo invalido').required('Requirido'), + correo: Yup.string().email('Correo invalido').required('Requirido') }) export const Register: React.FC<{}> = (props) => { @@ -94,8 +94,8 @@ export const Register: React.FC<{}> = (props) => { const [perfiles, setPerfiles] = useState([ { id: 0, - perfil: '-SELECCIONE-', - }, + perfil: '-SELECCIONE-' + } ]) const [clientes, setClientes] = useState([]) const [transportistas, setTransportistas] = useState([]) @@ -138,12 +138,12 @@ export const Register: React.FC<{}> = (props) => { codigoAccesoM: CodigoAccesoM, tokenAccesoM: TokenAccesoM, deviceToken: DeviceToken, - idPerfil: IdPerfil, + idPerfil: IdPerfil } const initialValuesPerfiles: IPerfil = { id: IdPerfil, - perfil: '', + perfil: '' } function getUsuario() { @@ -281,7 +281,7 @@ export const Register: React.FC<{}> = (props) => { const asignacionUsuarioCliente: DTOUsuarioCliente = { sClave: id, IdUsuario: IdUsuario, - agregar: e.currentTarget.checked, + agregar: e.currentTarget.checked } ClientesServices.create(asignacionUsuarioCliente) .then((response) => { @@ -301,7 +301,7 @@ export const Register: React.FC<{}> = (props) => { IdUsuario: IdUsuario, sClaveCliente: sClaveCliente, sClave: sClave, - asignado: e.currentTarget.checked, + asignado: e.currentTarget.checked } console.log('data= ' + JSON.stringify(data)) ClientesServices.asignaClienteProveedor(data) @@ -317,7 +317,7 @@ export const Register: React.FC<{}> = (props) => { const data: DTOClienteTransportista = { IdUsuario: IdUsuario, sClave: sClave, - asignado: e.currentTarget.checked, + asignado: e.currentTarget.checked } ClientesServices.asignaClienteTransportista(data) .then((response) => { @@ -400,7 +400,7 @@ export const Register: React.FC<{}> = (props) => { const procedeClonacion = () => { const data: DTOClonarUsuario = { idUsuarioOrigen: IdUsuario, - idUsuarioDestino: user2Clone, + idUsuarioDestino: user2Clone } usuariosServices .clonarUsuario(data) @@ -421,9 +421,9 @@ export const Register: React.FC<{}> = (props) => { } return ( -
-
-
+
+
+
= (props) => { isValid, dirty, values, - handleSubmit, + handleSubmit } = formik return (
- - + + Informacion obligatoria -
-
+
+
-
+
-
-
-
-
ID
+
+
+
+
ID
-
-
+
+
{errors.usuario && touched.usuario ? (
@@ -527,17 +527,17 @@ export const Register: React.FC<{}> = (props) => {
-
-
-
-
{ return ( - state.AmazonInvoices.Invoice + ) + const [ShowModal, setShowModal] = useState(false) + const [EstatusSwith, setEstatusSwitch] = useState(props.detail.autorizado) + const [Fraccion, setFraccion] = useState(props.detail.fraccionGEMCO) + const [UserChanged, setUserChanged] = useState(false) + const [DescripcionGEMCO, setDescripcionGEMCO] = useState( + props.detail.descripcionGEMCO + ) + const [header, setHeader] = useState('') + const [show, setShowMsg] = useState(false) + const [Show, setShow] = useState(false) + const [msg, setMsg] = useState('') + const [CumplimientoNormativo, setCumplimientoNormativo] = useState( + props.detail.cumplimientoNormativo ? props.detail.cumplimientoNormativo : '' + ) + 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) + } + 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 autoriceItem = (id: number) => { + if (EstatusSwith) { + if (CumplimientoNormativo.length === 0) { + setHeader('Error') + setMsg( + 'Antes de poder guardar la informacion es necesario que proporcione el cumplimiento normativo' + ) + setShowMsg(true) + return + } + if (Comentarios.length === 0) { + setHeader('Error') + setMsg( + 'Antes de poder guardar la informacion es necesario que proporcione los comentarios' + ) + setShowMsg(true) + return + } + if (DescripcionGEMCO.length === 0) { + setHeader('Error') + setMsg( + 'Antes de poder guardar la informacion es necesario que proporcione la descripcion GEMCO' + ) + setShowMsg(true) + return + } + } + const data: DTO2096FraccionDescripcion = { + id: id, + fraccion: Fraccion, + cumplimientoNormativo: CumplimientoNormativo, + comentarios: Comentarios, + descripcionGEMCO: DescripcionGEMCO + } + console.log(data) + DSAmazon.AutorizaItemFacturaAmazon(data) + .then((response) => { + editArray(id, !props.detail.autorizado) + setShowModal(false) + }) + .catch((e: Error) => {}) + } + + useEffect(() => { + if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO) + autoriceItem(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.pedimentoDescription} + +   {props.detail.destinationHTSCode} + + {props.detail.validaFraccionOriginal === 0 ? ( + + + + ) : props.detail.validaFraccionOriginal === 1 ? ( + + + + ) : ( + + + + )} + + + + + + + + {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="" + /> + + {' '} + {CumplimientoNormativo} + } + > + {({ ref, ...triggerHandler }) => ( + + )} + + + {' '} + {Comentarios}} + > + {({ ref, ...triggerHandler }) => ( + + )} + +
+   + openLink(props.detail.itemId)} + > + {props.detail.itemId} + + {props.detail.itemDescription} + + {props.detail.pedimentoDescription} + +   {props.detail.destinationHTSCode} + + {props.detail.validaFraccionOriginal === 0 ? ( + + + + ) : props.detail.validaFraccionOriginal === 1 ? ( + + + + ) : ( + + + + )} + + + + + + + + {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="" + /> + + {' '} + {CumplimientoNormativo} + } + > + {({ ref, ...triggerHandler }) => ( + + )} + + + {' '} + {Comentarios}} + > + {({ ref, ...triggerHandler }) => ( + + )} + +
-   - openLink(props.detail.itemId)} - > - {props.detail.itemId} - - {props.detail.itemDescription} - - {props.detail.pedimentoDescription} - -   {props.detail.destinationHTSCode} - - {props.detail.validaFraccionOriginal === 0 ? ( - - - - ) : props.detail.validaFraccionOriginal === 1 ? ( - - - - ) : ( - - - - )} - - - - - - - - {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="" - /> - - {' '} - {RequerimientoNormativo} - } - > - {({ ref, ...triggerHandler }) => ( - - )} - - - {' '} - {Comentarios}} - > - {({ ref, ...triggerHandler }) => ( - - )} - -
= (props) => { - @@ -1188,11 +1202,11 @@ export const Register: React.FC<{}> = (props) => { - +
-
+
{ addCliente(c.sClave, e) // loadProveedores(); }} /> + {c.sRazonSocial}
= (props) => { - @@ -1247,11 +1261,11 @@ export const Register: React.FC<{}> = (props) => { - +
-
+
{ asignaClienteTransportista( t.sClave, @@ -1235,7 +1249,7 @@ export const Register: React.FC<{}> = (props) => { }} /> + {t.sRazonSocial}
= (props) => { - - @@ -1314,10 +1328,10 @@ export const Register: React.FC<{}> = (props) => { - + - Error! + Error! Seleccione un perfil, para poder continuar... @@ -1333,11 +1347,11 @@ export const Register: React.FC<{}> = (props) => { onClose={() => setShowDialog(false)} show={showDialog} delay={3000} - bg='dark' + bg="dark" autohide > - Informacion + Informacion {msgDialog} @@ -1353,24 +1367,24 @@ export const Register: React.FC<{}> = (props) => { ] para ... [ {usuarioDestino} ] ? -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/index.tsx b/src/index.tsx index 2f3d0df..1f58c3c 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -40,13 +40,12 @@ import RptConsolidadosSinCerrar from './Components/GEMCO/Facturacion/Anexo/RptCo import RptRelacionAlen from './Components/GEMCO/Facturacion/Anexo/RptRelacionAlen' import { RptFacturasTxtHeineken } from './Components/Reportes/RptFacturasTxtHeineken' import { Notificaciones } from './Components/Utils/Notificaciones/Notificaciones' -import RtpAmazonPendingInvoices from './Components/Clientes/Amazon/Reportes/Clasification/RptAmazonPendingClasificationInvoices' -import RtpAmazonFinishedInvoices from './Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoices' +import RtpAmazonPendingClasificationInvoices from './Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoices' +import RtpAmazonFinishedClasificationInvoices from './Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoices' import { AmazonNoPartes } from './Components/Clientes/Amazon/Reportes/AmazonNoPartes' -import { RptAmazonPendingTraficInvoice } from './Components/Clientes/Amazon/Reportes/Traffic/RtpAmazonPendingTraficInvoice' -import { RptAmazonLinkInvoice2Traffic } from './Components/Clientes/Amazon/Reportes/Traffic/RptAmazonLinkInvoice2Traffic' -import RptPendingAnswerFromAmazon from './Components/Clientes/Amazon/Reportes/Clasification/RptPendingAnswerFromAmazon' - +import { RptAmazonPendingTraficInvoice } from './Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice' +import { RptAmazonLinkInvoice2Traffic } from './Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic' +import RptPendingAnswerFromAmazon from './Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazon' function PageNotFound() { return ( @@ -155,14 +154,14 @@ ReactDOM.render( element={} > } + path="/RptAmazonPendingClasificationInvoices" + element={} /> } + path="/RptAmazonFinishedClasificationInvoices" + element={} /> - } />
= (props) => { }} /> + {p.sRazonSocial} + {p.direccion}