se agregan los estados pendiente de facturar y facturado al proceso del dpto de facturacion

feature/ConsolidarPedimentos_20231229
Felix Morales 1 year ago
parent 635d5ed824
commit dd76a18f40
  1. 68
      src/Components/Corresponsales/TraficoCorresponsales.tsx
  2. 117
      src/Components/Dashboard/DashboardFacturacion.tsx
  3. 2
      src/Components/Reportes/customCells/progressBar.tsx
  4. 2
      src/Components/Utils/FileManager/FileManager.tsx
  5. 9
      src/Services/Dashboard/Dashboard.Facturacion.Service.ts

@ -112,6 +112,8 @@ import moment from 'moment'
import ICorresponsalContenedores from '../../Interfaces/Corresponsales/ICorresponsalContenedores'
import ICorresponsalFacturas from '../../Interfaces/Corresponsales/ICorresponsalFacturas'
import { ITiposMercancias } from '../../Interfaces/Catalogos/ICatTiposMercancias'
import axios from 'axios'
import { TargetURL } from '../../Constants/TargetURL'
interface IProps {
IDTrafico: number
@ -133,6 +135,7 @@ interface IAduanas {
}
export default function TraficoCorresponsales (props:IProps) {
const URL = new TargetURL()
const dispatch = useDispatch()
const [UserId, setUserId] = useState(() => {
const stickyValue = window.localStorage.getItem('UserId')
@ -1055,7 +1058,7 @@ export default function TraficoCorresponsales (props:IProps) {
if(Depto === 'Corresponsalias') saveCorresponsaliasStep()
else if(Depto === 'Contabilidad') saveContabilidadStep()
}
const saveFinalStep = (data: DTOTraficoCompleto) => {
const saveFinalStep = async (data: DTOTraficoCompleto) => {
CTrafDataService.ValidateComplete(data)
.then((response) => {
if (response.status === 200) {
@ -1096,21 +1099,28 @@ export default function TraficoCorresponsales (props:IProps) {
}
}
const saveContabilidadStep = () => {
const saveContabilidadStep = async () => {
if(IDEstatusContabilidad === 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 === IDEstatusContabilidad) {
return a
}
})
});
if(IDEstatusContabilidad === 7){
let data: DTOTraficoCompleto = {
id: IDTrafico,
idUsuario: UserId,
estatus: 3,
estatus: Proceso === 2 ? 3 : 4,
comentarios: arrStatus[0].estatus
}
saveFinalStep(data)
await saveFinalStep(data).then(async (r) => {
if(Proceso === 2) await generateFacturacionTxt();
});
}else{
let data: ICorresponsalesTraficoContabilidad = {
id: 0,
@ -1118,13 +1128,23 @@ export default function TraficoCorresponsales (props:IProps) {
idTrafico: IDTrafico,
statusProceso: 0,
fechaRegistro: '',
razonRechazo: arrStatus[0]?.estatus ? arrStatus[0]?.estatus : "",
tipo: 2
razonRechazo: arrStatus[0].estatus,
tipo: Proceso === 2 ? 2 : 3
}
rejectCurrentStep(data)
}
}
const saveFacturacionStep = () => {
let data: DTOTraficoCompleto = {
id: IDTrafico,
idUsuario: UserId,
estatus: 5,
comentarios: "Tráfico facturado."
}
saveFinalStep(data)
}
const rejectCurrentStep = (data:ICorresponsalesTraficoContabilidad) => {
CContaDataService.Append(data)
.then( () => {
@ -1248,8 +1268,8 @@ export default function TraficoCorresponsales (props:IProps) {
})
});
}
const generateFacturacionTxt = () => {
const generateFacturacionTxt = async () => {
let cliente = Clientes?.filter(x => x.sClave === IDCliente)[0];
let tipoMercancia = TiposMercancia.filter(x => x.id === IDTipoMercancia)[0];
let facturas = mCFacturas.filter(factura => factura.id > 0);
@ -1272,12 +1292,20 @@ export default function TraficoCorresponsales (props:IProps) {
fileData += `0|""|""|""|""|""|""|""|""|${ValorFacturasDls}|""|""|336|""|/ / : :|${moment().format("MM/DD/YYYY hh:mm:ss")}|${moment().format("MM/DD/YYYY hh:mm:ss")}|`;
//
fileData += `0|""|""|""|0|0|0|F|""|0|""|""|0|0|0|0|""|"1-9999"`;
const blob = new Blob([fileData], { type: "text/plain" });
const url = URL.createObjectURL(blob);
//const blob = new Blob([fileData], { type: "text/plain" });
const file = new File([fileData], `${FolioTrafico}_${Date.now()}.txt`, {type: "text/plain"});
let formData = new FormData();
formData.append('file', file);
await axios.post(
URL.get() +
`/FileManager/AppendFileByProcess?IdUsuario=${UserId}&Proceso=${31}&Tags=${IDTrafico}&crud=1`,
formData
);
/*const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.download = `${FolioTrafico}_${Date.now()}.txt`;
link.href = url;
link.click();
link.click();*/
}
const concatFacturasPedidos = (facturas: ICorresponsalFacturas[]) => {
@ -2309,12 +2337,12 @@ export default function TraficoCorresponsales (props:IProps) {
onChange={(date: any) =>
setFechaDesaduanamiento(date)
}
disabled={Depto === 'Contabilidad'}
disabled={Depto !== 'Corresponsalias'}
showTimeSelect
timeClassName={handleColor}
dateFormat="MM/dd/yyyy HH:mm:ss"
placeholderText="MM/DD/AAAA HH:mm:ss"
isClearable
isClearable={Depto === 'Corresponsalias'}
customInput={
<MaskedInput
type="text"
@ -2604,7 +2632,7 @@ export default function TraficoCorresponsales (props:IProps) {
<Row
style={{
padding:"5px 0",
visibility: Proceso === 2 && Depto === 'Contabilidad'? 'visible' : 'hidden'
visibility: ((Proceso === 2 && Depto === 'Contabilidad') || (Proceso === 3 && Depto === 'Facturacion'))? 'visible' : 'hidden'
}}
>
<Col xs={5}></Col>
@ -2631,7 +2659,7 @@ export default function TraficoCorresponsales (props:IProps) {
</Form.Control>
</Col>
<Col xs={1} style={{}}>
{Depto === 'Contabilidad' ? (
{Depto === 'Contabilidad' || Depto === 'Facturacion'? (
<Button
variant="primary"
size="sm"
@ -2650,7 +2678,7 @@ export default function TraficoCorresponsales (props:IProps) {
)}
</Col>
</Row>
<Row style={{display: Depto === 'Facturacion' ? 'flex': 'none'}}>
<Row style={{display: Depto === 'Facturacion' && Proceso === 4 ? 'flex': 'none'}}>
<Col xs={12} style={{textAlign:'end'}}>
<Button
variant="primary"
@ -2660,10 +2688,10 @@ export default function TraficoCorresponsales (props:IProps) {
paddingRight: '25px'
}}
onClick={() => {
generateFacturacionTxt();
saveFacturacionStep();
}}
>
Generar TXT
Terminar
</Button>
</Col>
</Row>

@ -2,44 +2,117 @@ import React, { FC, useEffect, useState } from 'react'
import { Card, Col, Container, Row } from 'react-bootstrap'
import { IconContext } from 'react-icons'
import { BsCashCoin } from 'react-icons/bs'
import { Link } from 'react-router-dom'
import DashboardDataService from '../../Services/Dashboard/Dashboard.Contabilidad.Service'
import { Link, useNavigate } from 'react-router-dom'
import DashboardDataService from '../../Services/Dashboard/Dashboard.Facturacion.Service'
import { ApexOptions } from 'apexcharts'
import ReactApexChart from 'react-apexcharts'
interface IProps {}
export const DashboardFacturacion: FC<IProps> = (props) => {
const [CTCTotal, setCTCTotal] = useState(0) // Corresponsales: Traficos terminados listos para contabilidad
const [CAPATotal, setCAPATotal] = useState(0) // Corresponsales anticipos pendientes de autorizar
const [CuentasComplementariasPedientes, setCuentasComplementariasPendientes] = useState(0) // Corresponsales anticipos pendientes de autorizar
const [labels, setlabels] = useState<string[]>([]);
const [series, setseries] = useState<number[]>([]);
const navigate = useNavigate();
const [ChartOptions, setChartOptions] = useState<ApexOptions>({
labels: [
'(2) Rechazos para el corresponsal',
' (0) Rechazados x Contabilidad',
'(10) Pendientes por terminar',
],
colors: ['#EB984E', '#E52626', '#ABEB4E', '#2288D3'],
legend: { position: 'bottom' },
/*plotOptions: {
pie: {
donut: {
size: '55%',
},
},
},*/
});
useEffect(() => {
DashboardDataService.getTotalTraficosPendientesAutorizar(5)
DashboardDataService.getFacturacion()
.then((response) => {
setCTCTotal(response.data.total)
console.log(response.data);
let labels: string[] = [];
let series: number[] = [];
response.data.forEach((element) => {
if (element.descripcion.indexOf('Total') === -1) {
labels.push('(' + element.total + ') : ' + element.descripcion);
series.push(element.total);
}
});
setlabels(labels);
setseries(series);
setChartOptions({
labels: labels,
colors: ['#2288D3', '#ABEB4E', '#E52626', '#EB984E'],
legend: { position: 'bottom' },
plotOptions: {
pie: {
donut: {
size: '0%',
labels: {
show: false,
total: {
showAlways: false,
show: false,
fontSize: '15px',
},
value: {
show: false,
fontSize: '43px',
fontWeight: 'bold',
},
},
},
},
},
chart: {
events: {
legendClick: function(chartContext, seriesIndex, config) {
switch(seriesIndex){
case 0:
navigate('../RptCorresponsalesTraficos/proc=4/modo=1');
break;
case 1:
navigate('../RptCorresponsalesTraficos/proc=5/modo=1');
break;
case 2:
navigate('../RptCorresponsalesTraficos/proc=3/modo=2');
break;
case 3:
navigate('../RptCorresponsalesTraficos/proc=3/modo=1');
break;
}
}
}
}
});
})
.catch((e: Error) => {
return
})
return;
});
}, [])
return (
<>
<Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'>
<Card.Header>Facturacion</Card.Header>
<Card.Header><b>Facturación:</b> Tráficos Pendientes</Card.Header>
<Card.Body style={{ paddingBottom: '50px' }}>
<Card.Title>
Traficos pendientes
<br />
<br />
</Card.Title>
<Card.Img variant='top' src='' onClick={() => {}} />
<div style={{ fontSize: '6em' }} className='text-center'>
<IconContext.Provider value={{ color: 'green', size: '35%' }}>
<BsCashCoin />
</IconContext.Provider>
&nbsp;{CTCTotal}
</div>
{labels ? (
<ReactApexChart
type='donut'
options={ChartOptions}
series={series}
width={250}
height={500}
/>
) : (
''
)}
</Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}>
<Link

@ -13,7 +13,7 @@ export const ProgressBar: FC<ICellRendererParams> = (props: ICellRendererParams)
useEffect(() => {
if (props.data.proceso === 0) setColor('progress-bar bg-RECHAZOS_PARA_CORRESPONSAL')
if (props.data.proceso === 1) {
if (props.data.proceso === 1 || props.data.proceso === 2) {
if (props.data.rechazado > 0) setColor('progress-bar bg-RECHAZOS_POR_CONTABILIDAD')
else setColor('progress-bar bg-CORRESPONSAL_NORMAL')
}

@ -147,7 +147,7 @@ export const FileManager: FC<IProps> = (props) => {
})
.catch((e: Error) => {
setHeader('Error')
setMsg('A este concepto no se le ha anexado archivo')
setMsg('No se ha encontrado el archivo solicitado.')
setShowMsg(true)
return
})

@ -0,0 +1,9 @@
import http from "../common/http-common";
import DashboardCorresponsales from "../../Interfaces/Dashboard/DashboardCorresponsales";
class Dashboard_Facturacion_DataService {
getFacturacion(){
return http.get<DashboardCorresponsales[]>(`/Dashboard/Corresponsales/GetFacturacionDashboard`);
}
}
export default new Dashboard_Facturacion_DataService();
Loading…
Cancel
Save