From 58792961325dc2343d0774de7f8dd6701f559d21 Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 27 Jul 2024 12:37:31 -0500 Subject: [PATCH] fix: ReconciliationJar. --- tienda_ilusion/don_confiao/models.py | 24 ++++++++++++++++------ tienda_ilusion/don_confiao/test_billing.py | 13 +++++------- tienda_ilusion/don_confiao/views.py | 17 ++++++--------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index fb429ec..91d1199 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -2,6 +2,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError +from decimal import Decimal class Sale(models.Model): @@ -82,16 +83,27 @@ class ReconciliationJar(models.Model): cash_taken = models.DecimalField(max_digits=9, decimal_places=2) cash_discrepancy = models.DecimalField(max_digits=9, decimal_places=2) - def manual_clean(self): - payments_amount = sum([p.amount for p in self.payment_set.all()]) - reconciliation_ammount = sum([ + def clean(self): + if not self.is_valid: + payments = Payment.get_reconciliation_jar_summary().payments + else: + payments = self.payment_set.all() + + payments_amount = Decimal(sum([p.amount for p in payments])) + reconciliation_ammount = Decimal(sum([ self.cash_taken, self.cash_discrepancy, - ]) - if reconciliation_ammount != payments_amount: + ])) + + equal_ammounts = reconciliation_ammount.compare(payments_amount) == Decimal('0') + if not equal_ammounts: raise ValidationError( - {"cash_take": _("The taken ammount has discrepancy.")} + {"cash_taken": _("The taken ammount has discrepancy.")} ) + + def add_payments(self, payments): + for payment in payments: + self.payment_set.add(payment) self.is_valid = True class Payment(models.Model): diff --git a/tienda_ilusion/don_confiao/test_billing.py b/tienda_ilusion/don_confiao/test_billing.py index ae9f6b0..9b6372b 100644 --- a/tienda_ilusion/don_confiao/test_billing.py +++ b/tienda_ilusion/don_confiao/test_billing.py @@ -1,4 +1,4 @@ -from django.test import Client, TestCase +from django.test import TestCase from django.core.exceptions import ValidationError from .models import Payment, ReconciliationJar @@ -50,10 +50,10 @@ class TestBilling(TestCase): reconciliation_jar.cash_discrepancy = 0 reconciliation_jar.save() - for payment in jar_summary.payments: - reconciliation_jar.payment_set.add(payment) + reconciliation_jar.add_payments(jar_summary.payments) + with self.assertRaises(ValidationError): - reconciliation_jar.manual_clean() + reconciliation_jar.clean() def test_validate_reconciliation_jar_with_cash_float(self): cash_payment1, cash_payment2 = self._create_two_cash_payments() @@ -63,16 +63,13 @@ class TestBilling(TestCase): reconciliation_jar.date_time = '2024-07-13 13:02:00' reconciliation_jar.description = "test reconcialiation jar" reconciliation_jar.reconcilier = 'Jorge' - reconciliation_jar.cash_float = 10000 reconciliation_jar.cash_taken = jar_summary.total reconciliation_jar.cash_discrepancy = 0 reconciliation_jar.save() - for payment in jar_summary.payments: - reconciliation_jar.payment_set.add(payment) + reconciliation_jar.add_payments(jar_summary.payments) reconciliation_jar.clean() reconciliation_jar.save() - reconciliation_jar.manual_clean() self.assertTrue(reconciliation_jar.is_valid) def _create_two_cash_payments(self): diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index f981775..8d7222c 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -75,17 +75,12 @@ def reconciliate_jar(request): summary = Payment.get_reconciliation_jar_summary() if request.method == 'POST': form = ReconciliationJarForm(request.POST) - reconciliation = form.save() - try: - if form.is_valid(): - reconciliation.payment_set.set(summary.payments) - reconciliation.manual_clean() - form.save() - return HttpResponseRedirect('cuadres') - except Exception as e: - reconciliation.payment_set.set({}) - reconciliation.delete() - raise e + if form.is_valid(): + reconciliation = form.save() + reconciliation.add_payments(summary.payments) + reconciliation.clean() + reconciliation.save() + return HttpResponseRedirect('cuadres') else: form = ReconciliationJarForm() return render(