Merge pull request 'purchase_view_a_formularios_de_django' (#8) from purchase_view_a_formularios_de_django into main

Reviewed-on: OneTeam/don_confiao#8
This commit is contained in:
mono 2024-07-06 09:42:32 -05:00
commit 7b0bee8313
4 changed files with 68 additions and 48 deletions

View File

@ -1,4 +1,39 @@
from django import forms from django import forms
from django.forms.widgets import DateInput
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 Meta:
model = Sale
fields = [
"customer",
"date",
"phone",
"description",
]
widgets = {
'date': DateInput(attrs={'type': 'date'})
}
class PurchaseLineForm(forms.ModelForm):
class Meta:
model = SaleLine
fields = [
"product",
"quantity",
"unit_price",
"description",
]
LineaFormSet = forms.models.inlineformset_factory(
Sale,
SaleLine,
extra=2,
fields='__all__'
)

View File

@ -8,6 +8,9 @@ class Sale(models.Model):
phone = models.CharField(max_length=13, null=True, blank=True) phone = models.CharField(max_length=13, null=True, blank=True)
description = models.CharField(max_length=255, null=True, blank=True) description = models.CharField(max_length=255, null=True, blank=True)
def __str__(self):
return f"{self.date} {self.customer}"
class SaleLine(models.Model): class SaleLine(models.Model):
@ -17,6 +20,9 @@ class SaleLine(models.Model):
unit_price = models.DecimalField(max_digits=9, decimal_places=2) unit_price = models.DecimalField(max_digits=9, decimal_places=2)
description = models.CharField(max_length=255, null=True, blank=True) description = models.CharField(max_length=255, null=True, blank=True)
def __str__(self):
return f"{self.sale} - {self.product}"
class MeasuringUnits(models.TextChoices): class MeasuringUnits(models.TextChoices):
UNIT = 'UNIT', _('Unit') UNIT = 'UNIT', _('Unit')

View File

@ -1,43 +1,12 @@
<!doctype html> <!doctype html>
<form action="{% url 'buy'%}" method="POST"> <form method="POST">
{% csrf_token %} {% csrf_token %}
<fieldset> {{ sale_form}}
<legend>Purchase</legend> {{ linea_formset.management_form }}
<label for="customer">Customer</label>: {% for form in linea_formset %}
<input type="search" name="customer" id="customer"/> <table style="border: solid 1px blue; margin: 10px">
{{ form.as_table }}
<label for="date">Date</label>: </table>
<input type="date" name="date" id="date"/> {% endfor %}
<br/><button name="form" type="submit" >Comprar</button>
<label for="description">Description</label>:
<input type="text" name="description" id="description"/>
<fieldset>
<legend>Purchase Line</legend>
<label for="product">Product</label>:
<input type="search" name="product" id="product"/>
<label for="unit_price">Unit Price</label>:
<input type="number" name="unit_price" min="0" id="unit_price"/>
<label for="quantity">Quantity</label>:
<input type="number" name="quantity" min="0" id="quantity"/>
<label for="subtotal">Subtotal</label>:
<input type="number" name="subtotal" min="0" id="line_amount"/>
</fieldset>
</fieldset>
<fieldset>
<label for="total_amount">Total</label>:
<input type="number" name="total_amount" min="0" id="total_amount"/>
<label for="Paid">Paid:</label>
<select id="paid" name="paid">
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
</fieldset>
<div class="button-container">
<button name="form" type="submit">Enviar</button>
</div>
</form> </form>

View File

@ -3,7 +3,7 @@ from django.http import HttpResponse, 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 from .forms import ImportProductsForm, PurchaseForm, LineaFormSet
import csv import csv
import io import io
@ -11,16 +11,26 @@ 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):
context = {} if request.method == "POST":
if request.POST: sale_form = PurchaseForm(request.POST)
raise Exception(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")
else: else:
raise Exception(request.POST) sale_form = PurchaseForm()
sale_linea_form = LineaFormSet()
return render( return render(
request, 'don_confiao/purchase.html', context) request,
'don_confiao/purchase.html',
{
'sale_form': sale_form,
'linea_formset': sale_linea_form
}
)
def purchases(request): def purchases(request):
purchases = Sale.objects.all() purchases = Sale.objects.all()