Compare commits

...

29 Commits

Author SHA1 Message Date
Felix Morales 912f18efe7 Creacion de los componentes para el reporte general de facturacion 5 days ago
Felix Morales f641256dd8 Removed the navigation link on the IT dashoboard storage status indicator 3 months ago
Felix Morales f2c753a93e Created a new dashboard for the IT departament to keep visibility of the server D: drive storage. Authorized advanced payments now can be deleted. Removed the date filter and added a range of dates filter in the Alen's account statements component. 3 months ago
Felix Morales ac6a8d1ae6 A component is created for querying Alen’s account statements. An indicator is added to the billing department dashboard to access the Alen account statements component. The styling issue with the indicator of operations with charges in dollars in the accounting department dashboard is fixed. 3 months ago
Felix Morales 27a1e46ee8 Download complementary invoices insted of opening them in a new tab in browser 4 months ago
Felix Morales 0ebe4efdbb Faltaba agregar el evento onClick al boton de descarga individual de los archivos 5 months ago
Felix Morales df09d0aec5 v2.1.0 5 months ago
Felix Morales 499d39839c Merge branch 'feature/Creacion_Reporte_Archivo_Electronico_20240417' 5 months ago
Felix Morales f28d66a040 Ocultar el campo de la factura del corresponsal en la pestaña de informacion adicional para la vista del cliente 5 months ago
Felix Morales 3e81191bfb Creacion del reporte de archivo electronico, seleccionar referencias y descargar sus archivos oficiales comprimidos en un zip 5 months ago
Felix Morales 9d58d775d7 Primer avance del reporte de archivo electronico para la vista de clientes 5 months ago
Felix Morales 985d9fce89 Descargar los traficos del cliente en un excel 5 months ago
Felix Morales 3444834b2c Se agrega la opcion para seleccionar si el tabulador es de impo o expo y la moneda que aplica para el tabulador 6 months ago
Felix Morales 2716185a10 v2.0.1 6 months ago
Felix Morales 120696eff1 Se agrega el funcionamiento para asignar el catalogo a un corresponsal y poder capturar el costo del corresponsal a los conceptos de los catalogos 6 months ago
Felix Morales 7a9f236e3b v2.0.0 6 months ago
Felix Morales 31aa61c2b3 Fix: Permitia capturar rectificaciones de pedimentos aun si el pedimento original no tenia fecha de pago. Al capturar una rectificacion, el campo de la fecha de pago de la ultima rectificacion cambiaba el formato de la fecha y no se mostraba correctamente. 6 months ago
Felix Morales 3a866b416b Agregar filtro de busqueda y tab para descargar los archivos de facturacion a la vista del cliente 6 months ago
Felix Morales 7e6e222dd4 Implementacion del catalogo de tipos de contenedores y agregar el funcionamiento para asignar el tipo de contenedor 6 months ago
Felix Morales 59b149eb93 Cambiar tipo de dato de Aduna para que se trabaje como una cadena de texto 6 months ago
Felix Morales b506b818bb Crear referencias sin pedimento para generar cargos tipo OT 7 months ago
Felix Morales 4516a632da Cambiar indicadores de color para el cliente Alen, Agregar el campo Fecha Entrega en Planta en la pestana de Informacion General 7 months ago
Felix Morales e95c14e907 Merge branch 'feature/solicitar_eliminacion_de_referencia_20240219' 7 months ago
Felix Morales 2871512547 Ocultar el boton para crear solicitudes cuando la referencia ya tiene una creada, creacion del indicador de solicitudes para el supervisor de corresponsalias 7 months ago
Felix Morales 9b3b75bd0a Crear y autorizar solicitudes para eliminar traficos 7 months ago
Felix Morales 636cac25d0 Cambiar nombre a los archivos para crear y autorizar solicitudes 7 months ago
Felix Morales 344dc15e6b Creacion de la vista para descargar el reporte de cuentas cerradas 7 months ago
Felix Morales 58e15f932a reestructuracion del modal de solicitudes, se agrega el boton para eliminar la referencia 7 months ago
Felix Morales 9f2f900921 fix, los usarion sin permiso de edicion podian borrar los contenedores, asigarles facturas o editarlos 7 months ago
  1. 2
      package.json
  2. 11
      src/App.tsx
  3. 19
      src/Classes/Corresponsales/CCorresponsalesTrafico.ts
  4. 44
      src/Components/Catalogos/CatCorresponsales/CatCorresponsales.tsx
  5. 378
      src/Components/Catalogos/CatTabulador/CatTabulador.tsx
  6. 107
      src/Components/Clientes/Traficos/RptClientesTraficos.tsx
  7. 234
      src/Components/Clientes/Traficos/TraficoCliente.tsx
  8. 4
      src/Components/Corresponsales/Anticipos/Anticipos.tsx
  9. 1
      src/Components/Corresponsales/Contenedores/Contenedores.tsx
  10. 1
      src/Components/Corresponsales/Contenedores/ControlledInput/ControlledInput.tsx
  11. 27
      src/Components/Corresponsales/Contenedores/SelectContainer.tsx
  12. 17
      src/Components/Corresponsales/CuentasComplementarias/CuentasComplementarias.tsx
  13. 6
      src/Components/Corresponsales/PedimentosConsolidados/PedimentosConsolidados.tsx
  14. 68
      src/Components/Corresponsales/Rectificaciones/NuevaRectificacion.tsx
  15. 51
      src/Components/Corresponsales/SolicitudReapertura/AutorizarSolicitud.tsx
  16. 54
      src/Components/Corresponsales/SolicitudReapertura/CrearSolicitud.tsx
  17. 25
      src/Components/Corresponsales/Tabulador/Tabulador.tsx
  18. 671
      src/Components/Corresponsales/TraficoCorresponsales.tsx
  19. 19
      src/Components/Dashboard/Dashboard.tsx
  20. 125
      src/Components/Dashboard/DashboardClientes.tsx
  21. 14
      src/Components/Dashboard/DashboardContabilidad.tsx
  22. 36
      src/Components/Dashboard/DashboardCorresponsales.tsx
  23. 36
      src/Components/Dashboard/DashboardFacturacion.tsx
  24. 125
      src/Components/Dashboard/DashboardSistemas.tsx
  25. 517
      src/Components/EstadosCuenta/EstadosCuenta.tsx
  26. 26
      src/Components/Login/login.tsx
  27. 3
      src/Components/Logout/logout.tsx
  28. 195
      src/Components/Reportes/ArchivoElectronico/DialogAE.tsx
  29. 84
      src/Components/Reportes/RptCorresponsalesTraficos.tsx
  30. 2
      src/Components/Reportes/RptCorresponsalesTraficosHst.tsx
  31. 42
      src/Components/Reportes/customCells/ClienteProgressBar.tsx
  32. 41
      src/Components/Reportes/customCells/verDocumentos.tsx
  33. 210
      src/Components/ReportesClientes/CuentasCerradas.tsx/CuentasCerradas.tsx
  34. 308
      src/Components/ReportesClientes/Facturacion/ReporteGeneral.tsx
  35. 4
      src/Components/ReportesClientes/GC50/ReporteGC50.tsx
  36. 372
      src/Components/ReportesClientes/ReporteArchivoElectronico.tsx
  37. 11
      src/Components/Utils/FileManager/FileManager.tsx
  38. 3
      src/DTO/Corresponsales/DTOFiltrosTraficosClientes.ts
  39. 2
      src/DTO/Corresponsales/DTOPedimentosConsolidados.ts
  40. 4
      src/DTO/Corresponsales/DTORectificacionHistorico.ts
  41. 2
      src/DTO/Corresponsales/DTORptCorresponsalesTraficos.ts
  42. 2
      src/DTO/Corresponsales/DTOTraficoCompleto.ts
  43. 2
      src/DTO/Corresponsales/DTOTraficoSolicitud.ts
  44. 48
      src/DTO/EstadosCuenta/DTOEstadoCuentaAlen.ts
  45. 11
      src/DTO/EstadosCuenta/DTOEstadosCuentaAlenFilters.ts
  46. 29
      src/DTO/Facturacion/DTOReporteGeneral.ts
  47. 21
      src/DTO/Reportes/CuentasCerradas/DTOReporteCuentasCerradas.ts
  48. 2
      src/DTO/Reportes/GC50/DTOReporteGC50.ts
  49. 2
      src/Interfaces/Catalogos/ICatCorresponsales.ts
  50. 4
      src/Interfaces/Catalogos/ICatTiposContenedores.ts
  51. 3
      src/Interfaces/Catalogos/ITabulador.ts
  52. 1
      src/Interfaces/Catalogos/ITabuladorConceptos.ts
  53. 1
      src/Interfaces/Corresponsales/ICorresponsalContenedores.ts
  54. 2
      src/Interfaces/Corresponsales/ICorresponsalRectificacionHistorico.ts
  55. 4
      src/Interfaces/Corresponsales/ICorresponsalTrafico.ts
  56. 2
      src/Interfaces/Corresponsales/ICorresponsalTraficoSolicitud.ts
  57. 2
      src/Interfaces/ReportesClientes/IReporteOperacionesNewell.ts
  58. 14
      src/Services/Catalogos/ArchivoElectronico.Services.ts
  59. 6
      src/Services/Catalogos/Clientes.Services.ts
  60. 10
      src/Services/Catalogos/TiposContenedores.Service.ts
  61. 4
      src/Services/Corresponsalias/Corresponsales.Tabuladores.Services.ts
  62. 10
      src/Services/Corresponsalias/Corresponsales.Trafico.Services.ts
  63. 19
      src/Services/Corresponsalias/Corresponsales.Trafico.Solicitud.Service.ts
  64. 6
      src/Services/Dashboard/Dashboard.Corresponsales.Services.ts
  65. 41
      src/Services/EstadosCuenta/EstadosCuentaAlen.Service.ts
  66. 8
      src/Services/Reportes/ReporteCuentasCerradas.Service.ts
  67. 16
      src/Services/Reportes/ReportesFacturacion.Service.ts
  68. 25
      src/Services/Utils/FileManager.Services.ts
  69. 12
      src/index.tsx
  70. 2
      src/store/features/CatCorresponsales/CatCorresponsalesSlice.ts
  71. 21
      src/store/features/CatTiposContenedores/CatTiposContenedoresSlice.ts
  72. 4
      src/store/features/Corresponsales/CorresponsalesContenedoresSlice.ts
  73. 6
      src/store/features/Corresponsales/CorresponsalesTraficoSlice.ts
  74. 11
      src/store/features/userStatusSlice/userStatusSlice.ts
  75. 4
      src/store/store.ts

@ -1,6 +1,6 @@
{
"name": "corresponsalfrontend",
"version": "1.9.0",
"version": "2.1.0",
"private": true,
"dependencies": {
"@reduxjs/toolkit": "^1.9.5",

@ -19,7 +19,8 @@ function App() {
const dispatch = useDispatch()
let _menu: ItemMenu[] = []
const [mainMenu, setMainMenu] = useState(_menu)
const userLogued = useSelector((state: RootState) => state.userStatus.value)
const userLogued = useSelector((state: RootState) => state.userStatus.isLogged)
const isAlenUser = useSelector((state: RootState) => state.userStatus.isAlenUser)
const [show, setShow] = useState(false)
const [msg, setMsg] = useState('')
const [header, setHeader] = useState('')
@ -71,8 +72,12 @@ function App() {
if(Perfil === 'Corresponsales'){
navigate('/RptCorresponsalesTraficos/proc=1/modo=1')
}else if(Perfil === 'Clientes'){
navigate('/Clientes/Traficos')
}else{
if(isAlenUser){
navigate('/')
}else{
navigate('/Clientes/Traficos')
}
} else{
navigate('/')
}
}

@ -14,7 +14,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
kilos?: number
estatus?: number
trafico?: string
aduana?: number
aduana?: string
patente?: number
pedimento?: number
clave?: string
@ -47,7 +47,8 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
causaRectificacion: string;
totalHonorariosAA: number;
totalGastosTerceros: number;
tieneSolicitud: number;
pedimentoObligatorio: number;
constructor() {
this.id=0
this.folioGemco=''
@ -62,7 +63,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
this.kilos=0
this.estatus=0
this.trafico=''
this.aduana=0
this.aduana='0'
this.patente=0
this.pedimento=0
this.clave=''
@ -95,6 +96,8 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
this.causaRectificacion = ''
this.totalHonorariosAA = 0
this.totalGastosTerceros = 0
this.tieneSolicitud = 0
this.pedimentoObligatorio = 1
}
public getEmptyObject(): ICorresponsalTrafico {
@ -112,7 +115,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
kilos :0,
estatus :0,
trafico :'',
aduana :0,
aduana :'0',
patente :0,
pedimento :0,
clave :'',
@ -144,7 +147,9 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
cargoA: 0,
causaRectificacion: '',
totalHonorariosAA: 0,
totalGastosTerceros: 0
totalGastosTerceros: 0,
tieneSolicitud: 0,
pedimentoObligatorio: 1
}
}
@ -195,7 +200,9 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
cargoA: data.cargoA,
causaRectificacion: data.causaRectificacion,
totalHonorariosAA: data.totalHonorariosAA,
totalGastosTerceros: data.totalGastosTerceros
totalGastosTerceros: data.totalGastosTerceros,
tieneSolicitud: data.tieneSolicitud,
pedimentoObligatorio: data.pedimentoObligatorio
}
}
}

