Modelar cuadre de caja #10 #12

Merged
mono merged 17 commits from modelar_cuadre_de_caja_#10 into main 2024-07-27 13:42:05 -05:00
5 changed files with 37 additions and 8 deletions
Showing only changes of commit a3c8189d8c - Show all commits

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)