Fix: Clean Home, Crear lineas de Venta
This commit is contained in:
parent
7b0bee8313
commit
7223c0c9a9
@ -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
|
||||||
|
@ -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)
|
||||||
|
1
tienda_ilusion/don_confiao/tests/__init__.py
Normal file
1
tienda_ilusion/don_confiao/tests/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
#!/usr/bin/env python3
|
@ -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()
|
@ -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):
|
@ -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='"')
|
||||||
|
Loading…
Reference in New Issue
Block a user