Se actualio el componente Estatus fatura para agregar Inicio y fin y boton exel

EfacturasUpdate
Luis Rendon 11 months ago
parent 0b097671b7
commit d986f06084
  1. 7
      src/Components/Clientes/Amazon/DTO/DTO2096InvoiceStatus.ts
  2. 320
      src/Components/Clientes/Amazon/Reportes/Estatus/RtpAmazonInvoiceStatus.tsx
  3. 4
      src/Components/Clientes/Amazon/Services/Amazon.Services.ts

@ -1,3 +1,5 @@
import { number } from "yup"
export default interface DTO2096InvoiceStatus {
id: number
referencia: string
@ -26,4 +28,9 @@ export default interface DTO2096InvoiceStatus {
idArchivoACK: number,
archivoACK: string,
fhArchivoACK: string
clasificador: string
fechaRecepcion: string
cantidadASIN: number
}

@ -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>
);
)
}

@ -85,8 +85,8 @@ class AmazonDataService {
AmazonFacturasPagadasGET(Inicio: string, Fin: string) {
return http.get<DTO2096RptFacturasPagadas[]>(`/AmazonInvoice/AmazonFacturasPagadasGET?Inicio=${Inicio}&Fin=${Fin}`)
}
AmazonInvoiceStatusGET(Invoice: string) {
return http.get<DTO2096InvoiceStatus[]>(`/AmazonInvoice/AmazonInvoiceStatusGET?Invoice=${Invoice}`)
AmazonInvoiceStatusGET(Invoice: string , Inicio: string, Fin: string) {
return http.get<DTO2096InvoiceStatus[]>(`/AmazonInvoice/AmazonInvoiceStatusGET?Invoice=${Invoice}&Inicio=${Inicio}&Fin=${Fin}`)
}
AmazonInvoicePrioritySET(Id: number, Prioridad: boolean) {
return http.get<I2096Headers[]>(`/AmazonInvoice/AmazonInvoicePrioritySET?id=${Id}&prioridad=${Prioridad}`)

Loading…
Cancel
Save