Se comienza el Reporte de Facturas pendientes por Trafico

AmazonRelease1.1
unknown 2 years ago
parent 60b80b6e48
commit 4c90e28c7b
  1. 6
      public/index.html
  2. 5
      src/Components/Clientes/Amazon/DTO/DTO2096SightLine.ts
  3. 2
      src/Components/Clientes/Amazon/Interfaces/I2096Detail.ts
  4. 152
      src/Components/Clientes/Amazon/Reportes/RptAmazonFinishedClasificationInvoices.tsx
  5. 79
      src/Components/Clientes/Amazon/Reportes/RptAmazonPendingClasificationInvoices.tsx
  6. 7
      src/Components/Clientes/Amazon/Reportes/RptAmazonPendingClasificationInvoicesDetail.tsx
  7. 408
      src/Components/Clientes/Amazon/Reportes/RptAmazonPendingTraficInvoiceDetail.tsx
  8. 540
      src/Components/Clientes/Amazon/Reportes/RtpAmazonPendingTraficInvoice.tsx
  9. 18
      src/Components/Clientes/Amazon/Services/Amazon.Services.ts
  10. 6
      src/Components/Dashboard/Dashboard.tsx
  11. 2
      src/Components/Dashboard/DashboardClasificacion.tsx
  12. 6
      src/Components/Dashboard/DashboardContabilidad.tsx
  13. 12
      src/Components/Dashboard/DashboardCorresponsales.tsx
  14. 2
      src/Components/Dashboard/DashboardFacturacion.tsx
  15. 113
      src/Components/Dashboard/DashboardTrafico.tsx
  16. 8
      src/css/generic01.css
  17. 6
      src/index.tsx

