feat: create a correct reconciliation jar.
This commit is contained in:
parent
08deb9d4ec
commit
a3c8189d8c
@ -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,
|
||||||
|
@ -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):
|
||||||
|
@ -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'
|
||||||
|
@ -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"),
|
||||||
]
|
]
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user