Compare commits

..

No commits in common. 'main' and 'feature/ConsolidarPedimentos_20231229' have entirely different histories.

  1. 2
      package.json
  2. 9
      src/App.tsx
  3. 19
      src/Classes/Corresponsales/CCorresponsalesTrafico.ts
  4. 32
      src/Components/Catalogos/CatCorresponsales/CatCorresponsales.tsx
  5. 2
      src/Components/Catalogos/CatCorresponsales/ControlledInput/ControlledInput.tsx
  6. 340
      src/Components/Catalogos/CatTabulador/CatTabulador.tsx
  7. 107
      src/Components/Clientes/Traficos/RptClientesTraficos.tsx
  8. 672
      src/Components/Clientes/Traficos/TraficoCliente.tsx
  9. 4
      src/Components/Corresponsales/Anticipos/Anticipos.tsx
  10. 1
      src/Components/Corresponsales/Contenedores/Contenedores.tsx
  11. 1
      src/Components/Corresponsales/Contenedores/ControlledInput/ControlledInput.tsx
  12. 118
      src/Components/Corresponsales/Contenedores/FacturasContenedor.tsx
  13. 115
      src/Components/Corresponsales/Contenedores/SelectContainer.tsx
  14. 17
      src/Components/Corresponsales/CuentasComplementarias/CuentasComplementarias.tsx
  15. 153
      src/Components/Corresponsales/PedimentosConsolidados/PedimentosConsolidados.tsx
  16. 53
      src/Components/Corresponsales/ProveedorFactura/ControlledInput/ControlledInput.tsx
  17. 151
      src/Components/Corresponsales/ProveedorFactura/ProveedorFactura.tsx
  18. 85
      src/Components/Corresponsales/Rectificaciones/HistorialRectificaciones.tsx
  19. 382
      src/Components/Corresponsales/Rectificaciones/NuevaRectificacion.tsx
  20. 154
      src/Components/Corresponsales/SolicitudReapertura/AutorizarSolicitud.tsx
  21. 119
      src/Components/Corresponsales/SolicitudReapertura/CrearSolicitud.tsx
  22. 25
      src/Components/Corresponsales/Tabulador/Tabulador.tsx
  23. 680
      src/Components/Corresponsales/TraficoCorresponsales.tsx
  24. 26
      src/Components/Dashboard/Dashboard.tsx
  25. 125
      src/Components/Dashboard/DashboardClientes.tsx
  26. 14
      src/Components/Dashboard/DashboardContabilidad.tsx
  27. 36
      src/Components/Dashboard/DashboardCorresponsales.tsx
  28. 63
      src/Components/Dashboard/DashboardFacturacion.tsx
  29. 125
      src/Components/Dashboard/DashboardSistemas.tsx
  30. 517
      src/Components/EstadosCuenta/EstadosCuenta.tsx
  31. 26
      src/Components/Login/login.tsx
  32. 3
      src/Components/Logout/logout.tsx
  33. 195
      src/Components/Reportes/ArchivoElectronico/DialogAE.tsx
  34. 102
      src/Components/Reportes/RptCorresponsalesTraficos.tsx
  35. 2
      src/Components/Reportes/RptCorresponsalesTraficosHst.tsx
  36. 42
      src/Components/Reportes/customCells/ClienteProgressBar.tsx
  37. 41
      src/Components/Reportes/customCells/verDocumentos.tsx
  38. 64
      src/Components/ReportesClientes/Alen/RelacionFacturas.tsx
  39. 71
      src/Components/ReportesClientes/Alen/ReporteFacturasConsolidados.tsx
  40. 210
      src/Components/ReportesClientes/CuentasCerradas.tsx/CuentasCerradas.tsx
  41. 308
      src/Components/ReportesClientes/Facturacion/ReporteGeneral.tsx
  42. 4
      src/Components/ReportesClientes/GC50/ReporteGC50.tsx
  43. 372
      src/Components/ReportesClientes/ReporteArchivoElectronico.tsx
  44. 15
      src/Components/Utils/FileManager/FileManager.tsx
  45. 3
      src/DTO/Corresponsales/DTOFiltrosTraficosClientes.ts
  46. 2
      src/DTO/Corresponsales/DTOPedimentosConsolidados.ts
  47. 13
      src/DTO/Corresponsales/DTORectificacionHistorico.ts
  48. 2
      src/DTO/Corresponsales/DTORptCorresponsalesTraficos.ts
  49. 2
      src/DTO/Corresponsales/DTOTraficoCompleto.ts
  50. 9
      src/DTO/Corresponsales/DTOTraficoSolicitud.ts
  51. 48
      src/DTO/EstadosCuenta/DTOEstadoCuentaAlen.ts
  52. 11
      src/DTO/EstadosCuenta/DTOEstadosCuentaAlenFilters.ts
  53. 29
      src/DTO/Facturacion/DTOReporteGeneral.ts
  54. 21
      src/DTO/Reportes/CuentasCerradas/DTOReporteCuentasCerradas.ts
  55. 2
      src/DTO/Reportes/GC50/DTOReporteGC50.ts
  56. 2
      src/Interfaces/Catalogos/ICatCorresponsales.ts
  57. 4
      src/Interfaces/Catalogos/ICatTiposContenedores.ts
  58. 3
      src/Interfaces/Catalogos/ITabulador.ts
  59. 1
      src/Interfaces/Catalogos/ITabuladorConceptos.ts
  60. 1
      src/Interfaces/Corresponsales/ICorresponsalContenedores.ts
  61. 6
      src/Interfaces/Corresponsales/ICorresponsalFacturas.ts
  62. 5
      src/Interfaces/Corresponsales/ICorresponsalRectificacionHistorico.ts
  63. 4
      src/Interfaces/Corresponsales/ICorresponsalTrafico.ts
  64. 5
      src/Interfaces/Corresponsales/ICorresponsalTraficoContabilidad.ts
  65. 11
      src/Interfaces/Corresponsales/ICorresponsalTraficoSolicitud.ts
  66. 2
      src/Interfaces/ReportesClientes/IReporteOperacionesNewell.ts
  67. 12
      src/Services/Catalogos/ArchivoElectronico.Services.ts
  68. 6
      src/Services/Catalogos/Clientes.Services.ts
  69. 10
      src/Services/Catalogos/TiposContenedores.Service.ts
  70. 7
      src/Services/Contabilidad/Contabilidad.Corresponsalias.Services.ts
  71. 3
      src/Services/Corresponsalias/Corresponsales.Facturas.Services.ts
  72. 4
      src/Services/Corresponsalias/Corresponsales.Tabuladores.Services.ts
  73. 9
      src/Services/Corresponsalias/Corresponsales.Trafico.Services.ts
  74. 19
      src/Services/Corresponsalias/Corresponsales.Trafico.Solicitud.Service.ts
  75. 6
      src/Services/Dashboard/Dashboard.Corresponsales.Services.ts
  76. 3
      src/Services/Dashboard/Dashboard.Facturacion.Service.ts
  77. 41
      src/Services/EstadosCuenta/EstadosCuentaAlen.Service.ts
  78. 8
      src/Services/Reportes/ReporteCuentasCerradas.Service.ts
  79. 13
      src/Services/Reportes/ReportesAlen.Service.ts
  80. 16
      src/Services/Reportes/ReportesFacturacion.Service.ts
  81. 25
      src/Services/Utils/FileManager.Services.ts
  82. 15
      src/css/generic01.css
  83. 18
      src/index.tsx
  84. 2
      src/store/features/CatCorresponsales/CatCorresponsalesSlice.ts
  85. 21
      src/store/features/CatTiposContenedores/CatTiposContenedoresSlice.ts
  86. 4
      src/store/features/Corresponsales/CorresponsalesContenedoresSlice.ts
  87. 18
      src/store/features/Corresponsales/CorresponsalesFacturasSlice.ts
  88. 40
      src/store/features/Corresponsales/CorresponsalesPedimentosRectificacionesSlice.ts
  89. 6
      src/store/features/Corresponsales/CorresponsalesTraficoSlice.ts
  90. 11
      src/store/features/userStatusSlice/userStatusSlice.ts
  91. 6
      src/store/store.ts

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

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

