diff --git a/tienda_ilusion/don_confiao/forms.py b/tienda_ilusion/don_confiao/forms.py index 4db321a..0563fa8 100644 --- a/tienda_ilusion/don_confiao/forms.py +++ b/tienda_ilusion/don_confiao/forms.py @@ -7,6 +7,7 @@ from .models import Sale, SaleLine class ImportProductsForm(forms.Form): csv_file = forms.FileField() + class PurchaseForm(forms.ModelForm): class Meta: model = Sale @@ -20,6 +21,7 @@ class PurchaseForm(forms.ModelForm): 'date': DateInput(attrs={'type': 'date'}) } + class PurchaseLineForm(forms.ModelForm): class Meta: model = SaleLine diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index 7d7ee0a..a3c2432 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -1,6 +1,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ + class Sale(models.Model): customer = models.CharField(max_length=100) @@ -23,15 +24,18 @@ class SaleLine(models.Model): def __str__(self): return f"{self.sale} - {self.product}" + class MeasuringUnits(models.TextChoices): UNIT = 'UNIT', _('Unit') + class ProductCategory(models.Model): name = models.CharField(max_length=100, unique=True) def __str__(self): return self.name + class Product(models.Model): name = models.CharField(max_length=100, unique=True) price = models.DecimalField(max_digits=9, decimal_places=2) diff --git a/tienda_ilusion/don_confiao/tests/__init__.py b/tienda_ilusion/don_confiao/tests/__init__.py new file mode 100644 index 0000000..e5a0d9b --- /dev/null +++ b/tienda_ilusion/don_confiao/tests/__init__.py @@ -0,0 +1 @@ +#!/usr/bin/env python3 diff --git a/tienda_ilusion/don_confiao/test_products.py b/tienda_ilusion/don_confiao/tests/test_products.py similarity index 93% rename from tienda_ilusion/don_confiao/test_products.py rename to tienda_ilusion/don_confiao/tests/test_products.py index 0b4e0dc..0c12f74 100644 --- a/tienda_ilusion/don_confiao/test_products.py +++ b/tienda_ilusion/don_confiao/tests/test_products.py @@ -1,13 +1,11 @@ from django.test import Client, TestCase -from django.contrib.auth.models import AnonymousUser, User from django.conf import settings - -from .views import import_products, products -from .models import ProductCategory, Product +from ..models import ProductCategory, Product import os import json + class TestProducts(TestCase): def setUp(self): self.client = Client() @@ -54,7 +52,8 @@ class TestProducts(TestCase): first_categories = {p["name"]: p["categories"] for p in first_products} self._import_csv('example_products2.csv') updated_products = self._get_products() - updated_categories = {p["name"]: p["categories"] for p in updated_products} + updated_categories = { + p["name"]: p["categories"] for p in updated_products} self.assertIn('Cafes', first_categories['Arroz']) self.assertNotIn('Granos', first_categories['Arroz']) @@ -62,7 +61,6 @@ class TestProducts(TestCase): self.assertIn('Granos', updated_categories['Arroz']) self.assertNotIn('Cafes', updated_categories['Arroz']) - def test_update_price(self): self._import_csv() first_products = self._get_products() diff --git a/tienda_ilusion/don_confiao/tests.py b/tienda_ilusion/don_confiao/tests/tests.py similarity index 98% rename from tienda_ilusion/don_confiao/tests.py rename to tienda_ilusion/don_confiao/tests/tests.py index 27b5d3e..771ec89 100644 --- a/tienda_ilusion/don_confiao/tests.py +++ b/tienda_ilusion/don_confiao/tests/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -from .models import Sale, SaleLine +from ..models import Sale, SaleLine class ConfiaoTest(TestCase): diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index 1904ab6..4f61508 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render -from django.http import HttpResponse, HttpResponseRedirect, JsonResponse -from django.template import loader +from django.http import HttpResponseRedirect, JsonResponse +# from django.template import loader from .models import Sale, Product, ProductCategory from .forms import ImportProductsForm, PurchaseForm, LineaFormSet @@ -8,18 +8,22 @@ from .forms import ImportProductsForm, PurchaseForm, LineaFormSet import csv import io + def index(request): return render(request, 'don_confiao/index.html') + def buy(request): if request.method == "POST": sale_form = PurchaseForm(request.POST) sale_linea_form = LineaFormSet(request.POST) - if sale_form.is_valid(): - sale_form.save() - if sale_linea_form.is_valid(): - sale_linea_form.save() - return HttpResponseRedirect("productos") + if sale_form.is_valid() and sale_linea_form.is_valid(): + sale = sale_form.save() + lines = sale_linea_form.save(commit=False) + for line in lines: + line.sale = sale + line.save() + return HttpResponseRedirect("compras") else: sale_form = PurchaseForm() sale_linea_form = LineaFormSet() @@ -32,6 +36,7 @@ def buy(request): } ) + def purchases(request): purchases = Sale.objects.all() context = { @@ -69,14 +74,17 @@ def import_products(request): {'form': form} ) + def _categories_from_csv_string(categories_string, separator="&"): categories = categories_string.split(separator) clean_categories = [c.strip() for c in categories] return [_category_from_name(category) for category in clean_categories] + def _category_from_name(name): return ProductCategory.objects.get_or_create(name=name)[0] + def handle_import_products_file(csv_file): data = io.StringIO(csv_file.read().decode('utf-8')) reader = csv.DictReader(data, quotechar='"')