web_AI-5/django/didgeridoo/webshop/views.py

289 lines
11 KiB
Python
Raw Normal View History

2017-12-29 16:46:21 +01:00
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
2017-12-28 19:22:00 +01:00
from django.contrib.auth.decorators import login_required
2017-12-29 16:46:21 +01:00
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
2018-01-28 20:31:51 +01:00
from webshop.models import (Article, Category, ArticleStatus, Person,
2018-02-04 18:32:54 +01:00
City, Picture, CartPosition, ShoppingCart)
2018-02-01 17:02:08 +01:00
from webshop.forms import RegistrationForm, AddToCartForm
2017-11-12 21:35:59 +01:00
from currencies.models import ExchangeRate, ExchangeRate_name
from currencies.forms import CurrenciesForm
2018-02-04 21:48:29 +01:00
from decimal import Decimal
2017-11-12 21:35:59 +01:00
def get_categories():
parent_category_list = Category.objects.filter(parent_category=None)
category_list = {}
for i in parent_category_list:
2017-12-17 19:37:49 +01:00
category_list.update(
{i: Category.objects.filter(parent_category=i.id)})
return category_list
def get_hidden_status_id():
hidden_status = ArticleStatus.objects.get(name="hidden")
return hidden_status.id
def index(request):
category_list = get_categories()
articles = Article.objects.all().exclude(status=get_hidden_status_id())
articles_list = list(articles)
currencies_form = CurrenciesForm
2018-02-01 17:02:08 +01:00
rate = ExchangeRate
article_view = True
currency_name = "CHF"
if not 'currency' in request.session:
request.session['currency'] = None
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
2018-02-01 17:02:08 +01:00
currency_name = ExchangeRate_name.objects.get(id=selection.id)
else:
request.session['currency'] = None
if request.session['currency']:
currency = request.session['currency']
for idx, article in enumerate(articles_list):
2018-02-01 17:02:08 +01:00
article.price_in_chf = rate.exchange(
currency, article.price_in_chf
)
articles_list[idx] = article
2018-02-01 17:02:08 +01:00
currency_name = ExchangeRate_name.objects.get(id=currency)
2017-12-19 20:12:21 +01:00
return render(request,
2018-02-01 17:02:08 +01:00
'webshop/index.html',
{'category_list': category_list,
'articles_list': articles_list,
'currencies_form': currencies_form,
'article_view': article_view,
'currency_name': currency_name})
def articles_in_category(request, category_id):
category_list = get_categories()
selected_category = Category.objects.get(id=category_id)
articles = Article.objects.filter(
category=selected_category.id).exclude(status=get_hidden_status_id())
articles_list = list(articles)
currencies_form = CurrenciesForm
2018-02-01 17:02:08 +01:00
rate = ExchangeRate
article_view = True
currency_name = "CHF"
if not 'currency' in request.session:
request.session['currency'] = None
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
2018-02-01 17:02:08 +01:00
currency_name = ExchangeRate_name.objects.get(id=selection.id)
else:
request.session['currency'] = None
if request.session['currency']:
currency = request.session['currency']
for idx, article in enumerate(articles_list):
2018-02-01 17:02:08 +01:00
article.price_in_chf = rate.exchange(
currency, article.price_in_chf)
articles_list[idx] = article
2018-02-01 17:02:08 +01:00
currency_name = ExchangeRate_name.objects.get(id=currency)
2017-12-19 20:12:21 +01:00
return render(request, 'webshop/category.html',
{'articles_list': articles_list,
'category_list': category_list,
'currencies_form': currencies_form,
'article_view': article_view,
'currency_name': currency_name,
2017-12-19 20:12:21 +01:00
'category': selected_category})
def article_details(request, article_id):
category_list = get_categories()
currencies_form = CurrenciesForm
2018-02-01 17:02:08 +01:00
amount = AddToCartForm
rate = ExchangeRate
article_view = True
currency_name = "CHF"
if not 'currency' in request.session:
request.session['currency'] = None
article = get_object_or_404(Article, pk=article_id)
picture_list = Picture.objects.filter(article=article_id)
if request.method == 'POST':
2018-02-01 17:02:08 +01:00
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']:
selection = cf['currencies']
request.session['currency'] = selection.id
currency_name = ExchangeRate_name.objects.get(
id=selection.id)
else:
request.session['currency'] = None
2018-02-01 17:02:08 +01:00
# 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")
2018-02-01 17:05:58 +01:00
amount = amount.cleaned_data['amount']
2018-02-04 18:32:54 +01:00
currency_id = request.session['currency']
print("amount:", amount,
"article_id:", article_id,
"currency_id:", currency_id)
2018-02-04 18:58:21 +01:00
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()
2018-02-01 17:05:58 +01:00
amount = AddToCartForm()
2018-02-01 17:02:08 +01:00
else:
amount = AddToCartForm()
if request.session['currency']:
currency = request.session['currency']
article.price_in_chf = rate.exchange(currency, article.price_in_chf)
2018-02-01 17:02:08 +01:00
currency_name = ExchangeRate_name.objects.get(id=currency)
return render(request, 'webshop/article_details.html',
{'article': article,
'category_list': category_list,
'currencies_form': currencies_form,
'article_view': article_view,
'currency_name': currency_name,
2018-02-01 17:02:08 +01:00
'picture_list': picture_list,
'amount': amount
})
2017-12-28 19:22:00 +01:00
@login_required
def profile(request):
category_list = get_categories()
2017-12-28 19:22:00 +01:00
person = Person.objects.get(user=request.user)
return render(request, 'registration/profile.html',
{'person': person,
'category_list': category_list})
2017-12-29 16:46:21 +01:00
def registration(request):
category_list = get_categories()
2017-12-29 16:46:21 +01:00
if request.method == 'POST':
profile_form = RegistrationForm(request.POST)
user_form = UserCreationForm(request.POST)
if (profile_form.is_valid() and user_form.is_valid()):
pf = profile_form.cleaned_data
uf = user_form.cleaned_data
user = User.objects.create_user(uf['username'],
pf['email'],
uf['password2'])
user.last_name = pf['last_name']
user.first_name = pf['first_name']
user.save()
person = Person.objects.create(
salutation=pf['salutation'],
city=City.objects.get(zip_code=pf['zip_code'],
name=pf['city']),
street_name=pf['street_name'],
street_number=pf['street_number'],
user=user)
return HttpResponseRedirect('/login/')
else:
profile_form = RegistrationForm
user_form = UserCreationForm
return render(request, 'registration/register.html',
{'profile_form': profile_form,
'category_list': category_list,
2017-12-29 16:46:21 +01:00
'user_form': user_form})
2018-02-04 18:32:54 +01:00
def cart(request):
2018-02-04 18:58:21 +01:00
category_list = get_categories()
2018-02-04 18:32:54 +01:00
currencies_form = CurrenciesForm
rate = ExchangeRate
article_view = True
currency_name = "CHF"
2018-02-04 19:44:09 +01:00
message = ""
2018-02-04 20:36:10 +01:00
cart_id = False
articles_list = ""
prices_in_cart = []
total = 0
2018-02-04 18:32:54 +01:00
if not 'currency' in request.session:
request.session['currency'] = None
2018-02-04 20:38:35 +01:00
2018-02-04 18:32:54 +01:00
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
2018-02-04 18:58:21 +01:00
try:
2018-02-04 19:44:09 +01:00
cart_id = ShoppingCart.objects.get(user=request.user)
2018-02-04 18:58:21 +01:00
except Exception as e:
message = "You have no items in the Basket"
if cart_id and request.session['currency']:
2018-02-04 18:58:21 +01:00
articles = CartPosition.objects.filter(cart=cart_id)
articles_list = list(articles)
currency = request.session['currency']
2018-02-04 18:58:21 +01:00
for idx, article in enumerate(articles_list):
article.price_in_chf = rate.exchange(
2018-02-04 19:27:09 +01:00
currency, article.article.price_in_chf)
2018-02-04 18:58:21 +01:00
articles_list[idx] = article
currency_name = ExchangeRate_name.objects.get(id=currency)
2018-02-04 21:48:29 +01:00
article.price_in_chf = rate.exchange(
currency,
article.price_in_chf)
else:
cart_position = CartPosition.objects.filter(cart=cart_id)
if len(cart_position) > 0:
cart_position_list = list(cart_position)
for idx, cart_position in enumerate(cart_position_list):
prices_in_cart.append(cart_position.article.price_in_chf)
prices_sum = sum(prices_in_cart)
prices_length = len(prices_in_cart)
total = prices_sum / prices_length
articles_list = cart_position_list
2018-02-04 18:32:54 +01:00
return render(request, 'webshop/cart.html',
{'articles_list': articles_list,
2018-02-04 21:48:29 +01:00
'total': total,
2018-02-04 18:32:54 +01:00
'currencies_form': currencies_form,
'article_view': article_view,
'currency_name': currency_name,
2018-02-04 18:58:21 +01:00
'category_list': category_list,
'message': message,
2018-02-04 18:32:54 +01:00
})