diff --git a/cotisations/models.py b/cotisations/models.py index 672e55ff..d8da0be7 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -110,11 +110,6 @@ class Facture(models.Model): return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\ droit de créer des factures" - def can_edit_all(user_request, *args, **kwargs): - if not user_request.has_perms(('cableur',)): - return False, u"Vous n'avez pas le droit d'éditer les factures" - return None - 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" @@ -125,11 +120,6 @@ class Facture(models.Model): else: return True, None - def can_delete_all(user_request, *args, **kwargs): - if not user_request.has_perms(('cableur',)): - return False, u"Vous n'avez pas le droit de supprimer une facture" - return 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" @@ -140,6 +130,8 @@ class Facture(models.Model): return True, None def can_view_all(user_request, *args, **kwargs): + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit de voir les factures" return True, None def can_view(self, user_request, *args, **kwargs): @@ -147,9 +139,17 @@ class Facture(models.Model): 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" + elif not self.valid: + return False, u"La facture est invalidée et ne peut être affichée" else: return True, None + def can_change_control(user_request, *args, **kwargs): + return user_request.has_perms(('tresorier',)), "Vous ne pouvez pas éditer le controle sans droit trésorier" + + def can_change_pdf(user_request, *args, **kwargs): + return user_request.has_perms(('tresorier',)), "Vous ne pouvez pas éditer une facture sans droit trésorier" + def __str__(self): return str(self.user) + ' ' + str(self.date) @@ -252,25 +252,41 @@ class Vente(models.Model): return Vente.objects.get(pk=venteid) def can_create(user_request, *args, **kwargs): - return True, None - - def can_edit_all(user_request, *args, **kwargs): + return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\ + droit de créer des ventes" return True, None def can_edit(self, user_request, *args, **kwargs): - return True, None - - def can_delete_all(user_request, *args, **kwargs): - return True, None + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit d'éditer les ventes" + elif not user_request.has_perms(('tresorier',)) and\ + (self.facture.control or not self.facture.valid): + return False, u"Vous n'avez pas le droit d'éditer une vente\ + controlée ou invalidée par un trésorier" + else: + return True, None def can_delete(self, user_request, *args, **kwargs): - return True, None + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit de supprimer une vente" + if self.facture.control or not self.facture.valid: + return False, u"Vous ne pouvez pas supprimer une vente\ + contrôlée ou invalidée par un trésorier" + else: + return True, None def can_view_all(user_request, *args, **kwargs): + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit de voir les ventes" return True, None def can_view(self, user_request, *args, **kwargs): - return True, None + if not user_request.has_perms(('cableur',)) and\ + self.facture.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): return str(self.name) + ' ' + str(self.facture) @@ -355,18 +371,10 @@ class Article(models.Model): return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ droit d'ajouter des articles" - def can_edit_all(user_request, *args, **kwargs): - return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ - droit d'éditer 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_all(user_request, *args, **kwargs): - return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ - droit de supprimer 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" @@ -396,18 +404,10 @@ class Banque(models.Model): return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\ droit d'ajouter des banques" - def can_edit_all(user_request, *args, **kwargs): - return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ - droit d'éditer 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_all(user_request, *args, **kwargs): - return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ - droit de supprimer 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" @@ -442,18 +442,10 @@ class Paiement(models.Model): return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ droit d'ajouter des paiements" - def can_edit_all(user_request, *args, **kwargs): - return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ - droit d'éditer 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_all(user_request, *args, **kwargs): - return user_request.has_perms(('tresorier',)), u"Vous n'avez pas le\ - droit de supprimer 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" @@ -502,25 +494,41 @@ class Cotisation(models.Model): return Cotisations.objects.get(pk=cotisationid) def can_create(user_request, *args, **kwargs): - return True, None - - def can_edit_all(user_request, *args, **kwargs): + return user_request.has_perms(('cableur',)), u"Vous n'avez pas le\ + droit de créer des cotisations" return True, None def can_edit(self, user_request, *args, **kwargs): - return True, None - - def can_delete_all(user_request, *args, **kwargs): - return True, None + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit d'éditer les cotisations" + elif not user_request.has_perms(('tresorier',)) and\ + (self.vente.facture.control or not self.vente.facture.valid): + return False, u"Vous n'avez pas le droit d'éditer une cotisation\ + controlée ou invalidée par un trésorier" + else: + return True, None def can_delete(self, user_request, *args, **kwargs): - return True, None + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit de supprimer une cotisations" + if self.vente.facture.control or not self.vente.facture.valid: + return False, u"Vous ne pouvez pas supprimer une cotisations\ + contrôlée ou invalidée par un trésorier" + else: + return True, None def can_view_all(user_request, *args, **kwargs): + if not user_request.has_perms(('cableur',)): + return False, u"Vous n'avez pas le droit de voir les cotisations" return True, None def can_view(self, user_request, *args, **kwargs): - return True, None + if not user_request.has_perms(('cableur',)) and\ + self.vente.facture.user != user_request: + return False, u"Vous ne pouvez pas afficher l'historique d'une\ + cotisation d'un autre user que vous sans droit cableur" + else: + return True, None def __str__(self): return str(self.vente) diff --git a/cotisations/templates/cotisations/aff_article.html b/cotisations/templates/cotisations/aff_article.html index 3a0b21f6..f4880caf 100644 --- a/cotisations/templates/cotisations/aff_article.html +++ b/cotisations/templates/cotisations/aff_article.html @@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. {% endcomment %} +{% load acl %} + @@ -41,11 +43,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ article.duration }} {{ article.type_user }} - {% if is_trez %} + {% can_edit article %} - {% endif %} + {% acl_end %} diff --git a/cotisations/templates/cotisations/aff_banque.html b/cotisations/templates/cotisations/aff_banque.html index fd962f1f..f31bf55a 100644 --- a/cotisations/templates/cotisations/aff_banque.html +++ b/cotisations/templates/cotisations/aff_banque.html @@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. {% endcomment %} +{% load acl %} + @@ -33,11 +35,11 @@ with this program; if not, write to the Free Software Foundation, Inc., - {% if is_cableur %} - {% endif %}
{{ banque.name }} - {% if is_trez %} + {% can_edit banque %} - {% endif %} + {% acl_end %} diff --git a/cotisations/templates/cotisations/aff_cotisations.html b/cotisations/templates/cotisations/aff_cotisations.html index 34efd63d..09a8f55d 100644 --- a/cotisations/templates/cotisations/aff_cotisations.html +++ b/cotisations/templates/cotisations/aff_cotisations.html @@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. {% endcomment %} +{% load acl %} + {% if facture_list.paginator %} {% include "pagination.html" with list=facture_list %} {% endif %} @@ -47,7 +49,6 @@ with this program; if not, write to the Free Software Foundation, Inc., {{ facture.paiement }} {{ facture.date }} {{ facture.id }} {% if facture.valid %} diff --git a/cotisations/templates/cotisations/aff_paiement.html b/cotisations/templates/cotisations/aff_paiement.html index 5cf8d176..f2f9abe3 100644 --- a/cotisations/templates/cotisations/aff_paiement.html +++ b/cotisations/templates/cotisations/aff_paiement.html @@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. {% endcomment %} +{% load acl %} + @@ -33,11 +35,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ paiement.moyen }} - {% if is_trez %} - + {% can_edit paiement %} + - {% endif %} + {% acl_end %} diff --git a/cotisations/templates/cotisations/index_article.html b/cotisations/templates/cotisations/index_article.html index ee9f3db1..edc71c09 100644 --- a/cotisations/templates/cotisations/index_article.html +++ b/cotisations/templates/cotisations/index_article.html @@ -24,15 +24,16 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endcomment %} {% load bootstrap3 %} +{% load acl %} {% block title %}Articles{% endblock %} {% block content %}

