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,