diff --git a/core/templates/core/user_stats.jinja b/core/templates/core/user_stats.jinja
index 69692ff1..a481ca99 100644
--- a/core/templates/core/user_stats.jinja
+++ b/core/templates/core/user_stats.jinja
@@ -6,20 +6,37 @@
{% block content %}
{% if profile.permanencies %}
+
{% trans %}Permanencies{% endtrans %}
-
{% trans %}Permanencies{% endtrans %}
Total: {{ total_perm_time }}
Foyer: {{ total_foyer_time }}
MDE: {{ total_mde_time }}
La Gommette: {{ total_gommette_time }}
{% endif %}
+ {% trans %}Buyings{% endtrans %}
-
{% trans %}Buyings{% endtrans %}
Foyer: {{ total_foyer_buyings }} €
MDE: {{ total_mde_buyings }} €
La Gommette: {{ total_gommette_buyings }} €
+ {% trans %}Product top 10{% endtrans %}
+
+
+
+ {% trans %}Product{% endtrans %} |
+ {% trans %}Quantity{% endtrans %} |
+
+
+
+ {% for p in top_product %}
+
+ {{ p['product__name'] }} |
+ {{ p['product_sum'] }} |
+
+ {% endfor %}
+
+
{% endblock %}
diff --git a/core/views/user.py b/core/views/user.py
index 7748c86f..f5eca7b3 100644
--- a/core/views/user.py
+++ b/core/views/user.py
@@ -222,7 +222,8 @@ class UserStatsView(UserTabsMixin, CanViewMixin, DetailView):
def get_context_data(self, **kwargs):
kwargs = super(UserStatsView, self).get_context_data(**kwargs)
- from counter.models import Counter
+ from counter.models import Counter, Product, Selling
+ from django.db.models import Sum
foyer = Counter.objects.filter(name="Foyer").first()
mde = Counter.objects.filter(name="MDE").first()
gommette = Counter.objects.filter(name="La Gommette").first()
@@ -237,6 +238,8 @@ class UserStatsView(UserTabsMixin, CanViewMixin, DetailView):
date__gte=semester_start)])
kwargs['total_gommette_buyings'] = sum([b.unit_price*b.quantity for b in
self.object.customer.buyings.filter(counter=gommette, date__gte=semester_start)])
+ kwargs['top_product'] = self.object.customer.buyings.values('product__name').annotate(
+ product_sum=Sum('quantity')).exclude(product_sum=None).order_by('-product_sum').all()[:10]
return kwargs
class UserMiniView(CanViewMixin, DetailView):
diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo
index 0cbe6f47..c6af0593 100644
Binary files a/locale/fr/LC_MESSAGES/django.mo and b/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index b4bed85c..7737d0cc 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-09-21 12:42+0200\n"
+"POT-Creation-Date: 2016-09-22 11:08+0200\n"
"PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia \n"
"Language-Team: AE info \n"
@@ -85,12 +85,12 @@ msgstr "Compte club"
msgid "%(club_account)s on %(bank_account)s"
msgstr "%(club_account)s sur %(bank_account)s"
-#: accounting/models.py:130 club/models.py:146 counter/models.py:330
+#: accounting/models.py:130 club/models.py:146 counter/models.py:331
#: launderette/models.py:122
msgid "start date"
msgstr "date de début"
-#: accounting/models.py:131 club/models.py:147 counter/models.py:331
+#: accounting/models.py:131 club/models.py:147 counter/models.py:332
msgid "end date"
msgstr "date de fin"
@@ -103,7 +103,7 @@ msgid "club account"
msgstr "compte club"
#: accounting/models.py:135 accounting/models.py:178 counter/models.py:25
-#: counter/models.py:218
+#: counter/models.py:219
msgid "amount"
msgstr "montant"
@@ -124,16 +124,16 @@ msgid "journal"
msgstr "classeur"
#: accounting/models.py:179 core/models.py:461 core/models.py:739
-#: counter/models.py:221 counter/models.py:264 counter/models.py:347
+#: counter/models.py:222 counter/models.py:265 counter/models.py:348
#: eboutic/models.py:15 eboutic/models.py:48
msgid "date"
msgstr "date"
-#: accounting/models.py:180 counter/models.py:348
+#: accounting/models.py:180 counter/models.py:349
msgid "comment"
msgstr "commentaire"
-#: accounting/models.py:181 counter/models.py:222 counter/models.py:265
+#: accounting/models.py:181 counter/models.py:223 counter/models.py:266
#: subscription/models.py:57
msgid "payment method"
msgstr "méthode de paiement"
@@ -232,7 +232,7 @@ msgstr "code"
msgid "An accounting type code contains only numbers"
msgstr "Un code comptable ne contient que des numéros"
-#: accounting/models.py:282 accounting/models.py:308 counter/models.py:256
+#: accounting/models.py:282 accounting/models.py:308 counter/models.py:257
msgid "label"
msgstr "intitulé"
@@ -272,7 +272,7 @@ msgstr "Liste des types comptable"
#: accounting/templates/accounting/journal_details.jinja:9
#: accounting/templates/accounting/operation_edit.jinja:9
#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9
-#: core/templates/core/user_tools.jinja:41
+#: core/templates/core/user_tools.jinja:42
msgid "Accounting"
msgstr "Comptabilité"
@@ -291,7 +291,7 @@ msgstr "Il n'y a pas de types comptable dans ce site web."
#: accounting/templates/accounting/bank_account_details.jinja:4
#: accounting/templates/accounting/bank_account_details.jinja:13
-#: core/templates/core/user_tools.jinja:48
+#: core/templates/core/user_tools.jinja:49
msgid "Bank account: "
msgstr "Compte en banque : "
@@ -327,7 +327,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/club_account_details.jinja:53
#: accounting/templates/accounting/journal_details.jinja:66 club/views.py:52
#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31
-#: core/templates/core/user_tools.jinja:34 core/views/user.py:151
+#: core/templates/core/user_tools.jinja:35 core/views/user.py:151
#: counter/templates/counter/counter_list.jinja:17
#: counter/templates/counter/counter_list.jinja:32
#: counter/templates/counter/counter_list.jinja:47
@@ -545,7 +545,7 @@ msgstr "Vous ne pouvez pas faire de boucles dans les clubs"
msgid "A club with that unix_name already exists"
msgstr "Un club avec ce nom UNIX existe déjà."
-#: club/models.py:144 counter/models.py:328 counter/models.py:345
+#: club/models.py:144 counter/models.py:329 counter/models.py:346
#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89
#: launderette/models.py:126
msgid "user"
@@ -675,6 +675,7 @@ msgstr "Intitulé"
#: club/templates/club/club_sellings.jinja:23
#: core/templates/core/user_account_detail.jinja:50
+#: core/templates/core/user_stats.jinja:28
msgid "Quantity"
msgstr "Quantité"
@@ -693,7 +694,7 @@ msgid "Payment method"
msgstr "Méthode de paiement"
#: club/templates/club/club_tools.jinja:4
-#: core/templates/core/user_tools.jinja:60
+#: core/templates/core/user_tools.jinja:61
msgid "Club tools"
msgstr "Outils club"
@@ -735,7 +736,7 @@ msgstr "Date de début"
msgid "End date"
msgstr "Date de fin"
-#: club/views.py:172
+#: club/views.py:172 core/templates/core/user_stats.jinja:27
msgid "Product"
msgstr "Produit"
@@ -1019,8 +1020,8 @@ msgid "A user with that username already exists"
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
#: core/models.py:396 core/templates/core/macros.jinja:17
-#: core/templates/core/user_detail.jinja:15
-#: core/templates/core/user_detail.jinja:17
+#: core/templates/core/user_detail.jinja:14
+#: core/templates/core/user_detail.jinja:16
#: core/templates/core/user_edit.jinja:16
msgid "Profile"
msgstr "Profil"
@@ -1348,12 +1349,12 @@ msgid "Lost password?"
msgstr "Mot de passe perdu ?"
#: core/templates/core/macros.jinja:27
-#: core/templates/core/user_detail.jinja:28
+#: core/templates/core/user_detail.jinja:27
msgid "Born: "
msgstr "Né le : "
#: core/templates/core/macros.jinja:31
-#: core/templates/core/user_detail.jinja:49
+#: core/templates/core/user_detail.jinja:48
msgid "Promo: "
msgstr "Promo : "
@@ -1623,25 +1624,25 @@ msgstr "Articles"
msgid "%(user_name)s's profile"
msgstr "Profil de %(user_name)s"
-#: core/templates/core/user_detail.jinja:34
+#: core/templates/core/user_detail.jinja:33
msgid "Option: "
msgstr "Filière : "
-#: core/templates/core/user_detail.jinja:59
+#: core/templates/core/user_detail.jinja:58
#, python-format
msgid "Subscribed until %(subscription_end)s"
msgstr "Cotisant jusqu'au %(subscription_end)s"
-#: core/templates/core/user_detail.jinja:61
+#: core/templates/core/user_detail.jinja:60
#: core/templates/core/user_edit.jinja:39
msgid "Account number: "
msgstr "Numero de compte : "
-#: core/templates/core/user_detail.jinja:68
+#: core/templates/core/user_detail.jinja:67
msgid "Not subscribed"
msgstr "Non cotisant"
-#: core/templates/core/user_detail.jinja:70
+#: core/templates/core/user_detail.jinja:69
#: subscription/templates/subscription/subscription.jinja:4
#: subscription/templates/subscription/subscription.jinja:8
msgid "New subscription"
@@ -1718,14 +1719,18 @@ msgstr "Liste d'utilisateurs"
msgid "%(user_name)s's stats"
msgstr "Stats de %(user_name)s"
-#: core/templates/core/user_stats.jinja:10
+#: core/templates/core/user_stats.jinja:9
msgid "Permanencies"
msgstr "Permanences"
-#: core/templates/core/user_stats.jinja:18
+#: core/templates/core/user_stats.jinja:17
msgid "Buyings"
msgstr "Achats"
+#: core/templates/core/user_stats.jinja:23
+msgid "Product top 10"
+msgstr "Top 10 produits"
+
#: core/templates/core/user_tools.jinja:4
#, python-format
msgid "%(user_name)s's tools"
@@ -1743,48 +1748,53 @@ msgstr "Gestion de Sith"
msgid "Groups"
msgstr "Groupes"
-#: core/templates/core/user_tools.jinja:17
+#: core/templates/core/user_tools.jinja:15
+#: rootplace/templates/rootplace/merge.jinja:4
+msgid "Merge users"
+msgstr "Fusionner deux utilisateurs"
+
+#: core/templates/core/user_tools.jinja:18
msgid "Subscriptions"
msgstr "Cotisations"
-#: core/templates/core/user_tools.jinja:22 counter/views.py:395
+#: core/templates/core/user_tools.jinja:23 counter/views.py:395
#: counter/views.py:534
msgid "Counters"
msgstr "Comptoirs"
-#: core/templates/core/user_tools.jinja:25
+#: core/templates/core/user_tools.jinja:26
msgid "General management"
msgstr "Gestion générale"
-#: core/templates/core/user_tools.jinja:26
+#: core/templates/core/user_tools.jinja:27
msgid "General counters management"
msgstr "Gestion générale des comptoirs"
-#: core/templates/core/user_tools.jinja:27
+#: core/templates/core/user_tools.jinja:28
msgid "Products management"
msgstr "Gestion des produits"
-#: core/templates/core/user_tools.jinja:28
+#: core/templates/core/user_tools.jinja:29
msgid "Product types management"
msgstr "Gestion des types de produit"
-#: core/templates/core/user_tools.jinja:29
+#: core/templates/core/user_tools.jinja:30
#: counter/templates/counter/cash_summary_list.jinja:18 counter/views.py:415
msgid "Cash register summaries"
msgstr "Relevés de caisse"
-#: core/templates/core/user_tools.jinja:35 core/views/user.py:145
+#: core/templates/core/user_tools.jinja:36 core/views/user.py:145
#: counter/templates/counter/counter_list.jinja:18
#: counter/templates/counter/counter_list.jinja:33
#: counter/templates/counter/counter_list.jinja:48
msgid "Stats"
msgstr "Stats"
-#: core/templates/core/user_tools.jinja:44
+#: core/templates/core/user_tools.jinja:45
msgid "General accounting"
msgstr "Comptabilité générale"
-#: core/templates/core/user_tools.jinja:53
+#: core/templates/core/user_tools.jinja:54
msgid "Club account: "
msgstr "Compte club : "
@@ -1846,7 +1856,7 @@ msgstr "Fillot"
msgid "Select user"
msgstr "Choisir un utilisateur"
-#: core/views/user.py:272
+#: core/views/user.py:275
msgid "User already has a profile picture"
msgstr "L'utilisateur a déjà une photo de profil"
@@ -1939,73 +1949,77 @@ msgstr "Eboutic"
msgid "sellers"
msgstr "vendeurs"
-#: counter/models.py:131 counter/models.py:329 counter/models.py:346
+#: counter/models.py:129 launderette/models.py:125
+msgid "token"
+msgstr "jeton"
+
+#: counter/models.py:132 counter/models.py:330 counter/models.py:347
#: launderette/models.py:16
msgid "counter"
msgstr "comptoir"
-#: counter/models.py:224
+#: counter/models.py:225
msgid "bank"
msgstr "banque"
-#: counter/models.py:226 counter/models.py:267
+#: counter/models.py:227 counter/models.py:268
msgid "is validated"
msgstr "est validé"
-#: counter/models.py:229
+#: counter/models.py:230
msgid "refilling"
msgstr "rechargement"
-#: counter/models.py:260 eboutic/models.py:103
+#: counter/models.py:261 eboutic/models.py:103
msgid "unit price"
msgstr "prix unitaire"
-#: counter/models.py:261 counter/models.py:379 eboutic/models.py:104
+#: counter/models.py:262 counter/models.py:380 eboutic/models.py:104
msgid "quantity"
msgstr "quantité"
-#: counter/models.py:266
+#: counter/models.py:267
msgid "Sith account"
msgstr "Compte utilisateur"
-#: counter/models.py:266 sith/settings.py:271 sith/settings.py:276
+#: counter/models.py:267 sith/settings.py:271 sith/settings.py:276
#: sith/settings.py:298
msgid "Credit card"
msgstr "Carte bancaire"
-#: counter/models.py:270
+#: counter/models.py:271
msgid "selling"
msgstr "vente"
-#: counter/models.py:332
+#: counter/models.py:333
msgid "last activity date"
msgstr "dernière activité"
-#: counter/models.py:335
+#: counter/models.py:336
msgid "permanency"
msgstr "permanence"
-#: counter/models.py:349
+#: counter/models.py:350
msgid "emptied"
msgstr "coffre vidée"
-#: counter/models.py:352
+#: counter/models.py:353
msgid "cash register summary"
msgstr "relevé de caisse"
-#: counter/models.py:377
+#: counter/models.py:378
msgid "cash summary"
msgstr "relevé"
-#: counter/models.py:378
+#: counter/models.py:379
msgid "value"
msgstr "valeur"
-#: counter/models.py:380
+#: counter/models.py:381
msgid "check"
msgstr "chèque"
-#: counter/models.py:383
+#: counter/models.py:384
msgid "cash register summary item"
msgstr "élément de relevé de caisse"
@@ -2384,10 +2398,6 @@ msgstr "Le nom du jeton ne peut pas être vide"
msgid "machine"
msgstr "machine"
-#: launderette/models.py:125
-msgid "token"
-msgstr "jeton"
-
#: launderette/templates/launderette/launderette_admin.jinja:4
msgid "Launderette admin"
msgstr "Gestion de la laverie"
@@ -2474,10 +2484,6 @@ msgstr "L'utilisateur n'a pas réservé de créneau"
msgid "Token not found"
msgstr "Jeton non trouvé"
-#: rootplace/templates/rootplace/merge.jinja:4
-msgid "Merge users"
-msgstr "Fusionner deux utilisateurs"
-
#: rootplace/templates/rootplace/merge.jinja:8
msgid "Merge two users"
msgstr "Fusionner deux utilisateurs"
@@ -2486,11 +2492,11 @@ msgstr "Fusionner deux utilisateurs"
msgid "Merge"
msgstr "Fusion"
-#: rootplace/views.py:63
+#: rootplace/views.py:66
msgid "User that will be kept"
msgstr "Utilisateur qui sera conservé"
-#: rootplace/views.py:64
+#: rootplace/views.py:67
msgid "User that will be deleted"
msgstr "Utilisateur qui sera supprimé"