2019-07-03 16:41:41 +00:00
|
|
|
import os
|
|
|
|
|
2019-11-13 14:43:47 +00:00
|
|
|
from django.shortcuts import redirect, render, get_object_or_404
|
2018-09-01 19:57:09 +00:00
|
|
|
from django.urls import reverse
|
2019-07-03 16:41:41 +00:00
|
|
|
from django.conf import settings
|
2019-08-27 16:25:53 +00:00
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from django.contrib.auth.models import User, Group
|
2018-09-01 19:57:09 +00:00
|
|
|
|
2019-08-27 16:25:53 +00:00
|
|
|
from preferences.models import GeneralPreferences, PaymentMethod, Cotisation
|
|
|
|
from gestion.models import Keg, ConsumptionHistory, Category, Product, Menu
|
2019-11-13 14:43:47 +00:00
|
|
|
from users.models import School, Profile
|
2019-08-27 16:25:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
from .acl import active_required, admin_required
|
2019-01-19 22:39:48 +00:00
|
|
|
|
2018-09-01 19:57:09 +00:00
|
|
|
def home(request):
|
2019-02-28 12:18:41 +00:00
|
|
|
"""
|
|
|
|
Redirect the user either to :func:`~gestion.views.manage` view (if connected and staff) or :func:`~coopeV3.views.homepage` view (if connected and not staff) or :func:`~users.views.loginView` view (if not connected).
|
|
|
|
"""
|
2018-10-05 22:03:02 +00:00
|
|
|
if request.user.is_authenticated:
|
2018-09-01 19:57:09 +00:00
|
|
|
if(request.user.has_perm('gestion.can_manage')):
|
|
|
|
return redirect(reverse('gestion:manage'))
|
|
|
|
else:
|
2019-01-19 22:39:48 +00:00
|
|
|
return redirect(reverse('homepage'))
|
2018-09-01 19:57:09 +00:00
|
|
|
else:
|
|
|
|
return redirect(reverse('users:login'))
|
2019-01-19 22:39:48 +00:00
|
|
|
|
|
|
|
def homepage(request):
|
2019-02-28 12:18:41 +00:00
|
|
|
"""
|
|
|
|
View which displays the :attr:`~preferences.models.GeneralPreferences.home_text` and active :class:`Kegs <gestion.models.Keg>`.
|
|
|
|
"""
|
2019-01-19 22:39:48 +00:00
|
|
|
gp, _ = GeneralPreferences.objects.get_or_create(pk=1)
|
|
|
|
kegs = Keg.objects.filter(is_active=True)
|
|
|
|
return render(request, "home.html", {"home_text": gp.home_text, "kegs": kegs})
|
2019-01-20 08:28:11 +00:00
|
|
|
|
|
|
|
def coope_runner(request):
|
2019-02-28 12:18:41 +00:00
|
|
|
"""
|
|
|
|
Just an easter egg
|
|
|
|
"""
|
2019-01-20 08:28:11 +00:00
|
|
|
return render(request, "coope-runner.html")
|
2019-07-03 16:41:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
def about(request):
|
|
|
|
"""
|
|
|
|
A page about the project
|
|
|
|
"""
|
|
|
|
contributors = []
|
2019-08-28 10:34:11 +00:00
|
|
|
try:
|
|
|
|
with open(settings.BASE_DIR + "/contributors.txt", "r") as f:
|
|
|
|
for line in f:
|
|
|
|
contributors.append((line[:line.find('(')], int(line[(line.find('(') + 1):line.find(')')])))
|
|
|
|
except:
|
|
|
|
pass
|
2019-07-03 16:41:41 +00:00
|
|
|
license = []
|
|
|
|
with open(settings.BASE_DIR + "/LICENSE", "r") as f:
|
|
|
|
for line in f:
|
|
|
|
license.append(line)
|
2019-08-27 16:25:53 +00:00
|
|
|
return render(request, "about.html", {"contributors": contributors, "license": license})
|
|
|
|
|
|
|
|
@active_required
|
|
|
|
@login_required
|
|
|
|
@admin_required
|
|
|
|
def stats(request):
|
|
|
|
users = User.objects.all()
|
|
|
|
adherents = [x for x in users if x.profile.is_adherent]
|
|
|
|
transactions = ConsumptionHistory.objects.all()
|
|
|
|
categories = Category.objects.all()
|
|
|
|
categories_shown = Category.objects.exclude(order=0)
|
|
|
|
products = Product.objects.all()
|
|
|
|
active_products = Product.objects.filter(is_active=True)
|
|
|
|
active_kegs = Keg.objects.filter(is_active=True)
|
|
|
|
sum_positive_balance = sum([x.profile.balance for x in users if x.profile.balance > 0])
|
|
|
|
sum_balance = sum([x.profile.balance for x in users])
|
|
|
|
schools = School.objects.all()
|
|
|
|
groups = Group.objects.all()
|
|
|
|
admins = User.objects.filter(is_staff=True)
|
|
|
|
superusers = User.objects.filter(is_superuser=True)
|
|
|
|
menus = Menu.objects.all()
|
|
|
|
payment_methods = PaymentMethod.objects.all()
|
|
|
|
cotisations = Cotisation.objects.all()
|
|
|
|
gp,_ = GeneralPreferences.objects.get_or_create(pk=1)
|
|
|
|
nb_quotes = len(gp.global_message.split("\n"))
|
|
|
|
return render(request, "stats.html", {
|
|
|
|
"users": users,
|
|
|
|
"adherents": adherents,
|
|
|
|
"transactions": transactions,
|
|
|
|
"categories": categories,
|
|
|
|
"categories_shown": categories_shown,
|
|
|
|
"products": products,
|
|
|
|
"active_products": active_products,
|
|
|
|
"active_kegs": active_kegs,
|
|
|
|
"sum_positive_balance": sum_positive_balance,
|
|
|
|
"sum_balance": sum_balance,
|
|
|
|
"schools": schools,
|
|
|
|
"groups": groups,
|
|
|
|
"admins": admins,
|
|
|
|
"superusers": superusers,
|
|
|
|
"menus": menus,
|
|
|
|
"payment_methods": payment_methods,
|
|
|
|
"cotisations": cotisations,
|
|
|
|
"nb_quotes": nb_quotes,
|
2019-11-13 14:43:47 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
def wall_of_fame(request, pk):
|
|
|
|
user = get_object_or_404(User, pk=pk)
|
|
|
|
other_famous = Profile.objects.filter(debit__gte=1000)
|
|
|
|
return render(request, "wall_of_fame.html", {"user": user, "other_famous": other_famous})
|