comet/comet/account/views.py
Hugo LEVY-FALK 9598fe2299 messages
2018-12-14 20:25:20 +01:00

213 lines
5.5 KiB
Python

from django.shortcuts import (
render,
get_object_or_404,
redirect
)
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .models import Account, Sale, Article
from .forms import SaleForm, ChooseArticleForm, AccountForm, SearchForm, ArticleForm
@login_required
def refill_balance(request, pk):
account = get_object_or_404(Account, pk=pk)
form = SaleForm(request.POST or None)
if form.is_valid():
sale = form.save(commit=False)
sale.account = account
sale.title = "Rechargement de {}".format(sale.price)
sale.save()
account.calc_balance()
bal = account.balance
account.save()
messages.success(
request,
"Le solde de {} {} a été rechargé de {}".format(
account.firstname,
account.lastname,
sale.price
)
)
return redirect(reverse('account', args=[account.pk,]))
return render(
request,
'account/form.html',
{
'account': account,
'form': form,
'title': "Recharge du solde",
'submit': "Recharger"
}
)
@login_required
def pay(request, pk):
account = get_object_or_404(Account, pk=pk)
form = ChooseArticleForm(request.POST or None)
if form.is_valid():
sale = form.to_sale()
if float(sale.price + account.balance) >= 0:
sale.account = account
sale.save()
account.calc_balance()
account.save()
messages.success(
request,
"Paiement de {}€ réalisé avec succès.".format(sale.price)
)
else:
messages.error(request, "Solde trop bas pour l'opération")
return redirect(reverse('account', args=[account.pk,]))
return render(
request,
'account/form.html',
{
'account': account,
'form': form,
'title': "Paiement d'une impression",
'submit': "Payer"
}
)
@login_required
def reset_balance(request, pk):
account = get_object_or_404(Account, pk=pk)
account.calc_balance()
if request.POST:
sale = Sale()
sale.price = - account.balance
sale.title = "Remise à zéro du solde."
sale.account = account
sale.save()
account.calc_balance()
account.save()
messages.success(
request,
"Remise à zéro du solde réussie."
)
return redirect(reverse('account', args=[account.pk,]))
elif float(account.balance) == 0:
messages.warning(
request,
"Le solde est déjà nul."
)
return redirect(reverse('account', args=[account.pk,]))
return render(
request,
'account/form.html',
{
'account': account,
'title': "Rendre {}".format(account.balance),
'submit': "Argent rendu"
}
)
@login_required
def create_account(request):
form = AccountForm(request.POST or None)
if form.is_valid():
account = form.save()
messages.success(
request,
"Le compte a été créé."
)
return redirect(reverse('account', args=[account.pk,]))
return render(
request,
'account/form.html',
{
'form': form,
'title': "Créer un compte",
'submit': "Créer"
}
)
@login_required
def search(request):
form = SearchForm(request.POST or None)
accounts = Account.objects.order_by('firstname')
if form.is_valid():
string = form.cleaned_data['search']
accounts = Account.objects.filter(firstname__istartswith=string)\
| Account.objects.filter(lastname__istartswith=string)\
| Account.objects.filter(email__istartswith=string)
return render(
request,
'account/list_accounts.html',
{
'accounts': accounts,
'form': form,
}
)
@login_required
def account(request, pk):
account = get_object_or_404(Account, pk=pk)
sales = account.sale_set.order_by('-pk')
return render(
request,
'account/balance.html',
locals()
)
@login_required
def article(request, pk):
article = get_object_or_404(Article, pk=pk)
form = ArticleForm(request.POST or None, instance=article)
if form.is_valid():
form.save()
messages.success(
request,
"L'article a été modifié."
)
return redirect(reverse('list-articles'))
return render(
request,
'account/form.html',
{
'form': form,
'submit': "Éditer",
'title': "Édition d'un article"
}
)
@login_required
def new_article(request):
form = ArticleForm(request.POST or None)
if form.is_valid():
form.save()
messages.success(
request,
"L'article a été créé."
)
return redirect(reverse('list-articles'))
return render(
request,
'account/form.html',
{
'form': form,
'submit': "Créer",
'title': "Création d'un article"
}
)
@login_required
def list_articles(request):
articles = Article.objects.all()
return render(
request,
'account/list_articles.html',
locals()
)