#69 feat(ReconciliationJar): Add total_cash_purchases field.
This commit is contained in:
		@@ -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,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
@@ -69,12 +69,23 @@ class ReconciliationJar(models.Model):
 | 
				
			|||||||
    reconcilier = models.CharField(max_length=255, null=False, blank=False)
 | 
					    reconcilier = models.CharField(max_length=255, null=False, blank=False)
 | 
				
			||||||
    cash_taken = models.DecimalField(max_digits=9, decimal_places=2)
 | 
					    cash_taken = models.DecimalField(max_digits=9, decimal_places=2)
 | 
				
			||||||
    cash_discrepancy = 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):
 | 
					    def add_payments(self, payments):
 | 
				
			||||||
        for payment in payments:
 | 
					        for payment in payments:
 | 
				
			||||||
            self.payment_set.add(payment)
 | 
					            self.payment_set.add(payment)
 | 
				
			||||||
        self.is_valid = True
 | 
					        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):
 | 
					class Sale(models.Model):
 | 
				
			||||||
    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
 | 
					    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
from django.test import TestCase, Client
 | 
					from django.test import TestCase, Client
 | 
				
			||||||
 | 
					from django.core.exceptions import ValidationError
 | 
				
			||||||
from ..models import Sale, Product, SaleLine, Customer, ReconciliationJar
 | 
					from ..models import Sale, Product, SaleLine, Customer, ReconciliationJar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
@@ -101,9 +102,20 @@ class TestJarReconcliation(TestCase):
 | 
				
			|||||||
        self.assertNotIn(str(37*72500), rawContent)
 | 
					        self.assertNotIn(str(37*72500), rawContent)
 | 
				
			||||||
        self.assertIn(str(47*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):
 | 
					    def _create_simple_reconciliation(self):
 | 
				
			||||||
        reconciliation = ReconciliationJar()
 | 
					        reconciliation = ReconciliationJar()
 | 
				
			||||||
        reconciliation.date_time = "2024-07-30"
 | 
					        reconciliation.date_time = "2024-07-30"
 | 
				
			||||||
 | 
					        reconciliation.total_cash_purchases = 0
 | 
				
			||||||
        reconciliation.cash_taken = 0
 | 
					        reconciliation.cash_taken = 0
 | 
				
			||||||
        reconciliation.cash_discrepancy = 0
 | 
					        reconciliation.cash_discrepancy = 0
 | 
				
			||||||
        reconciliation.clean()
 | 
					        reconciliation.clean()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user