diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index 71772d1..1c50852 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -37,6 +37,21 @@ class Product(models.Model): def __str__(self): return self.name + @classmethod + def to_list(cls): + products_list = [] + all_products = cls.objects.all() + for product in all_products: + rproduct = { + "id": product.id, + "name": product.name, + "price_list": product.price, + "uom": product.measuring_unit, + "categories": [c.name for c in product.categories.all()] + } + products_list.append(rproduct) + return products_list + class Sale(models.Model): customer = models.ForeignKey(Customer, on_delete=models.PROTECT) diff --git a/tienda_ilusion/don_confiao/static/js/add_line.js b/tienda_ilusion/don_confiao/static/js/add_line.js index 4f6bc25..ab448ff 100644 --- a/tienda_ilusion/don_confiao/static/js/add_line.js +++ b/tienda_ilusion/don_confiao/static/js/add_line.js @@ -25,5 +25,6 @@ document.addEventListener('DOMContentLoaded', function(){ formContainer.appendChild(newForm); totalForms.value = formCount + 1; + setPriceListeners(); }); }); diff --git a/tienda_ilusion/don_confiao/static/js/buy_general.js b/tienda_ilusion/don_confiao/static/js/buy_general.js new file mode 100644 index 0000000..db2a719 --- /dev/null +++ b/tienda_ilusion/don_confiao/static/js/buy_general.js @@ -0,0 +1,22 @@ +setPriceListeners(); + +function setPriceListeners() { + document.querySelectorAll('select[id^="id_saleline_set-"][id$="-product"]').forEach((input) => { + input.addEventListener('change', (e) => setLinePrice(e)); + }); +} + +function setLinePrice(e) { + let input = e.target; + const idLine = input.id.split('-')[1]; + const productId = input.value; + const priceInput = document.getElementById(`id_saleline_set-${idLine}-unit_price`); + + const product = listProducts.find((product) => product.id == productId); + if (product) { + priceInput.value = product.price_list; + } else { + priceInput.value = ''; + } +} + diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html b/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html index b6c8598..359ae76 100644 --- a/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html +++ b/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html @@ -1,6 +1,9 @@ {% extends 'don_confiao/base.html' %} {% block content %} {% load static %} +
@@ -12,12 +15,12 @@ {{ form.as_table }}
-
+
{% endfor %} -
- -
+
+ +

Resumen de Venta

@@ -25,9 +28,11 @@ {{ summary_form }}
- + + + diff --git a/tienda_ilusion/don_confiao/tests/test_buy_form.py b/tienda_ilusion/don_confiao/tests/test_buy_form.py new file mode 100644 index 0000000..5a61817 --- /dev/null +++ b/tienda_ilusion/don_confiao/tests/test_buy_form.py @@ -0,0 +1,22 @@ +from django.test import Client, TestCase +from ..models import Product + + +class TestBuyForm(TestCase): + def setUp(self): + self.client = Client() + self.product = Product() + self.product.name = "Arroz" + self.product.price = 5000 + self.product.save() + + def test_buy_contains_products_list(self): + response = self.client.get('/don_confiao/comprar') + self.assertIn( + self.product.name, + response.context['list_products'] + ) + content = response.content.decode('utf-8') + self.assertIn('5000', content) + self.assertIn('Arroz', content) + self.assertIn(str(self.product.id), content) diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index 63169c4..35b0e0d 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -8,8 +8,16 @@ from .forms import ImportProductsForm, PurchaseForm, SaleLineFormSet, Reconcilia import csv import io +import json +from decimal import Decimal +class DecimalEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Decimal): + return float(obj) + return json.JSONEncoder.default(self, obj) + def index(request): return render(request, 'don_confiao/index.html') @@ -47,6 +55,7 @@ def buy(request): 'sale_form': sale_form, 'linea_formset': line_formset, 'summary_form': sale_summary_form, + 'list_products': json.dumps(Product.to_list(), cls=DecimalEncoder), } ) @@ -60,18 +69,7 @@ def purchases(request): def products(request): - rproducts = [] - products = Product.objects.all() - for product in products: - rproduct = { - "name": product.name, - "price_list": product.price, - "uom": product.measuring_unit, - "categories": [c.name for c in product.categories.all()] - } - rproducts.append(rproduct) - - return JsonResponse(rproducts, safe=False) + return JsonResponse(Product.to_list(), safe=False) def import_products(request):