Merge pull request 'purchase_view_a_formularios_de_django' (#8) from purchase_view_a_formularios_de_django into main
Reviewed-on: #8
This commit is contained in:
		| @@ -1,4 +1,39 @@ | ||||
| from django import forms | ||||
| from django.forms.widgets import DateInput | ||||
|  | ||||
| from .models import Sale, SaleLine | ||||
|  | ||||
|  | ||||
| class ImportProductsForm(forms.Form): | ||||
|     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__' | ||||
| ) | ||||
|   | ||||
| @@ -8,6 +8,9 @@ class Sale(models.Model): | ||||
|     phone = models.CharField(max_length=13, 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): | ||||
|  | ||||
| @@ -17,6 +20,9 @@ class SaleLine(models.Model): | ||||
|     unit_price = models.DecimalField(max_digits=9, decimal_places=2) | ||||
|     description = models.CharField(max_length=255, null=True, blank=True) | ||||
|  | ||||
|     def __str__(self): | ||||
|         return f"{self.sale} - {self.product}" | ||||
|  | ||||
| class MeasuringUnits(models.TextChoices): | ||||
|     UNIT = 'UNIT', _('Unit') | ||||
|  | ||||
|   | ||||
| @@ -1,43 +1,12 @@ | ||||
| <!doctype html> | ||||
| <form action="{% url 'buy'%}" method="POST"> | ||||
| <form method="POST"> | ||||
|     {% csrf_token %} | ||||
|     <fieldset> | ||||
|         <legend>Purchase</legend> | ||||
|         <label for="customer">Customer</label>: | ||||
|         <input type="search" name="customer" id="customer"/> | ||||
|  | ||||
|         <label for="date">Date</label>: | ||||
|         <input type="date" name="date" id="date"/> | ||||
|  | ||||
|         <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> | ||||
|         {{ sale_form}} | ||||
|   {{ linea_formset.management_form }} | ||||
|   {% for form in linea_formset %} | ||||
|     <table style="border: solid 1px blue; margin: 10px"> | ||||
|         {{ form.as_table }} | ||||
|     </table> | ||||
|     {% endfor %} | ||||
|     <br/><button name="form" type="submit" >Comprar</button> | ||||
| </form> | ||||
|   | ||||
| @@ -3,7 +3,7 @@ from django.http import HttpResponse, HttpResponseRedirect, JsonResponse | ||||
| from django.template import loader | ||||
|  | ||||
| from .models import Sale, Product, ProductCategory | ||||
| from .forms import ImportProductsForm | ||||
| from .forms import ImportProductsForm, PurchaseForm, LineaFormSet | ||||
|  | ||||
| import csv | ||||
| import io | ||||
| @@ -11,16 +11,26 @@ import io | ||||
| def index(request): | ||||
|     return render(request, 'don_confiao/index.html') | ||||
|  | ||||
|  | ||||
| def buy(request): | ||||
|     context = {} | ||||
|     if request.POST: | ||||
|         raise Exception(request.POST) | ||||
|     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") | ||||
|     else: | ||||
|         raise Exception(request.POST) | ||||
|         sale_form = PurchaseForm() | ||||
|         sale_linea_form = LineaFormSet() | ||||
|     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): | ||||
|     purchases = Sale.objects.all() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user