From 581e8bbdc5394a95f5342eb5a3bfb79dbcad9780 Mon Sep 17 00:00:00 2001 From: El Mau Date: Mon, 17 Jan 2022 21:49:35 -0600 Subject: [PATCH] Se agrega nodo para remolques --- CHANGELOG.md | 4 ++ source/app/controllers/cfdi_xml.py | 4 ++ source/app/models/main.py | 7 ++- source/static/js/controller/invoices.js | 26 +++++++-- source/static/js/ui/invoices.js | 78 ++++++++++++++++++++++++- 5 files changed, 109 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22a8be0..4848624 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +v 1.44.1 [18-Ene-2022] + - Correciones en generación de Carta Porte v2.0 + + v 1.44.0 [10-Ene-2022] ---------------------- - Soporte para Carta Porte v2 con CFDI 3.3 diff --git a/source/app/controllers/cfdi_xml.py b/source/app/controllers/cfdi_xml.py index 7bdc5fb..787cfbf 100644 --- a/source/app/controllers/cfdi_xml.py +++ b/source/app/controllers/cfdi_xml.py @@ -497,6 +497,7 @@ class CFDI(object): autotransporte = attr.pop('autotransporte') identificacion = autotransporte.pop('identificacion') seguros = autotransporte.pop('seguros') + remolque = autotransporte.pop('remolque') node = ET.SubElement(node_carta, f'{prefix}:Mercancias', attr) for mercancia in mercancias: @@ -505,6 +506,9 @@ class CFDI(object): sub_node = ET.SubElement(node, f'{prefix}:Autotransporte', autotransporte) ET.SubElement(sub_node, f'{prefix}:IdentificacionVehicular', identificacion) ET.SubElement(sub_node, f'{prefix}:Seguros', seguros) + if remolque['SubTipoRem'] and remolque['Placa']: + tmp = ET.SubElement(sub_node, f'{prefix}:Remolques') + ET.SubElement(tmp, f'{prefix}:Remolque', remolque) if tiposfigura: sub_node = ET.SubElement(node_carta, f'{prefix}:FiguraTransporte') diff --git a/source/app/models/main.py b/source/app/models/main.py index 35f46ea..43897f6 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -5329,8 +5329,8 @@ class Facturas(BaseModel): return values = utils.loads(valores) - values['TotalDistRec'] = f"{float(values['TotalDistRec']):.2f}" + total_distance = 0.00 total_weight = 0.00 mercancias = values['mercancias'] for mercancia in mercancias['mercancias']: @@ -5340,6 +5340,9 @@ class Facturas(BaseModel): ubicaciones = values['ubicaciones'] for ubicacion in ubicaciones: + if 'DistanciaRecorrida' in ubicacion: + print(1, type(ubicacion['DistanciaRecorrida']), ubicacion['DistanciaRecorrida']) + total_distance += float(ubicacion['DistanciaRecorrida']) municipio = ubicacion.pop('Municipio') estado = ubicacion.pop('Estado') pais = ubicacion.pop('Pais') @@ -5351,6 +5354,8 @@ class Facturas(BaseModel): 'Pais': pais, 'CodigoPostal': cp, } + + values['TotalDistRec'] = f"{total_distance:.2f}" # ~ print(2, values) data = { 'factura': invoice, diff --git a/source/static/js/controller/invoices.js b/source/static/js/controller/invoices.js index cd14ba7..6da1b19 100644 --- a/source/static/js/controller/invoices.js +++ b/source/static/js/controller/invoices.js @@ -89,6 +89,7 @@ var invoices_controllers = { tv_invoice = $$('tv_invoice').getTabbar() tv_invoice.attachEvent('onChange', tv_invoice_change) + $$('grid_carta_mercancias').attachEvent('onItemClick', grid_carta_mercancias_click) $$('cmd_carta_add_product').attachEvent('onItemClick', cmd_carta_add_product_click) $$('cmd_carta_copy_from_invoice').attachEvent('onItemClick', cmd_carta_copy_from_invoice_click) @@ -702,21 +703,21 @@ function guardar_y_timbrar(values){ var usar_cartaporte = $$('chk_cfdi_usar_cartaporte').getValue() if(usar_cartaporte){ - var total_distance = 0.00 + //~ var total_distance = 0.00 //~ var total_weight = 0.00 var cartaporte = { TranspInternac: $$('lst_carta_TranspInternac').getValue(), - TotalDistRec: total_distance, + //~ TotalDistRec: total_distance, } var ubicaciones = $$('grid_carta_ubicaciones').data.getRange() ubicaciones.forEach(function(row, index){ delete row['id'] delete row['delete'] - if(row['DistanciaRecorrida']){ - total_distance += parseFloat(row['DistanciaRecorrida']) - } + //~ if(row['DistanciaRecorrida']){ + //~ total_distance += parseFloat(row['DistanciaRecorrida']) + //~ } }) - cartaporte['TotalDistRec'] = total_distance + //~ cartaporte['TotalDistRec'] = total_distance cartaporte['ubicaciones'] = ubicaciones var row = $$('grid_carta_autotransporte').data.getRange()[0] @@ -731,12 +732,17 @@ function guardar_y_timbrar(values){ seguros: { AseguraRespCivil: row['AseguraRespCivil'], PolizaRespCivil: row['PolizaRespCivil'], + }, + remolque: { + SubTipoRem: row['SubTipoRem'], + Placa: row['Placa'], } } var mercancias = $$('grid_carta_mercancias').data.getRange() mercancias.forEach(function(row, index){ delete row['id'] + delete row['delete'] row['Cantidad'] = String(row['Cantidad']) //~ row['ValorMercancia'] = String(row['ValorMercancia']) //~ if(row['PesoEnKg']){ @@ -2645,3 +2651,11 @@ function cmd_carta_copy_from_invoice_click(){ } }) } + + +function grid_carta_mercancias_click(id, e, node){ + if(id.column != 'delete'){ + return + } + this.remove(id.row) +} diff --git a/source/static/js/ui/invoices.js b/source/static/js/ui/invoices.js index 4929997..499ae5d 100644 --- a/source/static/js/ui/invoices.js +++ b/source/static/js/ui/invoices.js @@ -928,7 +928,7 @@ var grid_cols_carta_mercancias = [ {id: 'BienesTransp', header: 'Clave SAT', editor: 'text', fillspace: 1}, {id: 'Descripcion', header: 'Descripción', editor: 'text', fillspace: 1}, {id: 'Cantidad', header: 'Cantidad', editor: 'text', format: webix.i18n.numberFormat, css: 'right', fillspace: 1}, - {id: 'ClaveUnidad', header: 'Unidad', editor: 'select', options: 'values/unidades', fillspace: 1}, + {id: 'ClaveUnidad', header: 'Unidad', editor: 'select', options: 'values/unidades', footer: 'Total peso:', fillspace: 1}, //~ {id: 'ValorMercancia', header: 'Valor Mercancia', format: webix.i18n.priceFormat, css: 'right', footer: 'Total peso:', fillspace: 1}, {id: 'PesoEnKg', header: 'Peso (Kg)', format: webix.i18n.numberFormat, css: 'right', editor: 'text', footer: {content: 'summColumn', css: 'right'}, fillspace: 1}, ] @@ -939,6 +939,79 @@ var opt_config_auto = [ {id: 'VL', value: '[VL] Vehículo ligero de carga (2 llantas en el eje delantero y 2 llantas en el eje trasero)'}, {id: 'C2', value: '[C2] Camión Unitario (2 llantas en el eje delantero y 4 llantas en el eje trasero)'}, {id: 'C3', value: '[C3] Camión Unitario (2 llantas en el eje delantero y 6 o 8 llantas en los dos ejes traseros)'}, + {id: 'C2R2', value: '[C2R2] Camión-Remolque (6 llantas en el camión y 8 llantas en remolque)'}, + {id: 'C3R2', value: '[C3R2] Camión-Remolque (10 llantas en el camión y 8 llantas en remolque)'}, + {id: 'C2R3', value: '[C2R3] Camión-Remolque (6 llantas en el camión y 12 llantas en remolque)'}, + {id: 'C3R3', value: '[C3R3] Camión-Remolque (10 llantas en el camión y 12 llantas en remolque)'}, + {id: 'T2S1', value: '[T2S1] Tractocamión Articulado (6 llantas en el tractocamión, 4 llantas en el semirremolque)'}, + {id: 'T2S2', value: '[T2S2] Tractocamión Articulado (6 llantas en el tractocamión, 8 llantas en el semirremolque)'}, + {id: 'T2S3', value: '[T2S3] Tractocamión Articulado (6 llantas en el tractocamión, 12 llantas en el semirremolque)'}, + {id: 'T3S1', value: '[T3S1] Tractocamión Articulado (10 llantas en el tractocamión, 4 llantas en el semirremolque)'}, + {id: 'T3S2', value: '[T3S2] Tractocamión Articulado (10 llantas en el tractocamión, 8 llantas en el semirremolque)'}, + {id: 'T3S3', value: '[T3S3] Tractocamión Articulado (10 llantas en el tractocamión, 12 llantas en el semirremolque)'}, + {id: 'T2S1R2', value: '[T2S1R2] Tractocamión Semirremolque-Remolque (6 llantas en el tractocamión, 4 llantas en el semirremolque y 8 llantas en el remolque)'}, + {id: 'T2S2R2', value: '[T2S2R2] Tractocamión Semirremolque-Remolque (6 llantas en el tractocamión, 8 llantas en el semirremolque y 8 llantas en el remolque)'}, + {id: 'T2S1R3', value: '[T2S1R3] Tractocamión Semirremolque-Remolque (6 llantas en el tractocamión, 4 llantas en el semirremolque y 12 llantas en el remolque)'}, + {id: 'T3S1R2', value: '[T3S1R2] Tractocamión Semirremolque-Remolque (10 llantas en el tractocamión, 4 llantas en el semirremolque y 8 llantas en el remolque)'}, + {id: 'T3S1R3', value: '[T3S1R3] Tractocamión Semirremolque-Remolque (10 llantas en el tractocamión, 4 llantas en el semirremolque y 12 llantas en el remolque)'}, + {id: 'T3S2R2', value: '[T3S2R2] Tractocamión Semirremolque-Remolque (10 llantas en el tractocamión, 8 llantas en el semirremolque y 8 llantas en el remolque)'}, + {id: 'T3S2R3', value: '[T3S2R3] Tractocamión Semirremolque-Remolque (10 llantas en el tractocamión, 8 llantas en el semirremolque y 12 llantas en el remolque)'}, + {id: 'T3S2R4', value: '[T3S2R4] Tractocamión Semirremolque-Remolque (10 llantas en el tractocamión, 8 llantas en el semirremolque y 16 llantas en el remolque)'}, + {id: 'T2S2S2', value: '[T2S2S2] Tractocamión Semirremolque-Semirremolque (6 llantas en el tractocamión, 8 llantas en el semirremolque delantero y 8 llantas en el semirremolque trasero)'}, + {id: 'T3S2S2', value: '[T3S2S2] Tractocamión Semirremolque-Semirremolque (10 llantas en el tractocamión, 8 llantas en el semirremolque delantero y 8 llantas en el semirremolque trasero)'}, + {id: 'T3S3S2', value: '[T3S3S2] Tractocamión Semirremolque-Semirremolque (10 llantas en el tractocamión, 12 llantas en el semirremolque delantero y 8 llantas en el semirremolque trasero)'}, + {id: 'OTROEVGP', value: '[OTROEVGP] Especializado de carga Voluminosa y/o Gran Peso'}, + {id: 'OTROSG', value: '[OTROSG] Servicio de Grúas'}, + {id: 'GPLUTA', value: '[GPLUTA] Grúa de Pluma Tipo A'}, + {id: 'GPLUTB', value: '[GPLUTB] Grúa de Pluma Tipo B'}, + {id: 'GPLUTC', value: '[GPLUTC] Grúa de Pluma Tipo C'}, + {id: 'GPLUTD', value: '[GPLUTD] Grúa de Pluma Tipo D'}, + {id: 'GPLATA', value: '[GPLATA] Grúa de Plataforma Tipo A'}, + {id: 'GPLATB', value: '[GPLATB] Grúa de Plataforma Tipo B'}, + {id: 'GPLATC', value: '[GPLATC] Grúa de Plataforma Tipo C'}, + {id: 'GPLATD', value: '[GPLATD] Grúa de Plataforma Tipo D'}, +] + + +var opt_carta_tipo_remolque = [ + {id: '', value: ''}, + {id: 'CTR001', value: '[CTR001] Caballete'}, + {id: 'CTR002', value: '[CTR002] Caja'}, + {id: 'CTR003', value: '[CTR003] Caja Abierta'}, + {id: 'CTR004', value: '[CTR004] Caja Cerrada'}, + {id: 'CTR005', value: '[CTR005] Caja De Recolección Con Cargador Frontal'}, + {id: 'CTR006', value: '[CTR006] Caja Refrigerada'}, + {id: 'CTR007', value: '[CTR007] Caja Seca'}, + {id: 'CTR008', value: '[CTR008] Caja Transferencia'}, + {id: 'CTR009', value: '[CTR009] Cama Baja o Cuello Ganso'}, + {id: 'CTR010', value: '[CTR010] Chasis Portacontenedor'}, + {id: 'CTR011', value: '[CTR011] Convencional De Chasis'}, + {id: 'CTR012', value: '[CTR012] Equipo Especial'}, + {id: 'CTR013', value: '[CTR013] Estacas'}, + {id: 'CTR014', value: '[CTR014] Góndola Madrina'}, + {id: 'CTR015', value: '[CTR015] Grúa Industrial'}, + {id: 'CTR016', value: '[CTR016] Grúa'}, + {id: 'CTR017', value: '[CTR017] Integral'}, + {id: 'CTR018', value: '[CTR018] Jaula'}, + {id: 'CTR019', value: '[CTR019] Media Redila'}, + {id: 'CTR020', value: '[CTR020] Pallet o Celdillas'}, + {id: 'CTR021', value: '[CTR021] Plataforma'}, + {id: 'CTR022', value: '[CTR022] Plataforma Con Grúa'}, + {id: 'CTR023', value: '[CTR023] Plataforma Encortinada'}, + {id: 'CTR024', value: '[CTR024] Redilas'}, + {id: 'CTR025', value: '[CTR025] Refrigerador'}, + {id: 'CTR026', value: '[CTR026] Revolvedora'}, + {id: 'CTR027', value: '[CTR027] Semicaja'}, + {id: 'CTR028', value: '[CTR028] Tanque'}, + {id: 'CTR029', value: '[CTR029] Tolva'}, + {id: 'CTR031', value: '[CTR031] Volteo'}, + {id: 'CTR032', value: '[CTR032] Volteo Desmontable'}, +] + + +var opt_carta_aseguradoras = [ + {id: 'General de Seguros', value: 'General de Seguros'}, + {id: 'Qualitas', value: 'Qualitas'}, ] @@ -949,7 +1022,7 @@ var grid_cols_carta_autotransporte = [ {id: 'ConfigVehicular', header: 'Clave Autotransporte', editor: 'select', options: opt_config_auto, fillspace: 1}, {id: 'PlacaVM', header: 'Placa', editor: 'text', fillspace: 1}, {id: 'AnioModeloVM', header: 'Modelo (Año)', editor: 'text', fillspace: 1}, - {id: 'SubTipoRem', header: 'ST Remolque', editor: 'text', fillspace: 1}, + {id: 'SubTipoRem', header: 'ST Remolque', editor: 'select', options: opt_carta_tipo_remolque, fillspace: 1}, {id: 'Placa', header: 'Placa', editor: 'text', fillspace: 1}, {id: 'AseguraRespCivil', header: 'Aseguradora', editor: 'text', fillspace: 1}, {id: 'PolizaRespCivil', header: 'Póliza', editor: 'text', fillspace: 1}, @@ -971,7 +1044,6 @@ var grid_cols_carta_tipos_figuras = [ {id: 'RFCFigura', header: 'RFC Figura', editor: 'text', fillspace: 1}, {id: 'NombreFigura', header: 'Nombre Figura', editor: 'text', fillspace: 1}, {id: 'NumLicencia', header: 'Número de Licencia', editor: 'text', fillspace: 1}, - ]