diff --git a/src/Components/Catalogos/CatFraccionesVulnerables/CatFraccionesVulnerables.tsx b/src/Components/Catalogos/CatFraccionesVulnerables/CatFraccionesVulnerables.tsx new file mode 100644 index 0000000..96e6881 --- /dev/null +++ b/src/Components/Catalogos/CatFraccionesVulnerables/CatFraccionesVulnerables.tsx @@ -0,0 +1,490 @@ +import React, { FC, useEffect, useState } from 'react' +import { Button, Card, Col, Form, Modal, Row } from 'react-bootstrap' +import { IconContext } from 'react-icons' +import ICatFraccionesVulnerables from '../../../Interfaces/Catalogos/ICatFraccionesVulnerables' +import FraccionesVulnerables from '../../../Services/Catalogos/FraccionesVulnerables' +import { useDispatch, useSelector } from 'react-redux' +// import { RootState } from '../../../store/store'; +import { BsFileEarmarkExcel, BsFillPencilFill, BsSearch } from 'react-icons/bs' +import DataTable from 'react-data-table-component' +import * as XLSX from 'xlsx' +import { FaEraser } from 'react-icons/fa' +// import * as CurrencyFormat from 'react-currency-format'; +// import { addCatFraccionesVulnerables, deleteCatFraccionesVulnerables } from '../../../store/features/CatFraccionesVulnerables/CatFraccionesVulnerablesSlice'; +// import { MsgInformativo } from '../../Utils/Toast/msgInformativo'; +// import { data } from 'cypress/types/jquery'; +import { FormControl } from 'react-bootstrap' +import { AiFillCloseCircle } from 'react-icons/ai' +import { AiOutlineSave } from 'react-icons/ai' +// import { Console } from 'console'; +// import { NewLineKind } from 'typescript'; + +// Define types for the component props and table row data +interface IProps {} + +export default function CatFraccionesVulnerables(props: IProps) { + const [UserType, setUserType] = useState(() => { + const stickyValue = window.localStorage.getItem('UserType') + return stickyValue !== null ? JSON.parse(stickyValue) : '' + }) + const dispatch = useDispatch() + const [Data, setData] = useState([]) + // const [filteredData, setFilteredData] = useState([]); + // const [DoneColor, setDoneColor] = useState('#CCD1D1') + const [tipoReporte, setTipoReporte] = useState(0) + // const [filtro, setFiltro] = useState('') + const [DataOriginal, setDataOriginal] = useState( + [] + ) + // const mFraccionesVulnerables = useSelector((state: RootState) => state.CatFraccionesVulnerables.CatFraccionesVulnerables); + const [header, setHeader] = useState('') // Specify the type of 'header' + // const [msgColor, setMsgColor] = useState('primary'); // Specify the type of 'msgColor' + const [show, setShowMsg] = useState(false) // Specify the type of 'show' + const [msg, setMsg] = useState('') // Specify the type of 'msg' + // const [msgDialog, setMsgDialog] = useState(false); // Specify the type of 'msgDialog' + const [id, setId] = useState(0) // Specify the type of 'id' + const [Fraccion, setFraccion] = useState(0) // Specify the type of 'Fraccion' + const [Nico, setNico] = useState('') // Specify the type of 'Nico' + const [Activo, setActivo] = useState(0) // Specify the type of 'Activo' + // const [CurrentTime2Number, setCurrentTime2Number] = useState(0) + const [showModal, setShowModal] = useState(false) + const [editMode, setEditMode] = useState(false) // Nuevo estado para controlar el modo de edición + const [selectedRow, setSelectedRow] = + useState(null) // Nuevo estado para almacenar la fila seleccionada + // const [fraccionesVulnerables, setFraccionesVulnerables] = useState([]); + const [modalFileManager, setModalFileManager] = useState(false) + // const [modalFileManagerCorresponsal, setModalFileManagerCorresponsal] = + // useState(false) + + const columnsFraccionesVulnerables = [ + { + name: 'Id', + width: '14%', + selector: (row: ICatFraccionesVulnerables) => row.id, + sortable: true + }, + { + name: 'Fraccion', + width: '20%', + + selector: (row: ICatFraccionesVulnerables) => row.fraccion, + sortable: true + }, + { + name: 'Nico', + width: '15%', + + selector: (row: ICatFraccionesVulnerables) => row.nico, + sortable: true + }, + { + name: 'Activo', + width: '15%', + selector: (row: ICatFraccionesVulnerables) => + row.activo === 1 ? 'Sí' : 'No', + sortable: true + }, + { + name: 'Edita', + width: '15%', + + cell: (row: ICatFraccionesVulnerables) => ( + + ) + }, + { + name: 'Elimina', + width: '15%', + cell: (row: ICatFraccionesVulnerables) => ( + + ) + } + ] + + const loadRow = (data: ICatFraccionesVulnerables): void => { + setSelectedRow(data) // Al hacer clic en el botón de edición, establecemos la fila seleccionada en el estado + setEditMode(true) // Cambiamos a modo de edición + setId(data.id) // Establecemos el id de la fila seleccionada + setFraccion(data.fraccion) // Cargamos los valores de fracción y nico para edición + setNico(data.nico) + } + + const generaReporte = () => { + setTipoReporte(0) + FraccionesVulnerables.getAll() + .then((response) => { + setData(response.data) + setDataOriginal(response.data) + // uploadAllRows(response.data) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error: ' + e) + setShowMsg(true) + return + }) + } + + const uploadAllRows = (data: ICatFraccionesVulnerables[]) => { + // Iteramos sobre los datos y realizamos la petición para cada fila + data.forEach((row) => { + uploadFile(row) + }) + } + + useEffect(() => { + // console.log(id) // Esto imprimirá el valor actualizado de id después de que cambie + }, [id]) + + const handleCreateNewRecord = () => { + // console.log('se han borrod los texbox ') + + setSelectedRow(null) + setFraccion(0) + setNico('') + setActivo(0) // Establecer a 0 (No) + setEditMode(true) + setId(0) + setShowModal(false) + } + + function deleteRow(id: number): void { + FraccionesVulnerables.Delete(id) + .then((response) => { + // Una vez que obtengas la respuesta exitosa del servidor, puedes actualizar la tabla para reflejar el cambio. + // Podrías eliminar la fila directamente o marcarla como desactivada según tus necesidades. + + // Por ejemplo, supongamos que en tu objeto ICatFraccionesVulnerables tienes una propiedad 'activo' que indica si la fila está activa o no. + // Podrías marcarla como desactivada al recibir la respuesta del servidor. + setData((prevData) => + prevData.map((item) => + item.id === id ? { ...item, activo: 0 } : item + ) + ) + + console.log(response.data) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrió un error: ' + e) + + return + }) + } + + const uploadFile = (data: ICatFraccionesVulnerables): Promise => { + return new Promise((resolve, reject) => { + FraccionesVulnerables.Append(data) + .then((response) => { + // console.log(response.data) // Mensaje de éxito + resolve(response.data) + }) + .catch((e: Error) => { + console.error('Error durante la inserción:', e) // Mensaje de error + reject(e) + }) + }) + } + + const handleSaveChanges = async () => { + if (id === 0) { + if (Nico.length > 2) { + console.log( + 'El valor de Nico tiene más de 2 caracteres. No se actualizará la tabla ni se realizará la petición uploadFile.' + ) + return + } + + const newRecord = { + id: id, + fraccion: Fraccion, + nico: Nico, + activo: Activo + } + + try { + const response = await uploadFile(newRecord) + const newId = response.id // Asegúrate de usar el nombre correcto para el nuevo ID + + // Actualizar el estado local con el nuevo registro que incluye el nuevo ID + const updatedRecord = { ...newRecord, id: newId } + setData((prevData) => [...prevData, updatedRecord]) + + // console.log('este el newId' + newId) + // console.log('este el id normal ' + id) + + // Restablecer valores de los campos + setFraccion(0) + setNico('') + setActivo(1) + setEditMode(false) + setShowModal(false) + } catch (error) { + console.error('Error durante la inserción:', error) + } + } else { + // Aquí actualizamos el registro existente + + if (Nico.length > 2) { + console.log( + 'El valor de Nico tiene más de 2 caracteres. No se actualizará la tabla ni se realizará la petición uploadFile.' + ) + return // Sale de la función sin hacer nada más + } + const updatedData = Data.map((row) => + row.id === selectedRow?.id + ? { ...row, fraccion: Fraccion, nico: Nico, activo: Activo } + : row + ) + setData(updatedData) + const updatedRow = updatedData.find((row) => row.id === selectedRow?.id) + if (updatedRow) { + uploadFile(updatedRow) // Llamada a uploadFile para actualizar el registro + } + setEditMode(false) + setShowModal(false) + } + } + + const downloadExcel = () => { + exportExcel(Data, 'Fracciones Vulnerables') + } + + function exportExcel( + jsonData: ICatFraccionesVulnerables[], + fileName: string + ): void { + let Heading = [['Id', 'Fraccion', 'Nico', 'Activo']] + 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() + } + } + + // Función para manejar el cambio en el campo de entrada de la fracción + const handleFraccionChange = (e: React.ChangeEvent) => { + const value = parseFloat(e.target.value) + setFraccion(isNaN(value) ? 0 : value) + } + + return ( +
+ + +
+
+ + + + + + + Fracción + + + + + + Nico + + + setNico(e.target.value)} + className="orm-select mx-2" + maxLength={2} + style={{ + backgroundColor: 'white', + color: 'black', + padding: '4px', + width: '30px', + height: '30px' + }} + /> + + + Activo + + + setActivo(Number(e.target.value))} + className="form-select mx-2" + style={{ + backgroundColor: 'white', + color: 'black', + padding: '4px', + width: '60px', + height: '30px' + }} + > + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+
+
+
+ ) +} diff --git a/src/Components/Reportes/RptPedimentosPagadosFacturasCruzadas.tsx b/src/Components/Reportes/RptPedimentosPagadosFacturasCruzadas.tsx index e5fa4a7..2184879 100644 --- a/src/Components/Reportes/RptPedimentosPagadosFacturasCruzadas.tsx +++ b/src/Components/Reportes/RptPedimentosPagadosFacturasCruzadas.tsx @@ -1,15 +1,15 @@ import React, { useEffect, useState } from 'react' -//boostrap componentes +//boostrap componentes import { Button, Card, Form } from 'react-bootstrap' import { BsCloudDownload, BsSearch, BsFileEarmarkExcel } from 'react-icons/bs' -//interfaces -import IClientes from "../../Interfaces/Catalogos/IClientes"; -import IArchivoElectronico from "../../Interfaces/IArchivoElectronico"; -import { IRptPedimentosPagadosFacturasCruzadas } from "../../Interfaces/Reportes/IRptPedimentosPagadosFacturasCruzadas"; -//dtos -import DTOgetThesePedimentos from "../../DTO/DTOgetThesePedimentos"; -import DTOReporte from "../../DTO/DTOReporte"; -//Services +//interfaces +import IClientes from '../../Interfaces/Catalogos/IClientes' +import IArchivoElectronico from '../../Interfaces/IArchivoElectronico' +import { IRptPedimentosPagadosFacturasCruzadas } from '../../Interfaces/Reportes/IRptPedimentosPagadosFacturasCruzadas' +//dtos +import DTOgetThesePedimentos from '../../DTO/DTOgetThesePedimentos' +import DTOReporte from '../../DTO/DTOReporte' +//Services import reportsDataService from '../../Services/Reportes/reportes.services' import ClientesDataService from '../../Services/Catalogos/Clientes.Services' import AEOServices from '../../Services/Catalogos/ArchivoElectronico.Services' @@ -26,380 +26,392 @@ import moment from 'moment' import * as XLSX from 'xlsx' const URL = new TargetURL() -export default function RptPedimentosPagadosFacturasCruzadas(){ - const [curURL, setCurURL] = useState(URL.get()) - const [UserId, setUserId] = useState(() => { - const stickyValue = window.localStorage.getItem('UserId') - return stickyValue !== null ? JSON.parse(stickyValue) : 0 - }) - const [Data, setData] = useState>([]) - const [filteredData, setFilteredData] = useState>([]) - const [Inicio, setInicio] = useState(currentDate()) - const [Fin, setFin] = useState(currentDate()) - const [TipoOperacion, setTipoOperacion] = useState(1) - const [Cliente, setCliente] = useState(0) - const [Clientes, setClientes] = useState>() - const [msgColor, setMsgColor] = React.useState('primary') - const [show, setShowMsg] = useState(false) - const [header, setHeader] = useState('') - const [msg, setMsg] = useState('') - const [filtro, setFiltro] = useState('') - const gridRef = React.useRef(null) - const [columnaVerPDF, setcolumnaVerPDF] = useState(false) - const dispatch = useDispatch() - const [columnDefs] = useState([ - { field: 'referencia', sortable: true, filter: true }, - - { field: 'pedimento', sortable: true, filter: true - - }, - { field: 'clave', sortable: true, filter: true }, - { field: 'fechaFirmaBanco', sortable: true, filter: true }, - { field: 'tipoCambio', sortable: true, filter: true }, - { field: 'pesoBruto', sortable: true, filter: true }, - { field: 'paisVendedor', sortable: true, filter: true }, - { field: 'paisOrigen', sortable: true, filter: true }, - { field: 'numFacturas', sortable:true, filter: true }, - { field: 'factura', sortable:true, filter: true }, - { field: 'valorFactura', sortable:true, filter: true }, - { field: 'fraccion', sortable:true, filter: true }, - { field: 'descripcion', sortable:true, filter: true }, - { field: 'nClave', sortable:true, filter: true }, - { field: 'cantFacturas', sortable:true, filter: true }, - { - field: 'valorAduana', - sortable: true, - filter: true, - cellRenderer: (params: any) => { - return params.value - }, - }, - { field: 'incrementables', sortable:true, filter: true }, - { field: 'adValorem', sortable:true, filter: true }, - { field: 'dta', sortable:true, filter: true }, - { field: 'iva', sortable:true, filter: true }, - { field: 'efectivo', sortable:true, filter: true }, - { field: 'total', sortable:true, filter: true }, - { field: 'destino', sortable:true, filter: true }, - { field: 'cruce', sortable:true, filter: true }, - { field: 'remite', sortable:true, filter: true }, - { field: 'caja', sortable:true, filter: true }, - { field: 'valorComercial', sortable:true, filter: true }, - { field: 'incoterm', sortable:true, filter: true }, - - ]) - - function currentDate(): string { - var today = new Date() - var dd = String(today.getDate()).padStart(2, '0') - var mm = String(today.getMonth() + 1).padStart(2, '0') //January is 0! - var yyyy = today.getFullYear() - return yyyy + '-' + mm + '-' + dd +export default function RptPedimentosPagadosFacturasCruzadas() { + const [curURL, setCurURL] = useState(URL.get()) + const [UserId, setUserId] = useState(() => { + const stickyValue = window.localStorage.getItem('UserId') + return stickyValue !== null ? JSON.parse(stickyValue) : 0 + }) + const [Data, setData] = useState< + Array + >([]) + const [filteredData, setFilteredData] = useState< + Array + >([]) + const [Inicio, setInicio] = useState(currentDate()) + const [Fin, setFin] = useState(currentDate()) + const [TipoOperacion, setTipoOperacion] = useState(1) + const [Cliente, setCliente] = useState(0) + const [Clientes, setClientes] = useState>() + const [msgColor, setMsgColor] = React.useState('primary') + const [show, setShowMsg] = useState(false) + const [header, setHeader] = useState('') + const [msg, setMsg] = useState('') + const [filtro, setFiltro] = useState('') + const gridRef = React.useRef(null) + const [columnaVerPDF, setcolumnaVerPDF] = useState(false) + const dispatch = useDispatch() + const [columnDefs] = useState([ + { field: 'referencia', sortable: true, filter: true }, + + { field: 'pedimento', sortable: true, filter: true }, + { field: 'clave', sortable: true, filter: true }, + { field: 'fechaFirmaBanco', sortable: true, filter: true }, + { field: 'tipoCambio', sortable: true, filter: true }, + { field: 'pesoBruto', sortable: true, filter: true }, + { field: 'paisVendedor', sortable: true, filter: true }, + { field: 'paisOrigen', sortable: true, filter: true }, + { field: 'numFacturas', sortable: true, filter: true }, + { field: 'factura', sortable: true, filter: true }, + { field: 'valorFactura', sortable: true, filter: true }, + { field: 'fraccion', sortable: true, filter: true }, + { field: 'descripcion', sortable: true, filter: true }, + { field: 'nClave', sortable: true, filter: true }, + { field: 'cantFacturas', sortable: true, filter: true }, + { + field: 'valorAduana', + sortable: true, + filter: true, + cellRenderer: (params: any) => { + return params.value + } + }, + { field: 'incrementables', sortable: true, filter: true }, + { field: 'adValorem', sortable: true, filter: true }, + { field: 'dta', sortable: true, filter: true }, + { field: 'iva', sortable: true, filter: true }, + { field: 'efectivo', sortable: true, filter: true }, + { field: 'total', sortable: true, filter: true }, + { field: 'destino', sortable: true, filter: true }, + { field: 'cruce', sortable: true, filter: true }, + { field: 'remite', sortable: true, filter: true }, + { field: 'caja', sortable: true, filter: true }, + { field: 'valorComercial', sortable: true, filter: true }, + { field: 'incoterm', sortable: true, filter: true } + ]) + + function currentDate(): string { + var today = new Date() + var dd = String(today.getDate()).padStart(2, '0') + var mm = String(today.getMonth() + 1).padStart(2, '0') //January is 0! + var yyyy = today.getFullYear() + return yyyy + '-' + mm + '-' + dd + } + + const closeToast = (show: boolean): void => { + setShowMsg(false) + } + + const generaReporte = () => { + if (Cliente === 0) { + setHeader('Error') + setMsg('Seleccion el cliente') + setShowMsg(true) + return } - - const closeToast = (show: boolean): void => { - setShowMsg(false) + const data: DTOReporte = { + Inicio: moment(Inicio).format('YYYY-MM-DD'), + Fin: moment(Fin).format('YYYY-MM-DD'), + TipoOperacion: TipoOperacion, + NoCliente: Cliente, + IdUsuario: UserId } - - const generaReporte = () => { - if (Cliente === 0) { + reportsDataService + .getRptPedimentosPagadosFacturasCruzadas(data) + .then((response) => { + setData(response.data) + setFilteredData(response.data) + setHeader('Informativo') + setMsg('Se encontro la siguiente informacion...') + setShowMsg(true) + }) + .catch((e: Error) => { setHeader('Error') - setMsg('Seleccion el cliente') + setMsg('Ocurrio un error: ' + e) setShowMsg(true) return - } - const data: DTOReporte = { - Inicio: moment(Inicio).format('YYYY-MM-DD'), - Fin: moment(Fin).format('YYYY-MM-DD'), - TipoOperacion: TipoOperacion, - NoCliente: Cliente, - IdUsuario: UserId, - } - reportsDataService - .getRptPedimentosPagadosFacturasCruzadas(data) - .then((response) => { - setData(response.data) - setFilteredData(response.data) - setHeader('Informativo') - setMsg('Se encontro la siguiente informacion...') - setShowMsg(true) - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error: ' + e) - setShowMsg(true) - return - }) - } - - useEffect(() => { - ClientesDataService.getAllClientes(parseInt(UserId)) - .then((response) => { - setClientes(response.data) - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error: ' + e) - setShowMsg(true) - return - }) - }, []) - - const downloadExcel = () => { - console.log(Data) - exportExcel(Data, 'Pedimentos Pagados') - } - - function exportExcel(jsonData: IRptPedimentosPagadosFacturasCruzadas[], fileName: string): void { - let Heading = [ - [ - 'Referencia', - 'Pedimento', - 'Clave', - 'FechaFirmaBanco', - 'TipoCambio', - 'PesoBruto', - 'PaisVendedor', - 'PaisOrigen', - 'NumFacturas', - 'Factura', - 'ValorFactura', - 'Fraccion', - 'Descripcion', - 'nClaves', - 'cantFacturas', - 'ValorAduana', - 'Incrementables', - 'Advalorem', - 'Dta', - 'Iva', - 'Efectivo', - 'Total', - 'Destino', - 'Cruce', - 'Remite', - 'Caja', - 'ValorComercial', - 'Inconterm' - ], + }) + } + + useEffect(() => { + ClientesDataService.getAllClientes(parseInt(UserId)) + .then((response) => { + setClientes(response.data) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error: ' + e) + setShowMsg(true) + return + }) + }, []) + + const downloadExcel = () => { + console.log(Data) + exportExcel(Data, 'Pedimentos Pagados') + } + + function exportExcel( + jsonData: IRptPedimentosPagadosFacturasCruzadas[], + fileName: string + ): void { + let Heading = [ + [ + 'Referencia', + 'Pedimento', + 'Clave', + 'FechaFirmaBanco', + 'TipoCambio', + 'PesoBruto', + 'PaisVendedor', + 'PaisOrigen', + 'NumFacturas', + 'Factura', + 'ValorFactura', + 'Fraccion', + 'Descripcion', + 'nClaves', + 'cantFacturas', + 'ValorAduana', + 'Incrementables', + 'Advalorem', + 'Dta', + 'Iva', + 'Efectivo', + 'Total', + 'Destino', + 'Cruce', + 'Remite', + 'Caja', + 'ValorComercial', + 'Inconterm' ] - /* jsonData.forEach(function (v) { + ] + /* jsonData.forEach(function (v) { delete v.tipodeCambiodePedimento }) */ - /* jsonData.map(function (item) { + /* jsonData.map(function (item) { delete item.tipodeCambiodePedimento return item }) */ - 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() - } + 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() } - - const filtraReporte = (e: any) => { - setFiltro(e.target.value) - gridRef.current.api.setQuickFilter(e.target.value) + } + + const filtraReporte = (e: any) => { + setFiltro(e.target.value) + gridRef.current.api.setQuickFilter(e.target.value) + } + + function getParams(e: RowClickedEvent) { + const data: IArchivoElectronico = { + Referencia: e.data.referencia, + PedimentoLargo: '', + NoCliente: Cliente, + IdUsuario: 0, + Archivo: '' } - - function getParams(e: RowClickedEvent) { - const data: IArchivoElectronico = { - Referencia: e.data.referencia, - PedimentoLargo: '', - NoCliente: Cliente, - IdUsuario: 0, - Archivo: '', - } - dispatch(setArchivoElectronico(data)) - if (columnaVerPDF) { - let P: string = e.data.pedimento - P = P.substring(6) - P = P.replace(' ', e.data.aduanaSeccionEntrada) - window.open( - `${curURL}/ArchivoElectronico/getFile?Referencia=${e.data.referencia}&PedimentoLargo=${P}&Nocliente=${Cliente}&IdUsuario=${UserId}` - ) - } + dispatch(setArchivoElectronico(data)) + if (columnaVerPDF) { + let P: string = e.data.pedimento + P = P.substring(6) + P = P.replace(' ', e.data.aduanaSeccionEntrada) + window.open( + `${curURL}/ArchivoElectronico/getFile?Referencia=${e.data.referencia}&PedimentoLargo=${P}&Nocliente=${Cliente}&IdUsuario=${UserId}` + ) } - - const downloadPDFs = () => { - if (Cliente === 0) { - setMsg('Seleccione el cliente') - setHeader('Para poder continuar, favor de: ') - setShowMsg(true) - } - let selectedNodes = gridRef.current.api.getSelectedNodes() - let selectedData = selectedNodes.map((node: any) => node.data) - interface IPedimentos { - pedimento: string - } - const Pedimentos = selectedData.map((item: IPedimentos) => item.pedimento) - const data: DTOgetThesePedimentos = { - Inicio: Inicio, - Fin: Fin, - NoCliente: Cliente, - IdUsuario: UserId, - TipoOperacion: TipoOperacion, - Pedimentos: Pedimentos, - } - AEOServices.getThesePDFs(data) - .then((response: any) => { - const url = window.URL.createObjectURL(new Blob([response.data])) - const link = document.createElement('a') - link.href = url - link.setAttribute('download', 'Pedimentos.zip') - document.body.appendChild(link) - link.click() - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error: ' + e) - setShowMsg(true) - return - }) + } + + const downloadPDFs = () => { + if (Cliente === 0) { + setMsg('Seleccione el cliente') + setHeader('Para poder continuar, favor de: ') + setShowMsg(true) } - - async function getAE(e: any) { - if (e.column.colId === 'ver pedimento') { - setcolumnaVerPDF(true) - } else { - setcolumnaVerPDF(false) - } + let selectedNodes = gridRef.current.api.getSelectedNodes() + let selectedData = selectedNodes.map((node: any) => node.data) + interface IPedimentos { + pedimento: string + } + const Pedimentos = selectedData.map((item: IPedimentos) => item.pedimento) + const data: DTOgetThesePedimentos = { + Inicio: Inicio, + Fin: Fin, + NoCliente: Cliente, + IdUsuario: UserId, + TipoOperacion: TipoOperacion, + Pedimentos: Pedimentos } - - const formatNumber = (number: string) => { - number = parseFloat(number).toFixed(2) - let value = Number(number).toLocaleString('en') - if (!value.indexOf('NaN')) return '0.00' - return value + AEOServices.getThesePDFs(data) + .then((response: any) => { + const url = window.URL.createObjectURL(new Blob([response.data])) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', 'Pedimentos.zip') + document.body.appendChild(link) + link.click() + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error: ' + e) + setShowMsg(true) + return + }) + } + + async function getAE(e: any) { + if (e.column.colId === 'ver pedimento') { + setcolumnaVerPDF(true) + } else { + setcolumnaVerPDF(false) } - - return ( -
- - -
-
- setInicio(e.target.value)} - size='sm' - /> -
-
- setFin(e.target.value)} - size='sm' - /> -
-
- Tipo oper -
-
- setTipoOperacion(parseInt(e.target.value))} - className='form-select form-select-sm' - > - - - -
-
- Cliente -
-
- { - setCliente(parseInt(e.target.value)) - }} - className='form-select form-select-sm' - > - - {Clientes - ? Clientes.map((c) => { - return c.agrupado === 1 ? : '' - }) - : null} - -
-
- -
+ } + + const formatNumber = (number: string) => { + number = parseFloat(number).toFixed(2) + let value = Number(number).toLocaleString('en') + if (!value.indexOf('NaN')) return '0.00' + return value + } + + return ( +
+ + +
+
+ setInicio(e.target.value)} + size="sm" + /> +
+
+ setFin(e.target.value)} + size="sm" + /> +
+
+ Tipo oper +
+
+ setTipoOperacion(parseInt(e.target.value))} + className="form-select form-select-sm" + > + + + +
+
+ Cliente +
+
+ { + setCliente(parseInt(e.target.value)) + }} + className="form-select form-select-sm" + > + + {Clientes + ? Clientes.map((c) => { + return c.agrupado === 1 ? ( + + ) : ( + '' + ) + }) + : null} + +
+
+ +
+
+
+
 
