creacion catalogo TiposMercancias y generar txt para facturacion

feature/ConsolidarPedimentos_20231229
Felix Morales 1 year ago
parent b39d16a606
commit db4ceab9e7
  1. 10
      src/Classes/Corresponsales/CCorresponsalesTrafico.ts
  2. 197
      src/Components/Corresponsales/TraficoCorresponsales.tsx
  3. 5
      src/Interfaces/Catalogos/ICatTiposMercancias.ts
  4. 1
      src/Interfaces/Catalogos/IClientes.ts
  5. 3
      src/Interfaces/Corresponsales/ICorresponsalTrafico.ts
  6. 9
      src/Services/Catalogos/TiposMercancia.Services.ts
  7. 1
      src/store/features/Corresponsales/CorresponsalesTraficoSlice.ts

@ -41,7 +41,8 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
idTabulador: number;
noRecti: number;
estatusCode: number;
activo?: number
activo?: number;
idTipoMercancia: number;
constructor() {
this.id=0
@ -85,6 +86,7 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
this.noRecti=0;
this.estatusCode=0;
this.activo=1
this.idTipoMercancia=0;
}
public getEmptyObject(): ICorresponsalTrafico {
@ -129,7 +131,8 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
idTabulador:0,
noRecti:0,
estatusCode:0,
activo :1
activo :1 ,
idTipoMercancia: 0
}
}
@ -175,7 +178,8 @@ export default class CCorresponsalesTrafico implements ICorresponsalTrafico {
idTabulador: data.idTabulador,
noRecti: data.noRecti,
estatusCode: data.estatusCode,
activo : data.activo
activo : data.activo,
idTipoMercancia: data.idTipoMercancia,
}
}
}

