diff --git a/source/app/controllers/cfdi_xml.py b/source/app/controllers/cfdi_xml.py index cdd2541..c0671a5 100644 --- a/source/app/controllers/cfdi_xml.py +++ b/source/app/controllers/cfdi_xml.py @@ -644,11 +644,12 @@ class CFDI(object): if self._comercio_exterior: prefix = SAT['comercioe']['prefix'] datos = datos.pop('comercioe') + emisor = datos.pop('emisor') - # ~ propietario = datos.pop('propietario') + propietarios = datos.pop('propietarios', {}) receptor = datos.pop('receptor') - # ~ destinatario = datos.pop('destinatario') - conceptos = datos.pop('mercancias') + destinatario = datos.pop('destinatario', {}) + mercancias = datos.pop('mercancias') attr = {'Version': SAT['comercioe']['version']} attr.update(datos) @@ -680,7 +681,7 @@ class CFDI(object): node = ET.SubElement(ce, '{}:Mercancias'.format(prefix)) fields = ('Marca', 'Modelo', 'SubModelo', 'NumeroSerie') - for row in conceptos: + for row in mercancias: detalle = {} for f in fields: if f in row: diff --git a/source/static/js/controller/invoices.js b/source/static/js/controller/invoices.js index f5eacc1..6bd7515 100644 --- a/source/static/js/controller/invoices.js +++ b/source/static/js/controller/invoices.js @@ -104,6 +104,7 @@ var invoices_controllers = { $$('cmd_carta_import_json').attachEvent('onItemClick', cmd_carta_import_json_click) $$('cmd_import_json_comercioe').attachEvent('onItemClick', cmd_import_json_comercioe_click) + $$('cmd_ce_import_ods').attachEvent('onItemClick', cmd_ce_import_ods_click) $$('cmd_ce_tipo_cambio').attachEvent('onItemClick', cmd_ce_tipo_cambio_click) $$('cmd_ce_add_propietario').attachEvent('onItemClick', cmd_ce_add_propietario_click) $$('cmd_ce_add_mercancia').attachEvent('onItemClick', cmd_ce_add_mercancia_click) @@ -581,6 +582,12 @@ function validate_invoice(values){ } } + //~ validate comercio exterior + var usar_comercioe = $$('chk_cfdi_usar_comercioe').getValue() + if(usar_comercioe){ + var values = _get_values_comercio_exterior() + } + return true } @@ -919,11 +926,6 @@ function cmd_timbrar_click(id, e, node){ if($$('chk_cfdi_usar_comercioe').getValue()){ msg += 'Estas usando el complemento:
Comercio Exterior

