|
|
|
@ -10,6 +10,7 @@ import { |
|
|
|
|
Card, |
|
|
|
|
Col, |
|
|
|
|
Form, |
|
|
|
|
FormControl, |
|
|
|
|
Modal, |
|
|
|
|
Row, |
|
|
|
|
Table |
|
|
|
@ -24,11 +25,12 @@ import { MFileManager } from '../../../../Utils/MFileManager/MFileManager' |
|
|
|
|
import DTO2096RptPayedOperations from '../../DTO/DTO2096RptPayedOperations' |
|
|
|
|
import DTO2096InvoiceStatus from '../../DTO/DTO2096InvoiceStatus' |
|
|
|
|
import IFileManager from '../../../../../Interfaces/Utils/IFileManager' |
|
|
|
|
import * as XLSX from 'xlsx' |
|
|
|
|
export interface IRptAmazonInvoiceStatusProps {} |
|
|
|
|
|
|
|
|
|
export interface IRptAmazonInvoiceStatusProps { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusProps) { |
|
|
|
|
export default function RptAmazonInvoiceStatus( |
|
|
|
|
props: IRptAmazonInvoiceStatusProps |
|
|
|
|
) { |
|
|
|
|
const dispatch = useDispatch() |
|
|
|
|
const mInvoices = useSelector( |
|
|
|
|
(state: RootState) => state.AmazonInvoices.Invoice |
|
|
|
@ -58,22 +60,55 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
return yyyy + '-' + mm + '-' + dd |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// const loadReport = () => {
|
|
|
|
|
// // if (Factura.length == 0) {
|
|
|
|
|
// // setHeader('Error')
|
|
|
|
|
// // setMsg('Para continuar, proporcione la factura a buscar')
|
|
|
|
|
// // setShowMsg(true)
|
|
|
|
|
// // return
|
|
|
|
|
// // }
|
|
|
|
|
// DSAmazon.AmazonInvoiceStatusGET(Factura, Inicio, Fin)
|
|
|
|
|
// .then((response) => {
|
|
|
|
|
// setData(response.data)
|
|
|
|
|
// })
|
|
|
|
|
// .catch((e: Error) => {
|
|
|
|
|
// alert('Ocurrio un error' + e.message.toString())
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
const loadReport = () => { |
|
|
|
|
if (Factura.length==0) { |
|
|
|
|
setHeader('Error') |
|
|
|
|
setMsg('Para continuar, proporcione la factura a buscar') |
|
|
|
|
setShowMsg(true) |
|
|
|
|
return |
|
|
|
|
// Inicializa Inicio y Fin como cadenas vacías por defecto.
|
|
|
|
|
let InicioValue = '' |
|
|
|
|
let FinValue = '' |
|
|
|
|
|
|
|
|
|
// Verifica si se proporcionaron valores para Inicio y Fin.
|
|
|
|
|
if (Factura) { |
|
|
|
|
// Si se proporciona la factura, Inicio y Fin se establecen como vacíos.
|
|
|
|
|
InicioValue = '' |
|
|
|
|
FinValue = '' |
|
|
|
|
|
|
|
|
|
// Limpia el campo de factura.
|
|
|
|
|
setFactura('') |
|
|
|
|
} else { |
|
|
|
|
// Si no se proporciona la factura, se mantienen los valores actuales de Inicio y Fin.
|
|
|
|
|
InicioValue = Inicio |
|
|
|
|
FinValue = Fin |
|
|
|
|
} |
|
|
|
|
DSAmazon.AmazonInvoiceStatusGET(Factura) |
|
|
|
|
|
|
|
|
|
// Realiza la solicitud con los valores actualizados de Inicio y Fin.
|
|
|
|
|
DSAmazon.AmazonInvoiceStatusGET(Factura, InicioValue, FinValue) |
|
|
|
|
.then((response) => { |
|
|
|
|
setData(response.data) |
|
|
|
|
}) |
|
|
|
|
.catch((e: Error) => { |
|
|
|
|
alert('Ocurrio un error' + e.message.toString()) |
|
|
|
|
alert('Ocurrió un error: ' + e.message.toString()) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const handleFacturaChange = (event: React.ChangeEvent<HTMLInputElement>) => { |
|
|
|
|
setFactura(event.target.value) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const downloadPDF = (id: number, InvoiceNumber: string) => { |
|
|
|
|
setWaitingDialog(true) |
|
|
|
|
setWaitingMessage(' archivo PDF ') |
|
|
|
@ -172,7 +207,7 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
const url = window.URL.createObjectURL(new Blob([response.data])) |
|
|
|
|
const link = document.createElement('a') |
|
|
|
|
link.href = url |
|
|
|
|
link.setAttribute('download',filename) |
|
|
|
|
link.setAttribute('download', filename) |
|
|
|
|
document.body.appendChild(link) |
|
|
|
|
link.click() |
|
|
|
|
//loadReport()
|
|
|
|
@ -186,6 +221,156 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const downloadExcel = () => { |
|
|
|
|
exportExcel(Data, 'Reporte de EstatusFacturas') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function exportExcel( |
|
|
|
|
jsonData: DTO2096InvoiceStatus[], |
|
|
|
|
fileName: string |
|
|
|
|
): void { |
|
|
|
|
let Heading = [ |
|
|
|
|
[ |
|
|
|
|
'Id', |
|
|
|
|
'Referencia', |
|
|
|
|
'ComercialInvoiceDate', |
|
|
|
|
'InvoiceNumber', |
|
|
|
|
'Incoterms', |
|
|
|
|
'HAWB', |
|
|
|
|
'QtyUnitoOfMeasure', |
|
|
|
|
'totQty', |
|
|
|
|
'weightUnitOfMeasure', |
|
|
|
|
'TotWeight', |
|
|
|
|
'TotChargeorAllowance', |
|
|
|
|
'TotCurrencyIsoCode', |
|
|
|
|
'TotMonetaryAmout', |
|
|
|
|
'FechaPago', |
|
|
|
|
'Patente', |
|
|
|
|
'Aduana', |
|
|
|
|
'Pedimentos', |
|
|
|
|
'Estatus', |
|
|
|
|
'ACK', |
|
|
|
|
'Clasificador', |
|
|
|
|
'FechaRecepcion', |
|
|
|
|
'CantidadASIN' |
|
|
|
|
] |
|
|
|
|
] |
|
|
|
|
const dataOnly = jsonData.map( |
|
|
|
|
({ |
|
|
|
|
id, |
|
|
|
|
referencia, |
|
|
|
|
commercialInvoiceDate, |
|
|
|
|
invoiceNumber, |
|
|
|
|
incoterms, |
|
|
|
|
hawb, |
|
|
|
|
totalInvoiceQuantityUnitOfMeasure, |
|
|
|
|
totalInvoiceQuantity, |
|
|
|
|
totalInvoiceWeightUnitOfMeasure, |
|
|
|
|
totalInvoiceWeight, |
|
|
|
|
totalInvoiceValueChargeOrAllowance, |
|
|
|
|
totalInvoiceValueCurrencyISOCode, |
|
|
|
|
totalInvoiceValueMonetaryAmount, |
|
|
|
|
fPago, |
|
|
|
|
patente, |
|
|
|
|
aduana, |
|
|
|
|
pedimento, |
|
|
|
|
estatus, |
|
|
|
|
archivoACK, |
|
|
|
|
clasificador, |
|
|
|
|
fechaRecepcion, |
|
|
|
|
cantidadASIN |
|
|
|
|
}) => { |
|
|
|
|
return { |
|
|
|
|
id, |
|
|
|
|
referencia, |
|
|
|
|
commercialInvoiceDate, |
|
|
|
|
invoiceNumber, |
|
|
|
|
incoterms, |
|
|
|
|
hawb, |
|
|
|
|
totalInvoiceQuantityUnitOfMeasure, |
|
|
|
|
totalInvoiceQuantity, |
|
|
|
|
totalInvoiceWeightUnitOfMeasure, |
|
|
|
|
totalInvoiceWeight, |
|
|
|
|
totalInvoiceValueChargeOrAllowance, |
|
|
|
|
totalInvoiceValueCurrencyISOCode, |
|
|
|
|
totalInvoiceValueMonetaryAmount, |
|
|
|
|
fPago, |
|
|
|
|
patente, |
|
|
|
|
aduana, |
|
|
|
|
pedimento, |
|
|
|
|
estatus, |
|
|
|
|
archivoACK, |
|
|
|
|
clasificador, |
|
|
|
|
fechaRecepcion, |
|
|
|
|
cantidadASIN |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
const Report = dataOnly.map( |
|
|
|
|
({ |
|
|
|
|
id, |
|
|
|
|
referencia, |
|
|
|
|
commercialInvoiceDate, |
|
|
|
|
invoiceNumber, |
|
|
|
|
incoterms, |
|
|
|
|
hawb, |
|
|
|
|
totalInvoiceQuantityUnitOfMeasure, |
|
|
|
|
totalInvoiceQuantity, |
|
|
|
|
totalInvoiceWeightUnitOfMeasure, |
|
|
|
|
totalInvoiceWeight, |
|
|
|
|
totalInvoiceValueChargeOrAllowance, |
|
|
|
|
totalInvoiceValueCurrencyISOCode, |
|
|
|
|
totalInvoiceValueMonetaryAmount, |
|
|
|
|
fPago, |
|
|
|
|
patente, |
|
|
|
|
aduana, |
|
|
|
|
pedimento, |
|
|
|
|
estatus, |
|
|
|
|
archivoACK, |
|
|
|
|
clasificador, |
|
|
|
|
fechaRecepcion, |
|
|
|
|
cantidadASIN |
|
|
|
|
}) => { |
|
|
|
|
return { |
|
|
|
|
id, |
|
|
|
|
referencia, |
|
|
|
|
commercialInvoiceDate, |
|
|
|
|
invoiceNumber, |
|
|
|
|
incoterms, |
|
|
|
|
hawb, |
|
|
|
|
totalInvoiceQuantityUnitOfMeasure, |
|
|
|
|
totalInvoiceQuantity, |
|
|
|
|
totalInvoiceWeightUnitOfMeasure, |
|
|
|
|
totalInvoiceWeight, |
|
|
|
|
totalInvoiceValueChargeOrAllowance, |
|
|
|
|
totalInvoiceValueCurrencyISOCode, |
|
|
|
|
totalInvoiceValueMonetaryAmount, |
|
|
|
|
fPago, |
|
|
|
|
patente, |
|
|
|
|
aduana, |
|
|
|
|
pedimento, |
|
|
|
|
estatus, |
|
|
|
|
archivoACK, |
|
|
|
|
clasificador, |
|
|
|
|
fechaRecepcion, |
|
|
|
|
cantidadASIN |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
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, Report, { 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 + 1; C <= range.e.c + 1; ++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() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const getOnlyDate = (dt: string) => { |
|
|
|
|
return dt ? dt.substring(0, 16) : '' |
|
|
|
|
} |
|
|
|
@ -195,7 +380,7 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
<Card> |
|
|
|
|
<Card.Body> |
|
|
|
|
<Row> |
|
|
|
|
<Col xs={5}> |
|
|
|
|
<Col xs={2}> |
|
|
|
|
<Card.Title> |
|
|
|
|
<IconContext.Provider value={{ color: '#F6C34F', size: '8%' }}> |
|
|
|
|
<FaAmazon /> |
|
|
|
@ -203,20 +388,67 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
Operaciones Pagadas |
|
|
|
|
</Card.Title> |
|
|
|
|
</Col> |
|
|
|
|
<Col></Col> |
|
|
|
|
<Col style={{textAlign:'right'}}>Factura</Col> |
|
|
|
|
<Col style={{ textAlign: 'right' }}>Inicio</Col> |
|
|
|
|
<Col xs={0}> |
|
|
|
|
<Form.Control |
|
|
|
|
defaultValue={Inicio} |
|
|
|
|
type="date" |
|
|
|
|
name="Inicio" |
|
|
|
|
placeholder="Inicio" |
|
|
|
|
title="Inicio" |
|
|
|
|
alt="Inicio" |
|
|
|
|
data-date-form="YYYY-mm-dd" |
|
|
|
|
onChange={(e) => setInicio(e.target.value)} |
|
|
|
|
size="sm" |
|
|
|
|
/> |
|
|
|
|
</Col> |
|
|
|
|
<Col style={{ textAlign: 'right' }}>Fin</Col> |
|
|
|
|
<Col xs={0}> |
|
|
|
|
<Form.Control |
|
|
|
|
defaultValue={Fin} |
|
|
|
|
type="date" |
|
|
|
|
name="Fin" |
|
|
|
|
placeholder="Fin" |
|
|
|
|
title="Fin" |
|
|
|
|
alt="Fin" |
|
|
|
|
data-date-form="YYYY-mm-dd" |
|
|
|
|
onChange={(e) => setFin(e.target.value)} |
|
|
|
|
size="sm" |
|
|
|
|
/> |
|
|
|
|
</Col> |
|
|
|
|
<Col style={{ textAlign: 'right' }}>Factura</Col> |
|
|
|
|
<Col xs={3}> |
|
|
|
|
<Form.Control |
|
|
|
|
defaultValue={Factura} |
|
|
|
|
style={{ height: '20px' }} |
|
|
|
|
// defaultValue={Factura}
|
|
|
|
|
value={Factura} |
|
|
|
|
name="Factura" |
|
|
|
|
placeholder="Factura" |
|
|
|
|
title="Factura" |
|
|
|
|
alt="Factura" |
|
|
|
|
onChange={(e) => setFactura(e.target.value)} |
|
|
|
|
// onChange={(e) => setFactura(e.target.value)}
|
|
|
|
|
onChange={handleFacturaChange} |
|
|
|
|
size="sm" |
|
|
|
|
/> |
|
|
|
|
</Col> |
|
|
|
|
<Col style={{textAlign:'right'}} onClick={()=>{loadReport()}}><Button variant="primary">Buscar</Button></Col> |
|
|
|
|
<Col |
|
|
|
|
style={{ textAlign: 'center' }} |
|
|
|
|
onClick={() => { |
|
|
|
|
loadReport() |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
<Button variant="primary">Buscar</Button> |
|
|
|
|
</Col> |
|
|
|
|
<Col> |
|
|
|
|
<Button |
|
|
|
|
variant="success" |
|
|
|
|
onClick={() => { |
|
|
|
|
downloadExcel() |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
Excel |
|
|
|
|
</Button> |
|
|
|
|
</Col> |
|
|
|
|
</Row> |
|
|
|
|
</Card.Body> |
|
|
|
|
</Card> |
|
|
|
@ -250,7 +482,10 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
<th>Aduana</th> |
|
|
|
|
<th>Pedimento</th> |
|
|
|
|
<th>Estatus</th> |
|
|
|
|
<th style={{ width: '150px' }}>ACK</th> |
|
|
|
|
<th style={{ width: '100px' }}>ACK</th> |
|
|
|
|
<th style={{ width: '50px' }}>Clasificador</th> |
|
|
|
|
<th style={{ width: '50px' }}>FechaRecepcion</th> |
|
|
|
|
<th style={{ width: '50px' }}>CantidadASIN</th> |
|
|
|
|
</tr> |
|
|
|
|
</thead> |
|
|
|
|
<tbody> |
|
|
|
@ -278,7 +513,13 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
MasterData.invoiceNumber |
|
|
|
|
) |
|
|
|
|
}} |
|
|
|
|
style={{visibility: (MasterData.estatus.includes('Clasificacion')) ? 'hidden':'visible'}} |
|
|
|
|
style={{ |
|
|
|
|
visibility: MasterData.estatus.includes( |
|
|
|
|
'Clasificacion' |
|
|
|
|
) |
|
|
|
|
? 'hidden' |
|
|
|
|
: 'visible' |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
<IconContext.Provider |
|
|
|
|
value={{ color: 'red', size: '20px' }} |
|
|
|
@ -367,7 +608,13 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
MasterData.invoiceNumber |
|
|
|
|
) |
|
|
|
|
}} |
|
|
|
|
style={{visibility: (MasterData.estatus.includes('Clasificacion')) ? 'hidden':'visible'}} |
|
|
|
|
style={{ |
|
|
|
|
visibility: MasterData.estatus.includes( |
|
|
|
|
'Clasificacion' |
|
|
|
|
) |
|
|
|
|
? 'hidden' |
|
|
|
|
: 'visible' |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
<IconContext.Provider |
|
|
|
|
value={{ color: 'blue', size: '20px' }} |
|
|
|
@ -413,28 +660,40 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
{MasterData.totalInvoiceValueMonetaryAmount} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center' }}> |
|
|
|
|
{MasterData.fPago.substring(0,10)} |
|
|
|
|
{MasterData.fPago.substring(0, 10)} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width:'100px' }}> |
|
|
|
|
<td style={{ textAlign: 'center', width: '100px' }}> |
|
|
|
|
{MasterData.patente} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width:'60px' }}> |
|
|
|
|
<td style={{ textAlign: 'center', width: '60px' }}> |
|
|
|
|
{MasterData.aduana} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width:'100px' }}> |
|
|
|
|
<td style={{ textAlign: 'center', width: '100px' }}> |
|
|
|
|
{MasterData.pedimento} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width:'200px' }}> |
|
|
|
|
<td style={{ textAlign: 'center', width: '200px' }}> |
|
|
|
|
{MasterData.estatus} |
|
|
|
|
</td> |
|
|
|
|
<td |
|
|
|
|
style={{ textAlign: 'center', width: '100px' }} |
|
|
|
|
onClick={() => { |
|
|
|
|
downloadACKFile(MasterData.idArchivoACK, MasterData.archivoACK) |
|
|
|
|
downloadACKFile( |
|
|
|
|
MasterData.idArchivoACK, |
|
|
|
|
MasterData.archivoACK |
|
|
|
|
) |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
{getOnlyDate(MasterData.fhArchivoACK)} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width: '200px' }}> |
|
|
|
|
{MasterData.clasificador} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width: '200px' }}> |
|
|
|
|
{MasterData.fechaRecepcion} |
|
|
|
|
</td> |
|
|
|
|
<td style={{ textAlign: 'center', width: '200px' }}> |
|
|
|
|
{MasterData.cantidadASIN} |
|
|
|
|
</td> |
|
|
|
|
</tr> |
|
|
|
|
</> |
|
|
|
|
) |
|
|
|
@ -485,8 +744,9 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
Proceso={IDProcess} |
|
|
|
|
showPreview={3} |
|
|
|
|
canEdit={false} |
|
|
|
|
Leyenda="Lista de archivos de respuesta de Amazon" onAppendMFM={function (Files: IFileManager[]): void { |
|
|
|
|
} } /> |
|
|
|
|
Leyenda="Lista de archivos de respuesta de Amazon" |
|
|
|
|
onAppendMFM={function (Files: IFileManager[]): void {}} |
|
|
|
|
/> |
|
|
|
|
</Col> |
|
|
|
|
<Col></Col> |
|
|
|
|
</Row> |
|
|
|
@ -504,5 +764,5 @@ export default function RptAmazonInvoiceStatus (props: IRptAmazonInvoiceStatusPr |
|
|
|
|
}} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
); |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|