diff --git a/source/app/models/main.py b/source/app/models/main.py index 4546800..de7f418 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -1599,12 +1599,14 @@ class Facturas(BaseModel): else: f_ids = (Facturas.id > 0) + filters = (fy & fm & cliente & f_ids) if folios: - filters = (fy & fm & folios & cliente & f_ids) + filters = filters & folios elif uuid: - filters = (fy & fm & f_uuid & cliente & f_ids) - else: - filters = (fy & fm & cliente & f_ids) + filters = filters & f_uuid + + if values['anticipo'] == '1': + filters = filters & (Facturas.anticipo == True) rows = tuple(Facturas .select(Facturas.id, Facturas.serie, Facturas.folio, @@ -1770,6 +1772,7 @@ class Facturas(BaseModel): values['folio'] = cls._get_folio(cls, values['serie']) values['tipo_cambio'] = float(values['tipo_cambio']) values['lugar_expedicion'] = emisor.cp_expedicion or emisor.codigo_postal + values['anticipo'] = util.get_bool(values['anticipo']) with database_proxy.atomic() as txn: obj = Facturas.create(**values) diff --git a/source/static/js/controller/invoices.js b/source/static/js/controller/invoices.js index dea788e..127006e 100644 --- a/source/static/js/controller/invoices.js +++ b/source/static/js/controller/invoices.js @@ -3,6 +3,7 @@ var grid = null var msg = '' var result = false var tipo_relacion = '' +var anticipo = false function get_condicion_pago(){ @@ -244,6 +245,29 @@ function validate_invoice(values){ return false } + anticipo = $$('chk_cfdi_anticipo').getValue() + if(anticipo){ + var mp = $$('lst_metodo_pago').getValue() + if(mp != 'PUE'){ + msg = 'En anticipos, el método de pago debe ser: Pago en una sola exhibición' + msg_error(msg) + return false + } + + if(grid.count() != 1){ + msg = 'Los anticipos solo llevan un concepto' + msg_error(msg) + return false + } + + query = table_relaciones.chain().data() + if(query.length > 0){ + msg = 'Los anticipos no deben llevar CFDI relacionados' + msg_error(msg) + return false + } + } + return true } @@ -373,6 +397,7 @@ function guardar_y_timbrar(values){ data['regimen_fiscal'] = $$('lst_regimen_fiscal').getValue() data['relacionados'] = ids data['tipo_relacion'] = tipo_relacion + data['anticipo'] = anticipo if(!save_invoice(data)){ return @@ -380,6 +405,7 @@ function guardar_y_timbrar(values){ table_relaciones.clear() tipo_relacion = '' + anticipo = false $$('form_invoice').setValues({id_partner: 0, lbl_partner: 'Ninguno'}) $$('multi_invoices').setValue('invoices_home') @@ -404,6 +430,9 @@ function cmd_timbrar_click(id, e, node){ if(query.length > 0){ msg += 'La factura tiene CFDI relacionados

' } + if(anticipo){ + msg += 'La factura es Anticipo

' + } msg += '¿Estás seguro de timbrar esta factura?' webix.confirm({ @@ -1201,6 +1230,7 @@ function get_facturas_por_cliente(){ 'month': m, 'id_cliente': id, 'cfdis': ids, + 'anticipo': $$('chk_relacionados_anticipo').getValue(), 'folio': $$('filter_cfdi_folio').getValue(), 'uuid': $$('filter_cfdi_uuid').getValue(), 'opt': 'relacionados' @@ -1320,3 +1350,15 @@ function filter_cfdi_month_change(nv, ov){ cmd_filter_relacionados_click() } + +function lst_tipo_relacion_change(nv, ov){ + $$('chk_relacionados_anticipo').setValue(0) + $$('chk_relacionados_anticipo').disable() + if(nv=='07'){ + $$('chk_relacionados_anticipo').enable() + $$('chk_relacionados_anticipo').setValue(1) + cmd_filter_relacionados_click() + } + +} + diff --git a/source/static/js/ui/admin.js b/source/static/js/ui/admin.js index 758bba8..00d5a26 100644 --- a/source/static/js/ui/admin.js +++ b/source/static/js/ui/admin.js @@ -184,7 +184,7 @@ var emisor_cuentas_banco = [ {view: 'currency', type: 'text', id: 'emisor_cuenta_saldo_inicial', name: 'emisor_cuenta_saldo_inicial', label: 'Saldo inicial', required: true, invalidMessage: 'Captura un valor númerico', - inputAlign: 'right', value: 0}, + inputAlign: 'right', value: ''}, ]}, {minHeight: 10}, {cols: [{}, {view: 'button', id: 'cmd_emisor_agregar_cuenta', diff --git a/source/static/js/ui/invoices.js b/source/static/js/ui/invoices.js index fb2c11f..ac69e57 100644 --- a/source/static/js/ui/invoices.js +++ b/source/static/js/ui/invoices.js @@ -97,8 +97,11 @@ var body_cfdi_relacionados = {rows: [ {view: 'label', id: 'lbl_cfdi_title', label: 'Cliente: ', autowidth: true}, {view: 'label', id: 'lbl_cfdi_cliente', label: '', align: 'left'}]}, - {view: 'richselect', id: 'lst_tipo_relacion', label: 'Tipo de Relación', - labelWidth: 150, required: true, options: []}, + {cols: [ + {view: 'richselect', id: 'lst_tipo_relacion', label: 'Tipo de Relación', + labelWidth: 140, required: true, options: []}, + {view: 'checkbox', id: 'chk_relacionados_anticipo', + labelRight: 'Solo Anticipos', width: 200, disabled: true}]}, {minHeight: 10, maxHeight: 10}, {cols: [ {view: 'richselect', id: 'filter_cfdi_year', label: 'Año', width: 100, @@ -145,7 +148,8 @@ var ui_invoice = { $$('cmd_guardar_relacionados').attachEvent('onItemClick', cmd_guardar_relacionados_click) $$('cmd_limpiar_relacionados').attachEvent('onItemClick', cmd_limpiar_relacionados_click) $$('cmd_filter_relacionados').attachEvent('onItemClick', cmd_filter_relacionados_click) - $$('filter_cfdi_year').attachEvent('onChange', filter_cfdi_year_change) + $$('lst_tipo_relacion').attachEvent('onChange', lst_tipo_relacion_change) + $$('filter_cfdi_month').attachEvent('onChange', filter_cfdi_month_change) $$('filter_cfdi_month').attachEvent('onChange', filter_cfdi_month_change) }} @@ -175,6 +179,7 @@ var toolbar_invoices_util = [ var toolbar_invoices_generate = {view: 'toolbar', elements: [{}, {view: 'button', id: 'cmd_cfdi_relacionados', label: 'CFDI Relacionados', type: 'iconButton', autowidth: true, icon: 'file-o'}, + {view: 'checkbox', id: 'chk_cfdi_anticipo', label: 'Es Anticipo', width: 100}, ]}