@ -37,7 +37,7 @@ export const CatCorresponsales: FC<IProps> = (props) => {
// const [IDCorresponsal, setIDCorresponsal] = useState(0)
const [Nombre, setNombre] = useState('')
const [Patente, setPatente] = useState(0)
const [Aduana, setAduana] = useState(0)
const [Aduana, setAduana] = useState('0')
const [Correos, setCorreos] = useState('')
useEffect(() => {
@ -113,7 +113,7 @@ export const CatCorresponsales: FC<IProps> = (props) => {
setShowMsg(true)
return false
}
if (Aduana < 99) {
if (Aduana === '' || Aduana === '0' || Aduana === ' ' || Aduana === undefined || Aduana === null || Aduana.length < 3) {
setHeader('Error!')
setMsgColor('danger')
setMsg('La aduana debe tener 3 digitos')
@ -149,7 +149,7 @@ export const CatCorresponsales: FC<IProps> = (props) => {
setId(0)
setNombre('')
setPatente(0)
setAduana(0)
setAduana('')
}
const deleteItem = () => {
@ -279,34 +279,20 @@ export const CatCorresponsales: FC<IProps> = (props) => {
<Form.Label>Aduana</Form.Label>
</Col>
<Col>
<CurrencyFormat
<Form.Control
value={Aduana}
displayType={Depto === 'Corresponsalias' ? 'input' : 'text'}
onValueChange={(values: any) => {
const { formattedValue, value } = values
setAduana(value)
onChange={(e) => {
setAduana(e.target.value)
}}
style={{
fontSize: '18px',
backgroundColor: '#F5FFED',
border: '2px solid #25D05B',
width: '60px',
textAlign: 'right',
borderRadius: '10px',
padding: '1px 2px'
}}
style={
Depto === 'Corresponsalias'
? {
fontSize: '18px',
backgroundColor: '#F5FFED',
border: '2px solid #25D05B',
width: '60px',
textAlign: 'right',
borderRadius: '10px',
}
: {
fontSize: '18px',
backgroundColor: '#F5FFED',
border: '2px solid #25D05B',
width: '60px',
textAlign: 'right',
borderRadius: '10px',
paddingRight: '5px',
paddingLeft: '5px',
}
}
/>
</Col>
<Col xs={2}></Col>

@ -17,7 +17,9 @@ import 'react-data-table-component-extensions/dist/index.css'
import { BsPlusSquareFill } from 'react-icons/bs'
import IClientes from '../../../Interfaces/Catalogos/IClientes'
import { FcTimeline } from 'react-icons/fc'
import { FaEraser, FaTimesCircle } from 'react-icons/fa'
import { FaEraser, FaPencilAlt, FaSave, FaTimesCircle } from 'react-icons/fa'
import CorresponsalesServices from '../../../Services/Catalogos/Corresponsales.Services'
import ICatCorresponsales from '../../../Interfaces/Catalogos/ICatCorresponsales'
interface IProps {}
@ -47,57 +49,97 @@ export default function CatTabuladores (props: IProps) {
const [show, setShowMsg] = useState(false)
const [msg, setMsg] = useState('')
const [DialogTabs, setDialogTabs] = useState(false)
const [ConceptoDialogTabs, setConceptoDialogTabs] = useState(false)
const [Corresponsal, setCorresponsal] = useState(0)
const [Corresponsales, setCorresponsales] = useState<ICatCorresponsales[]>([])
const [Tipo, setTipo] = useState(0)
const [Moneda, setMoneda] = useState(0)
const columnsConcepts = [
{
name: 'id',
selector: (row: ITabuladorConceptos) => row.id,
sortable: true,
},
{
name: 'Concepto',
width: '70%',
width: '55%',
selector: (row: ITabuladorConceptos) => row.concepto,
sortable: true,
},
{
name: 'Costo',
name: 'Costo Cliente',
width: '15%',
cell: (row: ITabuladorConceptos) => (
<ControlledInput
id={row.id}
value={row.costo}
postCost={(id, value) => {
postCost(id, value)
postCost(id, value, row.costoCorresponsal, row.idConcepto)
}}
/>
),
},
{
name: 'Costo Corresponsal',
width: '15%',
cell: (row: ITabuladorConceptos) => (
<ControlledInput
id={row.id}
value={row.costoCorresponsal}
postCost={(id, value) => {
postCost(id, row.costo, value, row.idConcepto)
}}
/>
),
},
{
name: 'Elimina',
width: '15%',
cell: (row: ITabuladorConceptos) => (
<div
style={{ textAlign: 'center', cursor: 'pointer' }}
onClick={() => {
setConcepto(row.id)
setConceptoDialogTabs(true)
}}
>
<IconContext.Provider value={{ color: 'red', size: '25px' }}>
<FaTimesCircle />
</IconContext.Provider>
</div>
),
},
]
const columnsTabs = [
{
name: 'id',
selector: (row: ITabulador) => row.id,
name: 'Nombre',
width: '70%',
cell: (row: ITabulador) => (
<div>
{row.nombre}
</div>
),
sortable: true,
},
{
name: 'Nombre',
width: '70%',
name: 'Editar',
width: '15%',
cell: (row: ITabulador) => (
<div
style={{ width: '450px', cursor: 'pointer' }}
style={{ textAlign: 'center', cursor: 'pointer' }}
onClick={() => {
setTabulador(row.id)
setNombreTabulador(row.nombre)
setCorresponsal(row.idCorresponsal!)
setTipo(row.tipo)
setMoneda(row.moneda)
}}
>
{row.nombre}
<IconContext.Provider value={{ color: 'blue', size: '25px' }}>
<FaPencilAlt />
</IconContext.Provider>
</div>
),
sortable: true,
},
{
name: 'Elimina',
width: '15%',
cell: (row: ITabulador) => (
<div
style={{ textAlign: 'center', cursor: 'pointer' }}
@ -115,14 +157,15 @@ export default function CatTabuladores (props: IProps) {
},
]
const postCost = (id: number, Cost: number) => {
const postCost = (id: number, costoCliente: number, costoCorresponsal: number, idConcepto: number) => {
const data: ITabuladorConceptos = {
id: id,
idTabulador: Tabulador,
idConcepto: Concepto,
idConcepto: idConcepto,
concepto: '',
costo: Cost,
costo: costoCliente,
activo: 1,
costoCorresponsal: costoCorresponsal
}
CTabDetDataService.Append(data)
.then((response) => {
@ -130,6 +173,7 @@ export default function CatTabuladores (props: IProps) {
setHeader('Confirmacion')
setMsg('La informacion se guardo corrctamente')
setShowMsg(true)
setConcepto(0)
})
.catch((e: Error) => {
setHeader('Error')
@ -160,6 +204,19 @@ export default function CatTabuladores (props: IProps) {
})
}
const deleteConcepto = () => {
CTabDetDataService.Delete(Concepto)
.then((resp) => {
if(resp.status === 200){
setHeader('Informativo')
setMsg(resp.data.respuesta)
setShowMsg(true)
setConceptoDialogTabs(false)
setDetalleConceptos(DetalleConceptos.filter(concepto => concepto.id != Concepto))
}
})
}
useEffect(() => {
CTabDetDataService.getAllConcepts()
.then((response) => {
@ -181,9 +238,19 @@ export default function CatTabuladores (props: IProps) {
setShowMsg(true)
return
})
CorresponsalesServices.getAll()
.then((response) => {
setCorresponsales(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}, [])
useEffect(() => {
useEffect(() => {//Consulta los conceptos del tabulador
CTabDetDataService.GetDetailByIdTab(Tabulador)
.then((response) => {
setDetalleConceptos(response.data)
@ -197,12 +264,12 @@ export default function CatTabuladores (props: IProps) {
console.log(Tabulador)
}, [Tabulador])
useEffect(() => {
useEffect(() => {//Consulta los tabuladores de un cliente
if (Cliente > 0) {
setNombreTabulador('')
setTabuladores([])
setDetalleConceptos([])
CTabDataService.GetByCustomer(Cliente)
CTabDataService.GetByCustomer(Cliente, null)
.then((response) => {
setTabuladores(response.data)
})
@ -228,12 +295,16 @@ export default function CatTabuladores (props: IProps) {
}
const saveForm = () => {
const data: ITabulador = {
id: Tabulador,
idCliente: Cliente,
nombre: NombreTabulador,
}
CTabDataService.Append(data)
if(NombreTabulador){
const data: ITabulador = {
id: Tabulador,
idCliente: Cliente,
nombre: NombreTabulador,
idCorresponsal:Corresponsal,
tipo: Tipo,
moneda: Moneda
}
CTabDataService.Append(data)
.then((response) => {
if (response.status === 200) {
setHeader('Informativo')
@ -260,22 +331,36 @@ export default function CatTabuladores (props: IProps) {
setShowMsg(true)
return
})
}else{
setHeader('Error')
setMsg('Favor de capturar el nombre del tabulador')
setShowMsg(true)
setCorresponsal(0)
return
}
}
const addConcept = () => {
const addConcept = (idConcepto: number) => {
if (Tabulador === 0) {
setHeader('Error')
setMsg('Por favor, primero seleccione el tabulador')
setShowMsg(true)
return
}
if (Concepto === 0) {
if (idConcepto === 0) {
setHeader('Error')
setMsg('Por favor, primero seleccione el concepto')
setShowMsg(true)
return
}
postCost(0, 0)
postCost(0, 0, 0, idConcepto)
}
const clearForm = () => {
setTabulador(0)
setNombreTabulador('')
setCorresponsal(0)
setConcepto(0)
}
return (
@ -283,7 +368,6 @@ export default function CatTabuladores (props: IProps) {
<Card>
<Card.Body>
<Card style={{ height: '100%' }}>
<Card.Header as='h4'>Tabuladores</Card.Header>
<Card.Body>
<Container fluid>
<Alert variant='primary'>
@ -314,68 +398,43 @@ export default function CatTabuladores (props: IProps) {
</Form.Control>
</h4>
</Col>
<Col
xs={1}
style={{ textAlign: 'right', paddingTop: '5px', cursor: 'pointer' }}
onClick={() => {
setTabulador(0)
setNombreTabulador('')
}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<FaEraser />
</IconContext.Provider>
</Col>
<Col xs={1} style={{ paddingTop: '5px' }}>
<div>
<h5>Tabulador</h5>
</div>
</Col>
<Col xs={3}>
<h4>
<Form.Control
type='text'
id='NombreTabulador'
size='sm'
value={NombreTabulador}
onChange={(e) => {
setNombreTabulador(e.target.value)
}}
placeholder='Nombre del tabulador'
style={{ fontSize: '18px' }}
/>
</h4>
</Col>
<Col>
<Button
variant='primary'
size='sm'
style={{ paddingLeft: '10px', paddingRight: '10px' }}
onClick={() => saveForm()}
>
Guardar
</Button>
</Col>
</Row>
</Alert>
<Row>
<Col xs={6}>
<Col xs={5}>
<Card style={{}}>
<Card.Body>
<Card.Header><h5>Tabuladores</h5></Card.Header>
<Card.Body>
<Card.Subtitle className='mb-2 text-muted'>
<Row>
<Col xs={2} style={{ paddingTop: '8px' }}>
Tabulador
<Col
xs={1}
style={{ textAlign: 'right', paddingTop: '5px', cursor: 'pointer' }}
onClick={() => {clearForm()}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<FaEraser />
</IconContext.Provider>
</Col>
<Col xs={10}>
<Form.Control
type='text'
size='sm'
placeholder='Busqueda de tabulador...'
onChange={(e) => {
filtraTabulador(e)
}}
/>
<h4>
<Form.Control
type='text'
id='NombreTabulador'
size='sm'
value={NombreTabulador}
onChange={(e) => {
setNombreTabulador(e.target.value)
}}
placeholder='Ingrese el nombre del tabulador...'
style={{ fontSize: '18px' }}
/>
</h4>
</Col>
<Col xs={1} style={{ paddingTop: '5px' }}>
<IconContext.Provider value={{ color: 'green', size: '30px' }}>
<FaSave onClick={() => saveForm()} style={{ cursor: 'pointer' }}/>
</IconContext.Provider>
</Col>
</Row>
</Card.Subtitle>
@ -391,20 +450,119 @@ export default function CatTabuladores (props: IProps) {
</Card.Body>
</Card>
</Col>
<Col xs={6}>
<Col xs={7}>
<Card style={{}}>
<Card.Header><h5>Datos del Tabulador: {NombreTabulador}</h5></Card.Header>
<Card.Body>
<Card.Subtitle className='mb-2 text-muted'>
<Row>
<Col xs={3} style={{ paddingTop: '5px' }}>Corresponsal</Col>
<Col xs={8}>
<Form.Control
disabled={Tabulador===0}
as='select'
onChange={(e) => {
setCorresponsal(parseInt(e.target.value))
}}
className='form-select form-select-sm'
style={{ fontSize: '18px' }}
value={Corresponsal}
>
<option value='0'>-SELECCIONE-</option>
{Corresponsales
? Corresponsales.map((c) => {
return (
<option value={c.id} key={c.id}>
{c.nombre} | {c.aduana} | {c.patente}
</option>
)
})
: null}
</Form.Control>
</Col>
<Col style={{ paddingTop: '5px' }}>
<IconContext.Provider value={{ color: 'green', size: '30px' }}>
<FaSave onClick={() => saveForm()} style={{ cursor: 'pointer' }}/>
</IconContext.Provider>
</Col>
</Row>
<Row style={{ paddingTop: '5px' }}>
<Col xs={6}>
<Row>
<Col xs={3}>Tipo: </Col>
<Col xs={9}>
<Form>
<Form.Check
type='radio'
id='radio-Impo'
value={1}
label='Impo'
inline
name='grupo'
onChange={e => setTipo(parseInt(e.target.value))}
checked={Tipo === 1}
disabled={Tabulador===0}
/>
<Form.Check
type='radio'
id='radio-Expo'
value={2}
label='Expo'
inline
name='grupo'
onChange={e => setTipo(parseInt(e.target.value))}
checked={Tipo === 2}
disabled={Tabulador===0}
/>
</Form>
</Col>
</Row>
</Col>
<Col xs={6}>
<Row>
<Col xs={4}>Moneda:</Col>
<Col xs={8}>
<Form>
<Form.Check
type='radio'
id='radio-USD'
value={1}
label='USD'
inline
name='grupo'
onChange={e => setMoneda(parseInt(e.target.value))}
checked={Moneda === 1}
disabled={Tabulador===0}
/>
<Form.Check
type='radio'
id='radio-MXN'
value={2}
label='MXN'
inline
name='grupo'
onChange={e => setMoneda(parseInt(e.target.value))}
checked={Moneda === 2}
disabled={Tabulador===0}
/>
</Form>
</Col>
</Row>
</Col>
</Row>
<hr />
<Row>
<Col xs={2} style={{ paddingTop: '8px' }}>
Conceptos
</Col>
<Col xs={9}>
<Col xs={10}>
<Form.Control
disabled={Tabulador===0}
as='select'
onChange={(e) => setConcepto(parseInt(e.target.value))}
onChange={(e) => addConcept(parseInt(e.target.value))}
className='form-select form-select-sm'
style={{ fontSize: '17px' }}
value={Concepto}
>
<option value='0'>- Seleccione -</option>
{CatConceptos
@ -418,7 +576,7 @@ export default function CatTabuladores (props: IProps) {
: null}
</Form.Control>
</Col>
<Col style={{ paddingTop: '5px' }}>
{/* <Col style={{ paddingTop: '5px' }}>
<Form.Label
onClick={() => {
addConcept()
@ -429,7 +587,7 @@ export default function CatTabuladores (props: IProps) {
<BsPlusSquareFill />
</IconContext.Provider>
</Form.Label>
</Col>
</Col> */}
</Row>
</Card.Subtitle>
<DataTable
@ -487,6 +645,42 @@ export default function CatTabuladores (props: IProps) {
</Row>
</Modal.Footer>
</Modal>
<Modal
show={ConceptoDialogTabs}
onHide={() => {
setConceptoDialogTabs(false)
}}
size='sm'
>
<Modal.Body>
¿Esta seguro de eliminar este concepto?
</Modal.Body>
<Modal.Footer>
<Row>
<Col xs={6} style={{ textAlign: 'left', paddingRight: '100px' }}>
<Button
variant='danger'
onClick={deleteConcepto}
size='sm'
style={{ paddingRight: '20px', paddingLeft: '20px' }}
>
Si
</Button>
</Col>
<Col xs={6} style={{ textAlign: 'right' }}>
<Button
variant='secondary'
onClick={() => {
setConceptoDialogTabs(false)
}}
size='sm'
>
Cerrar
</Button>
</Col>
</Row>
</Modal.Footer>
</Modal>
<MsgInformativo
show={show}
msg={msg}

@ -32,6 +32,7 @@ import ClientesServices from '../../../Services/Catalogos/Clientes.Services'
import reportesServices from '../../../Services/Reportes/reportes.services'
import DTOFiltrosTraficosClientes from '../../../DTO/Corresponsales/DTOFiltrosTraficosClientes'
import TraficoCliente from './TraficoCliente'
import { ClienteProgressBar } from '../../Reportes/customCells/ClienteProgressBar'
/* import '../../css/generic01.css' */
interface IProps {}
@ -74,8 +75,9 @@ export default function RptClientesTraficos(props: IProps) {
//const [Corresponsal, setCorresponsal] = useState(0)
const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState(0);
const [Aduana, setAduana] = useState('0');
const [Referencia, setReferencia] = useState('')
const [Estado, setEstado] = useState(0)
const [Clientes, setClientes] = useState<Array<IClientes>>()
const [filtro, setFiltro] = useState('')
const gridRef = React.useRef<any>(null)
@ -92,7 +94,7 @@ export default function RptClientesTraficos(props: IProps) {
center: true,
sortable: true,
filter: true,
cellRenderer: ProgressBar,
cellRenderer: ClienteProgressBar,
},
{
field: 'folioGemco',
@ -263,7 +265,8 @@ export default function RptClientesTraficos(props: IProps) {
Aduana: Aduana,
Patente: Patente,
Referencia: Referencia,
IdUsuario: UserId
IdUsuario: UserId,
Estado: Estado
}
ClientesServices
.GetTraficos(data)
@ -289,56 +292,33 @@ export default function RptClientesTraficos(props: IProps) {
}
function exportExcel(jsonData: any[], fileName: string): void {
let Heading = [
[
{
title: 'Aduana Seccion Despacho',
style: { font: { sz: '18', bold: true } },
},
'Patente',
'Referencia',
'Pedimento',
'Fecha Pago',
'Fecha Entrada Presentacion',
'Clave Docto',
'Es rectificacion',
'Tipo Cambio',
'Valor Dls',
'Valor Aduana',
'Numero Factura',
'Fecha Factura',
'Proveedor Factura',
'Incrementables Fact',
'Fraccion',
'Subdiv NICO',
'Descripcion',
'Pais Origen',
'Pais Vendedor',
'Tasa DTA',
'Tasa IGI',
'Numero Parte',
'Cantidad Comercial',
'TL Pais',
'Tipo Tasa',
'Unidad Comercial',
'Valor Factura Item',
'Valor Comercial Ped',
'Valor Factura Item MN',
],
]
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 data: DTOFiltrosTraficosClientes = {
Inicio: moment(Inicio).format('YYYY-MM-DD'),
Fin: moment(Fin).format('YYYY-MM-DD'),
TipoOperacion: TipoOperacion,
NoCliente: Cliente,
IdCorresponsal: Corresponsal,
Pedimento: Pedimento,
Aduana: Aduana,
Patente: Patente,
Referencia: Referencia,
IdUsuario: UserId,
Estado: Estado
}
ClientesServices.GetExcel(data)
.then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `Reporte_Operaciones.xlsx`);
document.body.appendChild(link);
link.click();
}).catch(e => {
setHeader('Error')
setMsg('Ocurrio un error al generar el reporte. Por favor, intentelo de nuevo.')
setShowMsg(true)
return
})
}
return (
@ -372,7 +352,7 @@ export default function RptClientesTraficos(props: IProps) {
type='text'
size='sm'
placeholder='Aduana'
onChange={(e) => setAduana(+e.target.value)}
onChange={(e) => setAduana(e.target.value === '' ? '0' : e.target.value)}
/>
</Col>
<Col xs={2}>
@ -453,6 +433,23 @@ export default function RptClientesTraficos(props: IProps) {
</Form.Control>
</Form.Label>
</Col>
<Col lg={2}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Estado
<Form.Control
as='select'
onChange={(e) => {
setEstado(parseInt(e.target.value))
}}
className='form-select form-select-sm'
>
<option value='0'>-SELECCIONE-</option>
<option value='1'>Por Terminar</option>
<option value='2'>Despachado Sin Facturar</option>
<option value='3'>Despachado y Facturado</option>
</Form.Control>
</Form.Label>
</Col>
{(Perfil !== "Corresponsales" && Perfil !== "Clientes")? <>
<Col lg={4}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
@ -492,7 +489,6 @@ export default function RptClientesTraficos(props: IProps) {
<BsSearch />
&nbsp; Buscar
</Button>
{(Depto === 'Corresponsalias' || Depto === 'Sistemas') ? (
<Button
size='sm'
variant='success'
@ -504,9 +500,6 @@ export default function RptClientesTraficos(props: IProps) {
<BsFileEarmarkExcel />
&nbsp; Excel
</Button>
) : (
''
)}
</Col>
</Row>
</Card.Body>

@ -172,7 +172,7 @@ export default function TraficoCliente(props:IProps){
const [Kilos, setKilos] = useState<number | undefined>(0)
const [Estatus, setEstatus] = useState<number>(0)
const [Trafico, setTrafico] = useState<string | undefined>('')
const [Aduana, setAduana] = useState<number | undefined>(0)
const [Aduana, setAduana] = useState<string | undefined>('0')
const [Patente, setPatente] = useState<number | undefined>(0)
const [Pedimento, setPedimento] = useState<number | undefined>(0)
const [ClavePedimento, setClavePedimento] = useState<string>('')
@ -879,7 +879,7 @@ export default function TraficoCliente(props:IProps){
useEffect(() => {
if (
IDCorresponsal !== 0 &&
Aduana !== 0 &&
Aduana !== '' && Aduana !== '0' && Aduana !== ' ' && Aduana !== undefined && Aduana !== null &&
Patente !== 0 &&
Pedimento !== 0 &&
FechaPago !== '' &&
@ -957,18 +957,6 @@ export default function TraficoCliente(props:IProps){
}*/
useEffect(() => {
if (IDCliente > 0) {
CTabDataService.GetByCustomer(IDCliente)
.then((response) => {
setTabuladores(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}
if (Clientes) {
let tmpArray: ItemList[] = []
Clientes.forEach((element) => {
@ -1097,15 +1085,6 @@ export default function TraficoCliente(props:IProps){
return ''
}
function openSOIA() {
let id: number = Aduana ? Aduana : 0
window.open(
`https://aplicacionesc.mat.sat.gob.mx/SOIA_CR_WEB/oia_consultarapd_cep.aspx?&pa=${Patente}&dn=${Pedimento}&s=0&ap=${getCurrentYear()}&pad=${Aduana}&ad=${getAduana(
id
)}`
)
}
let handleColor = (time: Date) => {
return time.getHours() > 12 ? 'text-success' : 'text-error'
}
@ -1151,36 +1130,6 @@ export default function TraficoCliente(props:IProps){
//}
}
const cerrarTrafico = () => {
if(TotalHonorariosAA == 0){
setHeader('Error')
setMsg('Para cerrar la cuenta debe capturar el total de horarios')
setShowMsg(true)
return;
}
saveForm();
FileManagerServices.GetClientesZip(IDTrafico)
.then(response => {
CTrafDataService.ValidateComplete({id: IDTrafico, idUsuario:UserId, estatus: 4, comentarios:'Todo Correcto'})
.then(resp => {
setProceso(4);
setHeader('Informativo')
setMsg('Cuenta cerrada con éxito.')
setShowMsg(true)
}).catch(e => {
setHeader('Error')
setMsg('Ocurrio un error al cerrar la cuenta. Favor de intentarlo nuevamente')
setShowMsg(true)
});
}).catch(error => {
setHeader('Error')
setMsg('No se han encontrado uno o más de los archivos obligatorios para cerrar la cuenta.')
setShowMsg(true)
return
})
}
const GetClientesZip = () => {
FileManagerServices.GetClientesZip(IDTrafico)
.then(response => {
@ -1711,20 +1660,6 @@ export default function TraficoCliente(props:IProps){
readOnly= {Depto !== 'Corresponsalias' ? true : false}
format={'### ####'}
mask="_"
onValueChange={(values: any) => {
const { value } = values
if(value.length === 7 ){
CTrafDataService.ValidaTraficoDuplicado(Aduana, Patente, value, IDTrafico).then( response => {
if(response.data !== ""){
setHeader('Informativo')
setMsg(`Pedimento Duplicado.\n\rLa referencia ${response.data} ya cuenta con los mismos datos de aduana, patente y pedimento`)
setShowMsg(true)
return
}
setPedimento(value.length === 0 ? 0 : value)
})
}
}}
style={{
fontSize: '18px',
backgroundColor: '#FEFDF5',
@ -2202,7 +2137,7 @@ export default function TraficoCliente(props:IProps){
</Row>
<Row style={{padding: "5px 0"}}>
<Col sm={12} md={12} lg={4}>
<Row>
<Row className="align-items-center">
<Col sm={5}>
<Form.Label className="labelSize13px">
Fecha de desaduanamiento
@ -2231,14 +2166,14 @@ export default function TraficoCliente(props:IProps){
</Col>
</Row>
</Col>
<Col sm={12} md={12} lg={8}>
<Row>
<Col sm={2}>
<Col sm={12} md={12} lg={4}>
<Row className="align-items-center justify-content-between">
<Col sm={3}>
<Form.Label className="labelSize13px">
Semaf. fiscal
Semaforo fiscal
</Form.Label>
</Col>
<Col sm={4}>
<Col sm={8}>
<Form.Control
as="select"
className="form-select form-select-sm"
@ -2254,12 +2189,30 @@ export default function TraficoCliente(props:IProps){
<option value="1">Verde</option>
</Form.Control>
</Col>
<Col sm={2}>
</Row>
</Col>
<Col xs={12} md={12} lg={4}>
<Row className="align-items-center">
<Col sm={4}>
<Form.Label className="labelSize13px">
Fecha/hora entrega en planta
</Form.Label>
</Col>
<Col sm={8}>
<DatePicker
selected={FHEntregaPlanta}
disabled={Depto !== 'Corresponsalias'}
onChange={(date: any) => setFHEntregaPlanta(date)}
showTimeSelect
timeClassName={handleColor}
dateFormat="MM/dd/yyyy HH:mm:ss"
placeholderText="No definido"
isClearable
/>
</Col>
</Row>
</Col>
</Row>
<Row style={{padding: "5px 0"}}>
<Col sm={12} md={12} lg={6}>
@ -2786,21 +2739,23 @@ export default function TraficoCliente(props:IProps){
{CatTiposDocumento.map((c) => {
return (
<Col key={c.id} xs={4}>
<Card
style={{ width: '100%', textAlign: 'center', height:'100%' }}
key={c.id}
>
<Card.Body key={c.id}>
<MFileManager
key={c.id}
IDTrafico={IDTrafico}
Proceso={c.proceso}
showPreview={3}
canEdit={Depto === 'Corresponsalias'}
Leyenda={'Seleccione: ' + c.descripcion}
/>
</Card.Body>
</Card>
{c.proceso !== 16 ?
<Card
style={{ width: '100%', textAlign: 'center', height:'100%' }}
key={c.id}
>
<Card.Body key={c.id}>
<MFileManager
key={c.id}
IDTrafico={IDTrafico}
Proceso={c.proceso}
showPreview={3}
canEdit={Depto === 'Corresponsalias'}
Leyenda={'Seleccione: ' + c.descripcion}
/>
</Card.Body>
</Card> : ''
}
</Col>
)
})}
@ -3149,6 +3104,104 @@ export default function TraficoCliente(props:IProps){
</Col>
</Row>
</Tab>
<Tab
eventKey="ComprobantesFacturacion"
title="Comprobantes Facturacion"
//tabClassName={Proceso >= 3 && Depto === 'Facturacion'? '' : 'd-none'}
>
<Card>
<Card.Body>
<Row>
<Col xs={6}>
<Form.Label>PDF Cuenta Mexicana</Form.Label>
</Col>
<Col xs={6}>
<Form.Label>XML Cuenta Mexicana</Form.Label>
</Col>
</Row>
<Row>
<Col xs={6}>
<FileManager
IDUser={UserId}
width={'100%'}
height={100}
IDProcess={37}
IdFile={IDTrafico}
FileName={''}
canDelete={
Depto === 'Facturacion' && Proceso === 3
}
FileType={['pdf']}
Leyenda={`Seleccione el PDF para subirlo al servidor...`}
onAppendFM={function (idFile: number ): void {}}
/>
</Col>
<Col xs={6}>
<FileManager
IDUser={UserId}
width={'100%'}
height={100}
IDProcess={38}
IdFile={IDTrafico}
FileName={''}
canDelete={
Depto === 'Facturacion' && Proceso === 3
}
FileType={['xml']}
Leyenda={`Seleccione el XML para subirlo al servidor...`}
onAppendFM={function (idFile: number): void {}}
/>
</Col>
</Row>
<Row>
<Col xs={6}>
<Form.Label>PDF de Notas de Cargos</Form.Label>
</Col>
<Col xs={6}>
<Form.Label>Archivos Adicionales</Form.Label>
</Col>
</Row>
<Row>
<Col xs={6}>
<FileManager
IDUser={UserId}
width={'100%'}
height={100}
IDProcess={41}
IdFile={IDTrafico}
FileName={''}
canDelete={
Depto === 'Facturacion' && Proceso === 3
}
FileType={['pdf']}
Leyenda={`Seleccione el PDF de las notas de cargos para subirlo al servidor...`}
onAppendFM={function (idFile: number): void {
}}
/>
</Col>
<Col xs={6}>
<FileManager
IDUser={UserId}
width={'100%'}
height={100}
IDProcess={39}
IdFile={IDTrafico}
FileName={''}
canDelete={
Depto === 'Facturacion' && Proceso === 3
}
FileType={['zip']}
Leyenda={`Seleccione el zip con los archivos adicionales para subirlo al servidor...`}
onAppendFM={function (idFile: number): void {
}}
/>
</Col>
</Row>
</Card.Body>
</Card>
</Tab>
</Tabs>
</Card.Body>
</Card>
@ -3212,6 +3265,7 @@ export default function TraficoCliente(props:IProps){
IDTrafico={IDTrafico}
IDTabulador={IDTabulador}
NombreCliente={NombreCliente}
IDCorresponsal={null}
closeTabulador={function (arg: boolean): void {
setShowModal(arg)
}}

@ -105,7 +105,6 @@ export const Anticipos: FC<IProps> = (props) => {
style={{ cursor: 'pointer' }}
/>
</IconContext.Provider>&nbsp;&nbsp;&nbsp;
{ params.data.autoriza === 0 ?
<IconContext.Provider value={{ color: 'red', size: '20px' }}>
<BsTrash
onClick={() => {
@ -116,8 +115,7 @@ export const Anticipos: FC<IProps> = (props) => {
}}
style={{ cursor: 'pointer' }}
/>
</IconContext.Provider> : ""
}
</IconContext.Provider>
</div> :
<div>
<IconContext.Provider value={{ color: 'blue', size: '18px' }}>

@ -87,6 +87,7 @@ export const Contenedores: FC<IProps> = (props) => {
idTrafico: props.IDTrafico,
fSemaforo: '',
semaforo: 0,
idTipoContenedor:0
}
CContDataService.Append(data)
.then((response) => {

@ -37,6 +37,7 @@ export const ControlledInput: FC<IProps> = (props) => {
idTrafico: props.IDTrafico,
fSemaforo: '',
semaforo: 0,
idTipoContenedor:0
}
CContDataService.Append(data)
.then((response) => {

@ -31,6 +31,7 @@ export const SelectContainer: FC<IProps> = (props) => {
const dispatch = useDispatch()
const [toggleSelect, setToggleSelect] = useState(false)
const mCContenedores = useSelector((state: RootState) => state.CCData.CorresponsalesContenedores)
const mCTiposContenedores = useSelector((state: RootState) => state.CTiposContenedores.CatTiposContenedores)
const [Contenedor, setContenedor] = useState('')
const [IDContenedor, setIDContenedor] = useState(0)
const [Placeholder, setPlaceholder] = useState('')
@ -39,6 +40,7 @@ export const SelectContainer: FC<IProps> = (props) => {
const [FSemaforo, setFSemaforo] = useState<Date | null>()
const [Semaforo, setSemaforo] = useState(0)
const [ShowFacturasDialog, setShowFacturasDialog] = useState(false)
const [IdTipoContenedor, setIdTipoContenedor] = useState(0)
useEffect(() => {
setPlaceholder('(' + mCContenedores.filter((item) => item.id > 0).length + ') Contenedores')
@ -63,6 +65,7 @@ export const SelectContainer: FC<IProps> = (props) => {
idTrafico: props.IDTrafico,
fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '',
semaforo: 2,
idTipoContenedor: 0
}
CContDataService.Append(data)
.then((response) => {
@ -93,6 +96,7 @@ export const SelectContainer: FC<IProps> = (props) => {
idTrafico: props.IDTrafico,
fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '',
semaforo: Semaforo,
idTipoContenedor: IdTipoContenedor
}
// console.log(JSON.stringify(data))
CContDataService.Append(data)
@ -212,12 +216,12 @@ export const SelectContainer: FC<IProps> = (props) => {
.map((item, index) => {
return item.id > 0 ? (
<li key={item.id} style={{marginBottom:'3px'}} onClick={() => loadInfo(item)}>
<span>
<span style={{display: props.Editable && toggleSelect ? 'inline-block' : 'none',}}>
<IconContext.Provider value={{ color: 'red', size: '15px' }}>
<BsFillXCircleFill className='pointer' onClick={() => {setDialogTabs(true)}}/>
</IconContext.Provider>
</span>
<span style={{paddingLeft:'3px'}}>
<span style={{display: props.Editable && toggleSelect ? 'inline-block' : 'none', paddingLeft:'3px'}}>
<IconContext.Provider value={{ color: 'green', size: '15px' }}>
<BsLink45Deg className='pointer' onClick={() => setShowFacturasDialog(true)}/>
</IconContext.Provider>
@ -251,6 +255,7 @@ export const SelectContainer: FC<IProps> = (props) => {
onClick={() => {
setFSemaforo(StrtoDate(item.fSemaforo))
setSemaforo(item.semaforo)
setIdTipoContenedor(item.idTipoContenedor)
setDialogAddDate(true)
setToggleSelect(!toggleSelect)
}}
@ -325,6 +330,24 @@ export const SelectContainer: FC<IProps> = (props) => {
<b>¿Esta seguro de agregar fecha al contenedor: {Contenedor}?</b>
</Col>
</Row>
<Row className='justify-content-end'>
<Col xs={5}>
Tipo de Contenedor
</Col>
<Col xs={7}>
<Form.Control
as='select'
onChange={(e) => {setIdTipoContenedor(+e.target.value)}}
value={IdTipoContenedor}
className='form-select form-select-sm'
>
<option value={0}>-SELECCIONE-</option>
{mCTiposContenedores ? mCTiposContenedores.map((t) => {
return <option value={t.id}>{t.descripcion}</option>
}) : null}
</Form.Control>
</Col>
</Row>
<Row style={{ paddingTop: '10px' }}>
<Col xs={4}></Col>
<Col xs={2}>Fecha</Col>

@ -298,7 +298,13 @@ export const CuentasComplementarias: FC<IProps> = (props) => {
MFileManagerDataService.getFileContentById(id, proceso)
.then((response: any) => {
if (response.status === 200) {
if (archivo.toLowerCase().endsWith('.pdf')) {
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', archivo)
document.body.appendChild(link)
link.click()
/* if (archivo.toLowerCase().endsWith('.pdf')) {
console.log(response.data)
const blob = new Blob([response.data], { type: 'application/pdf' })
const url = window.URL.createObjectURL(blob)
@ -308,7 +314,14 @@ export const CuentasComplementarias: FC<IProps> = (props) => {
const blob = new Blob([response.data], { type: 'application/xml' })
const url = window.URL.createObjectURL(blob)
window.open(url)
}
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', archivo)
document.body.appendChild(link)
link.click()
} */
} else {
setHeader('Error')
setMsg('No existe ningun archivo asignado')

@ -22,7 +22,7 @@ import '../../../css/generic01.css'
interface IProps {
IdTrafico: number
Aduana: number
Aduana: string
Patente: number
ClavesPedimento: ICatClavesPedimentos[]
Depto: string
@ -83,7 +83,7 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
}
const Append = () => {
if(Aduana !== 0 &&
if(Aduana !== '' && Aduana !== '0' && Aduana !== ' ' && Aduana !== undefined && Aduana !== null &&
Patente !== 0 &&
Pedimento !== 0 &&
FechaPago !== '' &&
@ -165,7 +165,7 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
<Col xs={1}>
<FormLabel>
Aduana
<FormControl type='text' size='sm' disabled value={Aduana} onChange={(e) => setAduana(+e.target.value)}></FormControl>
<FormControl type='text' size='sm' disabled value={Aduana} onChange={(e) => setAduana(e.target.value)}></FormControl>
</FormLabel>
</Col>
<Col xs={1}>

@ -17,7 +17,7 @@ import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
interface IProps {
IdTrafico: number
Aduana: number
Aduana: string
Patente: number
ClavesPedimento: ICatClavesPedimentos[]
Pedimentos: DTOPedimentosConsolidados[]
@ -51,7 +51,6 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
const [IdPedimentoConsolidadoSelected, setIdPedimentoConsolidadoSelected] = useState("#")
function setDate(fecha: string | undefined): string {
if (!fecha) return ''
else {
@ -68,23 +67,23 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
IdTrafico: props.IdTrafico,
IdUsuario: props.UserId,
IdPedimento: IdPedimentoH,
Aduana: Aduana,
Patente: Patente,
Pedimento: Pedimento,
Clave: ClavePedimento,
FechaPago: FechaPago,
AduanaH: AduanaH,
PatenteH: PatenteH,
PedimentoH: PedimentoH,
ClaveH: ClavePedimentoH,
FechaPagoH: FechaPagoH
Aduana: Aduana,//Aduana de la rectificacion
Patente: Patente,//Patente de la rectificacion
Pedimento: Pedimento,//Pedimento de la rectificacion
Clave: ClavePedimento,//Clave del pedimento de la rectificacion
FechaPago: FechaPago,//Fecha de pago del pedimento de la rectificacion
AduanaH: AduanaH,//Aduana del pedimento original
PatenteH: PatenteH,//Patente del pedimento original
PedimentoH: PedimentoH,//Pedimento original
ClaveH: ClavePedimentoH,//Clave del pedimento original
FechaPagoH: FechaPagoH//Fecha de pago del pedimento original
}
CTrafDataService.AppendRectificacionHistorico(data)
.then((response) => {
setHeader('Informativo')
setMsg('La rectificación se creó correctamente')
setShowMsg(true)
dispatch(
dispatch(//Se actualizan los datos del pedimento seleccionado(original) con los datos de la rectificacion recien capturada
updatePedimento({
id: data.IdPedimento,
idTrafico: data.IdTrafico,
@ -95,7 +94,7 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
fechaPago: data.FechaPago
})
)
dispatch(
dispatch(//Los datos del pedimento original se guardan para mantener un historial de rectificaciones
addRectificacion({
id: response.data.id,
usuario: response.data.usuario,
@ -111,7 +110,7 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
})
)
cleanForm()
props.onAppendRectificacion(data)
props.onAppendRectificacion(data)//Al cerrar se pasan los datos a la vista del trafico para actualizar los campos
return
})
.catch((e: Error) => {
@ -130,6 +129,41 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
const PrepareRectificacion = (idPedimentoConsolidado: number) => {
var dto = props.Pedimentos.filter(x => x.id === idPedimentoConsolidado)[0]
if(!dto.aduana){
setHeader('Error')
setMsg('Asegurese de capturar la aduana del pedimento')
setShowMsg(true)
setIdPedimentoConsolidadoSelected('#')
return
}
if(dto.patente === 0){
setHeader('Error')
setMsg('Asegurese de capturar la patente del pedimento')
setShowMsg(true)
setIdPedimentoConsolidadoSelected('#')
return
}
if(!dto.pedimento){
setHeader('Error')
setMsg('Asegurese de capturar el numero de pedimento')
setShowMsg(true)
setIdPedimentoConsolidadoSelected('#')
return
}
if(!dto.clave){
setHeader('Error')
setMsg('Asegurese de capturar la clave del pedimento')
setShowMsg(true)
setIdPedimentoConsolidadoSelected('#')
return
}
if(!dto.fechaPago){
setHeader('Error')
setMsg('Asegurese de capturar la fecha de pago del pedimento')
setShowMsg(true)
setIdPedimentoConsolidadoSelected('#')
return
}
setIdPedimentoH(dto.id)
setAduanaH(dto.aduana)
setPatenteH(dto.patente)
@ -140,7 +174,7 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
}
const CancelIsRectificacion = () => {
setAduanaH(0)
setAduanaH('0')
setPatenteH(0)
setPedimentoH(0)
setClavePedimentoH('')
@ -250,7 +284,7 @@ export const NuevaRectificacion:React.FC<IProps> = (props) => {
<Col xs={1}>
<FormLabel>
Aduana
<FormControl type='text' size='sm' disabled value={Aduana} onChange={(e) => setAduana(+e.target.value)}></FormControl>
<FormControl type='text' size='sm' disabled value={Aduana} onChange={(e) => setAduana(e.target.value)}></FormControl>
</FormLabel>
</Col>
<Col xs={1}>

@ -2,22 +2,33 @@ import { Button, Col, Form, FormLabel, Row } from "react-bootstrap";
import { CiWarning } from "react-icons/ci";
import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
import '../../../css/generic01.css'
import { ICorresponsalTraficoSolicitudReapertura } from "../../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitudReapertura";
import { DTOTraficoSolicitudReapertura } from "../../../DTO/Corresponsales/DTOTraficoSolicitudReapertura";
import { ICorresponsalTraficoSolicitud } from "../../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitud";
import { DTOTraficoSolicitud } from "../../../DTO/Corresponsales/DTOTraficoSolicitud";
import CTrafDataService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Services"
import { useState } from "react";
import CorresponsalesTraficoSolicitudService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Solicitud.Service";
interface IProps {
solicitud: DTOTraficoSolicitudReapertura;
solicitud: DTOTraficoSolicitud;
userId: number;
close: (estado: number) => void
title: string;
mensaje: string;
}
export const AutorizarReapertura:React.FC<IProps> = (props) => {
export const AutorizarSolicitud:React.FC<IProps> = (props) => {
const [Motivo, setMotivo] = useState('')
const [showMsg, setShowMsg] = useState(false)
const [msg, setMsg] = useState('')
const [header, setHeader] = useState('')
const [SelectedOption, setSelectedOption] = useState(2)
const [Depto, setDepto] = useState(() => {
const stickyValue = window.localStorage.getItem('Departamento')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
const AppendSolicitud = () =>{
if(SelectedOption === 0 && !Motivo){
@ -32,7 +43,7 @@ export const AutorizarReapertura:React.FC<IProps> = (props) => {
setShowMsg(true)
return;
}
var solicitud: ICorresponsalTraficoSolicitudReapertura = {
var solicitud: ICorresponsalTraficoSolicitud = {
id: props.solicitud.id,
idTrafico: props.solicitud.idTrafico,
idUsuarioSolicita: props.solicitud.idUsuarioSolicita,
@ -43,7 +54,31 @@ export const AutorizarReapertura:React.FC<IProps> = (props) => {
motivoRechazo: Motivo,
estado: SelectedOption
}
CTrafDataService.AppendSolicitudReapertura(solicitud)
if(Depto === 'Facturacion'){
AppendSolicitudReapertura(solicitud)
}
if(Depto === 'Corresponsalias'){
AppendSolicitudEliminarReferencia(solicitud)
}
}
const AppendSolicitudReapertura = (solicitud: ICorresponsalTraficoSolicitud) => {
CorresponsalesTraficoSolicitudService.AppendSolicitudReapertura(solicitud)
.then((resp) => {
if(resp.data.id > 0){
props.close(SelectedOption)
}
})
.catch(() => {
setHeader('Error');
setMsg('Ocurrió un error. Favor de intentar nuevamente')
setShowMsg(true)
return;
})
}
const AppendSolicitudEliminarReferencia = (solicitud: ICorresponsalTraficoSolicitud) => {
CorresponsalesTraficoSolicitudService.AppendSolicitudEliminarReferencia(solicitud)
.then((resp) => {
if(resp.data.id > 0){
props.close(SelectedOption)
@ -59,7 +94,7 @@ export const AutorizarReapertura:React.FC<IProps> = (props) => {
return(
<>
<h3>Solicitud de Reapertura de Cuenta</h3>
<h3>{props.title}</h3>
<hr/>
<Row>
<CiWarning style={{fontSize:'150px', color:'#ff3100'}} />
@ -67,7 +102,7 @@ export const AutorizarReapertura:React.FC<IProps> = (props) => {
<Row>
<Col xs={12}>
<p style={{textAlign:'center'}}>
{props.solicitud.usuarioSolicita} solicita la reapertura de esta cuenta por el motivo:
{props.solicitud.usuarioSolicita} {props.mensaje}
</p>
<p style={{textAlign:'center'}}>{props.solicitud.motivoSolicita}</p>
</Col>

@ -2,48 +2,76 @@ import React, { useState } from "react"
import { Button, Col, Form, FormLabel, Row } from "react-bootstrap"
import CTrafDataService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Services"
import { MsgInformativo } from "../../Utils/Toast/msgInformativo"
import { ICorresponsalTraficoSolicitudReapertura } from "../../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitudReapertura"
import { ICorresponsalTraficoSolicitud } from "../../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitud"
import CorresponsalesTraficoSolicitudService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Solicitud.Service"
interface IProps{
idTrafico: number,
idUsuario: number,
close: () => void
close: () => void,
title: string,
}
export const SolicitudReapertura:React.FC<IProps> = (props) => {
export const CrearSolicitud:React.FC<IProps> = (props) => {
const [Motivo, setMotivo] = useState('')
const [showMsg, setShowMsg] = useState(false)
const [msg, setMsg] = useState('')
const [header, setHeader] = useState('')
const [Depto, setDepto] = useState(() => {
const stickyValue = window.localStorage.getItem('Departamento')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
const SolicitarReapertura = (motivo: string) => {
if(!motivo){
const AppendSolicitud = () => {
if(!Motivo){
setHeader('Error');
setMsg('Favor de capturar una razon válida.')
setShowMsg(true)
return;
}
if(motivo.length < 30){
if(Motivo.length < 30){
setHeader('Error');
setMsg('La razón de su solicitud debe contener al menos 30 caracteres')
setShowMsg(true)
return;
}
var solicitud: ICorresponsalTraficoSolicitudReapertura = {
var solicitud: ICorresponsalTraficoSolicitud = {
id: 0,
idTrafico: props.idTrafico,
idUsuarioSolicita: props.idUsuario,
fechaSolicita: undefined,
motivoSolicita: Motivo,
idUsuarioAutoriza: Perfil === 'Sup. Facturacion' ? props.idUsuario : 0,
idUsuarioAutoriza: Perfil.includes('Sup') ? props.idUsuario : 0, //Si es un supervisor se asigna su id al usuario que autoriza ya que la solicitud no requiere ser autorizada por otro usuario
fechaAutoriza: undefined,
motivoRechazo: "",
estado: Perfil === 'Sup. Facturacion' ? 2 : 1
estado: Perfil.includes('Sup') ? 2 : 1 //Si es un supervisor se asigna el estado de la solicitud como autorizada desde que se crea
}
if(Depto === 'Facturacion'){
AppendSolicitudReapertura(solicitud)
}
CTrafDataService.AppendSolicitudReapertura(solicitud)
if(Depto === 'Corresponsalias'){
AppendSolicitudEliminarReferencia(solicitud)
}
}
const AppendSolicitudReapertura = (solicitud: ICorresponsalTraficoSolicitud) => {
CorresponsalesTraficoSolicitudService.AppendSolicitudReapertura(solicitud)
.then((resp) => {
props.close()
})
.catch(() => {
setHeader('Error');
setMsg('Ocurrió un error. Favor de intentar nuevamente')
setShowMsg(true)
return;
})
}
const AppendSolicitudEliminarReferencia = (solicitud: ICorresponsalTraficoSolicitud) => {
CorresponsalesTraficoSolicitudService.AppendSolicitudEliminarReferencia(solicitud)
.then((resp) => {
props.close()
})
@ -56,7 +84,7 @@ export const SolicitudReapertura:React.FC<IProps> = (props) => {
}
return(
<>
<h3>Solicitud de Reapertura de Cuenta</h3>
<h3>{props.title}</h3>
<hr/>
<Row>
<Col xs={12}>
@ -72,7 +100,7 @@ export const SolicitudReapertura:React.FC<IProps> = (props) => {
</Row>
<Row className='justify-content-end'>
<Col xs={2} style={{textAlign:'end'}}>
<Button variant='primary' onClick={() => SolicitarReapertura(Motivo)}>
<Button variant='primary' onClick={() => AppendSolicitud()}>
Guardar
</Button>
</Col>

@ -15,6 +15,7 @@ interface IProps {
IDCliente: number
IDTabulador: number
IDTrafico: number
IDCorresponsal: number | null
NombreCliente: string
closeTabulador: (arg: boolean) => void
cambiaPrecuenta: (IDPrecuenta: number) => void
@ -41,20 +42,14 @@ export const Tabulador: FC<IProps> = (props) => {
const [msg, setMsg] = useState('')
const columnsConcepts = [
{
name: 'id',
width: '10%',
selector: (row: ITabuladorConceptos) => row.id,
sortable: true,
},
{
name: 'Concepto',
width: '65%',
width: '60%',
selector: (row: ITabuladorConceptos) => row.concepto,
sortable: true,
},
{
name: 'Costo',
name: 'Costo Cte',
width: '15%',
cell: (row: ITabuladorConceptos) => {
return <ControlledInput id={row.id} value={row.costo.toFixed(2)} disabled={true} postCost={(id, value) => {}} />
@ -65,6 +60,18 @@ export const Tabulador: FC<IProps> = (props) => {
)*/
},
},
{
name: 'Costo Corresp',
width: '15%',
cell: (row: ITabuladorConceptos) => {
return <ControlledInput id={row.id} value={row.costoCorresponsal.toFixed(2)} disabled={true} postCost={(id, value) => {}} />
/*return row.activo === 1 ? (
<ControlledInput id={row.id} value={row.costo} disabled={true} postCost={(id, value) => {}} />
) : (
<ControlledInput id={row.id} value={0} disabled={true} postCost={(id, value) => {}} />
)*/
},
},
{
name: 'Activo',
width: '10%',
@ -134,7 +141,7 @@ export const Tabulador: FC<IProps> = (props) => {
// const postCost = (id: number, Cost: number) => {}
const GetAllTabs = () => {
CTabDataService.GetByCustomer(props.IDCliente)
CTabDataService.GetByCustomer(props.IDCliente, props.IDCorresponsal)
.then((response) => {
setTabuladores(response.data)
})

@ -125,13 +125,16 @@ import { BiDownload } from 'react-icons/bi'
import CorresponsalesFacturasServices from '../../Services/Corresponsalias/Corresponsales.Facturas.Services'
import { PedimentosConsolidados } from './PedimentosConsolidados/PedimentosConsolidados'
import PedimentosConsolidadosService from '../../Services/Corresponsalias/Corresponsales.Trafico.Pedimento.Consolidados.Service'
import { populatePedimentos } from '../../store/features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice'
import { populatePedimentos, updatePedimento } from '../../store/features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice'
import { populateRectificaciones } from '../../store/features/Corresponsales/CorresponsalesPedimentosRectificacionesSlice'
import { NuevaRectificacion } from './Rectificaciones/NuevaRectificacion'
import DTORectificacionHistorico from '../../DTO/Corresponsales/DTORectificacionHistorico'
import { SolicitudReapertura } from './SolicitudReapertura/SolicitudReapertura'
import { AutorizarReapertura } from './SolicitudReapertura/AutorizarReapertura'
import { DTOTraficoSolicitudReapertura } from '../../DTO/Corresponsales/DTOTraficoSolicitudReapertura'
import { CrearSolicitud } from './SolicitudReapertura/CrearSolicitud'
import { AutorizarSolicitud } from './SolicitudReapertura/AutorizarSolicitud'
import { DTOTraficoSolicitud } from '../../DTO/Corresponsales/DTOTraficoSolicitud'
import CorresponsalesTraficoSolicitudService from '../../Services/Corresponsalias/Corresponsales.Trafico.Solicitud.Service'
import TiposContenedoresService from '../../Services/Catalogos/TiposContenedores.Service'
import { populateCatTiposContenedores } from '../../store/features/CatTiposContenedores/CatTiposContenedoresSlice'
interface IProps {
IDTrafico: number
@ -221,7 +224,7 @@ export default function TraficoCorresponsales (props:IProps) {
const [Kilos, setKilos] = useState<number | undefined>(0)
const [Estatus, setEstatus] = useState<number>(0)
const [Trafico, setTrafico] = useState<string | undefined>('')
const [Aduana, setAduana] = useState<number | undefined>(0)
const [Aduana, setAduana] = useState<string | undefined>('0')
const [Patente, setPatente] = useState<number | undefined>(0)
const [Pedimento, setPedimento] = useState<number | undefined>(0)
const [ClavePedimento, setClavePedimento] = useState<string>('')
@ -348,15 +351,13 @@ export default function TraficoCorresponsales (props:IProps) {
const [EncabezadoPedimento1, setEncabezadoPedimento1] = useState("Pedimentos");
const [CentroCostos, setCentroCostos] = useState<string>('');
const [ClaveClienteFacturacion, setClaveClienteFacturacion] = useState(0);
const [NombreClienteFacturacion, setNombreClienteFacturacion] = useState('')
const [RfcClienteFacturacion, setRfcClienteFacturacion] = useState('')
const [ClavesPedimentos, setClavesPedimentos] = useState<ICatClavesPedimentos[]>([])
const [FechaRegistro, setFechaRegistro] = useState(currentDate());
const msgColor = 'primary'
const [IsDisabled, setIsDisabled] = useState(false);
const hiddenFileInputRef = useRef<HTMLInputElement>(null);
const btnCuenta = useRef<HTMLButtonElement>(null);
const [solicitudReapertura, setSolicitudReapertura] = useState<DTOTraficoSolicitudReapertura>({
const [solicitud, setSolicitud] = useState<DTOTraficoSolicitud>({
id: 0,
idTrafico: 0,
idUsuarioSolicita: 0,
@ -365,6 +366,7 @@ export default function TraficoCorresponsales (props:IProps) {
fechaSolicita: '',
estado: 0
})
const [PedimentoObligatorio, setPedimentoObligatorio] = useState(1)
var txtContenedores: ICorresponsalContenedores[] = [];
var txtFacturas: ICorresponsalFacturas[] = [];
const itemsTrafico = [
@ -461,9 +463,19 @@ export default function TraficoCorresponsales (props:IProps) {
data.causaRectificacion = CausaRectificacion
data.totalHonorariosAA = TotalHonorariosAA
data.totalGastosTerceros = TotalGastosTerceros
data.pedimentoObligatorio = PedimentoObligatorio
CTrafDataService.Append(data)
.then((response) => {
if (response.data.estatusCode === 0) {
dispatch(updatePedimento({
id: 0,
idTrafico: IDTrafico,
aduana: Aduana!,
patente: Patente!,
pedimento: Pedimento!,
clave: ClavePedimento,
fechaPago: FechaPago!
}))
if (mCFacturas.length >= 2) {
const Detail: ICorresponsalPedimento = {
id: IDDetail ? IDDetail : 0,
@ -581,106 +593,52 @@ export default function TraficoCorresponsales (props:IProps) {
return today.getFullYear().toString()
}
const LoadEverything = () => {
let clientes: IClientes[] = [];
//Primero se valida si el tráfico tiene solicitud de reapertura de cuenta
CTrafDataService.GetSolicitudReapertura(props.IDTrafico)
.then(resp => {
if(resp.data.id > 0){
setSolicitudReapertura(solicitud => ({
...solicitud,
...resp.data
}))
if(Perfil === 'Sup. Facturacion'){//Validar si el usuario puede autorizar la petición
showModalBox(16, 'modal-30w', true)//Si puede se muestra el modal para autorizar la petición
const GetSolicitudes = async () => {
if(Perfil === 'Sup. Corresponsalias'){
await CorresponsalesTraficoSolicitudService.GetSolicitudEliminarReferencia(props.IDTrafico)
.then(resp => {
if(resp.data.id > 0){
setSolicitud(solicitud => ({
...solicitud,
...resp.data
}))
showModalBox(17, 'modal-30w', true)
}
//Se cambia el texto del botón con el que se hace la solicitud
btnCuenta.current!.innerText = 'Pediente de Autorizar';
btnCuenta.current!.disabled = true;
}
})
ClavesPedimentosService.getAllClavesPedimentos()
.then(response => setClavesPedimentos(response.data))
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CorresponsalesDataService.getAll()
.then((response) => {
dispatch(populateCatCorresponsales(response.data))
})
.catch((e: Error) => {
}).catch((e) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CTrafDataService.GetCorresponsalesTraficoEstatus()
.then((response) => {
setDataCatEstatus(response.data)
})
.catch((e: Error) => {
}
if(Depto === 'Facturacion'){
await CorresponsalesTraficoSolicitudService.GetSolicitudReapertura(props.IDTrafico)
.then(resp => {
if(resp.data.id > 0){
setSolicitud(solicitud => ({
...solicitud,
...resp.data
}))
btnCuenta.current!.innerText = 'Pediente de Autorizar';
btnCuenta.current!.disabled = true;
if(Perfil === 'Sup. Facturacion'){//Si el usuario es supervisor
showModalBox(16, 'modal-30w', true)//Se muestra el modal para autorizar la petición
}
}
}).catch((e) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
TiposMercanciaService.GetAll()
.then((response) => {
setTiposMercancia(response.data);
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
});
CFacDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesFacturas(IDTrafico))
response.data.forEach((element) => {
dispatch(addCorresponsalesFacturas(element))
})
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CFac3erDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesFacturasTerceros(IDTrafico))
response.data.forEach((element) => {
dispatch(addCorresponsalesFacturasTerceros(element))
})
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CContDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesContenedores(IDTrafico))
response.data.forEach((element) => {
dispatch(addCorresponsalesContenedores(element))
})
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
ClientesDataService.getAllClientes(0)
}
}
const LoadEverything = async () => {
//Cargar Clientes
await ClientesDataService.getAllClientes(0)
.then((response) => {
clientes = response.data;
setClientes(response.data)
})
.catch((e: Error) => {
@ -689,107 +647,10 @@ export default function TraficoCorresponsales (props:IProps) {
setShowMsg(true)
return
})
CAntDataService.getAll(IDTrafico)
.then((response) => {
dispatch(populateCorresponsalesAnticipos(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CGuiasDataService.getAll(IDTrafico)
.then((response) => {
dispatch(populateCorresponsalesGuias(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
ProvDataService.getAll(0)
.then((response) => {
dispatch(populateCatProveedores(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CCatTiposDocumentos.getAll(2206, 1)
.then((response) => {
setCatTiposDocumentos(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CCatTiposDocumentos.getAll(2206, 2)
.then((response) => {
setCatTiposDocumentosInfoCorresponsal(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CCueCompService.GetAllEstatus()
.then((response) => {
dispatch(
populateCorresponsalesCuentasComplementariasEstatus(response.data)
)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CTrafDataService.GetAll(IDTrafico)
//Cargar Corresponsales
await CorresponsalesDataService.getAll()
.then((response) => {
setFolioTrafico(response.data.folioGemco)
setProceso(response.data.proceso)
setIDCliente(response.data.idCliente)
getCentroCostos(response.data.idCliente, clientes);
setIDTabulador(response.data.idTabulador)
setTipoOperacion(response.data.tipoOperacion)
setOpEntrada(response.data.opEntrada)
setOpSalida(response.data.opSalida)
setIDCorresponsal(response.data.idCorresponsal)
setBultos(response.data.bultos)
setKilos(response.data.kilos)
setEstatus(response.data.estatus ? response.data.estatus : 0)
setTrafico(response.data.trafico)
setPedimento(response.data.pedimento)
setClavePedimento(response.data.clave ? response.data.clave : '')
setFechaPago(setDate(response.data.fechaPago))
setTipoCambio(response.data.tipoCambio)
setValorAduanaMN(response.data.valorAduanaMN)
setTotalPagado(response.data.totalPagado)
setValorFacturaMN(response.data.valorFacturaMN)
setCantidadFracciones(response.data.cantidadFracciones)
setBuque(response.data.buque)
setValorFacturasDls(response.data.valorFacturaDls)
setDescripcionMercancia(response.data.descripcionMercancia)
setObservaciones(
response.data.observaciones ? response.data.observaciones : ''
)
setFechaDesaduanamiento(StrtoDate(response.data.fechaDesaduanamiento))
setSemaforoFiscal(response.data.semaforoFiscal)
setNoCuenta(response.data.noCuenta)
setFechaCuenta(setDate(response.data.fechaCuenta))
setIDTipoMercancia(response.data.idTipoMercancia);
setCargoPara(response.data.cargoA)
setCausaRectificacion(response.data.causaRectificacion)
setTotalHonorariosAA(response.data.totalHonorariosAA)
setTotalGastosTerceros(response.data.totalGastosTerceros)
setFechaRegistro(setDate(response.data.fechaRegistro))
dispatch(populateCatCorresponsales(response.data))
})
.catch((e: Error) => {
setHeader('Error')
@ -797,33 +658,222 @@ export default function TraficoCorresponsales (props:IProps) {
setShowMsg(true)
return
})
CContaDataService.Get(IDTrafico, 2, 1)
.then((response) => {
setRechazosTrafico(response.data)
})
if(IDTrafico > 0){
await GetSolicitudes();
await ClavesPedimentosService.getAllClavesPedimentos()
.then(response => setClavesPedimentos(response.data))
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CContaDataService.GetHistorial(IDTrafico)
await CTrafDataService.GetCorresponsalesTraficoEstatus()
.then((response) => {
setDataCatEstatus(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await TiposMercanciaService.GetAll()
.then((response) => {
setRechazosContabilidad(response.data)
setTiposMercancia(response.data);
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
PedimentosConsolidadosService.GetAll(IDTrafico)
.then((resp) => {
dispatch(populatePedimentos(resp.data))
})
.catch(() => {})
});
await CFacDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesFacturas(IDTrafico))
response.data.forEach((element) => {
dispatch(addCorresponsalesFacturas(element))
})
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CFac3erDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesFacturasTerceros(IDTrafico))
response.data.forEach((element) => {
dispatch(addCorresponsalesFacturasTerceros(element))
})
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CContDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesContenedores(IDTrafico))
response.data.forEach((element) => {
dispatch(addCorresponsalesContenedores(element))
})
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await TiposContenedoresService.getAll()
.then((response) => {
dispatch(populateCatTiposContenedores(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CAntDataService.getAll(IDTrafico)
.then((response) => {
dispatch(populateCorresponsalesAnticipos(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CGuiasDataService.getAll(IDTrafico)
.then((response) => {
dispatch(populateCorresponsalesGuias(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await ProvDataService.getAll(0)
.then((response) => {
dispatch(populateCatProveedores(response.data))
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CCatTiposDocumentos.getAll(2206, 1)
.then((response) => {
setCatTiposDocumentos(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CCatTiposDocumentos.getAll(2206, 2)
.then((response) => {
setCatTiposDocumentosInfoCorresponsal(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CCueCompService.GetAllEstatus()
.then((response) => {
dispatch(
populateCorresponsalesCuentasComplementariasEstatus(response.data)
)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CTrafDataService.GetAll(IDTrafico)
.then((response) => {
setFolioTrafico(response.data.folioGemco)
setProceso(response.data.proceso)
setIDCliente(response.data.idCliente)
//getCentroCostos(response.data.idCliente, clientes);
setIDTabulador(response.data.idTabulador)
setTipoOperacion(response.data.tipoOperacion)
setOpEntrada(response.data.opEntrada)
setOpSalida(response.data.opSalida)
setIDCorresponsal(response.data.idCorresponsal)
setBultos(response.data.bultos)
setKilos(response.data.kilos)
setEstatus(response.data.estatus ? response.data.estatus : 0)
setTrafico(response.data.trafico)
setPedimento(response.data.pedimento)
setClavePedimento(response.data.clave ? response.data.clave : '')
setFechaPago(setDate(response.data.fechaPago))
setTipoCambio(response.data.tipoCambio)
setValorAduanaMN(response.data.valorAduanaMN)
setTotalPagado(response.data.totalPagado)
setValorFacturaMN(response.data.valorFacturaMN)
setCantidadFracciones(response.data.cantidadFracciones)
setBuque(response.data.buque)
setValorFacturasDls(response.data.valorFacturaDls)
setDescripcionMercancia(response.data.descripcionMercancia)
setObservaciones(
response.data.observaciones ? response.data.observaciones : ''
)
setFechaDesaduanamiento(StrtoDate(response.data.fechaDesaduanamiento))
setSemaforoFiscal(response.data.semaforoFiscal)
setNoCuenta(response.data.noCuenta)
setFechaCuenta(setDate(response.data.fechaCuenta))
setIDTipoMercancia(response.data.idTipoMercancia);
setCargoPara(response.data.cargoA)
setCausaRectificacion(response.data.causaRectificacion)
setTotalHonorariosAA(response.data.totalHonorariosAA)
setTotalGastosTerceros(response.data.totalGastosTerceros)
setFechaRegistro(setDate(response.data.fechaRegistro))
setPedimentoObligatorio(response.data.pedimentoObligatorio)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CContaDataService.Get(IDTrafico, 2, 1)
.then((response) => {
setRechazosTrafico(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await CContaDataService.GetHistorial(IDTrafico)
.then((response) => {
setRechazosContabilidad(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
await PedimentosConsolidadosService.GetAll(IDTrafico)
.then((resp) => {
dispatch(populatePedimentos(resp.data))
})
.catch(() => {})
loadRectificacionHistorico()
DoesThe2ZipFileExists()
DoesThe2ZipFileExists()
}
}
const loadRectificacionHistorico = () => {
@ -959,32 +1009,52 @@ export default function TraficoCorresponsales (props:IProps) {
}, [IDTrafico])
useEffect(() => {
if (
IDCorresponsal !== 0 &&
Aduana !== 0 &&
Patente !== 0 &&
Pedimento !== 0 &&
FechaPago !== '' &&
FechaDesaduanamiento !== null &&
NoCuenta !== null &&
TieneArchivoZIPGEMCO &&
TieneArchivoZIPCorresponsal &&
DescripcionMercancia !== '' && DescripcionMercancia !== undefined && DescripcionMercancia !== null && DescripcionMercancia !== " " &&
CentroCostos !== '' && IDTipoMercancia
) {
let tmp = Pedimento?.toString()
if (tmp?.length === 7) {
if(PedimentoObligatorio){
if (
IDCorresponsal !== 0 &&
Aduana !== '' && Aduana !== '0' && Aduana !== ' ' && Aduana !== undefined && Aduana !== null &&
Patente !== 0 &&
Pedimento !== 0 &&
FechaPago !== '' &&
FechaDesaduanamiento !== null &&
NoCuenta !== null &&
TieneArchivoZIPGEMCO &&
TieneArchivoZIPCorresponsal &&
DescripcionMercancia !== '' && DescripcionMercancia !== undefined && DescripcionMercancia !== null && DescripcionMercancia !== " " &&
CentroCostos !== '' && IDTipoMercancia
) {
let tmp = Pedimento?.toString()
if (tmp?.length === 7) {
setStatusTrafico(2)
setTerminaProceso(0)
setStatusColor('readyColor')
setReady4NextProcess(true)
} else {
setStatusColor('pendingColor')
setReady4NextProcess(false)
}
} else {
setStatusColor('pendingColor')
setReady4NextProcess(false)
}
}else{
if (
IDCorresponsal !== 0 &&
Aduana !== '' && Aduana !== '0' && Aduana !== ' ' && Aduana !== undefined && Aduana !== null &&
Patente !== 0 &&
NoCuenta !== null &&
TieneArchivoZIPCorresponsal &&
DescripcionMercancia !== '' && DescripcionMercancia !== undefined && DescripcionMercancia !== null && DescripcionMercancia !== " " &&
CentroCostos !== ''
){
setStatusTrafico(2)
setTerminaProceso(0)
setStatusColor('readyColor')
setReady4NextProcess(true)
} else {
}else{
setStatusColor('pendingColor')
setReady4NextProcess(false)
}
} else {
setStatusColor('pendingColor')
setReady4NextProcess(false)
}
}, [
IDCorresponsal,
@ -998,7 +1068,8 @@ export default function TraficoCorresponsales (props:IProps) {
TieneArchivoZIPCorresponsal,
DescripcionMercancia,
CentroCostos,
IDTipoMercancia
IDTipoMercancia,
PedimentoObligatorio
])
useEffect(() => {
@ -1041,7 +1112,7 @@ export default function TraficoCorresponsales (props:IProps) {
useEffect(() => {
if (IDCliente > 0) {
CTabDataService.GetByCustomer(IDCliente)
CTabDataService.GetByCustomer(IDCliente, IDCorresponsal)
.then((response) => {
setTabuladores(response.data)
})
@ -1051,6 +1122,19 @@ export default function TraficoCorresponsales (props:IProps) {
setShowMsg(true)
return
})
CentrosCostosService.get(IDCliente)
.then(response => {
setCentroCostos(response.data.centroCostos)
setClaveClienteFacturacion(response.data.clienteFacturacion);
return
})
.catch((e: Error) => {
setCentroCostos(''); setClaveClienteFacturacion(0);
setHeader('Error')
setMsg('Centro de costos no asignado. Solicitar a servicios administrativos la asignacion del centro de costos del cliente.')
setShowMsg(true)
return
});
}
if (Clientes) {
let tmpArray: ItemList[] = []
@ -1181,7 +1265,7 @@ export default function TraficoCorresponsales (props:IProps) {
}
function openSOIA() {
let id: number = Aduana ? Aduana : 0
let id: number = Aduana ? +Aduana : 0
window.open(
`https://aplicacionesc.mat.sat.gob.mx/SOIA_CR_WEB/oia_consultarapd_cep.aspx?&pa=${Patente}&dn=${Pedimento}&s=0&ap=${getCurrentYear()}&pad=${Aduana}&ad=${getAduana(
id
@ -1193,7 +1277,7 @@ export default function TraficoCorresponsales (props:IProps) {
let data: DTOTraficoCompleto = {
id: IDTrafico,
idUsuario: UserId,
estatus: TerminaProceso,
pedimentoObligatorio: PedimentoObligatorio,
comentarios: 'Todo Correcto'
}
updateProceso(data)
@ -1375,7 +1459,7 @@ export default function TraficoCorresponsales (props:IProps) {
let data: DTOTraficoCompleto = {
id: IDTrafico,
idUsuario: UserId,
estatus: 3,
pedimentoObligatorio: PedimentoObligatorio,
comentarios: comentarios
}
updateProceso(data)
@ -1402,33 +1486,6 @@ export default function TraficoCorresponsales (props:IProps) {
return pedidos;
}
const getCentroCostos = (idCliente: number, clientes: IClientes[]) => {
//if(Perfil === "Corresponsales"){
if(idCliente > 0){
CentrosCostosService.get(idCliente)
.then(response => {
setCentroCostos(response.data.centroCostos)
setClaveClienteFacturacion(response.data.clienteFacturacion);
if(response.data.clienteFacturacion !== 0 && response.data.clienteFacturacion !== idCliente){
let cliente = clientes!.filter(x => x.sClave === response.data.clienteFacturacion)[0];
let nombreCliente = cliente.sRazonSocial.split('|')[0].trim()
setNombreClienteFacturacion(nombreCliente);
setRfcClienteFacturacion(cliente.sRFC);
}
return
})
.catch((e: Error) => {
setCentroCostos(''); setClaveClienteFacturacion(0); setNombreClienteFacturacion(''); setRfcClienteFacturacion('');
setHeader('Error')
setMsg('Centro de costos no asignado. Solicitar a servicios administrativos la asignacion del centro de costos del cliente.')
setShowMsg(true)
return
});
}
//}
}
const cerrarTrafico = () => {
if(TotalHonorariosAA == 0){
setHeader('Error')
@ -1440,7 +1497,7 @@ export default function TraficoCorresponsales (props:IProps) {
saveForm();
FileManagerServices.GetClientesZip(IDTrafico)
.then(response => {
updateProceso({id: IDTrafico, idUsuario:UserId, estatus: 4, comentarios:'Todo Correcto'})
updateProceso({id: IDTrafico, idUsuario:UserId, pedimentoObligatorio: PedimentoObligatorio, comentarios:'Todo Correcto'})
/* CTrafDataService.ValidateComplete({id: IDTrafico, idUsuario:UserId, estatus: 4, comentarios:'Todo Correcto'})
.then(resp => {
setProceso(4);
@ -1493,6 +1550,13 @@ export default function TraficoCorresponsales (props:IProps) {
})
}
const PrepararOT = () => {
setPedimentoObligatorio(PedimentoObligatorio === 0 ? 1 : 0)
setPedimento(0)
setClavePedimento('')
setFechaPago('')
}
return (
<div style={{height:'100%', overflowY:'scroll'}}>
<Card className="labelSize13px" style={{borderStyle:'none', height:'100%'}}>
@ -1598,7 +1662,6 @@ export default function TraficoCorresponsales (props:IProps) {
disabled={(Depto !== 'Corresponsalias' && Depto !== 'Sistemas')}
onChange={(e) => {
setIDCliente(parseInt(e.target.value))
getCentroCostos(+e.target.value, Clientes!);
}}
value={IDCliente}
className="form-select form-select-sm"
@ -1671,7 +1734,7 @@ export default function TraficoCorresponsales (props:IProps) {
<Col sm={6} md={6} lg={8}>
<Form.Label style={{ width:'100%' }}>
<IconContext.Provider value={{ color: 'blue', size: '15px' }}>
<span onClick={() => {showModalBox(10, 'modal-50w', false)}}
<span onClick={() => {showModalBox(10, 'modal-70w', false)}}
style={{ cursor: 'pointer' }}>
<FcTimeline />&nbsp;Precuenta
</span>
@ -1992,6 +2055,18 @@ export default function TraficoCorresponsales (props:IProps) {
<Col sm={12} md={12} lg={6}>
<fieldset className='border p-2'>
<legend className='w-auto' style={{float:'none', fontSize:'1rem'}}>{EncabezadoPedimento1}</legend>
<Row className="justify-content-end">
<Col xs={4}>
<Form.Check
type='checkbox'
id='check-isOT'
label='¿Referencia sin pedimento?'
checked={!PedimentoObligatorio}
onChange={() => PrepararOT()}
disabled={Depto !== 'Corresponsalias'}
/>
</Col>
</Row>
<Row className='justify-content-between' style={{alignItems:'center'}}>
<Col sm={5} md={5} lg={5}>
<Button variant="success"
@ -2062,6 +2137,9 @@ export default function TraficoCorresponsales (props:IProps) {
mask="_"
onValueChange={(values: any) => {
const { value } = values
if(value.length === 0 || value === 0){
setPedimento(0)
}
if(value.length === 7 ){
CTrafDataService.ValidaTraficoDuplicado(Aduana, Patente, value, IDTrafico).then( response => {
if(response.data !== ""){
@ -4260,11 +4338,12 @@ export default function TraficoCorresponsales (props:IProps) {
</div>
) : null}
{LoadComponent === 10 ? (
<div style={{ height: '350px', overflow: 'scroll' }}>
<div style={{ height: '500px', overflow: 'scroll' }}>
<Tabulador
IDCliente={IDCliente}
IDTrafico={IDTrafico}
IDTabulador={IDTabulador}
IDCorresponsal={IDCorresponsal}
NombreCliente={NombreCliente}
closeTabulador={function (arg: boolean): void {
setShowModal(arg)
@ -4312,40 +4391,48 @@ export default function TraficoCorresponsales (props:IProps) {
onAppendRectificacion={function (data: DTORectificacionHistorico): void {
setPedimento(data.Pedimento)
setClavePedimento(data.Clave)
setFechaPago(setDate(data.FechaPago))
setAduanaH(data.AduanaH.toString())
setFechaPago(data.FechaPago)
loadRectificacionHistorico()
/*setAduanaH(data.AduanaH.toString())
setPatenteH(data.PatenteH.toString())
setPedimentoH(data.PedimentoH.toString())
setClavePedimentoH(data.ClaveH)
setFechaPagoH(data.FechaPagoH)
setFechaPagoH(data.FechaPagoH)*/
} }
/>
</div>
) : null}
{LoadComponent===15 ? (
<div style={{ height: '250px', overflowX: 'hidden' }}>
<SolicitudReapertura idTrafico={IDTrafico} idUsuario={UserId} close={()=>{
setShowModal(false)
if(Perfil === 'Sup. Facturacion'){
setHeader('Informativo');
setMsg('Cuenta habilitada correctamente.')
setShowMsg(true)
setProceso(3)
return;
}
else{
btnCuenta.current!.disabled = true;
setHeader('Informativo');
setMsg('Solicitud creada correctamente.')
setShowMsg(true)
return;
<CrearSolicitud
idTrafico={IDTrafico}
idUsuario={UserId}
title='Solicitud de Reapertura de Cuenta'
close={()=>{
setShowModal(false)
if(Perfil === 'Sup. Facturacion'){
setHeader('Informativo');
setMsg('Cuenta habilitada correctamente.')
setShowMsg(true)
setProceso(3)
return;
}
else{
btnCuenta.current!.disabled = true;
setHeader('Informativo');
setMsg('Solicitud creada correctamente.')
setShowMsg(true)
return;
}
}
}}/>
}/>
</div>
) : null}
{LoadComponent===16 ? (
<div style={{ height: '475px', overflowX: 'hidden' }}>
<AutorizarReapertura solicitud={solicitudReapertura} userId={UserId}
<AutorizarSolicitud solicitud={solicitud} userId={UserId}
title={'Solicitud de Reapertura de Cuenta'}
mensaje={'solicita la reapertura de esta cuenta por el motivo:'}
close={(estado:number)=>{
let texto = estado === 0 ? 'rechazada' : 'autorizada'
setProceso(estado === 2 ? 3 : 4)
@ -4357,6 +4444,22 @@ export default function TraficoCorresponsales (props:IProps) {
}}/>
</div>
) : null}
{LoadComponent===17 ? (
<div style={{ height: '475px', overflowX: 'hidden' }}>
<AutorizarSolicitud solicitud={solicitud} userId={UserId}
title={'Solicitud Para Eliminar Referencia'}
mensaje={'solicita eliminar esta referencia por el motivo: '}
close={(estado:number)=>{
let texto = estado === 0 ? 'rechazada' : 'autorizada'
props.onClose(true);
setShowModal(false)
setHeader('Informativo');
setMsg(`Solicitud ${texto} correctamente.`)
setShowMsg(true)
return;
}}/>
</div>
) : null}
</Modal.Body>
</Modal>
<MsgInformativo

@ -3,10 +3,15 @@ import DashboardCorresponsales from './DashboardCorresponsales'
import { DashboardContabilidad } from './DashboardContabilidad'
import { Col, Container, Row } from 'react-bootstrap'
import { DashboardFacturacion } from './DashboardFacturacion'
import DashboardClientes from './DashboardClientes'
import { useSelector } from 'react-redux'
import { RootState } from '../../store/store'
import { DashboardSistemas } from './DashboardSistemas'
interface IProps {}
export default function Dashboard(props: IProps) {
const isAlenUser = useSelector((state: RootState) => state.userStatus.isAlenUser)
const [Depto, setDepto] = useState(() => {
const stickyValue = window.localStorage.getItem('Departamento')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
@ -24,17 +29,27 @@ export default function Dashboard(props: IProps) {
<br />
<Container>
<Row xs={1} md={3} className='g-4'>
{[['Direccion', 'Sistemas', 'Corresponsalias'].includes(Depto) ? <DashboardCorresponsales /> : ''].map(
{[Depto === 'Sistemas' ? <DashboardSistemas /> : ''].map(
(item) => {
return <React.Fragment>{item}</React.Fragment>
}
)}
{[['Direccion', 'Sistemas', 'Corresponsalias'].includes(Depto) ? <DashboardCorresponsales Perfil={Perfil} /> : ''].map(
(item) => {
return <React.Fragment>{item}</React.Fragment>
}
)}
{[['Direccion', 'Sistemas', 'Contabilidad'].includes(Depto) ? <DashboardContabilidad Depto={Depto} /> : ''].map((item) => {
{[['Direccion', 'Sistemas', 'Contabilidad'].includes(Depto) ? <DashboardContabilidad Depto={Depto} Perfil={Perfil}/> : ''].map((item) => {
return <React.Fragment>{item}</React.Fragment>
})}
{[['Direccion', 'Sistemas', 'Facturacion'].includes(Depto) ? <DashboardFacturacion Depto={Depto} Perfil={Perfil}/> : ''].map((item) => {
return <React.Fragment>{item}</React.Fragment>
})}
{[isAlenUser ? <DashboardClientes /> : ''].map(
(item) => {
return <React.Fragment>{item}</React.Fragment>
}
)}
</Row>
</Container>
</div>

@ -0,0 +1,125 @@
import { FC, useEffect, useState } from 'react';
import { Card, Col, Row } from 'react-bootstrap';
import { Link } from 'react-router-dom';
import { IconContext } from 'react-icons';
import { FcSurvey } from 'react-icons/fc';
import { FaCcMastercard } from 'react-icons/fa';
import ClientesServices from '../../Services/Catalogos/Clientes.Services';
import { AxiosError } from 'axios';
import IClientes from '../../Interfaces/Catalogos/IClientes';
import { MsgInformativo } from '../Utils/Toast/msgInformativo';
export default function DashboardClientes() {
const [UserId, setUserId] = useState(() => {
const stickyValue = window.localStorage.getItem('UserId')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
//const [ShowEstadosCuenta, setShowEstadosCuenta] = useState(false)
const [show, setShow] = useState(false)
const [msg, setMsg] = useState('')
const [header, setHeader] = useState('')
const [msgColor, setMsgColor] = useState('primary')
//
const [clientes, setClientes] = useState<IClientes[]>([])
/* useEffect(() => {
ClientesServices.getUsuariosAsignados(UserId)
.then(resp => {
setClientes(resp.data)
let cliente = resp.data.filter((x) => x.sClave===1896 && x.agrupado===1)
if(cliente.length > 0){
setShowEstadosCuenta(true)
}
})
.catch((err: AxiosError)=>{
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return
})
}, []) */
return (
<>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header style={{fontSize:'15.9px'}}>
Clientes
</Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>
Traficos
<br />
<br />
</Card.Title>
<Card.Img variant='top' src='' onClick={() => {}} />
<div style={{ fontSize: '6em' }} className='text-center'>
<FcSurvey />
</div>
</Card.Body>
<Card.Footer>
<Row>
<Col xs={6} style={{ paddingRight: '5px' }}>
{/* <Link
to={`../RptCorresponsalesTraficosHst?proc=0&status=0`}
style={{ textDecoration: 'none', float: 'right', paddingRight: '10px' }}
>
Buscar
</Link> */}
{/* <span style={{ fontWeight: 'bold' }}>Tipo cambio: ${TipoCambio}</span> */}
</Col>
{/* <Col xs={3}></Col> */}
<Col xs={6} style={{ paddingRight: '5px' }}>
<Link
to={`../Clientes/Traficos`}
style={{
textDecoration: 'none',
float: 'right',
paddingRight: '10px',
}}
>
Ver mas...
</Link>
</Col>
</Row>
</Card.Footer>
</Card>
</Col>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Clientes</Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>
Estados de cuenta
<br />
<br />
</Card.Title>
<Card.Img variant='top' src='' onClick={() => {}} />
<div style={{ fontSize: '6em' }} className='text-center'>
<IconContext.Provider value={{ color: 'orange' }}>
<FaCcMastercard />
</IconContext.Provider>
</div>
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link
to='../Clientes/EstadosCuenta'
style={{ textDecoration: 'none', float: 'right', paddingRight: '10px' }}
>
Ver mas...
</Link>
</Card.Footer>
</Card>
</Col>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={function (arg: boolean): void {
setShow(false)
}}
/>
</>
);
};

@ -8,6 +8,7 @@ import DashboardDataService from '../../Services/Dashboard/Dashboard.Contabilida
import DashboardCorresponsales from './DashboardCorresponsales'
interface IProps {
Depto: string;
Perfil:string;
}
export const DashboardContabilidad: FC<IProps> = (props) => {
@ -55,7 +56,7 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
return (
<>
{
props.Depto === 'Contabilidad' ? <DashboardCorresponsales/> : ""
props.Depto === 'Contabilidad' ? <DashboardCorresponsales Perfil={props.Perfil}/> : ""
}
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
@ -153,18 +154,17 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
</Card>
</Col>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card style={{ width: '18rem', maxHeight:'100%', height:'100%' }} className='dashboardComponentFont'>
<Card.Header>Contabilidad </Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>&nbsp;Traficos Con Cargos de Dlls<br/><br/></Card.Title>
<Card.Img variant='top' src='' onClick={() => {}} />
<Card.Body style={{ paddingBottom: '0px' }}>
<Card.Title>&nbsp;Traficos Con Cargos de Dlls<br/></Card.Title>
<div style={{ fontSize: '6em' }} className='text-center'>
<IconContext.Provider value={{ color: '#428d00' }}>
<FcSurvey style={{fontSize:'larger'}}/>
<FaMoneyBillAlt style={{fontSize:'60px', margin:'0 0 0 -4rem', position:"absolute", bottom: '6rem'}}/>
<FaMoneyBillAlt style={{fontSize:'80px', margin:'0 0 0 -3rem', position:"absolute", bottom: '9rem'}}/>
</IconContext.Provider>
{TraficosConCargos}
</div>
<div style={{fontSize:'60px', textAlign:'center'}}>{TraficosConCargos}</div>
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link

@ -5,14 +5,20 @@ import DashboardDataService from '../../Services/Dashboard/Dashboard.Corresponsa
import { useNavigate } from 'react-router-dom';
import ReactApexChart from 'react-apexcharts';
import { ApexOptions } from 'apexcharts';
import { IconContext } from 'react-icons';
import { FcSurvey } from 'react-icons/fc';
import { MdTimer } from 'react-icons/md';
interface IProps {}
interface IProps {
Perfil:string
}
export default function DashboardCorresponsales(props: IProps) {
let navigate = useNavigate();
const [TotalCorresponsales, setTotalCorresponsales] = useState(0);
const [labels, setlabels] = useState<string[]>([]);
const [series, setseries] = useState<number[]>([]);
const [Solicitudes, setSolicitudes] = useState(0);
//const [TipoCambio, setTipoCambio] = useState(0)
const [CircleOptions, setCirleOpcions] = useState<ApexOptions>({
labels: [
@ -32,6 +38,9 @@ export default function DashboardCorresponsales(props: IProps) {
});
useEffect(() => {
DashboardDataService.getSolicitudesEliminarCuenta().then((response) => {
setSolicitudes(response.data.total)
}).catch((e: Error) => {return;})
DashboardDataService.getCorresponsales()
.then((response) => {
console.log(response.data);
@ -144,6 +153,31 @@ export default function DashboardCorresponsales(props: IProps) {
</Card.Footer>
</Card>
</Col>
{props.Perfil === 'Sup. Corresponsalias' ?
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Facturación </Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>Solicitudes para eliminar cuenta<br/><br/></Card.Title>
<div style={{ fontSize: '6em' }} className='text-center'>
<IconContext.Provider value={{ color: '#ff671b' }}>
<FcSurvey style={{fontSize:'larger'}}/>
<MdTimer style={{fontSize:'70px', margin:'0 0 0 -4rem', position:"absolute", bottom: '6rem'}}/>
</IconContext.Provider>
{Solicitudes}
</div>
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link
to='../RptCorresponsalesTraficos/proc=1/modo=2'
style={{ textDecoration: 'none', float: 'right', paddingRight: '10px' }}
>
Ver mas...
</Link>
</Card.Footer>
</Card>
</Col> : ""
}
</>
);
};

@ -7,7 +7,7 @@ import DashboardFacturacionDataService from '../../Services/Dashboard/Dashboard.
import DashboardContaDataService from '../../Services/Dashboard/Dashboard.Contabilidad.Service'
import { ApexOptions } from 'apexcharts'
import ReactApexChart from 'react-apexcharts'
import { FaReply } from 'react-icons/fa'
import { FaCcMastercard, FaReply } from 'react-icons/fa'
import { FcSurvey } from 'react-icons/fc'
import DashboardCorresponsales from './DashboardCorresponsales'
import { MdTimer } from 'react-icons/md'
@ -111,7 +111,7 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
return (
<>
{
props.Depto === 'Facturacion' ? <DashboardCorresponsales/> : ""
props.Depto === 'Facturacion' ? <DashboardCorresponsales Perfil={props.Perfil}/> : ""
}
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
@ -164,7 +164,8 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
</Card>
</Col> : ""
}
{props.Perfil === 'Sup. Facturacion' ?
{props.Perfil === 'Sup. Facturacion' || props.Perfil === 'Administrador'?
<>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Facturación </Card.Header>
@ -187,7 +188,34 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
</Link>
</Card.Footer>
</Card>
</Col> : ""
</Col>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Alen</Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>
Estados de cuenta
<br />
<br />
</Card.Title>
<Card.Img variant='top' src='' onClick={() => {}} />
<div style={{ fontSize: '6em' }} className='text-center'>
<IconContext.Provider value={{ color: 'orange' }}>
<FaCcMastercard />
</IconContext.Provider>
</div>
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link
to='../Clientes/EstadosCuenta'
style={{ textDecoration: 'none', float: 'right', paddingRight: '10px' }}
>
Ver mas...
</Link>
</Card.Footer>
</Card>
</Col>
</> : ""
}
</>
)

@ -0,0 +1,125 @@
import { ApexOptions } from "apexcharts";
import { useEffect, useState } from "react";
import ReactApexChart from "react-apexcharts"
import { Card, Col, Row } from "react-bootstrap"
import { Link } from "react-router-dom"
import DashboardDataService from '../../Services/Dashboard/Dashboard.Corresponsales.Services';
export const DashboardSistemas:React.FC = () => {
const [TotalCorresponsales, setTotalCorresponsales] = useState(0);
const [series, setseries] = useState<number[]>([]);
const [Label, setLabel] = useState('');
const [CircleOptions, setCirleOpcions] = useState<ApexOptions>({
labels: [],
colors: ['#EB984E',],
legend: { position: 'bottom' },
plotOptions: {
pie: {
donut: {
size: '55%',
},
},
},
});
useEffect(() => {
DashboardDataService.getDisk()
.then((response) => {
console.log(response.data);
setLabel(response.data.descripcion)
setseries([response.data.total]);
setCirleOpcions({
labels: [response.data.descripcion],
colors: ['#ABEB4E'],
legend: { position: 'bottom' },
plotOptions: {
radialBar: {
startAngle: -135,
endAngle: 135,
track: {
background: "#e7e7e7",
strokeWidth: '100%',
margin: 5, // margin is in pixels
dropShadow: {
enabled: false,
top: 2,
left: 0,
color: '#999',
opacity: 1,
blur: 2
}
},
dataLabels: {
name:{
show:false
},
value: {
show: true,
fontSize: '43px',
fontWeight: 'bold',
},
}
}
},
grid: {
padding: {
top: -10
}
},
});
})
.catch((e: Error) => {
return;
});
//getTipoCambio(currentDate())
}, []);
return (
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header style={{fontSize:'15.9px'}}>
<b>Sistemas </b>
</Card.Header>
<Card.Body style={{ paddingBottom: '0px'}}>
<Card.Title>Almacenamiento interno</Card.Title>
<ReactApexChart
type='radialBar'
options={CircleOptions}
series={series}
width={250}
height={310}
/>
<div style={{textAlign:"center"}}>{Label}</div>
</Card.Body>
<Card.Footer>
<Row>
<Col xs={6} style={{ paddingRight: '5px' }}>
{/* <Link
to={`../RptCorresponsalesTraficosHst?proc=0&status=0`}
style={{ textDecoration: 'none', float: 'right', paddingRight: '10px' }}
>
Buscar
</Link> */}
{/* <span style={{ fontWeight: 'bold' }}>Tipo cambio: ${TipoCambio}</span> */}
</Col>
{/* <Col xs={3}></Col> */}
<Col xs={6} style={{ paddingRight: '5px' }}>
<Link
to={``}
style={{
visibility: 'hidden',
textDecoration: 'none',
float: 'right',
paddingRight: '10px',
}}
>
Ver mas...
</Link>
</Col>
</Row>
</Card.Footer>
</Card>
</Col>
)
}

@ -0,0 +1,517 @@
import { useEffect, useRef, useState } from "react"
import { Button, Card, Col, Row, Form } from "react-bootstrap"
import ClientesServices from "../../Services/Catalogos/Clientes.Services"
import IClientes from "../../Interfaces/Catalogos/IClientes"
import { AxiosError } from "axios"
import { MsgInformativo } from "../Utils/Toast/msgInformativo"
import { AgGridReact } from "ag-grid-react"
import EstadosCuentaAlenService from "../../Services/EstadosCuenta/EstadosCuentaAlen.Service"
import { DTOEstadoCuentaAlen } from "../../DTO/EstadosCuenta/DTOEstadoCuentaAlen"
import { ColDef, ILargeTextEditorParams } from "ag-grid-community"
import { BsFileEarmarkExcelFill } from "react-icons/bs"
import { DTOEstadoCuentaAlenFilters } from "../../DTO/EstadosCuenta/DTOEstadosCuentaAlenFilters"
import { FaDownload } from "react-icons/fa"
import { IconContext } from "react-icons"
import FileManagerServices from "../../Services/Utils/FileManager.Services"
export const EstadosCuenta:React.FC = () => {
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
const [Cuentas, setCuentas] = useState<DTOEstadoCuentaAlen[]> ([])
const [show, setShow] = useState(false)
const [msg, setMsg] = useState('')
const [header, setHeader] = useState('')
const [msgColor, setMsgColor] = useState('primary')
const hiddenFileInputRef = useRef<HTMLInputElement>(null);
const [showSpinner, setShowSpinner] = useState(false)
const [File, setFile] = useState<File | null>();
//Estados de los filtros
const [Remitentes, setRemitentes] = useState<string[]>([])
const [Trafico, setTrafico] = useState('')
const [Aduana, setAduana] = useState('')
const [Patente, setPatente] = useState('')
const [Pedimento, setPedimento] = useState('')
const [TipoOperacion, setTipoOperacion] = useState('')
const [Inicio, setInicio] = useState('')
const [Fin, setFin] = useState('')
const [Remitente, setRemitente] = useState('')
const [Programado, setProgramado] = useState(0)
//
const [columnDefs] = useState<ColDef[]>([
{
field:'serie', headerName:'Serie',
valueGetter: ({data}:any) => {return data.serie + data.noMovimiento},
width:100,
filter: true
},/* {
field:'noMovimiento', headerName:'Movimiento'
}, */{
field:'fecha', filter: true
},{
field:'trafico', width:150, sortable: true, filter: true
},{
field:'aduana', width:100, filter: true
},{
field:'patente', width:100, filter: true
},{
field:'pedimento', width:120, filter: true
},{
field:'clave', headerName:'Cve. Pedim', width:120, filter: true
},{
field:'impexp', headerName: 'Impo/Expo', width:120, filter: true
},{
field:'noCliente', headerName: 'No. Cte.', width:100, filter: true
},{
field:'nombre', headerName: 'Nombre Cliente', width:300, filter: true
},{
field:'cargos', width:100, filter: true
},{
field:'abonos', width:100, filter: true
},{
field:'saldoFinal', width:120, filter: true
},{
field:'ivaAl', headerName: '% IVA', width:100, filter: true
},{
field:'descripcion', width:300, wrapText:true, autoHeight: true, filter: true
},{
field:'remitente', width:300, wrapText:true, autoHeight: true, filter: true
},{
field:'pedido', width:300, wrapText:true, autoHeight: true, filter: true
},{
field:'ordenCompra', editable: true, filter: true, wrapText: true, autoHeight:true
}
,{
field:'tipoMercancia', headerName: 'Tipo Mcia', filter: true
},
{
field:'idPdf', headerName: 'PDF',
cellRenderer: ({data}:any)=>{
return (
<IconContext.Provider value={{color: 'blue', size:'20px'}}>
<FaDownload style={{cursor:'pointer'}} onClick={() => {
if(data.trafico[data.trafico.length-1].toUpperCase() === 'C')
getCorresponsaliasFile(data.idPdf, 37, data.pdf)
else
getAEO(data.serie, data.noMovimiento, 'pdf', data.trafico);
}
}/>
</IconContext.Provider>
)
}
},
{
field:'idXml', headerName: 'XML',
cellRenderer: ({data}:any)=>{
return (
<IconContext.Provider value={{color: 'blue', size:'20px'}}>
<FaDownload style={{cursor:'pointer'}} onClick={() => {
if(data.trafico[data.trafico.length-1].toUpperCase() === 'C')
getCorresponsaliasFile(data.idXml, 38, data.xml)
else
getAEO(data.serie, data.noMovimiento, 'xml', data.trafico);
}
}/>
</IconContext.Provider>
)
}
},
{
field: "observaciones",
editable:true,
filter: true,
wrapText: true,
cellEditor: "agLargeTextCellEditor",
cellEditorPopup: true,
cellEditorParams: {
rows: 5,
maxLength: 1000
} as ILargeTextEditorParams,
autoHeight:true
},
/* {
field:'idNotasCargo', headerName: 'Notas de Cargo',
cellRenderer: ({data}:any)=>{
return (
data.idNotasCargo !== 0 ?
<IconContext.Provider value={{color: 'blue', size:'20px'}}>
<FaDownload style={{cursor:'pointer'}} onClick={() => {
if(data.trafico[data.trafico.length-1].toUpperCase() === 'C')
getCorresponsaliasFile(data.idNotasCargo, 41, data.notasCargo)
/* else
getAEO(data.serie, data.noMovimiento);
}
}/>
</IconContext.Provider> : ''
)
}
}, */
])
useEffect(() => {
getCuentas();
},[])
function currentDate(days: number): string {
var today = new Date()
today.setDate(today.getDate() + days)
var dd = String(today.getDate()).padStart(2, '0')
var mm = String(today.getMonth() + 1).padStart(2, '0')
var yyyy = today.getFullYear()
return yyyy + '-' + mm + '-' + dd
}
const uploadFile = (file: File) => {
setShowSpinner(true)
const formData = new FormData()
formData.append('name', file.name)
formData.append('file', file)
if(Perfil === 'Administrador'){
EstadosCuentaAlenService.Append(formData)
.then((res) => {
hiddenFileInputRef.current!.value = ''
setCuentas(res.data)
setShowSpinner(false)
})
.catch((err: AxiosError) => {
setShowSpinner(false)
hiddenFileInputRef.current!.value = ''
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return
})
}
if(['Facturacion', 'Sup. Facturacion'].includes(Perfil)){
EstadosCuentaAlenService.AppendProgramacionesPago(formData)
.then((res) => {
hiddenFileInputRef.current!.value = ''
setCuentas(res.data)
setShowSpinner(false)
})
.catch((err: AxiosError) => {
setShowSpinner(false)
hiddenFileInputRef.current!.value = ''
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return
})
}
}
const getCuentas = () => {
var filters: DTOEstadoCuentaAlenFilters = {
Trafico: Trafico,
Impexp: TipoOperacion,
Aduana: Aduana,
Patente: Patente,
Pedimento: Pedimento,
Inicio: Inicio,
Fin: Fin,
Remitente: Remitente,
Programado: Programado
}
EstadosCuentaAlenService.GetAll(filters)
.then(resp => {
setCuentas(resp.data)
if(resp.data.length === 0){
setShow(true)
setMsg("No se encontraron registros")
setHeader('Informativo')
return;
}
if(Remitentes.length === 0){
let remitentes = resp.data.map((x:any) => {
if(x.remitente==='' || x.remitente===null) x.remitente = 'SIN REMITENTE'
return x.remitente
})
setRemitentes(remitentes.filter(function(elem, index, self) {
return index === self.indexOf(elem);
}).sort((a,b) => (a < b ? -1 : 1)))
}
})
.catch((err: AxiosError) => {
setShowSpinner(false)
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return
})
}
const selectFile = () => {
hiddenFileInputRef.current?.click()
}
const downloadEstadosCuenta = () => {
EstadosCuentaAlenService.ExportEstadosCuenta(Cuentas)
.then((resp:any) => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', "EstadosDeCuenta.xlsx")
document.body.appendChild(link)
link.click()
}).catch((err:AxiosError) => {
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return;
})
}
const getRowStyle = (params: any) => {
var styles = {
backgroundColor:'',
border: '0.5px solid #aaaaaa',
}
/* if (params.data.programado === 1) {
styles.backgroundColor = 'rgb(98, 190, 255, 0.5)';
} */
if(params.data.programado === true){
styles.backgroundColor = "rgb(255, 193, 7, 0.5)";
}
return styles;
};
const getCorresponsaliasFile = (id:number, proceso: number, fileName: string) => {
FileManagerServices.getFileContent(id, proceso)
.then((resp: any) => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', fileName)
document.body.appendChild(link)
link.click()
}).catch((err:AxiosError) => {
setShow(true)
setMsg("No se encontró el archivo solicitado")
setHeader('Error')
return;
})
}
const getAEO = (serie: string, noMovimiento: string, mime: string, trafico: string) => {
FileManagerServices.getAEO(serie, noMovimiento, mime, trafico)
.then((resp: any) => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', `EstadoCuenta_${serie}${noMovimiento}.${mime}`)
document.body.appendChild(link)
link.click()
}).catch((err:AxiosError) => {
setShow(true)
setMsg("No se encontró el archivo solicitado")
setHeader('Error')
return;
})
}
const onCellValueChanged = (event: any) => {
var data: DTOEstadoCuentaAlen = event.data;
let ColDef = event.colDef;
if(ColDef.field === 'ordenCompra'){
EstadosCuentaAlenService.AppendOrdenCompra(data)
.then(() => getCuentas())
.catch((err:AxiosError) => {
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return;
})
}
if(ColDef.field === 'observaciones'){
EstadosCuentaAlenService.AppendObservaciones(data)
.then(() => getCuentas())
.catch((err:AxiosError) => {
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return;
})
}
}
return (
<div>
<Card>
<Card.Body>
<Row>
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Trafico
<Form.Control
size="sm"
type="text"
value={Trafico}
onChange={(e) => setTrafico(e.target.value)}
>
</Form.Control>
</Form.Label>
</Col>
<Col xs={1}>
<Form.Label style={{width:'100%'}}>
Aduana
<Form.Control
size="sm"
type="text"
value={Aduana}
onChange={(e) => setAduana(e.target.value)}
>
</Form.Control>
</Form.Label>
</Col>
<Col xs={1}>
<Form.Label style={{width:'100%'}}>
Patente
<Form.Control
size="sm"
type="text"
value={Patente}
onChange={(e) => setPatente(e.target.value)}
>
</Form.Control>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Pedimento
<Form.Control
size="sm"
type="text"
value={Pedimento}
onChange={(e) => setPedimento(e.target.value)}
>
</Form.Control>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Inicio
<Form.Control
defaultValue={Inicio}
type='date'
name='Fecha'
placeholder='Fecha'
title='Fecha'
alt='Fecha'
onChange={(e) => setInicio(e.target.value)}
size='sm'
/>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Fin
<Form.Control
defaultValue={Fin}
type='date'
name='Fecha'
placeholder='Fecha'
title='Fecha'
alt='Fecha'
onChange={(e) => setFin(e.target.value)}
size='sm'
/>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Remitente
<Form.Control
as='select'
value={Remitente!}
onChange={(e) => {
setRemitente(e.target.value)
}}
className='form-select form-select-sm'
>
<option value={''}>- SELECCIONE -</option>
{Remitentes.map((r) => {
return (
<option key={r} value={r}>{r}</option>
)
})}
</Form.Control>
</Form.Label>
</Col>
</Row>
<Row className="justify-content-between justify-items-end">
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Tipo Operacion
<Form.Control
as='select'
value={TipoOperacion!}
onChange={(e) => {
setTipoOperacion(e.target.value)
}}
className='form-select form-select-sm'
>
<option value={''} key={'0'}>- SELECCIONE -</option>
<option value={'I'} key={'I'}>IMPORTACION</option>
<option value={'E'} key={'E'}>EXPORTACION</option>
</Form.Control>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%'}}>
Estado
<Form.Control
as='select'
value={Programado!}
onChange={(e) => {
setProgramado(+e.target.value)
}}
className='form-select form-select-sm'
>
<option value={0} key={0}>- SELECCIONE -</option>
<option value={1} key={1}>EN PLATAFORMA</option>
<option value={2} key={2}>NO EN PLATAFORMA</option>
</Form.Control>
</Form.Label>
</Col>
<Col xs={8} className="d-flex align-items-end">
<div style={{textAlign:'end', width:'100%'}}>
<Button variant='primary' onClick={() => getCuentas()} style={{marginRight:'10px'}}>Buscar</Button>
{['Administrador', 'Facturacion', 'Sup. Facturacion'].includes(Perfil) ? <Button variant='primary' onClick={() => {selectFile()}} style={{marginRight:'10px'}}>Cargar Estados</Button> : ''}
<Button variant='success' onClick={() => {downloadEstadosCuenta()}} style={{marginRight:'10px'}}><BsFileEarmarkExcelFill/> Excel</Button>
<input type="file" ref={hiddenFileInputRef} style={{display:'none'}}
onChange={(e:any) => {
uploadFile(e.target.files[0]);
setFile(e.target.files[0]);
}}
/>
</div>
</Col>
</Row>
</Card.Body>
</Card>
<br />
<div className='ag-theme-alpine' style={{ height: 500, width: '100%' }}>
<AgGridReact
rowData={Cuentas}
columnDefs={columnDefs}
pagination={true}
paginationAutoPageSize={true}
//ref={gridRef}
/* rowSelection={'multiple'}
rowMultiSelectWithClick={true} */
getRowStyle={getRowStyle}
onCellValueChanged={onCellValueChanged}
></AgGridReact>
</div>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={function (arg: boolean): void {
setShow(false)
}}
/>
</div>
)
}

@ -1,7 +1,7 @@
import * as React from 'react'
import { useNavigate } from 'react-router-dom'
import { useSelector, useDispatch } from 'react-redux'
import { logued } from '../../store/features/userStatusSlice/userStatusSlice'
import { IsAlenUser, logued } from '../../store/features/userStatusSlice/userStatusSlice'
import ILogin from '../../Interfaces/Ilogin'
import ItemMenu from '../../Interfaces/Catalogos/IItemMenu'
import '../../css/login.css'
@ -17,13 +17,14 @@ import AuthDS from '../../Services/Auth/Auth.Service'
import UserDS from '../../Services/Catalogos/Usuarios.Services'
import { useEffect } from 'react'
import Info from '../../../package.json'
import ClientesServices from '../../Services/Catalogos/Clientes.Services'
export const Login: React.FC<{}> = () => {
const dispatch = useDispatch()
const navigate = useNavigate()
let _menu: ItemMenu[] = []
const [mainMenu, setMainMenu] = React.useState(_menu)
const userLogued = useSelector((state: RootState) => state.userStatus.value)
const userLogued = useSelector((state: RootState) => state.userStatus.isLogged)
const [show, setShow] = React.useState(false)
const [Usuario, setUsuario] = React.useState('')
const [Contrasenia, setContrasenia] = React.useState('')
@ -59,7 +60,7 @@ export const Login: React.FC<{}> = () => {
if(values.Perfil === 'Corresponsales'){
navigate('/RptCorresponsalesTraficos/proc=1/modo=1')
}else if(values.Perfil === 'Clientes'){
navigate('/Clientes/Traficos')
checkForAlenUser(values.UserId)
}else{
navigate('/')
}
@ -105,6 +106,25 @@ export const Login: React.FC<{}> = () => {
})
}, [dispatch, navigate])
const checkForAlenUser = (UserId: number) => {
ClientesServices.getUsuariosAsignados(UserId)
.then(resp => {
let cliente = resp.data.filter((x) => x.sClave===1896 && x.agrupado===1)
if(cliente.length > 0){
dispatch(IsAlenUser(true))
navigate('/')
}else{
navigate('/Clientes/Traficos')
}
})
.catch((err: AxiosError)=>{
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return
})
}
return (
<div>
{!userLogued ? (

@ -1,7 +1,7 @@
import { FC, useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
import { useDispatch } from 'react-redux'
import { logued } from '../../store/features/userStatusSlice/userStatusSlice'
import { IsAlenUser, logued } from '../../store/features/userStatusSlice/userStatusSlice'
interface IProps {}
@ -12,6 +12,7 @@ const Logout: FC<IProps> = (props) => {
useEffect(() => {
window.localStorage.clear()
dispatch(logued(false))
dispatch(IsAlenUser(false))
navigate('/')
})

@ -0,0 +1,195 @@
import React, { FC, useEffect, useState } from 'react'
// Bootstrap
import { Button, Col, Container, Modal, Row } from 'react-bootstrap'
import { BsCloudDownload } from 'react-icons/bs'
// Interfaces
import IArchivoElectronico from '../../../Interfaces/IArchivoElectronico'
// DTOs
import DTOgetArchivosPorReferencia from '../../../DTO/DTOgetArchivosPorReferencia'
// Redux
import { RootState } from '../../../store/store'
import { useSelector } from 'react-redux'
// Servicios
import AEOServices from '../../../Services/Catalogos/ArchivoElectronico.Services'
import ArchivoElectronicoDataServices from '../../../Services/Catalogos/ArchivoElectronico.Services'
// Otros
import { AgGridReact } from 'ag-grid-react'
import { MsgInformativo } from '../../Utils/Toast/msgInformativo'
import { TargetURL } from '../../../Constants/TargetURL'
import IFileManager from '../../../Interfaces/Utils/IFileManager'
import FileManagerServices from '../../../Services/Utils/FileManager.Services'
import { IconContext } from 'react-icons'
import { FaDownload } from 'react-icons/fa'
interface IProps {
showDialog: boolean
header: string
closeDialog: (arg: boolean) => void
archivos: IFileManager[]
}
interface ListaArchivos {
archivo: string
}
const URL = new TargetURL()
export const DialogAE: FC<IProps> = (props) => {
const [curURL, setCurURL] = useState(URL.get())
const Referencia = useSelector((state: RootState) => state.ArchivoElectronico.Referencia)
const Pedimento = useSelector((state: RootState) => state.ArchivoElectronico.Pedimento)
const NoCliente = useSelector((state: RootState) => state.ArchivoElectronico.NoCliente)
const [filteredData, setFilteredData] = useState<IFileManager[]>([])
const [columnDefs] = useState([
{
field: 'nombreArchivo',
cellRender: (params:any) => {return params.data.nombreArchivo},
width: 430,
headerCheckboxSelection: false,
headerCheckboxSelectionFilteredOnly: false,
checkboxSelection: false,
sortable: true,
filter: true,
},{
field: 'Descargar',
width: 100,
cellRenderer: (params:any) => {
return (
<div style={{textAlign:'center'}}>
<IconContext.Provider value={{ color: 'blue', size: '25px' }}>
<FaDownload onClick={() => {getFile(params.data)}} style={{cursor:'pointer'}}/>
</IconContext.Provider>
</div>
)
//return <Button variant='warning' onClick={() => {getFile(params.data)}}></Button>
},
}
])
const gridRef = React.useRef<any>(null)
const [msgColor, setMsgColor] = React.useState('primary')
const [show, setShowMsg] = useState(false)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const viewFileContent = (fileName: string) => {
window.open(
`${curURL}/ArchivoElectronico/getFileContent?Referencia=${Referencia}&PedimentoLargo=dummy&NoCliente=${NoCliente}&IdUsuario=0&Archivo=${fileName}`
)
}
useEffect(() => {
setFilteredData(props.archivos)
}, [props.archivos])
const getFile = (file: IFileManager) => {
FileManagerServices.getFileContent(parseInt(file.tags), file.proceso).then((resp: any) => {
const url = window.URL.createObjectURL(new Blob([resp.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', file.nombreArchivo)
document.body.appendChild(link)
link.click()
}).catch(() => {
setHeader('Error')
setMsg('Ocurrio un error durante la descarga, favor de intentar nuevamente')
setShowMsg(true)
return
})
}
const getFilesByReference = () => {
let selectedNodes = gridRef.current.api.getSelectedNodes()
let selectedData = selectedNodes.map((node: any) => node.data)
const Archivos = selectedData.map((item: ListaArchivos) => item.archivo)
const data: DTOgetArchivosPorReferencia = {
Referencia: Referencia,
PedimentoLargo: Pedimento,
NoCliente: NoCliente,
IdUsuario: 0,
Archivo: 'dummy',
Archivos: Archivos,
}
/* AEOServices.getTheseFilesByReferences(data)
.then((response: any) => {
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute('download', Referencia + '.zip')
document.body.appendChild(link)
link.click()
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
}) */
props.closeDialog(false)
}
return (
<div>
{' '}
<Modal
dialogClassName='modal-50w'
show={props.showDialog}
onHide={() => {
props.closeDialog(false)
}}
centered
>
<Modal.Header closeButton>
<Modal.Title>Referencia: {Referencia}</Modal.Title>
</Modal.Header>
<Modal.Body>
{filteredData ? (
<div style={{ height: '350px', width: '100%' }} className='ag-theme-alpine'>
<AgGridReact
rowData={filteredData}
columnDefs={columnDefs}
pagination={true}
paginationPageSize={50}
ref={gridRef}
/* rowSelection={'multiple'}
rowMultiSelectWithClick={true} */
></AgGridReact>
</div>
) : (
'Sin archivos que mostrar'
)}
<MsgInformativo show={show} msg={msg} header={header} msgColor={msgColor} closeToast={() => setShowMsg(false)} />
</Modal.Body>
{/* <Modal.Footer>
<Container>
<Row>
<Col md={2}></Col>
<Col md={4}>
<Button
variant='warning'
size='sm'
onClick={() => {
getFilesByReference()
}}
>
<BsCloudDownload /> Descargar
</Button>
</Col>
<Col md={3}></Col>
<Col md={3}>
<Button
variant='primary'
size='sm'
onClick={() => {
props.closeDialog(false)
}}
>
Cerrar
</Button>
</Col>
</Row>
</Container>
</Modal.Footer> */}
</Modal>
</div>
)
}

@ -41,8 +41,9 @@ import { InitCorresponsalesContenedores, addCorresponsalesContenedores } from '.
import ICorresponsalContenedores from '../../Interfaces/Corresponsales/ICorresponsalContenedores'
import ICorresponsalFacturas from '../../Interfaces/Corresponsales/ICorresponsalFacturas'
import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores'
import { FaCrow } from 'react-icons/fa'
/* import '../../css/generic01.css' */
import { FaCrow, FaTrash } from 'react-icons/fa'
import { CrearSolicitud } from '../Corresponsales/SolicitudReapertura/CrearSolicitud'
import '../../css/generic01.css'
interface IProps {}
@ -71,6 +72,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
const [filteredData, setFilteredData] = useState<ICorresponsalTrafico[]>([])
const [show, setShowMsg] = useState(false)
const [ShowModal, setShowModal] = useState(false)
const [ShowModalSolicitud, setShowModalSolicitud] = useState(false)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [Inicio, setInicio] = useState(currentDate(-365))
@ -84,7 +86,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
//const [Corresponsal, setCorresponsal] = useState(0)
const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState(0);
const [Aduana, setAduana] = useState('0');
const [Referencia, setReferencia] = useState('')
const [Clientes, setClientes] = useState<Array<IClientes>>()
const [filtro, setFiltro] = useState('')
@ -93,7 +95,22 @@ export default function RptCorresponsalesTraficos(props: IProps) {
ICatCorresponsales[]
>([])
const hiddenFileInputRef = useRef<HTMLInputElement>(null);
const [Deleting, setDeleting] = useState(false);
const [columnDefs] = useState([
{
field: 'acciones',
headerName: '',
width: 50,
hide: !Perfil.includes('Corresponsalias'),
cellRenderer: (params: any) => {
return (
<span style={{visibility: params.data.tieneSolicitud ? 'hidden' : 'visible'}}>
<FaTrash color='red' cursor='pointer' onClick={(e) => {setDeleting(true)}}/>
</span>
)
},
},
{ field: 'id', headerName: 'id', width: 70, sortable: true, filter: true },
{
field: 'proceso',
@ -275,7 +292,19 @@ export default function RptCorresponsalesTraficos(props: IProps) {
}, [])
function getParams(e: RowClickedEvent) {
AbreTrafico(e.data.id)
if(Deleting){
if(e.data.pedimento > 0){
setHeader('Error')
setMsg('Favor de borrar el pedimento para poder eliminar la referencia.')
setShowMsg(true)
setDeleting(false)
return;
}
setIDTrafico(e.data.id)
setShowModalSolicitud(true)
}else{
AbreTrafico(e.data.id)
}
}
function AbreTrafico(id: number) {
@ -297,7 +326,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
Pedimento: Pedimento,
Aduana: Aduana,
Patente: Patente,
Proceso: Referencia !== '' || Pedimento !== 0 || Aduana !== 0 || Patente !== 0 ? 0 : parseInt(proc.replace('proc=', '')),
Proceso: Referencia !== '' || Pedimento !== 0 || Aduana !== '0' || Patente !== 0 ? 0 : parseInt(proc.replace('proc=', '')),
Modo: modo ? parseInt(modo.replace('modo=', '')) : 0,
Referencia: Referencia
}
@ -421,10 +450,10 @@ export default function RptCorresponsalesTraficos(props: IProps) {
contenedor.semaforo = +element[23] === 1 ? 2 : 1
await saveTxtContenedores(contenedor);
}else{
await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1});
await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1,idTipoContenedor:0});
}
}else{
await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1});
await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1, idTipoContenedor:0});
}
})
.catch((e: Error) => {
@ -535,6 +564,10 @@ export default function RptCorresponsalesTraficos(props: IProps) {
})
}
const handleClose = () => {
setShowModalSolicitud(false)
setDeleting(false)
}
return (
<div>
<Card>
@ -566,7 +599,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
type='text'
size='sm'
placeholder='Aduana'
onChange={(e) => setAduana(+e.target.value)}
onChange={(e) => setAduana(e.target.value === '' ? '0' : e.target.value)}
/>
</Col>
<Col xs={2}>
@ -768,11 +801,46 @@ export default function RptCorresponsalesTraficos(props: IProps) {
IDTrafico={IDTrafico}
onClose={function (val: boolean): void {
setShowModal(false)
generaReporte()
}}
/>
</div>
</Modal.Body>
</Modal>
<Modal
show={ShowModalSolicitud}
dialogClassName='modal-50w'
style={{backdropFilter:'brightness(0.5)'}}
centered
onHide={handleClose}
>
<Modal.Body>
<div style={{ height: '250px', overflowX: 'hidden' }}>
<CrearSolicitud
idTrafico={IDTrafico}
idUsuario={UserId}
title='Solicitud Para Eliminar Referencia'
close={()=>{
setShowModalSolicitud(false)
setDeleting(false)
generaReporte()
if(Perfil === 'Sup. Corresponsalias'){
setHeader('Informativo');
setMsg('Referencia eliminada correctamente.')
setShowMsg(true)
return;
}
else{
setHeader('Informativo');
setMsg('Solicitud creada correctamente.')
setShowMsg(true)
return;
}
}
}/>
</div>
</Modal.Body>
</Modal>
</div>
)
}

@ -58,7 +58,7 @@ export default function RptCorresponsalesTraficosHst (props: IProps) {
const [DataCorresponsales, setDataCorresponsales] = useState<ICatCorresponsales[]>([])
const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState(0);
const [Aduana, setAduana] = useState('');
const [columnDefs] = useState([
{ field: 'id', headerName: 'id', width: 70, sortable: true, filter: true },
{

@ -0,0 +1,42 @@
import { ICellRendererParams } from "ag-grid-community";
import { FC, useState, useEffect } from "react";
export const ClienteProgressBar: FC<ICellRendererParams> = (props: ICellRendererParams) => {
const [Color, setColor] = useState('progress-bar bg-CORRESPONSAL_NORMAL')
useEffect(() => {
if (props.data.proceso === 1) setColor('progress-bar bg-RECHAZOS_PARA_CORRESPONSAL')
if (props.data.proceso === 2 || props.data.proceso === 3) {
setColor('progress-bar bg-FACTURACION_LISTOS_PARA_FACTURAR')
}
if (props.data.proceso === 4) setColor('progress-bar bg-CORRESPONSAL_NORMAL')
}, [props])
const getTooltipTitle = () => {
let proceso = props.data.proceso;
switch(proceso){
case 1:
return "Por Terminar"
break;
case 2:
return "Despachado Sin Facturar"
break;
case 3:
return "Despachado Sin Facturar"
break;
case 4:
return "Despachado y Facturado"
break;
}
}
return (
<div>
<div style={{ paddingTop: '20%' }}>
<div className='progress' style={{ maxWidth: '80%' }}>
<div className={Color} style={{ width: '100%' }} data-toggle="tooltip" data-placement="bottom" title={getTooltipTitle()}></div>
</div>
</div>
</div>
)
}

@ -0,0 +1,41 @@
import React, { FC, useState } from 'react'
import { Button } from 'react-bootstrap'
import { DialogAE } from '../ArchivoElectronico/DialogAE'
import ArchivoElectronicoDataServices from '../../../Services/Catalogos/ArchivoElectronico.Services'
import IFileManager from '../../../Interfaces/Utils/IFileManager';
import FileManagerServices from '../../../Services/Utils/FileManager.Services';
interface IProps {
referencia: string;
}
export const VerDocumentos: FC<IProps> = (props) => {
const [showDialog, setShowDialog] = useState(false)
const [Archivos, setArchivos] = useState<IFileManager[]>([]);
const showDocumentos = () => {
FileManagerServices.getFileListByreferencia(props.referencia)
.then((response) => {
const filteredFileList = response.data.filter(x=> [2,10,11,12,13,14,15,19,17,18,37,38,39,41].includes(x.proceso))
setArchivos(filteredFileList)
})
.catch((e: Error) => {
console.log(e)
return
})
setShowDialog(true)
}
const closeDialog = () => {
setShowDialog(false)
}
return (
<div>
<span>
<Button onClick={() => showDocumentos()} variant='secondary'>
ver Documentos
</Button>
</span>
<DialogAE showDialog={showDialog} header={''} closeDialog={closeDialog} archivos={Archivos}/>
</div>
)
}

@ -0,0 +1,210 @@
import { useEffect, useState } from "react";
import { Button, Card, Col, Form, Row } from "react-bootstrap";
import ReportesAlenService from "../../../Services/Reportes/ReportesAlen.Service";
import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
import ClientesServices from "../../../Services/Catalogos/Clientes.Services";
import IClientes from "../../../Interfaces/Catalogos/IClientes";
import { useSelector } from "react-redux";
import { RootState } from "../../../store/store";
import ICatCorresponsales from "../../../Interfaces/Catalogos/ICatCorresponsales";
import CorresponsalesServices from "../../../Services/Catalogos/Corresponsales.Services";
import ReporteCuentasCerradasService from "../../../Services/Reportes/ReporteCuentasCerradas.Service";
export const CuentasCerradas: React.FC<{}> = () => {
const [Inicio, setInicio] = useState(currentDate(-7))
const [Fin, setFin] = useState(currentDate(0))
const [show, setShowMsg] = useState(false)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [msgColor, setMsgColor] = useState('primary')
const [TipoOperacion, setTipoOperacion] = useState(0)
const [IDCliente, setIDCliente] = useState(0)
const [Clientes, setClientes] = useState<Array<IClientes>>()
const [IDCorresponsal, setIDCorresponsal] = useState(0)
const [Corresponsales, setCorresponsales] = useState<Array<ICatCorresponsales>>()
function currentDate(days: number): string {
var today = new Date()
today.setDate(today.getDate() + days)
var dd = String(today.getDate()).padStart(2, '0')
var mm = String(today.getMonth() + 1).padStart(2, '0')
var yyyy = today.getFullYear()
return yyyy + '-' + mm + '-' + dd
}
useEffect(() => {
ClientesServices.getAllClientes(0)
.then((response) => {
//clientes = response.data;
setClientes(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CorresponsalesServices.getAll()
.then((response) => {
setCorresponsales(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}, [])
const GetExcel = () => {
if(IDCliente === 0 && IDCorresponsal === 0){
setHeader('Error')
setMsg('Debe seleccionar un cliente o un corresponsal')
setShowMsg(true)
return
}
ReporteCuentasCerradasService.DownloadExcel(Inicio, Fin, TipoOperacion, IDCliente, IDCorresponsal)
.then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `Cuentas Cerradas ${Inicio} - ${Fin}.xlsx`);
document.body.appendChild(link);
link.click();
}).catch(e => {
setHeader('Error')
setMsg('Ocurrio un error al generar el reporte. Por favor, intentelo de nuevo.')
setShowMsg(true)
return
})
}
return(
<>
<Row style={{height:'90vh'}} className="align-items-center justify-content-center">
<Col xs={6}>
<Card style={{width:'100%'}}>
<Card.Header><h4>Reporte de Cuentas Cerradas</h4></Card.Header>
<Card.Body>
<Row>
<Col xs={3}>
<Form.Label style={{width:'100%'}}>
Inicio
<Form.Control
defaultValue={Inicio}
type='date'
name='Inicio'
placeholder='Inicio'
title='Inicio'
alt='Inicio'
data-date-format='YYYY-mm-dd'
onChange={(e) => setInicio(e.target.value)}
size='sm'
/>
</Form.Label>
</Col>
<Col xs={3}>
<Form.Label style={{width:'100%'}}>
Fin
<Form.Control
defaultValue={Fin}
type='date'
name='Fin'
placeholder='Fin'
title='Fin'
alt='Fin'
onChange={(e) => setFin(e.target.value)}
size='sm'
/>
</Form.Label>
</Col>
<Col xs={3}>
<Form.Label style={{width:'100%'}}>
Tipo de Operación
<Form.Control
as="select"
onChange={(e) =>
setTipoOperacion(parseInt(e.target.value))
}
value={TipoOperacion}
className="form-select form-select-sm"
>
<option value="0">--Seleccione--</option>
<option value="1">Importacion</option>
<option value="2">Exportacion</option>
</Form.Control>
</Form.Label>
</Col>
</Row>
<Row>
<Col xs={6}>
<Form.Label>
Cliente
<Form.Control
as="select"
id="CmbCliente"
onChange={(e) => {
setIDCliente(parseInt(e.target.value))
}}
value={IDCliente}
className="form-select form-select-sm"
>
<option value="0">-SELECCIONE-</option>
{Clientes
? Clientes.map((c) => {
return (
<option key={c.sClave} value={c.sClave}>
{c.sRazonSocial}
</option>
)
})
: null}
</Form.Control>
</Form.Label>
</Col>
<Col xs={6}>
<Form.Label>
Corresponsal
<Form.Control
as="select"
id="CmbIDCorresponsal"
onChange={(e) => {
setIDCorresponsal(parseInt(e.target.value))
}}
className="form-select form-select-sm"
value={IDCorresponsal}
>
<option value="0">-SELECCIONE-</option>
{Corresponsales
? Corresponsales.map((item, index) => {
return (
<option key={item.id} value={item.id}>
{item.nombre} | {item.patente} | {item.aduana}
</option>
)
})
: ''}
</Form.Control>
</Form.Label>
</Col>
</Row>
</Card.Body>
<Card.Footer style={{textAlign:'end'}}>
<Button variant="primary" title="Quitar archivo cargado" style={{marginRight:'10px'}} onClick={GetExcel}>
Generar Excel
</Button>
</Card.Footer>
</Card>
</Col>
</Row>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -0,0 +1,308 @@
import moment from "moment"
import React, { useEffect } from "react"
import { useState } from "react"
import { Button, Card, Col, Form, ProgressBar, Row } from "react-bootstrap"
import { BsFileEarmarkExcel, BsSearch } from "react-icons/bs"
import DTORptCorresponsalesTraficos from "../../../DTO/Corresponsales/DTORptCorresponsalesTraficos"
import ICatCorresponsales from "../../../Interfaces/Catalogos/ICatCorresponsales"
import IClientes from "../../../Interfaces/Catalogos/IClientes"
import CorresponsalesDataService from '../../../Services/Catalogos/Corresponsales.Services'
import { AgGridReact } from "ag-grid-react"
import { DTOReporteGeneral } from "../../../DTO/Facturacion/DTOReporteGeneral"
import ReportesFacturacionService from "../../../Services/Reportes/ReportesFacturacion.Service"
import ClientesServices from "../../../Services/Catalogos/Clientes.Services"
export const ReporteGeneralFacturacion: React.FC = () => {
const [UserId, setUserId] = useState(() => {
const stickyValue = window.localStorage.getItem('UserId')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const [Data, setData] = useState<DTOReporteGeneral[]>([])
const [filteredData, setFilteredData] = useState<DTOReporteGeneral[]>([])
const [Inicio, setInicio] = useState(currentDate(-365))
const [Fin, setFin] = useState(currentDate(0))
const [Corresponsal, setCorresponsal] = useState(() => {
const stickyValue = window.localStorage.getItem('IdCorresponsal')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const [Clientes, setClientes] = useState<Array<IClientes>>()
const [Cliente, setCliente] = useState(0)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [show, setShowMsg] = useState(false)
const gridRef = React.useRef<any>(null)
const [DataCorresponsales, setDataCorresponsales] = useState<ICatCorresponsales[]>([])
// const [Estado, setEstado] = useState(0)
const [columnDefs] = useState([
{ field: 'trafico', headerName: 'Trafico', minWidth: 70, sortable: true, resizable: true},
{ field: 'corresponsal', headerName: 'Corresponsal', minWidth: 70, sortable: true, resizable: true},
{ field: 'aduana', headerName: 'Aduana', minWidth: 70, sortable: true, resizable: true},
{ field: 'patente', headerName: 'Patente', minWidth: 70, sortable: true, resizable: true},
{ field: 'pedimentoCorresponsal', headerName: 'Pedimento Corresponsal', minWidth: 70, sortable: true, resizable: true},
{ field: 'pedimentoCorresponsalR1', headerName: 'Pedimento Corresponsal R1', minWidth: 70, sortable: true, resizable: true},
{ field: 'fechaPago', headerName: 'Fecha Pago', minWidth: 70, sortable: true, resizable: true},
{ field: 'fechaAnticipo', headerName: 'Fecha Anticipo', minWidth: 70, sortable: true, resizable: true},
{ field: 'sumaAnticipoCorresponsalFinanciado', headerName: 'Suma Anticipo Corresponsal Financiado', minWidth: 70, maxWidth:350, sortable: true, resizable: true},
{ field: 'fechaAlta', headerName: 'Fecha Alta', minWidth: 70, sortable: true, resizable: true},
{ field: 'usuarioAlta', headerName: 'Usuario Alta', minWidth: 70, sortable: true, resizable: true},
{ field: 'cliente', headerName: 'Cliente', minWidth: 70, sortable: true, resizable: true},
{ field: 'nombreCliente', headerName: 'Nombre Cliente', minWidth: 70, sortable: true, resizable: true},
{ field: 'cuenta', headerName: 'Cuenta', minWidth: 70, sortable: true, resizable: true},
{ field: 'tipoOperacion', headerName: 'Tipo Operacion', minWidth: 70, sortable: true, resizable: true},
{ field: 'terminado', headerName: 'Terminado', minWidth: 70, sortable: true, resizable: true},
{ field: 'fechaTerminado', headerName: 'Fecha Terminado', minWidth: 70, sortable: true, resizable: true},
{ field: 'fechaRegistroContabilizar', headerName: 'Fecha Registro Contabilizar', minWidth: 70, sortable: true, resizable: true},
{ field: 'fechaContabilizado', headerName: 'Fecha Contabilizado', minWidth: 70, sortable: true, resizable: true},
{ field: 'fechaFacturaCorresponsal', headerName: 'Fecha Factura Corresponsal', minWidth: 70, sortable: true, resizable: true},
{ field: 'motivoCuentaRechazada', headerName: 'Motivo Cuenta Rechazada', minWidth: 70, sortable: true, resizable: true},
{ field: 'estatusOperacion', headerName: 'Estatus Operacion', minWidth: 70, sortable: true, resizable: true},
{ field: 'cargoShipper', headerName: 'Cargo Shipper', minWidth: 70, sortable: true, resizable: true}
])
function currentDate(days: number): string {
var today = new Date()
today.setDate(today.getDate() + days)
var dd = String(today.getDate()).padStart(2, '0')
var mm = String(today.getMonth() + 1).padStart(2, '0')
var yyyy = today.getFullYear()
return yyyy + '-' + mm + '-' + dd
}
useEffect(() => {
ClientesServices.getAllClientes(0)
.then((response) => {
setClientes(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
CorresponsalesDataService.getAll()
.then((response) => {
setDataCorresponsales(response.data)
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
})
generaReporte()
}, [])
const generaReporte = () => {
const data: DTORptCorresponsalesTraficos = {
Inicio: moment(Inicio).format('YYYY-MM-DD'),
Fin: moment(Fin).format('YYYY-MM-DD'),
TipoOperacion: 0,
NoCliente: Cliente,
IdCorresponsal: Corresponsal,
Pedimento: 0,
Aduana: '0',
Patente: 0,
Proceso: 0,
Modo: 0,
Referencia: ''
}
ReportesFacturacionService
.GetReporteGeneral(data)
.then((response) => {
setData(response.data)
setFilteredData(response.data)
})
.catch((e: Error) => {
return
})
}
const filtraReporte = (e: any) => {
gridRef.current.api.setQuickFilter(e.target.value)
}
const downloadExcel = () => {
const data: DTORptCorresponsalesTraficos = {
Inicio: moment(Inicio).format('YYYY-MM-DD'),
Fin: moment(Fin).format('YYYY-MM-DD'),
TipoOperacion: 0,
NoCliente: 0,
IdCorresponsal: Corresponsal,
Pedimento: 0,
Aduana: '0',
Patente: 0,
Proceso: 0,
Modo: 0,
Referencia: ''
}
ReportesFacturacionService.DownloadExcel(data)
.then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `ReporteFacturacion.xlsx`);
document.body.appendChild(link);
link.click();
})
}
return (
<div>
<Card>
<Card.Body>
<Row>
<Col xs={2}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Buscar
<Form.Control
type='text'
size='sm'
placeholder='Search...'
onChange={(e) => {
filtraReporte(e)
}}
/>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Inicio
<Form.Control
defaultValue={Inicio}
type='date'
name='Inicio'
placeholder='Inicio'
title='Inicio'
alt='Inicio'
data-date-format='YYYY-mm-dd'
onChange={(e) => setInicio(e.target.value)}
size='sm'
/>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Fin
<Form.Control
defaultValue={Fin}
type='date'
name='Fin'
placeholder='Fin'
title='Fin'
alt='Fin'
onChange={(e) => setFin(e.target.value)}
size='sm'
/>
</Form.Label>
</Col>
<Col lg={3}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Corresponsal
<Form.Control
as='select'
onChange={(e) => {
setCorresponsal(parseInt(e.target.value))
}}
className='form-select form-select-sm'
value={Corresponsal}
>
<option value='0'>-SELECCIONE-</option>
{DataCorresponsales
? DataCorresponsales.map((c) => {
return (
<option value={c.id} key={c.id}>
{c.nombre}
</option>
)
})
: null}
</Form.Control>
</Form.Label>
</Col>
<Col lg={3}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Cliente
<Form.Control
as='select'
onChange={(e) => {
setCliente(parseInt(e.target.value))
}}
className='form-select form-select-sm'
value={Cliente}
>
<option value='0'>-SELECCIONE-</option>
{Clientes
? Clientes.map((c) => {
return (
<option value={c.sClave} key={c.sClave}>
{c.sRazonSocial}
</option>
)
})
: null}
</Form.Control>
</Form.Label>
</Col>
</Row>
{/* <Row>
<Col lg={2}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Estado
<Form.Control
as='select'
onChange={(e) => {
setEstado(parseInt(e.target.value))
}}
className='form-select form-select-sm'
value={Estado}
>
<option value='0'>-SELECCIONE-</option>
<option value='3'>NO FACTURADO</option>
<option value='4'>FACTURADO</option>
</Form.Control>
</Form.Label>
</Col>
</Row> */}
<Row style={{paddingTop:'10px'}}>
<Col lg={12} style={{textAlign:'end'}}>
<Button
variant='primary'
size='sm'
onClick={() => {
generaReporte()
}}
style={{marginRight:'5px'}}
>
<BsSearch />
&nbsp; Buscar
</Button>
<Button
size='sm'
variant='success'
onClick={() => {
downloadExcel();
}}
style={{marginRight:'5px'}}
>
<BsFileEarmarkExcel />
&nbsp; Excel
</Button>
</Col>
</Row>
</Card.Body>
</Card>
<br />
<div className='ag-theme-alpine' style={{ height: 500, width: '100%' }}>
<AgGridReact
rowData={filteredData}
columnDefs={columnDefs}
pagination={true}
paginationAutoPageSize={true}
ref={gridRef}
rowSelection={'multiple'}
rowMultiSelectWithClick={true}
></AgGridReact>
</div>
</div>
)
}

@ -85,7 +85,7 @@ export const ReporteGC50: React.FC = () => {
NoCliente: 0,
IdCorresponsal: Corresponsal,
Pedimento: 0,
Aduana: 0,
Aduana: '0',
Patente: 0,
Proceso: 0,
Modo: 0,
@ -114,7 +114,7 @@ export const ReporteGC50: React.FC = () => {
NoCliente: 0,
IdCorresponsal: Corresponsal,
Pedimento: 0,
Aduana: 0,
Aduana: '0',
Patente: 0,
Proceso: 0,
Modo: 0,

@ -0,0 +1,372 @@
import React, { useEffect, useState } from "react"
import { Button, Card, Col, Form, Modal, Row } from "react-bootstrap"
import IClientes from "../../Interfaces/Catalogos/IClientes"
import IRpArchivoElectronicoOficial from "../../Interfaces/Reportes/IRptArchivoElectronicoOficial"
import { VerDocumentos } from "../Reportes/customCells/verDocumentos"
import { MsgInformativo } from "../Utils/Toast/msgInformativo"
import { AgGridReact } from "ag-grid-react"
import { BsSearch, BsFileEarmarkExcel, BsCloudDownload } from "react-icons/bs"
import { RowClickedEvent } from "ag-grid-community"
import IArchivoElectronico from "../../Interfaces/IArchivoElectronico"
import * as XLSX from 'xlsx'
import DTOAEPeriodo from "../../DTO/DTOAEPeriodo"
import ClientesServices from "../../Services/Catalogos/Clientes.Services"
import reportesServices from "../../Services/Reportes/reportes.services"
import loadingImg from '../../images/ajaxloader.gif'
import ArchivoElectronicoServices from "../../Services/Catalogos/ArchivoElectronico.Services"
export const ReporteArchivoElectronico:React.FC = () => {
//const dispatch = useDispatch()
const [UserId, setUserId] = useState(() => {
const stickyValue = window.localStorage.getItem('UserId')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const [Years, setYears] = useState(generateArrayOfYears())
const [Months, setMonths] = useState([
'Enero',
'Febrero',
'Marzo',
'Abril',
'Mayo',
'Junio',
'Julio',
'Agosto',
'Septiembre',
'Octubre',
'Noviembre',
'Diciembre',
])
const [Anio, setAnio] = useState(currentDate(1))
const [Mes, setMes] = useState(currentDate(2))
const [Clientes, setClientes] = useState<Array<IClientes>>()
const [Data, setData] = useState<Array<IRpArchivoElectronicoOficial>>([])
const [filteredData, setFilteredData] = useState<Array<IRpArchivoElectronicoOficial>>([])
const [TipoOperacion, setTipoOperacion] = useState(0)
const [Cliente, setCliente] = useState(0)
const [msgColor, setMsgColor] = React.useState('primary')
const [show, setShowMsg] = useState(false)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [filtro, setFiltro] = useState('')
const [showDialog, setShowDialog] = useState(false)
const gridRef = React.useRef<any>(null)
const [columnDefs] = useState([
{
field: 'referencia',
headerCheckboxSelection: true,
headerCheckboxSelectionFilteredOnly: true,
checkboxSelection: true,
sortable: true,
filter: true,
},
{ field: 'ver documentos', sortable: true, cellRenderer: (params: any) => {return <VerDocumentos referencia={params.data.referencia}/>} },
{ field: 'aduana', sortable: true, filter: true },
{ field: 'patente', sortable: true, filter: true },
{ field: 'pedimento', sortable: true, filter: true },
{ field: 'fechaPago', sortable: true, filter: true },
])
const handleClose = () => setShowDialog(false)
function generateArrayOfYears() {
var max = new Date().getFullYear()
var min = 2020
var years = []
for (var i = max; i >= min; i--) {
years.push(i)
}
return years
}
function currentDate(mode: number): number {
var today = new Date()
var mm = String(today.getMonth() + 1).padStart(2, '0') //January is 0!
var yyyy = today.getFullYear()
return mode === 1 ? yyyy : parseInt(mm)
}
const generaReporte = () => {
if(Anio === 0){
setHeader('Error')
setMsg('Especifique el año de búsqueda.')
setShowMsg(true)
return;
}
if(Mes === 0){
setHeader('Error')
setMsg('Especifique el mes de búsqueda.')
setShowMsg(true)
return;
}
if(Cliente===0 && Clientes!.length > 1){
setHeader('Error')
setMsg('Seleccione una razón social')
setShowMsg(true)
return;
}
const data: DTOAEPeriodo = {
Anio: Anio,
Mes: Mes,
TipoOperacion: TipoOperacion,
NoCliente: Cliente,
}
console.log(JSON.stringify(data))
reportesServices
.getRptArchivoElectronicoOficial(data)
.then((response) => {
setData(response.data)
setFilteredData(response.data)
console.log(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
})
}
const downloadExcel = () => {
exportExcel(Data, 'Reporte archivo electronico oficial')
}
function exportExcel(jsonData: any[], fileName: string): void {
let Heading = [['Referencia', 'Aduana', 'Patente', 'Pedimento', 'Fecha pago']]
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)
}
useEffect(() => {
ClientesServices.getAllClientes(parseInt(UserId))
.then((response) => {
setClientes(response.data)
if(response.data.length === 1)
setCliente(response.data[0].sClave)
})
.catch((e: Error) => {
console.log(e)
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}, [])
/* function getParams(e: RowClickedEvent) {
const data: IArchivoElectronico = {
Referencia: e.data.referencia,
PedimentoLargo:
Anio.toString().substring(2, 2) +
' ' +
e.data.aduana.toString().substring(0, 2) +
' ' +
e.data.patente.toString() +
' ' +
e.data.pedimento.toString(),
NoCliente: Cliente,
IdUsuario: 0,
Archivo: '',
}
console.log('.......................................................' + data)
//dispatch(setArchivoElectronico(data))
} */
const downloadReferences = () => {
setShowDialog(true)
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)
const Referencias = selectedData.map((item: IRpArchivoElectronicoOficial) => item.referencia)
const data = {
Anio: Anio,
Mes: Mes,
NoCliente: Cliente,
TipoOperacion: TipoOperacion,
Referencias: Referencias,
}
console.log(data)
ArchivoElectronicoServices.getZippedReferences(data)
.then((response: any) => {
const url = window.URL.createObjectURL(response.data)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'Archivo Electronico Oficial.zip')
document.body.appendChild(link)
link.click()
setShowDialog(false)
})
.catch((e: Error) => {
console.log(e)
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}
return (
<div>
<Card>
<Card.Body>
<div className='row'>
<div className='col-md-1'></div>
<div className='col-md-1'>
<Form.Select
aria-label='Año'
onChange={(e) => setAnio(parseInt(e.target.value))}
size='sm'
defaultValue={Anio}
>
{Years.map((x, i) => (
<option value={x}>{x}</option>
))}
</Form.Select>
</div>
<div className='col-md-1'>
<Form.Select
aria-label='Mes'
onChange={(e) => setMes(parseInt(e.target.value))}
size='sm'
defaultValue={Mes}
>
<option value='0'>Mes</option>
{Months.map((x, i) => (
<option value={i + 1}>{x}</option>
))}
</Form.Select>
</div>
<div className='col-md-1 right-label'>
<Form.Label>Tipo oper</Form.Label>
</div>
<div className='col-md-1'>
<Form.Control
as='select'
onChange={(e) => setTipoOperacion(parseInt(e.target.value))}
className='form-select form-select-sm'
>
<option value='0'>- Seleccione -</option>
<option value='1'>Importacion</option>
<option value='2'>Exportacion</option>
</Form.Control>
</div>
<div className='col-md-1 right-label'>
<Form.Label>Cliente</Form.Label>
</div>
<div className='col-md-4 form-group'>
<Form.Control
as='select'
onChange={(e) => {
setCliente(parseInt(e.target.value))
}}
className='form-select form-select-sm'
value={Cliente}
>
<option value='0'>-SELECCIONE-</option>
{Clientes
? Clientes.map((c) => {
return c.agrupado === 1 ? <option value={c.sClave}>{c.sRazonSocial}</option> : ''
})
: null}
</Form.Control>
</div>
<div className='col-md-1 right-label'>
<Button
variant='primary'
size='sm'
onClick={() => {
generaReporte()
}}
>
<BsSearch />
Buscar
</Button>
</div>
</div>
<div className='row' style={{ paddingTop: 5 }}>
<div className='col'>&nbsp;</div>
<div className='col-4'>
<Form.Control
type='text'
placeholder='Search...'
size='sm'
onChange={(e) => {
filtraReporte(e)
}}
/>
</div>
<div className='col'>
<Button
size='sm'
variant='success'
onClick={() => {
downloadExcel()
}}
>
<BsFileEarmarkExcel />
&nbsp;Excel
</Button>
&nbsp; &nbsp;
<Button
variant='danger'
size='sm'
onClick={() => {
downloadReferences()
}}
>
<BsCloudDownload />
&nbsp;Descarga
</Button>
</div>
</div>
</Card.Body>
</Card>
<br />
<div className='ag-theme-alpine' style={{ height: 500, width: '100%' }}>
<AgGridReact
rowData={filteredData}
columnDefs={columnDefs}
pagination={true}
paginationAutoPageSize={true}
ref={gridRef}
rowSelection={'multiple'}
rowMultiSelectWithClick={true}
onRowClicked={(e) => {/* getParams(e) */}}
></AgGridReact>
</div>
<MsgInformativo show={show} msg={msg} header={header} msgColor={msgColor} closeToast={() => setShowMsg(false)} />
<Modal show={showDialog} onHide={handleClose} backdrop='static' keyboard={false} size='sm' centered>
<Modal.Header closeButton>
<Modal.Title></Modal.Title>
</Modal.Header>
<Modal.Body>
<img src={loadingImg} style={{ width: '50%', height: '50%' }} alt='proccessing' />
Espere, por favor...
</Modal.Body>
<Modal.Footer></Modal.Footer>
</Modal>
</div>
)
}

@ -63,16 +63,7 @@ export const FileManager: FC<IProps> = (props) => {
const formData = new FormData()
formData.append('name', file.name)
formData.append('file', file)
axios
.post(
URL.get() +
`/FileManager/AppendFileByProcess?IdUsuario=${props.IDUser}&Proceso=${props.IDProcess}&Tags=${props.IdFile}&crud=1`,
formData, {
headers:{
'Authorization': 'Bearer ' + token
}
}
)
FileManagerDataService.AppendFile(formData, props.IDUser, props.IDProcess, props.IdFile)
.then((res) => {
if (res.data.id > 0) {
setArchivo(res.data)

@ -5,8 +5,9 @@ export default interface DTOFiltrosTraficosClientes {
NoCliente: number;
IdCorresponsal: number;
Pedimento: number;
Aduana: number;
Aduana: string;
Patente: number;
Referencia: string;
IdUsuario: number;
Estado: number;
}

@ -1,7 +1,7 @@
export interface DTOPedimentosConsolidados{
id:number
idTrafico: number
aduana: number
aduana: string
patente: number
pedimento: number
clave: string

@ -2,12 +2,12 @@ export default interface DTORectificacionHistorico {
IdTrafico: number,
IdUsuario: number,
IdPedimento: number,
Aduana: number,
Aduana: string,
Patente:number,
Pedimento: number,
Clave: string,
FechaPago: string,
AduanaH: number,
AduanaH: string,
PatenteH: number,
PedimentoH: number,
ClaveH: string,

@ -5,7 +5,7 @@ export default interface DTORptCorresponsalesTraficos {
NoCliente: number;
IdCorresponsal: number;
Pedimento: number;
Aduana: number;
Aduana: string;
Patente: number;
Proceso: number;
Modo: number;

@ -1,6 +1,6 @@
export default interface DTOTraficoCompleto {
id: number,
idUsuario: number,
estatus: number,
pedimentoObligatorio: number,
comentarios: string
}

@ -1,4 +1,4 @@
export interface DTOTraficoSolicitudReapertura{
export interface DTOTraficoSolicitud{
id: number,
idTrafico: number,
idUsuarioSolicita: number,

@ -0,0 +1,48 @@
export interface DTOEstadoCuentaAlen{
id: number,
tipoMovimiento: string
noSerie: string
noMovimiento: string
trafico: string
impexp: string
aduana: string
patente: string
pedimento: string
clave: string
noCliente: string
noCentro: string
subCentro: string
nombre: string
subCtaNombre: string
tipoRangos: string
cargos: string
abonos: string
fecha: string
fechaPedimento: string
fechaRev: string
diasPedimCta: string
diasCtaRev: string
diasRev: string
ivaAl: string
totalFacturado: string
saldoFinal: string
anticipo: string
uuid: string
descripcion: string
remitente: string
pedido: string
tipoMercancia: string
campoAdicional5: string
idPdf:number
pdf: string
idXml:number
xml: number
idNotasCargo: number
notasCargo: string
programado: boolean
serie: string
idOrdenCompra: number
ordenCompra: string
idObservaciones: number
observaciones: string
}

@ -0,0 +1,11 @@
export interface DTOEstadoCuentaAlenFilters{
Trafico: string,
Impexp: string,
Aduana: string,
Patente: string,
Pedimento: string,
Inicio: string,
Fin: string,
Remitente: string,
Programado: number
}

@ -0,0 +1,29 @@
export interface DTOReporteGeneral{
trafico: string;
corresponsal: string;
aduana: string;
patente: number;
pedimentoCorreponsal: string;
pedimentoCorresponsalR1: string;
fechaPago: string;
fechaAnticipo: string;
sumaanticipoCorresponsalFinanciado: number;
fechaAlta: string;
usuarioAlta: string;
cliente: number;
nombrecliente:number;
cuenta: string;
tipoOperacion: string;
terminado: string;
fechaRegistroContabilizar: string;
fechaContabilizado: string;
fechaFacturado: string;
fechaFacturaCorresponsal: string;
fechaCruce: string;
motivoCuentaRechazadaContabilidad: string;
motivoCuentaRechazadaFacturacion: string;
motivoSolicitaReapertura: string;
solicitudReaperturaAutorizada: string;
estatusOperacion: string;
cargoShipper: string;
}

@ -0,0 +1,21 @@
export interface DTOReporteCuentasCerradas{
Trafico: string,
TipoOperacion: string,
Cliente: string,
Proveedor: string,
Corresponsal: string,
Aduana: string,
Patente: string,
Pedimento: string,
FechaPago: string,
Facturas: string,
Descripcion: string,
FechaAlta: string,
Clave: string,
ValorMn: string,
ValorDls: string,
TipoCambio: string,
ValorComercial: string,
Fracciones: string,
Caja: string
}

@ -1,7 +1,7 @@
export interface DTOReporteGC50{
trafico: string;
corresponsal: string;
aduana: number;
aduana: string;
patente: number;
pedimentoCorreponsal: string;
pedimentoCorresponsalR1: string;

@ -2,6 +2,6 @@ export default interface ICatCorresponsales {
id: number;
nombre: string;
patente: number,
aduana: number;
aduana: string;
correos: string
}

@ -0,0 +1,4 @@
export interface ICatTiposContenedores{
id: number;
descripcion: number;
}

@ -2,4 +2,7 @@ export default interface ITabulador {
id: number,
idCliente: number
nombre: string
idCorresponsal?: number
tipo: number
moneda: number
}

@ -5,4 +5,5 @@ export default interface ITabuladorConceptos {
concepto: string,
costo: number,
activo: number
costoCorresponsal:number
}

@ -4,5 +4,6 @@ export default interface ICorresponsalContenedores {
idTrafico: number,
fSemaforo: string,
semaforo: number,
idTipoContenedor: number,
activo?: boolean
}

@ -2,7 +2,7 @@ export default interface ICorresponsalRectificacionHistorico {
id: number
usuario: number
idTrafico: number
aduana: number
aduana: string
patente: number
pedimento: number
clave: string

@ -12,7 +12,7 @@ export default interface ICorresponsalTrafico {
kilos?: number
estatus?: number
trafico?: string
aduana?: number
aduana?: string
patente?: number
pedimento?: number
clave?: string
@ -45,4 +45,6 @@ export default interface ICorresponsalTrafico {
causaRectificacion: string,
totalHonorariosAA: number;
totalGastosTerceros: number;
tieneSolicitud: number;
pedimentoObligatorio: number;
}

@ -1,4 +1,4 @@
export interface ICorresponsalTraficoSolicitudReapertura{
export interface ICorresponsalTraficoSolicitud{
id:number,
idTrafico: number,
idUsuarioSolicita: number,

@ -1,5 +1,5 @@
export default interface IReporteOperacionesNewell{
aduana: number; patente: number; pedimento: number; fechaDeEntrada: string|Date; fechaDePago: string|Date;
aduana: string; patente: number; pedimento: number; fechaDeEntrada: string|Date; fechaDePago: string|Date;
valorComercialMxn: number; valorComercialDlls: number; valorAduana: number; clave: string; iva: number;
dta: number; prv: number; lgi: number; factura: string; tc: number; proveedor: string; taxId: number; producto: string;
gc:number; contenedor: string; cuentaDeGastos: string; razon: string; maniobras: number;

@ -8,7 +8,7 @@ import http from "../common/http-common";
class ArchivoElectronicoDataService {
getFile(data: IArchivoElectronico) {
/* getFile(data: IArchivoElectronico) {
return http.get<Blob>(`/ArchivoElectronico/getFile`, { params: data })
}
getFileList(data: IArchivoElectronico) {
@ -55,6 +55,16 @@ class ArchivoElectronicoDataService {
.catch(function (error) {
console.log(error)
})
}
} */
getZippedReferences(data : DTOAEPeriodo) {
return http.post<Blob>("/ArchivoElectronico/DownloadZippedArchivosOficiales", data, {responseType: 'blob'})
.then(function (response) {
return response
})
.catch(function (error) {
console.log(error)
})
}
}
export default new ArchivoElectronicoDataService();

@ -35,7 +35,11 @@ class ClientesDataService {
}
GetTraficos(data: DTOFiltrosTraficosClientes){
return http.get<ICorresponsalTrafico[]>(`/Clientes/Traficos?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Referencia=${data.Referencia}&IdUsuario=${data.IdUsuario}`)
return http.get<ICorresponsalTrafico[]>(`/Clientes/Traficos?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Referencia=${data.Referencia}&IdUsuario=${data.IdUsuario}&Estado=${data.Estado}`)
}
GetExcel(data: DTOFiltrosTraficosClientes){
return http.get(`/Clientes/Excel?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Referencia=${data.Referencia}&IdUsuario=${data.IdUsuario}&Estado=${data.Estado}`,{responseType: 'blob'})
}
}
export default new ClientesDataService();

@ -0,0 +1,10 @@
import http from "../common/http-common";
import { ICatTiposContenedores } from "../../Interfaces/Catalogos/ICatTiposContenedores";
class CatTiposContenedoresService{
getAll(){
return http.get<ICatTiposContenedores[]>('/Catalogos/CatTiposContenedores/');
}
}
export default new CatTiposContenedoresService();

@ -10,8 +10,8 @@ class Corresponsales_Tabuladores_DataService {
GetAll() {
return http.get<ITabulador[]>(`/Catalogos/Tabulador/getAll?id=0&IdCliente=0`);
}
GetByCustomer(IdCliente: number) {
return http.get<ITabulador[]>(`/Catalogos/Tabulador/getAll?IdCliente=${IdCliente}`);
GetByCustomer(IdCliente: number, IdCorresponsal: number | null) {
return http.get<ITabulador[]>(`/Catalogos/Tabulador/getAll?IdCliente=${IdCliente}&IdCorresponsal=${IdCorresponsal}`);
}
Append(data: ITabulador) {
return http.post<ITabulador>("/Catalogos/Tabulador/Append", data);

@ -7,8 +7,6 @@ import IRespuesta from "../../Interfaces/IRespuesta";
import ICorresponsalRectificacionHistorico from "../../Interfaces/Corresponsales/ICorresponsalRectificacionHistorico";
import DTORectificacionHistorico from "../../DTO/Corresponsales/DTORectificacionHistorico";
import IReporteOperacionesNewell from "../../Interfaces/ReportesClientes/IReporteOperacionesNewell";
import { ICorresponsalTraficoSolicitudReapertura } from "../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitudReapertura";
import { DTOTraficoSolicitudReapertura } from "../../DTO/Corresponsales/DTOTraficoSolicitudReapertura";
class Corresponsales_Trafico_DataService {
GetAll(id: number) {
@ -41,17 +39,11 @@ class Corresponsales_Trafico_DataService {
return http.get<ICorresponsalRectificacionHistorico[]>(`Corresponsalias/Traficos/Rectificacion/Historico/Get?IdTrafico=${IdTrafico}`);
}
ValidaTraficoDuplicado(aduana: number | undefined, patente: number | undefined, pedimento:number | undefined, IdTrafico: number | undefined){
ValidaTraficoDuplicado(aduana: string | undefined, patente: number | undefined, pedimento:number | undefined, IdTrafico: number | undefined){
return http.get<String>(`Corresponsalias/Traficos/Duplicado?aduana=${aduana}&patente=${patente}&pedimento=${pedimento}&idTrafico=${IdTrafico}`)
}
AppendFacturasContenedoresAlen(idTrafico:number, fileId:number){
return http.post(`/Corresponsalias/Traficos/Append/LayoutAlen?idTrafico=${idTrafico}&fileId=${fileId}`);
}
AppendSolicitudReapertura(solicitud: ICorresponsalTraficoSolicitudReapertura){
return http.post<ICorresponsalTraficoSolicitudReapertura>(`/Corresponsalias/Traficos/Solicitud/Append`, solicitud)
}
GetSolicitudReapertura(idTrafico: number){
return http.get<DTOTraficoSolicitudReapertura>(`/Corresponsalias/Traficos/Solicitud?idTrafico=${idTrafico}`)
}
}
export default new Corresponsales_Trafico_DataService();

@ -0,0 +1,19 @@
import { DTOTraficoSolicitud } from "../../DTO/Corresponsales/DTOTraficoSolicitud"
import { ICorresponsalTraficoSolicitud } from "../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitud"
import http from "../common/http-common";
class TraficoSolicitudServices {
AppendSolicitudReapertura(solicitud: ICorresponsalTraficoSolicitud){
return http.post<ICorresponsalTraficoSolicitud>(`/Corresponsalias/Solicitudes/Reapertura/Append`, solicitud)
}
AppendSolicitudEliminarReferencia(solicitud: ICorresponsalTraficoSolicitud){
return http.post<ICorresponsalTraficoSolicitud>(`/Corresponsalias/Solicitudes/EliminarCuenta/Append`, solicitud)
}
GetSolicitudReapertura(idTrafico: number){
return http.get<DTOTraficoSolicitud>(`/Corresponsalias/Solicitudes/Reapertura/Get?idTrafico=${idTrafico}`)
}
GetSolicitudEliminarReferencia(idTrafico: number){
return http.get<DTOTraficoSolicitud>(`/Corresponsalias/Solicitudes/EliminarCuenta/Get?idTrafico=${idTrafico}`)
}
}
export default new TraficoSolicitudServices()

@ -2,11 +2,17 @@ import http from "../common/http-common";
import DashboardCorresponsales from "../../Interfaces/Dashboard/DashboardCorresponsales";
class Dashboard_Corresponsales_DataService {
getDisk() {
return http.get<DashboardCorresponsales>(`/Dashboard/Corresponsales/GetDiskUsage`);
}
getCorresponsales() {
return http.get<DashboardCorresponsales[]>(`/Dashboard/Corresponsales/Get`);
}
getTipoCambio(Fecha: string) {
return http.get<number>(`/Dashboard/Corresponsales/GetTipoCambio?Fecha=${Fecha}`);
}
getSolicitudesEliminarCuenta(){
return http.get<DashboardCorresponsales>(`/Dashboard/Corresponsales/SolicitudesEliminarCuenta`);
}
}
export default new Dashboard_Corresponsales_DataService();

@ -0,0 +1,41 @@
import { DTOEstadoCuentaAlen } from "../../DTO/EstadosCuenta/DTOEstadoCuentaAlen";
import { DTOEstadoCuentaAlenFilters } from "../../DTO/EstadosCuenta/DTOEstadosCuentaAlenFilters";
import http from "../common/http-common";
class EstadosCuentaAlenService {
Append(formData: FormData){
return http.post<DTOEstadoCuentaAlen[]>(`ReporteEstadosCuentaAlen/Append`,formData,{
headers:{
"Content-Type":'multipart/form-data'
}
})
}
AppendOrdenCompra(data:DTOEstadoCuentaAlen){
return http.post<DTOEstadoCuentaAlen[]>(`ReporteEstadosCuentaAlen/AppendOrdenCompra`,data)
}
AppendObservaciones(data:DTOEstadoCuentaAlen){
return http.post<DTOEstadoCuentaAlen[]>(`ReporteEstadosCuentaAlen/AppendObservaciones`,data)
}
AppendProgramacionesPago(formData: FormData){
return http.post<DTOEstadoCuentaAlen[]>(`ReporteEstadosCuentaAlen/AppendProgramacionesPago`,formData,{
headers:{
"Content-Type":'multipart/form-data'
}
})
}
GetAll(filters: DTOEstadoCuentaAlenFilters){
return http.get<DTOEstadoCuentaAlen[]>(`ReporteEstadosCuentaAlen/GetAll`, {
params:filters
})
}
ExportEstadosCuenta(cuentas: DTOEstadoCuentaAlen[]){
return http.post(`ReporteEstadosCuentaAlen/Export`, cuentas, {responseType: 'arraybuffer'})
}
}
export default new EstadosCuentaAlenService();

@ -0,0 +1,8 @@
import http from "../common/http-common";
class ReporteGC50Service{
DownloadExcel(Inicio: string, Fin: string, TipoOperacion: number, NoCliente: number, IdCorresponsal: number){
return http.get(`ReporteCuentasCerradas/GetExcel?Inicio=${Inicio}&Fin=${Fin}&TipoOperacion=${TipoOperacion}&NoCliente=${NoCliente}&IdCorresponsal=${IdCorresponsal}`, {responseType: 'blob'});
}
}
export default new ReporteGC50Service();

@ -0,0 +1,16 @@
import http from "../common/http-common";
import DTORptCorresponsalesTraficos from "../../DTO/Corresponsales/DTORptCorresponsalesTraficos";
import { DTOReporteGeneral } from "../../DTO/Facturacion/DTOReporteGeneral";
class ReportesFacturacionService{
GetReporteGeneral(data: DTORptCorresponsalesTraficos){
return http.get<DTOReporteGeneral[]>(`ReportesFacturacion/CuentasFacturadas?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Proceso=${data.Proceso}&Modo=${data.Modo}`)
}
DownloadExcel(data: DTORptCorresponsalesTraficos){
return http.get(`ReportesFacturacion/FacturacionExcel?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Proceso=${data.Proceso}&Modo=${data.Modo}`, {responseType: 'blob'});
}
}
export default new ReportesFacturacionService()

@ -3,9 +3,20 @@ import IRespuesta from "../../Interfaces/IRespuesta";
import IFileManager from "../../Interfaces/Utils/IFileManager";
class FileManagerDataService {
AppendFile(formData: FormData, IDUser: number, IDProcess: number, IdFile: number){
return http.post(`/FileManager/AppendFileByProcess?IdUsuario=${IDUser}&Proceso=${IDProcess}&Tags=${IdFile}&crud=1`, formData,
{
headers:{
"Content-Type":'multipart/form-data'
},
maxContentLength: Infinity,
maxBodyLength: Infinity
}
)
}
getFileContent(id: number, Proceso: number) {
return http.get<ArrayBuffer>(`/FileManager/getFile?id=${id}&proceso=${Proceso}`, {responseType: 'arraybuffer'})
return http.get(`/FileManager/getFile?id=${id}&proceso=${Proceso}`, {responseType: 'arraybuffer'})
.then(function (response) {
return response
})
@ -40,6 +51,18 @@ class FileManagerDataService {
console.log(error)
})
}
getFileListByreferencia(referencia: string) {
return http.get<IFileManager[]>(`/FileManager/FileListByReferencia?Referencia=${referencia}`)
}
getAEO(serie: string, noMovimiento: string, mime: string, trafico: string) {
return http.get(`/FileManager/GetAEO?serie=${serie}&noMovimiento=${noMovimiento}&fileMime=${mime}&trafico=${trafico}`, {responseType: 'arraybuffer'})
.then(function (response) {
return response
})
.catch(function (error) {
console.log(error)
})
}
}
export default new FileManagerDataService();

@ -29,6 +29,10 @@ import { ReporteGC50 } from './Components/ReportesClientes/GC50/ReporteGC50'
import RptClientesTraficos from './Components/Clientes/Traficos/RptClientesTraficos'
import { RelacionFacturas } from './Components/ReportesClientes/Alen/RelacionFacturas'
import { ReporteFacturasConsolidados } from './Components/ReportesClientes/Alen/ReporteFacturasConsolidados'
import { CuentasCerradas } from './Components/ReportesClientes/CuentasCerradas.tsx/CuentasCerradas'
import { ReporteArchivoElectronico } from './Components/ReportesClientes/ReporteArchivoElectronico'
import { EstadosCuenta } from './Components/EstadosCuenta/EstadosCuenta'
import { ReporteGeneralFacturacion } from './Components/ReportesClientes/Facturacion/ReporteGeneral'
require (`./css/${process.env.REACT_APP_ENVIRONMENT}-home.css`)
function PageNotFound() {
@ -65,10 +69,10 @@ root.render(
/>
}
/>
<Route
{/* <Route
path="/DashboardCorresponsales"
element={<DashboardCorresponsales />}
/>
/> */}
<Route path="/Dashboard" element={<Dashboard />} />
<Route
path="/RptCorresponsalesTraficos/:proc/:modo"
@ -86,10 +90,13 @@ root.render(
<Route path='/Reportes/Newell/Semanal' element={<ReporteSemanalNewell/>}/>
<Route path='/Reportes/Newell/Mensual' element={<ReporteMensualNewell/>}/>
<Route path='/Reportes/GC50' element={<ReporteGC50/>}/>
<Route path='/Reportes/CuentasCerradas' element={<CuentasCerradas/>}/>
<Route path='/Reportes/Alen' element={<Outlet/>}>
<Route path='/Reportes/Alen/RelacionFacturas' element={<RelacionFacturas/>}/>
<Route path='/Reportes/Alen/FacturasConsolidados' element={<ReporteFacturasConsolidados/>}/>
</Route>
<Route path='/Reportes/ArchivoElectronico/' element={<ReporteArchivoElectronico/>}/>
<Route path='/Reportes/Facturacion/ReporteGeneral/' element={<ReporteGeneralFacturacion/>}/>
</Route>
<Route path="Clientes" element={<Outlet/>}>{/*Aqui van todas las rutas relacionadas a los clientes */}
<Route path='/Clientes/Reportes/' element={<ClientesExternos/>}>{/*Aqui van todas las rutas relacionadas a los reportes de los clientes*/}
@ -98,6 +105,7 @@ root.render(
</Route>
</Route>
<Route path='/Clientes/Traficos/' element={<RptClientesTraficos/>}/>
<Route path='/Clientes/EstadosCuenta/' element={<EstadosCuenta/>}/>
</Route>
</Route>
</Routes>

@ -1,6 +1,6 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import ICatCorresponsales from '../../../Interfaces/Catalogos/ICatCorresponsales';
const CatCorresponsales: ICatCorresponsales[] = [{id:0, nombre:'-Seleccione-', patente:0, aduana:0, correos:''}]
const CatCorresponsales: ICatCorresponsales[] = [{id:0, nombre:'-Seleccione-', patente:0, aduana:'0', correos:''}]
const initialState = { CatCorresponsales }
export const CatCorresponsalesSlice = createSlice({

@ -0,0 +1,21 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { ICatTiposContenedores } from '../../../Interfaces/Catalogos/ICatTiposContenedores'
const CatTiposContenedores: ICatTiposContenedores[] = []
const initialState = {CatTiposContenedores}
export const CatTiposContenedoresSlice = createSlice({
name: 'CatTiposContenedores',
initialState: initialState,
reducers: {
populateCatTiposContenedores : (state, action: PayloadAction<ICatTiposContenedores[]>) => {
state.CatTiposContenedores = []
state.CatTiposContenedores.push(... action.payload)
},
}
})
export const {
populateCatTiposContenedores,
} = CatTiposContenedoresSlice.actions;
export default CatTiposContenedoresSlice.reducer;

@ -1,6 +1,6 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import ICorresponsalContenedores from '../../../Interfaces/Corresponsales/ICorresponsalContenedores';
const CorresponsalesContenedores: ICorresponsalContenedores[] = [{id:0, contenedor:'-Seleccione-', idTrafico:0, fSemaforo:'', semaforo:0}]
const CorresponsalesContenedores: ICorresponsalContenedores[] = [{id:0, contenedor:'-Seleccione-', idTrafico:0, fSemaforo:'', semaforo:0, idTipoContenedor:0}]
const initialState = { CorresponsalesContenedores }
export const CorresponsalesContenedoresSlice = createSlice({
@ -26,7 +26,7 @@ export const CorresponsalesContenedoresSlice = createSlice({
},
InitCorresponsalesContenedores : (state, action: PayloadAction<number>) => {
//state.CorresponsalesContenedores.splice(0,state.CorresponsalesContenedores.length-1)
state.CorresponsalesContenedores=[{id:0, contenedor:'-Seleccione-', idTrafico:0, fSemaforo:'', semaforo:0}]
state.CorresponsalesContenedores=[{id:0, contenedor:'-Seleccione-', idTrafico:0, fSemaforo:'', semaforo:0, idTipoContenedor:0}]
},
addTxtContenedores: (state, action: PayloadAction<ICorresponsalContenedores[]>) => {
const newArr = [...state.CorresponsalesContenedores, ...action.payload]

@ -14,7 +14,7 @@ const CorresponsalesTrafico: ICorresponsalTrafico[] = [{
kilos: 0,
estatus: 0,
trafico: '',
aduana: 0,
aduana: '0',
patente: 0,
pedimento: 0,
clave: '',
@ -46,7 +46,9 @@ const CorresponsalesTrafico: ICorresponsalTrafico[] = [{
cargoA: 0,
causaRectificacion: '',
totalHonorariosAA: 0,
totalGastosTerceros: 0
totalGastosTerceros: 0,
tieneSolicitud: 0,
pedimentoObligatorio: 1
}]
const initialState = { CorresponsalesTrafico }

@ -2,7 +2,8 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import type { RootState } from '../../store'
const initialState = {
value: false
isLogged: false,
isAlenUser: false,
}
export const userStatusSlice = createSlice({
@ -10,11 +11,15 @@ export const userStatusSlice = createSlice({
initialState,
reducers: {
logued: (state, action: PayloadAction<boolean>) => {
state.value = action.payload;
state.isLogged = action.payload;
},
IsAlenUser: (state, action: PayloadAction<boolean>) => {
state.isAlenUser = action.payload;
}
},
})
export const { logued } = userStatusSlice.actions;
export const selectuserStatus = (state: RootState) => state.userStatus.value
export const { IsAlenUser } = userStatusSlice.actions;
//export const selectuserStatus = (state: RootState) => state.userStatus.value
export default userStatusSlice.reducer;

@ -12,6 +12,7 @@ import CorresponsalesPartidasSlice from './features/Corresponsales/Corresponsale
import CorresponsalesCuentasComplementariasEstatusSlice from './features/Corresponsales/CorresponsalesCuentasComplementariasEstatusSlice'
import PedimentosConsolidadosSlice from './features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice'
import RectificacionesPedimentosSlice from './features/Corresponsales/CorresponsalesPedimentosRectificacionesSlice'
import CatTiposContenedoresSlice from './features/CatTiposContenedores/CatTiposContenedoresSlice'
export const store = configureStore({
@ -28,7 +29,8 @@ export const store = configureStore({
CPartidas: CorresponsalesPartidasSlice,
CCueCompEstatus : CorresponsalesCuentasComplementariasEstatusSlice,
CPedimentosConsolidados: PedimentosConsolidadosSlice,
CRectificaciones: RectificacionesPedimentosSlice
CRectificaciones: RectificacionesPedimentosSlice,
CTiposContenedores : CatTiposContenedoresSlice
}
})

Loading…
Cancel
Save