From 1ee3f81dcc9ceb5ca5a5b372b005d6f628664dfb Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Mon, 10 Sep 2018 00:00:52 -0500 Subject: [PATCH] Evitar cancelar movimiento con factura de pago --- CHANGELOG.md | 17 ++++++++++ VERSION | 2 +- source/app/controllers/main.py | 3 +- source/app/models/db.py | 7 ++-- source/app/models/main.py | 47 ++++++++++++++++++++++++--- source/app/settings.py | 2 +- source/static/js/controller/bancos.js | 39 +++++++++++++++++----- 7 files changed, 99 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78b6c07..593ccbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +v 1.13.0 [10-sep-2018] +---------------------- + - Plantilla para factura de pago + - Cancelar factura de pago + +* IMPORTANTE: Es necesario realizar una migración, despues de actualizar la rama principal. + +``` +git pull origin master + +cd source/app/models + +python main.py -bk + +python main.py -m +``` + v 1.12.0 [31-ago-2018] ---------------------- - Soporte para facturas (complemento) de pago. diff --git a/VERSION b/VERSION index 0eed1a2..feaae22 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.12.0 +1.13.0 diff --git a/source/app/controllers/main.py b/source/app/controllers/main.py index 435341b..f677d14 100644 --- a/source/app/controllers/main.py +++ b/source/app/controllers/main.py @@ -420,7 +420,8 @@ class AppMovimientosBanco(object): def on_post(self, req, resp): values = req.params - req.context['result'] = self._db.add_movbanco(values) + # ~ req.context['result'] = self._db.add_movbanco(values) + req.context['result'] = self._db.bankmovement(values) resp.status = falcon.HTTP_200 def on_delete(self, req, resp): diff --git a/source/app/models/db.py b/source/app/models/db.py index 9faffbf..c9e7671 100644 --- a/source/app/models/db.py +++ b/source/app/models/db.py @@ -389,8 +389,8 @@ class StorageEngine(object): def cuentasbanco(self, values): return main.CuentasBanco.add(values) - def add_movbanco(self, values): - return main.MovimientosBanco.add(values) + # ~ def add_movbanco(self, values): + # ~ return main.MovimientosBanco.add(values) def get_cuentasbanco(self, values): return main.CuentasBanco.get_(values) @@ -422,3 +422,6 @@ class StorageEngine(object): def cfdipay(self, values): return main.CfdiPagos.post(values) + + def bankmovement(self, values): + return main.MovimientosBanco.post(values) diff --git a/source/app/models/main.py b/source/app/models/main.py index 34bdcf5..088c4e2 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -1856,7 +1856,11 @@ class MovimientosBanco(BaseModel): return saldo @classmethod - def add(cls, values): + def post(cls, values): + opt = values.pop('opt') + return getattr(cls, '_{}'.format(opt))(cls, values) + + def _add(self, values): ids = values.pop('ids', '') if ids and not Facturas.validate_count_partners(util.loads(ids)): @@ -1876,8 +1880,8 @@ class MovimientosBanco(BaseModel): values['deposito'] = util.get_float(values['deposito']) values['forma_pago'] = int(values['forma_pago']) - ultimo_saldo = cls._ultimo_saldo( - cls, values['cuenta'], values['fecha']) + ultimo_saldo = self._ultimo_saldo( + self, values['cuenta'], values['fecha']) values['saldo'] = \ ultimo_saldo - values['retiro'] + values['deposito'] @@ -1889,12 +1893,47 @@ class MovimientosBanco(BaseModel): return {'ok': False, 'msg': msg} if actualizar: - saldo = cls._actualizar_saldos(cls, obj) + saldo = self._actualizar_saldos(self, obj) if ids: FacturasPagos.add(obj, util.loads(ids)) return {'ok': True, 'saldo': saldo} + def _cancel(self, values): + id = int(values['id']) + try: + obj = MovimientosBanco.get(MovimientosBanco.id==id) + except MovimientosBanco.DoesNotExist: + msg = 'No se encontró el movimiento' + return {'ok': False, 'msg': msg} + + if obj.cancelado: + msg = 'El movimiento ya esta cancelado' + return {'ok': False, 'msg': msg} + + if obj.conciliado: + msg = 'El movimiento esta conciliado, no se puede cancelar' + return {'ok': False, 'msg': msg} + + filters = (CfdiPagos.movimiento==obj) + cp = CfdiPagos.select().where(filters).count() + if cp > 0: + msg = 'El movimiento tiene Factura de Pago, no se puede cancelar' + return {'ok': False, 'msg': msg} + + with database_proxy.transaction(): + obj.cancelado = True + obj.save() + FacturasPagos.cancelar(obj) + + obj = self._movimiento_anterior(self, obj.cuenta, obj.fecha) + self._actualizar_saldos(self, obj) + + balance = CuentasBanco.get_saldo(obj.cuenta.id) + + msg = 'Movimiento cancelado correctamente' + return {'ok': False, 'msg': msg, 'balance': balance} + @classmethod def remove(cls, id): try: diff --git a/source/app/settings.py b/source/app/settings.py index 0c1d15c..dbd9b26 100644 --- a/source/app/settings.py +++ b/source/app/settings.py @@ -47,7 +47,7 @@ except ImportError: DEBUG = DEBUG -VERSION = '1.12.0' +VERSION = '1.13.0' EMAIL_SUPPORT = ('soporte@empresalibre.net',) TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION) diff --git a/source/static/js/controller/bancos.js b/source/static/js/controller/bancos.js index a460135..547d6eb 100644 --- a/source/static/js/controller/bancos.js +++ b/source/static/js/controller/bancos.js @@ -282,6 +282,7 @@ function guardar_retiro(values){ var importe = get_float(values.retiro_importe) var data = new Object() + data['opt'] = 'add' data['cuenta'] = $$('lst_cuentas_banco').getValue() data['fecha'] = values.retiro_fecha data['hora'] = $$('time_retiro').getText() @@ -519,6 +520,7 @@ function guardar_deposito(values){ var grid = $$('grid_cfdi_este_deposito') var data = new Object() + data['opt'] = 'add' data['cuenta'] = $$('lst_cuentas_banco').getValue() data['fecha'] = values.deposito_fecha data['hora'] = $$('time_deposito').getText() @@ -610,17 +612,36 @@ function cmd_guardar_deposito_click(){ function cancelar_movimiento(id){ - var grid = $$('grid_cuentabanco') + //~ var grid = $$('grid_cuentabanco') - webix.ajax().del('/movbanco', {id: id}, function(text, xml, xhr){ - if(xhr.status == 200){ - get_estado_cuenta() - get_saldo_cuenta() - msg_ok('Movimiento cancelado correctamente') - }else{ - msg_error('No se pudo eliminar') + //~ webix.ajax().del('/movbanco', {id: id}, function(text, xml, xhr){ + //~ if(xhr.status == 200){ + //~ get_estado_cuenta() + //~ get_saldo_cuenta() + //~ msg_ok('Movimiento cancelado correctamente') + //~ }else{ + //~ msg_error('No se pudo eliminar') + //~ } + //~ }) + + var data = {'opt': 'cancel', 'id': id} + webix.ajax().post('/movbanco', data, { + 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){ + get_estado_cuenta() + $$('txt_cuenta_saldo').setValue(values.balance) + msg_ok(values.msg) + }else{ + msg_error(values.msg) + } } }) + } @@ -871,7 +892,7 @@ function save_cfdi_pay(form){ function cmd_pay_stamp_click(){ var form = $$('form_bank_pay') var title = 'Timbrar Factura de Pago' - msg = '¿Estás seguro de enviar a timbrar este pago?' + msg = '¿Estás seguro de enviar a timbrar este pago?

EL MOVIMIENTO YA NO PODRÁ SER MODIFICADO' if (!validate_cfdi_pay(form)){ return