diff --git a/django/didgeridoo/webshop/forms.py b/django/didgeridoo/webshop/forms.py index 48da83a..60970fc 100644 --- a/django/didgeridoo/webshop/forms.py +++ b/django/didgeridoo/webshop/forms.py @@ -67,20 +67,10 @@ class AddToCartForm(forms.Form): class CartForm(forms.Form): - amount_field = forms.IntegerField( + amount_form = forms.FloatField( label='pce', help_text='Enter a Value between 1 and 99.') - def change_amount(self, article): - print('CartForm.ChangeAmount') - position = CartPosition.objects.get(article=article) - self.amount_field = forms.IntegerField( - label='pce', - help_text='Enter a Value between 1 and 99.', - initial=position.amount - ) - return self.amount_field - class CheckoutForm(forms.Form): diff --git a/django/didgeridoo/webshop/templates/webshop/cart.html b/django/didgeridoo/webshop/templates/webshop/cart.html index bfcc7dd..3937aa2 100644 --- a/django/didgeridoo/webshop/templates/webshop/cart.html +++ b/django/didgeridoo/webshop/templates/webshop/cart.html @@ -13,7 +13,7 @@ PRICE p.pce. POSITION PRICE - {% for cart_position in cart_position_list %} + {% for cart_position, amount_form in cart_position_list_zip %} {{ cart_position.id }} {{ cart_position.article.id }} @@ -26,6 +26,7 @@
{{ amount_form.as_p }} + {% csrf_token %}
diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index c763712..2fca7e7 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -64,6 +64,46 @@ def articles_in_category(request, category_id): 'category': selected_category}) +def restrict_cart_to_one_article(user_name, article_id, amount, operation): + article = Article.objects.get(id=article_id) + try: + # lookup if cart_id is already existent: + cart_id = ShoppingCart.objects.get(user=user_name) + except: + # if cart_id is not existent create a cart: + cart_id = ShoppingCart.objects.create(user=user_name) + cart_id.save() + if cart_id: + print('restrict_cart_to_one_article cart_id:', cart_id) + # check if the article is existent in cart already: + try: + article_amount = CartPosition.objects.get( + article=article_id) + if operation == 'add': + new_amount = article_amount.amount + amount + print('restrict_cart_to_one_article add new_amount:', new_amount, + 'article_id', article_id) + if operation == 'replace': + new_amount = amount + print('restrict_cart_to_one_article replace:', new_amount, + 'article_id', article_id) + # if article is in cart already update amount: + cart_position = CartPosition.objects.filter( + id=article_id).update( + amount=new_amount + ) + except Exception as e: + print('restrict_cart_to_one_article except: ', e) + # if the article is not in cart yet add full item: + cart_position = CartPosition.objects.create( + article=article, + amount=amount, + position_price=article.price_in_chf, + cart=ShoppingCart.objects.get(user=user_name) + ) + cart_position.save() + + def article_details(request, article_id): category_list = get_categories() currencies_form = CurrenciesForm @@ -97,34 +137,14 @@ def article_details(request, article_id): amount = AddToCartForm(request.POST) if amount.is_valid(): amount = amount.cleaned_data['amount'] - article = Article.objects.get(id=article_id) - try: - # lookup if cart_id is already existent: - cart_id = ShoppingCart.objects.get(user=request.user) - except: - # if cart_id is not existent create a cart: - cart_id = ShoppingCart.objects.create(user=request.user) - cart_id.save() - if cart_id: - # check if the article is existent in cart already: - try: - article_amount = CartPosition.objects.get( - article=article_id) - new_amount = article_amount.amount + amount - # if article is in cart already update amount: - cart_position = CartPosition.objects.filter( - id=article_id).update( - amount=new_amount - ) - except Exception as e: - # if the article is not in cart yet add full item: - cart_position = CartPosition.objects.create( - article=article, - amount=amount, - position_price=article.price_in_chf, - cart=ShoppingCart.objects.get(user=request.user) - ) - cart_position.save() + user_name = request.user + operation = 'add' + restrict_cart_to_one_article( + user_name, + article_id, + amount, + operation + ) # write default value (1) to form field: amount = AddToCartForm() else: @@ -195,54 +215,17 @@ def cart(request): article_view = True currency_name = "CHF" message = "" - cart_position_list = "" - prices_in_cart = [] + cart_position_list = [] + amount_form_list = [] totalprice_list = [] total = 0 - + user_name = request.user # here we configure the users Currency: if 'currency' not in request.session: request.session['currency'] = None else: currency = request.session['currency'] -# here we handle the normal cart view: - # if the cart_id is set the user has already added items to cart. - try: - cart_id = ShoppingCart.objects.get(user=request.user.id) - except Exception as e: - message = "You have no items in the Basket" - print('try cart_id exception as: ', e) - cart_id = False - if cart_id: - print('cart_id', cart_id) - articles = CartPosition.objects.filter(cart=cart_id) - cart_position_list = list(articles) - # scrap out the details to calculate Total of item and Summ of All: - for idx, cart_position in enumerate(cart_position_list): - article = CartPosition.objects.get( - cart=cart_id, - article=cart_position.article.id - ) - cart_position.calculate_position_price() - if currency: - print('calc currency') - # get currencyname to display: - currency_name = ExchangeRate_name.objects.get(id=currency) - # get exchange_rate multiplyed: - cart_position.price_in_chf = rate.exchange( - currency, - cart_position.price_in_chf - ) - totalprice_list.append(cart_position.price_in_chf) - cart_position_list[idx] = cart_position - - amount_form = CartForm( - initial=cart_position.amount - ) - - total = sum(totalprice_list) - # Here we handle all POST Operations: if request.method == 'POST': print(request.POST) @@ -260,27 +243,19 @@ def cart(request): else: request.session['currency'] = None # here we react to a change of amount per item in the Cart: - if 'amount_field' in request.POST: - print('yes amount post') - amount_form = CartForm(request.POST, - cart_id, - cart_position.article.id) + if 'amount_form' in request.POST: + print('amount_form yes amount post') + amount_form = CartForm(request.POST) if amount_form.is_valid(): - amount = amount_form.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() + amount = amount_form.cleaned_data['amount_form'] + article_id = request.POST.get('article_id') + operation = 'replace' + restrict_cart_to_one_article( + user_name, + article_id, + amount, + operation + ) if 'checkout' in request.POST: print('checkout') @@ -289,16 +264,55 @@ def cart(request): checkout_form = checkout_form.cleaned_data['checkout'] print('views checkout checkout_form', checkout_form) if checkout_form is True: - # add to order + # todo add to order order = '' +# here we handle the normal cart view: + # if the cart_id is set the user has already added items to cart. + try: + cart_id = ShoppingCart.objects.get(user=request.user.id) + except Exception as e: + message = "You have no items in the Basket" + print('try cart_id exception as: ', e) + cart_id = False + if cart_id: + print('cart cart_id', cart_id) + # get all items in the cart of this customer: + articles = CartPosition.objects.filter(cart=cart_id) + # make a list out of all articles: + cart_position_list = list(articles) + # enumerate the list of articles and loop over items: + for idx, cart_position in enumerate(cart_position_list): + # sub funciton of CartPosition: + cart_position.calculate_position_price() + # scrap out the details to calculate Total of item and Summ of All: + if currency: + print('calc currency') + # get currencyname to display: + currency_name = ExchangeRate_name.objects.get(id=currency) + # get exchange_rate multiplyed: + cart_position.price_in_chf = rate.exchange( + currency, + cart_position.article.price_in_chf + ) + totalprice_list.append(cart_position.price_in_chf) + + print('cart cart_position.article.id', cart_position.article.id, + 'articleamount:', cart_position.amount) + amount_form = CartForm( + initial={'amount_form': cart_position.amount} + ) + amount_form_list.append(amount_form) + cart_position_list[idx] = cart_position + cart_position_list_zip = zip(cart_position_list, amount_form_list) + + total = sum(totalprice_list) checkout_form = CheckoutForm() return render(request, 'webshop/cart.html', - {'cart_position_list': cart_position_list, + {'cart_position_list_zip': cart_position_list_zip, 'totalprice_list': totalprice_list, 'total': total, - 'cart_form': cart_form, 'currencies_form': currencies_form, 'amount_form': amount_form, 'article_view': article_view,