From a3c8189d8cdbd8d643f7c292681027cb5d56e13e Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 20 Jul 2024 11:44:49 -0500 Subject: [PATCH] feat: create a correct reconciliation jar. --- tienda_ilusion/don_confiao/models.py | 2 +- tienda_ilusion/don_confiao/test_billing.py | 3 ++- .../test_reconciliation_jar_client.py | 16 +++++++++++-- tienda_ilusion/don_confiao/urls.py | 1 + tienda_ilusion/don_confiao/views.py | 23 +++++++++++++++---- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index 2874dac..fb429ec 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -82,7 +82,7 @@ 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 clean(self): + def manual_clean(self): payments_amount = sum([p.amount for p in self.payment_set.all()]) reconciliation_ammount = sum([ self.cash_taken, diff --git a/tienda_ilusion/don_confiao/test_billing.py b/tienda_ilusion/don_confiao/test_billing.py index 49f8e97..ae9f6b0 100644 --- a/tienda_ilusion/don_confiao/test_billing.py +++ b/tienda_ilusion/don_confiao/test_billing.py @@ -53,7 +53,7 @@ class TestBilling(TestCase): for payment in jar_summary.payments: reconciliation_jar.payment_set.add(payment) with self.assertRaises(ValidationError): - reconciliation_jar.clean() + reconciliation_jar.manual_clean() def test_validate_reconciliation_jar_with_cash_float(self): cash_payment1, cash_payment2 = self._create_two_cash_payments() @@ -72,6 +72,7 @@ class TestBilling(TestCase): reconciliation_jar.payment_set.add(payment) 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/test_reconciliation_jar_client.py b/tienda_ilusion/don_confiao/test_reconciliation_jar_client.py index 04ce878..fa008d8 100644 --- a/tienda_ilusion/don_confiao/test_reconciliation_jar_client.py +++ b/tienda_ilusion/don_confiao/test_reconciliation_jar_client.py @@ -14,10 +14,23 @@ class TestReconciliationJarClient(TestCase): self._generate_two_cash_payments() response = self.client.get("/don_confiao/cuadrar_tarro") self.assertEqual(response.status_code, 200) - # raise Exception(response.content.decode('utf-8')) self.assertEqual(response.context["summary"].total, 160000) self.assertIn('160000', response.content.decode('utf-8')) + def test_create_reconciliation_jar(self): + self._generate_two_cash_payments() + response = self.client.post( + "/don_confiao/cuadrar_tarro", + { + "date_time": "2024-07-20T00:00", + "description": "Cuadre de prueba", + "reconcilier": "Jorge", + "cash_taken": "100000", + "cash_discrepancy": "60000", + } + ) + self.assertRedirects(response, '/don_confiao/cuadres') + def _generate_two_cash_payments(self): cash_payment1 = Payment() cash_payment1.date_time = '2024-07-07 12:00:00' @@ -25,7 +38,6 @@ class TestReconciliationJarClient(TestCase): cash_payment1.amount = 130000 cash_payment1.description = 'Saldo en compra' cash_payment1.save() - # raise Exception (cash_payment1.id) cash_payment2 = Payment() cash_payment2.date_time = '2024-07-07 13:05:00' diff --git a/tienda_ilusion/don_confiao/urls.py b/tienda_ilusion/don_confiao/urls.py index 10f9518..bdea574 100644 --- a/tienda_ilusion/don_confiao/urls.py +++ b/tienda_ilusion/don_confiao/urls.py @@ -10,4 +10,5 @@ urlpatterns = [ path("productos", views.products, name="products"), path("importar_productos", views.import_products, name="import_products"), path("cuadrar_tarro", views.reconciliate_jar, name="reconciliate_jar"), + path("cuadres", views.reconciliate_jar, name="reconciliations"), ] diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index 8d2b34e..f981775 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -1,6 +1,7 @@ from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.template import loader +from django.core.exceptions import ValidationError from .models import Sale, Product, ProductCategory, Payment from .forms import ImportProductsForm, PurchaseForm, LineaFormSet, ReconciliationJarForm @@ -71,17 +72,31 @@ def import_products(request): def reconciliate_jar(request): - if request.method == 'POST': - return HttpResponseRedirect("cuadres") - - form = ReconciliationJarForm() 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 + else: + form = ReconciliationJarForm() return render( request, "don_confiao/reconciliate_jar.html", {'summary': summary, 'form': form} ) +def reconciliations(request): + return HttpResponse('

Reconciliaciones

') + def _categories_from_csv_string(categories_string, separator="&"): categories = categories_string.split(separator)