Se agrega la facultad de poder enviar al proceso de pendiente x respuesta de Amazon

AmazonRelease1.1
unknown 2 years ago
parent 2c62810042
commit dc634e616a
  1. 4
      src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx
  2. 107
      src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx
  3. 7
      src/Components/Clientes/Amazon/DTO/DTO2096FraccionDescripcion.ts
  4. 2
      src/Components/Clientes/Amazon/DTO/DTO2096ItemAutoriza.ts
  5. 3
      src/Components/Clientes/Amazon/Interfaces/I2096Detail.ts
  6. 63
      src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoices.tsx
  7. 561
      src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoicesDetail.tsx
  8. 183
      src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoices.tsx
  9. 151
      src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoicesDetail.tsx
  10. 12
      src/Components/Clientes/Amazon/Reportes/Clasification/RptAmazonFinishedClasificationInvoicesDetail.tsx
  11. 21
      src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazon.tsx
  12. 619
      src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazonDetail.tsx
  13. 562
      src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonInvoiceTrafficDetail.tsx
  14. 20
      src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx
  15. 20
      src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RptAmazonPendingTraficInvoiceDetail.tsx
  16. 10
      src/Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice.tsx
  17. 563
      src/Components/Clientes/Amazon/Reportes/Traffic/RptAmazonInvoiceTrafficDetail.tsx
  18. 29
      src/Components/Clientes/Amazon/Services/Amazon.Services.ts
  19. 8
      src/Components/Dashboard/DashboardClasificacion.tsx
  20. 706
      src/Components/Register/register.tsx
  21. 21
      src/index.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) {
<div>
<Form.Control
as="select"
disabled={!props.Habilitado}
disabled={props.Deshabilitado}
className="form-select form-select-sm"
onChange={(e) => changeValidacion(parseInt(e.target.value))}
value={Validacion}

@ -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) {
<Form.Control
as="select"
className="form-select form-select-sm"
disabled={props.Deshabilitado}
onChange={(e) => changeValidacion(parseInt(e.target.value))}
value={Validacion}
>
@ -183,7 +191,7 @@ export function ComboFraccion(props: IComboFraccionProps) {
>
<Modal.Body>
<Row>
<Col xs={3}>Proporcione la facccion GEMCO</Col>
<Col xs={3}>Fraccion GEMCO</Col>
<Col xs={3}>
<CurrencyFormat
onValueChange={(values: any) => {
@ -207,40 +215,51 @@ export function ComboFraccion(props: IComboFraccionProps) {
<Col xs={6}></Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="RequerimientoNormativo"
size="sm"
value={RequerimientoNormativo}
onChange={(e) => setRequerimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length
? Comentarios
: 'Clasificacion incorrecta.'
}
onChange={(e) => setComentarios(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{paddingTop:'10px'}}>
<Col XS={9}></Col>
<Col xs={3}>
<Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="CumplimientoNormativo"
size="sm"
value={CumplimientoNormativo}
onChange={(e) => setCumplimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length ? Comentarios : 'Clasificacion incorrecta.'
}
onChange={(e) => setComentarios(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Descripcion GEMCO</Col>
<Col xs={8}>
<Form.Control
as="textarea"
id="PedimentoDescripcion"
size="sm"
value={
DescripcionGEMCO
}
/>
</Col>
</Row>
<Row style={{ paddingTop: '10px' }}>
<Col XS={9}></Col>
<Col xs={3}>
<Button
onClick={() => {
saveFraccion()
@ -249,7 +268,7 @@ export function ComboFraccion(props: IComboFraccionProps) {
Guardar
</Button>
</Col>
</Row>
</Row>
</Modal.Body>
</Modal>
<MsgInformativo

@ -0,0 +1,7 @@
export default interface DTO2096FraccionDescripcion {
id: number
fraccion: string
cumplimientoNormativo: string
comentarios: string
descripcionGEMCO: string
}

@ -1,6 +1,6 @@
export default interface DTO2096ItemAutoriza {
id: number,
autorizado: boolean,
requerimientoNormativo: string,
cumplimientoNormativo: string,
comentarios: string
}

@ -36,9 +36,10 @@ export default interface I2096Detail {
fCreacion: string
estatus: number
autorizado: boolean
requerimientoNormativo: string
cumplimientoNormativo: string
comentarios: string
sightLine: boolean
comentariosSightLine: string
checked: boolean
activo: number
}

@ -9,29 +9,29 @@ 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'
import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail'
} from '../../../../../../store/features/Clientes/2096/AmazonInvoices'
import RtpAmazonFinishedClasificationInvoicesDetail from './RptAmazonFinishedClasificationInvoicesDetail'
// Redux
import { useDispatch, useSelector } from 'react-redux'
export interface IRptAmazonFinishedInvoicesProps {}
export interface IRptAmazonFinishedClasificationInvoicesProps {}
export default function RptAmazonFinishedInvoices(
props: IRptAmazonFinishedInvoicesProps
export default function RptAmazonFinishedClasificationInvoices(
props: IRptAmazonFinishedClasificationInvoicesProps
) {
const dispatch = useDispatch()
const mInvoices = useSelector(
@ -78,6 +78,11 @@ export default function RptAmazonFinishedInvoices(
link.setAttribute('download', 'Plantilla de partes.xlsx')
document.body.appendChild(link)
link.click()
DSAmazon.TerminaClasificarFactura(id)
.then((response) => { })
.catch((e: Error) => {
alert('Ocurrio un error' + e.message.toString())
})
}
})
.catch((e: Error) => {
@ -135,11 +140,6 @@ export default function RptAmazonFinishedInvoices(
<th style={{ width: '50px' }}></th>
<th style={{ width: '80px' }}>Commercial Invoice Date</th>
<th style={{ width: '300px' }}>Invoice Number</th>
{/* <th>Trailer Number</th>
<th>Trailer Id</th>
<th>Por Of Loading</th>
<th>Port of entry</th>
<th>Payments Terms</th> */}
<th style={{ width: '100px' }}>Incoterms</th>
<th style={{ textAlign: 'center' }}>HAWB</th>
<th>Qty Unit of measure</th>
@ -193,7 +193,7 @@ export default function RptAmazonFinishedInvoices(
</td>
<td>{MasterData.id}</td>
<td>
{MasterData.estatus === 2 ? (
{MasterData.estatus >= 3 ? (
<div
onClick={() => downloadExcel(MasterData.id)}
>
@ -211,21 +211,6 @@ export default function RptAmazonFinishedInvoices(
<td style={{ width: '300px' }}>
{MasterData.invoiceNumber}
</td>
{/* <td style={{ textAlign: 'center' }}>
{MasterData.trailerNumber}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.trailerId}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.porOfLoading}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.portOfEntry}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.paymentsTerms}
</td> */}
<td style={{ width: '100px', textAlign: 'center' }}>
{MasterData.incoterms}
</td>
@ -274,7 +259,7 @@ export default function RptAmazonFinishedInvoices(
: 'normalSelected2'
}
>
<th colSpan={10}>
<th colSpan={15}>
<table
className="childTable"
style={{ width: '1450px' }}
@ -478,11 +463,11 @@ export default function RptAmazonFinishedInvoices(
)
.map((detail) => {
return (
<RtpAmazonPendingInvoicesDetail
<RtpAmazonFinishedClasificationInvoicesDetail
IDMaster={MasterData.id}
detail={detail}
Habilitado={
MasterData.estatus <= 1
Deshabilitado={
MasterData.estatus >= 3
}
/>
)

@ -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 id="popover-basic">
<Popover.Header as="h3">Popover right</Popover.Header>
<Popover.Body>
And here's some <strong>amazing</strong> content. It's very engaging.
right?
</Popover.Body>
</Popover>
)
return (
<>
<tr>
<th
style={{
width: '50px',
backgroundColor: '#FFFFFF'
}}
className="DetailData"
>
&nbsp;
</th>
<td
style={{
textAlign: 'center',
cursor: 'pointer'
}}
className="DetailData"
onClick={() => openLink(props.detail.itemId)}
>
{props.detail.itemId}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.itemDescription}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.pedimentoDescription}
</td>
<td
style={{
textAlign: 'center',
fontSize: '18px'
}}
className="DetailData"
>
&nbsp;&nbsp;{props.detail.destinationHTSCode}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.validaFraccionOriginal === 0 ? (
<IconContext.Provider
value={{
color: 'orange',
size: '20px'
}}
>
<FaQuestionCircle />
</IconContext.Provider>
) : props.detail.validaFraccionOriginal === 1 ? (
<IconContext.Provider
value={{
color: 'green',
size: '20px'
}}
>
<FaCheckCircle />
</IconContext.Provider>
) : (
<IconContext.Provider
value={{
color: 'red',
size: '20px'
}}
>
<ImCross />
</IconContext.Provider>
)}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboFraccion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
FraccionOriginal={props.detail.destinationHTSCode}
ConfirmaFraccion={props.detail.confirmaFraccion}
Deshabilitado={props.Deshabilitado}
Detail={props.detail}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<CurrencyFormat
value={props.detail.fraccionGEMCO ? props.detail.fraccionGEMCO : ''}
disabled={true}
format={'######## ##'}
displayType={'input'}
style={{
fontSize: '18px',
backgroundColor:
props.detail.validaFraccionOriginal === 0
? '#FFFAF2 '
: '#E5F7B6',
border:
props.detail.validaFraccionOriginal === 0
? '2px solid #F9A721'
: '2px solid green',
color:
props.detail.validaFraccionOriginal === 0
? '#5923F6'
: '#000000',
width: '115px',
textAlign: 'right',
borderRadius: '10px'
}}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboDescripcion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
DescripcionOriginal={props.detail.pedimentoDescription}
ConfirmaDescripcion={props.detail.confirmaDescripcion}
Deshabilitado={props.Deshabilitado}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.descripcionGEMCO}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.countryOfOrigin}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.productGroup}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.brand}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.model}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.itemQuantityUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.quantity}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.weightValue}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.netWeightUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.actualUnitCostMonetaryAmount}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.totalUnitValueMonetaryAmount}
</td>
<td
style={{
textAlign: 'center',
paddingLeft: '30px',
visibility:
props.detail.destinationHTSCode.replaceAll('.', '').trim() !==
(props.detail.fraccionGEMCO
? props.detail.fraccionGEMCO.trim()
: '')
? 'visible'
: 'hidden'
}}
className="DetailData"
>
{/* <FormCheck
className="form-check form-switch form-control-lg"
id="switchEnabled"
type="switch"
disabled={
props.detail.fraccionGEMCO ===
props.detail.destinationHTSCode.replaceAll('.', '')
}
checked={EstatusSwith && props.detail.autorizado}
onChange={() => {
setEstatusSwitch(!EstatusSwith)
setUserChanged(true)
setShowModal(!EstatusSwith)
}}
label=""
/> */}
</td>
<td
style={{
visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="button-tooltip-2">{CumplimientoNormativo}</Tooltip>
}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'blue',
size: '25px'
}}
>
<AiOutlineFileSearch />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
<td
style={{
visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'green',
size: '25px'
}}
>
<BsFillChatRightTextFill />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
</tr>
<Modal
show={ShowModal}
onHide={() => {
setShowModal(false)
}}
size={'sm'}
dialogClassName={'modal-50w'}
>
<Modal.Body>
<div style={{ height: '280px' }}>
<Row style={{ paddingTop: '15px' }}>
<Col xs={1}></Col>
<Col xs={10}>
<Alert key={'danger'} variant={'danger'}>
¿Esta seguro que esta fraccion ya la autorizo Amazon?
</Alert>
</Col>
<Col xs={1}></Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="RequerimientoNormativo"
size="sm"
value={CumplimientoNormativo}
onChange={(e) => setCumplimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length
? Comentarios
: 'Clasificacion incorrecta.'
}
onChange={(e) => setComentarios(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="secondary"
onClick={() => {
setShowModal(false)
}}
>
&nbsp;&nbsp;No&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger"
onClick={() => {
autoriceItem(props.detail.id)
}}
>
&nbsp;&nbsp;Si&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -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(
)}
</td>
<td>{MasterData.id}</td>
<td>
{/* {existsExeptions(MasterData.id) > 0 ? (
<div
onClick={() =>
downloadExceptionsFile(MasterData.id)
}
title="Archivo de excepciones"
>
<IconContext.Provider
value={{ color: 'orange', size: '20px' }}
>
<FaFileExcel />
</IconContext.Provider>
</div>
) : null} */}
</td>
<td>
{/* {MasterData.estatus === 1 ? (
<div
onClick={() => downloadExcel(MasterData.id)}
>
<IconContext.Provider
value={{ color: 'green', size: '20px' }}
>
<AiTwotoneFileExcel />
</IconContext.Provider>
</div>
) : null} */}
</td>
<td></td>
<td>
<FormCheck
className="form-check form-switch form-control-sm"
style={{visibility: existsExeptions(MasterData.id) > 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'
}
>
<th colSpan={10}>
<th colSpan={17}>
<table
className="childTable"
style={{ width: '1450px' }}
@ -568,6 +607,15 @@ export default function RtpAmazonPendingInvoices(
>
Comm
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Chk
</th>
</tr>
</thead>
<tbody>
@ -582,11 +630,14 @@ export default function RtpAmazonPendingInvoices(
)
.map((detail) => {
return (
<RtpAmazonPendingInvoicesDetail
<RtpAmazonPendingClasificationInvoicesDetail
IDMaster={MasterData.id}
detail={detail}
Habilitado={
MasterData.estatus <= 1
Deshabilitado={
detail.destinationHTSCode
.replaceAll('.', '')
.trim() ===
detail.fraccionGEMCO
}
/>
)
@ -652,6 +703,52 @@ export default function RtpAmazonPendingInvoices(
</div>
</Modal.Body>
</Modal>
<Modal
show={ShowModalW}
onHide={() => {
setShowModalW(false)
}}
size={'sm'}
dialogClassName={'modal-50w'}
>
<Modal.Body>
<div style={{ height: '180px' }}>
<Row style={{ paddingTop: '15px' }}>
<Col xs={1}></Col>
<Col xs={10}>
<Alert key={'danger'} variant={'danger'}>
La factura esta lista para enviarse al proceso de esperar respuesta de Amazon
</Alert>
</Col>
<Col xs={1}></Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="secondary"
onClick={() => {
setShowModal(false)
}}
>
&nbsp;&nbsp;No&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger"
onClick={() => {
send2WaitingProcess(IDFactura)
}}
>
&nbsp;&nbsp;Si&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<MsgInformativo
show={show}
msg={msg}

@ -5,7 +5,6 @@ import {
Button,
Col,
Form,
FormCheck,
Modal,
OverlayTrigger,
Popover,
@ -15,17 +14,17 @@ 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'
@ -33,7 +32,7 @@ import { BsFillChatRightTextFill } from 'react-icons/bs'
export interface IRtpAmazonPendingInvoivesDetailProps {
IDMaster: number
detail: I2096Detail
Habilitado: boolean
Deshabilitado: boolean
}
export default function RtpAmazonPendingInvoivesDetail(
@ -43,17 +42,16 @@ export default function RtpAmazonPendingInvoivesDetail(
const mInvoices = useSelector(
(state: RootState) => 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(
</Popover>
)
const checkDetail = () => {
DSAmazon.CheckDetail(props.detail.id)
.then((response) => {
setChecked(!Checked)
})
.catch((e: Error) => {})
}
return (
<>
<tr>
<th
style={{
width: '50px',
backgroundColor: '#FFFFFF'
}}
className="DetailData"
>
@ -171,7 +176,8 @@ export default function RtpAmazonPendingInvoivesDetail(
<td
style={{
textAlign: 'center',
cursor: 'pointer'
cursor: 'pointer',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
onClick={() => openLink(props.detail.itemId)}
@ -180,32 +186,36 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'right'
textAlign: 'right',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
className="DetailData"
>
{props.detail.itemDescription}
</td>
<td
style={{
textAlign: 'right'
textAlign: 'right',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
/* className="DetailData" */
>
{props.detail.pedimentoDescription}
</td>
<td
style={{
textAlign: 'center',
fontSize: '18px'
fontSize: '18px',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
/* className="DetailData" */
>
&nbsp;&nbsp;{props.detail.destinationHTSCode}
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -240,7 +250,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -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}
/>
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -286,7 +298,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -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}
/>
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -308,7 +322,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -316,7 +331,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'right'
textAlign: 'right',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -324,7 +340,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'right'
textAlign: 'right',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -332,7 +349,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'right'
textAlign: 'right',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -340,7 +358,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -348,7 +367,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -356,7 +376,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -364,7 +385,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -373,7 +395,8 @@ export default function RtpAmazonPendingInvoivesDetail(
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -381,7 +404,8 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
textAlign: 'center'
textAlign: 'center',
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'
}}
className="DetailData"
>
@ -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"
>
{/* <FormCheck
className="form-check form-switch form-control-lg"
id="switchEnabled"
type="switch"
disabled={
props.detail.fraccionGEMCO ===
props.detail.destinationHTSCode.replaceAll('.', '')
}
checked={EstatusSwith && props.detail.autorizado}
onChange={() => {
setEstatusSwitch(!EstatusSwith)
setUserChanged(true)
setShowModal(!EstatusSwith)
}}
label=""
/> */}
</td>
></td>
<td
style={{
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff',
visibility:
RequerimientoNormativo.length === 0 ? 'hidden' : 'visible'
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="button-tooltip-2">{RequerimientoNormativo}</Tooltip>
<Tooltip id="button-tooltip-2">{CumplimientoNormativo}</Tooltip>
}
>
{({ ref, ...triggerHandler }) => (
@ -448,8 +457,9 @@ export default function RtpAmazonPendingInvoivesDetail(
</td>
<td
style={{
backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff',
visibility:
RequerimientoNormativo.length === 0 ? 'hidden' : 'visible'
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
@ -472,6 +482,11 @@ export default function RtpAmazonPendingInvoivesDetail(
)}
</OverlayTrigger>
</td>
<td style={{backgroundColor: props.detail.checked ? '#E6EEF5' : '#ffffff'}}>
<Form>
<Form.Check type="checkbox" id="Checkbox" onClick={()=>{ checkDetail()}} checked={Checked}/>
</Form>
</td>
</tr>
<Modal
@ -501,8 +516,8 @@ export default function RtpAmazonPendingInvoivesDetail(
as="textarea"
id="RequerimientoNormativo"
size="sm"
value={RequerimientoNormativo}
onChange={(e) => setRequerimientoNormativo(e.target.value)}
value={CumplimientoNormativo}
onChange={(e) => setCumplimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>

@ -1,12 +0,0 @@
import * as React from 'react';
export interface IRptAmazonFinishedClasificationInvoicesDetailProps {
}
export default function RptAmazonFinishedClasificationInvoicesDetail (props: IRptAmazonFinishedClasificationInvoicesDetailProps) {
return (
<div>
</div>
);
}

@ -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}
</td>
<td>
<FormCheck
{/* <FormCheck
className="form-check form-switch form-control-sm"
id="switchEnabled"
type="switch"
@ -302,7 +302,7 @@ export default function RptPendingAnswerFromAmazon(
facturaTerminada(MasterData)
}}
label=""
/>
/> */}
</td>
<td style={{ width: '80px', textAlign: 'center' }}>
{MasterData.commercialInvoiceDate}
@ -358,7 +358,7 @@ export default function RptPendingAnswerFromAmazon(
: 'normalSelected2'
}
>
<th colSpan={10}>
<th colSpan={17}>
<table
className="childTable"
style={{ width: '1450px' }}
@ -532,7 +532,6 @@ export default function RptPendingAnswerFromAmazon(
>
Unit Net Weight
</th>
<th
style={{
width: '70px',
@ -592,7 +591,7 @@ export default function RptPendingAnswerFromAmazon(
)
.map((detail) => {
return (
<RtpAmazonPendingInvoicesDetail
<RtpPendingAnswerFromAmazonDetail
IDMaster={MasterData.id}
detail={detail}
Habilitado={

@ -0,0 +1,619 @@
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 DTO2096FraccionDescripcion from '../../../DTO/DTO2096FraccionDescripcion'
export interface IRptPendingAnswerFromAmazonDetailProps {
IDMaster: number
detail: I2096Detail
Habilitado: boolean
}
export default function RptPendingAnswerFromAmazonDetail(
props: IRptPendingAnswerFromAmazonDetailProps
) {
const dispatch = useDispatch()
const mInvoices = useSelector(
(state: RootState) => 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 id="popover-basic">
<Popover.Header as="h3">Popover right</Popover.Header>
<Popover.Body>
And here's some <strong>amazing</strong> content. It's very engaging.
right?
</Popover.Body>
</Popover>
)
return (
<>
<tr>
<th
style={{
width: '50px',
backgroundColor: '#FFFFFF'
}}
className="DetailData"
>
&nbsp;
</th>
<td
style={{
textAlign: 'center',
cursor: 'pointer'
}}
className="DetailData"
onClick={() => openLink(props.detail.itemId)}
>
{props.detail.itemId}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.itemDescription}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.pedimentoDescription}
</td>
<td
style={{
textAlign: 'center',
fontSize: '18px'
}}
className="DetailData"
>
&nbsp;&nbsp;{props.detail.destinationHTSCode}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.validaFraccionOriginal === 0 ? (
<IconContext.Provider
value={{
color: 'orange',
size: '20px'
}}
>
<FaQuestionCircle />
</IconContext.Provider>
) : props.detail.validaFraccionOriginal === 1 ? (
<IconContext.Provider
value={{
color: 'green',
size: '20px'
}}
>
<FaCheckCircle />
</IconContext.Provider>
) : (
<IconContext.Provider
value={{
color: 'red',
size: '20px'
}}
>
<ImCross />
</IconContext.Provider>
)}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboFraccion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
FraccionOriginal={props.detail.destinationHTSCode}
ConfirmaFraccion={props.detail.confirmaFraccion}
Deshabilitado={true}
Detail={props.detail}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<CurrencyFormat
value={props.detail.fraccionGEMCO ? props.detail.fraccionGEMCO : ''}
disabled={true}
format={'######## ##'}
displayType={'input'}
style={{
fontSize: '18px',
backgroundColor:
props.detail.validaFraccionOriginal === 0
? '#FFFAF2 '
: '#E5F7B6',
border:
props.detail.validaFraccionOriginal === 0
? '2px solid #F9A721'
: '2px solid green',
color:
props.detail.validaFraccionOriginal === 0
? '#5923F6'
: '#000000',
width: '115px',
textAlign: 'right',
borderRadius: '10px'
}}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboDescripcion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
DescripcionOriginal={props.detail.pedimentoDescription}
ConfirmaDescripcion={props.detail.confirmaDescripcion}
Deshabilitado={true}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.descripcionGEMCO}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.countryOfOrigin}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.productGroup}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.brand}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.model}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.itemQuantityUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.quantity}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.weightValue}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.netWeightUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.actualUnitCostMonetaryAmount}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.totalUnitValueMonetaryAmount}
</td>
<td
style={{
textAlign: 'center',
paddingLeft: '30px',
visibility:
props.detail.destinationHTSCode.replaceAll('.', '').trim() !==
(props.detail.fraccionGEMCO
? props.detail.fraccionGEMCO.trim()
: '')
? 'visible'
: 'hidden'
}}
className="DetailData"
>
<FormCheck
className="form-check form-switch form-control-lg"
id="switchEnabled"
type="switch"
disabled={
props.detail.fraccionGEMCO ===
props.detail.destinationHTSCode.replaceAll('.', '')
}
checked={EstatusSwith && props.detail.autorizado}
onChange={() => {
setEstatusSwitch(!EstatusSwith)
setUserChanged(true)
setShowModal(!EstatusSwith)
}}
label=""
/>
</td>
<td
style={{
visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="button-tooltip-2">{CumplimientoNormativo}</Tooltip>
}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'blue',
size: '25px'
}}
>
<AiOutlineFileSearch />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
<td
style={{
visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'green',
size: '25px'
}}
>
<BsFillChatRightTextFill />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
</tr>
<Modal
show={ShowModal}
onHide={() => {
setShowModal(false)
}}
size={'sm'}
dialogClassName={'modal-50w'}
>
<Modal.Body>
<div style={{ height: '380px' }}>
<Row style={{ paddingTop: '15px' }}>
<Col xs={12}>
<Alert key={'danger'} variant={'danger'}>
¿Esta seguro que esta fraccion ya la autorizo Amazon?
</Alert>
</Col>
</Row>
<Row>
<Col xs={3}>Fraccion GEMCO</Col>
<Col xs={3}>
<CurrencyFormat
onValueChange={(values: any) => {
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'
}}
/>
</Col>
<Col xs={6}></Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="RequerimientoNormativo"
size="sm"
value={CumplimientoNormativo}
onChange={(e) => setCumplimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length
? Comentarios
: 'Clasificacion incorrecta.'
}
onChange={(e) => setComentarios(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Descripcion GEMCO</Col>
<Col xs={8}>
<Form.Control
as="textarea"
id="PedimentoDescripcion"
size="sm"
value={DescripcionGEMCO}
/>
</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="secondary"
onClick={() => {
setShowModal(false)
}}
>
&nbsp;&nbsp;No&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger"
onClick={() => {
autoriceItem(props.detail.id)
}}
>
&nbsp;&nbsp;Si&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -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 id="popover-basic">
<Popover.Header as="h3">Popover right</Popover.Header>
<Popover.Body>
And here's some <strong>amazing</strong> content. It's very engaging.
right?
</Popover.Body>
</Popover>
)
return (
<>
<tr>
<th
style={{
width: '50px',
backgroundColor: '#FFFFFF'
}}
className="DetailData"
>
&nbsp;
</th>
<td
style={{
textAlign: 'center',
cursor: 'pointer'
}}
className="DetailData"
onClick={() => openLink(props.detail.itemId)}
>
{props.detail.itemId}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.itemDescription}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.pedimentoDescription}
</td>
<td
style={{
textAlign: 'center',
fontSize: '18px'
}}
className="DetailData"
>
&nbsp;&nbsp;{props.detail.destinationHTSCode}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.validaFraccionOriginal === 0 ? (
<IconContext.Provider
value={{
color: 'orange',
size: '20px'
}}
>
<FaQuestionCircle />
</IconContext.Provider>
) : props.detail.validaFraccionOriginal === 1 ? (
<IconContext.Provider
value={{
color: 'green',
size: '20px'
}}
>
<FaCheckCircle />
</IconContext.Provider>
) : (
<IconContext.Provider
value={{
color: 'red',
size: '20px'
}}
>
<ImCross />
</IconContext.Provider>
)}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboFraccion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
FraccionOriginal={props.detail.destinationHTSCode}
ConfirmaFraccion={props.detail.confirmaFraccion}
Deshabilitado={props.Habilitado}
Detail={props.detail}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<CurrencyFormat
value={props.detail.fraccionGEMCO ? props.detail.fraccionGEMCO : ''}
disabled={true}
format={'######## ##'}
displayType={'input'}
style={{
fontSize: '18px',
backgroundColor:
props.detail.validaFraccionOriginal === 0
? '#FFFAF2 '
: '#E5F7B6',
border:
props.detail.validaFraccionOriginal === 0
? '2px solid #F9A721'
: '2px solid green',
color:
props.detail.validaFraccionOriginal === 0
? '#5923F6'
: '#000000',
width: '115px',
textAlign: 'right',
borderRadius: '10px'
}}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboDescripcion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
DescripcionOriginal={props.detail.pedimentoDescription}
ConfirmaDescripcion={props.detail.confirmaDescripcion}
Deshabilitado={props.Habilitado}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.descripcionGEMCO}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.countryOfOrigin}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.productGroup}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.brand}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.model}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.itemQuantityUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.quantity}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.weightValue}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.netWeightUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.actualUnitCostMonetaryAmount}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.totalUnitValueMonetaryAmount}
</td>
<td
style={{
textAlign: 'center',
paddingLeft: '30px',
visibility:
props.detail.destinationHTSCode.replaceAll('.', '').trim() !==
(props.detail.fraccionGEMCO
? props.detail.fraccionGEMCO.trim()
: '')
? 'visible'
: 'hidden'
}}
className="DetailData"
>
<FormCheck
className="form-check form-switch form-control-lg"
id="switchEnabled"
type="switch"
disabled={
props.detail.fraccionGEMCO ===
props.detail.destinationHTSCode.replaceAll('.', '')
}
checked={EstatusSwith && props.detail.autorizado}
onChange={() => {
setEstatusSwitch(!EstatusSwith)
setUserChanged(true)
setShowModal(!EstatusSwith)
}}
label=""
/>
</td>
<td
style={{
visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="button-tooltip-2">{CumplimientoNormativo}</Tooltip>
}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'blue',
size: '25px'
}}
>
<AiOutlineFileSearch />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
<td
style={{
visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'green',
size: '25px'
}}
>
<BsFillChatRightTextFill />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
</tr>
<Modal
show={ShowModal}
onHide={() => {
setShowModal(false)
}}
size={'sm'}
dialogClassName={'modal-50w'}
>
<Modal.Body>
<div style={{ height: '280px' }}>
<Row style={{ paddingTop: '15px' }}>
<Col xs={1}></Col>
<Col xs={10}>
<Alert key={'danger'} variant={'danger'}>
¿Esta seguro que esta fraccion ya la autorizo Amazon?
</Alert>
</Col>
<Col xs={1}></Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="RequerimientoNormativo"
size="sm"
value={CumplimientoNormativo}
onChange={(e) => setCumplimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length
? Comentarios
: 'Clasificacion incorrecta.'
}
onChange={(e) => setComentarios(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="secondary"
onClick={() => {
setShowModal(false)
}}
>
&nbsp;&nbsp;No&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger"
onClick={() => {
autoriceItem(props.detail.id)
}}
>
&nbsp;&nbsp;Si&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -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

@ -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

@ -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'

@ -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 id="popover-basic">
<Popover.Header as="h3">Popover right</Popover.Header>
<Popover.Body>
And here's some <strong>amazing</strong> content. It's very engaging.
right?
</Popover.Body>
</Popover>
)
return (
<>
<tr>
<th
style={{
width: '50px',
backgroundColor: '#FFFFFF'
}}
className="DetailData"
>
&nbsp;
</th>
<td
style={{
textAlign: 'center',
cursor: 'pointer'
}}
className="DetailData"
onClick={() => openLink(props.detail.itemId)}
>
{props.detail.itemId}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.itemDescription}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.pedimentoDescription}
</td>
<td
style={{
textAlign: 'center',
fontSize: '18px'
}}
className="DetailData"
>
&nbsp;&nbsp;{props.detail.destinationHTSCode}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.validaFraccionOriginal === 0 ? (
<IconContext.Provider
value={{
color: 'orange',
size: '20px'
}}
>
<FaQuestionCircle />
</IconContext.Provider>
) : props.detail.validaFraccionOriginal === 1 ? (
<IconContext.Provider
value={{
color: 'green',
size: '20px'
}}
>
<FaCheckCircle />
</IconContext.Provider>
) : (
<IconContext.Provider
value={{
color: 'red',
size: '20px'
}}
>
<ImCross />
</IconContext.Provider>
)}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboFraccion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
FraccionOriginal={props.detail.destinationHTSCode}
ConfirmaFraccion={props.detail.confirmaFraccion}
Habilitado={props.Habilitado}
Detail={props.detail}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<CurrencyFormat
value={props.detail.fraccionGEMCO ? props.detail.fraccionGEMCO : ''}
disabled={true}
format={'######## ##'}
displayType={'input'}
style={{
fontSize: '18px',
backgroundColor:
props.detail.validaFraccionOriginal === 0
? '#FFFAF2 '
: '#E5F7B6',
border:
props.detail.validaFraccionOriginal === 0
? '2px solid #F9A721'
: '2px solid green',
color:
props.detail.validaFraccionOriginal === 0
? '#5923F6'
: '#000000',
width: '115px',
textAlign: 'right',
borderRadius: '10px'
}}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
<ComboDescripcion
IDInvoice={props.IDMaster}
IDDetail={props.detail.id}
DescripcionOriginal={props.detail.pedimentoDescription}
ConfirmaDescripcion={props.detail.confirmaDescripcion}
Habilitado={props.Habilitado}
/>
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.descripcionGEMCO}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.countryOfOrigin}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.productGroup}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.brand}
</td>
<td
style={{
textAlign: 'right'
}}
className="DetailData"
>
{props.detail.model}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.itemQuantityUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.quantity}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.weightValue}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.netWeightUnitOfMeasure}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.actualUnitCostMonetaryAmount}
</td>
<td
style={{
textAlign: 'center'
}}
className="DetailData"
>
{props.detail.totalUnitValueMonetaryAmount}
</td>
<td
style={{
textAlign: 'center',
paddingLeft: '30px',
visibility:
props.detail.destinationHTSCode.replaceAll('.', '').trim() !==
(props.detail.fraccionGEMCO
? props.detail.fraccionGEMCO.trim()
: '')
? 'visible'
: 'hidden'
}}
className="DetailData"
>
<FormCheck
className="form-check form-switch form-control-lg"
id="switchEnabled"
type="switch"
disabled={
props.detail.fraccionGEMCO ===
props.detail.destinationHTSCode.replaceAll('.', '')
}
checked={EstatusSwith && props.detail.autorizado}
onChange={() => {
setEstatusSwitch(!EstatusSwith)
setUserChanged(true)
setShowModal(!EstatusSwith)
}}
label=""
/>
</td>
<td
style={{
visibility:
RequerimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="button-tooltip-2">{RequerimientoNormativo}</Tooltip>
}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'blue',
size: '25px'
}}
>
<AiOutlineFileSearch />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
<td
style={{
visibility:
RequerimientoNormativo.length === 0 ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'green',
size: '25px'
}}
>
<BsFillChatRightTextFill />
</IconContext.Provider>
<span className="ms-1"></span>
</Button>
)}
</OverlayTrigger>
</td>
</tr>
<Modal
show={ShowModal}
onHide={() => {
setShowModal(false)
}}
size={'sm'}
dialogClassName={'modal-50w'}
>
<Modal.Body>
<div style={{ height: '280px' }}>
<Row style={{ paddingTop: '15px' }}>
<Col xs={1}></Col>
<Col xs={10}>
<Alert key={'danger'} variant={'danger'}>
¿Esta seguro que esta fraccion ya la autorizo Amazon?
</Alert>
</Col>
<Col xs={1}></Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="RequerimientoNormativo"
size="sm"
value={RequerimientoNormativo}
onChange={(e) => setRequerimientoNormativo(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length
? Comentarios
: 'Clasificacion incorrecta.'
}
onChange={(e) => setComentarios(e.target.value)}
/>
</Col>
<Col>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="secondary"
onClick={() => {
setShowModal(false)
}}
>
&nbsp;&nbsp;No&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger"
onClick={() => {
autoriceItem(props.detail.id)
}}
>
&nbsp;&nbsp;Si&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -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<DTORespuesta>(`/AmazonInvoice/SePuedeTerminardeClasificarFactura?id=${id}`)
}
SePuedeTerminardeClasificarFacturaEsperandoRespuesta(id: number) {
return http.get<DTORespuesta>(`/AmazonInvoice/SePuedeTerminardeClasificarFacturaEsperandoRespuesta?id=${id}`)
}
EnviaEsperaRespuestaAmazon(id: number) {
return http.get<DTORespuesta>(`/AmazonInvoice/EnviaEsperaRespuestaAmazon?id=${id}`)
}
TerminaClasificarFactura(id: number) {
return http.get<boolean>(`/AmazonInvoice/TerminaClasificarFactura?id=${id}`)
}
CheckDetail(id: number) {
return http.put<I2096Detail>(`/AmazonInvoice/C2096CheckDetail?id=${id}`)
}
/* ClasificationFinish(data: DTO2096ItemAutoriza) {
return http.post<DTO2096ItemAutoriza>(`/AmazonInvoice/C2096ItemAutorizado`, data)
} */
AmazonPendingTraficInvoiceGET() {
return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonPendingTraficInvoiceGet`)
}
/* AmazonFinishedTraficInvoiceGET() {
return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonFinishedTraficInvoiceGet`)
} */
AmazonLinkInvoice2TrafficGet() {
return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonLinkInvoice2TrafficGet`)
}
@ -43,21 +53,24 @@ class AmazonDataService {
return http.get<boolean>(`/AmazonInvoice/TerminaXTraficoFactura?id=${id}`)
}
/* SePuedeTerminarFactura(id: number) {
return http.get<DTORespuesta>(`/AmazonInvoice/SePuedeTerminarFactura?id=${id}`)
} */
ValidaFraccionGET(Fraccion: string) {
return http.get<IRespuesta>(`/AmazonInvoice/C2096ValidaFraccion?Fraccion=${Fraccion}`)
}
SETFraccionDescripcion(data: DTO2096FraccionDescripcion) {
return http.put<I2096Detail>(`/AmazonInvoice/C2096FraccionDescripcionSET`, data)
}
FraccionSET(data: DTO2096Fraccion) {
return http.post<I2096Detail>(`/AmazonInvoice/C2096FraccionSet`, data)
}
DescripcionSET(data: DTO2096Descripcion) {
return http.post<I2096Detail>(`/AmazonInvoice/C2096DescripcionSet`, data)
}
AutorizadoSET(data: DTO2096ItemAutoriza) {
return http.post<DTO2096ItemAutoriza>(`/AmazonInvoice/C2096ItemAutorizado`, data)
AutorizaItemFacturaAmazon(data: DTO2096FraccionDescripcion) {
return http.put<I2096Detail>(`/AmazonInvoice/C2096AutorizaItemFactura`, data)
}
/* SETAutorizado(data: DTO2096FraccionDescripcion) {
return http.put<I2096Detail>(`/AmazonInvoice/C2096ItemAutorizadoSET`, data)
} */
SightLineSET(data: DTO2096SightLine) {
return http.put<DTO2096SightLine>(`/AmazonInvoice/AmazonSightLineSET`, data)
}

@ -56,7 +56,7 @@ export function DashboardClasificacion(props: IDashboardClasificacionProps) {
<Row>
<Col xs={6} style={{}}>
<Link
to="../RptAmazonFinishedInvoices"
to="../RptAmazonFinishedClasificationInvoices"
style={{
textDecoration: 'none',
float: 'left',
@ -68,7 +68,7 @@ export function DashboardClasificacion(props: IDashboardClasificacionProps) {
</Col>
<Col xs={6} className="text-center">
<Link
to="../RptAmazonPendingInvoices"
to="../RptAmazonPendingClasificationInvoices"
style={{
textDecoration: 'none',
float: 'right',
@ -99,10 +99,10 @@ export function DashboardClasificacion(props: IDashboardClasificacionProps) {
</Col>
</Row>
<Row>
<Col xs={6} style={{ fontSize: '6em' }} className="text-center">
<Col xs={6} style={{ fontSize: '4em' }} className="text-center">
{Terminadas}
</Col>
<Col xs={6} style={{ fontSize: '6em' }} className="text-center">
<Col xs={6} style={{ fontSize: '4em' }} className="text-center">
{Pendientes}
</Col>
</Row>

File diff suppressed because it is too large Load Diff

@ -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={<FormatoRevision />}
></Route>
<Route
path="/RptAmazonPendingInvoices"
element={<RtpAmazonPendingInvoices />}
path="/RptAmazonPendingClasificationInvoices"
element={<RtpAmazonPendingClasificationInvoices />}
/>
<Route
path="/RptAmazonFinishedInvoices"
element={<RtpAmazonFinishedInvoices />}
path="/RptAmazonFinishedClasificationInvoices"
element={<RtpAmazonFinishedClasificationInvoices />}
/>
<Route
<Route
path="/RptPendingAnswerFromAmazon"
element={<RptPendingAnswerFromAmazon />}
/>

Loading…
Cancel
Save