176 lines
4.4 KiB
Python
176 lines
4.4 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 .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()
|
|
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()
|
|
sale.account = account
|
|
sale.save()
|
|
account.calc_balance()
|
|
account.save()
|
|
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()
|
|
return redirect(reverse('account', args=[account.pk,]))
|
|
elif account.balance is 0:
|
|
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()
|
|
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)
|
|
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()
|
|
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()
|
|
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()
|
|
)
|