from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.template import loader from .models import Sale, Product, ProductCategory from .forms import ImportProductsForm, PurchaseForm, LineaFormSet import csv import io def index(request): return render(request, 'don_confiao/index.html') def buy(request): context = {} if request.POST: raise Exception(request.POST) return render( request, 'don_confiao/purchase.html', context) def django_buy(request): if request.method == "POST": raise Exception(request.POST) else: sale_form = PurchaseForm() sale_linea_form = LineaFormSet() return render( request, 'don_confiao/django_purchase.html', { 'sale_form': sale_form, 'linea_formset': sale_linea_form } ) def purchases(request): purchases = Sale.objects.all() context = { "purchases": purchases, } return render(request, 'don_confiao/purchases.html', context) def products(request): rproducts = [] products = Product.objects.all() for product in products: rproduct = { "name": product.name, "price_list": product.price, "uom": product.measuring_unit, "categories": [c.name for c in product.categories.all()] } rproducts.append(rproduct) return JsonResponse(rproducts, 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 _categories_from_csv_string(categories_string, separator="&"): categories = categories_string.split(separator) clean_categories = [c.strip() for c in categories] return [_category_from_name(category) for category in clean_categories] def _category_from_name(name): return ProductCategory.objects.get_or_create(name=name)[0] def handle_import_products_file(csv_file): data = io.StringIO(csv_file.read().decode('utf-8')) reader = csv.DictReader(data, quotechar='"') for row in reader: product, created = Product.objects.update_or_create( name=row['producto'], defaults={ 'price': row['precio'], 'measuring_unit': row['unidad'] } ) categories = _categories_from_csv_string(row["categorias"]) product.categories.clear() for category in categories: product.categories.add(category)