diff --git a/club/templates/club/club_sellings.jinja b/club/templates/club/club_sellings.jinja
index 34acc234..21c061d3 100644
--- a/club/templates/club/club_sellings.jinja
+++ b/club/templates/club/club_sellings.jinja
@@ -7,6 +7,7 @@
{% csrf_token %}
{{ form }}
+
{% trans %}Quantity: {% endtrans %}{{ total_quantity }} {% trans %}units{% endtrans %}
diff --git a/club/urls.py b/club/urls.py
index 50b5b775..7884df0b 100644
--- a/club/urls.py
+++ b/club/urls.py
@@ -10,6 +10,7 @@ urlpatterns = [
url(r'^(?P[0-9]+)/members$', ClubMembersView.as_view(), name='club_members'),
url(r'^(?P[0-9]+)/elderlies$', ClubOldMembersView.as_view(), name='club_old_members'),
url(r'^(?P[0-9]+)/sellings$', ClubSellingView.as_view(), name='club_sellings'),
+ url(r'^(?P[0-9]+)/sellings/csv$', ClubSellingCSVView.as_view(), name='sellings_csv'),
url(r'^(?P[0-9]+)/prop$', ClubEditPropView.as_view(), name='club_prop'),
url(r'^(?P[0-9]+)/tools$', ClubToolsView.as_view(), name='tools'),
url(r'^membership/(?P[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'),
diff --git a/club/views.py b/club/views.py
index 17f5c873..23e0c959 100644
--- a/club/views.py
+++ b/club/views.py
@@ -4,10 +4,11 @@ from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, CreateView
from django.forms import CheckboxSelectMultiple
from django.core.exceptions import ValidationError
-from django.http import HttpResponseRedirect
+from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ugettext as _t
from django.conf import settings
from ajax_select.fields import AutoCompleteSelectField
@@ -203,6 +204,36 @@ class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailView):
kwargs['form'] = form
return kwargs
+class ClubSellingCSVView(ClubSellingView):
+ """
+ Generate sellings in csv for a given period
+ """
+
+ def get(self, request, *args, **kwargs):
+ import csv
+ response = HttpResponse(content_type='text/csv')
+ self.object = self.get_object()
+ name = _("Sellings") + "_" + self.object.name + ".csv"
+ response['Content-Disposition'] = 'filename=' + name
+ kwargs = self.get_context_data(**kwargs)
+ writer = csv.writer(response, delimiter=";", lineterminator='\n', quoting=csv.QUOTE_ALL)
+
+ writer.writerow([_t('Date'),_t('Counter'),_t('Barman'),_t('Customer'),_t('Label'),
+ _t('Quantity'), _t('Total'),_t('Payment method')])
+ for o in kwargs['result']:
+ row = [o.date, o.counter]
+ if o.seller:
+ row.append(o.seller.get_display_name())
+ else: row.append('')
+ if o.customer:
+ row.append(o.customer.user.get_display_name())
+ else: row.append('')
+ row = row +[o.label, o.quantity, o.quantity * o.unit_price,
+ o.get_payment_method_display()]
+ writer.writerow(row)
+
+ return response
+
class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView):
"""
Edit a Club's main informations (for the club's members)
diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo
index f270d671..896b8e1e 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 0b51d657..9f2974f1 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-11-03 16:28+0100\n"
+"POT-Creation-Date: 2016-11-07 22:00+0100\n"
"PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia \n"
"Language-Team: AE info \n"
@@ -123,7 +123,7 @@ msgstr "numéro"
msgid "journal"
msgstr "classeur"
-#: accounting/models.py:194 core/models.py:498 core/models.py:776
+#: accounting/models.py:194 core/models.py:498 core/models.py:778
#: counter/models.py:237 counter/models.py:280 counter/models.py:397
#: eboutic/models.py:15 eboutic/models.py:48
msgid "date"
@@ -277,7 +277,7 @@ msgstr "Liste des types comptable"
#: accounting/templates/accounting/label_list.jinja:9
#: accounting/templates/accounting/operation_edit.jinja:9
#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9
-#: core/templates/core/user_tools.jinja:42
+#: core/templates/core/user_tools.jinja:43
msgid "Accounting"
msgstr "Comptabilité"
@@ -296,14 +296,14 @@ 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:49
+#: core/templates/core/user_tools.jinja:50
msgid "Bank account: "
msgstr "Compte en banque : "
#: accounting/templates/accounting/bank_account_details.jinja:15
#: accounting/templates/accounting/club_account_details.jinja:16
#: accounting/templates/accounting/label_list.jinja:21
-#: club/templates/club/club_sellings.jinja:48
+#: club/templates/club/club_sellings.jinja:53
#: core/templates/core/file_detail.jinja:43
#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66
#: core/templates/core/user_account_detail.jinja:38
@@ -316,7 +316,7 @@ msgid "Delete"
msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:17
-#: club/views.py:31 core/views/user.py:130
+#: club/views.py:32 core/views/user.py:130
msgid "Infos"
msgstr "Infos"
@@ -335,9 +335,9 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:26
#: accounting/templates/accounting/bank_account_list.jinja:21
#: accounting/templates/accounting/club_account_details.jinja:55
-#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:53
+#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:54
#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31
-#: core/templates/core/user_tools.jinja:35 core/views/user.py:147
+#: core/templates/core/user_tools.jinja:36 core/views/user.py:147
#: counter/templates/counter/cash_summary_list.jinja:53
#: counter/templates/counter/counter_list.jinja:17
#: counter/templates/counter/counter_list.jinja:32
@@ -472,7 +472,7 @@ msgid "Nb"
msgstr "No"
#: accounting/templates/accounting/journal_details.jinja:29
-#: club/templates/club/club_sellings.jinja:18
+#: club/templates/club/club_sellings.jinja:23
#: core/templates/core/user_account_detail.jinja:17
#: core/templates/core/user_account_detail.jinja:50
#: core/templates/core/user_account_detail.jinja:79
@@ -483,7 +483,7 @@ msgid "Date"
msgstr "Date"
#: accounting/templates/accounting/journal_details.jinja:30
-#: club/templates/club/club_sellings.jinja:22
+#: club/templates/club/club_sellings.jinja:27
#: core/templates/core/user_account_detail.jinja:20
#: counter/templates/counter/last_ops.jinja:42
msgid "Label"
@@ -533,7 +533,8 @@ msgid "Edit operation"
msgstr "Éditer l'opération"
#: accounting/templates/accounting/operation_edit.jinja:40
-#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:12
+#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7
+#: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20
#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8
#: core/templates/core/pagerev_edit.jinja:24
#: core/templates/core/user_godfathers.jinja:35
@@ -619,6 +620,7 @@ msgid "Club list"
msgstr "Liste des clubs"
#: club/templates/club/club_list.jinja:21
+#: core/templates/core/user_tools.jinja:19
msgid "New club"
msgstr "Nouveau club"
@@ -675,7 +677,7 @@ msgstr "Du"
msgid "To"
msgstr "Au"
-#: club/templates/club/club_sellings.jinja:5 club/views.py:58
+#: club/templates/club/club_sellings.jinja:5 club/views.py:59
#: counter/templates/counter/counter_main.jinja:19
#: counter/templates/counter/last_ops.jinja:35
msgid "Sellings"
@@ -686,29 +688,33 @@ msgstr "Ventes"
msgid "Show"
msgstr "Montrer"
-#: club/templates/club/club_sellings.jinja:12
+#: club/templates/club/club_sellings.jinja:10
+msgid "Download as cvs"
+msgstr "Télécharger en csv"
+
+#: club/templates/club/club_sellings.jinja:13
msgid "Quantity: "
msgstr "Quantité : "
-#: club/templates/club/club_sellings.jinja:12
+#: club/templates/club/club_sellings.jinja:13
msgid "units"
msgstr "unités"
-#: club/templates/club/club_sellings.jinja:13
+#: club/templates/club/club_sellings.jinja:14
#: counter/templates/counter/counter_click.jinja:70
#: counter/templates/counter/counter_main.jinja:28
#: eboutic/templates/eboutic/eboutic_main.jinja:34
msgid "Total: "
msgstr "Total : "
-#: club/templates/club/club_sellings.jinja:19 club/views.py:165
+#: club/templates/club/club_sellings.jinja:24 club/views.py:166
#: core/templates/core/user_account_detail.jinja:18
#: core/templates/core/user_account_detail.jinja:51
#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:78
msgid "Counter"
msgstr "Comptoir"
-#: club/templates/club/club_sellings.jinja:20
+#: club/templates/club/club_sellings.jinja:25
#: core/templates/core/user_account_detail.jinja:19
#: core/templates/core/user_account_detail.jinja:52
#: counter/templates/counter/last_ops.jinja:15
@@ -716,21 +722,21 @@ msgstr "Comptoir"
msgid "Barman"
msgstr "Barman"
-#: club/templates/club/club_sellings.jinja:21
+#: club/templates/club/club_sellings.jinja:26
#: counter/templates/counter/counter_click.jinja:29
#: counter/templates/counter/last_ops.jinja:16
#: counter/templates/counter/last_ops.jinja:41
msgid "Customer"
msgstr "Client"
-#: club/templates/club/club_sellings.jinja:23
+#: club/templates/club/club_sellings.jinja:28
#: core/templates/core/user_account_detail.jinja:21
#: core/templates/core/user_stats.jinja:28
#: counter/templates/counter/last_ops.jinja:43
msgid "Quantity"
msgstr "Quantité"
-#: club/templates/club/club_sellings.jinja:24
+#: club/templates/club/club_sellings.jinja:29
#: core/templates/core/user_account.jinja:10
#: core/templates/core/user_account_detail.jinja:22
#: counter/templates/counter/cash_summary_list.jinja:35
@@ -739,7 +745,7 @@ msgstr "Quantité"
msgid "Total"
msgstr "Total"
-#: club/templates/club/club_sellings.jinja:25
+#: club/templates/club/club_sellings.jinja:30
#: core/templates/core/user_account_detail.jinja:23
#: core/templates/core/user_account_detail.jinja:54
#: counter/templates/counter/last_ops.jinja:18
@@ -748,7 +754,7 @@ msgid "Payment method"
msgstr "Méthode de paiement"
#: club/templates/club/club_tools.jinja:4
-#: core/templates/core/user_tools.jinja:61
+#: core/templates/core/user_tools.jinja:62
msgid "Club tools"
msgstr "Outils club"
@@ -764,37 +770,37 @@ msgstr "Comptabilité : "
msgid "Manage launderettes"
msgstr "Gestion des laveries"
-#: club/views.py:37
+#: club/views.py:38
msgid "Members"
msgstr "Membres"
-#: club/views.py:42
+#: club/views.py:43
msgid "Old members"
msgstr "Anciens membres"
-#: club/views.py:48 core/templates/core/base.jinja:40 core/views/user.py:141
+#: club/views.py:49 core/templates/core/base.jinja:40 core/views/user.py:141
msgid "Tools"
msgstr "Outils"
-#: club/views.py:64 counter/templates/counter/counter_list.jinja:21
+#: club/views.py:65 counter/templates/counter/counter_list.jinja:21
#: counter/templates/counter/counter_list.jinja:36
#: counter/templates/counter/counter_list.jinja:51
msgid "Props"
msgstr "Propriétés"
-#: club/views.py:102 core/views/forms.py:204 counter/views.py:39
+#: club/views.py:103 core/views/forms.py:204 counter/views.py:39
msgid "Select user"
msgstr "Choisir un utilisateur"
-#: club/views.py:163 counter/views.py:909
+#: club/views.py:164 counter/views.py:909
msgid "Begin date"
msgstr "Date de début"
-#: club/views.py:164 counter/views.py:910
+#: club/views.py:165 counter/views.py:910
msgid "End date"
msgstr "Date de fin"
-#: club/views.py:178 core/templates/core/user_stats.jinja:27
+#: club/views.py:179 core/templates/core/user_stats.jinja:27
#: counter/views.py:990
msgid "Product"
msgstr "Produit"
@@ -1171,23 +1177,33 @@ msgstr "nom de la page"
msgid "owner group"
msgstr "groupe propriétaire"
-#: core/models.py:660
+#: core/models.py:633
+#, fuzzy
+#| msgid "Select user"
+msgid "lock user"
+msgstr "Choisir un utilisateur"
+
+#: core/models.py:634
+msgid "lock_timeout"
+msgstr ""
+
+#: core/models.py:661
msgid "Duplicate page"
msgstr "Une page de ce nom existe déjà"
-#: core/models.py:666
+#: core/models.py:667
msgid "Loop in page tree"
msgstr "Boucle dans l'arborescence des pages"
-#: core/models.py:773
+#: core/models.py:775
msgid "revision"
msgstr "révision"
-#: core/models.py:774
+#: core/models.py:776
msgid "page title"
msgstr "titre de la page"
-#: core/models.py:775
+#: core/models.py:777
msgid "page content"
msgstr "contenu de la page"
@@ -1294,7 +1310,7 @@ msgstr "Confirmation"
msgid "Cancel"
msgstr "Annuler"
-#: core/templates/core/edit.jinja:4 core/templates/core/edit.jinja.py:8
+#: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13
#: core/templates/core/file_edit.jinja:4
#: counter/templates/counter/cash_register_summary.jinja:4
#, python-format
@@ -1843,44 +1859,44 @@ msgstr "Fusionner deux utilisateurs"
msgid "Subscriptions"
msgstr "Cotisations"
-#: core/templates/core/user_tools.jinja:23 counter/views.py:449
+#: core/templates/core/user_tools.jinja:24 counter/views.py:449
#: counter/views.py:598
msgid "Counters"
msgstr "Comptoirs"
-#: core/templates/core/user_tools.jinja:26
+#: core/templates/core/user_tools.jinja:27
msgid "General management"
msgstr "Gestion générale"
-#: core/templates/core/user_tools.jinja:27
+#: core/templates/core/user_tools.jinja:28
msgid "General counters management"
msgstr "Gestion générale des comptoirs"
-#: core/templates/core/user_tools.jinja:28
+#: core/templates/core/user_tools.jinja:29
msgid "Products management"
msgstr "Gestion des produits"
-#: core/templates/core/user_tools.jinja:29
+#: core/templates/core/user_tools.jinja:30
msgid "Product types management"
msgstr "Gestion des types de produit"
-#: core/templates/core/user_tools.jinja:30
+#: core/templates/core/user_tools.jinja:31
#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:469
msgid "Cash register summaries"
msgstr "Relevés de caisse"
-#: core/templates/core/user_tools.jinja:36 core/views/user.py:169
+#: core/templates/core/user_tools.jinja:37 core/views/user.py:169
#: 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:45
+#: core/templates/core/user_tools.jinja:46
msgid "General accounting"
msgstr "Comptabilité générale"
-#: core/templates/core/user_tools.jinja:54
+#: core/templates/core/user_tools.jinja:55
msgid "Club account: "
msgstr "Compte club : "