Se modifica el front end para eliminar la colorimetria de los componentes del clasificador

AmazonRelease1.1
unknown 2 years ago
parent 254395f066
commit 816e528183
  1. 25
      src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx
  2. 56
      src/Components/Clientes/Amazon/Components/ComboSelect/ComboFraccion.tsx
  3. 6
      src/Components/Clientes/Amazon/DTO/DTO2096TraficoFieldsUpdate.ts
  4. 2
      src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoices.tsx
  5. 1
      src/Components/Clientes/Amazon/Reportes/Clasification/Finished/RptAmazonFinishedClasificationInvoicesDetail.tsx
  6. 24
      src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoices.tsx
  7. 67
      src/Components/Clientes/Amazon/Reportes/Clasification/Pending/RptAmazonPendingClasificationInvoicesDetail.tsx
  8. 0
      src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon.tsx
  9. 31
      src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazonDetail.tsx
  10. 6
      src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx
  11. 243
      src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2TrafficDetail.tsx
  12. 5
      src/Components/Clientes/Amazon/Services/Amazon.Services.ts
  13. 1
      src/Constants/TargetURL.ts
  14. 2
      src/index.tsx

@ -26,6 +26,10 @@ export interface IComboDescripcionProps {
export function ComboDescripcion(props: IComboDescripcionProps) { export function ComboDescripcion(props: IComboDescripcionProps) {
const dispatch = useDispatch() const dispatch = useDispatch()
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const mInvoices = useSelector( const mInvoices = useSelector(
(state: RootState) => state.AmazonInvoices.Invoice (state: RootState) => state.AmazonInvoices.Invoice
) )
@ -147,15 +151,26 @@ export function ComboDescripcion(props: IComboDescripcionProps) {
<div> <div>
<Form.Control <Form.Control
as="select" as="select"
disabled={props.Deshabilitado} disabled={(props.Deshabilitado || props.Detail.validaFraccionOriginal === 3) && (Perfil!=='Clasificador Lider')}
className="form-select form-select-sm"
onChange={(e) => changeValidacion(parseInt(e.target.value))} onChange={(e) => changeValidacion(parseInt(e.target.value))}
value={Validacion} value={Validacion}
> >
{props.Detail.validaFraccionOriginal===1 ? <option value="0"> </option> : '' } {props.Detail.validaFraccionOriginal <=1 ? (
{props.Detail.validaFraccionOriginal===1 ? <option value="1"> = </option> : ''} <option value="0"> </option>
) : (
''
)}
{props.Detail.confirmaDescripcion <= 1 ? (
<option value="1"> = </option>
) : (
''
)}
<option value="2"> != </option> <option value="2"> != </option>
{props.Detail.validaFraccionOriginal===3 ? <option value="3"> Ok </option> : ''} {props.Detail.validaFraccionOriginal === 3 ? (
<option value="3"> Ok </option>
) : (
''
)}
</Form.Control> </Form.Control>
<Modal <Modal
show={showModal} show={showModal}

@ -23,13 +23,17 @@ export interface IComboFraccionProps {
export function ComboFraccion(props: IComboFraccionProps) { export function ComboFraccion(props: IComboFraccionProps) {
const dispatch = useDispatch() const dispatch = useDispatch()
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const mInvoices = useSelector( const mInvoices = useSelector(
(state: RootState) => state.AmazonInvoices.Invoice (state: RootState) => state.AmazonInvoices.Invoice
) )
const [Validacion, setValidacion] = useState(props.ConfirmaFraccion) const [Validacion, setValidacion] = useState(props.ConfirmaFraccion)
const [UserChanged, setUserChanged] = useState(false) const [UserChanged, setUserChanged] = useState(false)
const [showModal, setShowModal] = useState(false) const [showModal, setShowModal] = useState(false)
const [Fraccion, setFraccion] = useState(props.FraccionOriginal) const [Fraccion, setFraccion] = useState((props.Detail.validaFraccionOriginal==0) ? '' : props.FraccionOriginal)
const [header, setHeader] = useState('') const [header, setHeader] = useState('')
const [DescripcionGEMCO, setDescripcionGEMCO] = useState( const [DescripcionGEMCO, setDescripcionGEMCO] = useState(
props.Detail.pedimentoDescription props.Detail.pedimentoDescription
@ -83,6 +87,7 @@ export function ComboFraccion(props: IComboFraccionProps) {
} }
const UpdateInfo = (newData: I2096Detail) => { const UpdateInfo = (newData: I2096Detail) => {
console.log('new data= '+JSON.stringify(newData))
const Invoice = mInvoices const Invoice = mInvoices
.filter((el) => el.id === props.IDInvoice) .filter((el) => el.id === props.IDInvoice)
.map((el) => { .map((el) => {
@ -92,10 +97,15 @@ export function ComboFraccion(props: IComboFraccionProps) {
if (el.id === props.IDDetail) { if (el.id === props.IDDetail) {
return { return {
...el, ...el,
fraccionGEMCO: Fraccion, fraccionGEMCO: newData.fraccionGEMCO,
descripcionGEMCO: DescripcionGEMCO, descripcionGEMCO: newData.descripcionGEMCO,
autorizado: newData.autorizado, autorizado: newData.autorizado,
checked: true confirmaDescripcion: newData.confirmaDescripcion,
cumplimientoNormativo: newData.cumplimientoNormativo,
comentarios: newData.comentarios,
confirmaFraccion : newData.confirmaFraccion
/*,
checked: true*/
} }
} }
return el return el
@ -128,22 +138,24 @@ export function ComboFraccion(props: IComboFraccionProps) {
.catch((e: Error) => { .catch((e: Error) => {
alert('Ocurrio un error' + e.message.toString()) alert('Ocurrio un error' + e.message.toString())
}) */ }) */
// alert(props.Detail.destinationHTSCode+' '+Validacion)
setFraccion(props.Detail.destinationHTSCode) setFraccion(props.Detail.destinationHTSCode)
saveFraccion() saveFraccion(props.Detail.destinationHTSCode)
} }
} }
}, [Validacion, UserChanged]) }, [Validacion, UserChanged])
const saveFraccion = () => { const saveFraccion = (Fracc: string) => {
Fracc=Fracc.replaceAll('.','').replaceAll(' ','')
if (Validacion === 2) { if (Validacion === 2) {
if (CumplimientoNormativo.length === 0) { /* if (CumplimientoNormativo.length === 0) {
setHeader('Error') setHeader('Error')
setMsg( setMsg(
'Antes de poder guardar la informacion es necesario que proporcione el cumplimiento normativo' 'Antes de poder guardar la informacion es necesario que proporcione el cumplimiento normativo'
) )
setShowMsg(true) setShowMsg(true)
return return
} } */
if (Comentarios.length === 0) { if (Comentarios.length === 0) {
setHeader('Error') setHeader('Error')
setMsg( setMsg(
@ -161,12 +173,27 @@ export function ComboFraccion(props: IComboFraccionProps) {
return return
} }
} }
DSAmazon.ValidaFraccionGET(Fraccion) /* if (Validacion===1) {
setFraccion(props.Detail.destinationHTSCode)
setTimeout(function(){
console.log("Ready")
}, 3000);
} */
if (!Fracc) {
setFraccion(Fracc)
alert('La fraccion no puede estar vacia')
return false
}
//alert(Fracc)
DSAmazon.ValidaFraccionGET(Fracc)
.then((response) => { .then((response) => {
if (response.data.respuesta === 'Si') { if (response.data.respuesta === 'Si') {
/* if (Validacion==1) {
setFraccion(props.Detail.destinationHTSCode)
} */
const data: DTO2096FraccionDescripcion = { const data: DTO2096FraccionDescripcion = {
id: props.IDDetail, id: props.IDDetail,
fraccion: Fraccion, fraccion: Fracc,
cumplimientoNormativo: CumplimientoNormativo, cumplimientoNormativo: CumplimientoNormativo,
comentarios: Comentarios, comentarios: Comentarios,
descripcionGEMCO: DescripcionGEMCO descripcionGEMCO: DescripcionGEMCO
@ -198,16 +225,16 @@ export function ComboFraccion(props: IComboFraccionProps) {
<Form.Control <Form.Control
as="select" as="select"
className="form-select form-select-sm" className="form-select form-select-sm"
disabled={props.Deshabilitado} disabled={(props.Deshabilitado || props.Detail.validaFraccionOriginal === 3) && (Perfil!=='Clasificador Lider')}
onChange={(e) => changeValidacion(parseInt(e.target.value))} onChange={(e) => changeValidacion(parseInt(e.target.value))}
value={Validacion} value={Validacion}
> >
{props.Detail.validaFraccionOriginal === 0 ? ( {props.Detail.validaFraccionOriginal <= 1 ? (
<option value="0"> </option> <option value="0"> </option>
) : ( ) : (
'' ''
)} )}
{props.Detail.validaFraccionOriginal === 1 ? ( {props.Detail.validaFraccionOriginal <= 1 ? (
<option value="1"> = </option> <option value="1"> = </option>
) : ( ) : (
'' ''
@ -255,7 +282,6 @@ export function ComboFraccion(props: IComboFraccionProps) {
<Row style={{ paddingTop: '15px' }}> <Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col> <Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}> <Col xs={8}>
{' '}
<Form.Control <Form.Control
as="textarea" as="textarea"
id="CumplimientoNormativo" id="CumplimientoNormativo"
@ -298,7 +324,7 @@ export function ComboFraccion(props: IComboFraccionProps) {
<Col xs={3}> <Col xs={3}>
<Button <Button
onClick={() => { onClick={() => {
saveFraccion() saveFraccion(Fraccion)
}} }}
> >
Guardar Guardar

@ -0,0 +1,6 @@
export default interface DTO2096TraficoFieldsUpdate {
id: number,
UnitMeasure: string,
UnitOfMeasure: number,
UnitCost: number
}

@ -217,7 +217,7 @@ export default function RptAmazonFinishedClasificationInvoices(
) { ) {
return a return a
} else if ( } else if (
['Clasificador lider', 'Administrador'].includes( ['Clasificador lider', 'Clasificador', 'Administrador'].includes(
Perfil Perfil
) )
) { ) {

@ -367,7 +367,6 @@ export default function RptAmazonFinishedClasificationInvoicesDetail(
> >
{props.detail.netWeightUnitOfMeasure} {props.detail.netWeightUnitOfMeasure}
</td> </td>
<td <td
style={{ style={{
textAlign: 'center' textAlign: 'center'

@ -57,6 +57,7 @@ export default function RtpAmazonPendingInvoices(
const loadReport = () => { const loadReport = () => {
DSAmazon.AmazonPendingClasificationInvoiceGET() DSAmazon.AmazonPendingClasificationInvoiceGET()
.then((response) => { .then((response) => {
console.log(response.data)
dispatch(initializeInvoice([])) dispatch(initializeInvoice([]))
dispatch(populateInvoices(response.data)) dispatch(populateInvoices(response.data))
}) })
@ -115,6 +116,26 @@ export default function RtpAmazonPendingInvoices(
} }
const descargaPantillaPartes = () => { const descargaPantillaPartes = () => {
let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === IDFactura)
let TotalPartidas = Invoice[0].detail.length
let TotalFraccionesPreviamenteRegistradas = Invoice[0].detail.filter((item) => item.confirmaFraccion === 3).length
if (TotalPartidas===TotalFraccionesPreviamenteRegistradas) {
setShowModal(false)
DSAmazon.TerminaClasificarFactura(IDFactura)
.then((response) => {
loadReport()
setWaitingDialog(false)
})
.catch((e: Error) => {
setHeader('Error')
setMsg(
'Ocurrio un error, no se pudo actualizar informacion' +
e.message.toString()
)
setShowMsg(true)
return
})
} else {
setShowModal(false) setShowModal(false)
setWaitingMessage('Plantilla de partes') setWaitingMessage('Plantilla de partes')
setWaitingDialog(true) setWaitingDialog(true)
@ -149,6 +170,7 @@ export default function RtpAmazonPendingInvoices(
setShowMsg(true) setShowMsg(true)
return return
}) })
}
} }
const facturaTerminada = (row: I2096Headers) => { const facturaTerminada = (row: I2096Headers) => {
@ -229,7 +251,7 @@ export default function RtpAmazonPendingInvoices(
) { ) {
return a return a
} else if ( } else if (
['Clasificador lider', 'Administrador'].includes( ['Clasificador lider', 'Administrador', 'Clasificador'].includes(
Perfil Perfil
) )
) { ) {

@ -38,6 +38,10 @@ export interface IRtpAmazonPendingInvoivesDetailProps {
export default function RtpAmazonPendingInvoivesDetail( export default function RtpAmazonPendingInvoivesDetail(
props: IRtpAmazonPendingInvoivesDetailProps props: IRtpAmazonPendingInvoivesDetailProps
) { ) {
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const dispatch = useDispatch() const dispatch = useDispatch()
const mInvoices = useSelector( const mInvoices = useSelector(
(state: RootState) => state.AmazonInvoices.Invoice (state: RootState) => state.AmazonInvoices.Invoice
@ -149,7 +153,21 @@ export default function RtpAmazonPendingInvoivesDetail(
} }
const ColorSET = (value: number, mode: number) => { const ColorSET = (value: number, mode: number) => {
switch(mode) { switch (mode) {
case 1: {
if (value === 3) return '#E9F3FC'
break
}
case 2: {
if (value === 3) return '2px solid blue'
break
}
case 3: {
if (value === 3) return 'blue'
break
}
}
/* switch(mode) {
case 1: { case 1: {
// Background color // Background color
if (value === 1) return '#FFFAF2' if (value === 1) return '#FFFAF2'
@ -169,7 +187,7 @@ export default function RtpAmazonPendingInvoivesDetail(
if (value === 3) return 'blue' if (value === 3) return 'blue'
break break
} }
} } */
} }
return ( return (
@ -227,7 +245,8 @@ export default function RtpAmazonPendingInvoivesDetail(
}} }}
className="DetailData" className="DetailData"
> >
{props.detail.validaFraccionOriginal === 0 ? ( {
/* props.detail.validaFraccionOriginal === 0 ? (
<IconContext.Provider <IconContext.Provider
value={{ value={{
color: 'orange', color: 'orange',
@ -245,16 +264,18 @@ export default function RtpAmazonPendingInvoivesDetail(
> >
<FaCheckCircle /> <FaCheckCircle />
</IconContext.Provider> </IconContext.Provider>
) : props.detail.validaFraccionOriginal === 3 ? ( ) : */ props.detail.validaFraccionOriginal === 3 ? (
<IconContext.Provider <IconContext.Provider
value={{ value={{
color: 'blue', color: 'blue',
size: '20px' size: '20px'
}} }}
> >
<FaCheckCircle /> <FaCheckCircle />
</IconContext.Provider> </IconContext.Provider>
) : ( ) : (
''
) /* (
<IconContext.Provider <IconContext.Provider
value={{ value={{
color: 'red', color: 'red',
@ -263,7 +284,8 @@ export default function RtpAmazonPendingInvoivesDetail(
> >
<ImCross /> <ImCross />
</IconContext.Provider> </IconContext.Provider>
)} ) */
}
</td> </td>
<td <td
style={{ style={{
@ -291,8 +313,8 @@ export default function RtpAmazonPendingInvoivesDetail(
> >
<CurrencyFormat <CurrencyFormat
value={props.detail.fraccionGEMCO ? props.detail.fraccionGEMCO : ''} value={props.detail.fraccionGEMCO ? props.detail.fraccionGEMCO : ''}
disabled={true} disabled={true}
format={'######## ##'} format={'######## ##'}
displayType={'input'} displayType={'input'}
style={{ style={{
fontSize: '18px', fontSize: '18px',
@ -445,7 +467,11 @@ export default function RtpAmazonPendingInvoivesDetail(
<OverlayTrigger <OverlayTrigger
placement="bottom" placement="bottom"
overlay={ overlay={
<Tooltip id="button-tooltip-2">{CumplimientoNormativo}</Tooltip> <Tooltip id="button-tooltip-2">
{props.detail.confirmaFraccion === 2
? props.detail.cumplimientoNormativo
: ''}
</Tooltip>
} }
> >
{({ ref, ...triggerHandler }) => ( {({ ref, ...triggerHandler }) => (
@ -454,7 +480,7 @@ export default function RtpAmazonPendingInvoivesDetail(
{...triggerHandler} {...triggerHandler}
style={{ style={{
visibility: visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible' props.detail.confirmaFraccion === 2 ? 'visible' : 'hidden'
}} }}
> >
<IconContext.Provider <IconContext.Provider
@ -485,7 +511,7 @@ export default function RtpAmazonPendingInvoivesDetail(
{...triggerHandler} {...triggerHandler}
style={{ style={{
visibility: visibility:
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible' props.detail.confirmaFraccion === 2 ? 'visible' : 'hidden'
}} }}
> >
<IconContext.Provider <IconContext.Provider
@ -511,6 +537,8 @@ export default function RtpAmazonPendingInvoivesDetail(
<Form.Check <Form.Check
type="checkbox" type="checkbox"
id="Checkbox" id="Checkbox"
disabled={((Perfil!=='Clasificador Lider')&&(props.detail.confirmaFraccion===0)||(props.detail.confirmaDescripcion===0))||
((Perfil==='Clasificador')&&(props.detail.validaFraccionOriginal===3))}
onClick={() => { onClick={() => {
checkDetail() checkDetail()
}} }}
@ -543,7 +571,6 @@ export default function RtpAmazonPendingInvoivesDetail(
<Row style={{ paddingTop: '15px' }}> <Row style={{ paddingTop: '15px' }}>
<Col xs={3}>Cumplimiento normativo</Col> <Col xs={3}>Cumplimiento normativo</Col>
<Col xs={8}> <Col xs={8}>
{' '}
<Form.Control <Form.Control
as="textarea" as="textarea"
id="RequerimientoNormativo" id="RequerimientoNormativo"

@ -18,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 DTO2096ItemAutoriza from '../../../DTO/DTO2096ItemAutoriza'
import I2096Detail from '../../../Interfaces/I2096Detail' 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'
@ -247,7 +246,7 @@ export default function RptPendingAnswerFromAmazonDetail(
}} }}
className="DetailData" className="DetailData"
> >
{props.detail.validaFraccionOriginal === 0 ? ( {/* {props.detail.validaFraccionOriginal === 0 ? (
<IconContext.Provider <IconContext.Provider
value={{ value={{
color: 'orange', color: 'orange',
@ -283,7 +282,7 @@ export default function RptPendingAnswerFromAmazonDetail(
> >
<ImCross /> <ImCross />
</IconContext.Provider> </IconContext.Provider>
)} )} */}
</td> </td>
<td <td
style={{ style={{
@ -317,14 +316,16 @@ export default function RptPendingAnswerFromAmazonDetail(
props.detail.validaFraccionOriginal === 0 props.detail.validaFraccionOriginal === 0
? '#FFFAF2 ' ? '#FFFAF2 '
: '#E5F7B6', : '#E5F7B6',
border: /* border:
props.detail.validaFraccionOriginal === 0 props.detail.validaFraccionOriginal === 0
? '2px solid #F9A721' ? '2px solid #F9A721'
: '2px solid green', : '2px solid green',
color: color:
props.detail.validaFraccionOriginal === 0 props.detail.validaFraccionOriginal === 0
? '#5923F6' ? '#5923F6'
: '#000000', : '#000000', */
border: '2px solid #000000',
color: '@000000',
width: '115px', width: '115px',
textAlign: 'right', textAlign: 'right',
borderRadius: '10px' borderRadius: '10px'
@ -342,7 +343,7 @@ export default function RptPendingAnswerFromAmazonDetail(
IDDetail={props.detail.id} IDDetail={props.detail.id}
DescripcionOriginal={props.detail.pedimentoDescription} DescripcionOriginal={props.detail.pedimentoDescription}
ConfirmaDescripcion={props.detail.confirmaDescripcion} ConfirmaDescripcion={props.detail.confirmaDescripcion}
Deshabilitado={false} Deshabilitado={true}
Detail={props.detail} Detail={props.detail}
/> />
</td> </td>
@ -427,28 +428,18 @@ export default function RptPendingAnswerFromAmazonDetail(
{props.detail.actualUnitCostMonetaryAmount} {props.detail.actualUnitCostMonetaryAmount}
</td> </td>
<td <td
/* style={{ /* style={{visibility: EstatusSwith ? 'hidden' : 'visible'}} */
textAlign: 'center',
paddingLeft: '30px',
visibility:
props.detail.confirmaFraccion === 2 && props.detail.destinationHTSCode.replaceAll('.', '').trim() !==
(props.detail.fraccionGEMCO
? props.detail.fraccionGEMCO.trim()
: '')
? 'visible'
: 'hidden'
}} */
style={{visibility: EstatusSwith ? 'hidden' : 'visible'}}
className="DetailData" className="DetailData"
> >
<FormCheck <FormCheck
className="form-check form-switch form-control-lg" className="form-check form-switch form-control-lg"
id="switchEnabled" id="switchEnabled"
type="switch" type="switch"
disabled={ /* disabled={
props.detail.fraccionGEMCO === props.detail.fraccionGEMCO ===
props.detail.destinationHTSCode.replaceAll('.', '') props.detail.destinationHTSCode.replaceAll('.', '')
} } */
disabled={EstatusSwith}
checked={EstatusSwith && props.detail.autorizado} checked={EstatusSwith && props.detail.autorizado}
onChange={() => { onChange={() => {
setEstatusSwitch(!EstatusSwith) setEstatusSwitch(!EstatusSwith)

@ -66,7 +66,7 @@ export function RptAmazonLinkInvoice2Traffic(
}) })
} }
const downloadPDF = (id: number) => { const downloadPDF = (id: number, InvoiceNumber: string) => {
setWaitingDialog(true) setWaitingDialog(true)
setWaitingMessage(' archivo PDF ') setWaitingMessage(' archivo PDF ')
DSAmazon.PDFAmazonInvoiceGET(id) DSAmazon.PDFAmazonInvoiceGET(id)
@ -75,7 +75,7 @@ export function RptAmazonLinkInvoice2Traffic(
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', 'AmazonInvoice.pdf') link.setAttribute('download', 'FAC_'+InvoiceNumber+'.pdf')
document.body.appendChild(link) document.body.appendChild(link)
link.click() link.click()
setWaitingDialog(false) setWaitingDialog(false)
@ -290,7 +290,7 @@ export function RptAmazonLinkInvoice2Traffic(
/> />
</td> </td>
<td style={{ width: '50px', textAlign: 'center' }}> <td style={{ width: '50px', textAlign: 'center' }}>
<div onClick={() => {downloadPDF(MasterData.id)}}> <div onClick={() => {downloadPDF(MasterData.id, MasterData.invoiceNumber)}}>
<IconContext.Provider <IconContext.Provider
value={{ color: 'red', size: '20px' }} value={{ color: 'red', size: '20px' }}
> >

@ -13,23 +13,19 @@ import {
Tooltip Tooltip
} from 'react-bootstrap' } from 'react-bootstrap'
import { IconContext } from 'react-icons' 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 { 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 I2096Detail from '../../../Interfaces/I2096Detail'
import I2096Headers from '../../../Interfaces/I2096Header'
import DSAmazon from '../../../Services/Amazon.Services' import DSAmazon from '../../../Services/Amazon.Services'
// Redux // Redux
import { RootState } from '../../../../../../store/store' import { RootState } from '../../../../../../store/store'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import { updateInvoice } from '../../../../../../store/features/Clientes/2096/AmazonInvoices'
import * as CurrencyFormat from 'react-currency-format' import * as CurrencyFormat from 'react-currency-format'
import { AiOutlineFileSearch, AiTwotoneEdit } from 'react-icons/ai' import { AiOutlineFileSearch, AiTwotoneEdit } from 'react-icons/ai'
import { BsFillChatRightTextFill } from 'react-icons/bs' import { BsFillChatRightTextFill, BsFillPencilFill } from 'react-icons/bs'
import DTO2096SightLine from '../../../DTO/DTO2096SightLine' import DTO2096SightLine from '../../../DTO/DTO2096SightLine'
import { updateInvoice } from '../../../../../../store/features/Clientes/2096/AmazonInvoices'
import DTO2096TraficoFieldsUpdate from '../../../DTO/DTO2096TraficoFieldsUpdate'
import I2096Headers from '../../../Interfaces/I2096Header'
export interface IRtpAmazonInvoiceTrafficDetailProps { export interface IRtpAmazonInvoiceTrafficDetailProps {
IDMaster: number IDMaster: number
@ -49,7 +45,7 @@ export default function RtpAmazonInvoice2TrafficDetail(
const [UserChanged, setUserChanged] = useState(false) const [UserChanged, setUserChanged] = useState(false)
const [header, setHeader] = useState('') const [header, setHeader] = useState('')
const [show, setShowMsg] = useState(false) const [show, setShowMsg] = useState(false)
const [Show, setShow] = useState(false) //const [Show, setShow] = useState(false)
const [msg, setMsg] = useState('') const [msg, setMsg] = useState('')
const [CumplimientoNormativo, setCumplimientoNormativo] = useState( const [CumplimientoNormativo, setCumplimientoNormativo] = useState(
props.detail.cumplimientoNormativo ? props.detail.cumplimientoNormativo : '' props.detail.cumplimientoNormativo ? props.detail.cumplimientoNormativo : ''
@ -59,13 +55,23 @@ export default function RtpAmazonInvoice2TrafficDetail(
? props.detail.comentarios ? props.detail.comentarios
: 'Clasificacion Incorrecta' : 'Clasificacion Incorrecta'
) )
const [ShowModalEdit, setShowModalEdit] = useState(false)
const [UnitMeasure, setUnitMeasure] = useState('')
const [UnitOfMeasure, setUnitOfMeasure] = useState('')
const [UnitCost, setUnitCost] = useState('')
const [Quantity, setQuantity] = useState(0)
const [ItemId, setItemId] = useState('')
const [ItemDescription, setItemDescription] = useState('')
const [FraccionGEMCO, setFraccionGEMCO] = useState('')
const [DescripcionGEMCO, setDescripcionGEMCO] = useState('')
const msgColor = 'primary' const msgColor = 'primary'
const openLink = (item: string) => { const openLink = (item: string) => {
window.open('https://www.amazon.com/dp/' + item) window.open('https://www.amazon.com/dp/' + item)
} }
/* const target = React.useRef(null) const UpdateInvoiceDetail = (
Invoice: I2096Headers,
const UpdateInfo = (Invoice: I2096Headers, Detail: I2096Detail[]) => { Detail: I2096Detail[]
) => {
const updatedInvoice: I2096Headers = { const updatedInvoice: I2096Headers = {
id: props.IDMaster, id: props.IDMaster,
referencia: Invoice.referencia, referencia: Invoice.referencia,
@ -93,14 +99,37 @@ export default function RtpAmazonInvoice2TrafficDetail(
archivo: Invoice.archivo, archivo: Invoice.archivo,
fCreacion: Invoice.fCreacion, fCreacion: Invoice.fCreacion,
clasificador: Invoice.clasificador, clasificador: Invoice.clasificador,
noVuelta: Invoice.noVuelta,
estatus: Invoice.estatus, estatus: Invoice.estatus,
max: true, max: true,
detail: Detail detail: Detail
} }
dispatch(updateInvoice(updatedInvoice)) dispatch(updateInvoice(updatedInvoice))
} */ }
const editInvoice = (id: number) => {
const Invoice = mInvoices
.filter((el) => el.id === props.IDMaster)
.map((el) => {
return el
})
const newDetails = Invoice[0].detail.map((el) => {
if (el.id === id) {
return {
...el,
itemQuantityUnitOfMeasure: UnitMeasure,
weightValue: UnitOfMeasure,
actualUnitCostMonetaryAmount: UnitCost,
totalUnitValueMonetaryAmount: (el.quantity * parseFloat(UnitCost)).toString()
}
}
return el
})
UpdateInvoiceDetail(Invoice[0], newDetails)
}
/* const autoriceItem = (id: number) => { /* const autoriceItem = (id: number) => {
if (CumplimientoNormativo.length === 0 && EstatusSwith) { if (CumplimientoNormativo.length === 0 && EstatusSwith) {
setHeader('Error') setHeader('Error')
setMsg( setMsg(
@ -137,11 +166,42 @@ export default function RtpAmazonInvoice2TrafficDetail(
}) })
} }
/* useEffect(() => { /* useEffect(() => {
if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO) if (UserChanged && EstatusSwith && !props.detail.fraccionGEMCO)
autoriceItem(props.detail.id) autoriceItem(props.detail.id)
}, [EstatusSwith, UserChanged]) */ }, [EstatusSwith, UserChanged]) */
const saveFields = () =>{
const data: DTO2096TraficoFieldsUpdate = {
id: props.detail.id,
UnitMeasure: UnitMeasure,
UnitOfMeasure: parseFloat(UnitOfMeasure),
UnitCost: parseFloat(UnitCost)
}
DSAmazon.TrafficFieldsUpdate(data)
.then((response) => {
/*
itemQuantityUnitOfMeasure: UnitMeasure,
weightValue: UnitOfMeasure,
actualUnitCostMonetaryAmount: UnitCost
*/
setUnitMeasure(response.data.itemQuantityUnitOfMeasure)
setUnitOfMeasure(response.data.weightValue)
setUnitCost(response.data.actualUnitCostMonetaryAmount)
editInvoice(props.detail.id)
setHeader('Informativo')
setMsg('La informacion se guardo exitosamente')
setShowMsg(true)
return
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error')
setShowMsg(true)
return
})
}
useEffect(() => { useEffect(() => {
if (UserChanged) setShowModal(true) if (UserChanged) setShowModal(true)
}, [EstatusSwith, UserChanged]) }, [EstatusSwith, UserChanged])
@ -323,7 +383,6 @@ export default function RtpAmazonInvoice2TrafficDetail(
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible' CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}} }}
> >
{' '}
<OverlayTrigger <OverlayTrigger
placement="bottom" placement="bottom"
overlay={ overlay={
@ -351,7 +410,6 @@ export default function RtpAmazonInvoice2TrafficDetail(
CumplimientoNormativo.length === 0 ? 'hidden' : 'visible' CumplimientoNormativo.length === 0 ? 'hidden' : 'visible'
}} }}
> >
{' '}
<OverlayTrigger <OverlayTrigger
placement="bottom" placement="bottom"
overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>} overlay={<Tooltip id="button-tooltip-2">{Comentarios}</Tooltip>}
@ -372,93 +430,120 @@ export default function RtpAmazonInvoice2TrafficDetail(
</OverlayTrigger> </OverlayTrigger>
</td> </td>
<td> <td>
<IconContext.Provider <div
value={{ style={{ cursor: 'pointer' }}
color: 'green', onClick={() => {
size: '25px' setItemId(props.detail.itemId)
}} setItemDescription(props.detail.itemDescription)
> setDescripcionGEMCO(props.detail.descripcionGEMCO)
<AiTwotoneEdit /> setUnitMeasure(props.detail.itemQuantityUnitOfMeasure)
</IconContext.Provider> setUnitOfMeasure(props.detail.weightValue)
setUnitCost(props.detail.actualUnitCostMonetaryAmount)
setFraccionGEMCO(props.detail.fraccionGEMCO)
setShowModalEdit(true)
}}
>
<IconContext.Provider
value={{
color: 'blue',
size: '25px'
}}
>
<BsFillPencilFill />
</IconContext.Provider>
</div>
</td> </td>
</tr> </tr>
<Modal
{/* <Modal show={ShowModalEdit}
show={ShowModal}
onHide={() => { onHide={() => {
setShowModal(false) setShowModalEdit(false)
}} }}
size={'sm'} size={'sm'}
dialogClassName={'modal-50w'} dialogClassName={'modal-50w'}
> >
<Modal.Body> <Modal.Body>
<div style={{ height: '280px' }}> <div style={{ height: '230px' }}>
<Row style={{ paddingTop: '15px' }}> <Row>
<Col xs={1}></Col> <Col xs={12}>
<Col xs={10}> <Alert key="warning" variant="warning">
<Alert key={'danger'} variant={'danger'}> <span style={{fontWeight:'bold'}}>No Parte:</span> {ItemId} <br/>
¿Esta seguro que esta fraccion ya la autorizo Amazon? <span style={{fontWeight:'bold'}}>Fraccion GEMCO:</span> {FraccionGEMCO} <br/>
<span style={{fontWeight:'bold'}}>Descripcion GEMCO:</span> {DescripcionGEMCO}
</Alert> </Alert>
</Col> </Col>
<Col xs={1}></Col>
</Row> </Row>
<Row style={{ paddingTop: '15px' }}> <Row>
<Col xs={3}>Cumplimiento normativo</Col> <Col xs={3}>Unit Measure:</Col>
<Col xs={8}> <Col xs={3}>
{' '}
<Form.Control <Form.Control
as="textarea" type="text"
id="RequerimientoNormativo" id="Search"
size="sm" size="sm"
value={CumplimientoNormativo} value={UnitMeasure}
onChange={(e) => setCumplimientoNormativo(e.target.value)} onChange={(e) => setUnitMeasure(e.target.value)}
/> />
</Col> </Col>
<Col>&nbsp;</Col>
</Row> </Row>
<Row style={{ paddingTop: '15px' }}> <Row style={{paddingTop:'5px'}}>
<Col xs={3}>Comentarios</Col> <Col xs={3}>Unit of Measure:</Col>
<Col xs={8}> <Col xs={3}>
{' '} <CurrencyFormat
<Form.Control onValueChange={(values: any) => {
as="textarea" const { value } = values
id="Comentarios" setUnitOfMeasure(value)
size="sm" }}
value={ /* format={'########.##'} */
Comentarios.length value={UnitOfMeasure}
? Comentarios displayType={'input'}
: 'Clasificacion incorrecta.' style={{
} fontSize: '18px',
onChange={(e) => setComentarios(e.target.value)} backgroundColor: '#F1EEF9',
border: '2px solid #5923F6',
color: '#5923F6',
width: '120px',
textAlign: 'right',
borderRadius: '10px'
}}
/> />
</Col> </Col>
<Col>&nbsp;</Col>
</Row> </Row>
<Row style={{ paddingTop: '15px' }}> <Row style={{paddingTop:'5px'}}>
<Col xs={6} style={{ textAlign: 'center' }}> <Col xs={3}>Unit Cost:</Col>
<Button <Col xs={3}>
variant="secondary" <CurrencyFormat
onClick={() => { onValueChange={(values: any) => {
setShowModal(false) const { value } = values
setUnitCost(value)
}} }}
> /* format={'########.##'} */
&nbsp;&nbsp;No&nbsp;&nbsp; value={UnitCost}
</Button> displayType={'input'}
style={{
fontSize: '18px',
backgroundColor: '#F1EEF9',
border: '2px solid #5923F6',
color: '#5923F6',
width: '120px',
textAlign: 'right',
borderRadius: '10px'
}}
/>
</Col> </Col>
<Col xs={6} style={{ textAlign: 'center' }}> <Col xs={4}></Col>
<Button <Col xs={2}><Button
variant="danger" variant="primary"
onClick={() => { onClick={() => {
autoriceItem(props.detail.id) saveFields()
}} }}
> >
&nbsp;&nbsp;Si&nbsp;&nbsp; &nbsp;&nbsp;Guardar&nbsp;&nbsp;
</Button> </Button></Col>
</Col>
</Row> </Row>
</div> </div>
</Modal.Body> </Modal.Body>
</Modal> */} </Modal>
<Modal <Modal
show={ShowModal} show={ShowModal}
onHide={() => { onHide={() => {
@ -466,9 +551,7 @@ export default function RtpAmazonInvoice2TrafficDetail(
}} }}
size={'sm'} size={'sm'}
dialogClassName={'modal-50w'} dialogClassName={'modal-50w'}
backdrop="static" >
disableEscapeKeyDown={true}
>
<Modal.Body> <Modal.Body>
<div style={{ height: '150px' }}> <div style={{ height: '150px' }}>
<Row style={{ paddingTop: '15px' }}> <Row style={{ paddingTop: '15px' }}>

@ -14,6 +14,7 @@ import DTO2096LinkInvoice2Reference from '../DTO/DTO2096LinkInvoice2Reference'
import DTO2096Estatus from '../DTO/DTO2096Estatus' import DTO2096Estatus from '../DTO/DTO2096Estatus'
import DTO2096NoParte from '../DTO/DTO2096NoParte' import DTO2096NoParte from '../DTO/DTO2096NoParte'
import I2096NoParteLog from '../Interfaces/I2096NoParteLog' import I2096NoParteLog from '../Interfaces/I2096NoParteLog'
import DTO2096TraficoFieldsUpdate from '../DTO/DTO2096TraficoFieldsUpdate'
class AmazonDataService { class AmazonDataService {
AmazonPendingClasificationInvoiceGET() { AmazonPendingClasificationInvoiceGET() {
@ -134,7 +135,9 @@ class AmazonDataService {
AsignaFacturasReferencia(data: DTO2096LinkInvoice2Reference) { AsignaFacturasReferencia(data: DTO2096LinkInvoice2Reference) {
return http.post<Boolean>(`/AmazonInvoice/AsignaFacturasReferencia`, data) return http.post<Boolean>(`/AmazonInvoice/AsignaFacturasReferencia`, data)
} }
TrafficFieldsUpdate(data: DTO2096TraficoFieldsUpdate) {
return http.put<I2096Detail>(`/AmazonInvoice/TrafficFieldsUpdate`, data)
}

@ -4,5 +4,6 @@ export class TargetURL {
? 'https://localhost:5001/api' ? 'https://localhost:5001/api'
//: "http://reportes.gemcousa.com:5000/api"; //: "http://reportes.gemcousa.com:5000/api";
: "https://www.gemcousa.mx/GEMCOBackend/api"; : "https://www.gemcousa.mx/GEMCOBackend/api";
//: "https://www.alphaomega.com.mx/AOLBackend/api";
} }
} }

@ -45,7 +45,7 @@ import RtpAmazonFinishedClasificationInvoices from './Components/Clientes/Amazon
import { AmazonNoPartes } from './Components/Clientes/Amazon/Reportes/AmazonNoPartes' import { AmazonNoPartes } from './Components/Clientes/Amazon/Reportes/AmazonNoPartes'
import { RptAmazonPendingTraficInvoice } from './Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice' import { RptAmazonPendingTraficInvoice } from './Components/Clientes/Amazon/Reportes/Traffic/Pending/RtpAmazonPendingTraficInvoice'
import { RptAmazonLinkInvoice2Traffic } from './Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic' import { RptAmazonLinkInvoice2Traffic } from './Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic'
import RptPendingAnswerFromAmazon from './Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswer/RptPendingAnswerFromAmazon' import RptPendingAnswerFromAmazon from './Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon'
function PageNotFound() { function PageNotFound() {
return ( return (

Loading…
Cancel
Save