mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-26 00:43:46 +00:00
Define can_create, can_edit, can_delete and can_view and use can_create and can_edit decorators for cotisations.models
This commit is contained in:
parent
2c9ee954c1
commit
7b3ece0d29
2 changed files with 136 additions and 43 deletions
|
@ -103,6 +103,40 @@ class Facture(models.Model):
|
||||||
).values_list('name', flat=True))
|
).values_list('name', flat=True))
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
def get_instance(factureid, *args, **kwargs):
|
||||||
|
return Facture.objects.get(pk=factureid)
|
||||||
|
|
||||||
|
def can_create(user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\
|
||||||
|
droit de créer des factures"
|
||||||
|
|
||||||
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
if not user_request.has_perms(('cableur',)):
|
||||||
|
return False, u"Vous n'avez pas le droit d'éditer les factures"
|
||||||
|
elif not user_request.has_perms(('tresorier',)) and\
|
||||||
|
(self.control or not self.valid):
|
||||||
|
return False, u"Vous n'avez pas le droit d'éditer une facture\
|
||||||
|
controlée ou invalidée par un trésorier"
|
||||||
|
else:
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
if not user_request.has_perms(('cableur',)):
|
||||||
|
return False, u"Vous n'avez pas le droit de supprimer une facture"
|
||||||
|
if self.control or not self.valid:
|
||||||
|
return False, u"Vous ne pouvez pas supprimer une facture\
|
||||||
|
contrôlée ou invalidée par un trésorier"
|
||||||
|
else:
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
if not user_request.has_perms(('cableur',)) and\
|
||||||
|
self.user != user_request:
|
||||||
|
return False, u"Vous ne pouvez pas afficher l'historique d'une\
|
||||||
|
facture d'un autre user que vous sans droit cableur"
|
||||||
|
else:
|
||||||
|
return True, None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.user) + ' ' + str(self.date)
|
return str(self.user) + ' ' + str(self.date)
|
||||||
|
|
||||||
|
@ -201,6 +235,21 @@ class Vente(models.Model):
|
||||||
self.update_cotisation()
|
self.update_cotisation()
|
||||||
super(Vente, self).save(*args, **kwargs)
|
super(Vente, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
def get_instance(venteid, *args, **kwargs):
|
||||||
|
return Vente.objects.get(pk=venteid)
|
||||||
|
|
||||||
|
def can_create(user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.name) + ' ' + str(self.facture)
|
return str(self.name) + ' ' + str(self.facture)
|
||||||
|
|
||||||
|
@ -277,6 +326,25 @@ class Article(models.Model):
|
||||||
"La durée est obligatoire si il s'agit d'une cotisation"
|
"La durée est obligatoire si il s'agit d'une cotisation"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_instance(articleid, *args, **kwargs):
|
||||||
|
return Article.objects.get(pk=articleid)
|
||||||
|
|
||||||
|
def can_create(user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit d'ajouter des articles"
|
||||||
|
|
||||||
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit d'éditer des articles"
|
||||||
|
|
||||||
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit de supprimer des articles"
|
||||||
|
|
||||||
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\
|
||||||
|
droit de voir des articles"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@ -287,6 +355,25 @@ class Banque(models.Model):
|
||||||
|
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
def get_instance(banqueid, *args, **kwargs):
|
||||||
|
return Banque.objects.get(pk=banqueid)
|
||||||
|
|
||||||
|
def can_create(user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\
|
||||||
|
droit d'ajouter des banques"
|
||||||
|
|
||||||
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit d'éditer des banques"
|
||||||
|
|
||||||
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit de supprimer des banques"
|
||||||
|
|
||||||
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\
|
||||||
|
droit de voir des banques"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@ -302,6 +389,25 @@ class Paiement(models.Model):
|
||||||
moyen = models.CharField(max_length=255)
|
moyen = models.CharField(max_length=255)
|
||||||
type_paiement = models.IntegerField(choices=PAYMENT_TYPES, default=0)
|
type_paiement = models.IntegerField(choices=PAYMENT_TYPES, default=0)
|
||||||
|
|
||||||
|
def get_instance(paiementid, *args, **kwargs):
|
||||||
|
return Paiement.objects.get(pk=paiementid)
|
||||||
|
|
||||||
|
def can_create(user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit d'ajouter des paiements"
|
||||||
|
|
||||||
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit d'éditer des paiements"
|
||||||
|
|
||||||
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\
|
||||||
|
droit de supprimer des paiements"
|
||||||
|
|
||||||
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\
|
||||||
|
droit de voir des paiements"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.moyen
|
return self.moyen
|
||||||
|
|
||||||
|
@ -334,6 +440,21 @@ class Cotisation(models.Model):
|
||||||
date_start = models.DateTimeField()
|
date_start = models.DateTimeField()
|
||||||
date_end = models.DateTimeField()
|
date_end = models.DateTimeField()
|
||||||
|
|
||||||
|
def get_instance(cotisationid, *args, **kwargs):
|
||||||
|
return Cotisations.objects.get(pk=cotisationid)
|
||||||
|
|
||||||
|
def can_create(user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
|
def can_view(self, user_request, *args, **kwargs):
|
||||||
|
return True, None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.vente)
|
return str(self.vente)
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ from users.models import User
|
||||||
from re2o.settings import LOGO_PATH
|
from re2o.settings import LOGO_PATH
|
||||||
from re2o import settings
|
from re2o import settings
|
||||||
from re2o.views import form
|
from re2o.views import form
|
||||||
from re2o.utils import SortTable
|
from re2o.utils import SortTable, can_create, can_edit
|
||||||
from preferences.models import OptionalUser, AssoOption, GeneralOption
|
from preferences.models import OptionalUser, AssoOption, GeneralOption
|
||||||
from .models import Facture, Article, Vente, Paiement, Banque
|
from .models import Facture, Article, Vente, Paiement, Banque
|
||||||
from .forms import (
|
from .forms import (
|
||||||
|
@ -65,8 +65,9 @@ from .tex import render_invoice
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('cableur')
|
@can_create(Facture)
|
||||||
def new_facture(request, userid):
|
@can_edit(User)
|
||||||
|
def new_facture(request, user, userid):
|
||||||
"""Creation d'une facture pour un user. Renvoie la liste des articles
|
"""Creation d'une facture pour un user. Renvoie la liste des articles
|
||||||
et crée des factures dans un formset. Utilise un peu de js coté template
|
et crée des factures dans un formset. Utilise un peu de js coté template
|
||||||
pour ajouter des articles.
|
pour ajouter des articles.
|
||||||
|
@ -74,11 +75,6 @@ def new_facture(request, userid):
|
||||||
enfin sauve la facture parente.
|
enfin sauve la facture parente.
|
||||||
TODO : simplifier cette fonction, déplacer l'intelligence coté models
|
TODO : simplifier cette fonction, déplacer l'intelligence coté models
|
||||||
Facture et Vente."""
|
Facture et Vente."""
|
||||||
try:
|
|
||||||
user = User.objects.get(pk=userid)
|
|
||||||
except User.DoesNotExist:
|
|
||||||
messages.error(request, u"Utilisateur inexistant")
|
|
||||||
return redirect(reverse('cotisations:index'))
|
|
||||||
facture = Facture(user=user)
|
facture = Facture(user=user)
|
||||||
# Le template a besoin de connaitre les articles pour le js
|
# Le template a besoin de connaitre les articles pour le js
|
||||||
article_list = Article.objects.filter(
|
article_list = Article.objects.filter(
|
||||||
|
@ -251,25 +247,16 @@ def facture_pdf(request, factureid):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('cableur')
|
@can_edit(Facture)
|
||||||
def edit_facture(request, factureid):
|
def edit_facture(request, facture, factureid):
|
||||||
"""Permet l'édition d'une facture. On peut y éditer les ventes
|
"""Permet l'édition d'une facture. On peut y éditer les ventes
|
||||||
déjà effectuer, ou rendre une facture invalide (non payées, chèque
|
déjà effectuer, ou rendre une facture invalide (non payées, chèque
|
||||||
en bois etc). Mets à jour les durée de cotisation attenantes"""
|
en bois etc). Mets à jour les durée de cotisation attenantes"""
|
||||||
try:
|
|
||||||
facture = Facture.objects.get(pk=factureid)
|
|
||||||
except Facture.DoesNotExist:
|
|
||||||
messages.error(request, u"Facture inexistante")
|
|
||||||
return redirect(reverse('cotisations:index'))
|
|
||||||
if request.user.has_perms(['tresorier']):
|
if request.user.has_perms(['tresorier']):
|
||||||
facture_form = TrezEditFactureForm(
|
facture_form = TrezEditFactureForm(
|
||||||
request.POST or None,
|
request.POST or None,
|
||||||
instance=facture
|
instance=facture
|
||||||
)
|
)
|
||||||
elif facture.control or not facture.valid:
|
|
||||||
messages.error(request, "Vous ne pouvez pas editer une facture\
|
|
||||||
controlée ou invalidée par le trésorier")
|
|
||||||
return redirect(reverse('cotisations:index'))
|
|
||||||
else:
|
else:
|
||||||
facture_form = EditFactureForm(request.POST or None, instance=facture)
|
facture_form = EditFactureForm(request.POST or None, instance=facture)
|
||||||
ventes_objects = Vente.objects.filter(facture=facture)
|
ventes_objects = Vente.objects.filter(facture=facture)
|
||||||
|
@ -355,7 +342,7 @@ def credit_solde(request, userid):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('tresorier')
|
@can_create(Article)
|
||||||
def add_article(request):
|
def add_article(request):
|
||||||
"""Ajoute un article. Champs : désignation,
|
"""Ajoute un article. Champs : désignation,
|
||||||
prix, est-ce une cotisation et si oui sa durée
|
prix, est-ce une cotisation et si oui sa durée
|
||||||
|
@ -376,15 +363,10 @@ def add_article(request):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('tresorier')
|
@can_edit(Article)
|
||||||
def edit_article(request, articleid):
|
def edit_article(request, article_instance, articleid):
|
||||||
"""Edition d'un article (designation, prix, etc)
|
"""Edition d'un article (designation, prix, etc)
|
||||||
Réservé au trésorier"""
|
Réservé au trésorier"""
|
||||||
try:
|
|
||||||
article_instance = Article.objects.get(pk=articleid)
|
|
||||||
except Article.DoesNotExist:
|
|
||||||
messages.error(request, u"Entrée inexistante")
|
|
||||||
return redirect(reverse('cotisations:index-article'))
|
|
||||||
article = ArticleForm(request.POST or None, instance=article_instance)
|
article = ArticleForm(request.POST or None, instance=article_instance)
|
||||||
if article.is_valid():
|
if article.is_valid():
|
||||||
with transaction.atomic(), reversion.create_revision():
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
@ -416,7 +398,7 @@ def del_article(request):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('tresorier')
|
@can_create(Paiement)
|
||||||
def add_paiement(request):
|
def add_paiement(request):
|
||||||
"""Ajoute un moyen de paiement. Relié aux factures
|
"""Ajoute un moyen de paiement. Relié aux factures
|
||||||
via foreign key"""
|
via foreign key"""
|
||||||
|
@ -432,14 +414,9 @@ def add_paiement(request):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('tresorier')
|
@can_edit(Paiement)
|
||||||
def edit_paiement(request, paiementid):
|
def edit_paiement(request, paiement_instance, paiementid):
|
||||||
"""Edition d'un moyen de paiement"""
|
"""Edition d'un moyen de paiement"""
|
||||||
try:
|
|
||||||
paiement_instance = Paiement.objects.get(pk=paiementid)
|
|
||||||
except Paiement.DoesNotExist:
|
|
||||||
messages.error(request, u"Entrée inexistante")
|
|
||||||
return redirect(reverse('cotisations:index-paiement'))
|
|
||||||
paiement = PaiementForm(request.POST or None, instance=paiement_instance)
|
paiement = PaiementForm(request.POST or None, instance=paiement_instance)
|
||||||
if paiement.is_valid():
|
if paiement.is_valid():
|
||||||
with transaction.atomic(), reversion.create_revision():
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
@ -483,7 +460,7 @@ def del_paiement(request):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('cableur')
|
@can_create(Banque)
|
||||||
def add_banque(request):
|
def add_banque(request):
|
||||||
"""Ajoute une banque à la liste des banques"""
|
"""Ajoute une banque à la liste des banques"""
|
||||||
banque = BanqueForm(request.POST or None)
|
banque = BanqueForm(request.POST or None)
|
||||||
|
@ -498,14 +475,9 @@ def add_banque(request):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('tresorier')
|
@can_edit(Banque)
|
||||||
def edit_banque(request, banqueid):
|
def edit_banque(request, banque_instance, banqueid):
|
||||||
"""Edite le nom d'une banque"""
|
"""Edite le nom d'une banque"""
|
||||||
try:
|
|
||||||
banque_instance = Banque.objects.get(pk=banqueid)
|
|
||||||
except Banque.DoesNotExist:
|
|
||||||
messages.error(request, u"Entrée inexistante")
|
|
||||||
return redirect(reverse('cotisations:index-banque'))
|
|
||||||
banque = BanqueForm(request.POST or None, instance=banque_instance)
|
banque = BanqueForm(request.POST or None, instance=banque_instance)
|
||||||
if banque.is_valid():
|
if banque.is_valid():
|
||||||
with transaction.atomic(), reversion.create_revision():
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
|
Loading…
Reference in a new issue