Fix: Clean Home, Crear lineas de Venta

This commit is contained in:
Mono Mono 2024-07-27 13:19:37 -05:00
parent 5879296132
commit 02fba454ba
6 changed files with 24 additions and 13 deletions

View File

@ -7,6 +7,7 @@ from .models import Sale, SaleLine, ReconciliationJar
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

@ -4,6 +4,7 @@ from django.core.exceptions import ValidationError
from decimal import Decimal from decimal import Decimal
class Sale(models.Model): class Sale(models.Model):
customer = models.CharField(max_length=100) customer = models.CharField(max_length=100)

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,7 @@
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.template import loader #from django.template import loader
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from .models import Sale, Product, ProductCategory, Payment from .models import Sale, Product, ProductCategory, Payment
@ -9,18 +10,22 @@ from .forms import ImportProductsForm, PurchaseForm, LineaFormSet, Reconciliatio
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()
@ -33,6 +38,7 @@ def buy(request):
} }
) )
def purchases(request): def purchases(request):
purchases = Sale.objects.all() purchases = Sale.objects.all()
context = { context = {
@ -89,6 +95,7 @@ def reconciliate_jar(request):
{'summary': summary, 'form': form} {'summary': summary, 'form': form}
) )
def reconciliations(request): def reconciliations(request):
return HttpResponse('<h1>Reconciliaciones</h1>') return HttpResponse('<h1>Reconciliaciones</h1>')
@ -98,9 +105,11 @@ def _categories_from_csv_string(categories_string, 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='"')