Cambios actualizados al dia 9-Jun-2023

featureConfirmApplyAnserFromAmazon
unknown 1 year ago
parent 78830530cb
commit bdf2d1dc80
  1. 69
      src/Components/Clientes/Amazon/Reportes/Clasification/WaitingAnswerFromAmazon/RptPendingAnswerFromAmazon.tsx
  2. 256
      src/Components/Clientes/Amazon/Reportes/Traffic/Linking/RptAmazonLinkInvoice2Traffic.tsx
  3. 2
      src/Components/Corresponsales/TraficoCorresponsales.tsx
  4. 2
      src/Components/Reportes/RptCorresponsalesTraficos.tsx
  5. BIN
      src/images/ProjSidebar.png

@ -56,6 +56,7 @@ export default function RptPendingAnswerFromAmazon(
})
const [Data, setData] = useState<DTO2096PerfilesParecidos[]>([])
const [ResumeData, setResumeData] = useState<DTO2096RELParteFactura[]>([])
const [AmazonAnswerFile, setAmazonAnswerFile] = useState<IFileManager[]>([])
const [header, setHeader] = useState('')
const [IDFactura, setIDFactura] = useState(0)
const [Factura, setFactura] = useState('')
@ -65,6 +66,7 @@ export default function RptPendingAnswerFromAmazon(
const [WaitingDialog, setWaitingDialog] = useState(false)
const [WaitingMessage, setWaitingMessage] = useState('Generando...')
const [ShowModalAnswerFile, setShowModalAnswerFile] = useState(false)
const [ConfirmApplyAnswerFile, setConfirmApplyAnswerFile] = useState(false)
const [msg, setMsg] = useState('')
const msgColor = 'primary'
@ -238,15 +240,16 @@ export default function RptPendingAnswerFromAmazon(
})
}
const ApplyAnswerFiles2Invoice = (Files: IFileManager[]) => {
const Filenames= Files.map(element => element.nombreArchivo);
//console.log(Filenames);
const ApplyAnswerFiles2Invoice = () => {
const Filenames = AmazonAnswerFile.map(element => element.nombreArchivo);
DSAmazon.ApplyAnswerFile2Invoice(Filenames)
.then((response) => {
loadReport()
setAmazonAnswerFile([])
setShowModal(false)
})
.catch((e: Error) => {
setAmazonAnswerFile([])
setIDFactura(0)
setHeader('Error')
setMsg('Ocurrio un error ' + e.toString())
@ -792,7 +795,7 @@ export default function RptPendingAnswerFromAmazon(
variant={'danger'}
style={{ textAlign: 'center' }}
>
Proporcione el archivo de respuesta de Amazon
<h4>Proporcione el archivo de respuesta de Amazon</h4>
</Alert>
</Col>
</Row>
@ -805,8 +808,9 @@ export default function RptPendingAnswerFromAmazon(
showPreview={3}
canEdit={true}
Leyenda="Sube archivos de respuesta de Amazon" onAppendMFM={function (Files: IFileManager[]): void {
ApplyAnswerFiles2Invoice(Files)
} } />
setAmazonAnswerFile(Files)
setConfirmApplyAnswerFile(true)
}}/>
</Col>
<Col></Col>
</Row>
@ -814,6 +818,59 @@ export default function RptPendingAnswerFromAmazon(
</Modal.Body>
</Modal>
<Modal
show={ConfirmApplyAnswerFile}
onHide={() => {
setConfirmApplyAnswerFile(false)
}}
size={'sm'}
dialogClassName={'modal-50w'}
>
<Modal.Body>
<div style={{ height: '330px' }}>
<Row style={{ paddingTop: '50px' }}>
<Col xs={12}>
<Alert
key={'danger'}
variant={'danger'}
style={{ textAlign: 'center' }}
>
<h4>Desea aplicar el archivo de respuesta de Amazon?</h4>
</Alert>
</Col>
</Row>
<Row style={{paddingTop:'30px'}}>
<Col xs={12}>&nbsp;</Col>
</Row>
<Row style={{ paddingTop: '15px' }}>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="secondary" size="lg"
onClick={() => {
setShowModalAnswerFile(false)
setConfirmApplyAnswerFile(false)
}}
>
&nbsp;&nbsp;&nbsp;No&nbsp;&nbsp;&nbsp;
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button
variant="danger" size="lg"
onClick={() => {
setShowModalAnswerFile(false)
ApplyAnswerFiles2Invoice()
setConfirmApplyAnswerFile(false)
}}
>
&nbsp;&nbsp;&nbsp;Si&nbsp;&nbsp;&nbsp;
</Button>
</Col>
</Row>
</div>
</Modal.Body>
</Modal>
<Modal
show={WaitingDialog}
onHide={() => {

@ -10,14 +10,8 @@ import {
Table
} from 'react-bootstrap'
import { IconContext } from 'react-icons'
import {
BsChevronDown,
BsChevronRight,
BsFilePdfFill,
} from 'react-icons/bs'
import {
FaAmazon,
} from 'react-icons/fa'
import { BsChevronDown, BsChevronRight, BsFilePdfFill } from 'react-icons/bs'
import { FaAmazon } from 'react-icons/fa'
import I2096Headers from '../../../Interfaces/I2096Header'
import DSAmazon from '../../../Services/Amazon.Services'
import { MsgInformativo } from '../../../../../Utils/Toast/msgInformativo'
@ -34,6 +28,7 @@ import DTO2096LinkInvoice2Reference from '../../../DTO/DTO2096LinkInvoice2Refere
import { AiFillFileExcel } from 'react-icons/ai'
import RptAmazonLinkInvoice2TrafficDetail from './RptAmazonLinkInvoice2TrafficDetail'
import loadingImg from '../../../../../../images/ajaxloader.gif'
import * as XLSX from 'xlsx'
export interface IRptAmazonLinkInvoice2TrafficProps {}
@ -75,7 +70,7 @@ export default function RptAmazonLinkInvoice2Traffic(
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'FAC_'+InvoiceNumber+'.pdf')
link.setAttribute('download', 'FAC_' + InvoiceNumber + '.pdf')
document.body.appendChild(link)
link.click()
setWaitingDialog(false)
@ -97,7 +92,7 @@ export default function RptAmazonLinkInvoice2Traffic(
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', Referencia+'_FACTURAS_MODIFICA.xls')
link.setAttribute('download', Referencia + '_FACTURAS_MODIFICA.xls')
document.body.appendChild(link)
link.click()
loadReport()
@ -119,7 +114,7 @@ export default function RptAmazonLinkInvoice2Traffic(
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', Referencia+'_PARTIDAS_MODIFICA.xls')
link.setAttribute('download', Referencia + '_PARTIDAS_MODIFICA.xls')
document.body.appendChild(link)
link.click()
loadReport()
@ -163,7 +158,6 @@ export default function RptAmazonLinkInvoice2Traffic(
})
}
const changeToggle = (row: I2096Headers) => {
let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === row.id)
const Obj = { ...Invoice[0] }
@ -174,7 +168,9 @@ export default function RptAmazonLinkInvoice2Traffic(
const updateDataGrid = (IDInvoice: number) => {
//toggleInvoice(IDInvoice)
let Invoice: I2096Headers[] = mInvoices.filter((item) => item.id === IDInvoice)
let Invoice: I2096Headers[] = mInvoices.filter(
(item) => item.id === IDInvoice
)
const Obj = { ...Invoice[0] }
Obj.max = !Obj.max
dispatch(updateInvoice(Obj))
@ -218,9 +214,9 @@ export default function RptAmazonLinkInvoice2Traffic(
}
const asociaFacturasReferencia = () => {
const data : DTO2096LinkInvoice2Reference = {
const data: DTO2096LinkInvoice2Reference = {
referencia: Referencia,
facturas : Invoices
facturas: Invoices
}
DSAmazon.AsignaFacturasReferencia(data)
.then((response: any) => {
@ -241,9 +237,9 @@ export default function RptAmazonLinkInvoice2Traffic(
}
const desasociaFacturasReferencia = () => {
const data : DTO2096LinkInvoice2Reference = {
const data: DTO2096LinkInvoice2Reference = {
referencia: Referencia,
facturas : Invoices
facturas: Invoices
}
DSAmazon.AsignaFacturasReferencia(data)
.then((response: any) => {
@ -264,10 +260,109 @@ export default function RptAmazonLinkInvoice2Traffic(
}
function getReceiver(Cadena: string, char1: string[1], char2: string[1]) {
return Cadena.slice(
Cadena.indexOf(char1) + 1,
Cadena.lastIndexOf(char2),
);
return Cadena.slice(Cadena.indexOf(char1) + 1, Cadena.lastIndexOf(char2))
}
const downloadExcel = () => {
interface IRptExcel {
id: number
referencia: string
commercialInvoiceDate: string
invoiceNumber: string
receiver: string
incoterms: string
hawb: string
totalInvoiceQuantityUnitOfMeasure: string
totalInvoiceQuantity: number
totalInvoiceWeightUnitOfMeasure: string
totalInvoiceWeight: string
totalInvoiceValueChargeOrAllowance: string
totalInvoiceValueCurrencyISOCode: string
totalInvoiceValueMonetaryAmount: string
totalPartidas: number
}
const RptExcel: IRptExcel[] = []
mInvoices.forEach(function (invoice) {
var data: IRptExcel = {
id: invoice.id,
referencia: invoice.referencia,
commercialInvoiceDate: invoice.commercialInvoiceDate,
invoiceNumber: invoice.invoiceNumber,
receiver: getRec(invoice.id),
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,
totalPartidas: getTotPartidas(invoice.id)
}
RptExcel.push(data)
})
//console.log(RptExcel)
exportExcel(RptExcel, 'Reporte de trafico - facturas terminadas')
}
const getRec: any = (IDInvoice: number) => {
const result = mInvoices
.filter((value) => value.id === IDInvoice)
.map((row) => {
return getReceiver(row.detail[0].amazonShipmentReferenceId, '_', '_')
})
return result[0]
}
const getTotPartidas: any = (IDInvoice: number) => {
let Tot=0;
const result = mInvoices
.filter((value) => value.id === IDInvoice)
.map((row) => {
return row.detail.length
})
return result[0]
}
function exportExcel(jsonData: any[], fileName: string): void {
let Heading = [
[
'id',
'Referencia',
'Commercial invoice date',
'Invoice number',
'Receiver',
'Incoterms',
'HAWB',
'Qty Unit of measure',
'Tot qty',
'Weight unit of measure',
'Tot weight',
'Tot charge or allowance',
'Tot currency ISO code',
'Tot Monetary amount',
'Total de partidas'
]
]
const wb = XLSX.utils.book_new()
const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([])
XLSX.utils.sheet_add_aoa(ws, Heading)
XLSX.utils.sheet_add_json(ws, jsonData, { origin: 'A2', skipHeader: true })
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
XLSX.writeFile(wb, fileName + '.xlsx')
var range = XLSX.utils.decode_range(ws['!ref?'])
for (var C = range.s.c; C <= range.e.c; ++C) {
var address = XLSX.utils.encode_col(C) + '1' // <-- first row, column number C
if (!ws[address]) continue
ws[address].v = ws[address].v.toUpperCase()
}
}
return (
@ -284,7 +379,8 @@ export default function RptAmazonLinkInvoice2Traffic(
</Card.Title>
</Col>
<Col>
<Button variant='danger'
<Button
variant="danger"
onClick={() => {
unlinkInvoices()
}}
@ -292,7 +388,18 @@ export default function RptAmazonLinkInvoice2Traffic(
Desasociar
</Button>
</Col>
<Col xs={4}></Col>
<Col></Col>
<Col>
<Button
variant="success"
onClick={() => {
downloadExcel()
}}
>
Excel
</Button>
</Col>
<Col></Col>
<Col>
<Button
onClick={() => {
@ -380,7 +487,14 @@ export default function RptAmazonLinkInvoice2Traffic(
/>
</td>
<td style={{ width: '50px', textAlign: 'center' }}>
<div onClick={() => {downloadPDF(MasterData.id, MasterData.invoiceNumber)}}>
<div
onClick={() => {
downloadPDF(
MasterData.id,
MasterData.invoiceNumber
)
}}
>
<IconContext.Provider
value={{ color: 'red', size: '20px' }}
>
@ -388,8 +502,20 @@ export default function RptAmazonLinkInvoice2Traffic(
</IconContext.Provider>
</div>
</td>
<td style={{ width: '50px', textAlign: 'center', visibility: MasterData.referencia ? 'visible' : 'hidden'}}>
<div onClick={() => {downloadExcelInvoices(MasterData.referencia)}}>
<td
style={{
width: '50px',
textAlign: 'center',
visibility: MasterData.referencia
? 'visible'
: 'hidden'
}}
>
<div
onClick={() => {
downloadExcelInvoices(MasterData.referencia)
}}
>
<IconContext.Provider
value={{ color: 'green', size: '20px' }}
>
@ -397,8 +523,20 @@ export default function RptAmazonLinkInvoice2Traffic(
</IconContext.Provider>
</div>
</td>
<td style={{ width: '50px', textAlign: 'center', visibility: MasterData.referencia ? 'visible' : 'hidden'}}>
<div onClick={() => {downloadExcelPartidas(MasterData.referencia)}}>
<td
style={{
width: '50px',
textAlign: 'center',
visibility: MasterData.referencia
? 'visible'
: 'hidden'
}}
>
<div
onClick={() => {
downloadExcelPartidas(MasterData.referencia)
}}
>
<IconContext.Provider
value={{ color: 'green', size: '20px' }}
>
@ -415,11 +553,22 @@ export default function RptAmazonLinkInvoice2Traffic(
<td style={{ width: '300px' }}>
{MasterData.invoiceNumber}
</td>
<td style={{ width: '100px', textAlign: 'center', fontWeight: 'bold', fontSize: '13px' }}>
<td
style={{
width: '100px',
textAlign: 'center',
fontWeight: 'bold',
fontSize: '13px'
}}
>
{mInvoices
.filter((value) => value.id === MasterData.id)
.map((row) => {
return getReceiver(row.detail[0].amazonShipmentReferenceId,'_','_')
return getReceiver(
row.detail[0].amazonShipmentReferenceId,
'_',
'_'
)
})}
</td>
<td style={{ width: '100px', textAlign: 'center' }}>
@ -482,7 +631,7 @@ export default function RptAmazonLinkInvoice2Traffic(
width: '50px',
backgroundColor: '#FFFFFF',
color: '#346288',
textAlign:'right'
textAlign: 'right'
}}
></th>
<th
@ -629,24 +778,21 @@ export default function RptAmazonLinkInvoice2Traffic(
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
</th>
></th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
</th>
></th>
<th
style={{
width: '70px',
backgroundColor: '#D3E0EA',
color: '#346288'
}}
>
</th>
></th>
</tr>
</thead>
<tbody>
@ -658,16 +804,24 @@ export default function RptAmazonLinkInvoice2Traffic(
(detail) =>
MasterData.id ===
detail.idHeader
)//.sort((a,b) => a.itemId.localeCompare(b.itemId))
.sort((a, b) => (a.partida > b.partida) ? 1 : -1)
) //.sort((a,b) => a.itemId.localeCompare(b.itemId))
.sort((a, b) =>
a.partida > b.partida ? 1 : -1
)
.map((detail) => {
return (
<RptAmazonLinkInvoice2TrafficDetail
IDMaster={MasterData.id}
detail={detail}
Habilitado={MasterData.estatus <= 1} onDataChange={function (IDMaster: number): void {
Habilitado={
MasterData.estatus <= 1
}
onDataChange={function (
IDMaster: number
): void {
updateDataGrid(IDMaster)
} } />
}}
/>
)
})}
</>
@ -725,7 +879,12 @@ export default function RptAmazonLinkInvoice2Traffic(
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button variant="danger" onClick={() => {asociaFacturasReferencia()}}>
<Button
variant="danger"
onClick={() => {
asociaFacturasReferencia()
}}
>
&nbsp;&nbsp;Asociar referencia&nbsp;&nbsp;
</Button>
</Col>
@ -763,7 +922,12 @@ export default function RptAmazonLinkInvoice2Traffic(
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'center' }}>
<Button variant="danger" onClick={() => {desasociaFacturasReferencia()}}>
<Button
variant="danger"
onClick={() => {
desasociaFacturasReferencia()
}}
>
&nbsp;&nbsp;DESASOCIAR&nbsp;&nbsp;
</Button>
</Col>
@ -777,9 +941,9 @@ export default function RptAmazonLinkInvoice2Traffic(
onHide={() => {
setWaitingDialog(false)
}}
backdrop='static'
backdrop="static"
keyboard={false}
size='sm'
size="sm"
dialogClassName={'modal-50w'}
centered
>
@ -787,7 +951,7 @@ export default function RptAmazonLinkInvoice2Traffic(
<Modal.Title></Modal.Title>
</Modal.Header>
<Modal.Body>
<img src={loadingImg} style={{ height: '150px' }} alt='proccessing' />
<img src={loadingImg} style={{ height: '150px' }} alt="proccessing" />
Generando {WaitingMessage}...
</Modal.Body>
<Modal.Footer></Modal.Footer>

@ -1177,7 +1177,7 @@ export default function TraficoCorresponsales (props:IProps) {
<Form.Control
as="select"
id="CmbCliente"
disabled={Depto !== 'Corresponsalias'}
disabled={(Depto !== 'Corresponsalias')&&(Depto!=='Sistemas')}
onChange={(e) => {
setIDCliente(parseInt(e.target.value))
}}

@ -415,7 +415,7 @@ export default function RptCorresponsalesTraficos (props: IProps) {
</div>
<div className='row' style={{ paddingTop: 5 }}>
<div className='col'>
{Depto === 'Corresponsalias' ? (
{(Depto === 'Corresponsalias' || Depto ==='Sistemas') ? (
<Button
size='sm'
variant='primary'

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Loading…
Cancel
Save