from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.views.generic import ListView from django.db import transaction from .models import ( Sale, SaleLine, Product, ProductCategory, Payment, PaymentMethods) from .forms import ( ImportProductsForm, PurchaseForm, SaleLineFormSet, ReconciliationJarForm, PurchaseSummaryForm) import csv import io import json from decimal import Decimal class DecimalEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, Decimal): return float(obj) return json.JSONEncoder.default(self, obj) def index(request): return render(request, 'don_confiao/index.html') def buy(request): if request.method == "POST": sale_form = PurchaseForm(request.POST) line_formset = SaleLineFormSet(request.POST) sale_summary_form = PurchaseSummaryForm(request.POST) forms_are_valid = all([ sale_form.is_valid(), line_formset.is_valid(), sale_summary_form.is_valid() ]) payment_method = request.POST.get('payment_method') valid_payment_methods = [PaymentMethods.CASH] valid_payment_method = payment_method in valid_payment_methods if forms_are_valid: with transaction.atomic(): sale = sale_form.save() line_formset.instance = sale line_formset.save() Payment.total_payment_from_sale( payment_method, sale ) return HttpResponseRedirect("compras") else: sale_form = PurchaseForm() line_formset = SaleLineFormSet() sale_summary_form = PurchaseSummaryForm() return render( request, 'don_confiao/purchase.html', { 'sale_form': sale_form, 'linea_formset': line_formset, 'summary_form': sale_summary_form, 'list_products': json.dumps(Product.to_list(), cls=DecimalEncoder), } ) def purchases(request): purchases = Sale.objects.all() context = { "purchases": purchases, } return render(request, 'don_confiao/purchases.html', context) def products(request): return JsonResponse(Product.to_list(), safe=False) def import_products(request): if request.method == "POST": form = ImportProductsForm(request.POST, request.FILES) if form.is_valid(): handle_import_products_file(request.FILES["csv_file"]) return HttpResponseRedirect("productos") else: form = ImportProductsForm() return render( request, "don_confiao/import_products.html", {'form': form} ) def reconciliate_jar(request): summary = Payment.get_reconciliation_jar_summary() if request.method == 'POST': form = ReconciliationJarForm(request.POST) if form.is_valid(): reconciliation = form.save() reconciliation.add_payments(summary.payments) reconciliation.clean() reconciliation.save() return HttpResponseRedirect('cuadres') else: form = ReconciliationJarForm() return render( request, "don_confiao/reconciliate_jar.html", {'summary': summary, 'form': form} ) def reconciliations(request): return HttpResponse('