From f1d47d1119f73fa1e323139d207bffb438c61fda Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Wed, 29 Nov 2017 15:21:51 -0600 Subject: [PATCH] Agregar deposito con facturas relacionadas --- source/app/models/main.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/source/app/models/main.py b/source/app/models/main.py index fb6720c..74ec1e5 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -3220,6 +3220,7 @@ class FacturasPagos(BaseModel): auto_round=True) saldo = DecimalField(default=0.0, max_digits=18, decimal_places=6, auto_round=True) + cancelado = BooleanField(default=False) class Meta: order_by = ('factura',) @@ -3227,10 +3228,46 @@ class FacturasPagos(BaseModel): (('factura', 'numero'), True), ) + def _movimiento_anterior(self, mov, id): + try: + query = (FacturasPagos + .select() + .where( + (FacturasPagos.movimiento==mov) & + (FacturasPagos.factura==id) & + (FacturasPagos.cancelado==False))[-1] + ) + return query + except IndexError: + return None + + def _actualizar_saldo_cliente(self, cliente, importe): + q = (Socios + .update(saldo_cliente=Socios.saldo_cliente - importe) + .where(Socios.id==cliente.id) + ) + return bool(q.execute()) + + @classmethod def add(cls, mov, ids): - print (mov) print (ids) + for i, importe in ids.items(): + fac = Facturas.get(Facturas.id==int(i)) + mov_ant = cls._movimiento_anterior(cls, mov, fac) + nuevo = {'movimiento': mov, 'factura': fac, 'importe': importe} + if mov_ant is None: + nuevo['saldo_anterior'] = float(fac.saldo) + else: + nuevo['numero'] = mov_ant.numero + 1 + nuevo['saldo_anterior'] = float(mov_ant.saldo) + nuevo['saldo'] = nuevo['saldo_anterior'] - importe + FacturasPagos.create(**nuevo) + fac.saldo = nuevo['saldo'] + if nuevo['saldo'] == 0: + fac.pagada = True + fac.save() + cls._actualizar_saldo_cliente(cls, fac.cliente, importe) return