@ -24,6 +24,12 @@
work correctly both with client-side routing and a non-root public URL. work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`. Learn how to configure a non-root public URL by running `npm run build`.
--> -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Kanit&display=swap"
rel="stylesheet"
/>
<title>GEMCO</title> <title>GEMCO</title>
</head> </head>
<body> <body>

@ -0,0 +1,5 @@
export default interface DTO2096SightLine {
id: number,
sightLine: boolean,
comentariosSightLine: string
}

@ -38,5 +38,7 @@ export default interface I2096Detail {
autorizado: boolean autorizado: boolean
requerimientoNormativo: string requerimientoNormativo: string
comentarios: string comentarios: string
sightLine: boolean
comentariosSightLine: string
activo: number activo: number
} }

@ -17,63 +17,63 @@ import { RootState } from '../../../../store/store'
import { import {
initializeInvoice, initializeInvoice,
populateInvoices, populateInvoices,
updateInvoice, updateInvoice
} from '../../../../store/features/Clientes/2096/AmazonInvoices' } from '../../../../store/features/Clientes/2096/AmazonInvoices'
import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingInvoicesDetail' import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail'
// Redux // Redux
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
export interface IRptAmazonFinishedInvoicesProps { export interface IRptAmazonFinishedInvoicesProps {}
}
export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvoicesProps) { export default function RptAmazonFinishedInvoices(
const dispatch = useDispatch() props: IRptAmazonFinishedInvoicesProps
const mInvoices = useSelector( ) {
(state: RootState) => state.AmazonInvoices.Invoice const dispatch = useDispatch()
) const mInvoices = useSelector(
const [Inicio, setInicio] = useState(currentDate(0)) (state: RootState) => state.AmazonInvoices.Invoice
const [Fin, setFin] = useState(currentDate(0)) )
const [filtro, setFiltro] = useState('') const [Inicio, setInicio] = useState(currentDate(0))
const [header, setHeader] = useState('') const [Fin, setFin] = useState(currentDate(0))
const [show, setShowMsg] = useState(false) const [filtro, setFiltro] = useState('')
const [msg, setMsg] = useState('') const [header, setHeader] = useState('')
const msgColor = 'primary' const [show, setShowMsg] = useState(false)
const [msg, setMsg] = useState('')
function currentDate(days: number): string { const msgColor = 'primary'
var today = new Date()
today.setDate(today.getDate() + days) function currentDate(days: number): string {
var dd = String(today.getDate()).padStart(2, '0') var today = new Date()
var mm = String(today.getMonth() + 1).padStart(2, '0') today.setDate(today.getDate() + days)
var yyyy = today.getFullYear() var dd = String(today.getDate()).padStart(2, '0')
return yyyy + '-' + mm + '-' + dd var mm = String(today.getMonth() + 1).padStart(2, '0')
} var yyyy = today.getFullYear()
return yyyy + '-' + mm + '-' + dd
const loadReport = () => { }
DSAmazon.GetFinishedInvoice()
.then((response) => { const loadReport = () => {
dispatch(initializeInvoice([])) DSAmazon.AmazonFinishedClasificationInvoice$GET()
dispatch(populateInvoices(response.data)) .then((response) => {
}) dispatch(initializeInvoice([]))
.catch((e: Error) => { dispatch(populateInvoices(response.data))
alert('Ocurrio un error' + e.message.toString()) })
})
}
const downloadExcel = (id: number) => {
DSAmazon.TerminaFactura(id)
.then((response) => {})
.catch((e: Error) => { .catch((e: Error) => {
alert('Ocurrio un error' + e.message.toString())
}) })
DSAmazon.GetNoPartesAmazon2SIR(id) }
const downloadExcel = (id: number) => {
DSAmazon.TerminaFactura(id)
.then((response) => {})
.catch((e: Error) => {})
DSAmazon.GetNoPartesAmazon2SIR(id)
.then((response: any) => { .then((response: any) => {
if (response.status === 200) { if (response.status === 200) {
const url = window.URL.createObjectURL(new Blob([response.data])) const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a') const link = document.createElement('a')
link.href = url link.href = url
link.setAttribute('download', 'Plantilla de partes.xlsx') link.setAttribute('download', 'Plantilla de partes.xlsx')
document.body.appendChild(link) document.body.appendChild(link)
link.click() link.click()
} }
}) })
.catch((e: Error) => { .catch((e: Error) => {
setHeader('Error') setHeader('Error')
@ -81,21 +81,21 @@ export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvo
setShowMsg(true) setShowMsg(true)
return return
}) })
} }
useEffect(() => {
loadReport()
}, [])
const changeToggle = (row: I2096Headers) => {
let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id)
const Obj = { ...Invoice[0] }
Obj.max = !Obj.max
dispatch(updateInvoice(Obj))
}
useEffect(() => { const filtraReporte = (e: any) => {
loadReport() /* setFiltro(e.target.value)
}, [])
const changeToggle = (row: I2096Headers) => {
let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id)
const Obj = { ...Invoice[0] }
Obj.max = !Obj.max
dispatch(updateInvoice(Obj))
}
const filtraReporte = (e: any) => {
/* setFiltro(e.target.value)
if (e.target.value.length > 0) { if (e.target.value.length > 0) {
setData( setData(
Data.filter(function (row) { Data.filter(function (row) {
@ -107,14 +107,14 @@ export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvo
} else { } else {
setData(DataOriginal) setData(DataOriginal)
} */ } */
} }
const openLink = (item: string) => { const openLink = (item: string) => {
window.open('https://www.amazon.com/dp/' + item) window.open('https://www.amazon.com/dp/' + item)
} }
return ( return (
<div> <div>
<Card> <Card>
<Card.Body> <Card.Body>
<Row> <Row>
<Col xs={3}> <Col xs={3}>
@ -145,7 +145,7 @@ export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvo
onChange={(e) => setFin(e.target.value)} onChange={(e) => setFin(e.target.value)}
size="sm" size="sm"
/></Col> */} /></Col> */}
{/* <Col xs={1}> {/* <Col xs={1}>
<Button <Button
variant="primary" variant="primary"
size="sm" size="sm"
@ -377,7 +377,7 @@ export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvo
width: '120px', width: '120px',
backgroundColor: '#D3E0EA', backgroundColor: '#D3E0EA',
color: '#346288', color: '#346288',
textAlign: 'center', textAlign: 'center'
}} }}
> >
Fraccion GEMCO Fraccion GEMCO
@ -497,7 +497,15 @@ export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvo
detail.idHeader detail.idHeader
) )
.map((detail) => { .map((detail) => {
return <RtpAmazonPendingInvoicesDetail IDMaster={MasterData.id} detail={detail} Habilitado={MasterData.estatus<=1}/> return (
<RtpAmazonPendingInvoicesDetail
IDMaster={MasterData.id}
detail={detail}
Habilitado={
MasterData.estatus <= 1
}
/>
)
})} })}
</> </>
) )
@ -526,5 +534,5 @@ export default function RptAmazonFinishedInvoices (props: IRptAmazonFinishedInvo
}} }}
/> />
</div> </div>
); )
} }

@ -1,28 +1,29 @@
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { Alert, Button, Card, Col, Form, FormCheck, Modal, Row, Table } from 'react-bootstrap' import {
Alert,
Button,
Card,
Col,
FormCheck,
Modal,
Row,
Table
} from 'react-bootstrap'
import { IconContext } from 'react-icons' import { IconContext } from 'react-icons'
import { BsChevronDown, BsChevronRight, BsSearch } from 'react-icons/bs' import { BsChevronDown, BsChevronRight } from 'react-icons/bs'
import { FaCheckCircle, FaFileExcel, FaQuestionCircle } from 'react-icons/fa' import { FaFileExcel } 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 I2096Headers from '../Interfaces/I2096Header'
import DSAmazon from '../Services/Amazon.Services' import DSAmazon from '../Services/Amazon.Services'
import * as XLSX from 'xlsx'
import DTO2096PrevioExcel from '../DTO/DTO2096PrevioExcel'
import { MsgInformativo } from '../../../Utils/Toast/msgInformativo' import { MsgInformativo } from '../../../Utils/Toast/msgInformativo'
import { RootState } from '../../../../store/store' import { RootState } from '../../../../store/store'
import { import {
initializeInvoice, initializeInvoice,
populateInvoices, populateInvoices,
updateInvoice, updateInvoice
deleteInvoice
} from '../../../../store/features/Clientes/2096/AmazonInvoices' } from '../../../../store/features/Clientes/2096/AmazonInvoices'
// Redux // Redux
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingInvoicesDetail' import RtpAmazonPendingInvoicesDetail from './RptAmazonPendingClasificationInvoicesDetail'
import { AiTwotoneFileExcel } from 'react-icons/ai' import { AiTwotoneFileExcel } from 'react-icons/ai'
export interface IRtpAmazonPendingInvoicesProps {} export interface IRtpAmazonPendingInvoicesProps {}
@ -33,9 +34,6 @@ export default function RtpAmazonPendingInvoices(
const mInvoices = useSelector( const mInvoices = useSelector(
(state: RootState) => state.AmazonInvoices.Invoice (state: RootState) => state.AmazonInvoices.Invoice
) )
const [Inicio, setInicio] = useState(currentDate(0))
const [Fin, setFin] = useState(currentDate(0))
const [filtro, setFiltro] = useState('')
const [header, setHeader] = useState('') const [header, setHeader] = useState('')
const [IDFactura, setIDFactura] = useState(0) const [IDFactura, setIDFactura] = useState(0)
const [show, setShowMsg] = useState(false) const [show, setShowMsg] = useState(false)
@ -53,7 +51,7 @@ export default function RtpAmazonPendingInvoices(
} }
const loadReport = () => { const loadReport = () => {
DSAmazon.GetPendingInvoice() DSAmazon.AmazonPendingClasificationInvoice$GET()
.then((response) => { .then((response) => {
dispatch(initializeInvoice([])) dispatch(initializeInvoice([]))
dispatch(populateInvoices(response.data)) dispatch(populateInvoices(response.data))
@ -144,27 +142,26 @@ export default function RtpAmazonPendingInvoices(
const facturaTerminada = (row: I2096Headers) => { const facturaTerminada = (row: I2096Headers) => {
DSAmazon.Se$Puede$Terminar$Factura(row.id) DSAmazon.Se$Puede$Terminar$Factura(row.id)
.then((response) => { .then((response) => {
if (response.data.respuesta.includes('lista')) { if (response.data.respuesta.includes('lista')) {
setIDFactura(row.id) setIDFactura(row.id)
setShowModal(true) setShowModal(true)
return return
} else { } else {
setIDFactura(0)
setHeader('Informativo')
setMsg(response.data.respuesta)
setShowMsg(true)
return
}
})
.catch((e: Error) => {
setIDFactura(0) setIDFactura(0)
setHeader('Informativo') setHeader('Error')
setMsg(response.data.respuesta) setMsg('Ocurrio un error')
setShowMsg(true) setShowMsg(true)
return return
} })
})
.catch((e: Error) => {
setIDFactura(0)
setHeader('Error')
setMsg('Ocurrio un error')
setShowMsg(true)
return
})
} }
return ( return (
@ -199,7 +196,6 @@ export default function RtpAmazonPendingInvoices(
<th style={{ width: '150px' }}>Invoice Number</th> <th style={{ width: '150px' }}>Invoice Number</th>
<th style={{ width: '50px' }}>Name</th> <th style={{ width: '50px' }}>Name</th>
<th style={{ width: '100px' }}>Incoterms</th> <th style={{ width: '100px' }}>Incoterms</th>
<th style={{ textAlign: 'center' }}>HAWB</th>
<th>Qty Unit of measure</th> <th>Qty Unit of measure</th>
<th>Tot Qty</th> <th>Tot Qty</th>
<th>Weight unit of measure</th> <th>Weight unit of measure</th>
@ -286,9 +282,8 @@ export default function RtpAmazonPendingInvoices(
type="switch" type="switch"
checked={false} checked={false}
onChange={() => { onChange={() => {
facturaTerminada(MasterData) facturaTerminada(MasterData)
} }}
}
label="" label=""
/> />
</td> </td>
@ -304,9 +299,9 @@ export default function RtpAmazonPendingInvoices(
<td style={{ width: '100px', textAlign: 'center' }}> <td style={{ width: '100px', textAlign: 'center' }}>
{MasterData.incoterms} {MasterData.incoterms}
</td> </td>
<td style={{ textAlign: 'center' }}> {/* <td style={{ textAlign: 'center' }}>
{MasterData.hawb} {MasterData.hawb}
</td> </td> */}
<td style={{ textAlign: 'center' }}> <td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceQuantityUnitOfMeasure} {MasterData.totalInvoiceQuantityUnitOfMeasure}
</td> </td>
@ -621,7 +616,7 @@ export default function RtpAmazonPendingInvoices(
<Button <Button
variant="danger" variant="danger"
onClick={() => { onClick={() => {
downloadExcel(IDFactura) downloadExcel(IDFactura)
}} }}
> >
&nbsp;&nbsp;Si&nbsp;&nbsp; &nbsp;&nbsp;Si&nbsp;&nbsp;

@ -7,7 +7,6 @@ import {
Form, Form,
FormCheck, FormCheck,
Modal, Modal,
Overlay,
OverlayTrigger, OverlayTrigger,
Popover, Popover,
Row, Row,
@ -19,7 +18,6 @@ import { ImCross } from 'react-icons/im'
import { MsgInformativo } from '../../../Utils/Toast/msgInformativo' import { MsgInformativo } from '../../../Utils/Toast/msgInformativo'
import { ComboDescripcion } from '../Components/ComboSelect/ComboDescripcion' import { ComboDescripcion } from '../Components/ComboSelect/ComboDescripcion'
import { ComboFraccion } from '../Components/ComboSelect/ComboFraccion' import { ComboFraccion } from '../Components/ComboSelect/ComboFraccion'
import { TextBoxFraccion } from '../Components/TextBox/TextBoxFraccion'
import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza' import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza'
import I2096Detail from '../Interfaces/I2096Detail' import I2096Detail from '../Interfaces/I2096Detail'
import I2096Headers from '../Interfaces/I2096Header' import I2096Headers from '../Interfaces/I2096Header'
@ -28,14 +26,11 @@ import DSAmazon from '../Services/Amazon.Services'
import { RootState } from '../../../../store/store' import { RootState } from '../../../../store/store'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import { import {
initializeInvoice,
populateInvoices,
updateInvoice, updateInvoice,
deleteInvoice
} from '../../../../store/features/Clientes/2096/AmazonInvoices' } from '../../../../store/features/Clientes/2096/AmazonInvoices'
import * as CurrencyFormat from 'react-currency-format' import * as CurrencyFormat from 'react-currency-format'
import { AiOutlineFileSearch } from 'react-icons/ai' import { AiOutlineFileSearch } from 'react-icons/ai'
import { BsFillChatLeftDotsFill, BsFillChatRightTextFill } from 'react-icons/bs' import { BsFillChatRightTextFill } from 'react-icons/bs'
export interface IRtpAmazonPendingInvoivesDetailProps { export interface IRtpAmazonPendingInvoivesDetailProps {
IDMaster: number IDMaster: number

@ -0,0 +1,408 @@
import * as React from 'react'
import { useEffect, useState } from 'react'
import {
Alert,
Button,
Col,
Form,
FormCheck,
Modal,
OverlayTrigger,
Popover,
Row,
Tooltip
} from 'react-bootstrap'
import { IconContext } from 'react-icons'
import { FaCheckCircle, FaQuestionCircle } from 'react-icons/fa'
import { ImCross } from 'react-icons/im'
import { MsgInformativo } from '../../../Utils/Toast/msgInformativo'
import { ComboDescripcion } from '../Components/ComboSelect/ComboDescripcion'
import { ComboFraccion } from '../Components/ComboSelect/ComboFraccion'
import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza'
import I2096Detail from '../Interfaces/I2096Detail'
import I2096Headers from '../Interfaces/I2096Header'
import DSAmazon from '../Services/Amazon.Services'
// Redux
import { RootState } from '../../../../store/store'
import { useDispatch, useSelector } from 'react-redux'
import {
updateInvoice,
} from '../../../../store/features/Clientes/2096/AmazonInvoices'
import * as CurrencyFormat from 'react-currency-format'
import { AiOutlineFileSearch } from 'react-icons/ai'
import { BsFillChatRightTextFill } from 'react-icons/bs'
import DTO2096SightLine from '../DTO/DTO2096SightLine'
export interface IRptAmazonPendingTraficInvoiceDetailProps {
IDMaster: number
detail: I2096Detail
Habilitado: boolean
}
export default function RptAmazonPendingTraficInvoiceDetail (props: IRptAmazonPendingTraficInvoiceDetailProps) {
const dispatch = useDispatch()
const mInvoices = useSelector(
(state: RootState) => state.AmazonInvoices.Invoice
)
const [ShowModal, setShowModal] = useState(false)
const [EstatusSwith, setEstatusSwitch] = useState(props.detail.sightLine)
const [UserChanged, setUserChanged] = useState(false)
const [header, setHeader] = useState('')
const [show, setShowMsg] = useState(false)
const [Show, setShow] = useState(false)
const [msg, setMsg] = useState('')
const [Comentarios, setComentarios] = useState(
props.detail.comentariosSightLine
? props.detail.comentariosSightLine
: ''
)
const msgColor = 'primary'
const openLink = (item: string) => {
window.open('https://www.amazon.com/dp/' + item)
}
const target = React.useRef(null)
const UpdateInfo = (Invoice: I2096Headers, Detail: I2096Detail[]) => {
const updatedInvoice: I2096Headers = {
id: props.IDMaster,
commercialInvoiceDate: Invoice.commercialInvoiceDate,
invoiceNumber: Invoice.invoiceNumber,
name: Invoice.name,
trailerNumber: Invoice.trailerNumber,
trailerId: Invoice.trailerId,
porOfLoading: Invoice.porOfLoading,
portOfEntry: Invoice.portOfEntry,
paymentsTerms: Invoice.paymentsTerms,
incoterms: Invoice.incoterms,
hawb: Invoice.hawb,
totalInvoiceQuantityUnitOfMeasure:
Invoice.totalInvoiceQuantityUnitOfMeasure,
totalInvoiceQuantity: Invoice.totalInvoiceQuantity,
totalInvoiceWeightUnitOfMeasure: Invoice.totalInvoiceWeightUnitOfMeasure,
totalInvoiceWeight: Invoice.totalInvoiceWeight,
totalInvoiceValueChargeOrAllowance:
Invoice.totalInvoiceValueChargeOrAllowance,
totalInvoiceValueCurrencyISOCode:
Invoice.totalInvoiceValueCurrencyISOCode,
totalInvoiceValueMonetaryAmount: Invoice.totalInvoiceValueMonetaryAmount,
footNote: Invoice.footNote,
archivo: Invoice.archivo,
fCreacion: Invoice.fCreacion,
estatus: Invoice.estatus,
max: true,
detail: Detail
}
dispatch(updateInvoice(updatedInvoice))
}
const editArray = (id: number, valor: boolean) => {
const Invoice = mInvoices
.filter((el) => el.id === props.IDMaster)
.map((el) => {
return el
})
const newDetail = Invoice[0].detail.map((el) => {
if (el.id === id) {
return {
...el,
autorizado: valor
}
}
return el
})
UpdateInfo(Invoice[0], newDetail)
}
const ToggleSightLine = (id: number) => {
const data: DTO2096SightLine = {
id: id,
sightLine: EstatusSwith,
comentariosSightLine: Comentarios
}
DSAmazon.SightLineSET(data)
.then((response) => {
console.log(response.data)
//editArray(id, !props.detail.autorizado)
setShowModal(false)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error, no se guardo la informacion en BD')
setShowMsg(true)
return
})
}
useEffect(() => {
if (UserChanged) setShowModal(true)
//ToggleSightLine(props.detail.id)
}, [EstatusSwith, UserChanged])
const popover = (
<Popover 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: '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"
>
{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.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',
}}
className="DetailData"
>
<FormCheck
className="form-check form-switch form-control-lg"
id="switchEnabled"
type="switch"
checked={EstatusSwith}
onChange={() => {
setEstatusSwitch(!EstatusSwith)
setUserChanged(true)
setShowModal(!EstatusSwith)
}}
label=""
/>
</td>
<td
style={{
visibility:
props.detail.sightLine ? 'hidden' : 'visible'
}}
>
{' '}
<OverlayTrigger
placement="bottom"
overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>}
>
{({ ref, ...triggerHandler }) => (
<Button variant="light" {...triggerHandler}>
<IconContext.Provider
value={{
color: 'blue',
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'}
backdrop='static'
disableEscapeKeyDown = {true}
>
<Modal.Body>
<div style={{ height: '150px' }}>
<Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Comentarios</Col>
<Col xs={8}>
{' '}
<Form.Control
as="textarea"
id="Comentarios"
size="sm"
value={
Comentarios.length
? Comentarios
: ''
}
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={() => {
setEstatusSwitch(true)
setShowModal(false)
}}
>
&nbsp;&nbsp;No&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger"
onClick={() => {
ToggleSightLine(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,540 @@
import { useEffect, useState } from 'react'
import { Alert, Button, Card, Col, FormCheck, Modal, Row, Table } from 'react-bootstrap'
import { IconContext } from 'react-icons'
import { BsChevronDown, BsChevronRight } from 'react-icons/bs'
import I2096Headers from '../Interfaces/I2096Header'
import DSAmazon from '../Services/Amazon.Services'
import { MsgInformativo } from '../../../Utils/Toast/msgInformativo'
import { RootState } from '../../../../store/store'
import {
initializeInvoice,
populateInvoices,
updateInvoice,
} from '../../../../store/features/Clientes/2096/AmazonInvoices'
// Redux
import { useDispatch, useSelector } from 'react-redux'
import RtpAmazonPendingTraficInvoiceDetail from './RptAmazonPendingTraficInvoiceDetail'
export interface IRptAmazonPendingTraficInvoiceProps {}
export function RptAmazonPendingTraficInvoice(
props: IRptAmazonPendingTraficInvoiceProps
) { const dispatch = useDispatch()
const mInvoices = useSelector(
(state: RootState) => state.AmazonInvoices.Invoice
)
const [header, setHeader] = useState('')
const [IDFactura, setIDFactura] = useState(0)
const [show, setShowMsg] = useState(false)
const [ShowModal, setShowModal] = useState(false)
const [msg, setMsg] = useState('')
const msgColor = 'primary'
function currentDate(days: number): string {
var today = new Date()
today.setDate(today.getDate() + days)
var dd = String(today.getDate()).padStart(2, '0')
var mm = String(today.getMonth() + 1).padStart(2, '0')
var yyyy = today.getFullYear()
return yyyy + '-' + mm + '-' + dd
}
const loadReport = () => {
DSAmazon.AmazonPendingTraficInvoice$GET()
.then((response) => {
dispatch(initializeInvoice([]))
dispatch(populateInvoices(response.data))
})
.catch((e: Error) => {
alert('Ocurrio un error' + e.message.toString())
})
}
const downloadExcel = (id: number) => {
DSAmazon.TerminaFactura(id)
.then((response) => {})
.catch((e: Error) => {})
DSAmazon.GetNoPartesAmazon2SIR(id)
.then((response: any) => {
if (response.status === 200) {
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'Plantilla de partes.xlsx')
document.body.appendChild(link)
link.click()
}
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error')
setShowMsg(true)
return
})
}
const downloadExceptionsFile = (id: number) => {
DSAmazon.TerminaFactura(id)
.then((response) => {})
.catch((e: Error) => {})
DSAmazon.Get$ExceptionsFile$Amazon(id)
.then((response: any) => {
if (response.status === 200) {
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute(
'download',
'Formato de consultas (Exceptions Handling 2021).xlsx'
)
document.body.appendChild(link)
link.click()
}
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error')
setShowMsg(true)
return
})
}
useEffect(() => {
loadReport()
}, [])
const changeToggle = (row: I2096Headers) => {
let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id)
const Obj = { ...Invoice[0] }
Obj.max = !Obj.max
dispatch(updateInvoice(Obj))
}
const openLink = (item: string) => {
window.open('https://www.amazon.com/dp/' + item)
}
const existsExeptions = (IDMaster: number) => {
const Exceptions = mInvoices
.filter((element) =>
element.detail.some((sub) => sub.idHeader === IDMaster)
)
.map((element) => {
let newElt = Object.assign({}, element) // copies element
return newElt.detail.filter(
(child) => child.idHeader === IDMaster && !child.autorizado
)
})
console.log(JSON.stringify(Exceptions[0]))
return Exceptions[0].length ? Exceptions[0].length : 0
}
const facturaTerminada = (row: I2096Headers) => {
DSAmazon.Se$Puede$Terminar$Factura(row.id)
.then((response) => {
if (response.data.respuesta.includes('lista')) {
setIDFactura(row.id)
setShowModal(true)
return
} else {
setIDFactura(0)
setHeader('Informativo')
setMsg(response.data.respuesta)
setShowMsg(true)
return
}
})
.catch((e: Error) => {
setIDFactura(0)
setHeader('Error')
setMsg('Ocurrio un error')
setShowMsg(true)
return
})
}
return (
<div>
<Card>
<Card.Body>
<Row>
<Col xs={3}>
<Card.Title>Amazon: facturas pendientes</Card.Title>
</Col>
<Col xs={4}></Col>
</Row>
</Card.Body>
</Card>
<Row>
<Col xs={2}></Col>
<Col xs={8}></Col>
<Col xs={2} className="totalLabel"></Col>
</Row>
<Card>
<Card.Body>
<div className="MDcontainer">
<Table className="MDTable" hover>
<thead style={{ position: 'sticky', top: '0' }}>
<tr>
<th></th>
<th style={{ width: '50px' }}>id</th>
<th style={{ width: '50px' }}></th>
{/* <th style={{ width: '50px' }}></th>
<th style={{ width: '50px' }}></th> */}
<th style={{ width: '80px' }}>Commercial Invoice Date</th>
<th style={{ width: '150px' }}>Invoice Number</th>
<th style={{ width: '50px' }}>Name</th>
<th style={{ width: '100px' }}>Incoterms</th>
<th>Qty Unit of measure</th>
<th>Tot Qty</th>
<th>Weight unit of measure</th>
<th>Tot weight</th>
<th>Tot Charge or allowance</th>
<th>Tot currency ISO code</th>
<th>Tot Monetary amount</th>
</tr>
</thead>
<tbody>
{mInvoices
? mInvoices.map((MasterData) => {
return (
<>
<tr
style={{ cursor: 'pointer' }}
className={
MasterData.max === true
? 'masterSelected'
: 'normalSelected'
}
>
<td
style={{ textAlign: 'left' }}
className={
MasterData.max === true
? 'masterSelected'
: 'normalSelected'
}
key={MasterData.id}
onClick={() => {
changeToggle(MasterData)
}}
>
{MasterData.max === true ? (
<IconContext.Provider
value={{ color: 'blue', size: '15px' }}
>
<BsChevronDown />
</IconContext.Provider>
) : (
<IconContext.Provider
value={{ color: 'blue', size: '15px' }}
>
<BsChevronRight />
</IconContext.Provider>
)}
</td>
<td>{MasterData.id}</td>
<td>
<FormCheck
className="form-check form-switch form-control-sm"
id="switchEnabled"
type="switch"
checked={false}
onChange={() => {
facturaTerminada(MasterData)
}
}
label=""
/>
</td>
<td style={{ width: '80px', textAlign: 'center' }}>
{MasterData.commercialInvoiceDate}
</td>
<td style={{ width: '150px' }}>
{MasterData.invoiceNumber}
</td>
<td style={{ width: '50px', textAlign: 'center' }}>
{MasterData.name}
</td>
<td style={{ width: '100px', textAlign: 'center' }}>
{MasterData.incoterms}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceQuantityUnitOfMeasure}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceQuantity}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceWeightUnitOfMeasure}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceWeight}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceValueChargeOrAllowance}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceValueCurrencyISOCode}
</td>
<td style={{ textAlign: 'center' }}>
{MasterData.totalInvoiceValueMonetaryAmount}
</td>
</tr>
{MasterData.max ? (
<tr
className={
MasterData.max === true
? 'masterSelected2'
: 'normalSelected2'
}
>
<th colSpan={10}>
<table
className="childTable"
style={{ width: '1450px' }}
>
<thead>
<tr>
<th
style={{
width: '50px',
backgroundColor: '#FFFFFF',
color: '#346288'
}}
></th>
<th
style={{
width: '100px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Item Id
</th>
<th
style={{
width: '400px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Item Description
</th>
<th
style={{
width: '120px',
backgroundColor: '#D3E0EA',
color: '#346288',
textAlign: 'center'
}}
>
Fraccion GEMCO
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288',
textAlign: 'center'
}}
>
Descripcion GEMCO
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288',
textAlign: 'center'
}}
>
Country of Origin
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
ProductGroup
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Brand
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Model
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Unit Measure
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Qty Shipped
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Unit Net Weight
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Unit Cost
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Total value
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Sight line
</th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
Comentarios
</th>
</tr>
</thead>
<tbody>
{mInvoices.map((MD) => {
return (
<>
{MD.detail
.filter(
(detail) =>
MasterData.id ===
detail.idHeader
)
.map((detail) => {
return (
<RtpAmazonPendingTraficInvoiceDetail
IDMaster={MasterData.id}
detail={detail}
Habilitado={
MasterData.estatus <= 1
}
/>
)
})}
</>
)
})}
</tbody>
</table>
</th>
</tr>
) : null}
</>
)
})
: null}
</tbody>
</Table>
</div>
</Card.Body>
</Card>
<Modal
show={ShowModal}
onHide={() => {
setShowModal(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 terminarse, desea terminarla?
</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={() => {
downloadExcel(IDFactura)
}}
>
&nbsp;&nbsp;Si&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</div>
)
}

@ -8,13 +8,20 @@ import I2096NoParte from '../Interfaces/I2096NoParte'
import I2096PaisClave from '../Interfaces/I2096PaisClave' import I2096PaisClave from '../Interfaces/I2096PaisClave'
import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza' import DTO2096ItemAutoriza from '../DTO/DTO2096ItemAutoriza'
import DTORespuesta from '../../ZincInternacional/DTO/DTORespuesta' import DTORespuesta from '../../ZincInternacional/DTO/DTORespuesta'
import DTO2096SightLine from '../DTO/DTO2096SightLine'
class AmazonDataService { class AmazonDataService {
GetPendingInvoice() { AmazonPendingClasificationInvoice$GET() {
return http.get<I2096Headers[]>(`/AmazonInvoice/C2096PendingInvoiceGet`) return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonPendingClasificationInvoiceGet`)
} }
GetFinishedInvoice() { AmazonFinishedClasificationInvoice$GET() {
return http.get<I2096Headers[]>(`/AmazonInvoice/C2096FinishedInvoiceGet`) return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonFinishedClasificationInvoiceGet`)
}
AmazonPendingTraficInvoice$GET() {
return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonPendingTraficInvoiceGet`)
}
AmazonFinishedTraficInvoice$GET() {
return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonFinishedTraficInvoiceGet`)
} }
GetValidaFraccion(Fraccion: string) { GetValidaFraccion(Fraccion: string) {
return http.get<IRespuesta>(`/AmazonInvoice/C2096ValidaFraccion?Fraccion=${Fraccion}`) return http.get<IRespuesta>(`/AmazonInvoice/C2096ValidaFraccion?Fraccion=${Fraccion}`)
@ -28,6 +35,9 @@ class AmazonDataService {
Set$Autorizado(data: DTO2096ItemAutoriza) { Set$Autorizado(data: DTO2096ItemAutoriza) {
return http.post<DTO2096ItemAutoriza>(`/AmazonInvoice/C2096ItemAutorizado`, data) return http.post<DTO2096ItemAutoriza>(`/AmazonInvoice/C2096ItemAutorizado`, data)
} }
SightLineSET(data: DTO2096SightLine) {
return http.put<DTO2096SightLine>(`/AmazonInvoice/AmazonSightLineSET`, data)
}
TerminaFactura(id: number) { TerminaFactura(id: number) {
return http.get<Boolean>(`/AmazonInvoice/TerminaFactura?id=${id}`) return http.get<Boolean>(`/AmazonInvoice/TerminaFactura?id=${id}`)
} }

@ -5,6 +5,7 @@ import { Col, Container, Row } from 'react-bootstrap'
import { Heineken1 } from './Heineken1' import { Heineken1 } from './Heineken1'
import { DashboardFacturacion } from './DashboardFacturacion' import { DashboardFacturacion } from './DashboardFacturacion'
import { DashboardClasificacion } from './DashboardClasificacion' import { DashboardClasificacion } from './DashboardClasificacion'
import DashboardTrafico from './DashboardTrafico'
interface IProps {} interface IProps {}
@ -37,7 +38,10 @@ export const Dashboard: FC<IProps> = (props) => {
{[['Direcccion', 'Sistemas', 'Facturacion'].includes(Depto) ? <DashboardFacturacion /> : ''].map((item) => { {[['Direcccion', 'Sistemas', 'Facturacion'].includes(Depto) ? <DashboardFacturacion /> : ''].map((item) => {
return <React.Fragment>{item}</React.Fragment> return <React.Fragment>{item}</React.Fragment>
})} })}
{[['Direcccion', 'Sistemas', 'Clasificacion'].includes(Depto) ? <DashboardClasificacion /> : ''].map((item) => { {[['Direcccion', 'Sistemas', 'Operaciones', 'Clasificacion'].includes(Depto) ? <DashboardClasificacion /> : ''].map((item) => {
return <React.Fragment>{item}</React.Fragment>
})}
{[['Direcccion', 'Sistemas', 'Operaciones', 'Trafico'].includes(Depto) ? <DashboardTrafico /> : ''].map((item) => {
return <React.Fragment>{item}</React.Fragment> return <React.Fragment>{item}</React.Fragment>
})} })}
</Row> </Row>

@ -38,7 +38,7 @@ export function DashboardClasificacion(props: IDashboardClasificacionProps) {
return ( return (
<> <>
<Col> <Col>
<Card style={{ width: '18rem' }}> <Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Clasificación</Card.Header> <Card.Header>Clasificación</Card.Header>
<Card.Body> <Card.Body>
<Card.Title> <Card.Title>

@ -41,7 +41,7 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
return ( return (
<> <>
<Col> <Col>
<Card style={{ width: '18rem' }}> <Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Contabilidad</Card.Header> <Card.Header>Contabilidad</Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}> <Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title> <Card.Title>
@ -66,7 +66,7 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
</Card> </Card>
</Col> </Col>
<Col> <Col>
<Card style={{ width: '18rem' }}> <Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Contabilidad </Card.Header> <Card.Header>Contabilidad </Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}> <Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>&nbsp;Anticipos pendientes de autorizar</Card.Title> <Card.Title>&nbsp;Anticipos pendientes de autorizar</Card.Title>
@ -89,7 +89,7 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
</Card> </Card>
</Col> </Col>
<Col> <Col>
<Card style={{ width: '18rem' }}> <Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Contabilidad </Card.Header> <Card.Header>Contabilidad </Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}> <Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>&nbsp;Cuentas complementarias pendientes</Card.Title> <Card.Title>&nbsp;Cuentas complementarias pendientes</Card.Title>

@ -96,20 +96,10 @@ export const DashboardCorresponsales: FC<IProps> = (props) => {
return yyyy + '-' + mm + '-' + dd; return yyyy + '-' + mm + '-' + dd;
} }
/* const getTipoCambio = (Fecha: string) => {
DashboardDataService.getTipoCambio(Fecha)
.then((response) => {
setTipoCambio(response.data)
})
.catch((e: Error) => {
return
})
} */
return ( return (
<> <>
<Col> <Col>
<Card style={{ width: '19rem' }}> <Card style={{ width: '19rem' }} className='dashboardComponentFont'>
<Card.Header> <Card.Header>
<b>Corresponsales:</b> Traficos pendientes <b>Corresponsales:</b> Traficos pendientes
</Card.Header> </Card.Header>

@ -25,7 +25,7 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
return ( return (
<> <>
<Col> <Col>
<Card style={{ width: '18rem' }}> <Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Facturacion</Card.Header> <Card.Header>Facturacion</Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}> <Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title> <Card.Title>

@ -0,0 +1,113 @@
import * as React from 'react'
import { useEffect, useState } from 'react'
import { Card, Col, ProgressBar, Row } from 'react-bootstrap'
import { IconContext } from 'react-icons'
import { FaAmazon } from 'react-icons/fa'
import { Link } from 'react-router-dom'
import '../../css/generic01.css'
import DashboardDataService from '../../Services/Dashboard/Dashboard.Clasificacion.Services'
export interface IDashboardTraficoProps {
}
export default function DashboardTrafico (props: IDashboardTraficoProps) {
const [Terminadas, setTerminadas] = useState(0)
const [Pendientes, setPendientes] = useState(0)
const [Total, setTotal] = useState(0)
useEffect(() => {
DashboardDataService.DashboardInvoices(3)
.then((response) => {
setPendientes(response.data.total)
})
.catch((e: Error) => {
return
})
DashboardDataService.DashboardInvoices(4)
.then((response) => {
setTerminadas(response.data.total)
})
.catch((e: Error) => {
return
})
}, [])
useEffect(() => {
setTotal(Pendientes + Terminadas)
}, [Pendientes, Terminadas])
return (
<>
<Col>
<Card style={{ width: '18rem' }} className='blueCardBorder dashboardComponentFont'>
<Card.Header style={{backgroundColor: '#1D6DC2', color: '#ffffff'}}>Trafico</Card.Header>
<Card.Body>
<Card.Title>
Facturas {' '}
<IconContext.Provider value={{ color: '#F6C34F', size:'30%' }}>
<FaAmazon />
</IconContext.Provider>
</Card.Title>
<Row >
<Col xs={6} style={{}}>
<Link
to="#"
style={{
textDecoration: 'none',
float: 'left',
paddingRight: '10px'
}}
>
Terminadas
</Link>
</Col>
<Col xs={6} className="text-center">
<Link
to="../RptAmazonPendingTraficInvoice"
style={{
textDecoration: 'none',
float: 'right',
paddingRight: '10px'
}}
>
Pendientes
</Link>
</Col>
</Row>
<Row>
<Col xs={12}>
<ProgressBar style={{ height: '25px' }}>
<ProgressBar
striped
animated
variant="success"
now={(Terminadas / Total) * 100}
key={1}
/>
<ProgressBar
striped
variant="warning"
now={(Pendientes / Total) * 100}
key={2}
/>
</ProgressBar>
</Col>
</Row>
<Row>
<Col xs={6} style={{ fontSize: '6em' }} className="text-center">
{Terminadas}
</Col>
<Col xs={6} style={{ fontSize: '6em' }} className="text-center">
{Pendientes}
</Col>
</Row>
</Card.Body>
<Card.Footer
style={{ paddingRight: '5px', paddingBottom: '5px' }}
></Card.Footer>
</Card>
</Col>
</>
)
}

@ -286,3 +286,11 @@ th {
.colAlignRight { .colAlignRight {
text-align: right; text-align: right;
} }
.blueCardBorder {
border-color: #1D6DC2;
}
.dashboardComponentFont {
font-family: 'Kanit';
}

@ -40,9 +40,10 @@ import RptConsolidadosSinCerrar from './Components/GEMCO/Facturacion/Anexo/RptCo
import RptRelacionAlen from './Components/GEMCO/Facturacion/Anexo/RptRelacionAlen' import RptRelacionAlen from './Components/GEMCO/Facturacion/Anexo/RptRelacionAlen'
import { RptFacturasTxtHeineken } from './Components/Reportes/RptFacturasTxtHeineken' import { RptFacturasTxtHeineken } from './Components/Reportes/RptFacturasTxtHeineken'
import { Notificaciones } from './Components/Utils/Notificaciones/Notificaciones' import { Notificaciones } from './Components/Utils/Notificaciones/Notificaciones'
import RtpAmazonPendingInvoices from './Components/Clientes/Amazon/Reportes/RptAmazonPendingInvoices' import RtpAmazonPendingInvoices from './Components/Clientes/Amazon/Reportes/RptAmazonPendingClasificationInvoices'
import RtpAmazonFinishedInvoices from './Components/Clientes/Amazon/Reportes/RptAmazonFinishedInvoices' import RtpAmazonFinishedInvoices from './Components/Clientes/Amazon/Reportes/RptAmazonFinishedClasificationInvoices'
import { AmazonNoPartes } from './Components/Clientes/Amazon/Reportes/AmazonNoPartes' import { AmazonNoPartes } from './Components/Clientes/Amazon/Reportes/AmazonNoPartes'
import { RptAmazonPendingTraficInvoice } from './Components/Clientes/Amazon/Reportes/RtpAmazonPendingTraficInvoice'
function PageNotFound() { function PageNotFound() {
return ( return (
@ -156,6 +157,7 @@ ReactDOM.render(
<Route path='/RptAmazonPendingInvoices' element={<RtpAmazonPendingInvoices />} /> <Route path='/RptAmazonPendingInvoices' element={<RtpAmazonPendingInvoices />} />
<Route path='/RptAmazonFinishedInvoices' element={<RtpAmazonFinishedInvoices />} /> <Route path='/RptAmazonFinishedInvoices' element={<RtpAmazonFinishedInvoices />} />
<Route path='/AmazonNoPartes' element={<AmazonNoPartes />} /> <Route path='/AmazonNoPartes' element={<AmazonNoPartes />} />
<Route path='/RptAmazonPendingTraficInvoice' element={<RptAmazonPendingTraficInvoice/>} />
</Route> </Route>
<Route path='*' element={<PageNotFound />} /> <Route path='*' element={<PageNotFound />} />
</Routes> </Routes>

Loading…
Cancel
Save