Make sellings for clubs

This commit is contained in:
Skia 2016-09-08 03:29:49 +02:00
parent 90e47c9d7d
commit 5b5006892d
13 changed files with 289 additions and 198 deletions

View File

@ -1,65 +0,0 @@
{% extends "core/base.jinja" %}
{% block content %}
<div class="tool-bar">
<div>{{ club.name }}</div>
<div class="tools">
<a href="{{ url('club:club_view', club_id=club.id) }}"
{%- if tab == "infos" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Infos{% endtrans %}</a>
{% if can_view(club, user) %}
<a href="{{ url('club:club_members', club_id=club.pk) }}"
{%- if tab == "members" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Members{% endtrans %}</a>
{% endif %}
{% if can_view(club, user) %}
<a href="{{ url('club:club_old_members', club_id=club.pk) }}"
{%- if tab == "elderlies" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Old members{% endtrans %}</a>
{% endif %}
{% if can_view(club, user) %}
<a href="{{ url('club:tools', club_id=club.id) }}"
{%- if tab == "tools" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Tools{% endtrans %}</a>
{% endif %}
{% if can_edit(club, request.user) %}
<a href="{{ url('club:club_edit', club_id=club.id) }}"
{%- if tab == "edit" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Edit{% endtrans %}</a>
{% endif %}
{% if can_edit_prop(club, request.user) %}
<a href="{{ url('club:club_prop', club_id=club.id) }}"
{%- if tab == "props" -%}
class="selected_tab"
{%- endif -%}
>{% trans %}Props{% endtrans %}</a>
{% endif %}
</div>
<hr>
</div>
<div>
{% block club %}
{% endblock %}
</div>
{% endblock %}

View File

@ -12,7 +12,7 @@
<td>{% trans %}To{% endtrans %}</td> <td>{% trans %}To{% endtrans %}</td>
</thead> </thead>
<tbody> <tbody>
{% for m in club.members.exclude(end_date=None).order_by('-role', '-end_date').all() %} {% for m in club.members.exclude(end_date=None).order_by('-role', 'description', '-end_date').all() %}
<tr> <tr>
<td>{{ user_profile_link(m.user) }}</td> <td>{{ user_profile_link(m.user) }}</td>
<td>{{ settings.SITH_CLUB_ROLES[m.role] }}</td> <td>{{ settings.SITH_CLUB_ROLES[m.role] }}</td>

View File

@ -0,0 +1,46 @@
{% extends "core/base.jinja" %}
{% from 'core/macros.jinja' import user_profile_link %}
{% block content %}
<h3>{% trans %}Sellings{% endtrans %}</h3>
<form action="" method="get">
{% csrf_token %}
{{ form }}
<p><input type="submit" value="{% trans %}Show{% endtrans %}" /></p>
</form>
<p>
{% trans %}Quantity: {% endtrans %}{{ result.count() }} {% trans %}units{% endtrans %}<br/>
{% trans %}Total: {% endtrans %}{{ total }} €
</p>
<table>
<thead>
<tr>
<td>{% trans %}Date{% endtrans %}</td>
<td>{% trans %}Counter{% endtrans %}</td>
<td>{% trans %}Barman{% endtrans %}</td>
<td>{% trans %}Customer{% endtrans %}</td>
<td>{% trans %}Label{% endtrans %}</td>
<td>{% trans %}Quantity{% endtrans %}</td>
<td>{% trans %}Total{% endtrans %}</td>
<td>{% trans %}Payment method{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for s in result %}
<tr>
<td>{{ s.date|localtime|date(DATETIME_FORMAT) }} {{ s.date|localtime|time(DATETIME_FORMAT) }}</td>
<td>{{ s.counter }}</td>
<td><a href="{{ s.seller.get_absolute_url() }}">{{ s.seller.get_display_name() }}</a></td>
<td><a href="{{ s.customer.user.get_absolute_url() }}">{{ s.customer.user.get_display_name() }}</a></td>
<td>{{ s.label }}</td>
<td>{{ s.quantity }}</td>
<td>{{ s.quantity * s.unit_price }} €</td>
<td>{{ s.get_payment_method_display() }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@ -9,6 +9,7 @@ urlpatterns = [
url(r'^(?P<club_id>[0-9]+)/edit$', ClubEditView.as_view(), name='club_edit'), url(r'^(?P<club_id>[0-9]+)/edit$', ClubEditView.as_view(), name='club_edit'),
url(r'^(?P<club_id>[0-9]+)/members$', ClubMembersView.as_view(), name='club_members'), url(r'^(?P<club_id>[0-9]+)/members$', ClubMembersView.as_view(), name='club_members'),
url(r'^(?P<club_id>[0-9]+)/elderlies$', ClubOldMembersView.as_view(), name='club_old_members'), url(r'^(?P<club_id>[0-9]+)/elderlies$', ClubOldMembersView.as_view(), name='club_old_members'),
url(r'^(?P<club_id>[0-9]+)/sellings$', ClubSellingView.as_view(), name='club_sellings'),
url(r'^(?P<club_id>[0-9]+)/prop$', ClubEditPropView.as_view(), name='club_prop'), url(r'^(?P<club_id>[0-9]+)/prop$', ClubEditPropView.as_view(), name='club_prop'),
url(r'^(?P<club_id>[0-9]+)/tools$', ClubToolsView.as_view(), name='tools'), url(r'^(?P<club_id>[0-9]+)/tools$', ClubToolsView.as_view(), name='tools'),
url(r'^membership/(?P<membership_id>[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'), url(r'^membership/(?P<membership_id>[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'),

View File

@ -8,10 +8,15 @@ from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.conf import settings
from datetime import timedelta
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin
from core.views.forms import SelectDate, SelectSingle, SelectDateTime
from club.models import Club, Membership from club.models import Club, Membership
from sith.settings import SITH_MAXIMUM_FREE_ROLE, SITH_MAIN_BOARD_GROUP from sith.settings import SITH_MAXIMUM_FREE_ROLE, SITH_MAIN_BOARD_GROUP
from counter.models import Product, Selling, Counter
class ClubTabsMixin(TabedViewMixin): class ClubTabsMixin(TabedViewMixin):
def get_tabs_title(self): def get_tabs_title(self):
@ -46,6 +51,11 @@ class ClubTabsMixin(TabedViewMixin):
'slug': 'edit', 'slug': 'edit',
'name': _("Edit"), 'name': _("Edit"),
}) })
tab_list.append({
'url': reverse('club:club_sellings', kwargs={'club_id': self.object.id}),
'slug': 'sellings',
'name': _("Sellings"),
})
if self.request.user.is_owner(self.object): if self.request.user.is_owner(self.object):
tab_list.append({ tab_list.append({
'url': reverse('club:club_prop', kwargs={'club_id': self.object.id}), 'url': reverse('club:club_prop', kwargs={'club_id': self.object.id}),
@ -143,6 +153,47 @@ class ClubOldMembersView(ClubTabsMixin, CanViewMixin, DetailView):
template_name = 'club/club_old_members.jinja' template_name = 'club/club_old_members.jinja'
current_tab = "elderlies" current_tab = "elderlies"
class SellingsFormBase(forms.Form):
begin_date = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("Begin date"), required=False, widget=SelectDateTime)
end_date = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("End date"), required=False, widget=SelectDateTime)
counter = forms.ModelChoiceField(Counter.objects.order_by('name').all(), label=_("Counter"), required=False)
class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailView):
"""
Sellings of a club
"""
model = Club
pk_url_kwarg = "club_id"
template_name = 'club/club_sellings.jinja'
current_tab = "sellings"
def get_form_class(self):
kwargs = {
'product': forms.ModelChoiceField(self.object.products.order_by('name').all(), label=_("Product"), required=False)
}
return type('SellingsForm', (SellingsFormBase,), kwargs)
def get_context_data(self, **kwargs):
kwargs = super(ClubSellingView, self).get_context_data(**kwargs)
form = self.get_form_class()(self.request.GET, initial={'begin_date': timezone.now()-timedelta(days=7)})
# form = self.get_form_class()(initial={'begin_date': timezone.now()-timedelta(days=7)})
qs = Selling.objects.filter(club=self.object)
if form.is_valid():
if form.cleaned_data['begin_date']:
qs = qs.filter(date__gte=form.cleaned_data['begin_date'])
if form.cleaned_data['end_date']:
qs = qs.filter(date__lte=form.cleaned_data['end_date'])
if form.cleaned_data['counter']:
qs = qs.filter(counter=form.cleaned_data['counter'])
if form.cleaned_data['product']:
qs = qs.filter(product__id=form.cleaned_data['product'].id)
kwargs['result'] = qs.all().order_by('-id')
kwargs['total'] = sum([s.quantity * s.unit_price for s in qs.all()])
else:
kwargs['result'] = qs[:0]
kwargs['form'] = form
return kwargs
class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView): class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView):
""" """
Edit a Club's main informations (for the club's members) Edit a Club's main informations (for the club's members)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,7 @@
<title>{% block title %}{% trans %}Welcome!{% endtrans %}{% endblock %}</title> <title>{% block title %}{% trans %}Welcome!{% endtrans %}{% endblock %}</title>
<link rel="stylesheet" href="{{ static('core/base.css') }}"> <link rel="stylesheet" href="{{ static('core/base.css') }}">
<link rel="stylesheet" href="{{ static('core/multiple-select.css') }}"> <link rel="stylesheet" href="{{ static('core/multiple-select.css') }}">
<link rel="stylesheet" href="{{ static('core/jquery.datetimepicker.min.css') }}">
<link rel="stylesheet" href="{{ static('core/js/ui/jquery-ui.min.css') }}"> <link rel="stylesheet" href="{{ static('core/js/ui/jquery-ui.min.css') }}">
<link rel="stylesheet" href="{{ static('ajax_select/css/ajax_select.css') }}"> <link rel="stylesheet" href="{{ static('ajax_select/css/ajax_select.css') }}">
<link rel="stylesheet" href="{{ static('core/style.css') }}"> <link rel="stylesheet" href="{{ static('core/style.css') }}">
@ -113,8 +114,10 @@
<script src="{{ static('core/js/jquery-3.1.0.min.js') }}"></script> <script src="{{ static('core/js/jquery-3.1.0.min.js') }}"></script>
<script src="{{ static('core/js/ui/jquery-ui.min.js') }}"></script> <script src="{{ static('core/js/ui/jquery-ui.min.js') }}"></script>
<script src="{{ static('core/js/ui/i18n/datepicker-fr.js') }}"></script> <script src="{{ static('core/js/ui/i18n/datepicker-fr.js') }}"></script>
<script src="{{ static('core/js/jquery.datetimepicker.full.min.js') }}"></script>
<script src="{{ static('core/js/multiple-select.js') }}"></script> <script src="{{ static('core/js/multiple-select.js') }}"></script>
<script src="{{ static('ajax_select/js/ajax_select.js') }}"></script> <script src="{{ static('ajax_select/js/ajax_select.js') }}"></script>
<script src="{{ url('javascript-catalog') }}"></script>
<script src="{{ static('core/js/script.js') }}"></script> <script src="{{ static('core/js/script.js') }}"></script>
<script> <script>
$('.select_single').multipleSelect({ $('.select_single').multipleSelect({
@ -146,6 +149,10 @@ $(document).keydown(function (e) {
return false; return false;
} }
}); });
jQuery.datetimepicker.setLocale('{{ request.LANGUAGE_CODE|lower }}');
$('.select_datetime').datetimepicker({
format: 'Y-m-d H:i:s',
});
</script> </script>
{% endblock %} {% endblock %}
</body> </body>

