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_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,

View File

@ -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):

View File

@ -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'

View File

@ -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"),
]

View File

@ -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('<h1>Reconciliaciones</h1>')
def _categories_from_csv_string(categories_string, separator="&"):
categories = categories_string.split(separator)