|
|
|
@ -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() |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
Asociar referencia |
|
|
|
|
</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() |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
DESASOCIAR |
|
|
|
|
</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> |
|
|
|
|