From 080bb7823dca4a9a3a22d64e9fcea13d27763460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Ho=CC=88rler?= Date: Sun, 11 Feb 2018 19:58:49 +0100 Subject: [PATCH 1/2] commit of pseudo idea of the form --- django/didgeridoo/webshop/forms.py | 20 ++++++++- django/didgeridoo/webshop/views.py | 70 ++++++++++++++++++++---------- 2 files changed, 67 insertions(+), 23 deletions(-) diff --git a/django/didgeridoo/webshop/forms.py b/django/didgeridoo/webshop/forms.py index 680f7a8..3cca54d 100644 --- a/django/didgeridoo/webshop/forms.py +++ b/django/didgeridoo/webshop/forms.py @@ -1,5 +1,12 @@ from django import forms -from webshop.models import Salutation, City, Picture, Article, Option +from webshop.models import ( + Salutation, + City, + Picture, + Article, + Option, + OrderPosition + ) class RegistrationForm(forms.Form): @@ -58,3 +65,14 @@ class AddToCartForm(forms.Form): label='Amount in piece.', help_text="Enter a Value between 1 and 99.", initial=1) + + +class CartForm(forms.Form): + def ChangeAmount(self): + article = OrderPosition.objects.filter(pk=self.id) + amountfield = forms.IntegerField( + label='pce', + help_text='Enter a Value between 1 and 99.', + initial=article.amount + ) + return amountfield diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index ad5e0bb..75b6ddd 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -3,9 +3,17 @@ from django.shortcuts import get_object_or_404, render from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm -from webshop.models import (Article, Category, ArticleStatus, Person, - City, Picture, CartPosition, ShoppingCart) -from webshop.forms import RegistrationForm, AddToCartForm +from webshop.models import (Article, + Category, + ArticleStatus, + Person, + City, + Picture, + CartPosition, + ShoppingCart) +from webshop.forms import (RegistrationForm, + AddToCartForm, + CartForm) from currencies.models import ExchangeRate, ExchangeRate_name from currencies.forms import CurrenciesForm @@ -125,11 +133,9 @@ def article_details(request, article_id): picture_list = Picture.objects.filter(article=article_id) if request.method == 'POST': - print(request.POST) # hier wird das Currency dropdown bearbeitet: if 'currencies' in request.POST: currencies_form = CurrenciesForm(request.POST) - print("currencies_form") if currencies_form.is_valid(): cf = currencies_form.cleaned_data if cf['currencies']: @@ -143,14 +149,9 @@ def article_details(request, article_id): # hier wird der Artikel in den Wahrenkorb transferiert: if 'amount' in request.POST: amount = AddToCartForm(request.POST) - print("add_to_cart_form") if amount.is_valid(): - print("is valid") amount = amount.cleaned_data['amount'] currency_id = request.session['currency'] - print("amount:", amount, - "article_id:", article_id, - "currency_id:", currency_id) article = Article.objects.get(id=article_id) try: cart_id = ShoppingCart.objects.get(user=request.user) @@ -234,6 +235,7 @@ def cart(request): cart_id = False articles_list = "" prices_in_cart = [] + totalprice_of_one = [] total = 0 if not 'currency' in request.session: @@ -242,15 +244,40 @@ def cart(request): currency = request.session['currency'] if request.method == 'POST': - currencies_form = CurrenciesForm(request.POST) - if currencies_form.is_valid(): - cf = currencies_form.cleaned_data - if cf['currencies']: - selection = cf['currencies'] - request.session['currency'] = selection.id - currency_name = ExchangeRate_name.objects.get(id=selection.id) - else: - request.session['currency'] = None + # here we react to a currency dropdown change: + if 'currencies' in request.POST: + currencies_form = CurrenciesForm(request.POST) + if currencies_form.is_valid(): + cf = currencies_form.cleaned_data + if cf['currencies']: + selection = cf['currencies'] + request.session['currency'] = selection.id + currency_name = ExchangeRate_name.objects.get( + id=selection.id) + else: + request.session['currency'] = None + # here we react to a change of amount per item in the Cart: + if 'amount' in request.POST: + print(request.POST) + amount = CartForm.ChangeAmount(request.POST) + if amount.is_valid(): + amount = amount.cleaned_data['amount'] + article = Article.objects.get(id=article_id) + try: + cart_id = ShoppingCart.objects.get(user=request.user) + except: + cart_id = ShoppingCart.objects.create(user=request.user) + cart_id.save() + if cart_id: + cart_position = CartPosition.objects.create( + article=article, + amount=amount, + cart=ShoppingCart.objects.get(user=request.user) + ) + cart_position.save() + amount = CartForm.ChangeAmount() + else: + amount = AddToCartForm() try: cart_id = ShoppingCart.objects.get(user=request.user) @@ -261,8 +288,8 @@ def cart(request): articles = CartPosition.objects.filter(cart=cart_id) articles_list = list(articles) for idx, article in enumerate(articles_list): - print(article, idx) if currency is not None: + articles_list[idx] = article article.price_in_chf = rate.exchange( currency, article.article.price_in_chf) currency_name = ExchangeRate_name.objects.get(id=currency) @@ -271,7 +298,6 @@ def cart(request): article.price_in_chf) amount = article.amount totalprice_of_one = Decimal(amount) * article.article.price_in_chf - articles_list[idx] = article prices_in_cart.append(article.article.price_in_chf) @@ -299,7 +325,7 @@ def cart(request): return render(request, 'webshop/cart.html', {'articles_list': articles_list, - 'totalprice_of_one': totalprice_of_one, + 'totalprice_of_one': totalprice_of_one, 'total': total, 'currencies_form': currencies_form, 'article_view': article_view, From 5220b4d5677da1660c07ee32d687a5caf047291d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Ho=CC=88rler?= Date: Sun, 11 Feb 2018 20:07:18 +0100 Subject: [PATCH 2/2] add comments of thaught --- django/didgeridoo/webshop/views.py | 36 +++++++++--------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index 75b6ddd..65fdc05 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -278,7 +278,7 @@ def cart(request): amount = CartForm.ChangeAmount() else: amount = AddToCartForm() - + # if the cart_id is set the user has already added items to cart. try: cart_id = ShoppingCart.objects.get(user=request.user) except Exception as e: @@ -287,40 +287,26 @@ def cart(request): if cart_id: articles = CartPosition.objects.filter(cart=cart_id) articles_list = list(articles) + # scrap out the details to calculate Total of item and Summ of All: for idx, article in enumerate(articles_list): + # only recalculate prices if currency is not CHF: if currency is not None: + # no idea what this does: (!!!) articles_list[idx] = article + # get price of item in CHF: article.price_in_chf = rate.exchange( currency, article.article.price_in_chf) + # get currencyname to display: currency_name = ExchangeRate_name.objects.get(id=currency) + # get exchange_rate multiplyed: article.price_in_chf = rate.exchange( currency, article.price_in_chf) - amount = article.amount - totalprice_of_one = Decimal(amount) * article.article.price_in_chf - + # calculate item * price for one row in cart: + totalprice_of_one = Decimal(article.amount) * article.article.price_in_chf + # add to a list of total prices per item prices_in_cart.append(article.article.price_in_chf) - - # if cart_id and request.session['currency']: - # articles = CartPosition.objects.filter(cart=cart_id) - # articles_list = list(articles) - # currency = request.session['currency'] - # for idx, article in enumerate(articles_list): - # article.price_in_chf = rate.exchange( - # currency, article.article.price_in_chf) - # articles_list[idx] = article - # currency_name = ExchangeRate_name.objects.get(id=currency) - # article.price_in_chf = rate.exchange( - # currency, - # article.price_in_chf) - # prices_in_cart.append(article.article.price_in_chf) - # - # if cart_id: - # articles = CartPosition.objects.filter(cart=cart_id) - # articles_list = list(articles) - # for idx, article in enumerate(articles_list): - # prices_in_cart.append(article.article.price_in_chf) - + # sum the list of totalprices of items to a summ of all items in cart. total = sum(prices_in_cart) return render(request, 'webshop/cart.html',