mirror of
https://github.com/nanoy42/coope
synced 2024-11-29 08:02:25 +00:00
Ajout des stats
This commit is contained in:
parent
6cb0982261
commit
33f6073f8d
4 changed files with 194 additions and 2 deletions
146
gestion/templates/gestion/stats.html
Normal file
146
gestion/templates/gestion/stats.html
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
{% block entete %}Stats{% endblock %}
|
||||||
|
{% block navbar%}
|
||||||
|
<ul>
|
||||||
|
<li><a href="#first">Stats association</a></li>
|
||||||
|
<li><a href="#second">Stats produits et catégories</a></li>
|
||||||
|
<li><a href="#third">Stats moyens de paiments et cotisations</a></li>
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<section id="first" class="main">
|
||||||
|
<header class="major">
|
||||||
|
<h2>Stats association</h2>
|
||||||
|
</header>
|
||||||
|
<div class="table-wrapper">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Champ</th>
|
||||||
|
<th>Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre d'adhérents</td>
|
||||||
|
<td>{{adherents|length}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de comptes</td>
|
||||||
|
<td>{{users.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de transactions</td>
|
||||||
|
<td>{{transactions.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Somme des soldes positifs</td>
|
||||||
|
<td>{{sum_positive_balance}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Somme des soldes positifs et négatifs</td>
|
||||||
|
<td>{{sum_balance}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre d'écoles</td>
|
||||||
|
<td>{{schools.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de groupes</td>
|
||||||
|
<td>{{groups.count}}</td>
|
||||||
|
</tr>
|
||||||
|
{% for group in groups %}
|
||||||
|
<tr>
|
||||||
|
<td>Nombre dans le groupe {{group}}</td>
|
||||||
|
<td>{{group.user_set.count}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
<tr>
|
||||||
|
<td>Nombre d'admins</td>
|
||||||
|
<td>{{admins.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de superusers</td>
|
||||||
|
<td>{{superusers.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre 8</td>
|
||||||
|
<td>8</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="second" class="main">
|
||||||
|
<header class="major">
|
||||||
|
<h2>Stats produits et catégories</h2>
|
||||||
|
</header>
|
||||||
|
<div class="table-wrapper">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Champ</th>
|
||||||
|
<th>Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de catégories</td>
|
||||||
|
<td>{{categories.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de catégories affichées</td>
|
||||||
|
<td>{{categories_shown.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de produits</td>
|
||||||
|
<td>{{products.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de produits actifs</td>
|
||||||
|
<td>{{active_products.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de fûts actifs</td>
|
||||||
|
<td>{{active_kegs.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de menus</td>
|
||||||
|
<td>{{menus.count}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section id="third" class="main">
|
||||||
|
<header class="major">
|
||||||
|
<h2>Stats moyens de paiement et cotisations</h2>
|
||||||
|
</header>
|
||||||
|
<div class="table-wrapper">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Champ</th>
|
||||||
|
<th>Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de moyens de paiement</td>
|
||||||
|
<td>{{payment_methods.count}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de types de cotisations</td>
|
||||||
|
<td>{{cotisations.count}}</td>
|
||||||
|
</tr>
|
||||||
|
{% for cotisation in cotisations %}
|
||||||
|
<tr>
|
||||||
|
<td>Nombre de {{cotisation}}</td>
|
||||||
|
<td>{{cotisation.cotisationhistory_set.count}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
|
@ -52,4 +52,5 @@ urlpatterns = [
|
||||||
path('categoryProfile/<int:pk>', views.categoryProfile, name="categoryProfile"),
|
path('categoryProfile/<int:pk>', views.categoryProfile, name="categoryProfile"),
|
||||||
path('categoriesList', views.categoriesList, name="categoriesList"),
|
path('categoriesList', views.categoriesList, name="categoriesList"),
|
||||||
path('categories-autocomplete', views.CategoriesAutocomplete.as_view(), name="categories-autocomplete"),
|
path('categories-autocomplete', views.CategoriesAutocomplete.as_view(), name="categories-autocomplete"),
|
||||||
|
path('stats', views.stats, name="stats"),
|
||||||
]
|
]
|
|
@ -2,7 +2,7 @@ from django.shortcuts import render, redirect, get_object_or_404
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.http import HttpResponse, Http404
|
from django.http import HttpResponse, Http404
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User, Group
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
@ -20,6 +20,7 @@ from decimal import *
|
||||||
|
|
||||||
from .forms import ReloadForm, RefundForm, ProductForm, KegForm, MenuForm, GestionForm, SearchMenuForm, SearchProductForm, SelectPositiveKegForm, SelectActiveKegForm, PinteForm, GenerateReleveForm, CategoryForm, SearchCategoryForm
|
from .forms import ReloadForm, RefundForm, ProductForm, KegForm, MenuForm, GestionForm, SearchMenuForm, SearchProductForm, SelectPositiveKegForm, SelectActiveKegForm, PinteForm, GenerateReleveForm, CategoryForm, SearchCategoryForm
|
||||||
from .models import Product, Menu, Keg, ConsumptionHistory, KegHistory, Consumption, MenuHistory, Pinte, Reload, Refund, Category
|
from .models import Product, Menu, Keg, ConsumptionHistory, KegHistory, Consumption, MenuHistory, Pinte, Reload, Refund, Category
|
||||||
|
from users.models import School
|
||||||
from preferences.models import PaymentMethod, GeneralPreferences, Cotisation
|
from preferences.models import PaymentMethod, GeneralPreferences, Cotisation
|
||||||
from users.models import CotisationHistory
|
from users.models import CotisationHistory
|
||||||
|
|
||||||
|
@ -956,3 +957,44 @@ class CategoriesAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
if self.q:
|
if self.q:
|
||||||
qs = qs.filter(name__icontains=self.q)
|
qs = qs.filter(name__icontains=self.q)
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
@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()
|
||||||
|
return render(request, "gestion/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,
|
||||||
|
})
|
|
@ -30,6 +30,9 @@
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if request.user.is_staff %}
|
{% if request.user.is_staff %}
|
||||||
|
<span class="tabulation2">
|
||||||
|
<i class="fa fa-chart-bar"></i> <a href="{% url 'gestion:stats' %}">Stats</a>
|
||||||
|
</span>
|
||||||
<span class="tabulation2">
|
<span class="tabulation2">
|
||||||
<i class="fa fa-business-time"></i> <a href="{% url 'gestion:gen_releve' %}">Comptabilité</a>
|
<i class="fa fa-business-time"></i> <a href="{% url 'gestion:gen_releve' %}">Comptabilité</a>
|
||||||
</span>
|
</span>
|
||||||
|
|
Loading…
Reference in a new issue