+
+ { + filtraReporte(e) + }} + />
-
-
 
-
- { - filtraReporte(e) - }} - /> -
-
- -
+
+
- - -
-
- {/* */} - getAE(e)} - onRowClicked={(e) => getParams(e)} - > -
- +
+ + +
+
+ {/* */} + getAE(e)} + onRowClicked={(e) => getParams(e)} + >
- ) - } \ No newline at end of file + +
+ ) +} diff --git a/src/Interfaces/Catalogos/ICatFraccionesVulnerables.ts b/src/Interfaces/Catalogos/ICatFraccionesVulnerables.ts new file mode 100644 index 0000000..fe4be35 --- /dev/null +++ b/src/Interfaces/Catalogos/ICatFraccionesVulnerables.ts @@ -0,0 +1,6 @@ +export default interface ICatFraccionesVulnerables{ + id : number , + fraccion : number, + nico : string, + activo : number +} \ No newline at end of file diff --git a/src/Services/Catalogos/FraccionesVulnerables.ts b/src/Services/Catalogos/FraccionesVulnerables.ts new file mode 100644 index 0000000..6382471 --- /dev/null +++ b/src/Services/Catalogos/FraccionesVulnerables.ts @@ -0,0 +1,27 @@ +import http from "../common/http-common"; +import ICatFraccionesVulnerables from '../../Interfaces/Catalogos/ICatFraccionesVulnerables' + + + +class FraccionesVulnerablesDataService { + + + constructor() + { + type returnData = [ICatFraccionesVulnerables[]] + } + + getAll() { + return http.get(`/Catalogos/CatFraccionesVulnerables/getAll`); + } + + Append(data: ICatFraccionesVulnerables) { + return http.post(`/Catalogos/CatFraccionesVulnerables/Append`, data); + } + Delete(id: number) { + return http.delete(`/Catalogos/CatFraccionesVulnerables/Delete/${id}`); + } + + +} +export default new FraccionesVulnerablesDataService(); \ No newline at end of file diff --git a/src/index.tsx b/src/index.tsx index ba5def1..2d6d86d 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -13,6 +13,7 @@ import { Login } from './Components/Login/login' import AmazonNoPartes from './Components/Clientes/Amazon/Reportes/AmazonNoPartes' import AvisoCruce from './Components/AgenciaAduanal/AvisoCruce/AvisoCruce' import CatTabuladores from './Components/Catalogos/CatTabulador/CatTabulador' + import DashboardCorresponsales from './Components/Dashboard/DashboardCorresponsales' import Dashboard from './Components/Dashboard/Dashboard' import DashboardDireccion from './Components/Dashboard/DashboardDireccion' @@ -62,6 +63,7 @@ import RptPedimentosCruces06 from './Components/Reportes/Direccion/RptPedimentos import RptSegregacion from './Components/Clientes/Amazon/Reportes/Segregacion/RptSegregacion' import RptConsultaTrafico from './Components/Clientes/Amazon/Reportes/ConsultaTrafico/RptConsultaTrafico' import RptMonitoreoFacturasPagadasAmazon from './Components/Reportes/RptMonitoreoFacturasPagadasAmazon' +import CatFraccionesVulnerables from './Components/Catalogos/CatFraccionesVulnerables/CatFraccionesVulnerables' require(`./css/${process.env.REACT_APP_ENVIRONMENT}-home.css`) @@ -148,6 +150,7 @@ ReactDOM.render( } /> } /> } /> + } /> } diff --git a/src/store/features/CatFraccionesVulnerables/CatFraccionesVulnerablesSlice.ts b/src/store/features/CatFraccionesVulnerables/CatFraccionesVulnerablesSlice.ts new file mode 100644 index 0000000..8cd21ff --- /dev/null +++ b/src/store/features/CatFraccionesVulnerables/CatFraccionesVulnerablesSlice.ts @@ -0,0 +1,42 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import ICatFraccionesVulnerables from '../../../Interfaces/Catalogos/ICatFraccionesVulnerables'; +const CatFraccionesVulnerables: ICatFraccionesVulnerables[] = [{id:0, fraccion:0 , nico:'' , activo:0 }] +const initialState = { CatFraccionesVulnerables } + +export const CatFraccionesVulnerablesSlice = createSlice({ + name: 'CatCorresponsales', + initialState: initialState, + reducers: { + populateCatFraccionesVulnerables : (state, action: PayloadAction) => { + state.CatFraccionesVulnerables = [] + state.CatFraccionesVulnerables.push(... action.payload) + }, + addCatFraccionesVulnerables : (state, action: PayloadAction) => { + var Existe = state.CatFraccionesVulnerables.find(function(item) { + return item.id === action.payload.id; + }); + if (!Existe) state.CatFraccionesVulnerables.push(action.payload) + }, + updateCatFraccionesVulnerables : (state, action: PayloadAction) => { + const i = state.CatFraccionesVulnerables.findIndex(_element => _element.id === action.payload.id); + if (i > -1) state.CatFraccionesVulnerables[i] = action.payload; + else state.CatFraccionesVulnerables.push(action.payload); + + }, + deleteCatFraccionesVulnerables : (state, action: PayloadAction) => { + const newArr = state.CatFraccionesVulnerables.filter(data => data.id != action.payload); + state.CatFraccionesVulnerables=newArr + }, + InitCatFraccionesVulnerables : (state, action: PayloadAction) => { + state.CatFraccionesVulnerables.splice(0,state.CatFraccionesVulnerables.length-1) + // state.CatCorresponsales = [{id:0, factura:'-Seleccione-', idTrafico:0, valorFacturaDls:0, proveedor:0}] + }, + }, +}) + +export const { addCatFraccionesVulnerables, + populateCatFraccionesVulnerables, + updateCatFraccionesVulnerables, + deleteCatFraccionesVulnerables, + InitCatFraccionesVulnerables } = CatFraccionesVulnerablesSlice.actions; +export default CatFraccionesVulnerablesSlice.reducer; diff --git a/src/store/store.ts b/src/store/store.ts index 88fd07d..6f19a65 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -3,6 +3,7 @@ import userStatusReducer from './features/userStatusSlice/userStatusSlice' import ArchivoElectronicoSlice from './features/Reportes/ArchivoElectronico' import CatProveedoresSlice from './features/CatProveedores/CatProveedoresSlice' import CatCorresponsalesSlice from './features/CatCorresponsales/CatCorresponsalesSlice' +import CatFraccionesVulnerablesSlice from './features/CatFraccionesVulnerables/CatFraccionesVulnerablesSlice' import CorresponsalesFacturasSlice from './features/Corresponsales/CorresponsalesFacturasSlice' import CorresponsalesFacturasTercerosSlice from './features/Corresponsales/CorresponsalesFacturasTercerosSlice' import CorresponsalesContenedoresSlice from './features/Corresponsales/CorresponsalesContenedoresSlice' @@ -19,12 +20,14 @@ import AmazonNoPartesSlice from './features/Clientes/2096/AmazonNoPartes' import AmazonTraficoConsultaSlice from './features/Clientes/2096/AmazonTraficoConsulta' + export const store = configureStore({ reducer: { userStatus: userStatusReducer, ArchivoElectronico: ArchivoElectronicoSlice, CatProveedores: CatProveedoresSlice, CatCorresponsales: CatCorresponsalesSlice, + CatFraccionesVulnerables : CatFraccionesVulnerablesSlice, CFData: CorresponsalesFacturasSlice, CF3rosData: CorresponsalesFacturasTercerosSlice, CCData : CorresponsalesContenedoresSlice,