feat: create a correct reconciliation jar.

This commit is contained in:
Mono Mono 2024-07-20 11:44:49 -05:00
parent 08deb9d4ec
commit a3c8189d8c
5 changed files with 37 additions and 8 deletions

View File

@ -82,7 +82,7 @@ class ReconciliationJar(models.Model):
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)
def clean(self): def manual_clean(self):
payments_amount = sum([p.amount for p in self.payment_set.all()]) payments_amount = sum([p.amount for p in self.payment_set.all()])
reconciliation_ammount = sum([ reconciliation_ammount = sum([
self.cash_taken, self.cash_taken,

View File

@ -53,7 +53,7 @@ class TestBilling(TestCase):
for payment in jar_summary.payments: for payment in jar_summary.payments:
reconciliation_jar.payment_set.add(payment) reconciliation_jar.payment_set.add(payment)
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
reconciliation_jar.clean() reconciliation_jar.manual_clean()
def test_validate_reconciliation_jar_with_cash_float(self): def test_validate_reconciliation_jar_with_cash_float(self):
cash_payment1, cash_payment2 = self._create_two_cash_payments() cash_payment1, cash_payment2 = self._create_two_cash_payments()
@ -72,6 +72,7 @@ class TestBilling(TestCase):
reconciliation_jar.payment_set.add(payment) reconciliation_jar.payment_set.add(payment)
reconciliation_jar.clean() reconciliation_jar.clean()
reconciliation_jar.save() reconciliation_jar.save()
reconciliation_jar.manual_clean()
self.assertTrue(reconciliation_jar.is_valid) self.assertTrue(reconciliation_jar.is_valid)
def _create_two_cash_payments(self): def _create_two_cash_payments(self):

View File

@ -14,10 +14,23 @@ class TestReconciliationJarClient(TestCase):
self._generate_two_cash_payments() self._generate_two_cash_payments()
response = self.client.get("/don_confiao/cuadrar_tarro") response = self.client.get("/don_confiao/cuadrar_tarro")
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
# raise Exception(response.content.decode('utf-8'))
self.assertEqual(response.context["summary"].total, 160000) self.assertEqual(response.context["summary"].total, 160000)
self.assertIn('160000', response.content.decode('utf-8')) 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): def _generate_two_cash_payments(self):
cash_payment1 = Payment() cash_payment1 = Payment()
cash_payment1.date_time = '2024-07-07 12:00:00' cash_payment1.date_time = '2024-07-07 12:00:00'
@ -25,7 +38,6 @@ class TestReconciliationJarClient(TestCase):
cash_payment1.amount = 130000 cash_payment1.amount = 130000
cash_payment1.description = 'Saldo en compra' cash_payment1.description = 'Saldo en compra'
cash_payment1.save() cash_payment1.save()
# raise Exception (cash_payment1.id)
cash_payment2 = Payment() cash_payment2 = Payment()
cash_payment2.date_time = '2024-07-07 13:05:00' cash_payment2.date_time = '2024-07-07 13:05:00'

View File

@ -10,4 +10,5 @@ urlpatterns = [
path("productos", views.products, name="products"), path("productos", views.products, name="products"),
path("importar_productos", views.import_products, name="import_products"), path("importar_productos", views.import_products, name="import_products"),
path("cuadrar_tarro", views.reconciliate_jar, name="reconciliate_jar"), path("cuadrar_tarro", views.reconciliate_jar, name="reconciliate_jar"),
path("cuadres", views.reconciliate_jar, name="reconciliations"),
] ]

View File

@ -1,6 +1,7 @@
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.template import loader from django.template import loader
from django.core.exceptions import ValidationError
from .models import Sale, Product, ProductCategory, Payment from .models import Sale, Product, ProductCategory, Payment
from .forms import ImportProductsForm, PurchaseForm, LineaFormSet, ReconciliationJarForm from .forms import ImportProductsForm, PurchaseForm, LineaFormSet, ReconciliationJarForm
@ -71,17 +72,31 @@ def import_products(request):
def reconciliate_jar(request): def reconciliate_jar(request):
if request.method == 'POST':
return HttpResponseRedirect("cuadres")
form = ReconciliationJarForm()
summary = Payment.get_reconciliation_jar_summary() 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( return render(
request, request,
"don_confiao/reconciliate_jar.html", "don_confiao/reconciliate_jar.html",
{'summary': summary, 'form': form} {'summary': summary, 'form': form}
) )
def reconciliations(request):
return HttpResponse('<h1>Reconciliaciones</h1>')
def _categories_from_csv_string(categories_string, separator="&"): def _categories_from_csv_string(categories_string, separator="&"):
categories = categories_string.split(separator) categories = categories_string.split(separator)