mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-25 00:13:45 +00:00
86 lines
3.5 KiB
Python
86 lines
3.5 KiB
Python
# App de gestion des users pour re2o
|
|
# Goulven Kermarec, Gabriel Détraz
|
|
# Gplv2
|
|
from django.shortcuts import render, redirect
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
from django.core.context_processors import csrf
|
|
from django.template import Context, RequestContext, loader
|
|
from django.contrib import messages
|
|
from django.db.models import Max
|
|
|
|
from cotisations.models import NewFactureForm, EditFactureForm, Facture, Article, Cotisation
|
|
from users.models import User
|
|
|
|
from dateutil.relativedelta import relativedelta
|
|
from django.utils import timezone
|
|
|
|
def form(ctx, template, request):
|
|
c = ctx
|
|
c.update(csrf(request))
|
|
return render_to_response(template, c, context_instance=RequestContext(request))
|
|
|
|
def end_adhesion(user):
|
|
""" Renvoie la date de fin d'adhésion d'un user, False sinon """
|
|
date_max = Cotisation.objects.all().filter(facture=Facture.objects.all().filter(user=user).exclude(valid=False)).aggregate(Max('date_end'))['date_end__max']
|
|
return date_max
|
|
|
|
def is_adherent(user):
|
|
""" Renvoie si un user est à jour de cotisation """
|
|
end = end_adhesion(user)
|
|
if not end:
|
|
return False
|
|
elif end < timezone.now():
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def create_cotis(facture, user, duration):
|
|
""" Update et crée l'objet cotisation associé à une facture, prend en argument l'user, la facture pour la quantitéi, et l'article pour la durée"""
|
|
cotisation=Cotisation(facture=facture)
|
|
date_max = end_adhesion(user) or timezone.now()
|
|
if date_max < timezone.now():
|
|
datemax = timezone.now()
|
|
cotisation.date_start=date_max
|
|
cotisation.date_end = cotisation.date_start + relativedelta(months=duration)
|
|
cotisation.save()
|
|
return
|
|
|
|
def new_facture(request, userid):
|
|
try:
|
|
user = User.objects.get(pk=userid)
|
|
except User.DoesNotExist:
|
|
messages.error(request, u"Utilisateur inexistant" )
|
|
return redirect("/cotisations/")
|
|
facture = Facture(user=user)
|
|
facture_form = NewFactureForm(request.POST or None, instance=facture)
|
|
if facture_form.is_valid():
|
|
new_facture = facture_form.save(commit=False)
|
|
article = facture_form.cleaned_data['article']
|
|
new_facture.prix = sum(art.prix for art in article)
|
|
new_facture.name = ' - '.join(art.name for art in article)
|
|
new_facture.save()
|
|
if any(art.cotisation for art in article):
|
|
duration = sum(art.duration*facture.number for art in article if art.cotisation)
|
|
create_cotis(new_facture, user, duration)
|
|
messages.success(request, "La cotisation a été prolongée pour l'adhérent %s " % user.name )
|
|
else:
|
|
messages.success(request, "La facture a été crée")
|
|
return redirect("/cotisations/")
|
|
return form({'factureform': facture_form}, 'cotisations/facture.html', request)
|
|
|
|
def edit_facture(request, factureid):
|
|
try:
|
|
facture = Facture.objects.get(pk=factureid)
|
|
except Facture.DoesNotExist:
|
|
messages.error(request, u"Facture inexistante" )
|
|
return redirect("/cotisations/")
|
|
facture_form = EditFactureForm(request.POST or None, instance=facture)
|
|
if facture_form.is_valid():
|
|
facture_form.save()
|
|
messages.success(request, "La facture a bien été modifiée")
|
|
return redirect("/cotisations/")
|
|
return form({'factureform': facture_form}, 'cotisations/facture.html', request)
|
|
|
|
def index(request):
|
|
facture_list = Facture.objects.order_by('date').reverse()
|
|
return render(request, 'cotisations/index.html', {'facture_list': facture_list})
|