From b134b88791dbe30ef8db778782f26dbec1093b85 Mon Sep 17 00:00:00 2001 From: Mono Mono <monomono@disroot.org> Date: Sat, 2 Nov 2024 13:54:09 -0500 Subject: [PATCH] summary purchase: generate draft. --- .../src/components/SummaryPurchase.vue | 67 +++++++++++++------ .../tests/test_summary_view_purchase.py | 18 +++-- tienda_ilusion/don_confiao/views.py | 9 +-- 3 files changed, 65 insertions(+), 29 deletions(-) diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue index dbdbfa5..5111c64 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue +++ b/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue @@ -13,17 +13,39 @@ <v-list-item> <v-list-item-content> <v-list-item-title>Cliente:</v-list-item-title> - <v-list-item-subtitle>{{ purchase.customer }}</v-list-item-subtitle> - </v-list-item-content> - </v-list-item> - <v-list-item> - <v-list-item-content> - <v-list-item-title>Productos:</v-list-item-title> - <v-list-item-subtitle>{{ purchase.saleline_set }}</v-list-item-subtitle> + <v-list-item-subtitle v-if="purchase.customer">{{ purchase.customer.name }}</v-list-item-subtitle> </v-list-item-content> </v-list-item> + <v-list> + <v-list-item v-for="(line, index) in purchase.set_lines" :key="index"> + <v-list-item-content> + <v-list-item-title>Producto:</v-list-item-title> + <v-list-item-subtitle> + <v-row> + <v-col >Nombre:</v-col> + <v-col >{{ line.product.name }}</v-col> + <v-col >Precio:</v-col> + <v-col >{{ currencyFormat(line.unit_price) }}</v-col> + <v-col >Cantidad:</v-col> + <v-col >{{ line.quantity }}</v-col> + <v-col >Cantidad:</v-col> + <v-col >{{ line.quantity }}</v-col> + <v-col >Subtotal:</v-col> + <v-col >{{ currencyFormat(calculateSubtotal(line.price, line.quantity)) }}</v-col> + </v-row> + </v-list-item-subtitle> + </v-list-item-content> + </v-list-item> + </v-list> + <v-list> + <v-list-item> + <v-list-item-content> + <v-list-item-title>Total:</v-list-item-title> + <v-list-item-subtitle v-if="purchase.set_lines">{{ currencyFormat(calculateTotal(purchase.set_lines)) }}</v-list-item-subtitle> + </v-list-item-content> + </v-list-item> + </v-list> </v-list> - </v-container> </template> <script> @@ -35,9 +57,6 @@ data () { return { purchase: {}, - customer: {}, - lines: [], - products: [] }; }, created() { @@ -45,8 +64,7 @@ }, methods: { fetchPurchase(purchaseId) { - let baseUrl = '/don_confiao/api'; - fetch(`${baseUrl}/sales/${purchaseId}`) + fetch(`/don_confiao/resumen_compra_json/${purchaseId}`) .then(response => response.json()) .then(data => { this.purchase = data; @@ -54,15 +72,22 @@ .catch(error => { console.error(error); }); - /* fetch(`${baseUrl}/customers/${this.purchase.customer}`) - * .then(response => response.json()) - * .then(data => { - * this.purchase = data; - * }) - * .catch(error => { - * console.error(error); - * }); */ }, + currencyFormat(value) { + return new Intl.NumberFormat('es-CO', { style: 'currency', currency: 'COP' }).format(value); + }, + calculateSubtotal(price, quantity) { + price = parseFloat(price || 0); + quantity = parseFloat(price || 0); + return price * quantity; + }, + calculateTotal(lines) { + let total = 0; + lines.forEach(line => { + total += this.calculateSubtotal(line.price, line.quantity); + }); + return total; + } }, }; </script> diff --git a/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py b/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py index d89b590..a68a438 100644 --- a/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py +++ b/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py @@ -1,6 +1,7 @@ from django.test import TestCase, Client from ..models import Sale, Product, SaleLine, Customer + class TestSummaryViewPurchase(TestCase): def setUp(self): customer = Customer() @@ -22,20 +23,29 @@ class TestSummaryViewPurchase(TestCase): line = SaleLine() line.sale = purchase line.product = product - line.quantity = "2" + line.quantity = "11" line.unit_price = "72500" line.save() self.purchase = purchase def test_summary_has_customer(self): - response = self.client.get("/don_confiao/resumen_compra/" + str(self.purchase.id)) + url = "/don_confiao/resumen_compra/" + str(self.purchase.id) + response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertEqual(response.context["purchase"].customer, self.purchase.customer) + self.assertEqual( + response.context["purchase"].customer, + self.purchase.customer + ) self.assertIn('Alejo Mono', response.content.decode('utf-8')) def test_json_summary(self): - response = self.client.get(f"/don_confiao/resumen_compra_json/{self.purchase.id}") + url = f"/don_confiao/resumen_compra_json/{self.purchase.id}" + response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertIn('Alejo Mono', response.content.decode('utf-8')) self.assertIn('cafe', response.content.decode('utf-8')) self.assertIn('72500', response.content.decode('utf-8')) + self.assertIn('quantity', response.content.decode('utf-8')) + self.assertIn('11', response.content.decode('utf-8')) + self.assertIn('date', response.content.decode('utf-8')) + self.assertIn(self.purchase.date, response.content.decode('utf-8')) diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index 132f978..fda488e 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -137,13 +137,14 @@ def purchase_json_summary(request, id): 'product': { 'id': line.product.id, 'name': line.product.name, - 'quantity': line.quantity, - 'unit_price': line.unit_price, - 'description': line.description, - } + }, + 'quantity': line.quantity, + 'unit_price': line.unit_price, + 'description': line.description, }) to_response = { 'id': purchase.id, + 'date': purchase.date, 'customer': { 'id': purchase.customer.id, 'name': purchase.customer.name,