From dd76a18f40f1d44fd5b1c69f1c621e2af476f60c Mon Sep 17 00:00:00 2001 From: Felix Morales Date: Tue, 15 Aug 2023 11:25:26 -0500 Subject: [PATCH] se agregan los estados pendiente de facturar y facturado al proceso del dpto de facturacion --- .../Corresponsales/TraficoCorresponsales.tsx | 68 +++++++--- .../Dashboard/DashboardFacturacion.tsx | 117 ++++++++++++++---- .../Reportes/customCells/progressBar.tsx | 2 +- .../Utils/FileManager/FileManager.tsx | 2 +- .../Dashboard.Facturacion.Service.ts | 9 ++ 5 files changed, 154 insertions(+), 44 deletions(-) create mode 100644 src/Services/Dashboard/Dashboard.Facturacion.Service.ts diff --git a/src/Components/Corresponsales/TraficoCorresponsales.tsx b/src/Components/Corresponsales/TraficoCorresponsales.tsx index abc06dd..8c9fbbe 100644 --- a/src/Components/Corresponsales/TraficoCorresponsales.tsx +++ b/src/Components/Corresponsales/TraficoCorresponsales.tsx @@ -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={ @@ -2631,7 +2659,7 @@ export default function TraficoCorresponsales (props:IProps) { - {Depto === 'Contabilidad' ? ( + {Depto === 'Contabilidad' || Depto === 'Facturacion'? ( diff --git a/src/Components/Dashboard/DashboardFacturacion.tsx b/src/Components/Dashboard/DashboardFacturacion.tsx index e19cb0c..9d38c9a 100644 --- a/src/Components/Dashboard/DashboardFacturacion.tsx +++ b/src/Components/Dashboard/DashboardFacturacion.tsx @@ -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 = (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([]); + const [series, setseries] = useState([]); + const navigate = useNavigate(); + const [ChartOptions, setChartOptions] = useState({ + 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 ( <> - Facturacion + Facturación: Tráficos Pendientes - - Traficos pendientes -
-
-
- {}} /> -
- - - -  {CTCTotal} -
+ {labels ? ( + + ) : ( + '' + )}
= (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') } diff --git a/src/Components/Utils/FileManager/FileManager.tsx b/src/Components/Utils/FileManager/FileManager.tsx index d7a2079..37dee72 100644 --- a/src/Components/Utils/FileManager/FileManager.tsx +++ b/src/Components/Utils/FileManager/FileManager.tsx @@ -147,7 +147,7 @@ export const FileManager: FC = (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 }) diff --git a/src/Services/Dashboard/Dashboard.Facturacion.Service.ts b/src/Services/Dashboard/Dashboard.Facturacion.Service.ts new file mode 100644 index 0000000..37660c1 --- /dev/null +++ b/src/Services/Dashboard/Dashboard.Facturacion.Service.ts @@ -0,0 +1,9 @@ +import http from "../common/http-common"; +import DashboardCorresponsales from "../../Interfaces/Dashboard/DashboardCorresponsales"; + +class Dashboard_Facturacion_DataService { + getFacturacion(){ + return http.get(`/Dashboard/Corresponsales/GetFacturacionDashboard`); + } +} +export default new Dashboard_Facturacion_DataService(); \ No newline at end of file