view: calculando resumen de compra.

This commit is contained in:
Mono Mono 2024-07-27 17:12:52 -05:00
parent 599b62771c
commit b4b6144611
5 changed files with 77 additions and 5 deletions

View File

@ -34,6 +34,10 @@ class PurchaseLineForm(forms.ModelForm):
"description", "description",
] ]
class PurchaseSummaryForm(forms.Form):
quantity_lines = forms.IntegerField()
quantity_products = forms.IntegerField()
ammount = forms.DecimalField(max_digits=10, decimal_places=2)
LineaFormSet = inlineformset_factory( LineaFormSet = inlineformset_factory(
Sale, Sale,
@ -42,7 +46,6 @@ LineaFormSet = inlineformset_factory(
fields='__all__' fields='__all__'
) )
class ReconciliationJarForm(forms.ModelForm): class ReconciliationJarForm(forms.ModelForm):
class Meta: class Meta:
model = ReconciliationJar model = ReconciliationJar

View File

@ -0,0 +1,33 @@
const complete_form = document.getElementById('complete_form_purchase')
const quantityLines = document.getElementById('id_quantity_lines');
const quantityProducts = document.getElementById('id_quantity_products');
const ammountInput = document.getElementById('id_ammount');
const idPrefix = 'id_saleline_set-';
complete_form.addEventListener('change', function(event){
if (event.target.matches('[id^="${idPrefix}"][id$="-quantity"]')) {
calculateSummary();
}
if (event.target.matches('[id^="id_saleline_set-"][id$="-unit_price"]')) {
calculateSummary();
}
});
function calculateSummary() {
let quantity = 0;
let ammount = 0;
const quantityInputs = document.querySelectorAll('[id^="id_saleline_set-"][id$="-quantity"]');
const ids = Array.prototype.map.call(quantityInputs, function(input) {
return input.id.match(/\d+/)[0];
});
ids.forEach(function(id) {
let lineQuantity = document.getElementById(`id_saleline_set-${id}-quantity`)
let linePrice = document.getElementById(`id_saleline_set-${id}-unit_price`)
quantity += parseFloat(lineQuantity.value);
ammount += parseFloat(linePrice.value) * parseFloat(lineQuantity.value);
});
quantityProducts.value = quantity;
quantityLines.value = quantityInputs.length;
ammountInput.value = ammount;
}

View File

@ -1,6 +1,6 @@
<!doctype html> <!doctype html>
{% load static %} {% load static %}
<form method="POST"> <form id="complete_form_purchase" method="POST">
{% csrf_token %} {% csrf_token %}
{{ sale_form }} {{ sale_form }}
{{ linea_formset.management_form }} {{ linea_formset.management_form }}
@ -13,7 +13,9 @@
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
{{ summary_form }}
<button id="add_line" type="button" onclick="add_line">Añadir Linea</button> <button id="add_line" type="button" onclick="add_line">Añadir Linea</button>
<br/><button name="form" type="submit" >Comprar</button> <br/><button name="form" type="submit" >Comprar</button>
<script src="{% static 'js/add_line.js' %}"></script> <script src="{% static 'js/add_line.js' %}"></script>
<script src="{% static 'js/sale_summary.js' %}"></script>
</form> </form>

View File

@ -0,0 +1,32 @@
from django.test import Client, TestCase
from ..models import Payment, Sale
class TestPurchaseWithPayment(TestCase):
def setUp(self):
self.client = Client()
def test_generate_payment_when_it_has_payment(self):
response = self.client.post(
'/don_confiao/comprar',
{
"customer": "Noelba Lopez",
"date": "2024-07-27",
"phone": "3010101000",
"description": "Venta de contado",
"saleline_set-TOTAL_FORMS": "1",
"saleline_set-INITIAL_FORMS": "0",
"saleline_set-MIN_NUM_FORMS": "0",
"saleline_set-MAX_NUM_FORMS": "1000",
"saleline_set-0-product": "Papayita",
"saleline_set-0-quantity": "2",
"saleline_set-0-unit_price": "22030",
"saleline_set-0-description": "Linea de Venta",
"saleline_set-0-sale": "",
"saleline_set-0-id": "",
}
)
purchases = Sale.objects.all()
self.assertEqual(1, len(purchases))
# payments = Payment.objects.all()
# self.assertEqual(1, len(payments))

View File

@ -5,7 +5,7 @@ from django.core.exceptions import ValidationError
from django.views.generic import ListView from django.views.generic import ListView
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, PurchaseSummaryForm
import csv import csv
import io import io
@ -29,12 +29,14 @@ def buy(request):
else: else:
sale_form = PurchaseForm() sale_form = PurchaseForm()
sale_linea_form = LineaFormSet() sale_linea_form = LineaFormSet()
sale_summary_form = PurchaseSummaryForm()
return render( return render(
request, request,
'don_confiao/purchase.html', 'don_confiao/purchase.html',
{ {
'sale_form': sale_form, 'sale_form': sale_form,
'linea_formset': sale_linea_form 'linea_formset': sale_linea_form,
'summary_form': sale_summary_form,
} }
) )