View File

@ -13,5 +13,17 @@ def markdown(text):
md = mistune.Markdown() md = mistune.Markdown()
return mark_safe(md(escape(text))) return mark_safe(md(escape(text)))
@register.filter()
@stringfilter
def datetime_format_python_to_PHP(python_format_string):
"""
Given a python datetime format string, attempts to convert it to the nearest PHP datetime format string possible.
"""
python2PHP = {"%a": "D", "%a": "D", "%A": "l", "%b": "M", "%B": "F", "%c": "", "%d": "d", "%H": "H", "%I": "h", "%j": "z", "%m": "m", "%M": "i", "%p": "A", "%S": "s", "%U": "", "%w": "w", "%W": "W", "%x": "", "%X": "", "%y": "y", "%Y": "Y", "%Z": "e" }
php_format_string = python_format_string
for py, php in python2PHP.items():
php_format_string = php_format_string.replace(py, php)
return php_format_string

View File

@ -3,7 +3,7 @@ from django import forms
from django.db import transaction from django.db import transaction
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.contrib.auth import logout, login, authenticate from django.contrib.auth import logout, login, authenticate
from django.forms import CheckboxSelectMultiple, Select, DateInput, TextInput from django.forms import CheckboxSelectMultiple, Select, DateInput, TextInput, DateTimeInput
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from phonenumber_field.widgets import PhoneNumberInternationalFallbackWidget from phonenumber_field.widgets import PhoneNumberInternationalFallbackWidget
@ -31,6 +31,14 @@ class SelectMultiple(Select):
attrs = {'class': "select_multiple"} attrs = {'class': "select_multiple"}
return super(SelectMultiple, self).render(name, value, attrs) return super(SelectMultiple, self).render(name, value, attrs)
class SelectDateTime(DateTimeInput):
def render(self, name, value, attrs=None):
if attrs:
attrs['class'] = "select_datetime"
else:
attrs = {'class': "select_datetime"}
return super(SelectDateTime, self).render(name, value, attrs)
class SelectDate(DateInput): class SelectDate(DateInput):
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
if attrs: if attrs:

Binary file not shown.

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-09 01:48+0200\n" "POT-Creation-Date: 2016-09-09 16:22+0200\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -180,7 +180,7 @@ msgstr "Compte"
msgid "Company" msgid "Company"
msgstr "Entreprise" msgstr "Entreprise"
#: accounting/models.py:190 sith/settings.py:286 sith/settings_sample.py:275 #: accounting/models.py:190 sith/settings.py:289 sith/settings_sample.py:275
msgid "Other" msgid "Other"
msgstr "Autre" msgstr "Autre"
@ -304,8 +304,7 @@ msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:17 #: accounting/templates/accounting/bank_account_details.jinja:17
#: club/templates/club/club_base.jinja:11 club/views.py:25 #: club/views.py:30 core/views/user.py:126
#: core/views/user.py:126
msgid "Infos" msgid "Infos"
msgstr "Infos" msgstr "Infos"
@ -324,8 +323,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:26 #: accounting/templates/accounting/bank_account_details.jinja:26
#: accounting/templates/accounting/bank_account_list.jinja:21 #: accounting/templates/accounting/bank_account_list.jinja:21
#: accounting/templates/accounting/club_account_details.jinja:53 #: accounting/templates/accounting/club_account_details.jinja:53
#: accounting/templates/accounting/journal_details.jinja:66 #: accounting/templates/accounting/journal_details.jinja:66 club/views.py:52
#: club/templates/club/club_base.jinja:42 club/views.py:47
#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 #: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31
#: core/templates/core/user_tools.jinja:33 core/views/user.py:143 #: core/templates/core/user_tools.jinja:33 core/views/user.py:143
#: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:17
@ -445,6 +443,7 @@ msgid "Nb"
msgstr "No" msgstr "No"
#: accounting/templates/accounting/journal_details.jinja:27 #: accounting/templates/accounting/journal_details.jinja:27
#: club/templates/club/club_sellings.jinja:18
#: core/templates/core/user_account.jinja:16 #: core/templates/core/user_account.jinja:16
#: core/templates/core/user_account.jinja:44 #: core/templates/core/user_account.jinja:44
#: core/templates/core/user_account.jinja:76 #: core/templates/core/user_account.jinja:76
@ -567,26 +566,6 @@ msgstr "L'utilisateur est déjà membre de ce club"
msgid "past member" msgid "past member"
msgstr "Anciens membres" msgstr "Anciens membres"
#: club/templates/club/club_base.jinja:18 club/views.py:31
msgid "Members"
msgstr "Membres"
#: club/templates/club/club_base.jinja:26 club/views.py:36
msgid "Old members"
msgstr "Anciens membres"
#: club/templates/club/club_base.jinja:34 club/views.py:42
#: core/templates/core/base.jinja:37 core/views/user.py:132
msgid "Tools"
msgstr "Outils"
#: club/templates/club/club_base.jinja:50 club/views.py:53
#: counter/templates/counter/counter_list.jinja:20
#: counter/templates/counter/counter_list.jinja:34
#: counter/templates/counter/counter_list.jinja:48
msgid "Props"
msgstr "Propriétés"
#: club/templates/club/club_list.jinja:4 #: club/templates/club/club_list.jinja:4
#: club/templates/club/club_list.jinja:24 #: club/templates/club/club_list.jinja:24
msgid "Club list" msgid "Club list"
@ -640,6 +619,68 @@ msgstr "Du"
msgid "To" msgid "To"
msgstr "Au" msgstr "Au"
#: club/templates/club/club_sellings.jinja:5 club/views.py:57
#: counter/templates/counter/counter_main.jinja:19
msgid "Sellings"
msgstr "Ventes"
#: club/templates/club/club_sellings.jinja:9
msgid "Show"
msgstr "Montrer"
#: club/templates/club/club_sellings.jinja:12
msgid "Quantity: "
msgstr "Quantité : "
#: club/templates/club/club_sellings.jinja:12
msgid "units"
msgstr "unités"
#: club/templates/club/club_sellings.jinja:13
#: counter/templates/counter/counter_click.jinja:67
#: 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:159
#: core/templates/core/user_account.jinja:17
#: core/templates/core/user_account.jinja:45
msgid "Counter"
msgstr "Comptoir"
#: club/templates/club/club_sellings.jinja:20
#: core/templates/core/user_account.jinja:18
#: core/templates/core/user_account.jinja:46
msgid "Barman"
msgstr "Barman"
#: club/templates/club/club_sellings.jinja:21
#: counter/templates/counter/counter_click.jinja:29
msgid "Customer"
msgstr "Client"
#: club/templates/club/club_sellings.jinja:22
#: core/templates/core/user_account.jinja:47
msgid "Label"
msgstr "Intitulé"
#: club/templates/club/club_sellings.jinja:23
#: core/templates/core/user_account.jinja:48
msgid "Quantity"
msgstr "Quantité"
#: club/templates/club/club_sellings.jinja:24
#: core/templates/core/user_account.jinja:49
msgid "Total"
msgstr "Total"
#: club/templates/club/club_sellings.jinja:25
#: core/templates/core/user_account.jinja:20
#: core/templates/core/user_account.jinja:50
msgid "Payment method"
msgstr "Méthode de paiement"
#: club/templates/club/club_tools.jinja:4 #: club/templates/club/club_tools.jinja:4
#: core/templates/core/user_tools.jinja:58 #: core/templates/core/user_tools.jinja:58
msgid "Club tools" msgid "Club tools"
@ -657,6 +698,36 @@ msgstr "Comptabilité : "
msgid "Manage launderettes" msgid "Manage launderettes"
msgstr "Gestion des laveries" msgstr "Gestion des laveries"
#: club/views.py:36
msgid "Members"
msgstr "Membres"
#: club/views.py:41
msgid "Old members"
msgstr "Anciens membres"
#: club/views.py:47 core/templates/core/base.jinja:38 core/views/user.py:132
msgid "Tools"
msgstr "Outils"
#: club/views.py:63 counter/templates/counter/counter_list.jinja:20
#: counter/templates/counter/counter_list.jinja:34
#: counter/templates/counter/counter_list.jinja:48
msgid "Props"
msgstr "Propriétés"
#: club/views.py:157
msgid "Begin date"
msgstr "Date de début"
#: club/views.py:158
msgid "End date"
msgstr "Date de fin"
#: club/views.py:172
msgid "Product"
msgstr "Produit"
#: core/models.py:28 #: core/models.py:28
msgid "meta group status" msgid "meta group status"
msgstr "status du meta-groupe" msgstr "status du meta-groupe"
@ -1061,65 +1132,65 @@ msgstr "404. Non trouvé"
msgid "Welcome!" msgid "Welcome!"
msgstr "Bienvenue!" msgstr "Bienvenue!"
#: core/templates/core/base.jinja:18 #: core/templates/core/base.jinja:19
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: core/templates/core/base.jinja:21 core/templates/core/login.jinja:4 #: core/templates/core/base.jinja:22 core/templates/core/login.jinja:4
#: core/templates/core/password_reset_complete.jinja:5 #: core/templates/core/password_reset_complete.jinja:5
msgid "Login" msgid "Login"
msgstr "Connexion" msgstr "Connexion"
#: core/templates/core/base.jinja:22 core/templates/core/register.jinja:18 #: core/templates/core/base.jinja:23 core/templates/core/register.jinja:18
msgid "Register" msgid "Register"
msgstr "S'enregister" msgstr "S'enregister"
#: core/templates/core/base.jinja:38 #: core/templates/core/base.jinja:39
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
#: core/templates/core/base.jinja:40 core/templates/core/base.jinja.py:41 #: core/templates/core/base.jinja:41 core/templates/core/base.jinja.py:42
msgid "Search" msgid "Search"
msgstr "Recherche" msgstr "Recherche"
#: core/templates/core/base.jinja:63 #: core/templates/core/base.jinja:64
msgid "Main" msgid "Main"
msgstr "Accueil" msgstr "Accueil"
#: core/templates/core/base.jinja:64 #: core/templates/core/base.jinja:65
msgid "Matmatronch" msgid "Matmatronch"
msgstr "Matmatronch" msgstr "Matmatronch"
#: core/templates/core/base.jinja:65 #: core/templates/core/base.jinja:66
msgid "Wiki" msgid "Wiki"
msgstr "Wiki" msgstr "Wiki"
#: core/templates/core/base.jinja:66 #: core/templates/core/base.jinja:67
msgid "SAS" msgid "SAS"
msgstr "SAS" msgstr "SAS"
#: core/templates/core/base.jinja:67 #: core/templates/core/base.jinja:68
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
#: core/templates/core/base.jinja:68 #: core/templates/core/base.jinja:69
msgid "Services" msgid "Services"
msgstr "Services" msgstr "Services"
#: core/templates/core/base.jinja:69 core/templates/core/file.jinja:20 #: core/templates/core/base.jinja:70 core/templates/core/file.jinja:20
#: core/views/files.py:42 #: core/views/files.py:42
msgid "Files" msgid "Files"
msgstr "Fichiers" msgstr "Fichiers"
#: core/templates/core/base.jinja:70 #: core/templates/core/base.jinja:71
msgid "Sponsors" msgid "Sponsors"
msgstr "Partenaires" msgstr "Partenaires"
#: core/templates/core/base.jinja:71 #: core/templates/core/base.jinja:72
msgid "Help" msgid "Help"
msgstr "Aide" msgstr "Aide"
#: core/templates/core/base.jinja:103 #: core/templates/core/base.jinja:104
msgid "Site made by good people" msgid "Site made by good people"
msgstr "Site réalisé par des gens bons" msgstr "Site réalisé par des gens bons"
@ -1490,37 +1561,10 @@ msgstr "Compte utilisateur"
msgid "Refillings" msgid "Refillings"
msgstr "Rechargements" msgstr "Rechargements"
#: core/templates/core/user_account.jinja:17
#: core/templates/core/user_account.jinja:45
msgid "Counter"
msgstr "Comptoir"
#: core/templates/core/user_account.jinja:18
#: core/templates/core/user_account.jinja:46
msgid "Barman"
msgstr "Barman"
#: core/templates/core/user_account.jinja:20
#: core/templates/core/user_account.jinja:50
msgid "Payment method"
msgstr "Méthode de paiement"
#: core/templates/core/user_account.jinja:40 #: core/templates/core/user_account.jinja:40
msgid "Account buyings" msgid "Account buyings"
msgstr "Achat sur compte utilisateur" msgstr "Achat sur compte utilisateur"
#: core/templates/core/user_account.jinja:47
msgid "Label"
msgstr "Intitulé"
#: core/templates/core/user_account.jinja:48
msgid "Quantity"
msgstr "Quantité"
#: core/templates/core/user_account.jinja:49
msgid "Total"
msgstr "Total"
#: core/templates/core/user_account.jinja:72 #: core/templates/core/user_account.jinja:72
msgid "Eboutic invoices" msgid "Eboutic invoices"
msgstr "Facture eboutic" msgstr "Facture eboutic"
@ -1663,8 +1707,6 @@ msgid "Products management"
msgstr "Gestion des produits" msgstr "Gestion des produits"
#: core/templates/core/user_tools.jinja:28 #: core/templates/core/user_tools.jinja:28
#, fuzzy
#| msgid "Products type management"
msgid "Product types management" msgid "Product types management"
msgstr "Gestion des types de produit" msgstr "Gestion des types de produit"
@ -1685,24 +1727,24 @@ msgstr "Ajouter un nouveau dossier"
msgid "Error creating folder %(folder_name)s: %(msg)s" msgid "Error creating folder %(folder_name)s: %(msg)s"
msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s" msgstr "Erreur de création du dossier %(folder_name)s : %(msg)s"
#: core/views/files.py:61 core/views/forms.py:172 core/views/forms.py:176 #: core/views/files.py:61 core/views/forms.py:180 core/views/forms.py:184
#, python-format #, python-format
msgid "Error uploading file %(file_name)s: %(msg)s" msgid "Error uploading file %(file_name)s: %(msg)s"
msgstr "Erreur d'envoie du fichier %(file_name)s : %(msg)s" msgstr "Erreur d'envoie du fichier %(file_name)s : %(msg)s"
#: core/views/forms.py:50 core/views/forms.py:53 #: core/views/forms.py:58 core/views/forms.py:61
msgid "Choose file" msgid "Choose file"
msgstr "Choisir un fichier" msgstr "Choisir un fichier"
#: core/views/forms.py:64 core/views/forms.py:67 #: core/views/forms.py:72 core/views/forms.py:75
msgid "Choose user" msgid "Choose user"
msgstr "Choisir un utilisateur" msgstr "Choisir un utilisateur"
#: core/views/forms.py:89 #: core/views/forms.py:97
msgid "Username, email, or account number" msgid "Username, email, or account number"
msgstr "Nom d'utilisateur, email, ou numéro de compte AE" msgstr "Nom d'utilisateur, email, ou numéro de compte AE"
#: core/views/forms.py:131 #: core/views/forms.py:139
msgid "" msgid ""
"Profile: you need to be visible on the picture, in order to be recognized (e." "Profile: you need to be visible on the picture, in order to be recognized (e."
"g. by the barmen)" "g. by the barmen)"
@ -1710,15 +1752,15 @@ msgstr ""
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " "Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
"(par exemple par les barmen)" "(par exemple par les barmen)"
#: core/views/forms.py:132 #: core/views/forms.py:140
msgid "Avatar: used on the forum" msgid "Avatar: used on the forum"
msgstr "Avatar : utilisé sur le forum" msgstr "Avatar : utilisé sur le forum"
#: core/views/forms.py:133 #: core/views/forms.py:141
msgid "Scrub: let other know how your scrub looks like!" msgid "Scrub: let other know how your scrub looks like!"
msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !"
#: core/views/forms.py:177 #: core/views/forms.py:185
msgid "Bad image format, only jpeg, png, and gif are accepted" msgid "Bad image format, only jpeg, png, and gif are accepted"
msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés" msgstr "Mauvais format d'image, seuls les jpeg, png, et gif sont acceptés"
@ -1811,7 +1853,7 @@ msgstr "Bureau"
#: eboutic/templates/eboutic/eboutic_main.jinja:24 #: eboutic/templates/eboutic/eboutic_main.jinja:24
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:8 #: eboutic/templates/eboutic/eboutic_makecommand.jinja:8
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4 #: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
#: sith/settings.py:285 sith/settings.py:293 sith/settings_sample.py:274 #: sith/settings.py:288 sith/settings.py:296 sith/settings_sample.py:274
#: sith/settings_sample.py:282 #: sith/settings_sample.py:282
msgid "Eboutic" msgid "Eboutic"
msgstr "Eboutic" msgstr "Eboutic"
@ -1849,8 +1891,8 @@ msgstr "quantité"
msgid "Sith account" msgid "Sith account"
msgstr "Compte utilisateur" msgstr "Compte utilisateur"
#: counter/models.py:246 sith/settings.py:278 sith/settings.py:283 #: counter/models.py:246 sith/settings.py:281 sith/settings.py:286
#: sith/settings.py:305 sith/settings_sample.py:267 #: sith/settings.py:308 sith/settings_sample.py:267
#: sith/settings_sample.py:272 sith/settings_sample.py:294 #: sith/settings_sample.py:272 sith/settings_sample.py:294
msgid "Credit card" msgid "Credit card"
msgstr "Carte bancaire" msgstr "Carte bancaire"
@ -1896,10 +1938,6 @@ msgstr "élément de relevé de caisse"
msgid "Make a cash register summary" msgid "Make a cash register summary"
msgstr "Faire un relevé de caisse" msgstr "Faire un relevé de caisse"
#: counter/templates/counter/counter_click.jinja:29
msgid "Customer"
msgstr "Client"
#: counter/templates/counter/counter_click.jinja:34 #: counter/templates/counter/counter_click.jinja:34
#: launderette/templates/launderette/launderette_admin.jinja:8 #: launderette/templates/launderette/launderette_admin.jinja:8
msgid "Selling" msgid "Selling"
@ -1930,12 +1968,6 @@ msgstr "Valider"
msgid "Basket: " msgid "Basket: "
msgstr "Panier : " msgstr "Panier : "
#: counter/templates/counter/counter_click.jinja:67
#: counter/templates/counter/counter_main.jinja:28
#: eboutic/templates/eboutic/eboutic_main.jinja:34
msgid "Total: "
msgstr "Total : "
#: counter/templates/counter/counter_click.jinja:71 #: counter/templates/counter/counter_click.jinja:71
msgid "Finish" msgid "Finish"
msgstr "Terminer" msgstr "Terminer"
@ -1972,10 +2004,6 @@ msgstr "Il n'y a pas de comptoirs dans ce site web."
msgid "%(counter_name)s counter" msgid "%(counter_name)s counter"
msgstr "Comptoir %(counter_name)s" msgstr "Comptoir %(counter_name)s"
#: counter/templates/counter/counter_main.jinja:19
msgid "Sellings"
msgstr "Ventes"
#: counter/templates/counter/counter_main.jinja:21 #: counter/templates/counter/counter_main.jinja:21
msgid "Last selling: " msgid "Last selling: "
msgstr "Dernière vente : " msgstr "Dernière vente : "
@ -2280,12 +2308,12 @@ msgid "Washing and drying"
msgstr "Lavage et séchage" msgstr "Lavage et séchage"
#: launderette/templates/launderette/launderette_book.jinja:26 #: launderette/templates/launderette/launderette_book.jinja:26
#: sith/settings.py:419 sith/settings_sample.py:408 #: sith/settings.py:422 sith/settings_sample.py:408
msgid "Washing" msgid "Washing"
msgstr "Lavage" msgstr "Lavage"
#: launderette/templates/launderette/launderette_book.jinja:30 #: launderette/templates/launderette/launderette_book.jinja:30
#: sith/settings.py:419 sith/settings_sample.py:408 #: sith/settings.py:422 sith/settings_sample.py:408
msgid "Drying" msgid "Drying"
msgstr "Séchage" msgstr "Séchage"
@ -2340,119 +2368,119 @@ msgstr "L'utilisateur n'a pas réservé de créneau"
msgid "Token not found" msgid "Token not found"
msgstr "Jeton non trouvé" msgstr "Jeton non trouvé"
#: sith/settings.py:173 sith/settings_sample.py:162 #: sith/settings.py:176 sith/settings_sample.py:162
msgid "English" msgid "English"
msgstr "Anglais" msgstr "Anglais"
#: sith/settings.py:174 sith/settings_sample.py:163 #: sith/settings.py:177 sith/settings_sample.py:163
msgid "French" msgid "French"
msgstr "Français" msgstr "Français"
#: sith/settings.py:275 sith/settings.py:282 sith/settings.py:303 #: sith/settings.py:278 sith/settings.py:285 sith/settings.py:306
#: sith/settings_sample.py:264 sith/settings_sample.py:271 #: sith/settings_sample.py:264 sith/settings_sample.py:271
#: sith/settings_sample.py:292 #: sith/settings_sample.py:292
msgid "Check" msgid "Check"
msgstr "Chèque" msgstr "Chèque"
#: sith/settings.py:276 sith/settings.py:284 sith/settings.py:304 #: sith/settings.py:279 sith/settings.py:287 sith/settings.py:307
#: sith/settings_sample.py:265 sith/settings_sample.py:273 #: sith/settings_sample.py:265 sith/settings_sample.py:273
#: sith/settings_sample.py:293 #: sith/settings_sample.py:293
msgid "Cash" msgid "Cash"
msgstr "Espèces" msgstr "Espèces"
#: sith/settings.py:277 sith/settings_sample.py:266 #: sith/settings.py:280 sith/settings_sample.py:266
msgid "Transfert" msgid "Transfert"
msgstr "Virement" msgstr "Virement"
#: sith/settings.py:290 sith/settings_sample.py:279 #: sith/settings.py:293 sith/settings_sample.py:279
msgid "Belfort" msgid "Belfort"
msgstr "Belfort" msgstr "Belfort"
#: sith/settings.py:291 sith/settings_sample.py:280 #: sith/settings.py:294 sith/settings_sample.py:280
msgid "Sevenans" msgid "Sevenans"
msgstr "Sevenans" msgstr "Sevenans"
#: sith/settings.py:292 sith/settings_sample.py:281 #: sith/settings.py:295 sith/settings_sample.py:281
msgid "Montbéliard" msgid "Montbéliard"
msgstr "Montbéliard" msgstr "Montbéliard"
#: sith/settings.py:332 sith/settings_sample.py:321 #: sith/settings.py:335 sith/settings_sample.py:321
msgid "One semester" msgid "One semester"
msgstr "Un semestre, 15 €" msgstr "Un semestre, 15 €"
#: sith/settings.py:337 sith/settings_sample.py:326 #: sith/settings.py:340 sith/settings_sample.py:326
msgid "Two semesters" msgid "Two semesters"
msgstr "Deux semestres, 28 €" msgstr "Deux semestres, 28 €"
#: sith/settings.py:342 sith/settings_sample.py:331 #: sith/settings.py:345 sith/settings_sample.py:331
msgid "Common core cursus" msgid "Common core cursus"
msgstr "Cursus tronc commun, 45 €" msgstr "Cursus tronc commun, 45 €"
#: sith/settings.py:347 sith/settings_sample.py:336 #: sith/settings.py:350 sith/settings_sample.py:336
msgid "Branch cursus" msgid "Branch cursus"
msgstr "Cursus branche, 45 €" msgstr "Cursus branche, 45 €"
#: sith/settings.py:352 sith/settings_sample.py:341 #: sith/settings.py:355 sith/settings_sample.py:341
msgid "Alternating cursus" msgid "Alternating cursus"
msgstr "Cursus alternant, 30 €" msgstr "Cursus alternant, 30 €"
#: sith/settings.py:357 sith/settings_sample.py:346 #: sith/settings.py:360 sith/settings_sample.py:346
msgid "Honorary member" msgid "Honorary member"
msgstr "Membre honoraire, 0 €" msgstr "Membre honoraire, 0 €"
#: sith/settings.py:362 sith/settings_sample.py:351 #: sith/settings.py:365 sith/settings_sample.py:351
msgid "Assidu member" msgid "Assidu member"
msgstr "Membre d'Assidu, 0 €" msgstr "Membre d'Assidu, 0 €"
#: sith/settings.py:367 sith/settings_sample.py:356 #: sith/settings.py:370 sith/settings_sample.py:356
msgid "Amicale/DOCEO member" msgid "Amicale/DOCEO member"
msgstr "Membre de l'Amicale/DOCEO, 0 €" msgstr "Membre de l'Amicale/DOCEO, 0 €"
#: sith/settings.py:372 sith/settings_sample.py:361 #: sith/settings.py:375 sith/settings_sample.py:361
msgid "UT network member" msgid "UT network member"
msgstr "Cotisant du réseau UT, 0 €" msgstr "Cotisant du réseau UT, 0 €"
#: sith/settings.py:377 sith/settings_sample.py:366 #: sith/settings.py:380 sith/settings_sample.py:366
msgid "CROUS member" msgid "CROUS member"
msgstr "Membres du CROUS, 0 €" msgstr "Membres du CROUS, 0 €"
#: sith/settings.py:382 sith/settings_sample.py:371 #: sith/settings.py:385 sith/settings_sample.py:371
msgid "Sbarro/ESTA member" msgid "Sbarro/ESTA member"
msgstr "Membre de Sbarro ou de l'ESTA, 15 €" msgstr "Membre de Sbarro ou de l'ESTA, 15 €"
#: sith/settings.py:390 sith/settings_sample.py:379 #: sith/settings.py:393 sith/settings_sample.py:379
msgid "President" msgid "President"
msgstr "Président" msgstr "Président"
#: sith/settings.py:391 sith/settings_sample.py:380 #: sith/settings.py:394 sith/settings_sample.py:380
msgid "Vice-President" msgid "Vice-President"
msgstr "Vice-Président" msgstr "Vice-Président"
#: sith/settings.py:392 sith/settings_sample.py:381 #: sith/settings.py:395 sith/settings_sample.py:381
msgid "Treasurer" msgid "Treasurer"
msgstr "Trésorier" msgstr "Trésorier"
#: sith/settings.py:393 sith/settings_sample.py:382 #: sith/settings.py:396 sith/settings_sample.py:382
msgid "Communication supervisor" msgid "Communication supervisor"
msgstr "Responsable com" msgstr "Responsable com"
#: sith/settings.py:394 sith/settings_sample.py:383 #: sith/settings.py:397 sith/settings_sample.py:383
msgid "Secretary" msgid "Secretary"
msgstr "Secrétaire" msgstr "Secrétaire"
#: sith/settings.py:395 sith/settings_sample.py:384 #: sith/settings.py:398 sith/settings_sample.py:384
msgid "IT supervisor" msgid "IT supervisor"
msgstr "Responsable info" msgstr "Responsable info"
#: sith/settings.py:396 sith/settings_sample.py:385 #: sith/settings.py:399 sith/settings_sample.py:385
msgid "Board member" msgid "Board member"
msgstr "Membre du bureau" msgstr "Membre du bureau"
#: sith/settings.py:397 sith/settings_sample.py:386 #: sith/settings.py:400 sith/settings_sample.py:386
msgid "Active member" msgid "Active member"
msgstr "Membre actif" msgstr "Membre actif"
#: sith/settings.py:398 sith/settings_sample.py:387 #: sith/settings.py:401 sith/settings_sample.py:387
msgid "Curious" msgid "Curious"
msgstr "Curieux" msgstr "Curieux"
@ -2496,9 +2524,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" msgid "You must either choose an existing user or create a new one properly"
msgstr "" msgstr ""
"Vous devez soit choisir un utilisateur existant, ou en créer un proprement." "Vous devez soit choisir un utilisateur existant, ou en créer un proprement."
#~ msgid "Edit club"
#~ msgstr "Éditer le club"
#~ msgid "Edit club properties"
#~ msgstr "Éditer les propriétés du club"

View File

@ -17,8 +17,13 @@ from django.conf.urls import include, url
from django.contrib import admin from django.contrib import admin
from django.conf.urls.static import static from django.conf.urls.static import static
from django.conf import settings from django.conf import settings
from django.views.i18n import javascript_catalog
from ajax_select import urls as ajax_select_urls from ajax_select import urls as ajax_select_urls
js_info_dict = {
'packages': ('sith',),
}
handler403 = "core.views.forbidden" handler403 = "core.views.forbidden"
handler404 = "core.views.not_found" handler404 = "core.views.not_found"
@ -34,5 +39,6 @@ urlpatterns = [
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
url(r'^ajax_select/', include(ajax_select_urls)), url(r'^ajax_select/', include(ajax_select_urls)),
url(r'^i18n/', include('django.conf.urls.i18n')), url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='javascript-catalog'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # TODO: remove me for production!!! ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # TODO: remove me for production!!!