' - //~ if(values_comercioe === null){ - //~ msg = 'El complemento de Comercio Exterior esta vacío' - //~ msg_error(msg) - //~ return - //~ } } if(tipo_comprobante == 'T'){ @@ -3070,7 +3072,7 @@ function cmd_win_global_close_click(){ function cmd_ce_tipo_cambio_click(){ - window.open('https://www.banxico.org.mx/tipcamb/llenarTiposCambioAction.do?idioma=sp', '_blank') + window.open('https://www.banxico.org.mx/tipcamb/tipCamMIAction.do?idioma=sp', '_blank') } @@ -3100,3 +3102,142 @@ function grid_ce_mercancias_click(id, e, node){ } this.remove(id.row) } + + + +function _get_values_comercio_exterior(){ + var form = $$('form_comercio_exterior') + + if(!form.validate()) { + msg_error('Valores inválidos en Comercio Exterior') + return + } + + const controls = { + Exportacion: 'lst_ce_exportacion', + MotivoTraslado: 'lst_ce_motivo_traslado', + ClaveDePedimento: 'lst_ce_clave_pedimento', + CertificadoOrigen: 'lst_ce_certificado_origen', + NumCertificadoOrigen: 'txt_ce_numero_certificado', + NumeroExportadorConfiable: 'txt_ce_numero_exportador', + Incoterm: 'lst_ce_incoterm', + Observaciones: 'txt_ce_observaciones', + TipoCambioUSD: 'txt_ce_tipo_cambio_usd', + TotalUSD: 'txt_ce_total_usd', + }; + + var values = new Object() + + Object.keys(controls).forEach(key => { + var value = $$(controls[key]).getValue().trim() + if(value){ + values[key] = value + } + }); + + var propietarios = $$('grid_ce_propietarios').data.getRange() + propietarios.forEach(function(row, index){ + delete row['id'] + delete row['delete'] + }) + + var mercancias = $$('grid_ce_mercancias').data.getRange() + mercancias.forEach(function(row, index){ + delete row['id'] + delete row['delete'] + }) + + var emisor = $$('grid_ce_emisor').data.getRange()[0] + delete emisor['id'] + + var receptor = $$('grid_ce_receptor').data.getRange()[0] + delete receptor['id'] + + var destinatario = $$('grid_ce_destinatario').data.getRange()[0] + delete destinatario['id'] + + values['emisor'] = emisor + values['propietarios'] = propietarios + values['receptor'] = receptor + values['destinatario'] = destinatario + values['mercancias'] = mercancias + + return values +} + + +function cmd_ce_import_ods_click(){ + win_ce_import_ods.init() + $$('win_ce_import_ods').show() +} + + +function cmd_ce_upload_ods_click(){ + var form = $$('form_ce_import_ods') + + var values = form.getValues() + + if(!$$('lst_ce_up_template').count()){ + $$('win_ce_import_ods').close() + return + } + + if($$('lst_ce_up_template').count() > 1){ + msg = 'Selecciona solo un archivo' + msg_error(msg) + return + } + + var template = $$('ce_up_template').files.getItem($$('ce_up_template').files.getFirstId()) + + if(template.type.toLowerCase() != 'ods'){ + msg = 'Archivo inválido.\n\nSe requiere un archivo ODS' + msg_error(msg) + return + } + + msg = '¿Estás seguro de importar este archivo?' + webix.confirm({ + title: 'Importar datos de plantilla', + ok: 'Si', + cancel: 'No', + type: 'confirm-error', + text: msg, + callback:function(result){ + if(result){ + $$('ce_up_template').send() + } + } + }) +} + + +function ce_up_template_complete(response){ + if(response.status != 'server'){ + msg = 'Ocurrio un error al subir el archivo' + msg_error(msg) + return + } + msg = 'Archivo subido correctamente.\n\nComenzando importación.' + msg_ok(msg) + $$('win_ce_import_ods').close() + + webix.ajax().get('/values/importceods', { + error: function(text, data, xhr) { + msg_error('Error al consultar') + }, + success: function(text, data, xhr){ + var values = data.json() + if (values.ok){ + //~ set values + msg_ok('OK') + }else{ + webix.alert({ + title: 'Error al importar', + text: values.msg, + type: 'alert-error', + }) + } + } + }) +} \ No newline at end of file diff --git a/source/static/js/ui/invoices.js b/source/static/js/ui/invoices.js index 88942fa..790d277 100644 --- a/source/static/js/ui/invoices.js +++ b/source/static/js/ui/invoices.js @@ -1463,6 +1463,8 @@ var controls_comercio_exterior = [ {}, {view: 'button', id: 'cmd_import_json_comercioe', label: 'Importar JSON', icon: 'upload', type: 'iconButton', autowidth: true, align: 'center'}, + {view: 'button', id: 'cmd_ce_import_ods', label: 'Importar ODS', + icon: 'upload', type: 'iconButton', autowidth: true, align: 'center'}, {maxWidth: 15}]}, {view: 'fieldset', label: 'Datos generales', body: body_ce_datos_generales}, {view: 'fieldset', label: 'Emisor', body: body_ce_emisor}, @@ -1577,7 +1579,13 @@ var win_import_invoice = { width: 400, modal: true, position: 'center', - head: 'Importar Factura de Plantilla', + head: {view: 'toolbar', + elements: [ + {view: 'label', label: 'Importar Factura en Lote'}, + {view: 'icon', icon: 'times-circle', + click: '$$("win_import_invoice").close()'}, + ] + }, body: body_upload_invoice, }) $$('cmd_upload_invoice').attachEvent('onItemClick', cmd_upload_invoice_click) @@ -1726,3 +1734,41 @@ var win_global_information = { $$('cmd_win_global_close').attachEvent('onItemClick', cmd_win_global_close_click) } } + + +var body_win_ce_import_ods = {rows: [ + {view: 'form', id: 'form_ce_import_ods', rows: [ + {cols: [{}, + {view: 'uploader', id: 'ce_up_template', autosend: false, + link: 'lst_ce_up_template', value: 'Seleccionar Archivo', + upload: '/files/ceods'}, {}]}, + {cols: [ + {view: 'list', id: 'lst_ce_up_template', + type: 'uploader', autoheight: true, borderless: true}]}, + {cols: [{}, {view: 'button', id: 'cmd_ce_upload_ods', + label: 'Importar Plantilla'}, {}]}, + ]}, +]} + + +var win_ce_import_ods = { + init: function(){ + webix.ui({ + view: 'window', + id: 'win_ce_import_ods', + width: 400, + modal: true, + position: 'center', + head: {view: 'toolbar', + elements: [ + {view: 'label', label: 'Importar desde archivo ODS'}, + {view: 'icon', icon: 'times-circle', + click: '$$("win_ce_import_ods").close()'}, + ] + }, + body: body_win_ce_import_ods, + }) + $$('cmd_ce_upload_ods').attachEvent('onItemClick', cmd_ce_upload_ods_click) + $$('ce_up_template').attachEvent('onUploadComplete', ce_up_template_complete) + } +} \ No newline at end of file