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

@ -2,44 +2,117 @@ import React, { FC, useEffect, useState } from 'react'
import { Card, Col, Container, Row } from 'react-bootstrap' import { Card, Col, Container, Row } from 'react-bootstrap'
import { IconContext } from 'react-icons' import { IconContext } from 'react-icons'
import { BsCashCoin } from 'react-icons/bs' import { BsCashCoin } from 'react-icons/bs'
import { Link } from 'react-router-dom' import { Link, useNavigate } from 'react-router-dom'
import DashboardDataService from '../../Services/Dashboard/Dashboard.Contabilidad.Service' import DashboardDataService from '../../Services/Dashboard/Dashboard.Facturacion.Service'
import { ApexOptions } from 'apexcharts'
import ReactApexChart from 'react-apexcharts'
interface IProps {} interface IProps {}
export const DashboardFacturacion: FC<IProps> = (props) => { export const DashboardFacturacion: FC<IProps> = (props) => {
const [CTCTotal, setCTCTotal] = useState(0) // Corresponsales: Traficos terminados listos para contabilidad const [labels, setlabels] = useState<string[]>([]);
const [CAPATotal, setCAPATotal] = useState(0) // Corresponsales anticipos pendientes de autorizar const [series, setseries] = useState<number[]>([]);
const [CuentasComplementariasPedientes, setCuentasComplementariasPendientes] = useState(0) // Corresponsales anticipos pendientes de autorizar 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(() => { useEffect(() => {
DashboardDataService.getTotalTraficosPendientesAutorizar(5) DashboardDataService.getFacturacion()
.then((response) => { .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) => { .catch((e: Error) => {
return return;
}) });
}, []) }, [])
return ( return (
<> <>
<Col> <Col>
<Card style={{ width: '18rem' }} className='dashboardComponentFont'> <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.Body style={{ paddingBottom: '50px' }}>
<Card.Title> {labels ? (
Traficos pendientes <ReactApexChart
<br /> type='donut'
<br /> options={ChartOptions}
</Card.Title> series={series}
<Card.Img variant='top' src='' onClick={() => {}} /> width={250}
<div style={{ fontSize: '6em' }} className='text-center'> height={500}
<IconContext.Provider value={{ color: 'green', size: '35%' }}> />
<BsCashCoin /> ) : (
</IconContext.Provider> ''
&nbsp;{CTCTotal} )}
</div>
</Card.Body> </Card.Body>
<Card.Footer style={{ paddingRight: '5px' }}> <Card.Footer style={{ paddingRight: '5px' }}>
<Link <Link

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

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