Commit ba48adab authored by Skia's avatar Skia 🤘
Browse files

Improve launderette plannings and admin part

parent fc170cfc
Pipeline #79 failed with stage
in 2 minutes and 11 seconds
...@@ -16,12 +16,17 @@ ...@@ -16,12 +16,17 @@
{% if user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %} {% if user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %}
<li><a href="{{ url('subscription:subscription') }}">{% trans %}Subscriptions{% endtrans %}</a></li> <li><a href="{{ url('subscription:subscription') }}">{% trans %}Subscriptions{% endtrans %}</a></li>
{% endif %} {% endif %}
<h5>{% trans %}Launderette{% endtrans %}</h5>
{% if user.is_in_group(settings.SITH_GROUPS['launderette-admin']['name']) %}
<li><a href="{{ url('launderette:launderette_list') }}">{% trans %}Launderette{% endtrans %}</a></li>
{% endif %}
</ul> </ul>
<hr> <hr>
<h4>{% trans %}Counters{% endtrans %}</h4> <h4>{% trans %}Counters{% endtrans %}</h4>
<ul> <ul>
{% if user.is_in_group(settings.SITH_GROUPS['counter-admin']['name']) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %} {% if user.is_in_group(settings.SITH_GROUPS['counter-admin']['name']) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %}
<h5>{% trans %}General management{% endtrans %}</h5>
<li><a href="{{ url('counter:admin_list') }}">{% trans %}General counters management{% endtrans %}</a></li> <li><a href="{{ url('counter:admin_list') }}">{% trans %}General counters management{% endtrans %}</a></li>
<li><a href="{{ url('counter:product_list') }}">{% trans %}Products management{% endtrans %}</a></li> <li><a href="{{ url('counter:product_list') }}">{% trans %}Products management{% endtrans %}</a></li>
<li><a href="{{ url('counter:producttype_list') }}">{% trans %}Products type management{% endtrans %}</a></li> <li><a href="{{ url('counter:producttype_list') }}">{% trans %}Products type management{% endtrans %}</a></li>
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('launderette', '0002_auto_20160729_0138'),
]
operations = [
migrations.AddField(
model_name='machine',
name='type',
field=models.CharField(choices=[('WASHING', 'Washing'), ('DRYING', 'Drying')], max_length=10, default='WASHING', verbose_name='type'),
preserve_default=False,
),
]
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
from django.utils.timezone import utc
import datetime
class Migration(migrations.Migration):
dependencies = [
('launderette', '0003_machine_type'),
]
operations = [
migrations.AddField(
model_name='token',
name='start_date',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 29, 10, 46, 13, 675691, tzinfo=utc), verbose_name='start date'),
preserve_default=False,
),
]
...@@ -35,6 +35,7 @@ class Launderette(models.Model): ...@@ -35,6 +35,7 @@ class Launderette(models.Model):
class Machine(models.Model): class Machine(models.Model):
name = models.CharField(_('name'), max_length=30) name = models.CharField(_('name'), max_length=30)
launderette = models.ForeignKey(Launderette, related_name='machines', verbose_name=_('launderette')) launderette = models.ForeignKey(Launderette, related_name='machines', verbose_name=_('launderette'))
type = models.CharField(_('type'), max_length=10, choices=[('WASHING', _('Washing')), ('DRYING', _('Drying'))])
is_working = models.BooleanField(_('is working'), default=True) is_working = models.BooleanField(_('is working'), default=True)
class Meta: class Meta:
...@@ -49,12 +50,16 @@ class Machine(models.Model): ...@@ -49,12 +50,16 @@ class Machine(models.Model):
return False return False
def __str__(self): def __str__(self):
return "%s - Launderette: %s - Working: %s" % (self.name, self.launderette, self.is_working) return "%s %s" % (self._meta.verbose_name, self.name)
def get_absolute_url(self):
return reverse('launderette:launderette_details', kwargs={"launderette_id": self.launderette.id})
class Token(models.Model): class Token(models.Model):
name = models.IntegerField(_('name')) name = models.IntegerField(_('name'))
launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette')) launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette'))
type = models.CharField(_('type'), max_length=10, choices=[('WASHING', _('Washing')), ('DRYING', _('Drying'))]) type = models.CharField(_('type'), max_length=10, choices=[('WASHING', _('Washing')), ('DRYING', _('Drying'))])
start_date = models.DateTimeField(_('start date'))
class Meta: class Meta:
verbose_name = _('Token') verbose_name = _('Token')
...@@ -81,6 +86,7 @@ class Slot(models.Model): ...@@ -81,6 +86,7 @@ class Slot(models.Model):
return super(Slot, self).full_clean() return super(Slot, self).full_clean()
def __str__(self): def __str__(self):
return str(self.user) + " - " + str(self.start_date) return "User: %s - Date: %s - Type: %s - Machine: %s - Token: %s" % (self.user, self.start_date, self.get_type_display(),
self.machine.name, self.token)
...@@ -7,13 +7,29 @@ ...@@ -7,13 +7,29 @@
{% macro choose(date) %} {% macro choose(date) %}
<form method="post" action="{{ url('launderette:book_slot', launderette_id=launderette.id) }}" class="inline" style="display:inline"> <form method="post" action="{{ url('launderette:book_slot', launderette_id=launderette.id) }}" class="inline" style="display:inline">
{% csrf_token %} {% csrf_token %}
<button type="submit" name="slot" value="{{ localtime(date).isoformat() }}"> {% trans %}Choose{% endtrans %} </button> <input type="hidden" name="slot_type" value="{{ slot_type }}">
<button type="submit" name="slot" value="{{ date.isoformat() }}">{% trans %}Choose{% endtrans %}</button>
</form> </form>
{% endmacro %} {% endmacro %}
{% block content %} {% block content %}
{% if request.user.is_in_group(settings.SITH_MAIN_MEMBERS_GROUP) %} <h3>{{ launderette }}</h3>
<p>
<form method="post" action="{{ url('launderette:book_slot', launderette_id=launderette.id) }}"
class="inline" style="display:inline">
{% csrf_token %}
<button type="submit" name="slot_type" value="BOTH" {% if slot_type == "BOTH" -%}style="background: #FF0"{% endif %}>{% trans %}Washing and drying{% endtrans %}</button>
</form>
<form method="post" action="{{ url('launderette:book_slot', launderette_id=launderette.id) }}" class="inline" style="display:inline">
{% csrf_token %}
<button type="submit" name="slot_type" value="WASHING" {% if slot_type == "WASHING" -%}style="background: #FF0"{% endif %}>{% trans %}Washing{% endtrans %}</button>
</form>
<form method="post" action="{{ url('launderette:book_slot', launderette_id=launderette.id) }}" class="inline" style="display:inline">
{% csrf_token %}
<button type="submit" name="slot_type" value="DRYING" {% if slot_type == "DRYING" -%}style="background: #FF0"{% endif %}>{% trans %}Drying{% endtrans %}</button>
</form>
</p>
<table> <table>
<thead> <thead>
<tr> <tr>
...@@ -28,7 +44,7 @@ ...@@ -28,7 +44,7 @@
{% for hours in planning.values() %} {% for hours in planning.values() %}
<td> <td>
{% if hours[i] %} {% if hours[i] %}
{{ hours[i]|localtime|time(TIME_FORMAT) }} {{ choose(hours[i]) }} {{ hours[i]|time(TIME_FORMAT) }} {{ choose(hours[i]) }}
{% endif %} {% endif %}
</td> </td>
{% endfor %} {% endfor %}
...@@ -36,7 +52,6 @@ ...@@ -36,7 +52,6 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% endif %}
{% endblock %} {% endblock %}
......
...@@ -5,7 +5,14 @@ ...@@ -5,7 +5,14 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
Admin <h3>{% trans %}Machines{% endtrans %}</h3>
<p><a href="{{ url('launderette:machine_new') }}?launderette={{ launderette.id }}">{% trans %}New machine{% endtrans %}</a></p>
<ul>
{% for m in launderette.machines.all() %}
<li><a href="{{ url('launderette:machine_edit', machine_id=m.id) }}">{{ m }}</a> -
<a href="{{ url('launderette:machine_delete', machine_id=m.id) }}">{% trans %}Delete{% endtrans %}</a></li>
{% endfor %}
</ul>
{% endblock %} {% endblock %}
......
...@@ -11,6 +11,9 @@ urlpatterns = [ ...@@ -11,6 +11,9 @@ urlpatterns = [
url(r'^admin/(?P<launderette_id>[0-9]+)$', LaunderetteDetailView.as_view(), name='launderette_details'), url(r'^admin/(?P<launderette_id>[0-9]+)$', LaunderetteDetailView.as_view(), name='launderette_details'),
url(r'^admin/(?P<launderette_id>[0-9]+)/edit$', LaunderetteEditView.as_view(), name='launderette_edit'), url(r'^admin/(?P<launderette_id>[0-9]+)/edit$', LaunderetteEditView.as_view(), name='launderette_edit'),
url(r'^admin/new$', LaunderetteCreateView.as_view(), name='launderette_new'), url(r'^admin/new$', LaunderetteCreateView.as_view(), name='launderette_new'),
url(r'^admin/machine/new$', MachineCreateView.as_view(), name='machine_new'),
url(r'^admin/machine/(?P<machine_id>[0-9]+)/edit$', MachineEditView.as_view(), name='machine_edit'),
url(r'^admin/machine/(?P<machine_id>[0-9]+)/delete$', MachineDeleteView.as_view(), name='machine_delete'),
] ]
......
from datetime import datetime, timedelta from datetime import datetime, timedelta
from collections import OrderedDict from collections import OrderedDict
import pytz
from django.shortcuts import render from django.shortcuts import render
from django.views.generic import ListView, DetailView, RedirectView, TemplateView from django.views.generic import ListView, DetailView, RedirectView, TemplateView
...@@ -7,9 +8,10 @@ from django.views.generic.edit import UpdateView, CreateView, DeleteView, Proces ...@@ -7,9 +8,10 @@ from django.views.generic.edit import UpdateView, CreateView, DeleteView, Proces
from django.forms.models import modelform_factory from django.forms.models import modelform_factory
from django.forms import CheckboxSelectMultiple from django.forms import CheckboxSelectMultiple
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.utils.timezone import make_aware
from django.utils import dateparse from django.utils import dateparse
from django.core.urlresolvers import reverse_lazy
from django.conf import settings from django.conf import settings
from django.db import transaction
from core.models import Page from core.models import Page
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin
...@@ -33,27 +35,50 @@ class LaunderetteBookMainView(CanViewMixin, ListView): ...@@ -33,27 +35,50 @@ class LaunderetteBookMainView(CanViewMixin, ListView):
model = Launderette model = Launderette
template_name = 'launderette/launderette_book_choose.jinja' template_name = 'launderette/launderette_book_choose.jinja'
class LaunderetteBookView(DetailView): class LaunderetteBookView(CanViewMixin, DetailView):
"""Display the launderette schedule""" """Display the launderette schedule"""
model = Launderette model = Launderette
pk_url_kwarg = "launderette_id" pk_url_kwarg = "launderette_id"
template_name = 'launderette/launderette_book.jinja' template_name = 'launderette/launderette_book.jinja'
def get(self, request, *args, **kwargs):
self.slot_type = "BOTH"
self.machines = {}
return super(LaunderetteBookView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.slot_type = "BOTH"
if 'slot' in request.POST.keys() and request.user.is_authenticated(): self.machines = {}
subscriber = get_subscriber(request.user) with transaction.atomic():
if subscriber.is_subscribed(): self.object = self.get_object()
date = dateparse.parse_datetime(request.POST['slot']) if 'slot_type' in request.POST.keys():
for m in self.object.machines.filter(is_working=True).all(): self.slot_type = request.POST['slot_type']
slot = Slot.objects.filter(start_date=date, machine=m).first() if 'slot' in request.POST.keys() and request.user.is_authenticated():
print(slot) self.subscriber = get_subscriber(request.user)
if slot is None: if self.subscriber.is_subscribed():
Slot(user=subscriber, start_date=date, machine=m, type="WASHING").save() self.date = dateparse.parse_datetime(request.POST['slot']).replace(tzinfo=pytz.UTC)
print("Saved") if self.slot_type == "WASHING":
break if self.check_slot(self.slot_type):
Slot(user=self.subscriber, start_date=self.date, machine=self.machines[self.slot_type], type=self.slot_type).save()
elif self.slot_type == "DRYING":
if self.check_slot(self.slot_type):
Slot(user=self.subscriber, start_date=self.date, machine=self.machines[self.slot_type], type=self.slot_type).save()
else:
if self.check_slot("WASHING") and self.check_slot("DRYING", self.date + timedelta(hours=1)):
Slot(user=self.subscriber, start_date=self.date, machine=self.machines["WASHING"], type="WASHING").save()
Slot(user=self.subscriber, start_date=self.date + timedelta(hours=1),
machine=self.machines["DRYING"], type="DRYING").save()
return super(LaunderetteBookView, self).get(request, *args, **kwargs) return super(LaunderetteBookView, self).get(request, *args, **kwargs)
def check_slot(self, type, date=None):
if date is None: date = self.date
for m in self.object.machines.filter(is_working=True, type=type).all():
slot = Slot.objects.filter(start_date=date, machine=m).first()
if slot is None:
self.machines[type] = m
return True
return False
@staticmethod @staticmethod
def date_iterator(startDate, endDate, delta=timedelta(days=1)): def date_iterator(startDate, endDate, delta=timedelta(days=1)):
currentDate = startDate currentDate = startDate
...@@ -65,16 +90,20 @@ class LaunderetteBookView(DetailView): ...@@ -65,16 +90,20 @@ class LaunderetteBookView(DetailView):
""" Add page to the context """ """ Add page to the context """
kwargs = super(LaunderetteBookView, self).get_context_data(**kwargs) kwargs = super(LaunderetteBookView, self).get_context_data(**kwargs)
kwargs['planning'] = OrderedDict() kwargs['planning'] = OrderedDict()
start_date = make_aware(datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)) kwargs['slot_type'] = self.slot_type
start_date = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=pytz.UTC)
for date in LaunderetteBookView.date_iterator(start_date, start_date+timedelta(days=6), timedelta(days=1)): for date in LaunderetteBookView.date_iterator(start_date, start_date+timedelta(days=6), timedelta(days=1)):
kwargs['planning'][date] = [] kwargs['planning'][date] = []
for h in LaunderetteBookView.date_iterator(date, date+timedelta(days=1), timedelta(hours=1)): for h in LaunderetteBookView.date_iterator(date, date+timedelta(days=1), timedelta(hours=1)):
free = False free = False
for m in self.object.machines.filter(is_working=True).all(): if self.slot_type == "BOTH" and self.check_slot("WASHING", h) and self.check_slot("DRYING", h + timedelta(hours=1)):
s = Slot.objects.filter(start_date=h, machine=m).first() print("GUY")
if s is None: free = True
free = True elif self.slot_type == "WASHING" and self.check_slot("WASHING", h):
if free and make_aware(datetime.now()) < h: free = True
elif self.slot_type == "DRYING" and self.check_slot("DRYING", h):
free = True
if free and datetime.now().replace(tzinfo=pytz.UTC) < h:
kwargs['planning'][date].append(h) kwargs['planning'][date].append(h)
else: else:
kwargs['planning'][date].append(None) kwargs['planning'][date].append(None)
...@@ -105,5 +134,37 @@ class LaunderetteEditView(CanViewMixin, UpdateView): ...@@ -105,5 +134,37 @@ class LaunderetteEditView(CanViewMixin, UpdateView):
class LaunderetteCreateView(CanCreateMixin, CreateView): class LaunderetteCreateView(CanCreateMixin, CreateView):
"""Create a new launderette""" """Create a new launderette"""
model = Launderette model = Launderette
fields = ['name', 'sellers'] fields = ['name']
template_name = 'core/create.jinja' template_name = 'core/create.jinja'
class MachineEditView(CanEditPropMixin, UpdateView):
"""Edit a machine"""
model = Machine
pk_url_kwarg = "machine_id"
fields = ['name', 'launderette', 'type', 'is_working']
template_name = 'core/edit.jinja'
class MachineDeleteView(CanEditPropMixin, DeleteView):
"""Edit a machine"""
model = Machine
pk_url_kwarg = "machine_id"
template_name = 'core/delete_confirm.jinja'
success_url = reverse_lazy('launderette:launderette_list')
class MachineCreateView(CanCreateMixin, CreateView):
"""Create a new machine"""
model = Machine
fields = ['name', 'launderette', 'type']
template_name = 'core/create.jinja'
def get_initial(self):
ret = super(MachineCreateView, self).get_initial()
if 'launderette' in self.request.GET.keys():
obj = Launderette.objects.filter(id=int(self.request.GET['launderette'])).first()
if obj is not None:
ret['launderette'] = obj.id
return ret
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-28 20:02+0200\n" "POT-Creation-Date: 2016-07-29 12:46+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"
...@@ -19,7 +19,7 @@ msgstr "" ...@@ -19,7 +19,7 @@ msgstr ""
#: accounting/models.py:32 accounting/models.py:55 accounting/models.py:94 #: accounting/models.py:32 accounting/models.py:55 accounting/models.py:94
#: club/models.py:18 counter/models.py:38 counter/models.py:63 #: club/models.py:18 counter/models.py:38 counter/models.py:63
#: counter/models.py:91 launderette/models.py:12 launderette/models.py:36 #: counter/models.py:91 launderette/models.py:12 launderette/models.py:36
#: launderette/models.py:52 #: launderette/models.py:59
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
...@@ -32,7 +32,7 @@ msgid "account number" ...@@ -32,7 +32,7 @@ msgid "account number"
msgstr "numero de compte" msgstr "numero de compte"
#: accounting/models.py:92 club/models.py:109 counter/models.py:237 #: accounting/models.py:92 club/models.py:109 counter/models.py:237
#: launderette/models.py:68 #: launderette/models.py:62 launderette/models.py:76
msgid "start date" msgid "start date"
msgstr "date de début" msgstr "date de début"
...@@ -116,12 +116,12 @@ msgstr "Il n'y a pas de types comptable dans ce site web." ...@@ -116,12 +116,12 @@ msgstr "Il n'y a pas de types comptable dans ce site web."
#: accounting/templates/accounting/bank_account_details.jinja:5 #: accounting/templates/accounting/bank_account_details.jinja:5
#: accounting/templates/accounting/club_account_details.jinja:5 #: accounting/templates/accounting/club_account_details.jinja:5
#: accounting/templates/accounting/journal_details.jinja:5 #: accounting/templates/accounting/journal_details.jinja:5
#: core/templates/core/user_tools.jinja:38 #: core/templates/core/user_tools.jinja:43
msgid "Accounting" msgid "Accounting"
msgstr "Comptabilité" msgstr "Comptabilité"
#: accounting/templates/accounting/bank_account_details.jinja:8 #: accounting/templates/accounting/bank_account_details.jinja:8
#: core/templates/core/user_tools.jinja:45 #: core/templates/core/user_tools.jinja:50
msgid "Bank account: " msgid "Bank account: "
msgstr "Compte en banque : " msgstr "Compte en banque : "
...@@ -148,7 +148,7 @@ msgstr "Nouveau compte club" ...@@ -148,7 +148,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/journal_details.jinja:51 #: accounting/templates/accounting/journal_details.jinja:51
#: club/templates/club/club_detail.jinja:7 core/templates/core/page.jinja:31 #: club/templates/club/club_detail.jinja:7 core/templates/core/page.jinja:31
#: core/templates/core/user_base.jinja:8 #: core/templates/core/user_base.jinja:8
#: core/templates/core/user_tools.jinja:32 #: core/templates/core/user_tools.jinja:37
#: counter/templates/counter/counter_list.jinja:15 #: counter/templates/counter/counter_list.jinja:15
#: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:18
#: launderette/templates/launderette/launderette_list.jinja:14 #: launderette/templates/launderette/launderette_list.jinja:14
...@@ -158,6 +158,7 @@ msgstr "Éditer" ...@@ -158,6 +158,7 @@ msgstr "Éditer"
#: accounting/templates/accounting/bank_account_details.jinja:19 #: accounting/templates/accounting/bank_account_details.jinja:19
#: accounting/templates/accounting/bank_account_list.jinja:16 #: accounting/templates/accounting/bank_account_list.jinja:16
#: core/templates/core/group_list.jinja:13 #: core/templates/core/group_list.jinja:13
#: launderette/templates/launderette/launderette_detail.jinja:13
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
...@@ -206,8 +207,6 @@ msgstr "Fin" ...@@ -206,8 +207,6 @@ msgstr "Fin"
#: accounting/templates/accounting/journal_details.jinja:23 #: accounting/templates/accounting/journal_details.jinja:23
#: counter/templates/counter/user_account.jinja:17 #: counter/templates/counter/user_account.jinja:17
#: counter/templates/counter/user_account.jinja:63 #: counter/templates/counter/user_account.jinja:63
#: launderette/templates/launderette/user_account.jinja:17
#: launderette/templates/launderette/user_account.jinja:63
msgid "Amount" msgid "Amount"
msgstr "Montant" msgstr "Montant"
...@@ -241,7 +240,6 @@ msgstr "Voir" ...@@ -241,7 +240,6 @@ msgstr "Voir"
#: accounting/templates/accounting/journal_details.jinja:10 #: accounting/templates/accounting/journal_details.jinja:10
#: counter/templates/counter/user_account.jinja:9 #: counter/templates/counter/user_account.jinja:9
#: launderette/templates/launderette/user_account.jinja:9
msgid "Amount: " msgid "Amount: "
msgstr "Montant: " msgstr "Montant: "
...@@ -265,9 +263,6 @@ msgstr "No" ...@@ -265,9 +263,6 @@ msgstr "No"
#: counter/templates/counter/user_account.jinja:15 #: counter/templates/counter/user_account.jinja:15
#: counter/templates/counter/user_account.jinja:36 #: counter/templates/counter/user_account.jinja:36
#: counter/templates/counter/user_account.jinja:61 #: counter/templates/counter/user_account.jinja:61
#: launderette/templates/launderette/user_account.jinja:15
#: launderette/templates/launderette/user_account.jinja:36
#: launderette/templates/launderette/user_account.jinja:61
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
...@@ -320,7 +315,7 @@ msgid "You can not make loops in clubs" ...@@ -320,7 +315,7 @@ msgid "You can not make loops in clubs"
msgstr "Vous ne pouvez pas faire de boucles dans les clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs"
#: club/models.py:107 eboutic/models.py:12 eboutic/models.py:45 #: club/models.py:107 eboutic/models.py:12 eboutic/models.py:45
#: launderette/models.py:72 #: launderette/models.py:80
msgid "user" msgid "user"
msgstr "nom d'utilisateur" msgstr "nom d'utilisateur"
...@@ -376,7 +371,6 @@ msgstr "Éditer le club" ...@@ -376,7 +371,6 @@ msgstr "Éditer le club"
#: core/templates/core/page_prop.jinja:8 #: core/templates/core/page_prop.jinja:8
#: core/templates/core/pagerev_edit.jinja:24 #: core/templates/core/pagerev_edit.jinja:24
#: counter/templates/counter/counter_edit.jinja:8 #: counter/templates/counter/counter_edit.jinja:8
#: launderette/templates/launderette/counter_edit.jinja:8
#: subscription/templates/subscription/subscription.jinja:12 #: subscription/templates/subscription/subscription.jinja:12
msgid "Save" msgid "Save"
msgstr "Sauver" msgstr "Sauver"
...@@ -406,7 +400,7 @@ msgid "Add" ...@@ -406,7 +400,7 @@ msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: club/templates/club/club_tools.jinja:4 #: club/templates/club/club_tools.jinja:4
#: core/templates/core/user_tools.jinja:56 #: core/templates/core/user_tools.jinja:61
msgid "Club tools" msgid "Club tools"
msgstr "Outils club" msgstr "Outils club"
...@@ -605,7 +599,6 @@ msgstr "Confirmation" ...@@ -605,7 +599,6 @@ msgstr "Confirmation"
#: core/templates/core/delete_confirm.jinja:8 #: core/templates/core/delete_confirm.jinja:8
#: counter/templates/counter/counter_click.jinja:67 #: counter/templates/counter/counter_click.jinja:67
#: launderette/templates/launderette/counter_click.jinja:67
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
...@@ -656,7 +649,6 @@ msgstr "Merci de vous identifier pour voir cette page." ...@@ -656,7 +649,6 @@ msgstr "Merci de vous identifier pour voir cette page."
#: core/templates/core/login.jinja:22 #: core/templates/core/login.jinja:22
#: counter/templates/counter/counter_main.jinja:48 #: counter/templates/counter/counter_main.jinja:48
#: launderette/templates/launderette/counter_main.jinja:48
msgid "login" msgid "login"
msgstr "login" msgstr "login"
...@@ -890,27 +882,39 @@ msgstr "Gestion de Sith" ...@@ -890,27 +882,39 @@ msgstr "Gestion de Sith"