From ca6c938e20442f19160d335627c530270d4b5cf8 Mon Sep 17 00:00:00 2001 From: nanoy Date: Thu, 22 Nov 2018 22:52:24 +0100 Subject: [PATCH] Commit --- coopeV3/acl.py | 66 +++++++++++++++++ gestion/templates/gestion/annual_ranking.html | 24 ++++++ .../templates/gestion/product_profile.html | 24 ++++++ gestion/templates/gestion/ranking.html | 73 +++++++++++++++++++ .../migrations/0002_auto_20181009_1119.py | 33 +++++++++ users/migrations/0002_auto_20181009_1119.py | 18 +++++ users/templates/users/allReloads.html | 55 ++++++++++++++ 7 files changed, 293 insertions(+) create mode 100644 coopeV3/acl.py create mode 100644 gestion/templates/gestion/annual_ranking.html create mode 100644 gestion/templates/gestion/product_profile.html create mode 100644 gestion/templates/gestion/ranking.html create mode 100644 preferences/migrations/0002_auto_20181009_1119.py create mode 100644 users/migrations/0002_auto_20181009_1119.py create mode 100644 users/templates/users/allReloads.html diff --git a/coopeV3/acl.py b/coopeV3/acl.py new file mode 100644 index 0000000..c1b38f1 --- /dev/null +++ b/coopeV3/acl.py @@ -0,0 +1,66 @@ +from django.contrib.auth.decorators import user_passes_test +from django.contrib.auth.models import User +from django.shortcuts import redirect, get_object_or_404 +from django.urls import reverse + +from preferences.models import GeneralPreferences + +def admin_required(view): + """ + Test if the user is staff + """ + return user_passes_test(view, lambda u:u.is_staff) + +def superuser_required(view): + """ + Test if the user is superuser + """ + return user_passes_test(view, lambda u:u.is_superuser) + +def self_or_has_perm(pkName, perm): + """ + Test if the user is the request user (pk) or has perm permission + """ + def decorator(view): + def wrapper(request, *args, **kwargs): + user = get_object_or_404(User, pk=kwargs[pkName]) + if(user == request.user or request.user.has_perm(perm)): + return view(request, *args, **kwargs) + else: + return redirect(reverse('users:login')) + return wrapper + return decorator + +def active_required(view): + def wrapper(request, *args, **kwargs): + gp,_ = GeneralPreferences.objects.get_or_create(pk=1) + if(not gp.is_active): + return redirect(reverse('preferences:inactif')) + return view(request, *args, **kwargs) + return wrapper + +def acl_or(*perms): + def decorator(view): + def wrapper(request,*args, **kwargs): + can_pass = request.user.has_perm(perms[0]) + for perm in perms: + can_pass = can_pass or request.user.has_perm(perm) + if can_pass: + return view(request, *args, **kwargs) + else: + return redirect(reverse('users:login')) + return wrapper + return decorator + +def acl_and(*perms): + def decorator(view): + def wrapper(request,*args, **kwargs): + can_pass = request.user.has_perm(perms[0]) + for perm in perms: + can_pass = can_pass and request.user.has_perm(perm) + if can_pass: + return view(request, *args, **kwargs) + else: + return redirect(reverse('users:login')) + return wrapper + return decorator \ No newline at end of file diff --git a/gestion/templates/gestion/annual_ranking.html b/gestion/templates/gestion/annual_ranking.html new file mode 100644 index 0000000..e3ea586 --- /dev/null +++ b/gestion/templates/gestion/annual_ranking.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{%load static %} +{%block entete%}

Classement

{%endblock%} +{% block nav %} + +{% endblock %} +{% block content %} +
+
+
+
+

Dezo pas dezo

+
+
+
+ Dû à des problèmes techniques, cet onglet n'est actuellement pas disponible. +
+
+
+
+
+{%endblock%} \ No newline at end of file diff --git a/gestion/templates/gestion/product_profile.html b/gestion/templates/gestion/product_profile.html new file mode 100644 index 0000000..acc131b --- /dev/null +++ b/gestion/templates/gestion/product_profile.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{% block entete %}

