Fix: Clean Home, Crear lineas de Venta

This commit is contained in:
sinergia 2024-07-12 22:00:37 -05:00
parent 7b0bee8313
commit 7223c0c9a9
6 changed files with 27 additions and 14 deletions

View File

@ -7,6 +7,7 @@ from .models import Sale, SaleLine
class ImportProductsForm(forms.Form): class ImportProductsForm(forms.Form):
csv_file = forms.FileField() csv_file = forms.FileField()
class PurchaseForm(forms.ModelForm): class PurchaseForm(forms.ModelForm):
class Meta: class Meta:
model = Sale model = Sale
@ -20,6 +21,7 @@ class PurchaseForm(forms.ModelForm):
'date': DateInput(attrs={'type': 'date'}) 'date': DateInput(attrs={'type': 'date'})
} }
class PurchaseLineForm(forms.ModelForm): class PurchaseLineForm(forms.ModelForm):
class Meta: class Meta:
model = SaleLine model = SaleLine

View File

@ -1,6 +1,7 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
class Sale(models.Model): class Sale(models.Model):
customer = models.CharField(max_length=100) customer = models.CharField(max_length=100)
@ -23,15 +24,18 @@ class SaleLine(models.Model):
def __str__(self): def __str__(self):
return f"{self.sale} - {self.product}" return f"{self.sale} - {self.product}"
class MeasuringUnits(models.TextChoices): class MeasuringUnits(models.TextChoices):
UNIT = 'UNIT', _('Unit') UNIT = 'UNIT', _('Unit')
class ProductCategory(models.Model): class ProductCategory(models.Model):
name = models.CharField(max_length=100, unique=True) name = models.CharField(max_length=100, unique=True)
def __str__(self): def __str__(self):
return self.name return self.name
class Product(models.Model): class Product(models.Model):
name = models.CharField(max_length=100, unique=True) name = models.CharField(max_length=100, unique=True)
price = models.DecimalField(max_digits=9, decimal_places=2) price = models.DecimalField(max_digits=9, decimal_places=2)

View File

@ -0,0 +1 @@
#!/usr/bin/env python3

View File

@ -1,13 +1,11 @@
from django.test import Client, TestCase from django.test import Client, TestCase
from django.contrib.auth.models import AnonymousUser, User
from django.conf import settings from django.conf import settings
from ..models import ProductCategory, Product
from .views import import_products, products
from .models import ProductCategory, Product
import os import os
import json import json
class TestProducts(TestCase): class TestProducts(TestCase):
def setUp(self): def setUp(self):
self.client = Client() self.client = Client()
@ -54,7 +52,8 @@ class TestProducts(TestCase):
first_categories = {p["name"]: p["categories"] for p in first_products} first_categories = {p["name"]: p["categories"] for p in first_products}
self._import_csv('example_products2.csv') self._import_csv('example_products2.csv')
updated_products = self._get_products() 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.assertIn('Cafes', first_categories['Arroz'])
self.assertNotIn('Granos', first_categories['Arroz']) self.assertNotIn('Granos', first_categories['Arroz'])
@ -62,7 +61,6 @@ class TestProducts(TestCase):
self.assertIn('Granos', updated_categories['Arroz']) self.assertIn('Granos', updated_categories['Arroz'])
self.assertNotIn('Cafes', updated_categories['Arroz']) self.assertNotIn('Cafes', updated_categories['Arroz'])
def test_update_price(self): def test_update_price(self):
self._import_csv() self._import_csv()
first_products = self._get_products() first_products = self._get_products()

View File

@ -1,5 +1,5 @@
from django.test import TestCase from django.test import TestCase
from .models import Sale, SaleLine from ..models import Sale, SaleLine
class ConfiaoTest(TestCase): class ConfiaoTest(TestCase):

View File

@ -1,6 +1,6 @@
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.http import HttpResponseRedirect, JsonResponse
from django.template import loader # from django.template import loader
from .models import Sale, Product, ProductCategory from .models import Sale, Product, ProductCategory
from .forms import ImportProductsForm, PurchaseForm, LineaFormSet from .forms import ImportProductsForm, PurchaseForm, LineaFormSet
@ -8,18 +8,22 @@ from .forms import ImportProductsForm, PurchaseForm, LineaFormSet
import csv import csv
import io import io
def index(request): def index(request):
return render(request, 'don_confiao/index.html') return render(request, 'don_confiao/index.html')
def buy(request): def buy(request):
if request.method == "POST": if request.method == "POST":
sale_form = PurchaseForm(request.POST) sale_form = PurchaseForm(request.POST)
sale_linea_form = LineaFormSet(request.POST) sale_linea_form = LineaFormSet(request.POST)
if sale_form.is_valid(): if sale_form.is_valid() and sale_linea_form.is_valid():
sale_form.save() sale = sale_form.save()
if sale_linea_form.is_valid(): lines = sale_linea_form.save(commit=False)
sale_linea_form.save() for line in lines:
return HttpResponseRedirect("productos") line.sale = sale
line.save()
return HttpResponseRedirect("compras")
else: else:
sale_form = PurchaseForm() sale_form = PurchaseForm()
sale_linea_form = LineaFormSet() sale_linea_form = LineaFormSet()
@ -32,6 +36,7 @@ def buy(request):
} }
) )
def purchases(request): def purchases(request):
purchases = Sale.objects.all() purchases = Sale.objects.all()
context = { context = {
@ -69,14 +74,17 @@ def import_products(request):
{'form': form} {'form': form}
) )
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)
clean_categories = [c.strip() for c in categories] clean_categories = [c.strip() for c in categories]
return [_category_from_name(category) for category in clean_categories] return [_category_from_name(category) for category in clean_categories]
def _category_from_name(name): def _category_from_name(name):
return ProductCategory.objects.get_or_create(name=name)[0] return ProductCategory.objects.get_or_create(name=name)[0]
def handle_import_products_file(csv_file): def handle_import_products_file(csv_file):
data = io.StringIO(csv_file.read().decode('utf-8')) data = io.StringIO(csv_file.read().decode('utf-8'))
reader = csv.DictReader(data, quotechar='"') reader = csv.DictReader(data, quotechar='"')