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>
</thead>
<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>
<td>{{ user_profile_link(m.user) }}</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]+)/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]+)/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]+)/tools$', ClubToolsView.as_view(), name='tools'),
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.utils import timezone
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.forms import SelectDate, SelectSingle, SelectDateTime
from club.models import Club, Membership
from sith.settings import SITH_MAXIMUM_FREE_ROLE, SITH_MAIN_BOARD_GROUP
from counter.models import Product, Selling, Counter
class ClubTabsMixin(TabedViewMixin):
def get_tabs_title(self):
@ -46,6 +51,11 @@ class ClubTabsMixin(TabedViewMixin):
'slug': '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):
tab_list.append({
'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'
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):
"""
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>
<link rel="stylesheet" href="{{ static('core/base.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('ajax_select/css/ajax_select.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/ui/jquery-ui.min.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('ajax_select/js/ajax_select.js') }}"></script>
<script src="{{ url('javascript-catalog') }}"></script>
<script src="{{ static('core/js/script.js') }}"></script>
<script>
$('.select_single').multipleSelect({
@ -146,6 +149,10 @@ $(document).keydown(function (e) {
return false;
}
});
jQuery.datetimepicker.setLocale('{{ request.LANGUAGE_CODE|lower }}');
$('.select_datetime').datetimepicker({
format: 'Y-m-d H:i:s',
});
</script>
{% endblock %}
</body>

View File

@ -13,5 +13,17 @@ def markdown(text):
md = mistune.Markdown()
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.core.exceptions import ValidationError
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 phonenumber_field.widgets import PhoneNumberInternationalFallbackWidget
@ -31,6 +31,14 @@ class SelectMultiple(Select):
attrs = {'class': "select_multiple"}
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):
def render(self, name, value, attrs=None):
if attrs:

Binary file not shown.

View File

@ -6,7 +6,7 @@
msgid ""
msgstr ""
"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"
"Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n"
@ -180,7 +180,7 @@ msgstr "Compte"
msgid "Company"
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"
msgstr "Autre"
@ -304,8 +304,7 @@ msgid "Delete"
msgstr "Supprimer"
#: accounting/templates/accounting/bank_account_details.jinja:17
#: club/templates/club/club_base.jinja:11 club/views.py:25
#: core/views/user.py:126
#: club/views.py:30 core/views/user.py:126
msgid "Infos"
msgstr "Infos"
@ -324,8 +323,7 @@ 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:53
#: accounting/templates/accounting/journal_details.jinja:66
#: club/templates/club/club_base.jinja:42 club/views.py:47
#: 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:33 core/views/user.py:143
#: counter/templates/counter/counter_list.jinja:17
@ -445,6 +443,7 @@ msgid "Nb"
msgstr "No"
#: 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:44
#: core/templates/core/user_account.jinja:76
@ -567,26 +566,6 @@ msgstr "L'utilisateur est déjà membre de ce club"
msgid "past member"
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:24
msgid "Club list"
@ -640,6 +619,68 @@ msgstr "Du"
msgid "To"
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
#: core/templates/core/user_tools.jinja:58
msgid "Club tools"
@ -657,6 +698,36 @@ msgstr "Comptabilité : "
msgid "Manage launderettes"
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
msgid "meta group status"
msgstr "status du meta-groupe"
@ -1061,65 +1132,65 @@ msgstr "404. Non trouvé"
msgid "Welcome!"
msgstr "Bienvenue!"
#: core/templates/core/base.jinja:18
#: core/templates/core/base.jinja:19
msgid "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
msgid "Login"
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"
msgstr "S'enregister"
#: core/templates/core/base.jinja:38
#: core/templates/core/base.jinja:39
msgid "Logout"
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"
msgstr "Recherche"
#: core/templates/core/base.jinja:63
#: core/templates/core/base.jinja:64
msgid "Main"
msgstr "Accueil"
#: core/templates/core/base.jinja:64
#: core/templates/core/base.jinja:65
msgid "Matmatronch"
msgstr "Matmatronch"
#: core/templates/core/base.jinja:65
#: core/templates/core/base.jinja:66
msgid "Wiki"
msgstr "Wiki"
#: core/templates/core/base.jinja:66
#: core/templates/core/base.jinja:67
msgid "SAS"
msgstr "SAS"
#: core/templates/core/base.jinja:67
#: core/templates/core/base.jinja:68
msgid "Forum"
msgstr "Forum"
#: core/templates/core/base.jinja:68
#: core/templates/core/base.jinja:69
msgid "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
msgid "Files"
msgstr "Fichiers"
#: core/templates/core/base.jinja:70
#: core/templates/core/base.jinja:71
msgid "Sponsors"
msgstr "Partenaires"
#: core/templates/core/base.jinja:71
#: core/templates/core/base.jinja:72
msgid "Help"
msgstr "Aide"
#: core/templates/core/base.jinja:103
#: core/templates/core/base.jinja:104
msgid "Site made by good people"
msgstr "Site réalisé par des gens bons"
@ -1490,37 +1561,10 @@ msgstr "Compte utilisateur"
msgid "Refillings"
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
msgid "Account buyings"
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
msgid "Eboutic invoices"
msgstr "Facture eboutic"
@ -1663,8 +1707,6 @@ msgid "Products management"
msgstr "Gestion des produits"
#: core/templates/core/user_tools.jinja:28
#, fuzzy
#| msgid "Products type management"
msgid "Product types management"
msgstr "Gestion des types de produit"
@ -1685,24 +1727,24 @@ msgstr "Ajouter un nouveau dossier"
msgid "Error creating folder %(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
msgid "Error uploading file %(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"
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"
msgstr "Choisir un utilisateur"
#: core/views/forms.py:89
#: core/views/forms.py:97
msgid "Username, email, or account number"
msgstr "Nom d'utilisateur, email, ou numéro de compte AE"
#: core/views/forms.py:131
#: core/views/forms.py:139
msgid ""
"Profile: you need to be visible on the picture, in order to be recognized (e."
"g. by the barmen)"
@ -1710,15 +1752,15 @@ msgstr ""
"Photo de profil: vous devez être visible sur la photo afin d'être reconnu "
"(par exemple par les barmen)"
#: core/views/forms.py:132
#: core/views/forms.py:140
msgid "Avatar: used on the 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!"
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"
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_makecommand.jinja:8
#: 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
msgid "Eboutic"
msgstr "Eboutic"
@ -1849,8 +1891,8 @@ msgstr "quantité"
msgid "Sith account"
msgstr "Compte utilisateur"
#: counter/models.py:246 sith/settings.py:278 sith/settings.py:283
#: sith/settings.py:305 sith/settings_sample.py:267
#: counter/models.py:246 sith/settings.py:281 sith/settings.py:286
#: sith/settings.py:308 sith/settings_sample.py:267
#: sith/settings_sample.py:272 sith/settings_sample.py:294
msgid "Credit card"
msgstr "Carte bancaire"
@ -1896,10 +1938,6 @@ msgstr "élément de relevé de caisse"
msgid "Make a cash register summary"
msgstr "Faire un relevé de caisse"
#: counter/templates/counter/counter_click.jinja:29
msgid "Customer"
msgstr "Client"
#: counter/templates/counter/counter_click.jinja:34
#: launderette/templates/launderette/launderette_admin.jinja:8
msgid "Selling"
@ -1930,12 +1968,6 @@ msgstr "Valider"
msgid "Basket: "
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
msgid "Finish"
msgstr "Terminer"
@ -1972,10 +2004,6 @@ msgstr "Il n'y a pas de comptoirs dans ce site web."
msgid "%(counter_name)s counter"
msgstr "Comptoir %(counter_name)s"
#: counter/templates/counter/counter_main.jinja:19
msgid "Sellings"
msgstr "Ventes"
#: counter/templates/counter/counter_main.jinja:21
msgid "Last selling: "
msgstr "Dernière vente : "
@ -2280,12 +2308,12 @@ msgid "Washing and drying"
msgstr "Lavage et séchage"
#: 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"
msgstr "Lavage"
#: 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"
msgstr "Séchage"
@ -2340,119 +2368,119 @@ msgstr "L'utilisateur n'a pas réservé de créneau"
msgid "Token not found"
msgstr "Jeton non trouvé"
#: sith/settings.py:173 sith/settings_sample.py:162
#: sith/settings.py:176 sith/settings_sample.py:162
msgid "English"
msgstr "Anglais"
#: sith/settings.py:174 sith/settings_sample.py:163
#: sith/settings.py:177 sith/settings_sample.py:163
msgid "French"
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:292
msgid "Check"
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:293
msgid "Cash"
msgstr "Espèces"
#: sith/settings.py:277 sith/settings_sample.py:266
#: sith/settings.py:280 sith/settings_sample.py:266
msgid "Transfert"
msgstr "Virement"
#: sith/settings.py:290 sith/settings_sample.py:279
#: sith/settings.py:293 sith/settings_sample.py:279
msgid "Belfort"
msgstr "Belfort"
#: sith/settings.py:291 sith/settings_sample.py:280
#: sith/settings.py:294 sith/settings_sample.py:280
msgid "Sevenans"
msgstr "Sevenans"
#: sith/settings.py:292 sith/settings_sample.py:281
#: sith/settings.py:295 sith/settings_sample.py:281
msgid "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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "Président"
#: sith/settings.py:391 sith/settings_sample.py:380
#: sith/settings.py:394 sith/settings_sample.py:380
msgid "Vice-President"
msgstr "Vice-Président"
#: sith/settings.py:392 sith/settings_sample.py:381
#: sith/settings.py:395 sith/settings_sample.py:381
msgid "Treasurer"
msgstr "Trésorier"
#: sith/settings.py:393 sith/settings_sample.py:382
#: sith/settings.py:396 sith/settings_sample.py:382
msgid "Communication supervisor"
msgstr "Responsable com"
#: sith/settings.py:394 sith/settings_sample.py:383
#: sith/settings.py:397 sith/settings_sample.py:383
msgid "Secretary"
msgstr "Secrétaire"
#: sith/settings.py:395 sith/settings_sample.py:384
#: sith/settings.py:398 sith/settings_sample.py:384
msgid "IT supervisor"
msgstr "Responsable info"
#: sith/settings.py:396 sith/settings_sample.py:385
#: sith/settings.py:399 sith/settings_sample.py:385
msgid "Board member"
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"
msgstr "Membre actif"
#: sith/settings.py:398 sith/settings_sample.py:387
#: sith/settings.py:401 sith/settings_sample.py:387
msgid "Curious"
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"
msgstr ""
"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.conf.urls.static import static
from django.conf import settings
from django.views.i18n import javascript_catalog
from ajax_select import urls as ajax_select_urls
js_info_dict = {
'packages': ('sith',),
}
handler403 = "core.views.forbidden"
handler404 = "core.views.not_found"
@ -34,5 +39,6 @@ urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^ajax_select/', include(ajax_select_urls)),
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!!!