@ -14,7 +14,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
kilos?: number kilos?: number
estatus?: number estatus?: number
trafico?: string trafico?: string
aduana?: string aduana?: number
patente?: number patente?: number
pedimento?: number pedimento?: number
clave?: string clave?: string
@ -47,8 +47,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
causaRectificacion: string; causaRectificacion: string;
totalHonorariosAA: number; totalHonorariosAA: number;
totalGastosTerceros: number; totalGastosTerceros: number;
tieneSolicitud: number;
pedimentoObligatorio: number;
constructor() { constructor() {
this.id=0 this.id=0
this.folioGemco='' this.folioGemco=''
@ -63,7 +62,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
this.kilos=0 this.kilos=0
this.estatus=0 this.estatus=0
this.trafico='' this.trafico=''
this.aduana='0' this.aduana=0
this.patente=0 this.patente=0
this.pedimento=0 this.pedimento=0
this.clave='' this.clave=''
@ -96,8 +95,6 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
this.causaRectificacion = '' this.causaRectificacion = ''
this.totalHonorariosAA = 0 this.totalHonorariosAA = 0
this.totalGastosTerceros = 0 this.totalGastosTerceros = 0
this.tieneSolicitud = 0
this.pedimentoObligatorio = 1
} }
public getEmptyObject(): ICorresponsalTrafico { public getEmptyObject(): ICorresponsalTrafico {
@ -115,7 +112,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
kilos :0, kilos :0,
estatus :0, estatus :0,
trafico :'', trafico :'',
aduana :'0', aduana :0,
patente :0, patente :0,
pedimento :0, pedimento :0,
clave :'', clave :'',
@ -147,9 +144,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
cargoA: 0, cargoA: 0,
causaRectificacion: '', causaRectificacion: '',
totalHonorariosAA: 0, totalHonorariosAA: 0,
totalGastosTerceros: 0, totalGastosTerceros: 0
tieneSolicitud: 0,
pedimentoObligatorio: 1
} }
} }
@ -200,9 +195,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
cargoA: data.cargoA, cargoA: data.cargoA,
causaRectificacion: data.causaRectificacion, causaRectificacion: data.causaRectificacion,
totalHonorariosAA: data.totalHonorariosAA, 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 [IDCorresponsal, setIDCorresponsal] = useState(0)
const [Nombre, setNombre] = useState('') const [Nombre, setNombre] = useState('')
const [Patente, setPatente] = useState(0) const [Patente, setPatente] = useState(0)
const [Aduana, setAduana] = useState('0') const [Aduana, setAduana] = useState(0)
const [Correos, setCorreos] = useState('') const [Correos, setCorreos] = useState('')
useEffect(() => { useEffect(() => {
@ -113,7 +113,7 @@ export const CatCorresponsales: FC<IProps> = (props) => {
setShowMsg(true) setShowMsg(true)
return false return false
} }
if (Aduana === '' || Aduana === '0' || Aduana === ' ' || Aduana === undefined || Aduana === null || Aduana.length < 3) { if (Aduana < 99) {
setHeader('Error!') setHeader('Error!')
setMsgColor('danger') setMsgColor('danger')
setMsg('La aduana debe tener 3 digitos') setMsg('La aduana debe tener 3 digitos')
@ -149,7 +149,7 @@ export const CatCorresponsales: FC<IProps> = (props) => {
setId(0) setId(0)
setNombre('') setNombre('')
setPatente(0) setPatente(0)
setAduana('') setAduana(0)
} }
const deleteItem = () => { const deleteItem = () => {
@ -279,20 +279,34 @@ export const CatCorresponsales: FC<IProps> = (props) => {
<Form.Label>Aduana</Form.Label> <Form.Label>Aduana</Form.Label>
</Col> </Col>
<Col> <Col>
<Form.Control <CurrencyFormat
value={Aduana} value={Aduana}
onChange={(e) => { displayType={Depto === 'Corresponsalias' ? 'input' : 'text'}
setAduana(e.target.value) onValueChange={(values: any) => {
const { formattedValue, value } = values
setAduana(value)
}} }}
style={{ style={
Depto === 'Corresponsalias'
? {
fontSize: '18px', fontSize: '18px',
backgroundColor: '#F5FFED', backgroundColor: '#F5FFED',
border: '2px solid #25D05B', border: '2px solid #25D05B',
width: '60px', width: '60px',
textAlign: 'right', textAlign: 'right',
borderRadius: '10px', borderRadius: '10px',
padding: '1px 2px' }
}} : {
fontSize: '18px',
backgroundColor: '#F5FFED',
border: '2px solid #25D05B',
width: '60px',
textAlign: 'right',
borderRadius: '10px',
paddingRight: '5px',
paddingLeft: '5px',
}
}
/> />
</Col> </Col>
<Col xs={2}></Col> <Col xs={2}></Col>

@ -98,7 +98,7 @@ export const ControlledInput: FC<IProps> = (props) => {
onChange={onChangeEmail} onChange={onChangeEmail}
disabled={false} disabled={false}
onKeyDown={(e) => handleKeyDown(e, 2)} onKeyDown={(e) => handleKeyDown(e, 2)}
style={{ width: '450px', textAlign: 'left' }} style={{ width: '650px', textAlign: 'left' }}
/> />
<MsgInformativo <MsgInformativo
show={show} show={show}

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

@ -32,7 +32,6 @@ import ClientesServices from '../../../Services/Catalogos/Clientes.Services'
import reportesServices from '../../../Services/Reportes/reportes.services' import reportesServices from '../../../Services/Reportes/reportes.services'
import DTOFiltrosTraficosClientes from '../../../DTO/Corresponsales/DTOFiltrosTraficosClientes' import DTOFiltrosTraficosClientes from '../../../DTO/Corresponsales/DTOFiltrosTraficosClientes'
import TraficoCliente from './TraficoCliente' import TraficoCliente from './TraficoCliente'
import { ClienteProgressBar } from '../../Reportes/customCells/ClienteProgressBar'
/* import '../../css/generic01.css' */ /* import '../../css/generic01.css' */
interface IProps {} interface IProps {}
@ -75,9 +74,8 @@ export default function RptClientesTraficos(props: IProps) {
//const [Corresponsal, setCorresponsal] = useState(0) //const [Corresponsal, setCorresponsal] = useState(0)
const [Pedimento, setPedimento] = useState(0) const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0); const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState('0'); const [Aduana, setAduana] = useState(0);
const [Referencia, setReferencia] = useState('') const [Referencia, setReferencia] = useState('')
const [Estado, setEstado] = useState(0)
const [Clientes, setClientes] = useState<Array<IClientes>>() const [Clientes, setClientes] = useState<Array<IClientes>>()
const [filtro, setFiltro] = useState('') const [filtro, setFiltro] = useState('')
const gridRef = React.useRef<any>(null) const gridRef = React.useRef<any>(null)
@ -94,7 +92,7 @@ export default function RptClientesTraficos(props: IProps) {
center: true, center: true,
sortable: true, sortable: true,
filter: true, filter: true,
cellRenderer: ClienteProgressBar, cellRenderer: ProgressBar,
}, },
{ {
field: 'folioGemco', field: 'folioGemco',
@ -265,8 +263,7 @@ export default function RptClientesTraficos(props: IProps) {
Aduana: Aduana, Aduana: Aduana,
Patente: Patente, Patente: Patente,
Referencia: Referencia, Referencia: Referencia,
IdUsuario: UserId, IdUsuario: UserId
Estado: Estado
} }
ClientesServices ClientesServices
.GetTraficos(data) .GetTraficos(data)
@ -292,33 +289,56 @@ export default function RptClientesTraficos(props: IProps) {
} }
function exportExcel(jsonData: any[], fileName: string): void { function exportExcel(jsonData: any[], fileName: string): void {
const data: DTOFiltrosTraficosClientes = { let Heading = [
Inicio: moment(Inicio).format('YYYY-MM-DD'), [
Fin: moment(Fin).format('YYYY-MM-DD'), {
TipoOperacion: TipoOperacion, title: 'Aduana Seccion Despacho',
NoCliente: Cliente, style: { font: { sz: '18', bold: true } },
IdCorresponsal: Corresponsal, },
Pedimento: Pedimento, 'Patente',
Aduana: Aduana, 'Referencia',
Patente: Patente, 'Pedimento',
Referencia: Referencia, 'Fecha Pago',
IdUsuario: UserId, 'Fecha Entrada Presentacion',
Estado: Estado '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()
} }
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 ( return (
@ -352,7 +372,7 @@ export default function RptClientesTraficos(props: IProps) {
type='text' type='text'
size='sm' size='sm'
placeholder='Aduana' placeholder='Aduana'
onChange={(e) => setAduana(e.target.value === '' ? '0' : e.target.value)} onChange={(e) => setAduana(+e.target.value)}
/> />
</Col> </Col>
<Col xs={2}> <Col xs={2}>
@ -433,23 +453,6 @@ export default function RptClientesTraficos(props: IProps) {
</Form.Control> </Form.Control>
</Form.Label> </Form.Label>
</Col> </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")? <> {(Perfil !== "Corresponsales" && Perfil !== "Clientes")? <>
<Col lg={4}> <Col lg={4}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}> <Form.Label style={{width:'100%', fontSize:'smaller'}}>
@ -489,6 +492,7 @@ export default function RptClientesTraficos(props: IProps) {
<BsSearch /> <BsSearch />
&nbsp; Buscar &nbsp; Buscar
</Button> </Button>
{(Depto === 'Corresponsalias' || Depto === 'Sistemas') ? (
<Button <Button
size='sm' size='sm'
variant='success' variant='success'
@ -500,6 +504,9 @@ export default function RptClientesTraficos(props: IProps) {
<BsFileEarmarkExcel /> <BsFileEarmarkExcel />
&nbsp; Excel &nbsp; Excel
</Button> </Button>
) : (
''
)}
</Col> </Col>
</Row> </Row>
</Card.Body> </Card.Body>

@ -80,11 +80,6 @@ import FileManager from "../../Utils/FileManager/FileManager"
import { MFileManager } from "../../Utils/MFileManager/MFileManager" import { MFileManager } from "../../Utils/MFileManager/MFileManager"
import { MsgInformativo } from "../../Utils/Toast/msgInformativo" import { MsgInformativo } from "../../Utils/Toast/msgInformativo"
import DatePicker from 'react-datepicker' import DatePicker from 'react-datepicker'
import { populateRectificaciones } from "../../../store/features/Corresponsales/CorresponsalesPedimentosRectificacionesSlice"
import { NuevaRectificacion } from "../../Corresponsales/Rectificaciones/NuevaRectificacion"
import { PedimentosConsolidados } from "../../Corresponsales/PedimentosConsolidados/PedimentosConsolidados"
import { populatePedimentos } from "../../../store/features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice"
import PedimentosConsolidadosService from '../../../Services/Corresponsalias/Corresponsales.Trafico.Pedimento.Consolidados.Service'
interface IProps { interface IProps {
IDTrafico: number IDTrafico: number
onClose: (val: boolean) => void onClose: (val: boolean) => void
@ -143,9 +138,6 @@ export default function TraficoCliente(props:IProps){
(state: RootState) => (state: RootState) =>
state.CCueCompEstatus.CorresponsalesCuentasComplementariasEstatus state.CCueCompEstatus.CorresponsalesCuentasComplementariasEstatus
) )
const mCPedimentosConsolidados = useSelector(
(state:RootState) => state.CPedimentosConsolidados.PedimentosConsolidados
)
const mCProveedores = useSelector((state:RootState) => state.CatProveedores.CatalogoProveedores) const mCProveedores = useSelector((state:RootState) => state.CatProveedores.CatalogoProveedores)
const [ModalSize, setModalSize] = useState('sm') const [ModalSize, setModalSize] = useState('sm')
@ -172,7 +164,7 @@ export default function TraficoCliente(props:IProps){
const [Kilos, setKilos] = useState<number | undefined>(0) const [Kilos, setKilos] = useState<number | undefined>(0)
const [Estatus, setEstatus] = useState<number>(0) const [Estatus, setEstatus] = useState<number>(0)
const [Trafico, setTrafico] = useState<string | undefined>('') const [Trafico, setTrafico] = useState<string | undefined>('')
const [Aduana, setAduana] = useState<string | undefined>('0') const [Aduana, setAduana] = useState<number | undefined>(0)
const [Patente, setPatente] = useState<number | undefined>(0) const [Patente, setPatente] = useState<number | undefined>(0)
const [Pedimento, setPedimento] = useState<number | undefined>(0) const [Pedimento, setPedimento] = useState<number | undefined>(0)
const [ClavePedimento, setClavePedimento] = useState<string>('') const [ClavePedimento, setClavePedimento] = useState<string>('')
@ -215,8 +207,6 @@ export default function TraficoCliente(props:IProps){
'Facturas pagos a terceros' 'Facturas pagos a terceros'
) )
const [LblAnticipos, setLblAnticipos] = useState('Anticipos') const [LblAnticipos, setLblAnticipos] = useState('Anticipos')
const [LblPedimentos, setLblPedimentos] = useState('Pedimentos Consolidados')
const [LblRectificaciones, setLblRectificaciones] = useState('Ped. Rectificados')
const [StatusTrafico, setStatusTrafico] = useState(1) const [StatusTrafico, setStatusTrafico] = useState(1)
const [StatusColor, setStatusColor] = useState('#FFFFFF') const [StatusColor, setStatusColor] = useState('#FFFFFF')
const [PagosaTerceros, setPagosaTerceros] = useState(0) const [PagosaTerceros, setPagosaTerceros] = useState(0)
@ -292,7 +282,7 @@ export default function TraficoCliente(props:IProps){
const [nextStepModalBody, setNextStepModalBody] = useState<string>(""); const [nextStepModalBody, setNextStepModalBody] = useState<string>("");
const [CargoPara, setCargoPara] = useState(0); const [CargoPara, setCargoPara] = useState(0);
const [CausaRectificacion, setCausaRectificacion] = useState(''); const [CausaRectificacion, setCausaRectificacion] = useState('');
const [EncabezadoPedimento1, setEncabezadoPedimento1] = useState("Pedimentos"); const [EncabezadoPedimento1, setEncabezadoPedimento1] = useState("Pedimento");
const [EncabezadoPedimento2, setEncabezadoPedimento2] = useState("."); const [EncabezadoPedimento2, setEncabezadoPedimento2] = useState(".");
const [CentroCostos, setCentroCostos] = useState<string>(''); const [CentroCostos, setCentroCostos] = useState<string>('');
const [ClaveClienteFacturacion, setClaveClienteFacturacion] = useState(0); const [ClaveClienteFacturacion, setClaveClienteFacturacion] = useState(0);
@ -716,7 +706,7 @@ export default function TraficoCliente(props:IProps){
setShowMsg(true) setShowMsg(true)
return return
}) })
CContaDataService.Get(IDTrafico, 1, 2) CContaDataService.Get(IDTrafico, 0)
.then((response) => { .then((response) => {
setRechazosTrafico(response.data) setRechazosTrafico(response.data)
}) })
@ -726,7 +716,7 @@ export default function TraficoCliente(props:IProps){
setShowMsg(true) setShowMsg(true)
return return
}) })
CContaDataService.Get(IDTrafico, 2, 1) CContaDataService.Get(IDTrafico, 2)
.then((response) => { .then((response) => {
setRechazosContabilidad(response.data) setRechazosContabilidad(response.data)
}) })
@ -736,10 +726,6 @@ export default function TraficoCliente(props:IProps){
setShowMsg(true) setShowMsg(true)
return return
}) })
PedimentosConsolidadosService.GetAll(IDTrafico)
.then((resp) => {
dispatch(populatePedimentos(resp.data))
})
loadRectificacionHistorico() loadRectificacionHistorico()
DoesThe2ZipFileExists() DoesThe2ZipFileExists()
} }
@ -747,15 +733,15 @@ export default function TraficoCliente(props:IProps){
const loadRectificacionHistorico = () => { const loadRectificacionHistorico = () => {
CTrafDataService.GetRectificacionHistorico(IDTrafico) CTrafDataService.GetRectificacionHistorico(IDTrafico)
.then((response) => { .then((response) => {
dispatch(populateRectificaciones(response.data))
if (response.data.length > 0) { if (response.data.id > 0) {
let ultimaRectificacion = response.data[response.data.length-1] setEncabezadoPedimento1("Pedimento Rectificado")
setEncabezadoPedimento1("Pedimento Master Rectificado") setEncabezadoPedimento2("Pedimento Original")
setAduanaH(ultimaRectificacion.aduana.toString()) setAduanaH(response.data.aduana.toString())
setPatenteH(ultimaRectificacion.patente.toString()) setPatenteH(response.data.patente.toString())
setPedimentoH(ultimaRectificacion.pedimento.toString()) setPedimentoH(response.data.pedimento.toString())
setClavePedimentoH(ultimaRectificacion.clave) setClavePedimentoH(response.data.clave)
setFechaPagoH(ultimaRectificacion.fechaPago) setFechaPagoH(response.data.fechaPago)
} }
}) })
.catch((e: Error) => { .catch((e: Error) => {
@ -879,7 +865,7 @@ export default function TraficoCliente(props:IProps){
useEffect(() => { useEffect(() => {
if ( if (
IDCorresponsal !== 0 && IDCorresponsal !== 0 &&
Aduana !== '' && Aduana !== '0' && Aduana !== ' ' && Aduana !== undefined && Aduana !== null && Aduana !== 0 &&
Patente !== 0 && Patente !== 0 &&
Pedimento !== 0 && Pedimento !== 0 &&
FechaPago !== '' && FechaPago !== '' &&
@ -957,6 +943,18 @@ export default function TraficoCliente(props:IProps){
}*/ }*/
useEffect(() => { 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) { if (Clientes) {
let tmpArray: ItemList[] = [] let tmpArray: ItemList[] = []
Clientes.forEach((element) => { Clientes.forEach((element) => {
@ -1037,12 +1035,6 @@ export default function TraficoCliente(props:IProps){
setValorFacturasDls(total) setValorFacturasDls(total)
}, [mCFacturas, IDTrafico, IDCliente]) }, [mCFacturas, IDTrafico, IDCliente])
useEffect(() => {
let ant = mCPedimentosConsolidados.filter(x => x.id > 0)
let label = `Pedimentos Consolidados (${ant.length})`
setLblPedimentos(label)
}, [mCPedimentosConsolidados])
function calculateDaysBetweenDates(date1: Date, date2: Date) { function calculateDaysBetweenDates(date1: Date, date2: Date) {
var oneDay = 24 * 60 * 60 * 1000 var oneDay = 24 * 60 * 60 * 1000
var date1InMillis = date1.getTime() var date1InMillis = date1.getTime()
@ -1085,10 +1077,264 @@ export default function TraficoCliente(props:IProps){
return '' 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
)}`
)
}
const saveCurrentStep = () => {
if(Depto === 'Corresponsalias') saveCorresponsaliasStep()
else if(Depto === 'Contabilidad') saveContabilidadAndFacturacionSteps()
}
const saveFinalStep = async (data: DTOTraficoCompleto) => {
CTrafDataService.ValidateComplete(data)
.then((response) => {
if (response.status === 200) {
setHeader('Informativo')
setMsg('La informacion se guardo correctamente')
setShowMsg(true)
return
}
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}
const saveCorresponsaliasStep = () => {
if(ComentariosRechazo === ''){
let data: DTOTraficoCompleto = {
id: IDTrafico,
idUsuario: UserId,
estatus: TerminaProceso,
comentarios: 'Todo Correcto'
}
saveFinalStep(data)
}else{
let data: ICorresponsalesTraficoContabilidad = {
id: 0,
idUsuario: UserId,
idTrafico: IDTrafico,
statusProceso: 0,
fechaRegistro: '',
razonRechazo: ComentariosRechazo,
tipo: 0
}
rejectCurrentStep(data)
}
}
const saveContabilidadAndFacturacionSteps = async () => {
if(IDRazonRechazo === 0){
setHeader('Informativo')
setMsg('Debe aceptar el tráfico o seleccionar un motivo de rechazo.')
setShowMsg(true)
return
}
let arrStatus = mCCCEstatus.filter((a) => {
if (a.id === IDRazonRechazo) {
return a
}
});
if(IDRazonRechazo === 7){
let data: DTOTraficoCompleto = {
id: IDTrafico,
idUsuario: UserId,
estatus: Proceso === 2 ? 3 : 4,
comentarios: arrStatus[0].estatus
}
await saveFinalStep(data).then(async (r) => {
if(Proceso === 2) await generateFacturacionTxt();
});
}else{
let data: ICorresponsalesTraficoContabilidad = {
id: 0,
idUsuario: UserId,
idTrafico: IDTrafico,
statusProceso: 0,
fechaRegistro: '',
razonRechazo: arrStatus[0].estatus,
tipo: Proceso === 2 ? 2 : 3
}
rejectCurrentStep(data)
}
}
const rejectCurrentStep = (data:ICorresponsalesTraficoContabilidad) => {
CContaDataService.Append(data)
.then( () => {
setHeader('Informativo')
setMsg('Tráfico rechazado con éxito')
setShowMsg(true)
return
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
});
}
let handleColor = (time: Date) => { let handleColor = (time: Date) => {
return time.getHours() > 12 ? 'text-success' : 'text-error' return time.getHours() > 12 ? 'text-success' : 'text-error'
} }
const generaRectificacion = () => {
if (Aduana && Patente && Pedimento && ClavePedimento.length>0 && FechaPago) {
const data : DTORectificacionHistorico = {
IdTrafico: IDTrafico,
IdUsuario: UserId
}
CTrafDataService.AppendRectificacionHistorico(data)
.then((response) => {
console.log(response);
if(response.data) loadRectificacionHistorico()
else{
setHeader('Error')
setMsg('Para poder generar la rectificación asegurese de GUARDAR los datos: Patente, Aduana, Pedimento, Clave, Fecha pago')
setShowMsg(true)
return
}
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
} else {
setHeader('Error')
setMsg('Parea poder generar este proceso es necesario que los siguientes campos tengan informacion: Patente, Aduana, Pedimento, Clave, Fecha pago')
setShowMsg(true)
return
}
}
const readFile = (event: any) => {
const fileUploaded = event.target.files[0];
if(!fileUploaded) return;
const fileReader = new FileReader();
fileReader.readAsText(fileUploaded);
fileReader.onload = async () => {
let Gcs = fileReader.result?.toString().split("\r\n")
let facturas: Array<Array<string>> = []
Gcs?.forEach(Gc => {
facturas.push(Gc.split("|"))
})
console.log(facturas)
if(hiddenFileInputRef.current !== null ) hiddenFileInputRef.current.value = "";
patchForm(facturas[0])
await saveTxtContenedores(facturas)
await saveFacturasTxt(facturas)
setTimeout(()=> {dispatch(addTxtContenedores(txtContenedores));dispatch(addTxtFacturas(txtFacturas))}, 2000)
};
fileReader.onerror = () => {}
};
const patchForm = (factura: string[]) => {
setPedimento(+factura[6]);
setFechaPago(setDate(factura[7]));
setClavePedimento(factura[8])
setTipoCambio(+factura[15])
setCantidadFracciones(+factura[21])
setDescripcionMercancia(factura[14])
setObservaciones(factura[48])
}
const saveTxtContenedores = async (facturas: string[][]) => {
facturas.forEach(async (factura) => {
await CContDataService.Append(
{id: 0, contenedor: factura[32], idTrafico: IDTrafico , fSemaforo: factura[22], semaforo: factura[45] === 'VERDE' ? 2 : 1,}
)
.then((response) => {
if (response.status === 200) {
txtContenedores.push(response.data)
}
})
.catch((e: Error) => {
return
})
})
}
const saveFacturasTxt = async(facturas: string[][]) => {
facturas.forEach(async (factura) => {
let proveedor = mCProveedores.filter(x => x.nombre === factura[10])[0]
await CFacDataService.Append({
id: 0,
factura: factura[13],
idTrafico: IDTrafico,
valorFacturaDls: +factura[16],
proveedor: proveedor.id,
corresponsal: IDCorresponsal,
pedido: factura[29],
code: 0,
folioGEMCO: ''
}).then((response) => {
if (response.status === 200) {
txtFacturas.push(response.data)
}
})
.catch((e: Error) => {
return
})
});
}
const generateFacturacionTxt = async () => {
let cliente = Clientes?.filter(x => x.sClave === IDCliente)[0];
let tipoMercancia = TiposMercancia.filter(x => x.id === IDTipoMercancia)[0];
let facturas = mCFacturas.filter(factura => factura.id > 0);
let nombreProveedor = "";
let descripcionMercancia = DescripcionMercancia!.replace(/(\r\n|\n|\r)/gm, "");
//
let fileData = `"${FolioTrafico}"|${ClaveClienteFacturacion === IDCliente || ClaveClienteFacturacion === 0? IDCliente : ClaveClienteFacturacion}|${Patente}|${Pedimento}|${TipoCambio}|${FechaPago}|0|0|0|0|0|0|0.00|"${Aduana}"|"${ClavePedimento}"|${TipoOperacion}|`;
//
fileData += `"C"|${ValorFacturasDls}|${ValorFacturasDls! * TipoCambio!}|${ValorAduanaMN}|"${descripcionMercancia}"|${Kilos}|${Kilos! * 2.20462}|${CantidadFracciones}|"${SemafoFiscal === 0 ? "R" : "V"}"|`;
//
if(facturas.length > 0){
nombreProveedor = mCProveedores.filter(p => p.id === facturas[0].proveedor)[0].nombre;
fileData += `${facturas.length}|"${facturas.map(factura => {return factura.factura}).join(",").substring(0, 25)}"|0|"${nombreProveedor}"|"${concatFacturasPedidos(facturas)}"|`;
}else
fileData += `0|""|0|""|""|`;
//
fileData += `${Bultos}|${0}|${0}|${moment(FechaDesaduanamiento).format('MM/DD/YYYY')}|${mCContenedores.length-1}|0|""|${moment(FechaDesaduanamiento).format('MM/DD/YYYY')}|${tipoMercancia?.clave ? tipoMercancia?.clave : '""'}|0|0|""|""|""|""|/ /|F|F|F|F|0|0|F|0.00|F|0|""|""|`;
//
fileData += `${FechaPagoH !== "" ? FechaPagoH : FechaPago}|""|""|0|"${ClaveClienteFacturacion === IDCliente || ClaveClienteFacturacion === 0? cliente!.sRazonSocial.split('|')[0].trim() : NombreClienteFacturacion}"|${ClaveClienteFacturacion === IDCliente || ClaveClienteFacturacion === 0? cliente!.sRFC : RfcClienteFacturacion}|""|""|""|""|""|""|""|"${nombreProveedor}"|`;
//
fileData += `0|""|""|""|""|""|""|""|""|${ValorFacturasDls}|""|""|336|""|/ / : :|${moment().format("MM/DD/YYYY hh:mm:ss")}|${moment().format("MM/DD/YYYY hh:mm:ss")}|`;
//
fileData += `0|""|""|""|0|0|0|F|""|0|""|""|0|0|0|0|""|"${CentroCostos}"`;
//const blob = new Blob([fileData], { type: "text/plain" });
const file = new File([fileData], `${FolioTrafico}_${Date.now()}.txt`, {type: "text/plain"});
let formData = new FormData();
formData.append('file', file);
await axios.post(
URL.get() +
`/FileManager/AppendFileByProcess?IdUsuario=${UserId}&Proceso=${31}&Tags=${IDTrafico}&crud=1`,
formData, {
headers:{
'Authorization': 'Bearer ' + token
}
}
);
/*const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.download = `${FolioTrafico}_${Date.now()}.txt`;
link.href = url;
link.click();*/
}
const concatFacturasPedidos = (facturas: ICorresponsalFacturas[]) => { const concatFacturasPedidos = (facturas: ICorresponsalFacturas[]) => {
let pedidos = ""; let pedidos = "";
facturas.forEach((factura, index) => { facturas.forEach((factura, index) => {
@ -1130,6 +1376,36 @@ 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 = () => { const GetClientesZip = () => {
FileManagerServices.GetClientesZip(IDTrafico) FileManagerServices.GetClientesZip(IDTrafico)
.then(response => { .then(response => {
@ -1151,10 +1427,6 @@ export default function TraficoCliente(props:IProps){
link.click(); link.click();
} }
const showHistorialRectificaciones = () => {
setLoadComponent(14);
setShowModal(true);
}
return ( return (
<div style={{height:'100%', overflowY:'scroll'}}> <div style={{height:'100%', overflowY:'scroll'}}>
<Card className="labelSize13px" style={{borderStyle:'none', height:'100%'}}> <Card className="labelSize13px" style={{borderStyle:'none', height:'100%'}}>
@ -1188,7 +1460,10 @@ export default function TraficoCliente(props:IProps){
<Row> <Row>
<Col sm={3} md={2} lg={4}> <Col sm={3} md={2} lg={4}>
<Form.Label <Form.Label
style={{ display: 'flex'}} onClick={() => {
showModalBox(11)
}}
style={{ cursor: 'pointer', display: 'flex'}}
> >
<IconContext.Provider <IconContext.Provider
value={{ color: 'blue', size: '15px' }} value={{ color: 'blue', size: '15px' }}
@ -1328,6 +1603,34 @@ export default function TraficoCliente(props:IProps){
</Form.Label> </Form.Label>
</Col> </Col>
<Col sm={6} md={6} lg={8}> <Col sm={6} md={6} lg={8}>
<Form.Label style={{ width:'100%' }}>
<IconContext.Provider value={{ color: 'blue', size: '15px' }}>
<span onClick={() => {showModalBox(10)}}
style={{ cursor: 'pointer' }}>
<FcTimeline />&nbsp;Precuenta
</span>
</IconContext.Provider>
<Form.Control
as="select"
disabled={true}
onChange={(e) => {
setIDTabulador(parseInt(e.target.value))
}}
value={IDTabulador}
className="form-select form-select-sm"
>
<option value="0">-SELECCIONE-</option>
{Tabuladores
? Tabuladores.map((t) => {
return (
<option key={t.id} value={t.id}>
{t.nombre}
</option>
)
})
: null}
</Form.Control>
</Form.Label>
</Col> </Col>
</Row> </Row>
</Col> </Col>
@ -1394,7 +1697,14 @@ export default function TraficoCliente(props:IProps){
<Col sm={12} md={12} lg={6}> <Col sm={12} md={12} lg={6}>
<Row> <Row>
<Col sm={4} md={4} lg={4}> <Col sm={4} md={4} lg={4}>
<Form.Label> <Form.Label
onClick={() => {
return Depto === 'Corresponsalias'
? showModalBox(1)
: ''
}}
style={{ cursor: 'pointer' }}
>
<IconContext.Provider <IconContext.Provider
value={{ color: 'blue', size: '15px' }} value={{ color: 'blue', size: '15px' }}
> >
@ -1433,6 +1743,22 @@ export default function TraficoCliente(props:IProps){
<Col sm={11} md={11} lg={11} <Col sm={11} md={11} lg={11}
style={{ visibility: Proceso < 2 ? 'visible' : 'hidden', textAlign: 'end'}} style={{ visibility: Proceso < 2 ? 'visible' : 'hidden', textAlign: 'end'}}
> >
{IDTrafico > 0 && IDCliente === 1896? (
<>
<Form.Control type="file" style={{display:'none'}} onChange={readFile} ref={hiddenFileInputRef}/>
<Button
id="BtnLoadTxt"
variant="success"
size="sm"
style={{ paddingLeft: '20px', paddingRight: '20px' }}
onClick={() => hiddenFileInputRef.current?.click()}
>
Cargar TXT
</Button>
</>
) : (
''
)}
</Col> </Col>
<Col sm={1} md={1} lg={1} <Col sm={1} md={1} lg={1}
style={{ visibility: Proceso < 2 ? 'visible' : 'hidden', textAlign: 'end'}} style={{ visibility: Proceso < 2 ? 'visible' : 'hidden', textAlign: 'end'}}
@ -1598,14 +1924,6 @@ export default function TraficoCliente(props:IProps){
<fieldset className='border p-2'> <fieldset className='border p-2'>
<legend className='w-auto' style={{float:'none', fontSize:'1rem'}}>{EncabezadoPedimento1}</legend> <legend className='w-auto' style={{float:'none', fontSize:'1rem'}}>{EncabezadoPedimento1}</legend>
<Row className='justify-content-between' style={{alignItems:'center'}}> <Row className='justify-content-between' style={{alignItems:'center'}}>
<Col sm={5} md={5} lg={5}>
<Button variant="success"
onClick={()=>{setLoadComponent(13);setShowModal(true);}}
style={{width:'100%', padding:'6px'}}
>
{LblPedimentos}
</Button>
</Col>
<Col sm={3} md={3} lg={3}> <Col sm={3} md={3} lg={3}>
<Form.Label> <Form.Label>
Trafico Trafico
@ -1647,11 +1965,14 @@ export default function TraficoCliente(props:IProps){
/> />
</Form.Label> </Form.Label>
</Col> </Col>
</Row>
<Row className='justify-content-between' style={{alignItems:'center'}}>
<Col sm={2} md={2} lg={3}> <Col sm={2} md={2} lg={3}>
<Form.Label> <Form.Label>
<span> <span
onClick={() => {
openSOIA()
}}
style={{ cursor: 'pointer' }}
>
Pedimento Pedimento
</span> </span>
<CurrencyFormat <CurrencyFormat
@ -1660,6 +1981,10 @@ export default function TraficoCliente(props:IProps){
readOnly= {Depto !== 'Corresponsalias' ? true : false} readOnly= {Depto !== 'Corresponsalias' ? true : false}
format={'### ####'} format={'### ####'}
mask="_" mask="_"
onValueChange={(values: any) => {
const { value } = values
setPedimento(value.length === 0 ? 0 : value)
}}
style={{ style={{
fontSize: '18px', fontSize: '18px',
backgroundColor: '#FEFDF5', backgroundColor: '#FEFDF5',
@ -1671,7 +1996,9 @@ export default function TraficoCliente(props:IProps){
/> />
</Form.Label> </Form.Label>
</Col> </Col>
<Col sm={3} md={3} lg={2}> </Row>
<Row className='justify-content-between' style={{alignItems:'center'}}>
<Col sm={3} md={3} lg={3}>
<Form.Label> <Form.Label>
Clave Clave
<Form.Control <Form.Control
@ -1712,7 +2039,7 @@ export default function TraficoCliente(props:IProps){
/> />
</Form.Label> </Form.Label>
</Col> </Col>
<Col xs={3}> <Col xs={6}>
<Form.Label style={{width:'100%', visibility: AduanaH === '' ? 'hidden':'visible'}}> <Form.Label style={{width:'100%', visibility: AduanaH === '' ? 'hidden':'visible'}}>
Cargo A Cargo A
<Form.Control <Form.Control
@ -1754,10 +2081,10 @@ export default function TraficoCliente(props:IProps){
</Col> </Col>
<Col sm={12} md={12} lg={6}> <Col sm={12} md={12} lg={6}>
<fieldset className='border p-2' style={{height:'100%'}}> <fieldset className='border p-2' style={{height:'100%'}}>
<legend className='w-auto' style={{float:'none', fontSize:'1rem'}}>Última Rectificación</legend> <legend className='w-auto' style={{float:'none', fontSize:'1rem'}}>{EncabezadoPedimento2}</legend>
<Row className='justify-content-between' style={{alignItems:'center', paddingTop:'15px'}}> <Row className='justify-content-between' style={{alignItems:'center', paddingTop:'15px'}}>
<Col sm={5} md={4} lg={4}> <Col sm={5} md={4} lg={4} style={{visibility: (IDTrafico>0 && !(AduanaH.length>0 && PatenteH.length>0 && PedimentoH.length>0 && FechaPagoH.length>0)) ? 'visible' : 'hidden' }}>
<Button variant="success" style={{width:'100%', padding:'6px'}} onClick={() => {showHistorialRectificaciones()}}>{LblRectificaciones}</Button> <Button variant="success" disabled={Depto !== 'Corresponsalias'} onClick={()=>{generaRectificacion()}}>Generar rectificacion</Button>
</Col> </Col>
<Col sm={1} md={1} lg={2}> <Col sm={1} md={1} lg={2}>
<Form.Label>Aduana</Form.Label> <Form.Label>Aduana</Form.Label>
@ -1804,7 +2131,7 @@ export default function TraficoCliente(props:IProps){
</Row> </Row>
<Row className='justify-content-between' style={{alignItems:'center', paddingTop:'15px'}}> <Row className='justify-content-between' style={{alignItems:'center', paddingTop:'15px'}}>
<Col sm={2} md={2} lg={2}> <Col sm={2} md={2} lg={2}>
<Form.Label> <Form.Label style={{ cursor: 'pointer' }}>
Pedimento Pedimento
</Form.Label> </Form.Label>
</Col> </Col>
@ -2137,7 +2464,7 @@ export default function TraficoCliente(props:IProps){
</Row> </Row>
<Row style={{padding: "5px 0"}}> <Row style={{padding: "5px 0"}}>
<Col sm={12} md={12} lg={4}> <Col sm={12} md={12} lg={4}>
<Row className="align-items-center"> <Row>
<Col sm={5}> <Col sm={5}>
<Form.Label className="labelSize13px"> <Form.Label className="labelSize13px">
Fecha de desaduanamiento Fecha de desaduanamiento
@ -2166,14 +2493,14 @@ export default function TraficoCliente(props:IProps){
</Col> </Col>
</Row> </Row>
</Col> </Col>
<Col sm={12} md={12} lg={4}> <Col sm={12} md={12} lg={8}>
<Row className="align-items-center justify-content-between"> <Row>
<Col sm={3}> <Col sm={2}>
<Form.Label className="labelSize13px"> <Form.Label className="labelSize13px">
Semaforo fiscal Semaf. fiscal
</Form.Label> </Form.Label>
</Col> </Col>
<Col sm={8}> <Col sm={4}>
<Form.Control <Form.Control
as="select" as="select"
className="form-select form-select-sm" className="form-select form-select-sm"
@ -2189,30 +2516,12 @@ export default function TraficoCliente(props:IProps){
<option value="1">Verde</option> <option value="1">Verde</option>
</Form.Control> </Form.Control>
</Col> </Col>
</Row> <Col sm={2}>
</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> </Col>
</Row> </Row>
</Col> </Col>
</Row> </Row>
<Row style={{padding: "5px 0"}}> <Row style={{padding: "5px 0"}}>
<Col sm={12} md={12} lg={6}> <Col sm={12} md={12} lg={6}>
@ -2231,7 +2540,7 @@ export default function TraficoCliente(props:IProps){
canDelete={Depto === 'Corresponsalias'} canDelete={Depto === 'Corresponsalias'}
FileType={['zip']} FileType={['zip']}
Leyenda={ Leyenda={
'Aquí se podrá descargar el archivo oficial del tráfico cuando sea cargado' 'Seleccione el archivo, arrastrelo hasta aqui y sueltelo para subirlo al servidor...'
} }
onAppendFM={function (idFile: number): void { onAppendFM={function (idFile: number): void {
DoesThe2ZipFileExists() DoesThe2ZipFileExists()
@ -2739,7 +3048,6 @@ export default function TraficoCliente(props:IProps){
{CatTiposDocumento.map((c) => { {CatTiposDocumento.map((c) => {
return ( return (
<Col key={c.id} xs={4}> <Col key={c.id} xs={4}>
{c.proceso !== 16 ?
<Card <Card
style={{ width: '100%', textAlign: 'center', height:'100%' }} style={{ width: '100%', textAlign: 'center', height:'100%' }}
key={c.id} key={c.id}
@ -2754,8 +3062,7 @@ export default function TraficoCliente(props:IProps){
Leyenda={'Seleccione: ' + c.descripcion} Leyenda={'Seleccione: ' + c.descripcion}
/> />
</Card.Body> </Card.Body>
</Card> : '' </Card>
}
</Col> </Col>
) )
})} })}
@ -3069,12 +3376,12 @@ export default function TraficoCliente(props:IProps){
IdFile={IDTrafico} IdFile={IDTrafico}
FileName={''} FileName={''}
canDelete={ canDelete={
Depto === 'Corresponsalias' Depto === 'Corresponsalias' || Perfil !== 'Corresponsal'
} }
FileType={['pdf']} FileType={['pdf']}
setBackgroundColor={c.id} setBackgroundColor={c.id}
Prefijo={c.descripcion} Prefijo={c.descripcion}
Leyenda={`Aquí se podrá descargar el archivo ${c.descripcion} cuando sea cargado`} Leyenda={`Seleccione el archivo ${c.descripcion}, arrastrelo hasta aqui y sueltelo para subirlo al servidor...`}
onAppendFM={function ( onAppendFM={function (
idFile: number idFile: number
): void {}} ): void {}}
@ -3104,23 +3411,89 @@ export default function TraficoCliente(props:IProps){
</Col> </Col>
</Row> </Row>
</Tab> </Tab>
<Tab
eventKey="CuentasComplementarias"
title="Cuentas complementarias"
tabClassName={Perfil === 'Corresponsales' ? 'd-none' : ''}
>
<Row>
<Col xs={12}>
<CuentasComplementarias
IDTrafico={IDTrafico}
UserId={UserId}
/>
</Col>
</Row>
</Tab>
<Tab
eventKey="Rectificaciones"
title="Rectificaciones"
tabClassName={Perfil === 'Corresponsales' ? 'd-none' : ''}
>
{/* <Card>
<Row>
<Col xs={1}>Pedimento</Col>
<Col xs={1}>
<CurrencyFormat
value={PedimentoRectificado}
displayType={Depto === 'Corresponsalias' ? 'input' : 'text'}
format={'### ####'}
mask='_'
onValueChange={(values: any) => {
const { value } = values
setPedimento(value.length === 0 ? 0 : value)
}}
style={
Depto === 'Corresponsalias'
? {
fontSize: '18px',
backgroundColor: '#FEFDF5',
border: '2px solid #837F5D',
width: '100px',
textAlign: 'right',
borderRadius: '10px',
}
: {
fontSize: '16px',
backgroundColor: '#FEFDF5',
border: '2px solid #837F5D',
width: '100px',
textAlign: 'right',
borderRadius: '10px',
}
}
/>
</Col>
<Col xs={1}>Fecha pago</Col>
<Col xs={1}></Col>
<Col xs={1}>Motivo</Col>
<Col xs={7}></Col>
</Row>
</Card> */}
</Tab>
<Tab <Tab
eventKey="ComprobantesFacturacion" eventKey="ComprobantesFacturacion"
title="Comprobantes Facturacion" title="Comprobantes Facturacion"
//tabClassName={Proceso >= 3 && Depto === 'Facturacion'? '' : 'd-none'} tabClassName={Proceso >= 3 ? '' : 'd-none'}
> >
<Card> <Card>
<Card.Body> <Card.Body>
<Row> <Row>
<Col xs={6}> <Col xs={4}>
<Form.Label>PDF Cuenta Mexicana</Form.Label> <Form.Label>PDF Cuenta Mexicana</Form.Label>
</Col> </Col>
<Col xs={6}> <Col xs={4}>
<Form.Label>XML Cuenta Mexicana</Form.Label> <Form.Label>XML Cuenta Mexicana</Form.Label>
</Col> </Col>
<Col xs={4}>
<Row>
<Col sm={6}>Total Honorarios A.A</Col>
<Col sm={6}>Total Gastos Terceros</Col>
</Row>
</Col>
</Row> </Row>
<Row> <Row>
<Col xs={6}> <Col xs={4}>
<FileManager <FileManager
IDUser={UserId} IDUser={UserId}
width={'100%'} width={'100%'}
@ -3136,7 +3509,7 @@ export default function TraficoCliente(props:IProps){
onAppendFM={function (idFile: number ): void {}} onAppendFM={function (idFile: number ): void {}}
/> />
</Col> </Col>
<Col xs={6}> <Col xs={4}>
<FileManager <FileManager
IDUser={UserId} IDUser={UserId}
width={'100%'} width={'100%'}
@ -3152,17 +3525,68 @@ export default function TraficoCliente(props:IProps){
onAppendFM={function (idFile: number): void {}} onAppendFM={function (idFile: number): void {}}
/> />
</Col> </Col>
<Col xs={4}>
<Row>
<Col sm={6}>
<CurrencyFormat
value={TotalHonorariosAA}
displayType='input'
readOnly={Depto !== 'Facturacion' || Proceso !== 3}
thousandSeparator={true}
onValueChange={(values: any) => {
const { value } = values
setTotalHonorariosAA(value)
}}
style={{
fontSize: '18px',
backgroundColor: '#FEFDF5',
border: '2px solid #837F5D',
width: '100%',
textAlign: 'right',
borderRadius: '10px',
paddingLeft: '20px',
paddingRight: '10px',
}}
/>
</Col>
<Col sm={6}>
<CurrencyFormat
value={TotalGastosTerceros}
thousandSeparator={true}
displayType='input'
readOnly={Depto !== 'Facturacion' || Proceso !== 3}
onValueChange={(values: any) => {
const { value } = values
setTotalGastosTerceros(value)
}}
style={{
fontSize: '18px',
backgroundColor: '#FEFDF5',
border: '2px solid #837F5D',
width: '100%',
textAlign: 'right',
borderRadius: '10px',
paddingLeft: '20px',
paddingRight: '10px',
}}
/>
</Col>
</Row>
</Col>
</Row> </Row>
<Row> <Row>
<Col xs={6}> <Col xs={4}>
<Form.Label>PDF de Notas de Cargos</Form.Label> <Form.Label>PDF de Gastos a Terceros</Form.Label>
</Col> </Col>
<Col xs={6}> <Col xs={4}>
<Form.Label>Archivos Adicionales</Form.Label> <Form.Label>Archivos Adicionales</Form.Label>
</Col> </Col>
<Col xs={4}>
<Form.Label></Form.Label>
</Col>
</Row> </Row>
<Row> <Row>
<Col xs={6}> <Col xs={4}>
<FileManager <FileManager
IDUser={UserId} IDUser={UserId}
width={'100%'} width={'100%'}
@ -3180,7 +3604,7 @@ export default function TraficoCliente(props:IProps){
}} }}
/> />
</Col> </Col>
<Col xs={6}> <Col xs={4}>
<FileManager <FileManager
IDUser={UserId} IDUser={UserId}
width={'100%'} width={'100%'}
@ -3199,6 +3623,25 @@ export default function TraficoCliente(props:IProps){
/> />
</Col> </Col>
</Row> </Row>
<Row className='justify-content-end'>
<Col xs={3} style={{display:'flex', justifyContent:'end'}}>
<Button
variant='primary'
onClick={GetClientesZip}
disabled={Proceso < 4}
style={{marginRight:'10px'}}
>
Descargar Zip
</Button>
<Button
variant='primary'
onClick={cerrarTrafico}
disabled={Proceso === 4}
>
Cerrar Cuenta
</Button>
</Col>
</Row>
</Card.Body> </Card.Body>
</Card> </Card>
</Tab> </Tab>
@ -3212,7 +3655,7 @@ export default function TraficoCliente(props:IProps){
dialogClassName={ dialogClassName={
LoadComponent === 1 || LoadComponent === 2 || LoadComponent === 9 LoadComponent === 1 || LoadComponent === 2 || LoadComponent === 9
? 'modal-90w' ? 'modal-90w'
: LoadComponent === 13 || LoadComponent === 14 ? 'modal-70w' : 'modal-50w' : 'modal-50w'
} }
> >
<Modal.Body> <Modal.Body>
@ -3265,7 +3708,6 @@ export default function TraficoCliente(props:IProps){
IDTrafico={IDTrafico} IDTrafico={IDTrafico}
IDTabulador={IDTabulador} IDTabulador={IDTabulador}
NombreCliente={NombreCliente} NombreCliente={NombreCliente}
IDCorresponsal={null}
closeTabulador={function (arg: boolean): void { closeTabulador={function (arg: boolean): void {
setShowModal(arg) setShowModal(arg)
}} }}
@ -3294,26 +3736,6 @@ export default function TraficoCliente(props:IProps){
/> />
</div> </div>
) : null} ) : null}
{LoadComponent === 13 ? (
<div style={{ height: '600px', overflow: 'auto' }}>
<PedimentosConsolidados IdTrafico={props.IDTrafico} Aduana={Aduana!} Patente={Patente!} ClavesPedimento={ClavesPedimentos} Depto={Depto}/>
</div>
) : null}
{LoadComponent === 14? (
<div style={{ height: '550px', overflow: 'hidden' }}>
<NuevaRectificacion
IdTrafico={props.IDTrafico}
Aduana={Aduana!}
Patente={Patente!}
ClavesPedimento={ClavesPedimentos}
Depto={Depto}
UserId={UserId}
Pedimentos={mCPedimentosConsolidados}
onAppendRectificacion={function (data: DTORectificacionHistorico): void {
throw new Error("Function not implemented.")
} }/>
</div>
) : null}
</Modal.Body> </Modal.Body>
</Modal> </Modal>
<MsgInformativo <MsgInformativo
@ -3325,6 +3747,14 @@ export default function TraficoCliente(props:IProps){
setShowMsg(false) setShowMsg(false)
}} }}
/> />
<Modal show={showNextStepModal} backdrop='static' keyboard={false} size='sm' centered>
<Modal.Header style={{backgroundColor: '#0d6efd', color: '#ffffff'}}>{nextStepModalHeader}</Modal.Header>
<Modal.Body>{nextStepModalBody}</Modal.Body>
<Modal.Footer>
<Button variant='danger' onClick={() => {setShowNexStepModal(false); props.onClose(true)}}>Cancelar</Button>
<Button variant='primary' onClick={() => {saveCurrentStep(); setShowNexStepModal(false); props.onClose(true)}}>Continuar</Button>
</Modal.Footer>
</Modal>
</div> </div>
) )
} }

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

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

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

@ -1,118 +0,0 @@
import { Alert, Col, FormControl, Row, Table } from "react-bootstrap"
import { useDispatch, useSelector } from "react-redux"
import { RootState } from "../../../store/store"
import { useEffect, useState } from "react"
import FormCheckInput from "react-bootstrap/esm/FormCheckInput"
import CorresponsalesFacturasServices from "../../../Services/Corresponsalias/Corresponsales.Facturas.Services"
import ICorresponsalFacturas from "../../../Interfaces/Corresponsales/ICorresponsalFacturas"
import { updateCorresponsalesFacturas } from "../../../store/features/Corresponsales/CorresponsalesFacturasSlice"
import { MsgInformativo } from "../../Utils/Toast/msgInformativo"
interface IProps{
IDTrafico: number
IdContenedor: number
Contenedor: string
}
export const FacturasContenedor: React.FC<IProps> = (props) => {
const mCFacturas = useSelector(
(state: RootState) => state.CFData.CorresponsalesFacturas
)
const dispatch = useDispatch()
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [show, setShowMsg] = useState(false)
const [msgColor, setMsgColor] = useState('primary')
const AppendContenedor = (e: any) => {
var data = mCFacturas.filter(x => x.id === +e.target.value)[0]
var factura: ICorresponsalFacturas = {
id: data.id,
factura: data.factura,
idTrafico: data.idTrafico,
valorFacturaDls: data.valorFacturaDls,
proveedor: data.proveedor,
pedido: data.pedido,
code: data.code,
folioGEMCO: data.folioGEMCO,
corresponsal: data.corresponsal,
activo: data.activo,
fechaFactura: data.fechaFactura,
uuid: data.uuid,
cove: data.cove,
entrega: data.entrega,
transporte: data.transporte,
idContenedor: e.currentTarget.checked ? props.IdContenedor : 0
}
CorresponsalesFacturasServices.Append(factura)
.then((resp:any) => {
dispatch(updateCorresponsalesFacturas(factura));
setHeader('Informativo')
setMsg('Factura asignada correctamente')
setShowMsg(true)
return
})
.catch(() => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
})
}
return (
<>
<Alert variant='primary' style={{height:'100%', overflowY: 'hidden'}}>
<Row>
<Col xs={12}>
<b>Agregar facturas al contenedor {props.Contenedor}</b>
</Col>
</Row>
<div className="table-wrapper" style={{width:'100%', maxHeight:'450px'}}>
<Table
className="table table-earnings table-earnings__challenge"
striped
bordered
hover
>
<thead>
<tr><th></th><th>Factura</th></tr>
</thead>
<tbody>
{mCFacturas
? mCFacturas.map((item, index) => {
return item.idTrafico === props.IDTrafico ? (
<tr>
<td>
<FormCheckInput
onChange={(event:any) => {
AppendContenedor(event)
}}
value={item.id}
disabled = {item.idContenedor !== 0 && item.idContenedor !== props.IdContenedor}
defaultChecked = {item.idContenedor === props.IdContenedor}
/>
</td>
<td>
{item.factura}
</td>
</tr>
) : (
''
)
})
: ''}
</tbody>
</Table>
</div>
</Alert>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -4,7 +4,7 @@ import { RootState } from '../../../store/store'
import CContDataService from '../../../Services/Corresponsalias/Corresponsales.Contenedores.Services' import CContDataService from '../../../Services/Corresponsalias/Corresponsales.Contenedores.Services'
import ICorresponsalContenedores from '../../../Interfaces/Corresponsales/ICorresponsalContenedores' import ICorresponsalContenedores from '../../../Interfaces/Corresponsales/ICorresponsalContenedores'
import { IconContext } from 'react-icons' import { IconContext } from 'react-icons'
import { BsFillCalendarCheckFill, BsFillCalendarDayFill, BsFillRecordFill, BsFillXCircleFill, BsLink45Deg, BsPencil } from 'react-icons/bs' import { BsFillCalendarCheckFill, BsFillCalendarDayFill, BsFillRecordFill, BsFillXCircleFill } from 'react-icons/bs'
import { import {
deleteCorresponsalesContenedores, deleteCorresponsalesContenedores,
updateCorresponsalesContenedores, updateCorresponsalesContenedores,
@ -15,8 +15,6 @@ import 'react-datepicker/dist/react-datepicker.css'
//Images //Images
import caret from '../../../images/caret.png'; import caret from '../../../images/caret.png';
import clean from '../../../images/Clean.png'; import clean from '../../../images/Clean.png';
import { FaFile, FaPencilAlt } from 'react-icons/fa'
import { FacturasContenedor } from './FacturasContenedor'
interface IProps { interface IProps {
IDTrafico: number IDTrafico: number
@ -31,7 +29,6 @@ export const SelectContainer: FC<IProps> = (props) => {
const dispatch = useDispatch() const dispatch = useDispatch()
const [toggleSelect, setToggleSelect] = useState(false) const [toggleSelect, setToggleSelect] = useState(false)
const mCContenedores = useSelector((state: RootState) => state.CCData.CorresponsalesContenedores) const mCContenedores = useSelector((state: RootState) => state.CCData.CorresponsalesContenedores)
const mCTiposContenedores = useSelector((state: RootState) => state.CTiposContenedores.CatTiposContenedores)
const [Contenedor, setContenedor] = useState('') const [Contenedor, setContenedor] = useState('')
const [IDContenedor, setIDContenedor] = useState(0) const [IDContenedor, setIDContenedor] = useState(0)
const [Placeholder, setPlaceholder] = useState('') const [Placeholder, setPlaceholder] = useState('')
@ -39,8 +36,6 @@ export const SelectContainer: FC<IProps> = (props) => {
const [DialogAddDate, setDialogAddDate] = useState(false) const [DialogAddDate, setDialogAddDate] = useState(false)
const [FSemaforo, setFSemaforo] = useState<Date | null>() const [FSemaforo, setFSemaforo] = useState<Date | null>()
const [Semaforo, setSemaforo] = useState(0) const [Semaforo, setSemaforo] = useState(0)
const [ShowFacturasDialog, setShowFacturasDialog] = useState(false)
const [IdTipoContenedor, setIdTipoContenedor] = useState(0)
useEffect(() => { useEffect(() => {
setPlaceholder('(' + mCContenedores.filter((item) => item.id > 0).length + ') Contenedores') setPlaceholder('(' + mCContenedores.filter((item) => item.id > 0).length + ') Contenedores')
@ -64,8 +59,7 @@ export const SelectContainer: FC<IProps> = (props) => {
contenedor: Contenedor, contenedor: Contenedor,
idTrafico: props.IDTrafico, idTrafico: props.IDTrafico,
fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '', fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '',
semaforo: 2, semaforo: Semaforo,
idTipoContenedor: 0
} }
CContDataService.Append(data) CContDataService.Append(data)
.then((response) => { .then((response) => {
@ -96,7 +90,6 @@ export const SelectContainer: FC<IProps> = (props) => {
idTrafico: props.IDTrafico, idTrafico: props.IDTrafico,
fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '', fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '',
semaforo: Semaforo, semaforo: Semaforo,
idTipoContenedor: IdTipoContenedor
} }
// console.log(JSON.stringify(data)) // console.log(JSON.stringify(data))
CContDataService.Append(data) CContDataService.Append(data)
@ -215,25 +208,27 @@ export const SelectContainer: FC<IProps> = (props) => {
? mCContenedores ? mCContenedores
.map((item, index) => { .map((item, index) => {
return item.id > 0 ? ( return item.id > 0 ? (
<li key={item.id} style={{marginBottom:'3px'}} onClick={() => loadInfo(item)}> <li key={item.id} onClick={() => loadInfo(item)}>
<span style={{display: props.Editable && toggleSelect ? 'inline-block' : 'none',}}> <span
onClick={() => {
setDialogTabs(true)
}}
>
<IconContext.Provider value={{ color: 'red', size: '15px' }}> <IconContext.Provider value={{ color: 'red', size: '15px' }}>
<BsFillXCircleFill className='pointer' onClick={() => {setDialogTabs(true)}}/> <BsFillXCircleFill />
</IconContext.Provider> </IconContext.Provider>
</span> </span>
<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>
</span>
{/* <span style={{paddingLeft:'3px'}}>
<IconContext.Provider value={{ color: 'blue', size: '15px' }}>
<BsPencil className='pointer' onClick={() => loadInfo(item)} />
</IconContext.Provider>
</span> */}
<span style={{ paddingLeft: '10px' }}>{item.contenedor}</span> <span style={{ paddingLeft: '10px' }}>{item.contenedor}</span>
<span> <span
&nbsp;| {item.fSemaforo} |{ onClick={() => {
setFSemaforo(StrtoDate(item.fSemaforo))
setSemaforo(item.semaforo)
setDialogAddDate(true)
setToggleSelect(!toggleSelect)
}}
>
&nbsp;| {item.fSemaforo} |{' '}
{item.fSemaforo ? (
item.semaforo === 1 ? ( item.semaforo === 1 ? (
<IconContext.Provider value={{ color: 'red', size: '20px' }}> <IconContext.Provider value={{ color: 'red', size: '20px' }}>
<BsFillRecordFill /> <BsFillRecordFill />
@ -243,23 +238,17 @@ export const SelectContainer: FC<IProps> = (props) => {
<BsFillRecordFill /> <BsFillRecordFill />
</IconContext.Provider> </IconContext.Provider>
) : ('') ) : ('')
} ) : (
<span> ''
<IconContext.Provider value={{ color: 'green', size: '20px' }}> )}
<BsFillCalendarCheckFill <span
className='pointer'
style={{ style={{
paddingLeft: '5px', paddingLeft: '20px',
visibility: props.Editable && toggleSelect ? 'visible' : 'hidden', visibility: props.Editable && toggleSelect ? 'visible' : 'hidden',
}} }}
onClick={() => { >
setFSemaforo(StrtoDate(item.fSemaforo)) <IconContext.Provider value={{ color: 'green', size: '15px' }}>
setSemaforo(item.semaforo) <BsFillCalendarCheckFill />
setIdTipoContenedor(item.idTipoContenedor)
setDialogAddDate(true)
setToggleSelect(!toggleSelect)
}}
/>
</IconContext.Provider> </IconContext.Provider>
</span> </span>
</span> </span>
@ -330,24 +319,6 @@ export const SelectContainer: FC<IProps> = (props) => {
<b>¿Esta seguro de agregar fecha al contenedor: {Contenedor}?</b> <b>¿Esta seguro de agregar fecha al contenedor: {Contenedor}?</b>
</Col> </Col>
</Row> </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' }}> <Row style={{ paddingTop: '10px' }}>
<Col xs={4}></Col> <Col xs={4}></Col>
<Col xs={2}>Fecha</Col> <Col xs={2}>Fecha</Col>
@ -396,8 +367,6 @@ export const SelectContainer: FC<IProps> = (props) => {
<Button <Button
variant='secondary' variant='secondary'
onClick={() => { onClick={() => {
setIDContenedor(0)
setContenedor('')
setDialogAddDate(false) setDialogAddDate(false)
}} }}
size='sm' size='sm'
@ -408,36 +377,6 @@ export const SelectContainer: FC<IProps> = (props) => {
</Row> </Row>
</Modal.Body> </Modal.Body>
</Modal> </Modal>
<Modal
show={ShowFacturasDialog}
onHide={() => setShowFacturasDialog(false)}
centered
dialogClassName='modal-20w'
>
<Modal.Body
style={{
height: 'calc(70vh)',
}}
>
<div style={{height:'100%'}}>
<FacturasContenedor IdContenedor={IDContenedor} Contenedor={Contenedor} IDTrafico={props.IDTrafico}/>
</div>
</Modal.Body>
<Modal.Footer>
<Row>
<Button
variant='secondary'
onClick={() => {
setShowFacturasDialog(false)
}}
size='sm'
>
Cerrar
</Button>
</Row>
</Modal.Footer>
</Modal>
</div> </div>
) )
} }

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

@ -1,7 +1,8 @@
import { Button, Card, Col, Form, FormControl, FormLabel, Modal, Row, Table } from "react-bootstrap" import { Button, Card, Col, Form, FormControl, FormLabel, Row } from "react-bootstrap"
import CurrencyFormat from "react-currency-format" import CurrencyFormat from "react-currency-format"
import { ICatClavesPedimentos } from "../../../Interfaces/Catalogos/ICatClavesPedimentos" import { ICatClavesPedimentos } from "../../../Interfaces/Catalogos/ICatClavesPedimentos"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import CorresponsalesTraficoServices from "../../../Services/Corresponsalias/Corresponsales.Trafico.Services"
import { AgGridReact } from "ag-grid-react" import { AgGridReact } from "ag-grid-react"
import { DTOPedimentosConsolidados } from "../../../DTO/Corresponsales/DTOPedimentosConsolidados" import { DTOPedimentosConsolidados } from "../../../DTO/Corresponsales/DTOPedimentosConsolidados"
import PedimentosConsolidadosService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Pedimento.Consolidados.Service" import PedimentosConsolidadosService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Pedimento.Consolidados.Service"
@ -13,16 +14,10 @@ import { RootState } from "../../../store/store"
import { addPedimento, deletePedimento, updatePedimento } from "../../../store/features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice" import { addPedimento, deletePedimento, updatePedimento } from "../../../store/features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice"
import { MsgInformativo } from "../../Utils/Toast/msgInformativo" import { MsgInformativo } from "../../Utils/Toast/msgInformativo"
import { FaEraser } from "react-icons/fa" import { FaEraser } from "react-icons/fa"
import DTORectificacionHistorico from "../../../DTO/Corresponsales/DTORectificacionHistorico"
import CTrafDataService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Services"
import { addRectificacion } from "../../../store/features/Corresponsales/CorresponsalesPedimentosRectificacionesSlice"
import { HistorialRectificaciones } from "../Rectificaciones/HistorialRectificaciones"
import ICorresponsalRectificacionHistorico from "../../../Interfaces/Corresponsales/ICorresponsalRectificacionHistorico"
import '../../../css/generic01.css'
interface IProps { interface IProps {
IdTrafico: number IdTrafico: number
Aduana: string Aduana: number
Patente: number Patente: number
ClavesPedimento: ICatClavesPedimentos[] ClavesPedimento: ICatClavesPedimentos[]
Depto: string Depto: string
@ -35,26 +30,67 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
const [msg, setMsg] = useState('') const [msg, setMsg] = useState('')
const msgColor = 'primary' const msgColor = 'primary'
const [showModal, setShowModal] = useState(false)
const [LoadComponent, setLoadComponent] = useState(0)
const [Id, setId] = useState(0) const [Id, setId] = useState(0)
const [Aduana, setAduana] = useState(props.Aduana) const [Aduana, setAduana] = useState(props.Aduana)
const [Patente, setPatente] = useState(props.Patente) const [Patente, setPatente] = useState(props.Patente)
const [Pedimento, setPedimento] = useState(0) const [Pedimento, setPedimento] = useState(0)
const [ClavePedimento, setClavePedimento] = useState(''); const [ClavePedimento, setClavePedimento] = useState('');
const [FechaPago, setFechaPago] = useState('') const [FechaPago, setFechaPago] = useState('')
const [IdPedimentoH, setIdPedimentoH] = useState(0)
const [AduanaH, setAduanaH] = useState(0)
const [PatenteH, setPatenteH] = useState(0)
const [PedimentoH, setPedimentoH] = useState(0)
const [ClavePedimentoH, setClavePedimentoH] = useState('')
const [FechaPagoH, setFechaPagoH] = useState('')
const [isRectificacion, setIsRectificacion] = useState(false)
const mCPedimentosConsolidados = useSelector((state:RootState) => state.CPedimentosConsolidados.PedimentosConsolidados) const mCPedimentosConsolidados = useSelector((state:RootState) => state.CPedimentosConsolidados.PedimentosConsolidados)
const mcRectificaciones = useSelector((state:RootState) => state.CRectificaciones.RectificacionesPedimentos) const [columnDefs] = useState([
const [Rectificaciones, setRectificaciones] = useState<ICorresponsalRectificacionHistorico[]>([]); props.Depto === 'Corresponsalias' ?
{
field: 'id',
headerName: 'Acciones',
width: 120,
sortable: true,
filter: true,
cellRenderer: (params: any) => {
return (
<div>
<IconContext.Provider value={{ color: 'blue', size: '18px' }}>
<BsPencilFill
onClick={() => {
loadRow(params.data)
}}
style={{ cursor: 'pointer' }}
/>
</IconContext.Provider>
&nbsp;&nbsp;&nbsp;
<IconContext.Provider value={{ color: 'red', size: '20px' }}>
<BsTrash
onClick={() => {
Delete(params.data.id)
}}
style={{ cursor: 'pointer' }}
/>
</IconContext.Provider>
</div>
)
}
} : {
field: 'id',
headerName: 'Acciones',
width: 110,
sortable: true,
filter: true,
},
{ field: 'patente', width: 110, sortable: true, filter: true },
{ field: 'aduana', width: 110, sortable: true, filter: true },
{ field: 'pedimento', width: 120, sortable: true, filter: true },
{ field: 'clave', width: 100, sortable: true, filter: true },
{
field: 'fechaPago',
sortable: true,
filter: true,
flex: 1, //Se encarga de llenar el espacio sobrante de las columnas
cellRenderer: (params: any) => {
if (params.value) return params.value.substring(0, 10)
else return ''
},
},
])
const [Data, setData] = useState<DTOPedimentosConsolidados[]>()
const cleanForm = () => { const cleanForm = () => {
setId(0) setId(0)
@ -83,7 +119,7 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
} }
const Append = () => { const Append = () => {
if(Aduana !== '' && Aduana !== '0' && Aduana !== ' ' && Aduana !== undefined && Aduana !== null && if(Aduana !== 0 &&
Patente !== 0 && Patente !== 0 &&
Pedimento !== 0 && Pedimento !== 0 &&
FechaPago !== '' && FechaPago !== '' &&
@ -102,13 +138,12 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
setHeader('Informativo') setHeader('Informativo')
setMsg('Datos actualizados correctamente') setMsg('Datos actualizados correctamente')
setShowMsg(true) setShowMsg(true)
}else{ return
}
dispatch(addPedimento(resp.data)) dispatch(addPedimento(resp.data))
setHeader('Informativo') setHeader('Informativo')
setMsg('Pedimento guardado correctamente') setMsg('Pedimento guardado correctamente')
setShowMsg(true) setShowMsg(true)
}
cleanForm()
return return
}).catch((e) => { }).catch((e) => {
setHeader('Error') setHeader('Error')
@ -146,7 +181,6 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
<Card.Body> <Card.Body>
{props.Depto === 'Corresponsalias' ? <> {props.Depto === 'Corresponsalias' ? <>
<Row className="justify-content-end align-items-center"> <Row className="justify-content-end align-items-center">
<Col xs={1}></Col>
<Col <Col
xs={1} xs={1}
style={{ style={{
@ -165,7 +199,7 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
<Col xs={1}> <Col xs={1}>
<FormLabel> <FormLabel>
Aduana 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> </FormLabel>
</Col> </Col>
<Col xs={1}> <Col xs={1}>
@ -185,11 +219,12 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
onValueChange={(values: any) => { onValueChange={(values: any) => {
const { value } = values const { value } = values
if(value.length === 7 ){ if(value.length === 7 ){
CTrafDataService.ValidaTraficoDuplicado(Aduana, Patente, value, props.IdTrafico).then( response => { CorresponsalesTraficoServices.ValidaTraficoDuplicado(Aduana, Patente, value, props.IdTrafico).then( response => {
if(response.data !== ""){ if(response.data !== ""){
setHeader('Informativo') /*setHeader('Informativo')
setMsg(`Pedimento Duplicado.\n\rLa referencia ${response.data} ya cuenta con los mismos datos de aduana, patente y pedimento`) setMsg(`Pedimento Duplicado.\n\rLa referencia ${response.data} ya cuenta con los mismos datos de aduana, patente y pedimento`)
setShowMsg(true) setShowMsg(true)*/
alert('Ya existe un pedimento con los mismos datos en esta referencia')
return return
} }
setPedimento(value.length === 0 ? 0 : value) setPedimento(value.length === 0 ? 0 : value)
@ -249,52 +284,15 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
</Col> </Col>
</Row> </Row>
<hr /></> : ("") } <hr /></> : ("") }
<div className="table-wrapper" style={{width:'100%', maxHeight:'100%'}}> <div className='ag-theme-alpine' style={{ height: 400, width: '100%'}}>
<Table <AgGridReact
hover rowData={mCPedimentosConsolidados}
size='sm' columnDefs={columnDefs}
> pagination={true}
<thead> paginationAutoPageSize={true}
<tr><th>#</th>{props.Depto === 'Corresponsalias' ? <th>Acciones</th> : ''}<th>Aduana</th><th>Patente</th><th>Pedimento</th><th>Clave</th><th>Fecha de Pago</th></tr> rowSelection={'multiple'}
</thead> rowMultiSelectWithClick={true}
<tbody> ></AgGridReact>
{mCPedimentosConsolidados
? mCPedimentosConsolidados.map((item, index) => {
return item.id > 0 ?
<tr>
<td>{index}</td>
{props.Depto === 'Corresponsalias' ?
<td><div>
<IconContext.Provider value={{ color: 'blue', size: '18px' }}>
<BsPencilFill
onClick={() => {
loadRow(item)
}}
style={{ cursor: 'pointer' }}
/>
</IconContext.Provider>
&nbsp;&nbsp;&nbsp;
<IconContext.Provider value={{ color: 'red', size: '20px' }}>
<BsTrash
onClick={() => {
Delete(item.id)
}}
style={{ cursor: 'pointer' }}
/>
</IconContext.Provider>
</div></td> : ''
}
<td>{item.aduana}</td>
<td>{item.patente}</td>
<td><div style={{display:'flex', alignItems:'start'}}>{item.pedimento} {item.id === 0 ? <span style={{fontSize:'8px'}}>{'⭐'}</span> : ''}</div></td>
<td>{item.clave}</td>
<td>{item.fechaPago ? item.fechaPago.substring(0,10) : ''}</td>
</tr>
: ''
})
: ''}
</tbody>
</Table>
</div> </div>
</Card.Body> </Card.Body>
</Card> </Card>
@ -306,7 +304,6 @@ export const PedimentosConsolidados:React.FC<IProps> = (props) => {
closeToast={() => { closeToast={() => {
setShowMsg(false) setShowMsg(false)
}} }}
/> /></>
</>
) )
} }

@ -30,12 +30,6 @@ export const ControlledInput: FC<IProps> = (props) => {
const [show, setShowMsg] = useState(false); const [show, setShowMsg] = useState(false);
const [msg, setMsg] = useState(''); const [msg, setMsg] = useState('');
const [ClasificacionProveedor, setClasificacionProveedor] = useState(2); const [ClasificacionProveedor, setClasificacionProveedor] = useState(2);
const [Uuid, setUuid] = useState(props.record.uuid);
const [FechaFactura, setFechaFactura] = useState(props.record.fechaFactura);
const [Cove, setCove] = useState(props.record.cove);
const [Entrega, setEntrega] = useState(props.record.entrega);
const [Transporte, setTransporte] = useState(props.record.transporte);
const [IdContenedor, setIdContenedor] = useState(props.record.idContenedor);
const onChangeFac = (event: any) => { const onChangeFac = (event: any) => {
setValue(event.target.value); setValue(event.target.value);
@ -69,12 +63,6 @@ export const ControlledInput: FC<IProps> = (props) => {
pedido: Pedido, pedido: Pedido,
code: 0, code: 0,
folioGEMCO: '', folioGEMCO: '',
uuid: Uuid,
fechaFactura: FechaFactura,
cove: Cove,
entrega: Entrega,
transporte: Transporte,
idContenedor: IdContenedor,
}; };
CorFacDataService.Append(data) CorFacDataService.Append(data)
.then((response) => { .then((response) => {
@ -146,47 +134,6 @@ export const ControlledInput: FC<IProps> = (props) => {
}) })
: null} : null}
</Form.Control> </Form.Control>
<input
value={Uuid}
onChange={(e) => setUuid(e.target.value)}
disabled={false}
onKeyDown={(e) => handleKeyDown(e, 2)}
style={{ width: '20%', textAlign: 'right' }}
/>
&nbsp; &nbsp; &nbsp;
<Form.Control
type='date'
id='FechaFactura'
size='sm'
value={FechaFactura}
placeholder='Fecha de la Factura'
onChange={(e) => setFechaFactura(e.target.value)}
/>
&nbsp; &nbsp; &nbsp;
<input
value={Cove}
onChange={(e) => setCove(e.target.value)}
disabled={false}
onKeyDown={(e) => handleKeyDown(e, 2)}
style={{ width: '20%', textAlign: 'right' }}
/>
&nbsp; &nbsp; &nbsp;
<input
value={Entrega}
onChange={(e) => setEntrega(e.target.value)}
disabled={false}
onKeyDown={(e) => handleKeyDown(e, 2)}
style={{ width: '20%', textAlign: 'right' }}
/>
&nbsp; &nbsp; &nbsp;
<input
value={Transporte}
onChange={(e) => setTransporte(e.target.value)}
disabled={false}
onKeyDown={(e) => handleKeyDown(e, 2)}
style={{ width: '20%', textAlign: 'right' }}
/>
&nbsp; &nbsp; &nbsp;
<MsgInformativo <MsgInformativo
show={show} show={show}
msg={msg} msg={msg}

@ -47,11 +47,7 @@ export const ProveedorFactura: FC<IProps> = (props) => {
const MsgTime = 2000; const MsgTime = 2000;
const msgColor = 'primary'; const msgColor = 'primary';
const ClasificacionProveedor = 2; const ClasificacionProveedor = 2;
const [Uuid, setUuid] = useState<string>('');
const [FechaFactura, setFechaFactura] = useState<string>('');
const [Cove, setCove] = useState<string>('');
const [Entrega, setEntrega] = useState<string>('');
const [Transporte, setTransporte] = useState<string>('');
const TblHeader: React.FC = () => ( const TblHeader: React.FC = () => (
<table> <table>
<tr <tr
@ -73,98 +69,26 @@ export const ProveedorFactura: FC<IProps> = (props) => {
<td width='560px' style={{ textAlign: 'center' }}> <td width='560px' style={{ textAlign: 'center' }}>
Proveedor Proveedor
</td> </td>
<td width='120px' style={{ textAlign: 'center' }}>
UUID
</td>
<td width='120px' style={{ textAlign: 'center' }}>
Fecha Factura
</td>
<td width='120px' style={{ textAlign: 'center' }}>
COVE
</td>
<td width='120px' style={{ textAlign: 'center' }}>
Entrega
</td>
<td width='120px' style={{ textAlign: 'center' }}>
Transporte
</td>
</tr> </tr>
</table> </table>
); );
const columnsFacturas = [ const columnsFacturas = [
{ {
name: 'Id', name: 'id',
width: '65px', width: '10%',
selector: (row: ICorresponsalFacturas) => row.id, selector: (row: ICorresponsalFacturas) => row.id,
sortable: true, sortable: true,
}, },
{ {
name: 'Factura',
width:'150px',
selector: (row: ICorresponsalFacturas) => row.factura,
sortable: true,
},
{
name: 'Valor Dls',
width:'100px',
selector: (row: ICorresponsalFacturas) => '$ ' + row.valorFacturaDls,
sortable: true,
},
{
name: 'Pedido',
width:'130px',
selector: (row: ICorresponsalFacturas) => row.pedido,
sortable: true,
},
{
name: 'Proveedor',
width:'150px',
selector: (row: ICorresponsalFacturas) => mProveedores.filter(x => x.id === row.proveedor)[0].nombre,
sortable: true,
center:true,
wrap: true
},
{
name: 'UUID',
width:'160px',
selector: (row: ICorresponsalFacturas) => row.uuid ? row.uuid : '',
sortable: true,
center:true,
wrap: true
},
{
name: 'Fecha Factura',
width: '125px',
selector: (row: ICorresponsalFacturas) => row.fechaFactura? row.fechaFactura!.substring(0,11) : '',
sortable: true,
},
{
name: 'COVE',
selector: (row: ICorresponsalFacturas) => row.cove ? row.cove : '',
sortable: true,
allowOverflow: true
},
{
name: 'Entrega',
selector: (row: ICorresponsalFacturas) => row.entrega ? row.entrega : '',
sortable: true,
},
{
name: 'Transporte',
selector: (row: ICorresponsalFacturas) => row.transporte ? row.transporte : '',
sortable: true,
},
/* {
name: <TblHeader />, name: <TblHeader />,
width: '75%', width: '75%',
cell: (row: ICorresponsalFacturas) => { cell: (row: ICorresponsalFacturas) => {
return <ControlledInput record={row} disabled={false} mode={2} />; return <ControlledInput record={row} disabled={false} mode={2} />;
}, },
}, */ },
{ {
name: 'Elimina', name: 'Elimina',
width: '80px',
cell: (row: ICorresponsalFacturas) => ( cell: (row: ICorresponsalFacturas) => (
<div <div
style={{ style={{
@ -189,7 +113,6 @@ export const ProveedorFactura: FC<IProps> = (props) => {
useEffect(() => { useEffect(() => {
FacDataService.getAll(props.IDTrafico) FacDataService.getAll(props.IDTrafico)
.then((response) => { .then((response) => {
console.log(response.data);
dispatch(populateCorresponsalesFacturas(response.data)); dispatch(populateCorresponsalesFacturas(response.data));
}) })
.catch((e: Error) => { .catch((e: Error) => {
@ -205,12 +128,6 @@ export const ProveedorFactura: FC<IProps> = (props) => {
setIDFactura(0); setIDFactura(0);
setIDProveedor(0); setIDProveedor(0);
setValorFacturaDls(0); setValorFacturaDls(0);
setPedido('')
setUuid('')
setFechaFactura('')
setCove('')
setEntrega('')
setTransporte('')
}; };
const saveForm = () => { const saveForm = () => {
@ -245,12 +162,6 @@ export const ProveedorFactura: FC<IProps> = (props) => {
pedido: Pedido, pedido: Pedido,
code: 0, code: 0,
folioGEMCO: '', folioGEMCO: '',
uuid: Uuid,
fechaFactura: FechaFactura,
cove: Cove,
entrega: Entrega,
transporte: Transporte,
idContenedor: 0,
}; };
FacDataService.Append(data) FacDataService.Append(data)
.then((response) => { .then((response) => {
@ -356,7 +267,7 @@ export const ProveedorFactura: FC<IProps> = (props) => {
fontSize: '18px', fontSize: '18px',
backgroundColor: '#F5FFED', backgroundColor: '#F5FFED',
border: '2px solid #25D05B', border: '2px solid #25D05B',
width: '100%', width: '100px',
textAlign: 'right', textAlign: 'right',
borderRadius: '10px', borderRadius: '10px',
}} }}
@ -426,58 +337,6 @@ export const ProveedorFactura: FC<IProps> = (props) => {
</Col> </Col>
<Col>&nbsp;</Col> <Col>&nbsp;</Col>
</Row> </Row>
<Row className={props.canDelete ? 'visible justify-content-end' : 'invisible heightZero'} >
<Col xs={3}>
<Form.Control
type='text'
id='UUID'
size='sm'
value={Uuid}
placeholder='UUID'
onChange={(e) => setUuid(e.target.value)}
/>
</Col>
<Col xs={2}>
<Form.Control
type='date'
id='FechaFactura'
size='sm'
value={FechaFactura}
placeholder='Fecha de la Factura'
onChange={(e) => setFechaFactura(e.target.value)}
/>
</Col>
<Col xs={2}>
<Form.Control
type='text'
id='Cove'
size='sm'
value={Cove}
placeholder='COVE'
onChange={(e) => setCove(e.target.value)}
/>
</Col>
<Col xs={2}>
<Form.Control
type='text'
id='Entrega'
size='sm'
value={Entrega}
placeholder='Entrega'
onChange={(e) => setEntrega(e.target.value)}
/>
</Col>
<Col xs={2}>
<Form.Control
type='text'
id='Transporte'
size='sm'
value={Transporte}
placeholder='Transporte'
onChange={(e) => setTransporte(e.target.value)}
/>
</Col>
</Row>
</Card.Subtitle> </Card.Subtitle>
<DataTable <DataTable
/* noHeader */ /* noHeader */

@ -1,85 +0,0 @@
import { useEffect, useState } from "react"
import { Alert, Card, Col, Row, Table } from "react-bootstrap"
import { useSelector } from "react-redux"
import { RootState } from "../../../store/store"
import { AgGridReact } from "ag-grid-react"
import ICorresponsalRectificacionHistorico from "../../../Interfaces/Corresponsales/ICorresponsalRectificacionHistorico"
interface IProps{
//pedimento: number
IdPedimentoConsolidado: string
}
export const HistorialRectificaciones: React.FC<IProps> = (props) => {
const [columnDefs] = useState([
{ field: 'patente', width: 110, sortable: true, filter: true },
{ field: 'aduana', width: 110, sortable: true, filter: true },
{ field: 'pedimento', width: 120, sortable: true, filter: true },
{ field: 'clave', width: 100, sortable: true, filter: true },
{
field: 'fechaPago',
sortable: true,
filter: true,
cellRenderer: (params: any) => {
if (params.value) return params.value.substring(0, 10)
else return ''
},
},
{
field: 'fhCreacion',
sortable: true,
filter: true,
cellRenderer: (params: any) => {
if (params.value) return params.value
else return ''
},
flex:1
},
])
const mcRectificaciones = useSelector((state:RootState) => state.CRectificaciones.RectificacionesPedimentos)
const [Rectificaciones, setRectificaciones] = useState<ICorresponsalRectificacionHistorico[]>([]);
useEffect(()=>{
if(props.IdPedimentoConsolidado !== '#')
setRectificaciones(mcRectificaciones.filter(x => x.idPedimentoConsolidado === + props.IdPedimentoConsolidado))
else
setRectificaciones(mcRectificaciones)
},[mcRectificaciones, props.IdPedimentoConsolidado])
return(
<div>
<Row>
<Col xs={12}>
<b>Historial de Pedimentos Rectificados</b>
</Col>
</Row>
<br/>
<div className="table-wrapper" style={{width:'100%', maxHeight:'100%'}}>
<Table
className="table table-earnings table-earnings__challenge"
hover
size="sm"
>
<thead>
<tr><th>#</th><th>Aduana</th><th>Patente</th><th>Pedimento</th><th>Clave</th><th>Fecha de Pago</th></tr>
</thead>
<tbody>
{Rectificaciones
? Rectificaciones.map((item, index) => {
return(
<tr>
<td>{index + 1}</td>
<td>{item.aduana}</td>
<td>{item.patente}</td>
<td>{item.pedimento}</td>
<td>{item.clave}</td>
<td>{item.fechaPago ? item.fechaPago.substring(0,10) : ''}</td>
</tr>
)
})
: ''}
</tbody>
</Table>
</div>
</div>
)
}

@ -1,382 +0,0 @@
import { useState } from "react";
import { Button, Card, Col, Form, FormControl, FormLabel, Row } from "react-bootstrap"
import CurrencyFormat from "react-currency-format";
import { IconContext } from "react-icons";
import { FaEraser } from "react-icons/fa";
import CTrafDataService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Services"
import { useDispatch, useSelector } from "react-redux";
import { ICatClavesPedimentos } from "../../../Interfaces/Catalogos/ICatClavesPedimentos";
import { DTOPedimentosConsolidados } from "../../../DTO/Corresponsales/DTOPedimentosConsolidados";
import DTORectificacionHistorico from "../../../DTO/Corresponsales/DTORectificacionHistorico";
import { updatePedimento } from "../../../store/features/Corresponsales/CorresponsalesPedimentosConsolidadosSlice";
import { addRectificacion } from "../../../store/features/Corresponsales/CorresponsalesPedimentosRectificacionesSlice";
import ICorresponsalRectificacionHistorico from "../../../Interfaces/Corresponsales/ICorresponsalRectificacionHistorico";
import { RootState } from "../../../store/store";
import { HistorialRectificaciones } from "./HistorialRectificaciones";
import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
interface IProps {
IdTrafico: number
Aduana: string
Patente: number
ClavesPedimento: ICatClavesPedimentos[]
Pedimentos: DTOPedimentosConsolidados[]
Depto: string
UserId: number
onAppendRectificacion: (data: DTORectificacionHistorico) => void
}
export const NuevaRectificacion:React.FC<IProps> = (props) => {
const dispatch = useDispatch()
const [header, setHeader] = useState('')
const [show, setShowMsg] = useState(false)
const [msg, setMsg] = useState('')
const msgColor = 'primary'
const [showHistorial, setShowHistorial] = useState(false)
const [Id, setId] = useState(0)
const [Aduana, setAduana] = useState(props.Aduana)
const [Patente, setPatente] = useState(props.Patente)
const [Pedimento, setPedimento] = useState(0)
const [ClavePedimento, setClavePedimento] = useState('');
const [FechaPago, setFechaPago] = useState('')
const [IdPedimentoH, setIdPedimentoH] = useState(0)
const [AduanaH, setAduanaH] = useState(props.Aduana)
const [PatenteH, setPatenteH] = useState(props.Patente)
const [PedimentoH, setPedimentoH] = useState(0)
const [ClavePedimentoH, setClavePedimentoH] = useState('')
const [FechaPagoH, setFechaPagoH] = useState('')
const [IdPedimentoConsolidadoSelected, setIdPedimentoConsolidadoSelected] = useState("#")
function setDate(fecha: string | undefined): string {
if (!fecha) return ''
else {
var dd = fecha?.substring(8, 10)
var mm = fecha?.substring(5, 7)
var yyyy = fecha?.substring(0, 4)
return yyyy + '-' + mm + '-' + dd
}
}
const generaRectificacion = () => {
if (Aduana && Patente && Pedimento && ClavePedimento.length>0 && FechaPago) {
const data : DTORectificacionHistorico = {
IdTrafico: props.IdTrafico,
IdUsuario: props.UserId,
IdPedimento: IdPedimentoH,
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(//Se actualizan los datos del pedimento seleccionado(original) con los datos de la rectificacion recien capturada
updatePedimento({
id: data.IdPedimento,
idTrafico: data.IdTrafico,
aduana: data.Aduana,
patente: data.Patente,
pedimento: data.Pedimento,
clave: data.Clave,
fechaPago: data.FechaPago
})
)
dispatch(//Los datos del pedimento original se guardan para mantener un historial de rectificaciones
addRectificacion({
id: response.data.id,
usuario: response.data.usuario,
idTrafico: response.data.idTrafico,
aduana: response.data.aduana,
patente: response.data.patente,
pedimento: response.data.pedimento,
clave: response.data.clave,
fechaPago: response.data.fechaPago,
fhCreacion: response.data.fhCreacion,
activo: response.data.activo,
idPedimentoConsolidado: response.data.idPedimentoConsolidado
})
)
cleanForm()
props.onAppendRectificacion(data)//Al cerrar se pasan los datos a la vista del trafico para actualizar los campos
return
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrió un error al crear la rectificación. Favor de actualizar la página e intentarlo nuevamente.')
setShowMsg(true)
return
})
} else {
setHeader('Error')
setMsg('Parea poder generar este proceso es necesario que los siguientes campos tengan informacion: Patente, Aduana, Pedimento, Clave, Fecha pago')
setShowMsg(true)
return
}
}
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)
setPedimentoH(dto.pedimento)
setClavePedimentoH(dto.clave)
setFechaPagoH(dto.fechaPago)
setShowHistorial(true)
}
const CancelIsRectificacion = () => {
setAduanaH('0')
setPatenteH(0)
setPedimentoH(0)
setClavePedimentoH('')
setFechaPagoH('')
setIdPedimentoH(0)
}
const cleanForm = () => {
setIdPedimentoConsolidadoSelected("#")
setIdPedimentoH(0)
setPedimentoH(0)
setClavePedimentoH('')
setFechaPagoH('')
setId(0)
setPedimento(0)
setClavePedimento('')
setFechaPago('')
}
return (
<Card style={{height:'100%'}}>
<Card.Body style={{overflowY:'scroll'}}>
{ props.Depto === 'Corresponsalias' ? <>
<Row className="justify-content-end align-items-center">
<Col xs={1}><span>Original</span></Col>
<Col xs={1}>
</Col>
<Col xs={1}>
<FormLabel>
Aduana
<FormControl type='text' size='sm' disabled value={AduanaH}></FormControl>
</FormLabel>
</Col>
<Col xs={1}>
<FormLabel>
Patente
<FormControl type='text' size='sm' disabled value={PatenteH}></FormControl>
</FormLabel>
</Col>
<Col xs={2}>
<FormLabel>
Pedimento
<Form.Control
as="select"
id="CmbCliente"
onChange={(e) => {
setIdPedimentoConsolidadoSelected(e.target.value)
PrepareRectificacion(+e.target.value)
}}
value={IdPedimentoConsolidadoSelected}
className="form-select form-select-sm"
>
<option value="#">-SELECCIONE-</option>
{props.Pedimentos
? props.Pedimentos.map((p) => {
return (
<option key={p.id} value={p.id}>
{p.pedimento}
</option>
)
})
: null}
</Form.Control>
</FormLabel>
</Col>
<Col xs={2}>
<Form.Label>
Clave
<FormControl type='text' size='sm' disabled value={ClavePedimentoH}></FormControl>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label>
Fec. Pago
<Form.Control
type="date"
id="FechaPago"
size="sm"
value={setDate(FechaPagoH)}
readOnly={true}
disabled={true}
/>
</Form.Label>
</Col>
<Col xs={2}>
<Button onClick={() => generaRectificacion()}>Agregar</Button>
</Col>
</Row>
<Row className="justify-content-end align-items-center">
<Col xs={1}><span style={{wordWrap:'normal'}}>Rectificación</span></Col>
<Col
xs={1}
style={{
textAlign: 'right',
paddingTop: '5px',
cursor: 'pointer',
}}
onClick={() => {
cleanForm();
}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<FaEraser />
</IconContext.Provider>
</Col>
<Col xs={1}>
<FormLabel>
Aduana
<FormControl type='text' size='sm' disabled value={Aduana} onChange={(e) => setAduana(e.target.value)}></FormControl>
</FormLabel>
</Col>
<Col xs={1}>
<FormLabel>
Patente
<FormControl type='text' size='sm' disabled value={Patente} onChange={(e) => setPatente(+e.target.value)}></FormControl>
</FormLabel>
</Col>
<Col xs={2}>
<FormLabel>
Pedimento
<CurrencyFormat
value={Pedimento}
displayType='input'
format={'### ####'}
mask="_"
onValueChange={(values: any) => {
const { value } = values
if(value.length === 7 ){
CTrafDataService.ValidaTraficoDuplicado(Aduana, Patente, value, props.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',
border: '2px solid #837F5D',
width: '100%',
textAlign: 'right',
borderRadius: '10px'
}}
/>
</FormLabel>
</Col>
<Col xs={2}>
<Form.Label>
Clave
<Form.Control
as="select"
id="CmbClavePedimento"
onChange={(e) => {
setClavePedimento(e.target.value)
}}
className="form-select form-select-sm"
value={ClavePedimento}
>
<option value="-Seleccione-">-Seleccione-</option>
{props.ClavesPedimento
? props.ClavesPedimento.map((item, index) => {
return (
<option key={item.id} value={item.clave}>
{item.clave}
</option>
)
})
: ''}
</Form.Control>
</Form.Label>
</Col>
<Col xs={2}>
<Form.Label>
Fec. Pago
<Form.Control
type="date"
id="FechaPago"
size="sm"
value={FechaPago}
onChange={(e) => setFechaPago(e.target.value)}
/>
</Form.Label>
</Col>
<Col xs={2}></Col>
</Row>
<hr/> </>: '' }
<HistorialRectificaciones IdPedimentoConsolidado={IdPedimentoConsolidadoSelected} ></HistorialRectificaciones>
<MsgInformativo
show={show}
msg={msg}
header={header}
msgColor={msgColor}
closeToast={() => {
setShowMsg(false)
}}
/>
</Card.Body>
</Card>
)
}

@ -1,154 +0,0 @@
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 { 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: DTOTraficoSolicitud;
userId: number;
close: (estado: number) => void
title: string;
mensaje: string;
}
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){
setHeader('Error');
setMsg('Favor de capturar una razon válida.')
setShowMsg(true)
return;
}
if(SelectedOption === 0 && Motivo.length < 30){
setHeader('Error');
setMsg('La razón del rechazo debe contener al menos 30 caracteres')
setShowMsg(true)
return;
}
var solicitud: ICorresponsalTraficoSolicitud = {
id: props.solicitud.id,
idTrafico: props.solicitud.idTrafico,
idUsuarioSolicita: props.solicitud.idUsuarioSolicita,
fechaSolicita: props.solicitud.fechaSolicita,
motivoSolicita: props.solicitud.motivoSolicita,
idUsuarioAutoriza: props.userId,
fechaAutoriza: undefined,
motivoRechazo: Motivo,
estado: SelectedOption
}
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)
}
})
.catch(() => {
setHeader('Error');
setMsg('Ocurrió un error. Favor de intentar nuevamente')
setShowMsg(true)
return;
})
}
return(
<>
<h3>{props.title}</h3>
<hr/>
<Row>
<CiWarning style={{fontSize:'150px', color:'#ff3100'}} />
</Row>
<Row>
<Col xs={12}>
<p style={{textAlign:'center'}}>
{props.solicitud.usuarioSolicita} {props.mensaje}
</p>
<p style={{textAlign:'center'}}>{props.solicitud.motivoSolicita}</p>
</Col>
</Row>
<Row className='justify-content-center'>
<Col xs={4}>
<Form.Control
as='select'
className="form-select form-select-sm"
value={SelectedOption}
style={{width:'100%', marginBottom:'10px'}}
onChange={(e) => setSelectedOption(+e.target.value)}
>
<option value={2}>Autorizar</option>
<option value={0}>Rechazar</option>
</Form.Control>
</Col>
</Row>
<Row style={{visibility: SelectedOption === 0 ? 'visible' : 'hidden'}}>
<Col xs={12}>
<FormLabel style={{width:'100%'}}>
<Form.Control
as="textarea"
rows={3}
onChange={(e) => setMotivo(e.target?.value)}
placeholder='ingrese el motivo del rechazo de la solicitud'
/>
</FormLabel>
</Col>
</Row>
<Row className='justify-content-end'>
<Col xs={4} style={{textAlign:'end'}}>
<Button variant='primary' onClick={() => {AppendSolicitud()}}>
Guardar
</Button>
</Col>
</Row>
<MsgInformativo
show={showMsg}
msg={msg}
header={header}
msgColor={'primary'}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

@ -1,119 +0,0 @@
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 { ICorresponsalTraficoSolicitud } from "../../../Interfaces/Corresponsales/ICorresponsalTraficoSolicitud"
import CorresponsalesTraficoSolicitudService from "../../../Services/Corresponsalias/Corresponsales.Trafico.Solicitud.Service"
interface IProps{
idTrafico: number,
idUsuario: number,
close: () => void,
title: string,
}
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')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
const AppendSolicitud = () => {
if(!Motivo){
setHeader('Error');
setMsg('Favor de capturar una razon válida.')
setShowMsg(true)
return;
}
if(Motivo.length < 30){
setHeader('Error');
setMsg('La razón de su solicitud debe contener al menos 30 caracteres')
setShowMsg(true)
return;
}
var solicitud: ICorresponsalTraficoSolicitud = {
id: 0,
idTrafico: props.idTrafico,
idUsuarioSolicita: props.idUsuario,
fechaSolicita: undefined,
motivoSolicita: Motivo,
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.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)
}
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()
})
.catch(() => {
setHeader('Error');
setMsg('Ocurrió un error. Favor de intentar nuevamente')
setShowMsg(true)
return;
})
}
return(
<>
<h3>{props.title}</h3>
<hr/>
<Row>
<Col xs={12}>
<FormLabel style={{width:'100%'}}>
<Form.Control
as="textarea"
rows={5}
onChange={(e) => setMotivo(e.target?.value)}
placeholder='ingrese el motivo de la solicitud'
/>
</FormLabel>
</Col>
</Row>
<Row className='justify-content-end'>
<Col xs={2} style={{textAlign:'end'}}>
<Button variant='primary' onClick={() => AppendSolicitud()}>
Guardar
</Button>
</Col>
</Row>
<MsgInformativo
show={showMsg}
msg={msg}
header={header}
msgColor={'primary'}
closeToast={() => {
setShowMsg(false)
}}
/>
</>
)
}

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

File diff suppressed because it is too large Load Diff

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

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

@ -5,20 +5,14 @@ import DashboardDataService from '../../Services/Dashboard/Dashboard.Corresponsa
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import ReactApexChart from 'react-apexcharts'; import ReactApexChart from 'react-apexcharts';
import { ApexOptions } from '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) { export default function DashboardCorresponsales(props: IProps) {
let navigate = useNavigate(); let navigate = useNavigate();
const [TotalCorresponsales, setTotalCorresponsales] = useState(0); const [TotalCorresponsales, setTotalCorresponsales] = useState(0);
const [labels, setlabels] = useState<string[]>([]); const [labels, setlabels] = useState<string[]>([]);
const [series, setseries] = useState<number[]>([]); const [series, setseries] = useState<number[]>([]);
const [Solicitudes, setSolicitudes] = useState(0);
//const [TipoCambio, setTipoCambio] = useState(0) //const [TipoCambio, setTipoCambio] = useState(0)
const [CircleOptions, setCirleOpcions] = useState<ApexOptions>({ const [CircleOptions, setCirleOpcions] = useState<ApexOptions>({
labels: [ labels: [
@ -38,9 +32,6 @@ export default function DashboardCorresponsales(props: IProps) {
}); });
useEffect(() => { useEffect(() => {
DashboardDataService.getSolicitudesEliminarCuenta().then((response) => {
setSolicitudes(response.data.total)
}).catch((e: Error) => {return;})
DashboardDataService.getCorresponsales() DashboardDataService.getCorresponsales()
.then((response) => { .then((response) => {
console.log(response.data); console.log(response.data);
@ -153,31 +144,6 @@ export default function DashboardCorresponsales(props: IProps) {
</Card.Footer> </Card.Footer>
</Card> </Card>
</Col> </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,21 +7,18 @@ import DashboardFacturacionDataService from '../../Services/Dashboard/Dashboard.
import DashboardContaDataService from '../../Services/Dashboard/Dashboard.Contabilidad.Service' import DashboardContaDataService from '../../Services/Dashboard/Dashboard.Contabilidad.Service'
import { ApexOptions } from 'apexcharts' import { ApexOptions } from 'apexcharts'
import ReactApexChart from 'react-apexcharts' import ReactApexChart from 'react-apexcharts'
import { FaCcMastercard, FaReply } from 'react-icons/fa' import { FaReply } from 'react-icons/fa'
import { FcSurvey } from 'react-icons/fc' import { FcSurvey } from 'react-icons/fc'
import DashboardCorresponsales from './DashboardCorresponsales' import DashboardCorresponsales from './DashboardCorresponsales'
import { MdTimer } from 'react-icons/md'
interface IProps { interface IProps {
Depto: string; Depto: string;
Perfil: string;
} }
export const DashboardFacturacion: FC<IProps> = (props) => { export const DashboardFacturacion: FC<IProps> = (props) => {
const [labels, setlabels] = useState<string[]>([]); const [labels, setlabels] = useState<string[]>([]);
const [series, setseries] = useState<number[]>([]); const [series, setseries] = useState<number[]>([]);
const [RechazosContabilidad, setRechazosContabilidad] = useState(0); const [RechazosContabilidad, setRechazosContabilidad] = useState(0);
const [SolicitudesReapertura, setSolicitudesReapertura] = useState(0);
const navigate = useNavigate(); const navigate = useNavigate();
const [ChartOptions, setChartOptions] = useState<ApexOptions>({ const [ChartOptions, setChartOptions] = useState<ApexOptions>({
labels: [ labels: [
@ -46,9 +43,6 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
}).catch((e: Error) => { }).catch((e: Error) => {
return; return;
}) })
DashboardFacturacionDataService.getSolicitudesReapertura().then((response) => {
setSolicitudesReapertura(response.data.total)
}).catch((e: Error) => {return;})
DashboardFacturacionDataService.getFacturacion() DashboardFacturacionDataService.getFacturacion()
.then((response) => { .then((response) => {
console.log(response.data); console.log(response.data);
@ -111,7 +105,7 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
return ( return (
<> <>
{ {
props.Depto === 'Facturacion' ? <DashboardCorresponsales Perfil={props.Perfil}/> : "" props.Depto === 'Facturacion' ? <DashboardCorresponsales/> : ""
} }
<Col> <Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'> <Card style={{ width: '18rem' }} className='dashboardComponentFont'>
@ -164,59 +158,6 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
</Card> </Card>
</Col> : "" </Col> : ""
} }
{props.Perfil === 'Sup. Facturacion' || props.Perfil === 'Administrador'?
<>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Facturación </Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>Solicitudes de reapertura de 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>
{SolicitudesReapertura}
</div>
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link
to='../RptCorresponsalesTraficos/proc=3/modo=4'
style={{ textDecoration: 'none', float: 'right', paddingRight: '10px' }}
>
Ver mas...
</Link>
</Card.Footer>
</Card>
</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>
</> : ""
}
</> </>
) )
} }

@ -1,125 +0,0 @@
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>
)
}

@ -1,517 +0,0 @@
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 * as React from 'react'
import { useNavigate } from 'react-router-dom' import { useNavigate } from 'react-router-dom'
import { useSelector, useDispatch } from 'react-redux' import { useSelector, useDispatch } from 'react-redux'
import { IsAlenUser, logued } from '../../store/features/userStatusSlice/userStatusSlice' import { logued } from '../../store/features/userStatusSlice/userStatusSlice'
import ILogin from '../../Interfaces/Ilogin' import ILogin from '../../Interfaces/Ilogin'
import ItemMenu from '../../Interfaces/Catalogos/IItemMenu' import ItemMenu from '../../Interfaces/Catalogos/IItemMenu'
import '../../css/login.css' import '../../css/login.css'
@ -17,14 +17,13 @@ import AuthDS from '../../Services/Auth/Auth.Service'
import UserDS from '../../Services/Catalogos/Usuarios.Services' import UserDS from '../../Services/Catalogos/Usuarios.Services'
import { useEffect } from 'react' import { useEffect } from 'react'
import Info from '../../../package.json' import Info from '../../../package.json'
import ClientesServices from '../../Services/Catalogos/Clientes.Services'
export const Login: React.FC<{}> = () => { export const Login: React.FC<{}> = () => {
const dispatch = useDispatch() const dispatch = useDispatch()
const navigate = useNavigate() const navigate = useNavigate()
let _menu: ItemMenu[] = [] let _menu: ItemMenu[] = []
const [mainMenu, setMainMenu] = React.useState(_menu) const [mainMenu, setMainMenu] = React.useState(_menu)
const userLogued = useSelector((state: RootState) => state.userStatus.isLogged) const userLogued = useSelector((state: RootState) => state.userStatus.value)
const [show, setShow] = React.useState(false) const [show, setShow] = React.useState(false)
const [Usuario, setUsuario] = React.useState('') const [Usuario, setUsuario] = React.useState('')
const [Contrasenia, setContrasenia] = React.useState('') const [Contrasenia, setContrasenia] = React.useState('')
@ -60,7 +59,7 @@ export const Login: React.FC<{}> = () => {
if(values.Perfil === 'Corresponsales'){ if(values.Perfil === 'Corresponsales'){
navigate('/RptCorresponsalesTraficos/proc=1/modo=1') navigate('/RptCorresponsalesTraficos/proc=1/modo=1')
}else if(values.Perfil === 'Clientes'){ }else if(values.Perfil === 'Clientes'){
checkForAlenUser(values.UserId) navigate('/Clientes/Traficos')
}else{ }else{
navigate('/') navigate('/')
} }
@ -106,25 +105,6 @@ export const Login: React.FC<{}> = () => {
}) })
}, [dispatch, navigate]) }, [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 ( return (
<div> <div>
{!userLogued ? ( {!userLogued ? (

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

@ -1,195 +0,0 @@
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,9 +41,8 @@ import { InitCorresponsalesContenedores, addCorresponsalesContenedores } from '.
import ICorresponsalContenedores from '../../Interfaces/Corresponsales/ICorresponsalContenedores' import ICorresponsalContenedores from '../../Interfaces/Corresponsales/ICorresponsalContenedores'
import ICorresponsalFacturas from '../../Interfaces/Corresponsales/ICorresponsalFacturas' import ICorresponsalFacturas from '../../Interfaces/Corresponsales/ICorresponsalFacturas'
import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores' import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores'
import { FaCrow, FaTrash } from 'react-icons/fa' import { FaCrow } from 'react-icons/fa'
import { CrearSolicitud } from '../Corresponsales/SolicitudReapertura/CrearSolicitud' /* import '../../css/generic01.css' */
import '../../css/generic01.css'
interface IProps {} interface IProps {}
@ -72,7 +71,6 @@ export default function RptCorresponsalesTraficos(props: IProps) {
const [filteredData, setFilteredData] = useState<ICorresponsalTrafico[]>([]) const [filteredData, setFilteredData] = useState<ICorresponsalTrafico[]>([])
const [show, setShowMsg] = useState(false) const [show, setShowMsg] = useState(false)
const [ShowModal, setShowModal] = useState(false) const [ShowModal, setShowModal] = useState(false)
const [ShowModalSolicitud, setShowModalSolicitud] = useState(false)
const [header, setHeader] = useState('') const [header, setHeader] = useState('')
const [msg, setMsg] = useState('') const [msg, setMsg] = useState('')
const [Inicio, setInicio] = useState(currentDate(-365)) const [Inicio, setInicio] = useState(currentDate(-365))
@ -86,7 +84,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
//const [Corresponsal, setCorresponsal] = useState(0) //const [Corresponsal, setCorresponsal] = useState(0)
const [Pedimento, setPedimento] = useState(0) const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0); const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState('0'); const [Aduana, setAduana] = useState(0);
const [Referencia, setReferencia] = useState('') const [Referencia, setReferencia] = useState('')
const [Clientes, setClientes] = useState<Array<IClientes>>() const [Clientes, setClientes] = useState<Array<IClientes>>()
const [filtro, setFiltro] = useState('') const [filtro, setFiltro] = useState('')
@ -95,22 +93,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
ICatCorresponsales[] ICatCorresponsales[]
>([]) >([])
const hiddenFileInputRef = useRef<HTMLInputElement>(null); const hiddenFileInputRef = useRef<HTMLInputElement>(null);
const [Deleting, setDeleting] = useState(false);
const [columnDefs] = useState([ 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: 'id', headerName: 'id', width: 70, sortable: true, filter: true },
{ {
field: 'proceso', field: 'proceso',
@ -292,20 +275,8 @@ export default function RptCorresponsalesTraficos(props: IProps) {
}, []) }, [])
function getParams(e: RowClickedEvent) { function getParams(e: RowClickedEvent) {
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) AbreTrafico(e.data.id)
} }
}
function AbreTrafico(id: number) { function AbreTrafico(id: number) {
dispatch(InitCorresponsalesFacturas(IDTrafico)) dispatch(InitCorresponsalesFacturas(IDTrafico))
@ -326,7 +297,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
Pedimento: Pedimento, Pedimento: Pedimento,
Aduana: Aduana, Aduana: Aduana,
Patente: Patente, 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, Modo: modo ? parseInt(modo.replace('modo=', '')) : 0,
Referencia: Referencia Referencia: Referencia
} }
@ -355,7 +326,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
} }
function exportExcel(jsonData: any[], fileName: string): void { function exportExcel(jsonData: any[], fileName: string): void {
/* let Heading = [ let Heading = [
[ [
{ {
title: 'Aduana Seccion Despacho', title: 'Aduana Seccion Despacho',
@ -391,20 +362,20 @@ export default function RptCorresponsalesTraficos(props: IProps) {
'Valor Comercial Ped', 'Valor Comercial Ped',
'Valor Factura Item MN', 'Valor Factura Item MN',
], ],
] */ ]
const wb = XLSX.utils.book_new() const wb = XLSX.utils.book_new()
const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([]) const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([])
//XLSX.utils.sheet_add_aoa(ws, Heading) XLSX.utils.sheet_add_aoa(ws, Heading)
XLSX.utils.sheet_add_json(ws, jsonData, { origin: 'A1', skipHeader: false }) XLSX.utils.sheet_add_json(ws, jsonData, { origin: 'A2', skipHeader: true })
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
XLSX.writeFile(wb, fileName + '.xlsx') XLSX.writeFile(wb, fileName + '.xlsx')
/* var range = XLSX.utils.decode_range(ws['!ref?']) var range = XLSX.utils.decode_range(ws['!ref?'])
for (var C = range.s.c; C <= range.e.c; ++C) { for (var C = range.s.c; C <= range.e.c; ++C) {
var address = XLSX.utils.encode_col(C) + '1' // <-- first row, column number C var address = XLSX.utils.encode_col(C) + '1' // <-- first row, column number C
if (!ws[address]) continue if (!ws[address]) continue
ws[address].v = ws[address].v.toUpperCase() ws[address].v = ws[address].v.toUpperCase()
} */ }
} }
const readFile = (event: any) => { const readFile = (event: any) => {
@ -450,10 +421,10 @@ export default function RptCorresponsalesTraficos(props: IProps) {
contenedor.semaforo = +element[23] === 1 ? 2 : 1 contenedor.semaforo = +element[23] === 1 ? 2 : 1
await saveTxtContenedores(contenedor); await saveTxtContenedores(contenedor);
}else{ }else{
await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1,idTipoContenedor:0}); await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1});
} }
}else{ }else{
await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1, idTipoContenedor:0}); await saveTxtContenedores({id: 0, contenedor: element[32], idTrafico: model.id , fSemaforo: element[22], semaforo: +element[23] === 1 ? 2 : 1});
} }
}) })
.catch((e: Error) => { .catch((e: Error) => {
@ -489,13 +460,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
corresponsal: model.idCorresponsal, corresponsal: model.idCorresponsal,
pedido: element[29], pedido: element[29],
code: 0, code: 0,
folioGEMCO: '', folioGEMCO: ''
uuid: '',
fechaFactura: '',
cove: '',
entrega: '',
transporte: '',
idContenedor: 0,
}).catch((e: Error) => { }).catch((e: Error) => {
setHeader('Error') setHeader('Error')
setMsg('Ocurrio un error al guardar la factura: ' + element[13]) setMsg('Ocurrio un error al guardar la factura: ' + element[13])
@ -564,10 +529,6 @@ export default function RptCorresponsalesTraficos(props: IProps) {
}) })
} }
const handleClose = () => {
setShowModalSolicitud(false)
setDeleting(false)
}
return ( return (
<div> <div>
<Card> <Card>
@ -599,7 +560,7 @@ export default function RptCorresponsalesTraficos(props: IProps) {
type='text' type='text'
size='sm' size='sm'
placeholder='Aduana' placeholder='Aduana'
onChange={(e) => setAduana(e.target.value === '' ? '0' : e.target.value)} onChange={(e) => setAduana(+e.target.value)}
/> />
</Col> </Col>
<Col xs={2}> <Col xs={2}>
@ -801,46 +762,11 @@ export default function RptCorresponsalesTraficos(props: IProps) {
IDTrafico={IDTrafico} IDTrafico={IDTrafico}
onClose={function (val: boolean): void { onClose={function (val: boolean): void {
setShowModal(false) setShowModal(false)
generaReporte()
}} }}
/> />
</div> </div>
</Modal.Body> </Modal.Body>
</Modal> </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> </div>
) )
} }

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

@ -1,42 +0,0 @@
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>
)
}

@ -1,41 +0,0 @@
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>
)
}

@ -1,64 +0,0 @@
import { 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";
export const RelacionFacturas: React.FC<{}> = () => {
const [Referencia, setReferencia] = useState('')
const [show, setShowMsg] = useState(false)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [msgColor, setMsgColor] = useState('primary')
const GetExcel = () => {
ReportesAlenService.getRelacionFacturas(Referencia)
.then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `RelacionFacturas_${Referencia}.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={3}>
<Card style={{width:'100%'}}>
<Card.Header><h4>Relación de Facturas</h4></Card.Header>
<Card.Body>
<Row style={{padding:'0px 20px 0px 20px'}} className="align-items-center justify-content-center">
<Form.Control
type="text"
placeholder="Referencia"
onChange={e => setReferencia(e.target.value)}
/>
</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)
}}
/>
</>
)
}

@ -1,71 +0,0 @@
import { 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"
export const ReporteFacturasConsolidados:React.FC = () => {
const [Referencia, setReferencia] = useState('')
const [show, setShowMsg] = useState(false)
const [header, setHeader] = useState('')
const [msg, setMsg] = useState('')
const [msgColor, setMsgColor] = useState('primary')
const GetExcel = () => {
if(Referencia !== ''){
ReportesAlenService.getFacturasConsolidados(Referencia)
.then(resp => {
const url = window.URL.createObjectURL(new Blob([resp.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `${Referencia}.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
})
}else{
setHeader('Error')
setMsg('Favor de capturar la referencia para generar el reporte.')
setShowMsg(true)
return
}
}
return(
<>
<Row style={{height:'90vh'}} className="align-items-center justify-content-center">
<Col xs={3}>
<Card style={{width:'100%'}}>
<Card.Header><h4>Reporte de Facturas</h4></Card.Header>
<Card.Body>
<Row style={{padding:'0px 20px 0px 20px'}} className="align-items-center justify-content-center">
<Form.Control
type="text"
placeholder="Referencia"
onChange={e => setReferencia(e.target.value)}
/>
</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)
}}
/>
</>
)
}

@ -1,210 +0,0 @@
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)
}}
/>
</>
)
}

@ -1,308 +0,0 @@
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, NoCliente: 0,
IdCorresponsal: Corresponsal, IdCorresponsal: Corresponsal,
Pedimento: 0, Pedimento: 0,
Aduana: '0', Aduana: 0,
Patente: 0, Patente: 0,
Proceso: 0, Proceso: 0,
Modo: 0, Modo: 0,
@ -114,7 +114,7 @@ export const ReporteGC50: React.FC = () => {
NoCliente: 0, NoCliente: 0,
IdCorresponsal: Corresponsal, IdCorresponsal: Corresponsal,
Pedimento: 0, Pedimento: 0,
Aduana: '0', Aduana: 0,
Patente: 0, Patente: 0,
Proceso: 0, Proceso: 0,
Modo: 0, Modo: 0,

@ -1,372 +0,0 @@
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,7 +63,16 @@ export const FileManager: FC<IProps> = (props) => {
const formData = new FormData() const formData = new FormData()
formData.append('name', file.name) formData.append('name', file.name)
formData.append('file', file) formData.append('file', file)
FileManagerDataService.AppendFile(formData, props.IDUser, props.IDProcess, props.IdFile) axios
.post(
URL.get() +
`/FileManager/AppendFileByProcess?IdUsuario=${props.IDUser}&Proceso=${props.IDProcess}&Tags=${props.IdFile}&crud=1`,
formData, {
headers:{
'Authorization': 'Bearer ' + token
}
}
)
.then((res) => { .then((res) => {
if (res.data.id > 0) { if (res.data.id > 0) {
setArchivo(res.data) setArchivo(res.data)
@ -185,9 +194,7 @@ export const FileManager: FC<IProps> = (props) => {
<> <>
<div> <div>
<div <div
{...getRootProps({ {...getRootProps()}
onClick: event => !props.canDelete ? event.stopPropagation() : ''
})}
className={Archivo?.nombreArchivo ? 'hideDiv' : 'dropzoneFileManager'} className={Archivo?.nombreArchivo ? 'hideDiv' : 'dropzoneFileManager'}
style={{ style={{
width: props.width, width: props.width,

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

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

@ -1,15 +1,4 @@
export default interface DTORectificacionHistorico { export default interface DTORectificacionHistorico {
IdTrafico: number, IdTrafico: number,
IdUsuario: number, IdUsuario: number
IdPedimento: number,
Aduana: string,
Patente:number,
Pedimento: number,
Clave: string,
FechaPago: string,
AduanaH: string,
PatenteH: number,
PedimentoH: number,
ClaveH: string,
FechaPagoH: string
} }

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

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

@ -1,9 +0,0 @@
export interface DTOTraficoSolicitud{
id: number,
idTrafico: number,
idUsuarioSolicita: number,
usuarioSolicita: string,
motivoSolicita: string,
fechaSolicita: string,
estado: number
}

@ -1,48 +0,0 @@
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
}

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

@ -1,29 +0,0 @@
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;
}

@ -1,21 +0,0 @@
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{ export interface DTOReporteGC50{
trafico: string; trafico: string;
corresponsal: string; corresponsal: string;
aduana: string; aduana: number;
patente: number; patente: number;
pedimentoCorreponsal: string; pedimentoCorreponsal: string;
pedimentoCorresponsalR1: string; pedimentoCorresponsalR1: string;

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

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

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

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

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

@ -9,10 +9,4 @@ export default interface ICorresponsalFacturas {
activo?: boolean; activo?: boolean;
code: number; code: number;
folioGEMCO: string; folioGEMCO: string;
fechaFactura?: string;
uuid?: string;
cove?: string;
entrega?: string;
transporte?: string;
idContenedor?: number;
} }

@ -2,12 +2,11 @@ export default interface ICorresponsalRectificacionHistorico {
id: number id: number
usuario: number usuario: number
idTrafico: number idTrafico: number
aduana: string aduana: number
patente: number patente: number
pedimento: number pedimento: number
clave: string clave: string
fechaPago: string fechaPago: string
fhCreacion: string fhCreacion: string
activo: number, activo: number
idPedimentoConsolidado: number
} }

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

@ -4,7 +4,6 @@ export default interface ICorresponsalesTraficoContabilidad {
idTrafico: number, idTrafico: number,
statusProceso: number, statusProceso: number,
fechaRegistro: string, fechaRegistro: string,
razonRechazo: string, razonRechazo: string
NuevoProceso: number, tipo: number
ProcesoAnterior: number
} }

@ -1,11 +0,0 @@
export interface ICorresponsalTraficoSolicitud{
id:number,
idTrafico: number,
idUsuarioSolicita: number,
fechaSolicita?: string,
motivoSolicita: string,
idUsuarioAutoriza: number,
fechaAutoriza?: string,
motivoRechazo: string,
estado: number
}

@ -1,5 +1,5 @@
export default interface IReporteOperacionesNewell{ export default interface IReporteOperacionesNewell{
aduana: string; patente: number; pedimento: number; fechaDeEntrada: string|Date; fechaDePago: string|Date; aduana: number; patente: number; pedimento: number; fechaDeEntrada: string|Date; fechaDePago: string|Date;
valorComercialMxn: number; valorComercialDlls: number; valorAduana: number; clave: string; iva: number; 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; 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; gc:number; contenedor: string; cuentaDeGastos: string; razon: string; maniobras: number;

@ -8,7 +8,7 @@ import http from "../common/http-common";
class ArchivoElectronicoDataService { class ArchivoElectronicoDataService {
/* getFile(data: IArchivoElectronico) { getFile(data: IArchivoElectronico) {
return http.get<Blob>(`/ArchivoElectronico/getFile`, { params: data }) return http.get<Blob>(`/ArchivoElectronico/getFile`, { params: data })
} }
getFileList(data: IArchivoElectronico) { getFileList(data: IArchivoElectronico) {
@ -55,16 +55,6 @@ class ArchivoElectronicoDataService {
.catch(function (error) { .catch(function (error) {
console.log(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(); export default new ArchivoElectronicoDataService();

@ -35,11 +35,7 @@ class ClientesDataService {
} }
GetTraficos(data: DTOFiltrosTraficosClientes){ 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}&Estado=${data.Estado}`) 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}`)
}
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(); export default new ClientesDataService();

@ -1,10 +0,0 @@
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();

@ -3,9 +3,9 @@ import ICorresponsalesTraficoContabilidad from '../../Interfaces/Corresponsales/
import ICorresponsalRazonRechazo from '../../Interfaces/Corresponsales/ICorresponsalRazonesRechazo' import ICorresponsalRazonRechazo from '../../Interfaces/Corresponsales/ICorresponsalRazonesRechazo'
class Contabilidad_Corresponsales_DataService { class Contabilidad_Corresponsales_DataService {
Get(idTrafico: number, nuevoProceso: number, procesoAnterior: number) { Get(idTrafico: number, tipo: number) {
return http.get<ICorresponsalRazonRechazo[]>( return http.get<ICorresponsalRazonRechazo[]>(
`/Contabilidad/Corresponsales/ContabilidadTrafico/Get?idTrafico=${idTrafico}&nuevoProceso=${nuevoProceso}&procesoAnterior=${procesoAnterior}` `/Contabilidad/Corresponsales/ContabilidadTrafico/Get?idTrafico=${idTrafico}&tipo=${tipo}`
) )
} }
Append(data: ICorresponsalesTraficoContabilidad) { Append(data: ICorresponsalesTraficoContabilidad) {
@ -14,8 +14,5 @@ class Contabilidad_Corresponsales_DataService {
data data
) )
} }
GetHistorial(idTrafico: number){
return http.get<ICorresponsalRazonRechazo[]>(`/Contabilidad/Corresponsales/ContabilidadTrafico/Historial?idTrafico=${idTrafico}`);
}
} }
export default new Contabilidad_Corresponsales_DataService() export default new Contabilidad_Corresponsales_DataService()

@ -15,8 +15,5 @@ class Corresponsales_Facturas_DataService {
GetExcel(idTrafico: number){ GetExcel(idTrafico: number){
return http.get(`/Corresponsalias/Facturas/GetExcel?idTrafico=${idTrafico}`, {responseType:'blob'}) return http.get(`/Corresponsalias/Facturas/GetExcel?idTrafico=${idTrafico}`, {responseType:'blob'})
} }
AppendContenedor(idFactura: number, idContenedor: number){
return http.post(`/Corresponsalias/Facturas/AppendContenedor`, {IdFactura: idFactura, IdContenedor: idContenedor})
}
} }
export default new Corresponsales_Facturas_DataService(); export default new Corresponsales_Facturas_DataService();

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

@ -33,17 +33,14 @@ class Corresponsales_Trafico_DataService {
return http.put<IRespuesta>(`/Corresponsalias/Traficos/ValidateComplete/${data.id}`,data); return http.put<IRespuesta>(`/Corresponsalias/Traficos/ValidateComplete/${data.id}`,data);
} }
AppendRectificacionHistorico(data: DTORectificacionHistorico) { AppendRectificacionHistorico(data: DTORectificacionHistorico) {
return http.post<ICorresponsalRectificacionHistorico>(`Corresponsalias/Traficos/Rectificacion/Historico/Append`,data); return http.post<Boolean>(`Corresponsalias/Traficos/Rectificacion/Historico/Append`,data);
} }
GetRectificacionHistorico(IdTrafico: number) { GetRectificacionHistorico(IdTrafico: number) {
return http.get<ICorresponsalRectificacionHistorico[]>(`Corresponsalias/Traficos/Rectificacion/Historico/Get?IdTrafico=${IdTrafico}`); return http.get<ICorresponsalRectificacionHistorico>(`Corresponsalias/Traficos/Rectificacion/Historico/Get?IdTrafico=${IdTrafico}`);
} }
ValidaTraficoDuplicado(aduana: string | undefined, patente: number | undefined, pedimento:number | undefined, IdTrafico: number | undefined){ ValidaTraficoDuplicado(aduana: number | 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}`) 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}`);
}
} }
export default new Corresponsales_Trafico_DataService(); export default new Corresponsales_Trafico_DataService();

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

@ -5,8 +5,5 @@ class Dashboard_Facturacion_DataService {
getFacturacion(){ getFacturacion(){
return http.get<DashboardCorresponsales[]>(`/Dashboard/Corresponsales/GetFacturacionDashboard`); return http.get<DashboardCorresponsales[]>(`/Dashboard/Corresponsales/GetFacturacionDashboard`);
} }
getSolicitudesReapertura(){
return http.get<DashboardCorresponsales>(`/Dashboard/Corresponsales/SolicitudesReapertura`);
}
} }
export default new Dashboard_Facturacion_DataService(); export default new Dashboard_Facturacion_DataService();

@ -1,41 +0,0 @@
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();

@ -1,8 +0,0 @@
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();

@ -1,13 +0,0 @@
import http from '../common/http-common';
class ReportesAlenService{
getRelacionFacturas(referencia: string){
return http.get(`ReportesAlen/RelacionFacturas?referencia=${referencia}`, {responseType: 'blob'});
}
getFacturasConsolidados(referencia: string){
return http.get(`ReportesAlen/FacturasConsolidados?referencia=${referencia}`, {responseType: 'blob'});
}
}
export default new ReportesAlenService();

@ -1,16 +0,0 @@
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,20 +3,9 @@ import IRespuesta from "../../Interfaces/IRespuesta";
import IFileManager from "../../Interfaces/Utils/IFileManager"; import IFileManager from "../../Interfaces/Utils/IFileManager";
class FileManagerDataService { 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) { getFileContent(id: number, Proceso: number) {
return http.get(`/FileManager/getFile?id=${id}&proceso=${Proceso}`, {responseType: 'arraybuffer'}) return http.get<ArrayBuffer>(`/FileManager/getFile?id=${id}&proceso=${Proceso}`, {responseType: 'arraybuffer'})
.then(function (response) { .then(function (response) {
return response return response
}) })
@ -51,18 +40,6 @@ class FileManagerDataService {
console.log(error) 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(); export default new FileManagerDataService();

@ -9,11 +9,6 @@
padding: 5px 5px 5px 5px; padding: 5px 5px 5px 5px;
} }
.modal-30w {
width: 31%;
max-width: none !important;
}
.modal-50w { .modal-50w {
width: 50%; width: 50%;
max-width: none !important; max-width: none !important;
@ -24,11 +19,6 @@
max-width: none !important; max-width: none !important;
} }
.modal-85w {
width: 85%;
max-width: none !important;
}
.modal-90w { .modal-90w {
width: 90%; width: 90%;
max-width: none !important; max-width: none !important;
@ -172,10 +162,7 @@
padding-left: 10px; padding-left: 10px;
font-family: Verdana, Geneva, Tahoma, sans-serif; font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: 12px; font-size: 12px;
} cursor: pointer;
.pointer{
cursor:pointer
} }
/* li:hover { /* li:hover {

@ -27,12 +27,6 @@ import { ReportesEmbarques } from './Components/ReportesClientes/Embarques/Repor
import { ClientesExternos } from './Components/Clientes/Clientes' import { ClientesExternos } from './Components/Clientes/Clientes'
import { ReporteGC50 } from './Components/ReportesClientes/GC50/ReporteGC50' import { ReporteGC50 } from './Components/ReportesClientes/GC50/ReporteGC50'
import RptClientesTraficos from './Components/Clientes/Traficos/RptClientesTraficos' 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`) require (`./css/${process.env.REACT_APP_ENVIRONMENT}-home.css`)
function PageNotFound() { function PageNotFound() {
@ -69,10 +63,10 @@ root.render(
/> />
} }
/> />
{/* <Route <Route
path="/DashboardCorresponsales" path="/DashboardCorresponsales"
element={<DashboardCorresponsales />} element={<DashboardCorresponsales />}
/> */} />
<Route path="/Dashboard" element={<Dashboard />} /> <Route path="/Dashboard" element={<Dashboard />} />
<Route <Route
path="/RptCorresponsalesTraficos/:proc/:modo" path="/RptCorresponsalesTraficos/:proc/:modo"
@ -90,13 +84,6 @@ root.render(
<Route path='/Reportes/Newell/Semanal' element={<ReporteSemanalNewell/>}/> <Route path='/Reportes/Newell/Semanal' element={<ReporteSemanalNewell/>}/>
<Route path='/Reportes/Newell/Mensual' element={<ReporteMensualNewell/>}/> <Route path='/Reportes/Newell/Mensual' element={<ReporteMensualNewell/>}/>
<Route path='/Reportes/GC50' element={<ReporteGC50/>}/> <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>
<Route path="Clientes" element={<Outlet/>}>{/*Aqui van todas las rutas relacionadas a los clientes */} <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*/} <Route path='/Clientes/Reportes/' element={<ClientesExternos/>}>{/*Aqui van todas las rutas relacionadas a los reportes de los clientes*/}
@ -105,7 +92,6 @@ root.render(
</Route> </Route>
</Route> </Route>
<Route path='/Clientes/Traficos/' element={<RptClientesTraficos/>}/> <Route path='/Clientes/Traficos/' element={<RptClientesTraficos/>}/>
<Route path='/Clientes/EstadosCuenta/' element={<EstadosCuenta/>}/>
</Route> </Route>
</Route> </Route>
</Routes> </Routes>

@ -1,6 +1,6 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import ICatCorresponsales from '../../../Interfaces/Catalogos/ICatCorresponsales'; 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 } const initialState = { CatCorresponsales }
export const CatCorresponsalesSlice = createSlice({ export const CatCorresponsalesSlice = createSlice({

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

@ -10,12 +10,6 @@ const CorresponsalesFacturas: ICorresponsalFacturas[] = [
pedido: '', pedido: '',
code: 0, code: 0,
folioGEMCO: '', folioGEMCO: '',
uuid: '',
fechaFactura: '',
cove: '',
entrega: '',
transporte: '',
idContenedor: 0,
}, },
]; ];
const initialState = { CorresponsalesFacturas }; const initialState = { CorresponsalesFacturas };
@ -38,12 +32,6 @@ export const CorresponsalesFacturasSlice = createSlice({
pedido: '', pedido: '',
code: 0, code: 0,
folioGEMCO: '', folioGEMCO: '',
uuid: '',
fechaFactura: '',
cove: '',
entrega: '',
transporte: '',
idContenedor: 0,
}, },
]; ];
state.CorresponsalesFacturas.push(...action.payload); state.CorresponsalesFacturas.push(...action.payload);
@ -85,12 +73,6 @@ export const CorresponsalesFacturasSlice = createSlice({
pedido: '', pedido: '',
code: 0, code: 0,
folioGEMCO: '', folioGEMCO: '',
uuid: '',
fechaFactura: '',
cove: '',
entrega: '',
transporte: '',
idContenedor: 0,
}, },
]; ];
}, },

@ -1,40 +0,0 @@
import ICorresponsalRectificacionHistorico from "../../../Interfaces/Corresponsales/ICorresponsalRectificacionHistorico";
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
const RectificacionesPedimentos: ICorresponsalRectificacionHistorico[] = []
const initialState = {RectificacionesPedimentos};
export const RectificacionesPedimentosSlice = createSlice({
name: 'RectificacionesPedimentos',
initialState: initialState,
reducers: {
populateRectificaciones : (state, action: PayloadAction<ICorresponsalRectificacionHistorico[]>) => {
state.RectificacionesPedimentos = []
state.RectificacionesPedimentos.push(... action.payload)
},
addRectificacion : (state, action: PayloadAction<ICorresponsalRectificacionHistorico>) => {
var Existe = state.RectificacionesPedimentos.find(function(item) {
return item.id === action.payload.id;
});
if (!Existe) state.RectificacionesPedimentos.push(action.payload)
},
updateRectificacion : (state, action: PayloadAction<ICorresponsalRectificacionHistorico>) => {
const i = state.RectificacionesPedimentos.findIndex(_element => _element.id === action.payload.id);
if (i > -1) state.RectificacionesPedimentos[i] = action.payload;
else state.RectificacionesPedimentos.push(action.payload);
},
deleteRectificacion : (state, action: PayloadAction<number>) => {
const newArr = state.RectificacionesPedimentos.filter(data => data.id != action.payload);
state.RectificacionesPedimentos=newArr
},
}
})
export const { populateRectificaciones,
addRectificacion,
updateRectificacion,
deleteRectificacion,
} = RectificacionesPedimentosSlice.actions;
export default RectificacionesPedimentosSlice.reducer;

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

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

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

Loading…
Cancel
Save