Liste des types d'articles

- {% if is_trez %} + {% can_create Article %} Ajouter un type d'articles + {% acl_end %} Supprimer un ou plusieurs types d'articles - {% endif %} {% include "cotisations/aff_article.html" with article_list=article_list %}

diff --git a/cotisations/templates/cotisations/index_banque.html b/cotisations/templates/cotisations/index_banque.html index 142c163f..dda89843 100644 --- a/cotisations/templates/cotisations/index_banque.html +++ b/cotisations/templates/cotisations/index_banque.html @@ -24,15 +24,16 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endcomment %} {% load bootstrap3 %} +{% load acl %} {% block title %}Banques{% endblock %} {% block content %}

Liste des banques

+ {% can_create Banque %} Ajouter une banque - {% if is_trez %} + {% acl_end %} Supprimer une ou plusieurs banques - {% endif %} {% include "cotisations/aff_banque.html" with banque_list=banque_list %}

diff --git a/cotisations/templates/cotisations/index_paiement.html b/cotisations/templates/cotisations/index_paiement.html index d2734e46..a27cb824 100644 --- a/cotisations/templates/cotisations/index_paiement.html +++ b/cotisations/templates/cotisations/index_paiement.html @@ -24,15 +24,16 @@ with this program; if not, write to the Free Software Foundation, Inc., {% endcomment %} {% load bootstrap3 %} +{% load acl %} {% block title %}Paiements{% endblock %} {% block content %}

Liste des types de paiements

