Compare commits

..

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

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

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

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

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

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

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

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

@ -32,7 +32,6 @@ import ClientesServices from '../../../Services/Catalogos/Clientes.Services'
import reportesServices from '../../../Services/Reportes/reportes.services'
import DTOFiltrosTraficosClientes from '../../../DTO/Corresponsales/DTOFiltrosTraficosClientes'
import TraficoCliente from './TraficoCliente'
import { ClienteProgressBar } from '../../Reportes/customCells/ClienteProgressBar'
/* import '../../css/generic01.css' */
interface IProps {}
@ -75,9 +74,8 @@ export default function RptClientesTraficos(props: IProps) {
//const [Corresponsal, setCorresponsal] = useState(0)
const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState('0');
const [Aduana, setAduana] = useState(0);
const [Referencia, setReferencia] = useState('')
const [Estado, setEstado] = useState(0)
const [Clientes, setClientes] = useState<Array<IClientes>>()
const [filtro, setFiltro] = useState('')
const gridRef = React.useRef<any>(null)
@ -94,7 +92,7 @@ export default function RptClientesTraficos(props: IProps) {
center: true,
sortable: true,
filter: true,
cellRenderer: ClienteProgressBar,
cellRenderer: ProgressBar,
},
{
field: 'folioGemco',
@ -265,8 +263,7 @@ export default function RptClientesTraficos(props: IProps) {
Aduana: Aduana,
Patente: Patente,
Referencia: Referencia,
IdUsuario: UserId,
Estado: Estado
IdUsuario: UserId
}
ClientesServices
.GetTraficos(data)
@ -292,33 +289,56 @@ export default function RptClientesTraficos(props: IProps) {
}
function exportExcel(jsonData: any[], fileName: string): void {
const data: DTOFiltrosTraficosClientes = {
Inicio: moment(Inicio).format('YYYY-MM-DD'),
Fin: moment(Fin).format('YYYY-MM-DD'),
TipoOperacion: TipoOperacion,
NoCliente: Cliente,
IdCorresponsal: Corresponsal,
Pedimento: Pedimento,
Aduana: Aduana,
Patente: Patente,
Referencia: Referencia,
IdUsuario: UserId,
Estado: Estado
let Heading = [
[
{
title: 'Aduana Seccion Despacho',
style: { font: { sz: '18', bold: true } },
},
'Patente',
'Referencia',
'Pedimento',
'Fecha Pago',
'Fecha Entrada Presentacion',
'Clave Docto',
'Es rectificacion',
'Tipo Cambio',
'Valor Dls',
'Valor Aduana',
'Numero Factura',
'Fecha Factura',
'Proveedor Factura',
'Incrementables Fact',
'Fraccion',
'Subdiv NICO',
'Descripcion',
'Pais Origen',
'Pais Vendedor',
'Tasa DTA',
'Tasa IGI',
'Numero Parte',
'Cantidad Comercial',
'TL Pais',
'Tipo Tasa',
'Unidad Comercial',
'Valor Factura Item',
'Valor Comercial Ped',
'Valor Factura Item MN',
],
]
const wb = XLSX.utils.book_new()
const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([])
XLSX.utils.sheet_add_aoa(ws, Heading)
XLSX.utils.sheet_add_json(ws, jsonData, { origin: 'A2', skipHeader: true })
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
XLSX.writeFile(wb, fileName + '.xlsx')
var range = XLSX.utils.decode_range(ws['!ref?'])
for (var C = range.s.c; C <= range.e.c; ++C) {
var address = XLSX.utils.encode_col(C) + '1' // <-- first row, column number C
if (!ws[address]) continue
ws[address].v = ws[address].v.toUpperCase()
}
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 (
@ -352,7 +372,7 @@ export default function RptClientesTraficos(props: IProps) {
type='text'
size='sm'
placeholder='Aduana'
onChange={(e) => setAduana(e.target.value === '' ? '0' : e.target.value)}
onChange={(e) => setAduana(+e.target.value)}
/>
</Col>
<Col xs={2}>
@ -433,23 +453,6 @@ export default function RptClientesTraficos(props: IProps) {
</Form.Control>
</Form.Label>
</Col>
<Col lg={2}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
Estado
<Form.Control
as='select'
onChange={(e) => {
setEstado(parseInt(e.target.value))
}}
className='form-select form-select-sm'
>
<option value='0'>-SELECCIONE-</option>
<option value='1'>Por Terminar</option>
<option value='2'>Despachado Sin Facturar</option>
<option value='3'>Despachado y Facturado</option>
</Form.Control>
</Form.Label>
</Col>
{(Perfil !== "Corresponsales" && Perfil !== "Clientes")? <>
<Col lg={4}>
<Form.Label style={{width:'100%', fontSize:'smaller'}}>
@ -489,6 +492,7 @@ export default function RptClientesTraficos(props: IProps) {
<BsSearch />
&nbsp; Buscar
</Button>
{(Depto === 'Corresponsalias' || Depto === 'Sistemas') ? (
<Button
size='sm'
variant='success'
@ -500,6 +504,9 @@ export default function RptClientesTraficos(props: IProps) {
<BsFileEarmarkExcel />
&nbsp; Excel
</Button>
) : (
''
)}
</Col>
</Row>
</Card.Body>

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

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

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

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

@ -4,7 +4,7 @@ import { RootState } from '../../../store/store'
import CContDataService from '../../../Services/Corresponsalias/Corresponsales.Contenedores.Services'
import ICorresponsalContenedores from '../../../Interfaces/Corresponsales/ICorresponsalContenedores'
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 {
deleteCorresponsalesContenedores,
updateCorresponsalesContenedores,
@ -15,7 +15,7 @@ import 'react-datepicker/dist/react-datepicker.css'
//Images
import caret from '../../../images/caret.png';
import clean from '../../../images/Clean.png';
import { FaFile, FaPencilAlt } from 'react-icons/fa'
import { FaFile } from 'react-icons/fa'
import { FacturasContenedor } from './FacturasContenedor'
interface IProps {
@ -31,7 +31,6 @@ export const SelectContainer: FC<IProps> = (props) => {
const dispatch = useDispatch()
const [toggleSelect, setToggleSelect] = useState(false)
const mCContenedores = useSelector((state: RootState) => state.CCData.CorresponsalesContenedores)
const mCTiposContenedores = useSelector((state: RootState) => state.CTiposContenedores.CatTiposContenedores)
const [Contenedor, setContenedor] = useState('')
const [IDContenedor, setIDContenedor] = useState(0)
const [Placeholder, setPlaceholder] = useState('')
@ -40,7 +39,6 @@ export const SelectContainer: FC<IProps> = (props) => {
const [FSemaforo, setFSemaforo] = useState<Date | null>()
const [Semaforo, setSemaforo] = useState(0)
const [ShowFacturasDialog, setShowFacturasDialog] = useState(false)
const [IdTipoContenedor, setIdTipoContenedor] = useState(0)
useEffect(() => {
setPlaceholder('(' + mCContenedores.filter((item) => item.id > 0).length + ') Contenedores')
@ -64,8 +62,7 @@ export const SelectContainer: FC<IProps> = (props) => {
contenedor: Contenedor,
idTrafico: props.IDTrafico,
fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '',
semaforo: 2,
idTipoContenedor: 0
semaforo: Semaforo,
}
CContDataService.Append(data)
.then((response) => {
@ -96,7 +93,6 @@ export const SelectContainer: FC<IProps> = (props) => {
idTrafico: props.IDTrafico,
fSemaforo: FSemaforo ? adjustTimeZone(FSemaforo.toISOString()) : '',
semaforo: Semaforo,
idTipoContenedor: IdTipoContenedor
}
// console.log(JSON.stringify(data))
CContDataService.Append(data)
@ -215,25 +211,32 @@ export const SelectContainer: FC<IProps> = (props) => {
? mCContenedores
.map((item, index) => {
return item.id > 0 ? (
<li key={item.id} style={{marginBottom:'3px'}} onClick={() => loadInfo(item)}>
<span style={{display: props.Editable && toggleSelect ? 'inline-block' : 'none',}}>
<li key={item.id} onClick={() => loadInfo(item)}>
<span
onClick={() => {
setDialogTabs(true)
}}
>
<IconContext.Provider value={{ color: 'red', size: '15px' }}>
<BsFillXCircleFill className='pointer' onClick={() => {setDialogTabs(true)}}/>
<BsFillXCircleFill />
</IconContext.Provider>
</span>
<span style={{display: props.Editable && toggleSelect ? 'inline-block' : 'none', paddingLeft:'3px'}}>
<span style={{paddingLeft:'3px'}}>
<IconContext.Provider value={{ color: 'green', size: '15px' }}>
<BsLink45Deg className='pointer' onClick={() => setShowFacturasDialog(true)}/>
<FaFile 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>
&nbsp;| {item.fSemaforo} |{
<span
onClick={() => {
setFSemaforo(StrtoDate(item.fSemaforo))
setSemaforo(item.semaforo)
setDialogAddDate(true)
setToggleSelect(!toggleSelect)
}}
>
&nbsp;| {item.fSemaforo} |{' '}
{item.fSemaforo ? (
item.semaforo === 1 ? (
<IconContext.Provider value={{ color: 'red', size: '20px' }}>
<BsFillRecordFill />
@ -243,25 +246,20 @@ export const SelectContainer: FC<IProps> = (props) => {
<BsFillRecordFill />
</IconContext.Provider>
) : ('')
}
<span>
<IconContext.Provider value={{ color: 'green', size: '20px' }}>
<BsFillCalendarCheckFill
className='pointer'
style={{
paddingLeft: '5px',
visibility: props.Editable && toggleSelect ? 'visible' : 'hidden',
}}
onClick={() => {
setFSemaforo(StrtoDate(item.fSemaforo))
setSemaforo(item.semaforo)
setIdTipoContenedor(item.idTipoContenedor)
setDialogAddDate(true)
setToggleSelect(!toggleSelect)
}}
/>
) : (
''
)}
<span
style={{
paddingLeft: '20px',
visibility: props.Editable && toggleSelect ? 'visible' : 'hidden',
}}
>
<IconContext.Provider value={{ color: 'green', size: '15px' }}>
<BsFillCalendarCheckFill />
</IconContext.Provider>
</span>
</span>
</li>
) : (
@ -330,24 +328,6 @@ export const SelectContainer: FC<IProps> = (props) => {
<b>¿Esta seguro de agregar fecha al contenedor: {Contenedor}?</b>
</Col>
</Row>
<Row className='justify-content-end'>
<Col xs={5}>
Tipo de Contenedor
</Col>
<Col xs={7}>
<Form.Control
as='select'
onChange={(e) => {setIdTipoContenedor(+e.target.value)}}
value={IdTipoContenedor}
className='form-select form-select-sm'
>
<option value={0}>-SELECCIONE-</option>
{mCTiposContenedores ? mCTiposContenedores.map((t) => {
return <option value={t.id}>{t.descripcion}</option>
}) : null}
</Form.Control>
</Col>
</Row>
<Row style={{ paddingTop: '10px' }}>
<Col xs={4}></Col>
<Col xs={2}>Fecha</Col>
@ -396,8 +376,6 @@ export const SelectContainer: FC<IProps> = (props) => {
<Button
variant='secondary'
onClick={() => {
setIDContenedor(0)
setContenedor('')
setDialogAddDate(false)
}}
size='sm'

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

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

@ -205,12 +205,6 @@ export const ProveedorFactura: FC<IProps> = (props) => {
setIDFactura(0);
setIDProveedor(0);
setValorFacturaDls(0);
setPedido('')
setUuid('')
setFechaFactura('')
setCove('')
setEntrega('')
setTransporte('')
};
const saveForm = () => {
@ -356,7 +350,7 @@ export const ProveedorFactura: FC<IProps> = (props) => {
fontSize: '18px',
backgroundColor: '#F5FFED',
border: '2px solid #25D05B',
width: '100%',
width: '100px',
textAlign: 'right',
borderRadius: '10px',
}}

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

@ -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
IDTabulador: number
IDTrafico: number
IDCorresponsal: number | null
NombreCliente: string
closeTabulador: (arg: boolean) => void
cambiaPrecuenta: (IDPrecuenta: number) => void
@ -42,14 +41,20 @@ export const Tabulador: FC<IProps> = (props) => {
const [msg, setMsg] = useState('')
const columnsConcepts = [
{
name: 'id',
width: '10%',
selector: (row: ITabuladorConceptos) => row.id,
sortable: true,
},
{
name: 'Concepto',
width: '60%',
width: '65%',
selector: (row: ITabuladorConceptos) => row.concepto,
sortable: true,
},
{
name: 'Costo Cte',
name: 'Costo',
width: '15%',
cell: (row: ITabuladorConceptos) => {
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',
width: '10%',
@ -141,7 +134,7 @@ export const Tabulador: FC<IProps> = (props) => {
// const postCost = (id: number, Cost: number) => {}
const GetAllTabs = () => {
CTabDataService.GetByCustomer(props.IDCliente, props.IDCorresponsal)
CTabDataService.GetByCustomer(props.IDCliente)
.then((response) => {
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 { Col, Container, Row } from 'react-bootstrap'
import { DashboardFacturacion } from './DashboardFacturacion'
import DashboardClientes from './DashboardClientes'
import { useSelector } from 'react-redux'
import { RootState } from '../../store/store'
import { DashboardSistemas } from './DashboardSistemas'
interface IProps {}
export default function Dashboard(props: IProps) {
const isAlenUser = useSelector((state: RootState) => state.userStatus.isAlenUser)
const [Depto, setDepto] = useState(() => {
const stickyValue = window.localStorage.getItem('Departamento')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
@ -20,36 +15,23 @@ export default function Dashboard(props: IProps) {
const stickyValue = window.localStorage.getItem('User')
return stickyValue !== null ? JSON.parse(stickyValue) : 0
})
const [Perfil, setPerfil] = useState(() => {
const stickyValue = window.localStorage.getItem('Perfil')
return stickyValue !== null ? JSON.parse(stickyValue) : ''
})
return (
<div>
<br />
<Container>
<Row xs={1} md={3} className='g-4'>
{[Depto === 'Sistemas' ? <DashboardSistemas /> : ''].map(
(item) => {
return <React.Fragment>{item}</React.Fragment>
}
)}
{[['Direccion', 'Sistemas', 'Corresponsalias'].includes(Depto) ? <DashboardCorresponsales Perfil={Perfil} /> : ''].map(
{[['Direccion', 'Sistemas', 'Corresponsalias'].includes(Depto) ? <DashboardCorresponsales /> : ''].map(
(item) => {
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>
})}
{[['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>
})}
{[isAlenUser ? <DashboardClientes /> : ''].map(
(item) => {
return <React.Fragment>{item}</React.Fragment>
}
)}
</Row>
</Container>
</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'
interface IProps {
Depto: string;
Perfil:string;
}
export const DashboardContabilidad: FC<IProps> = (props) => {
@ -56,7 +55,7 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
return (
<>
{
props.Depto === 'Contabilidad' ? <DashboardCorresponsales Perfil={props.Perfil}/> : ""
props.Depto === 'Contabilidad' ? <DashboardCorresponsales/> : ""
}
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
@ -154,17 +153,18 @@ export const DashboardContabilidad: FC<IProps> = (props) => {
</Card>
</Col>
<Col>
<Card style={{ width: '18rem', maxHeight:'100%', height:'100%' }} className='dashboardComponentFont'>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Contabilidad </Card.Header>
<Card.Body style={{ paddingBottom: '0px' }}>
<Card.Title>&nbsp;Traficos Con Cargos de Dlls<br/></Card.Title>
<Card.Body style={{ paddingBottom: '50px' }}>
<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'>
<IconContext.Provider value={{ color: '#428d00' }}>
<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>
{TraficosConCargos}
</div>
<div style={{fontSize:'60px', textAlign:'center'}}>{TraficosConCargos}</div>
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link

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

@ -7,21 +7,18 @@ import DashboardFacturacionDataService from '../../Services/Dashboard/Dashboard.
import DashboardContaDataService from '../../Services/Dashboard/Dashboard.Contabilidad.Service'
import { ApexOptions } from '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 DashboardCorresponsales from './DashboardCorresponsales'
import { MdTimer } from 'react-icons/md'
interface IProps {
Depto: string;
Perfil: string;
}
export const DashboardFacturacion: FC<IProps> = (props) => {
const [labels, setlabels] = useState<string[]>([]);
const [series, setseries] = useState<number[]>([]);
const [RechazosContabilidad, setRechazosContabilidad] = useState(0);
const [SolicitudesReapertura, setSolicitudesReapertura] = useState(0);
const navigate = useNavigate();
const [ChartOptions, setChartOptions] = useState<ApexOptions>({
labels: [
@ -46,9 +43,6 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
}).catch((e: Error) => {
return;
})
DashboardFacturacionDataService.getSolicitudesReapertura().then((response) => {
setSolicitudesReapertura(response.data.total)
}).catch((e: Error) => {return;})
DashboardFacturacionDataService.getFacturacion()
.then((response) => {
console.log(response.data);
@ -111,7 +105,7 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
return (
<>
{
props.Depto === 'Facturacion' ? <DashboardCorresponsales Perfil={props.Perfil}/> : ""
props.Depto === 'Facturacion' ? <DashboardCorresponsales/> : ""
}
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
@ -164,59 +158,6 @@ export const DashboardFacturacion: FC<IProps> = (props) => {
</Card>
</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 { useNavigate } from 'react-router-dom'
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 ItemMenu from '../../Interfaces/Catalogos/IItemMenu'
import '../../css/login.css'
@ -17,14 +17,13 @@ import AuthDS from '../../Services/Auth/Auth.Service'
import UserDS from '../../Services/Catalogos/Usuarios.Services'
import { useEffect } from 'react'
import Info from '../../../package.json'
import ClientesServices from '../../Services/Catalogos/Clientes.Services'
export const Login: React.FC<{}> = () => {
const dispatch = useDispatch()
const navigate = useNavigate()
let _menu: ItemMenu[] = []
const [mainMenu, setMainMenu] = React.useState(_menu)
const userLogued = useSelector((state: RootState) => state.userStatus.isLogged)
const userLogued = useSelector((state: RootState) => state.userStatus.value)
const [show, setShow] = React.useState(false)
const [Usuario, setUsuario] = React.useState('')
const [Contrasenia, setContrasenia] = React.useState('')
@ -60,7 +59,7 @@ export const Login: React.FC<{}> = () => {
if(values.Perfil === 'Corresponsales'){
navigate('/RptCorresponsalesTraficos/proc=1/modo=1')
}else if(values.Perfil === 'Clientes'){
checkForAlenUser(values.UserId)
navigate('/Clientes/Traficos')
}else{
navigate('/')
}
@ -106,25 +105,6 @@ export const Login: React.FC<{}> = () => {
})
}, [dispatch, navigate])
const checkForAlenUser = (UserId: number) => {
ClientesServices.getUsuariosAsignados(UserId)
.then(resp => {
let cliente = resp.data.filter((x) => x.sClave===1896 && x.agrupado===1)
if(cliente.length > 0){
dispatch(IsAlenUser(true))
navigate('/')
}else{
navigate('/Clientes/Traficos')
}
})
.catch((err: AxiosError)=>{
setShow(true)
setMsg(err.request.responseText)
setHeader('Error')
return
})
}
return (
<div>
{!userLogued ? (

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

@ -58,7 +58,7 @@ export default function RptCorresponsalesTraficosHst (props: IProps) {
const [DataCorresponsales, setDataCorresponsales] = useState<ICatCorresponsales[]>([])
const [Pedimento, setPedimento] = useState(0)
const [Patente, setPatente] = useState(0);
const [Aduana, setAduana] = useState('');
const [Aduana, setAduana] = useState(0);
const [columnDefs] = useState([
{ 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,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,
IdCorresponsal: Corresponsal,
Pedimento: 0,
Aduana: '0',
Aduana: 0,
Patente: 0,
Proceso: 0,
Modo: 0,
@ -114,7 +114,7 @@ export const ReporteGC50: React.FC = () => {
NoCliente: 0,
IdCorresponsal: Corresponsal,
Pedimento: 0,
Aduana: '0',
Aduana: 0,
Patente: 0,
Proceso: 0,
Modo: 0,

@ -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()
formData.append('name', file.name)
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) => {
if (res.data.id > 0) {
setArchivo(res.data)
@ -185,9 +194,7 @@ export const FileManager: FC<IProps> = (props) => {
<>
<div>
<div
{...getRootProps({
onClick: event => !props.canDelete ? event.stopPropagation() : ''
})}
{...getRootProps()}
className={Archivo?.nombreArchivo ? 'hideDiv' : 'dropzoneFileManager'}
style={{
width: props.width,

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

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

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

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

@ -1,6 +1,6 @@
export default interface DTOTraficoCompleto {
id: number,
idUsuario: number,
pedimentoObligatorio: number,
estatus: number,
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{
trafico: string;
corresponsal: string;
aduana: string;
aduana: number;
patente: number;
pedimentoCorreponsal: string;
pedimentoCorresponsalR1: string;

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

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

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

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

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

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

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

@ -4,7 +4,6 @@ export default interface ICorresponsalesTraficoContabilidad {
idTrafico: number,
statusProceso: number,
fechaRegistro: string,
razonRechazo: string,
NuevoProceso: number,
ProcesoAnterior: number
razonRechazo: string
tipo: 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{
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;
dta: number; prv: number; lgi: number; factura: string; tc: number; proveedor: string; taxId: number; producto: string;
gc:number; contenedor: string; cuentaDeGastos: string; razon: string; maniobras: number;

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

@ -35,11 +35,7 @@ class ClientesDataService {
}
GetTraficos(data: DTOFiltrosTraficosClientes){
return http.get<ICorresponsalTrafico[]>(`/Clientes/Traficos?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Referencia=${data.Referencia}&IdUsuario=${data.IdUsuario}&Estado=${data.Estado}`)
}
GetExcel(data: DTOFiltrosTraficosClientes){
return http.get(`/Clientes/Excel?Inicio=${data.Inicio}&Fin=${data.Fin}&TipoOperacion=${data.TipoOperacion}&NoCliente=${data.NoCliente}&IdCorresponsal=${data.IdCorresponsal}&Pedimento=${data.Pedimento}&Aduana=${data.Aduana}&Patente=${data.Patente}&Referencia=${data.Referencia}&IdUsuario=${data.IdUsuario}&Estado=${data.Estado}`,{responseType: 'blob'})
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}`)
}
}
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'
class Contabilidad_Corresponsales_DataService {
Get(idTrafico: number, nuevoProceso: number, procesoAnterior: number) {
Get(idTrafico: number, tipo: number) {
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) {
@ -14,8 +14,5 @@ class Contabilidad_Corresponsales_DataService {
data
)
}
GetHistorial(idTrafico: number){
return http.get<ICorresponsalRazonRechazo[]>(`/Contabilidad/Corresponsales/ContabilidadTrafico/Historial?idTrafico=${idTrafico}`);
}
}
export default new Contabilidad_Corresponsales_DataService()

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

@ -39,7 +39,7 @@ class Corresponsales_Trafico_DataService {
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}`)
}
AppendFacturasContenedoresAlen(idTrafico:number, fileId:number){

@ -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";
class Dashboard_Corresponsales_DataService {
getDisk() {
return http.get<DashboardCorresponsales>(`/Dashboard/Corresponsales/GetDiskUsage`);
}
getCorresponsales() {
return http.get<DashboardCorresponsales[]>(`/Dashboard/Corresponsales/Get`);
}
getTipoCambio(Fecha: string) {
return http.get<number>(`/Dashboard/Corresponsales/GetTipoCambio?Fecha=${Fecha}`);
}
getSolicitudesEliminarCuenta(){
return http.get<DashboardCorresponsales>(`/Dashboard/Corresponsales/SolicitudesEliminarCuenta`);
}
}
export default new Dashboard_Corresponsales_DataService();

@ -5,8 +5,5 @@ class Dashboard_Facturacion_DataService {
getFacturacion(){
return http.get<DashboardCorresponsales[]>(`/Dashboard/Corresponsales/GetFacturacionDashboard`);
}
getSolicitudesReapertura(){
return http.get<DashboardCorresponsales>(`/Dashboard/Corresponsales/SolicitudesReapertura`);
}
}
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();

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

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

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

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

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

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

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

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

Loading…
Cancel
Save