From 2e7e78b8ce689b71aa84f9608da13094a5d081bd Mon Sep 17 00:00:00 2001 From: Skia Date: Wed, 28 Sep 2016 11:07:32 +0200 Subject: [PATCH] Add last ops view to the bars --- core/static/core/style.css | 3 + counter/templates/counter/counter_main.jinja | 3 - counter/templates/counter/last_ops.jinja | 67 +++++++++ counter/urls.py | 1 + counter/views.py | 146 +++++++++++++++---- locale/fr/LC_MESSAGES/django.mo | Bin 35450 -> 35708 bytes locale/fr/LC_MESSAGES/django.po | 115 +++++++++------ sith/settings.py | 3 + 8 files changed, 264 insertions(+), 74 deletions(-) create mode 100644 counter/templates/counter/last_ops.jinja diff --git a/core/static/core/style.css b/core/static/core/style.css index f96ae8c1..58641751 100644 --- a/core/static/core/style.css +++ b/core/static/core/style.css @@ -176,6 +176,9 @@ tbody>tr:hover { background: darkgrey; width: 100%; } +.highlight { + background: orange; +} .tool-bar { overflow: auto; padding: 4px; diff --git a/counter/templates/counter/counter_main.jinja b/counter/templates/counter/counter_main.jinja index 1bfd4162..39942111 100644 --- a/counter/templates/counter/counter_main.jinja +++ b/counter/templates/counter/counter_main.jinja @@ -40,9 +40,6 @@ {% endif %} {% if counter.type == 'BAR' %} - {% if barmen %} -

{% trans %}Make a cash register summary{% endtrans %}

- {% endif %}

{% trans %}Barman: {% endtrans %}

{% for b in barmen %} diff --git a/counter/templates/counter/last_ops.jinja b/counter/templates/counter/last_ops.jinja new file mode 100644 index 00000000..c7f0c4af --- /dev/null +++ b/counter/templates/counter/last_ops.jinja @@ -0,0 +1,67 @@ +{% extends "core/base.jinja" %} +{% from 'core/macros.jinja' import user_profile_link %} + +{% block title %} +{% trans counter_name=counter %}{{ counter_name }} last operations{% endtrans %} +{% endblock %} + +{% block content %} +

{% trans counter_name=counter %}{{ counter_name }} last operations{% endtrans %}

+

{% trans %}Refillings{% endtrans %}

+ + + + + + + + + + + + {% for i in last_refillings %} + + + + + + + + +{% endfor %} + +
{% trans %}Date{% endtrans %}{% trans %}Barman{% endtrans %}{% trans %}Customer{% endtrans %}{% trans %}Amount{% endtrans %}{% trans %}Payment method{% endtrans %}
{{ i.date|localtime|date(DATETIME_FORMAT) }} - {{ i.date|localtime|time(DATETIME_FORMAT) }}{{ i.operator.get_display_name() }}{{ i.customer.user.get_display_name() }}{{ i.amount }} €{{ i.get_payment_method_display() }}{% trans %}Delete{% endtrans %}
+ +

{% trans %}Sellings{% endtrans %}

+ + + + + + + + + + + + + + {% for i in last_sellings %} + + + + + + + + + + +{% endfor %} + +
{% trans %}Date{% endtrans %}{% trans %}Barman{% endtrans %}{% trans %}Customer{% endtrans %}{% trans %}Label{% endtrans %}{% trans %}Quantity{% endtrans %}{% trans %}Total{% endtrans %}{% trans %}Payment method{% endtrans %}
{{ i.date|localtime|date(DATETIME_FORMAT) }} - {{ i.date|localtime|time(DATETIME_FORMAT) }}{{ i.seller.get_display_name() }}{{ i.customer.user.get_display_name() }}{{ i.label }}{{ i.quantity }}{{ i.quantity * i.unit_price }} €{{ i.get_payment_method_display() }}{% trans %}Delete{% endtrans %}
+{% endblock %} + + + diff --git a/counter/urls.py b/counter/urls.py index 72d12a0f..502f1d93 100644 --- a/counter/urls.py +++ b/counter/urls.py @@ -5,6 +5,7 @@ from counter.views import * urlpatterns = [ url(r'^(?P[0-9]+)$', CounterMain.as_view(), name='details'), url(r'^(?P[0-9]+)/click/(?P[0-9]+)$', CounterClick.as_view(), name='click'), + url(r'^(?P[0-9]+)/last_ops$', CounterLastOperationsView.as_view(), name='last_ops'), url(r'^(?P[0-9]+)/cash_summary$', CounterCashSummaryView.as_view(), name='cash_summary'), url(r'^(?P[0-9]+)/activity$', CounterActivityView.as_view(), name='activity'), url(r'^(?P[0-9]+)/stats$', CounterStatView.as_view(), name='stats'), diff --git a/counter/views.py b/counter/views.py index 17e7b9d3..35e826de 100644 --- a/counter/views.py +++ b/counter/views.py @@ -1,9 +1,10 @@ from django.shortcuts import render +from django.core.exceptions import PermissionDenied from django.views.generic import ListView, DetailView, RedirectView from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin from django.forms.models import modelform_factory from django.forms import CheckboxSelectMultiple -from django.core.urlresolvers import reverse_lazy +from django.core.urlresolvers import reverse_lazy, reverse from django.core.exceptions import PermissionDenied from django.http import HttpResponseRedirect from django.utils import timezone @@ -63,6 +64,29 @@ class RefillForm(forms.ModelForm): model = Refilling fields = ['amount', 'payment_method', 'bank'] +class CounterTabsMixin(TabedViewMixin): + def get_tabs_title(self): + return self.object + def get_list_of_tabs(self): + tab_list = [] + tab_list.append({ + 'url': reverse_lazy('counter:details', kwargs={'counter_id': self.object.id}), + 'slug': 'counter', + 'name': _("Counter"), + }) + if self.object.type == "BAR": + tab_list.append({ + 'url': reverse_lazy('counter:cash_summary', kwargs={'counter_id': self.object.id}), + 'slug': 'cash_summary', + 'name': _("Cash summary"), + }) + tab_list.append({ + 'url': reverse_lazy('counter:last_ops', kwargs={'counter_id': self.object.id}), + 'slug': 'last_ops', + 'name': _("Last operations"), + }) + return tab_list + class CheckTokenMixin: def post(self, request, *args, **kwargs): if not ('counter_token' in self.request.session.keys() and self.request.session['counter_token'] == self.object.token): @@ -70,7 +94,7 @@ class CheckTokenMixin: kwargs={'counter_id': self.object.id})+'?bad_location') return super(CheckTokenMixin, self).post(request, *args, **kwargs) -class CounterMain(DetailView, CheckTokenMixin, ProcessFormView, FormMixin): +class CounterMain(CounterTabsMixin, DetailView, CheckTokenMixin, ProcessFormView, FormMixin): """ The public (barman) view """ @@ -78,6 +102,7 @@ class CounterMain(DetailView, CheckTokenMixin, ProcessFormView, FormMixin): template_name = 'counter/counter_main.jinja' pk_url_kwarg = "counter_id" form_class = GetUserForm # Form to enter a client code and get the corresponding user id + current_tab = "counter" def post(self, request, *args, **kwargs): self.object = self.get_object() @@ -127,7 +152,7 @@ class CounterMain(DetailView, CheckTokenMixin, ProcessFormView, FormMixin): def get_success_url(self): return reverse_lazy('counter:click', args=self.args, kwargs=self.kwargs) -class CounterClick(DetailView, CheckTokenMixin): +class CounterClick(CounterTabsMixin, DetailView, CheckTokenMixin): """ The click view This is a detail view not to have to worry about loading the counter @@ -136,6 +161,7 @@ class CounterClick(DetailView, CheckTokenMixin): model = Counter template_name = 'counter/counter_click.jinja' pk_url_kwarg = "counter_id" + current_tab = "counter" def get(self, request, *args, **kwargs): """Simple get view""" @@ -412,7 +438,7 @@ class CounterLogout(RedirectView): ## Counter admin views -class CounterTabsMixin(TabedViewMixin): +class CounterAdminTabsMixin(TabedViewMixin): tabs_title = _("Counter administration") list_of_tabs = [ { @@ -442,7 +468,7 @@ class CounterTabsMixin(TabedViewMixin): }, ] -class CounterListView(CounterTabsMixin, CanViewMixin, ListView): +class CounterListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ A list view for the admins """ @@ -457,7 +483,7 @@ class CounterEditForm(forms.ModelForm): sellers = make_ajax_field(Counter, 'sellers', 'users', help_text="") products = make_ajax_field(Counter, 'products', 'products', help_text="") -class CounterEditView(CounterTabsMixin, CanEditMixin, UpdateView): +class CounterEditView(CounterAdminTabsMixin, CanEditMixin, UpdateView): """ Edit a counter's main informations (for the counter's manager) """ @@ -470,7 +496,7 @@ class CounterEditView(CounterTabsMixin, CanEditMixin, UpdateView): def get_success_url(self): return reverse_lazy('counter:admin', kwargs={'counter_id': self.object.id}) -class CounterEditPropView(CounterTabsMixin, CanEditPropMixin, UpdateView): +class CounterEditPropView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): """ Edit a counter's main informations (for the counter's admin) """ @@ -480,7 +506,7 @@ class CounterEditPropView(CounterTabsMixin, CanEditPropMixin, UpdateView): template_name = 'core/edit.jinja' current_tab = "counters" -class CounterCreateView(CounterTabsMixin, CanEditMixin, CreateView): +class CounterCreateView(CounterAdminTabsMixin, CanEditMixin, CreateView): """ Create a counter (for the admins) """ @@ -490,7 +516,7 @@ class CounterCreateView(CounterTabsMixin, CanEditMixin, CreateView): template_name = 'core/create.jinja' current_tab = "counters" -class CounterDeleteView(CounterTabsMixin, CanEditMixin, DeleteView): +class CounterDeleteView(CounterAdminTabsMixin, CanEditMixin, DeleteView): """ Delete a counter (for the admins) """ @@ -502,7 +528,7 @@ class CounterDeleteView(CounterTabsMixin, CanEditMixin, DeleteView): # Product management -class ProductTypeListView(CounterTabsMixin, CanEditPropMixin, ListView): +class ProductTypeListView(CounterAdminTabsMixin, CanEditPropMixin, ListView): """ A list view for the admins """ @@ -510,7 +536,7 @@ class ProductTypeListView(CounterTabsMixin, CanEditPropMixin, ListView): template_name = 'counter/producttype_list.jinja' current_tab = "product_types" -class ProductTypeCreateView(CounterTabsMixin, CanCreateMixin, CreateView): +class ProductTypeCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): """ A create view for the admins """ @@ -519,7 +545,7 @@ class ProductTypeCreateView(CounterTabsMixin, CanCreateMixin, CreateView): template_name = 'core/create.jinja' current_tab = "products" -class ProductTypeEditView(CounterTabsMixin, CanEditPropMixin, UpdateView): +class ProductTypeEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): """ An edit view for the admins """ @@ -529,7 +555,7 @@ class ProductTypeEditView(CounterTabsMixin, CanEditPropMixin, UpdateView): pk_url_kwarg = "type_id" current_tab = "products" -class ProductArchivedListView(CounterTabsMixin, CanEditPropMixin, ListView): +class ProductArchivedListView(CounterAdminTabsMixin, CanEditPropMixin, ListView): """ A list view for the admins """ @@ -539,7 +565,7 @@ class ProductArchivedListView(CounterTabsMixin, CanEditPropMixin, ListView): ordering = ['name'] current_tab = "archive" -class ProductListView(CounterTabsMixin, CanEditPropMixin, ListView): +class ProductListView(CounterAdminTabsMixin, CanEditPropMixin, ListView): """ A list view for the admins """ @@ -577,7 +603,7 @@ class ProductEditForm(forms.ModelForm): c.save() return ret -class ProductCreateView(CounterTabsMixin, CanCreateMixin, CreateView): +class ProductCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): """ A create view for the admins """ @@ -586,7 +612,7 @@ class ProductCreateView(CounterTabsMixin, CanCreateMixin, CreateView): template_name = 'core/create.jinja' current_tab = "products" -class ProductEditView(CounterTabsMixin, CanEditPropMixin, UpdateView): +class ProductEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): """ An edit view for the admins """ @@ -596,7 +622,7 @@ class ProductEditView(CounterTabsMixin, CanEditPropMixin, UpdateView): template_name = 'core/edit.jinja' current_tab = "products" -class RefillingDeleteView(CanEditPropMixin, DeleteView): +class RefillingDeleteView(DeleteView): """ Delete a refilling (for the admins) """ @@ -604,10 +630,23 @@ class RefillingDeleteView(CanEditPropMixin, DeleteView): pk_url_kwarg = "refilling_id" template_name = 'core/delete_confirm.jinja' - def get_success_url(self): - return reverse_lazy('core:user_account', kwargs={'user_id': self.object.customer.user.id}) + def dispatch(self, request, *args, **kwargs): + """ + We have here a very particular right handling, we can't inherit from CanEditPropMixin + """ + self.object = self.get_object() + if (timezone.now() - self.object.date <= timedelta(minutes=settings.SITH_LAST_OPERATIONS_LIMIT) and + 'counter_token' in request.session.keys() and + request.session['counter_token'] and # check if not null for counters that have no token set + Counter.objects.filter(token=request.session['counter_token']).exists()): + self.success_url = reverse('counter:details', kwargs={'counter_id': self.object.counter.id}) + return super(RefillingDeleteView, self).dispatch(request, *args, **kwargs) + elif self.object.is_owned_by(request.user): + self.success_url = reverse('core:user_account', kwargs={'user_id': self.object.customer.user.id}) + return super(RefillingDeleteView, self).dispatch(request, *args, **kwargs) + raise PermissionDenied -class SellingDeleteView(CanEditPropMixin, DeleteView): +class SellingDeleteView(DeleteView): """ Delete a selling (for the admins) """ @@ -615,8 +654,21 @@ class SellingDeleteView(CanEditPropMixin, DeleteView): pk_url_kwarg = "selling_id" template_name = 'core/delete_confirm.jinja' - def get_success_url(self): - return reverse_lazy('core:user_account', kwargs={'user_id': self.object.customer.user.id}) + def dispatch(self, request, *args, **kwargs): + """ + We have here a very particular right handling, we can't inherit from CanEditPropMixin + """ + self.object = self.get_object() + if (timezone.now() - self.object.date <= timedelta(minutes=settings.SITH_LAST_OPERATIONS_LIMIT) and + 'counter_token' in request.session.keys() and + request.session['counter_token'] and # check if not null for counters that have no token set + Counter.objects.filter(token=request.session['counter_token']).exists()): + self.success_url = reverse('counter:details', kwargs={'counter_id': self.object.counter.id}) + return super(SellingDeleteView, self).dispatch(request, *args, **kwargs) + elif self.object.is_owned_by(request.user): + self.success_url = reverse('core:user_account', kwargs={'user_id': self.object.customer.user.id}) + return super(SellingDeleteView, self).dispatch(request, *args, **kwargs) + raise PermissionDenied # Cash register summaries @@ -676,27 +728,61 @@ class CashRegisterSummaryForm(forms.Form): if summary.items.count() < 1: summary.delete() -class CounterCashSummaryView(CanViewMixin, DetailView): +class CounterLastOperationsView(CounterTabsMixin, CanViewMixin, DetailView): + """ + Provide the last operations to allow barmen to delete them + """ + model = Counter + pk_url_kwarg = "counter_id" + template_name = 'counter/last_ops.jinja' + current_tab = "last_ops" + + def dispatch(self, request, *args, **kwargs): + """ + We have here again a very particular right handling + """ + self.object = self.get_object() + if (self.object.get_barmen_list() and 'counter_token' in request.session.keys() and + request.session['counter_token'] and # check if not null for counters that have no token set + Counter.objects.filter(token=request.session['counter_token']).exists()): + return super(CounterLastOperationsView, self).dispatch(request, *args, **kwargs) + return HttpResponseRedirect(reverse('counter:details', kwargs={'counter_id': self.object.id})+'?bad_location') + + def get_context_data(self, **kwargs): + """Add form to the context """ + kwargs = super(CounterLastOperationsView, self).get_context_data(**kwargs) + threshold = timezone.now() - timedelta(minutes=settings.SITH_LAST_OPERATIONS_LIMIT) + kwargs['last_refillings'] = self.object.refillings.filter(date__gte=threshold).all() + kwargs['last_sellings'] = self.object.sellings.filter(date__gte=threshold).all() + return kwargs + +class CounterCashSummaryView(CounterTabsMixin, CanViewMixin, DetailView): """ Provide the cash summary form """ model = Counter pk_url_kwarg = "counter_id" template_name = 'counter/cash_register_summary.jinja' + current_tab = "cash_summary" + + def dispatch(self, request, *args, **kwargs): + """ + We have here again a very particular right handling + """ + self.object = self.get_object() + if (self.object.get_barmen_list() and 'counter_token' in request.session.keys() and + request.session['counter_token'] and # check if not null for counters that have no token set + Counter.objects.filter(token=request.session['counter_token']).exists()): + return super(CounterCashSummaryView, self).dispatch(request, *args, **kwargs) + return HttpResponseRedirect(reverse('counter:details', kwargs={'counter_id': self.object.id})+'?bad_location') def get(self, request, *args, **kwargs): self.object = self.get_object() - if len(self.object.get_barmen_list()) < 1: - return HttpResponseRedirect(reverse_lazy('counter:details', args=self.args, - kwargs={'counter_id': self.object.id})) self.form = CashRegisterSummaryForm() return super(CounterCashSummaryView, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): self.object = self.get_object() - if len(self.object.get_barmen_list()) < 1: - return HttpResponseRedirect(reverse_lazy('counter:details', args=self.args, - kwargs={'counter_id': self.object.id})) self.form = CashRegisterSummaryForm(request.POST) if self.form.is_valid(): self.form.save(self.object) @@ -760,7 +846,7 @@ class CounterStatView(DetailView, CanEditMixin): raise PermissionDenied -class CashSummaryListView(CanEditPropMixin, CounterTabsMixin, ListView): +class CashSummaryListView(CanEditPropMixin, CounterAdminTabsMixin, ListView): """Display a list of cash summaries""" model = CashRegisterSummary template_name = 'counter/cash_summary_list.jinja' diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 350d37d03ee46adb0acecce15f5474357a6444dd..869eb287584804da82591e1a8797b2254b6a1255 100644 GIT binary patch delta 13058 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 delta 12863 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 QlZyA;=AZN|VM65p0e#r3DF6Tf diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 5a386d49..4e9a3770 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-26 11:22+0200\n" +"POT-Creation-Date: 2016-09-28 10:08+0200\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -302,6 +302,8 @@ msgstr "Compte en banque : " #: core/templates/core/group_list.jinja:13 #: core/templates/core/user_account_detail.jinja:67 #: core/templates/core/user_edit.jinja:18 +#: counter/templates/counter/last_ops.jinja:29 +#: counter/templates/counter/last_ops.jinja:59 #: launderette/templates/launderette/launderette_admin.jinja:16 #: launderette/views.py:146 msgid "Delete" @@ -388,6 +390,7 @@ msgstr "Fin" #: accounting/templates/accounting/journal_details.jinja:28 #: core/templates/core/user_account_detail.jinja:20 #: core/templates/core/user_account_detail.jinja:81 +#: counter/templates/counter/last_ops.jinja:17 msgid "Amount" msgstr "Montant" @@ -454,6 +457,8 @@ msgstr "No" #: core/templates/core/user_account_detail.jinja:46 #: core/templates/core/user_account_detail.jinja:79 #: counter/templates/counter/cash_summary_list.jinja:29 +#: counter/templates/counter/last_ops.jinja:14 +#: counter/templates/counter/last_ops.jinja:39 msgid "Date" msgstr "Date" @@ -478,7 +483,7 @@ msgid "Done" msgstr "Effectué" #: accounting/templates/accounting/journal_details.jinja:34 -#: counter/templates/counter/cash_summary_list.jinja:32 counter/views.py:646 +#: counter/templates/counter/cash_summary_list.jinja:32 counter/views.py:697 msgid "Comment" msgstr "Commentaire" @@ -630,6 +635,7 @@ msgstr "Au" #: club/templates/club/club_sellings.jinja:5 club/views.py:57 #: counter/templates/counter/counter_main.jinja:19 +#: counter/templates/counter/last_ops.jinja:35 msgid "Sellings" msgstr "Ventes" @@ -655,29 +661,35 @@ msgstr "Total : " #: club/templates/club/club_sellings.jinja:19 club/views.py:159 #: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:47 -#: counter/templates/counter/cash_summary_list.jinja:28 +#: counter/templates/counter/cash_summary_list.jinja:28 counter/views.py:74 msgid "Counter" msgstr "Comptoir" #: club/templates/club/club_sellings.jinja:20 #: core/templates/core/user_account_detail.jinja:19 #: core/templates/core/user_account_detail.jinja:48 +#: counter/templates/counter/last_ops.jinja:15 +#: counter/templates/counter/last_ops.jinja:40 msgid "Barman" msgstr "Barman" #: club/templates/club/club_sellings.jinja:21 #: 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:22 #: core/templates/core/user_account_detail.jinja:49 +#: counter/templates/counter/last_ops.jinja:42 msgid "Label" msgstr "Intitulé" #: club/templates/club/club_sellings.jinja:23 #: core/templates/core/user_account_detail.jinja:50 #: core/templates/core/user_stats.jinja:28 +#: counter/templates/counter/last_ops.jinja:43 msgid "Quantity" msgstr "Quantité" @@ -685,6 +697,7 @@ msgstr "Quantité" #: core/templates/core/user_account.jinja:9 #: core/templates/core/user_account_detail.jinja:51 #: counter/templates/counter/cash_summary_list.jinja:30 +#: counter/templates/counter/last_ops.jinja:44 #: counter/templates/counter/stats.jinja:18 msgid "Total" msgstr "Total" @@ -692,6 +705,8 @@ msgstr "Total" #: club/templates/club/club_sellings.jinja:25 #: core/templates/core/user_account_detail.jinja:21 #: core/templates/core/user_account_detail.jinja:52 +#: counter/templates/counter/last_ops.jinja:18 +#: counter/templates/counter/last_ops.jinja:45 msgid "Payment method" msgstr "Méthode de paiement" @@ -1342,7 +1357,7 @@ msgid "Please login to see this page." msgstr "Merci de vous identifier pour voir cette page." #: core/templates/core/login.jinja:28 -#: counter/templates/counter/counter_main.jinja:54 +#: counter/templates/counter/counter_main.jinja:55 msgid "login" msgstr "login" @@ -1594,6 +1609,7 @@ msgstr "Compte utilisateur" #: core/templates/core/user_account.jinja:38 #: core/templates/core/user_account_detail.jinja:13 #: counter/templates/counter/cash_summary_list.jinja:12 +#: counter/templates/counter/last_ops.jinja:10 msgid "Refillings" msgstr "Rechargements" @@ -1759,8 +1775,8 @@ msgstr "Fusionner deux utilisateurs" msgid "Subscriptions" msgstr "Cotisations" -#: core/templates/core/user_tools.jinja:23 counter/views.py:420 -#: counter/views.py:559 +#: core/templates/core/user_tools.jinja:23 counter/views.py:445 +#: counter/views.py:584 msgid "Counters" msgstr "Comptoirs" @@ -1781,7 +1797,7 @@ msgid "Product types management" msgstr "Gestion des types de produit" #: core/templates/core/user_tools.jinja:30 -#: counter/templates/counter/cash_summary_list.jinja:18 counter/views.py:440 +#: counter/templates/counter/cash_summary_list.jinja:18 counter/views.py:465 msgid "Cash register summaries" msgstr "Relevés de caisse" @@ -1854,7 +1870,7 @@ msgstr "Parrain" msgid "Godchild" msgstr "Fillot" -#: core/views/forms.py:204 counter/views.py:37 +#: core/views/forms.py:204 counter/views.py:38 msgid "Select user" msgstr "Choisir un utilisateur" @@ -2036,7 +2052,7 @@ msgid "Barman list" msgstr "Barmans" #: counter/templates/counter/cash_register_summary.jinja:8 -#: counter/templates/counter/counter_main.jinja:44 +#: counter/templates/counter/counter_main.jinja:45 msgid "Make a cash register summary" msgstr "Faire un relevé de caisse" @@ -2049,7 +2065,7 @@ msgstr "Liste des relevés de caisse" msgid "Theoric sums" msgstr "Sommes théoriques" -#: counter/templates/counter/cash_summary_list.jinja:31 counter/views.py:647 +#: counter/templates/counter/cash_summary_list.jinja:31 counter/views.py:698 msgid "Emptied" msgstr "Coffre vidé" @@ -2151,10 +2167,20 @@ msgstr "valider" msgid "Please, login" msgstr "Merci de vous identifier" -#: counter/templates/counter/counter_main.jinja:47 +#: counter/templates/counter/counter_main.jinja:44 +msgid "Display last operations" +msgstr "Dernières opérations" + +#: counter/templates/counter/counter_main.jinja:48 msgid "Barman: " msgstr "Barman : " +#: counter/templates/counter/last_ops.jinja:5 +#: counter/templates/counter/last_ops.jinja:9 +#, python-format +msgid "%(counter_name)s last operations" +msgstr "Dernières opérations sur %(counter_name)s" + #: counter/templates/counter/product_list.jinja:4 #: counter/templates/counter/product_list.jinja:12 msgid "Product list" @@ -2200,105 +2226,113 @@ msgstr "Promo" msgid "Percentage" msgstr "Pourcentage" -#: counter/views.py:53 +#: counter/views.py:54 msgid "User not found" msgstr "Utilisateur non trouvé" -#: counter/views.py:101 +#: counter/views.py:79 +msgid "Cash summary" +msgstr "Relevé de caisse" + +#: counter/views.py:84 +msgid "Last operations" +msgstr "Dernières opérations" + +#: counter/views.py:125 msgid "Bad credentials" msgstr "Mauvais identifiants" -#: counter/views.py:103 +#: counter/views.py:127 msgid "User is not barman" msgstr "L'utilisateur n'est pas barman." -#: counter/views.py:107 +#: counter/views.py:131 msgid "Bad location, someone is already logged in somewhere else" msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" -#: counter/views.py:290 +#: counter/views.py:315 msgid "END" msgstr "FIN" -#: counter/views.py:292 +#: counter/views.py:317 msgid "CAN" msgstr "ANN" -#: counter/views.py:322 +#: counter/views.py:347 msgid "You have not enough money to buy all the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: counter/views.py:415 +#: counter/views.py:440 msgid "Counter administration" msgstr "Administration des comptoirs" -#: counter/views.py:425 +#: counter/views.py:450 msgid "Products" msgstr "Produits" -#: counter/views.py:430 +#: counter/views.py:455 msgid "Archived products" msgstr "Produits archivés" -#: counter/views.py:435 +#: counter/views.py:460 msgid "Product types" msgstr "Types de produit" -#: counter/views.py:556 +#: counter/views.py:581 msgid "Parent product" msgstr "Produit parent" -#: counter/views.py:557 +#: counter/views.py:582 msgid "Buying groups" msgstr "Groupes d'achat" -#: counter/views.py:626 +#: counter/views.py:677 msgid "10 cents" msgstr "10 centimes" -#: counter/views.py:627 +#: counter/views.py:678 msgid "20 cents" msgstr "20 centimes" -#: counter/views.py:628 +#: counter/views.py:679 msgid "50 cents" msgstr "50 centimes" -#: counter/views.py:629 +#: counter/views.py:680 msgid "1 euro" msgstr "1 €" -#: counter/views.py:630 +#: counter/views.py:681 msgid "2 euros" msgstr "2 €" -#: counter/views.py:631 +#: counter/views.py:682 msgid "5 euros" msgstr "5 €" -#: counter/views.py:632 +#: counter/views.py:683 msgid "10 euros" msgstr "10 €" -#: counter/views.py:633 +#: counter/views.py:684 msgid "20 euros" msgstr "20 €" -#: counter/views.py:634 +#: counter/views.py:685 msgid "50 euros" msgstr "50 €" -#: counter/views.py:635 +#: counter/views.py:686 msgid "100 euros" msgstr "100 €" -#: counter/views.py:636 counter/views.py:638 counter/views.py:640 -#: counter/views.py:642 counter/views.py:644 +#: counter/views.py:687 counter/views.py:689 counter/views.py:691 +#: counter/views.py:693 counter/views.py:695 msgid "Check amount" msgstr "Montant du chèque" -#: counter/views.py:637 counter/views.py:639 counter/views.py:641 -#: counter/views.py:643 counter/views.py:645 +#: counter/views.py:688 counter/views.py:690 counter/views.py:692 +#: counter/views.py:694 counter/views.py:696 msgid "Check quantity" msgstr "Nombre de chèque" @@ -2434,12 +2468,12 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:412 +#: sith/settings.py:415 msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:412 +#: sith/settings.py:415 msgid "Drying" msgstr "Séchage" @@ -2658,4 +2692,3 @@ msgstr "Un utilisateur avec cette adresse email existe déjà" msgid "You must either choose an existing user or create a new one properly" msgstr "" "Vous devez soit choisir un utilisateur existant, ou en créer un proprement." - diff --git a/sith/settings.py b/sith/settings.py index ae7a1271..a3962437 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -398,6 +398,9 @@ SITH_MAXIMUM_FREE_ROLE=1 # Minutes to timeout the logged barmen SITH_BARMAN_TIMEOUT=20 +# Minutes to delete the last operations +SITH_LAST_OPERATIONS_LIMIT=5 + # ET variables SITH_EBOUTIC_ET_URL = "https://preprod-tpeweb.e-transactions.fr/cgi/MYchoix_pagepaiement.cgi" SITH_EBOUTIC_PBX_SITE = "4000666"