diff --git a/tienda_ilusion/don_confiao/migrations/0035_reconciliationjar_total_cash_purchases.py b/tienda_ilusion/don_confiao/migrations/0035_reconciliationjar_total_cash_purchases.py new file mode 100644 index 0000000..55ba85f --- /dev/null +++ b/tienda_ilusion/don_confiao/migrations/0035_reconciliationjar_total_cash_purchases.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.6 on 2024-12-03 02:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('don_confiao', '0034_sale_reconciliation_alter_payment_type_payment_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='reconciliationjar', + name='total_cash_purchases', + field=models.DecimalField(decimal_places=2, default=0, max_digits=9), + preserve_default=False, + ), + ] diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index ada1cdc..c0b99ac 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -69,12 +69,23 @@ class ReconciliationJar(models.Model): reconcilier = models.CharField(max_length=255, null=False, blank=False) cash_taken = models.DecimalField(max_digits=9, decimal_places=2) cash_discrepancy = models.DecimalField(max_digits=9, decimal_places=2) + total_cash_purchases = models.DecimalField(max_digits=9, decimal_places=2) + + def clean(self): + self._validate_taken_ammount() def add_payments(self, payments): for payment in payments: self.payment_set.add(payment) self.is_valid = True + def _validate_taken_ammount(self): + ammount_cash = self.cash_taken + self.cash_discrepancy + if not self.total_cash_purchases == ammount_cash: + raise ValidationError( + {"cash_taken": _("The taken ammount has discrepancy.")} + ) + class Sale(models.Model): customer = models.ForeignKey(Customer, on_delete=models.PROTECT) diff --git a/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py b/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py index 19ad36d..9a743fc 100644 --- a/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py +++ b/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py @@ -1,4 +1,5 @@ from django.test import TestCase, Client +from django.core.exceptions import ValidationError from ..models import Sale, Product, SaleLine, Customer, ReconciliationJar import json @@ -101,9 +102,20 @@ class TestJarReconcliation(TestCase): self.assertNotIn(str(37*72500), rawContent) self.assertIn(str(47*72500), rawContent) + def test_don_create_reconcialiation_with_bad_numbers(self): + reconciliation = ReconciliationJar() + reconciliation.date_time = "2024-07-30" + reconciliation.total_cash_purchases = 145000 + reconciliation.cash_taken = 143000 + reconciliation.cash_discrepancy = 1000 + with self.assertRaises(ValidationError): + reconciliation.clean() + reconciliation.save() + def _create_simple_reconciliation(self): reconciliation = ReconciliationJar() reconciliation.date_time = "2024-07-30" + reconciliation.total_cash_purchases = 0 reconciliation.cash_taken = 0 reconciliation.cash_discrepancy = 0 reconciliation.clean()