diff --git a/source/app/models/db.py b/source/app/models/db.py index 07d83d7..bd11c19 100644 --- a/source/app/models/db.py +++ b/source/app/models/db.py @@ -320,6 +320,9 @@ class StorageEngine(object): return main.Productos.add(values) def invoice(self, values, user): + if 'opt' in values: + return main.Facturas.opt(values, user) + id = int(values.pop('id', '0')) if id: return main.Facturas.actualizar(values, id) diff --git a/source/app/models/main.py b/source/app/models/main.py index e4b54dd..0080671 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -4178,6 +4178,35 @@ class Facturas(BaseModel): return {'status': 'server'} + def _set_invoices_payed(self, ids, user): + ids = util.loads(ids) + ok_ids = [] + for id in ids: + with database_proxy.atomic() as txn: + obj = Facturas.get(Facturas.id==id) + obj.pagada = True + saldo = obj.saldo + obj.saldo = 0.00 + obj.save() + q = (Socios + .update(saldo_cliente=Socios.saldo_cliente - saldo) + .where(Socios.id==obj.cliente.id) + ) + q.execute() + ok_ids.append(id) + + if ok_ids: + return {'ok': True, 'rows': ok_ids} + + return {'ok': False} + + @classmethod + def opt(cls, args, user): + if args['opt'] == 'invoicepayed': + return cls._set_invoices_payed(cls, args['ids'], user) + + return {'ok': False} + class PreFacturas(BaseModel): cliente = ForeignKeyField(Socios) diff --git a/source/static/js/controller/bancos.js b/source/static/js/controller/bancos.js index 744e8d7..338e8ef 100644 --- a/source/static/js/controller/bancos.js +++ b/source/static/js/controller/bancos.js @@ -10,6 +10,7 @@ var bancos_controllers = { $$('cmd_guardar_retiro').attachEvent('onItemClick', cmd_guardar_retiro_click) $$('cmd_guardar_deposito').attachEvent('onItemClick', cmd_guardar_deposito_click) $$('cmd_cancelar_movimiento').attachEvent('onItemClick', cmd_cancelar_movimiento_click) + $$('cmd_invoice_payed').attachEvent('onItemClick', cmd_invoice_payed_click) $$('txt_retiro_importe').attachEvent('onChange', txt_retiro_importe_change) $$('txt_deposito_importe').attachEvent('onChange', txt_deposito_importe_change) $$('grid_cfdi_este_deposito').attachEvent('onAfterDrop', grid_cfdi_este_deposito_after_drop) @@ -604,4 +605,55 @@ function cmd_cancelar_movimiento_click(){ } } }) +} + + +function set_invoices_payed(rows){ + var ids = [] + + for(var row of rows){ + ids.push(row.id) + } + + webix.ajax().post('/invoices', {opt: 'invoicepayed', ids: ids}, { + error:function(text, data, XmlHttpRequest){ + msg = 'Ocurrio un error, consulta a soporte técnico' + msg_error(msg) + }, + success:function(text, data, XmlHttpRequest){ + var values = data.json() + if(values.ok){ + msg = 'Facturas marcadas pagadas correctamente' + $$('grid_cfdi_por_pagar').remove(values.rows) + msg_ok(msg) + }else{ + msg_error(values.msg) + } + } + }) +} + + +function cmd_invoice_payed_click(){ + var rows = $$('grid_cfdi_por_pagar').getSelectedItem(true) + if (rows.length == 0){ + msg_error('Selecciona al menos una factura por pagar') + return + } + + msg = '¿Estás seguro de marcar como pagadas las facturas seleccionadas?

' + msg += 'No se relacionarán con ningún depósito.

ESTA ACCIÓN NO SE PUEDE DESHACER' + webix.confirm({ + title: 'Facturas Pagadas', + ok: 'Si', + cancel: 'No', + type: 'confirm-error', + text: msg, + callback: function(result){ + if (result){ + set_invoices_payed(rows) + } + } + }) + } \ No newline at end of file diff --git a/source/static/js/ui/bancos.js b/source/static/js/ui/bancos.js index 5426d9e..a5856fa 100644 --- a/source/static/js/ui/bancos.js +++ b/source/static/js/ui/bancos.js @@ -99,6 +99,7 @@ var grid_cfdi_por_pagar = { view: 'datatable', id: 'grid_cfdi_por_pagar', select: 'row', + multiselect: true, autoConfig: false, adjust: true, height: 250, @@ -217,7 +218,11 @@ var controls_banco_deposito = [ name: 'deposito_descripcion', labelAlign: 'right', required: true, labelWidth: 125, height: 70}, ]}, - {view: 'label', label: 'Facturas por pagar: '}, + {cols: [ + {view: 'label', label: 'Facturas por pagar: '}, + {view: 'button', id: 'cmd_invoice_payed', label: 'Pagada directamente', + type: 'iconButton', autowidth: true, icon: 'check-circle'}, + ]}, grid_cfdi_por_pagar, {view: 'label', label: 'Facturas a pagar en este depósito: '}, grid_cfdi_este_deposito,