@ -80,7 +80,7 @@ import CPedimentoService from '../../Services/Corresponsalias/Corresponsales.Tra
import DashboardService from '../../Services/Dashboard/Dashboard.Corresponsales.Services'
import CCueCompService from '../../Services/Corresponsalias/Corresponsales.CuentasComplementarias.Services'
import FileManService from '../../Services/Utils/FileManager.Services'
import TiposMercanciaService from '../../Services/Catalogos/TiposMercancia.Services'
// Componentes
import CurrencyFormat from 'react-currency-format'
import MaskedInput from 'react-text-mask'
@ -111,6 +111,7 @@ import DTORectificacionHistorico from '../../DTO/Corresponsales/DTORectificacion
import moment from 'moment'
import ICorresponsalContenedores from '../../Interfaces/Corresponsales/ICorresponsalContenedores'
import ICorresponsalFacturas from '../../Interfaces/Corresponsales/ICorresponsalFacturas'
import { ITiposMercancias } from '../../Interfaces/Catalogos/ICatTiposMercancias'
interface IProps {
IDTrafico: number
@ -246,6 +247,8 @@ export default function TraficoCorresponsales (props:IProps) {
const [DataCatEstatus, setDataCatEstatus] = useState<
ICorresponsalesCatTraficoEstatus[]
>([])
const [TiposMercancia, setTiposMercancia] = useState<ITiposMercancias[]>([])
const [IDTipoMercancia, setIDTipoMercancia] = useState<number>(0)
const [Aduanas, setAduanas] = useState<IAduanas[]>([
{ id: 440, descripcion: 'CD. ACUNA, COAH.' },
{ id: 810, descripcion: 'ALTAMIRA, TAMPS.' }
@ -387,6 +390,7 @@ export default function TraficoCorresponsales (props:IProps) {
data.noCuenta = NoCuenta
data.fechaCuenta = FechaCuenta
data.idTabulador = IDTabulador
data.idTipoMercancia = IDTipoMercancia
CTrafDataService.Append(data)
.then((response) => {
if (response.data.estatusCode === 0) {
@ -521,6 +525,17 @@ export default function TraficoCorresponsales (props:IProps) {
return
})
TiposMercanciaService.GetAll()
.then((response) => {
setTiposMercancia(response.data);
})
.catch((e: Error) => {
setHeader('Error')
setMsg('Ocurrio un error: ' + e)
setShowMsg(true)
return
});
CFacDataService.getAll(IDTrafico)
.then((response) => {
dispatch(InitCorresponsalesFacturas(IDTrafico))
@ -664,6 +679,7 @@ export default function TraficoCorresponsales (props:IProps) {
setSemaforoFiscal(response.data.semaforoFiscal)
setNoCuenta(response.data.noCuenta)
setFechaCuenta(setDate(response.data.fechaCuenta))
setIDTipoMercancia(response.data.idTipoMercancia);
})
.catch((e: Error) => {
setHeader('Error')
@ -1102,7 +1118,7 @@ export default function TraficoCorresponsales (props:IProps) {
idTrafico: IDTrafico,
statusProceso: 0,
fechaRegistro: '',
razonRechazo: arrStatus[0].estatus,
razonRechazo: arrStatus[0]?.estatus ? arrStatus[0]?.estatus : "",
tipo: 0
}
rejectCurrentStep(data)
@ -1233,6 +1249,51 @@ export default function TraficoCorresponsales (props:IProps) {
});
}
const generateFacturacionTxt = () => {
let cliente = Clientes?.filter(x => x.sClave === IDCliente)[0];
let tipoMercancia = TiposMercancia.filter(x => x.id === IDTipoMercancia)[0];
let facturas = mCFacturas.filter(factura => factura.id > 0);
let nombreProveedor = "";
//
let fileData = `"${FolioTrafico}"|${IDCliente}|${Patente}|${Pedimento}|${TipoCambio}|${FechaPago}|0|0|0|0|0|0|0.00|"${Aduana}"|"${ClavePedimento}"|${TipoOperacion}|`;
//
fileData += `"C"|${ValorFacturasDls}|${ValorFacturasDls! * TipoCambio!}|${ValorAduanaMN}|"${Descripcion}"|${Kilos}|${Kilos! * 2.20462}|${CantidadFracciones}|"${SemafoFiscal === 0 ? "R" : "V"}"|`;
//
if(facturas.length > 0){
nombreProveedor = mCProveedores.filter(p => p.id === facturas[0].proveedor)[0].nombre;
fileData += `${facturas.length}|"${facturas.map(factura => {return factura.factura}).join(",")}"|0|"${nombreProveedor}"|"${concatFacturasPedidos(facturas)}"|`;
}else
fileData += `0|""|0|""|""|`;
//
fileData += `${Bultos}|${0}|${0}|${moment(FechaDesaduanamiento).format('MM/DD/YYYY')}|0|0|""|${moment(FechaDesaduanamiento).format('MM/DD/YYYY')}|${tipoMercancia?.clave ? tipoMercancia?.clave : '""'}|0|0|""|""|""|""|/ /|F|F|F|F|0|0|F|0.00|F|0|""|""|`;
//
fileData += `${FechaPagoH !== "" ? FechaPagoH : FechaPago}|""|""|0|"${cliente!.sRazonSocial.split('|')[0].trim()}"|${cliente!.sRFC}|""|""|""|""|""|""|""|"${nombreProveedor}"|`;
//
fileData += `0|""|""|""|""|""|""|""|""|${ValorFacturasDls}|""|""|336|""|/ / : :|${moment().format("MM/DD/YYYY hh:mm:ss")}|${moment().format("MM/DD/YYYY hh:mm:ss")}|`;
//
fileData += `0|""|""|""|0|0|0|F|""|0|""|""|0|0|0|0|""|"1-9999"`;
const blob = new Blob([fileData], { type: "text/plain" });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.download = `${FolioTrafico}_${Date.now()}.txt`;
link.href = url;
link.click();
}
const concatFacturasPedidos = (facturas: ICorresponsalFacturas[]) => {
let pedidos = "";
facturas.forEach((factura, index) => {
if(factura.pedido !== ''){
if(index <= facturas.length){
pedidos += `${factura.pedido},`;
}else{
pedidos += factura.pedido;
}
}
});
return pedidos;
}
return (
<div>
<Card className="labelSize13px">
@ -1561,96 +1622,96 @@ export default function TraficoCorresponsales (props:IProps) {
<Card.Text>
<Container fluid="md">
<Row style={{padding: "5px 0"}}>
<Col sm={6} md={6} lg={2}>
<Row>
<Col xs={12}>
<Col sm={12} md={12} lg={6}>
<Row style={{alignItems:'baseline'}}>
<Col xs={6}>
<SelectGuias
IDTrafico={IDTrafico}
Editable={Depto === 'Corresponsalias'}
/>
</Col>
</Row>
</Col>
<Col sm={6} md={6} lg={6}>
<Row className='justify-content-around'>
<Col lg={1} md={2} sm={2}>
<Form.Label>Bultos</Form.Label>
</Col>
<Col lg={2} md={4} sm={4}>
<Col xs={3}>
<Form.Label>
Bultos
<CurrencyFormat
value={Bultos}
displayType={
Depto === 'Corresponsalias' ? 'input' : 'text'
}
displayType='input'
readOnly= {Depto !== 'Corresponsalias' ? true : false}
thousandSeparator={true}
onValueChange={(values: any) => {
const { value } = values
setBultos(value)
}}
style={
Depto === 'Corresponsalias'
? {
fontSize: '15px',
backgroundColor: '#FFFFFF',
border: '1px solid #000000',
width: '70px',
borderRadius: '3px'
}
: {
style={{
fontSize: '15px',
backgroundColor: '#FFFFFF',
paddingLeft: '20px',
paddingRight: '5px',
border: '1px solid #000000',
width: '70px',
borderRadius: '3px'
}
}
width: '100%',
borderRadius: '3px',
textAlign: 'end',
padding: '0 5px'
}}
/>
</Form.Label>
</Col>
<Col lg={1} md={2} sm={2}>
<Form.Label>Kilos</Form.Label>
</Col>
<Col lg={2} md={4} sm={4}>
<Col xs={3}>
<Form.Label>
Kilos
<CurrencyFormat
value={Kilos}
displayType={
Depto === 'Corresponsalias' ? 'input' : 'text'
}
displayType='input'
readOnly= {Depto !== 'Corresponsalias' ? true : false}
thousandSeparator={true}
onValueChange={(values: any) => {
const { value } = values
setKilos(value)
}}
style={
Depto === 'Corresponsalias'
? {
fontSize: '15px',
backgroundColor: '#FFFFFF',
border: '1px solid #000000',
width: '100%',
borderRadius: '3px'
}
: {
style={{
fontSize: '15px',
backgroundColor: '#FFFFFF',
paddingLeft: '20px',
paddingRight: '5px',
border: '1px solid #000000',
width: '100%',
borderRadius: '3px'
}
}
borderRadius: '3px',
textAlign: 'end',
padding: '0 5px'
}}
/>
</Form.Label>
</Col>
</Row>
</Col>
<Col sm={12} md={12} lg={4}>
<Row className='justify-content-around'>
<Col>
<Form.Label>Estatus</Form.Label>
<Col sm={12} md={12} lg={6}>
<Row>
<Col xs={6}>
<Form.Label style={{width:'100%'}}>
Tipo de Mercancia
<Form.Control
as="select"
className="form-select form-select-sm"
value={IDTipoMercancia}
disabled={
Depto !== 'Corresponsalias' ? true : false
}
onChange={(e) => {
setIDTipoMercancia(parseInt(e.target.value))
}}
>
<option value="0">-SELECCIONE-</option>
{TiposMercancia
? TiposMercancia.map((t) => {
return (
<option key={t.id} value={t.id}>
{t.descripcion}
</option>
)
})
: null}
</Form.Control>
</Form.Label>
</Col>
<Col sm={8}>
<Col xs={6}>
<Form.Label>
Estatus
<Form.Control
as="select"
className="form-select form-select-sm"
@ -1673,6 +1734,7 @@ export default function TraficoCorresponsales (props:IProps) {
})
: null}
</Form.Control>
</Form.Label>
</Col>
</Row>
</Col>
@ -2588,6 +2650,23 @@ export default function TraficoCorresponsales (props:IProps) {
)}
</Col>
</Row>
<Row style={{display: Depto === 'Facturacion' ? 'flex': 'none'}}>
<Col xs={12} style={{textAlign:'end'}}>
<Button
variant="primary"
size="sm"
style={{
paddingLeft: '25px',
paddingRight: '25px'
}}
onClick={() => {
generateFacturacionTxt();
}}
>
Generar TXT
</Button>
</Col>
</Row>
<Row style={{padding: "5px 0"}}>
<Col xs={6} style={{ textAlign: 'center' }}>
Trafico Corresponsales: Rechazo(s)

@ -0,0 +1,5 @@
export interface ITiposMercancias{
id: number,
clave: string;
descripcion: string;
}

@ -2,4 +2,5 @@ export default interface IClientes {
sClave: number;
agrupado: number;
sRazonSocial : string;
sRFC : string;
}

@ -39,5 +39,6 @@ export default interface ICorresponsalTrafico {
idTabulador: number,
noRecti: number,
estatusCode: number,
activo?: number
activo?: number,
idTipoMercancia: number
}

@ -0,0 +1,9 @@
import http from "../common/http-common";
class CorresponsalesTiposMercanciaService{
GetAll() {
return http.get(`/Catalogos/TiposMercancia`);
}
}
export default new CorresponsalesTiposMercanciaService();

@ -42,6 +42,7 @@ const CorresponsalesTrafico: ICorresponsalTrafico[] = [{
noRecti:0,
estatusCode:0,
activo: 0,
idTipoMercancia:0
}]
const initialState = { CorresponsalesTrafico }

Loading…
Cancel
Save