diff --git a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboSelect.tsx b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx similarity index 53% rename from src/Components/Clientes/Amazon/Components/ComboSelect/ComboSelect.tsx rename to src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx index dace256..a4d080b 100644 --- a/src/Components/Clientes/Amazon/Components/ComboSelect/ComboSelect.tsx +++ b/src/Components/Clientes/Amazon/Components/ComboSelect/ComboDescripcion.tsx @@ -1,20 +1,20 @@ -import * as React from 'react' import { useState } from 'react' import { Button, Col, Form, Modal, Row } from 'react-bootstrap' import * as CurrencyFormat from 'react-currency-format' import { MsgInformativo } from '../../../../Utils/Toast/msgInformativo' +import DTO2096Descripcion from '../../DTO/DTO2096Descripcion' import DTO2096Fraccion from '../../DTO/DTO2096Fraccion' import DSAmazon from '../../Services/Amazon.Services' -export interface IComboSelectProps { +export interface IComboDescripcionProps { IDDetail: number - FraccionOriginal: string + DescripcionOriginal: string } -export function ComboSelect(props: IComboSelectProps) { +export function ComboDescripcion(props: IComboDescripcionProps) { const [Validacion, setValidacion] = useState(0) const [showModal, setShowModal] = useState(false) - const [Fraccion, setFraccion] = useState('') + const [Descripcion, setDescripcion] = useState('') const [header, setHeader] = useState('') const [show, setShowMsg] = useState(false) const [msg, setMsg] = useState('') @@ -26,13 +26,17 @@ export function ComboSelect(props: IComboSelectProps) { setShowModal(true) } if (e === 1) { - const data: DTO2096Fraccion = { + const data: DTO2096Descripcion = { id: props.IDDetail, - fraccion: props.FraccionOriginal + descripcion: props.DescripcionOriginal } - DSAmazon.SetFraccion(data) + DSAmazon.SetDescripcion(data) .then((response) => { - alert('Se guardo correctamente la fraccion GEMCO') + setShowModal(false) + setHeader('Confirmacion') + setMsg('La descripcion se ha guardado correctamente') + setShowMsg(true) + return }) .catch((e: Error) => { alert('Ocurrio un error' + e.message.toString()) @@ -40,27 +44,18 @@ export function ComboSelect(props: IComboSelectProps) { } } - const saveFraccion = () => { - DSAmazon.GetValidaFraccion(Fraccion) + const saveDescripcion = () => { + const data: DTO2096Descripcion = { + id: props.IDDetail, + descripcion: Descripcion + } + DSAmazon.SetDescripcion(data) .then((response) => { - if (response.data.respuesta === 'Si') { - const data: DTO2096Fraccion = { - id: props.IDDetail, - fraccion: Fraccion - } - DSAmazon.SetFraccion(data) - .then((response) => { - alert('Se guardo correctamente la fraccion GEMCO') - }) - .catch((e: Error) => { - alert('Ocurrio un error' + e.message.toString()) - }) - } else { - alert( - 'Esa fraccion no existe, favor de verificarla antes de poder guardar...' - ) - return - } + setShowModal(false) + setHeader('Confirmacion') + setMsg('La descripcion se ha guardado correctamente') + setShowMsg(true) + return }) .catch((e: Error) => { alert('Ocurrio un error' + e.message.toString()) @@ -89,32 +84,22 @@ export function ComboSelect(props: IComboSelectProps) { > - - Proporcione la facccion GEMCO - - { - const { value } = values - setFraccion(value) - }} - format={'######## ##'} - value={Fraccion} - displayType={'input'} - style={{ - fontSize: '18px', - backgroundColor: '#F1EEF9', - border: '2px solid #5923F6', - color: '#5923F6', - width: '120px', - textAlign: 'right', - borderRadius: '10px' - }} + Descripcion GEMCO + + setDescripcion(e.target.value)} /> - + + + + + + { + setShowMsg(false) + }} + /> + + ) + } \ No newline at end of file diff --git a/src/Components/Clientes/Amazon/Components/TextBox/TextBoxDescripcion.tsx b/src/Components/Clientes/Amazon/Components/TextBox/TextBoxDescripcion.tsx new file mode 100644 index 0000000..e9265b4 --- /dev/null +++ b/src/Components/Clientes/Amazon/Components/TextBox/TextBoxDescripcion.tsx @@ -0,0 +1,29 @@ +import { useState } from 'react'; +import * as CurrencyFormat from 'react-currency-format' + +export interface ITextBoxDescripcionProps { + Descripcion: string | null +} + +export function TextBoxDescripcion (props: ITextBoxDescripcionProps) { + const [Descripcion, setDescripcion] = useState(props.Descripcion) + return ( +
+ +
+ ); +} + diff --git a/src/Components/Clientes/Amazon/Components/TextBoxFraccion/TextBoxFraccion.tsx b/src/Components/Clientes/Amazon/Components/TextBox/TextBoxFraccion.tsx similarity index 100% rename from src/Components/Clientes/Amazon/Components/TextBoxFraccion/TextBoxFraccion.tsx rename to src/Components/Clientes/Amazon/Components/TextBox/TextBoxFraccion.tsx diff --git a/src/Components/Clientes/Amazon/DTO/DTO2096Descripcion.ts b/src/Components/Clientes/Amazon/DTO/DTO2096Descripcion.ts new file mode 100644 index 0000000..2e7ed4b --- /dev/null +++ b/src/Components/Clientes/Amazon/DTO/DTO2096Descripcion.ts @@ -0,0 +1,4 @@ +export default interface DTO2096Descripcion { + id: number, + descripcion: string +} \ No newline at end of file diff --git a/src/Components/Clientes/Amazon/DTO/DTO2096PrevioExcel.ts b/src/Components/Clientes/Amazon/DTO/DTO2096PrevioExcel.ts new file mode 100644 index 0000000..265b7b7 --- /dev/null +++ b/src/Components/Clientes/Amazon/DTO/DTO2096PrevioExcel.ts @@ -0,0 +1,47 @@ +export default interface DTO2096PrevioExcel { + Consecutivo: string + ClaveCliente: string + Parte: string + ClaveProveedor: string + TipoOperacion: string + Fraccion: string + SubDivisión: string + DescripcionTIGIE: string + DescripcionFactura: string + DescripcionAgenteAduanal: string + UMFactura: string + UMComercial: string + UMTarifa: string + PrecioUnitario: string + PaisOrigenDestino: string + PaisCompradorVendedor: string + CodigoBarras: string + CodigoControlInterno: string + FamiliaProducto: string + Vinculacion: string + CodigoPreferencial: string + MetodoValoración: string + AplicaTLC: string + MontoDesgravacion: string + TipoArancel: string + TasaArancelEspecifico: string + TasaMaximaAdvalorem: string + UM: string + ES: string + Peso: string + Observaciones: string + ValorMinimo: string + UMCove: string + ClaveModificacion: string + DescripcionCertificado: string + TipoUsoMercancia: string + Exotico: string + Registro: string + TipoRegistro: string + FechaEmision: string + FechaVencimiento: string + Producto: string + UMCFDI: string + UMEmbalaje: string + IdParte99Update: string +} diff --git a/src/Components/Clientes/Amazon/Interfaces/I2096Detail.ts b/src/Components/Clientes/Amazon/Interfaces/I2096Detail.ts index 081b848..6a9ab35 100644 --- a/src/Components/Clientes/Amazon/Interfaces/I2096Detail.ts +++ b/src/Components/Clientes/Amazon/Interfaces/I2096Detail.ts @@ -11,6 +11,7 @@ export default interface I2096Detail { destinationHTSCode: string validaFraccionOriginal: number fraccionGEMCO: string + descripcionGEMCO: string sourceHTSCode: string eccn: string licEx: string diff --git a/src/Components/Clientes/Amazon/Interfaces/I2096Header.ts b/src/Components/Clientes/Amazon/Interfaces/I2096Header.ts index 3361ed3..118102e 100644 --- a/src/Components/Clientes/Amazon/Interfaces/I2096Header.ts +++ b/src/Components/Clientes/Amazon/Interfaces/I2096Header.ts @@ -37,6 +37,7 @@ interface Detail { destinationHTSCode: string validaFraccionOriginal: number fraccionGEMCO: string + descripcionGEMCO: string sourceHTSCode: string eccn: string licEx: string diff --git a/src/Components/Clientes/Amazon/Reportes/RptAmazonPendingInvoices.tsx b/src/Components/Clientes/Amazon/Reportes/RptAmazonPendingInvoices.tsx index 713c6f4..b03b6ad 100644 --- a/src/Components/Clientes/Amazon/Reportes/RptAmazonPendingInvoices.tsx +++ b/src/Components/Clientes/Amazon/Reportes/RptAmazonPendingInvoices.tsx @@ -2,15 +2,26 @@ import * as React from 'react' import { useEffect, useState } from 'react' import { Button, Card, Col, Form, Row, Table } from 'react-bootstrap' import { IconContext } from 'react-icons' -import { AiTwotoneQuestionCircle } from 'react-icons/ai' import { BsChevronDown, BsChevronRight, BsSearch } from 'react-icons/bs' -import { FaCheckCircle, FaQuestionCircle, FaWindowClose } from 'react-icons/fa' -import { FcQuestions } from 'react-icons/fc' -import { ImCross } from "react-icons/im"; -import { ComboSelect } from '../Components/ComboSelect/ComboSelect' -import { TextBoxFraccion } from '../Components/TextBoxFraccion/TextBoxFraccion' +import { + FaCheckCircle, + FaFileExcel, + FaQuestionCircle, + FaWindowClose +} from 'react-icons/fa' +import { ImCross } from 'react-icons/im' +import { ComboDescripcion } from '../Components/ComboSelect/ComboDescripcion' +import { ComboFraccion } from '../Components/ComboSelect/ComboFraccion' +import { TextBoxFraccion } from '../Components/TextBox/TextBoxFraccion' +import I2096Detail from '../Interfaces/I2096Detail' import I2096Headers from '../Interfaces/I2096Header' import DSAmazon from '../Services/Amazon.Services' +import * as XLSX from 'xlsx' +import { iteratorSymbol } from 'immer/dist/internal' +import { RegisterPermisoClientes } from '../../../registerPermisoClientes/registerPermisoClientes' +import { receiveMessageOnPort } from 'worker_threads' +import DTO2096PrevioExcel from '../DTO/DTO2096PrevioExcel' +import { allowedNodeEnvironmentFlags } from 'process' export interface IRtpAmazonPendingInvoicesProps {} export default function RtpAmazonPendingInvoices( @@ -43,6 +54,128 @@ export default function RtpAmazonPendingInvoices( }) } + const downloadExcel = (id: number) => { + let Invoice: I2096Headers[] = Data.filter((row) => row.id === id) + let Details: I2096Detail[] = Invoice[0].detail + let Consecutivo=1; + let excelReadyArray : DTO2096PrevioExcel[] = Details.map(function(element){ + return { + Consecutivo: (Consecutivo++).toString(), + ClaveCliente: '2096', + Parte: element.itemId, + ClaveProveedor: '10', + TipoOperacion: '1', + Fraccion: element.fraccionGEMCO, + SubDivisión: element.fraccionGEMCO.substring(-2), + DescripcionTIGIE: '', + DescripcionFactura: element.pedimentoDescription, + DescripcionAgenteAduanal:element.descripcionGEMCO, + UMFactura: '', + UMComercial: '', + UMTarifa:'', + PrecioUnitario: '', + PaisOrigenDestino: '', + PaisCompradorVendedor: '', + CodigoBarras: '', + CodigoControlInterno: '', + FamiliaProducto: '', + Vinculacion: '1', + CodigoPreferencial: '', + MetodoValoración: '1', + AplicaTLC: '0', + MontoDesgravacion: '0,000', + TipoArancel: '1', + TasaArancelEspecifico: '0,00000', + TasaMaximaAdvalorem: '0,00000', + UM: '', + ES: '', + Peso: '', + Observaciones: '', + ValorMinimo: '', + UMCove: '', + ClaveModificacion: '', + DescripcionCertificado: '', + TipoUsoMercancia: '', + Exotico: '', + Registro: '', + TipoRegistro: '', + FechaEmision: '', + FechaVencimiento: '', + Producto: '', + UMCFDI: '', + UMEmbalaje: '', + IdParte99Update: '' + } + }); + exportExcel(excelReadyArray, 'PlantillaCarga') + } + + function exportExcel(jsonData: DTO2096PrevioExcel[], fileName: string): void { + let Heading = [ + [ + 'Consecutivo', + 'ClaveCliente', + 'Parte', + 'ClaveProveedor', + 'TipoOperacion', + 'Fraccion', + 'SubDivisión', + 'DescripcionTIGIE', + 'DescripcionFactura', + 'DescripcionAgenteAduanal', + 'UMFactura', + 'UMComercial', + 'UMTarifa', + 'PrecioUnitario', + 'PaisOrigenDestino', + 'PaisCompradorVendedor', + 'CodigoBarras', + 'CodigoControlInterno', + 'FamiliaProducto', + 'Vinculacion', + 'CodigoPreferencial', + 'MetodoValoración', + 'AplicaTLC', + 'MontoDesgravacion', + 'TipoArancel', + 'TasaArancelEspecifico', + 'TasaMaximaAdvalorem', + 'UM', + 'ES', + 'Peso', + 'Observaciones', + 'ValorMinimo', + 'UMCove', + 'ClaveModificacion', + 'DescripcionCertificado', + 'TipoUsoMercancia', + 'Exotico', + 'Registro', + 'TipoRegistro', + 'FechaEmision', + 'FechaVencimiento', + 'Producto', + 'UMCFDI', + 'UMEmbalaje', + 'IdParte99Update' + ] + ] + + + 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() + } + } + useEffect(() => { loadReport() }, []) @@ -153,6 +286,7 @@ export default function RtpAmazonPendingInvoices( id + Commercial Invoice Date Invoice Number Trailer Number @@ -211,6 +345,19 @@ export default function RtpAmazonPendingInvoices( )} {MasterData.id} + + {MasterData.estatus === 1 ? ( +
downloadExcel(MasterData.id)} + > + + + +
+ ) : null} + {MasterData.commercialInvoiceDate} @@ -337,7 +484,7 @@ export default function RtpAmazonPendingInvoices( textAlign: 'center' }} > - Confirme + Confirme fraccion Fraccion GEMCO + + Confirme descripcion + + + Descripcion GEMCO + ) : detail.validaFraccionOriginal === - 1 ? ( + 1 ? ( - + + + + + + {detail.descripcionGEMCO} + (`/AmazonInvoice/C2096FraccionSet`, data) } + SetDescripcion(data: DTO2096Descripcion) { + return http.post(`/AmazonInvoice/C2096DescripcionSet`, data) + } } export default new AmazonDataService()