- {% if is_trez %} + {% can_create Paiement %} Ajouter un type de paiement + {% acl_end %} Supprimer un ou plusieurs types de paiements - {% endif %} {% include "cotisations/aff_paiement.html" with paiement_list=paiement_list %}

diff --git a/cotisations/templates/cotisations/sidebar.html b/cotisations/templates/cotisations/sidebar.html index 1860b1ee..c7293810 100644 --- a/cotisations/templates/cotisations/sidebar.html +++ b/cotisations/templates/cotisations/sidebar.html @@ -23,32 +23,41 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. {% endcomment %} +{% load acl %} {% block sidebar %} - {% if is_trez %} + {% can_create Facture %} Créer une facture + {% acl_end %} Contrôler les factures - {% endif %} + {% can_view_all Facture %} Factures + {% acl_end %} + {% can_view_all Article %} Articles en vente + {% acl_end %} + {% can_view_all Banque %} Banques + {% acl_end %} + {% can_view_all Paiement %} Moyens de paiement + {% acl_end %} {% endblock %} diff --git a/cotisations/views.py b/cotisations/views.py index 06d3dc9d..c5a63f51 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -49,7 +49,9 @@ from re2o.utils import ( can_edit, can_delete, can_view, - can_delete_set + can_view_all, + can_delete_set, + can_change, ) from preferences.models import OptionalUser, AssoOption, GeneralOption from .models import Facture, Article, Vente, Paiement, Banque @@ -166,7 +168,7 @@ def new_facture(request, user, userid): @login_required -@permission_required('tresorier') +@can_change(Facture, ['pdf']) def new_facture_pdf(request): """Permet de générer un pdf d'une facture. Réservée au trésorier, permet d'emettre des factures sans objet @@ -206,31 +208,13 @@ def new_facture_pdf(request): @login_required -def facture_pdf(request, factureid): +@can_view(Facture) +def facture_pdf(request, facture, factureid): """Affiche en pdf une facture. Cree une ligne par Vente de la facture, et génére une facture avec le total, le moyen de paiement, l'adresse de l'adhérent, etc. Réservée à self pour un user sans droits, les droits cableurs permettent d'afficher toute facture""" - try: - facture = Facture.objects.get(pk=factureid) - except Facture.DoesNotExist: - messages.error(request, u"Facture inexistante") - return redirect(reverse('cotisations:index')) - if not request.user.has_perms(('cableur',))\ - and facture.user != request.user: - messages.error(request, "Vous ne pouvez pas afficher une facture ne vous\ - appartenant pas sans droit cableur") - return redirect(reverse( - 'users:profil', - kwargs={'userid': str(request.user.id)} - )) - if not facture.valid: - messages.error(request, "Vous ne pouvez pas afficher\ - une facture non valide") - return redirect(reverse( - 'users:profil', - kwargs={'userid': str(request.user.id)} - )) + ventes_objects = Vente.objects.all().filter(facture=facture) ventes = [] options, _created = AssoOption.objects.get_or_create() @@ -308,14 +292,10 @@ def del_facture(request, facture, factureid): @login_required -@permission_required('cableur') -def credit_solde(request, userid): +@can_create(Facture) +@can_edit(User) +def credit_solde(request, user, userid): """ Credit ou débit de solde """ - try: - user = User.objects.get(pk=userid) - except User.DoesNotExist: - messages.error(request, u"Utilisateur inexistant") - return redirect(reverse('cotisations:index')) facture = CreditSoldeForm(request.POST or None) if facture.is_valid(): facture_instance = facture.save(commit=False) @@ -513,7 +493,8 @@ def del_banque(request, instances): @login_required -@permission_required('tresorier') +@can_view_all(Facture) +@can_change(Facture, ['control']) def control(request): """Pour le trésorier, vue pour controler en masse les factures.Case à cocher, pratique""" @@ -553,7 +534,7 @@ def control(request): @login_required -@permission_required('cableur') +@can_view_all(Article) def index_article(request): """Affiche l'ensemble des articles en vente""" article_list = Article.objects.order_by('name') @@ -563,7 +544,7 @@ def index_article(request): @login_required -@permission_required('cableur') +@can_view_all(Paiement) def index_paiement(request): """Affiche l'ensemble des moyens de paiement en vente""" paiement_list = Paiement.objects.order_by('moyen') @@ -573,7 +554,7 @@ def index_paiement(request): @login_required -@permission_required('cableur') +@can_view_all(Banque) def index_banque(request): """Affiche l'ensemble des banques""" banque_list = Banque.objects.order_by('name') @@ -583,7 +564,7 @@ def index_banque(request): @login_required -@permission_required('cableur') +@can_view_all(Facture) def index(request): """Affiche l'ensemble des factures, pour les cableurs et +""" options, _created = GeneralOption.objects.get_or_create()