213 lines
5.5 KiB
Python
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()
|
|
)
|