Gestion des utilisateurs

{% endblock %} +{% block navbar %} + +{% endblock %} +{% block content %} +
+
+

Général

+
+ (Dés)Activer Modifier Supprimer
+ Nom : {{ product.name }}
+ Prix de vente : {{ product.amount }}€
+ Stock en soute : {{ product.stockHold }}
+ Stock au bar : {{ product.stockBar }}
+ Code Barre : {{ product.barcode }}
+ Catégorie : {{ product.category }}
+ Actif : {{ product.active }}
+ Dégré : {{ product.deg }}
+ Volume : {{ product.volume }}cl
+
+{% endblock %} diff --git a/gestion/templates/gestion/ranking.html b/gestion/templates/gestion/ranking.html new file mode 100644 index 0000000..e7de54b --- /dev/null +++ b/gestion/templates/gestion/ranking.html @@ -0,0 +1,73 @@ +{% extends "base.html" %} +{%load static %} +{%block entete%}

Classement

{%endblock%} +{% block nav %} + +{% endblock %} +{% block content %} +
+
+
+
+

Meilleurs consommateurs (débit)

+
+
+
+ + + + + + + + + + {%for customer in bestBuyers%} + + + + + + {%endfor%} + +
PlacePseudoDebit
{{ forloop.counter }}{{ customer.username }}{{ customer.profile.debit }}€
+
+
+
+
+
+
+
+
+
+

Meilleurs consommateurs (alcool)

+
+
+
+ + + + + + + + + + {% for customer in bestDrinkers %} + + + + + + {%endfor%} + +
PlacePseudoNombre de kilos ingérés
{{ forloop.counter }}{{ customer.0.username }}{{ customer.1 }}
+
+
+
+
+
+{%endblock%} \ No newline at end of file diff --git a/preferences/migrations/0002_auto_20181009_1119.py b/preferences/migrations/0002_auto_20181009_1119.py new file mode 100644 index 0000000..8bcfa51 --- /dev/null +++ b/preferences/migrations/0002_auto_20181009_1119.py @@ -0,0 +1,33 @@ +# Generated by Django 2.1 on 2018-10-09 09:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('preferences', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='paymentmethod', + name='is_usable_in_reload', + field=models.BooleanField(default=True, verbose_name='Rechargements ?'), + ), + migrations.AlterField( + model_name='paymentmethod', + name='affect_balance', + field=models.BooleanField(default=False, verbose_name='Affecte le solde'), + ), + migrations.AlterField( + model_name='paymentmethod', + name='is_active', + field=models.BooleanField(default=True, verbose_name='Actif'), + ), + migrations.AlterField( + model_name='paymentmethod', + name='is_usable_in_cotisation', + field=models.BooleanField(default=True, verbose_name='Cotisations ?'), + ), + ] diff --git a/users/migrations/0002_auto_20181009_1119.py b/users/migrations/0002_auto_20181009_1119.py new file mode 100644 index 0000000..768d95e --- /dev/null +++ b/users/migrations/0002_auto_20181009_1119.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1 on 2018-10-09 09:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='school', + name='name', + field=models.CharField(max_length=255, verbose_name='Nom'), + ), + ] diff --git a/users/templates/users/allReloads.html b/users/templates/users/allReloads.html new file mode 100644 index 0000000..2b0895e --- /dev/null +++ b/users/templates/users/allReloads.html @@ -0,0 +1,55 @@ +{% extends "base.html" %} +{% load static %} +{% block entete %}

Rechargements

{%endblock%} + +{% block navbar %} + +{% endblock %} +{% block content %} +
+
+

Rechargements ({{user}})

+
+
+
+ + + + + + + + + + {% for reload in reloads %} + + + + + + {% endfor %} + +
MontantType de RechargementDate
{{reload.amount}}€{{reload.PaymentMethod}}{{reload.date}}
+
+ +
+
+{%endblock%}