Improve launderette plannings and admin part

This commit is contained in:
Skia 2016-07-29 13:00:32 +02:00
parent fc170cfc49
commit ba48adab6d
10 changed files with 232 additions and 115 deletions

View File

@ -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>

View File

@ -0,0 +1,20 @@
# -*- 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,
),
]

View File

@ -0,0 +1,22 @@
# -*- 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,
),
]

View File

@ -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):
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):
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)

View File

@ -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 @@
{% 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 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% endif %}
{% endblock %} {% endblock %}

View File

@ -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 %}

View File

@ -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'),
] ]

View File

@ -1,5 +1,6 @@
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
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):
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 post(self, request, *args, **kwargs): def get(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)
if subscriber.is_subscribed():
date = dateparse.parse_datetime(request.POST['slot'])
for m in self.object.machines.filter(is_working=True).all():
slot = Slot.objects.filter(start_date=date, machine=m).first()
print(slot)
if slot is None:
Slot(user=subscriber, start_date=date, machine=m, type="WASHING").save()
print("Saved")
break
return super(LaunderetteBookView, self).get(request, *args, **kwargs) return super(LaunderetteBookView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.slot_type = "BOTH"
self.machines = {}
with transaction.atomic():
self.object = self.get_object()
if 'slot_type' in request.POST.keys():
self.slot_type = request.POST['slot_type']
if 'slot' in request.POST.keys() and request.user.is_authenticated():
self.subscriber = get_subscriber(request.user)
if self.subscriber.is_subscribed():
self.date = dateparse.parse_datetime(request.POST['slot']).replace(tzinfo=pytz.UTC)
if self.slot_type == "WASHING":
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)
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):
""" 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):
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

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-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 ""
#: 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"
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."
#: 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"
#: 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"
#: 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"
#: 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"
#: 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"
#: 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"
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"
#: 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"
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"
#: 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."
#: 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"
msgid "Subscriptions" msgid "Subscriptions"
msgstr "Cotisations" msgstr "Cotisations"
#: core/templates/core/user_tools.jinja:22 #: core/templates/core/user_tools.jinja:19
#: core/templates/core/user_tools.jinja:21 launderette/models.py:16
#: launderette/templates/launderette/launderette_book.jinja:4
#: launderette/templates/launderette/launderette_book_choose.jinja:4
#: launderette/templates/launderette/launderette_main.jinja:4
msgid "Launderette"
msgstr "Laverie"
#: core/templates/core/user_tools.jinja:26
msgid "Counters" msgid "Counters"
msgstr "Comptoirs" msgstr "Comptoirs"
#: core/templates/core/user_tools.jinja:25 #: core/templates/core/user_tools.jinja:29
msgid "General management"
msgstr "Gestion générale"
#: core/templates/core/user_tools.jinja:30
msgid "General counters management" msgid "General counters management"
msgstr "Gestion générale des comptoirs" msgstr "Gestion générale des comptoirs"
#: core/templates/core/user_tools.jinja:26 #: core/templates/core/user_tools.jinja:31
msgid "Products management" msgid "Products management"
msgstr "Gestion des produits" msgstr "Gestion des produits"
#: core/templates/core/user_tools.jinja:27 #: core/templates/core/user_tools.jinja:32
msgid "Products type management" msgid "Products type management"
msgstr "Gestion des types de produit" msgstr "Gestion des types de produit"
#: core/templates/core/user_tools.jinja:41 #: core/templates/core/user_tools.jinja:46
msgid "General accounting" msgid "General accounting"
msgstr "Comptabilité générale" msgstr "Comptabilité générale"
#: core/templates/core/user_tools.jinja:49 #: core/templates/core/user_tools.jinja:54
msgid "Club account: " msgid "Club account: "
msgstr "Compte club : " msgstr "Compte club : "
@ -993,70 +997,56 @@ msgid "permanency"
msgstr "permanence" msgstr "permanence"
#: counter/templates/counter/counter_click.jinja:20 #: counter/templates/counter/counter_click.jinja:20
#: launderette/templates/launderette/counter_click.jinja:20
msgid "Counter" msgid "Counter"
msgstr "Comptoir" msgstr "Comptoir"
#: counter/templates/counter/counter_click.jinja:22 #: counter/templates/counter/counter_click.jinja:22
#: launderette/templates/launderette/counter_click.jinja:22
msgid "Club: " msgid "Club: "
msgstr "Club : " msgstr "Club : "
#: counter/templates/counter/counter_click.jinja:25 #: counter/templates/counter/counter_click.jinja:25
#: launderette/templates/launderette/counter_click.jinja:25
msgid "Customer" msgid "Customer"
msgstr "Client" msgstr "Client"
#: counter/templates/counter/counter_click.jinja:30 #: counter/templates/counter/counter_click.jinja:30
#: launderette/templates/launderette/counter_click.jinja:30
msgid "Refilling" msgid "Refilling"
msgstr "Rechargement" msgstr "Rechargement"
#: counter/templates/counter/counter_click.jinja:35 #: counter/templates/counter/counter_click.jinja:35
#: counter/templates/counter/counter_click.jinja:48 #: counter/templates/counter/counter_click.jinja:48
#: launderette/templates/launderette/counter_click.jinja:35
#: launderette/templates/launderette/counter_click.jinja:48
msgid "Go" msgid "Go"
msgstr "Valider" msgstr "Valider"
#: counter/templates/counter/counter_click.jinja:40 #: counter/templates/counter/counter_click.jinja:40
#: launderette/templates/launderette/counter_click.jinja:40
msgid "Selling" msgid "Selling"
msgstr "Vente" msgstr "Vente"
#: counter/templates/counter/counter_click.jinja:42 #: counter/templates/counter/counter_click.jinja:42
#: launderette/templates/launderette/counter_click.jinja:42
msgid "Not enough money" msgid "Not enough money"
msgstr "Solde insuffisant" msgstr "Solde insuffisant"
#: counter/templates/counter/counter_click.jinja:50 #: counter/templates/counter/counter_click.jinja:50
#: eboutic/templates/eboutic/eboutic_main.jinja:23 #: eboutic/templates/eboutic/eboutic_main.jinja:23
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:7 #: eboutic/templates/eboutic/eboutic_makecommand.jinja:7
#: launderette/templates/launderette/counter_click.jinja:50
msgid "Basket: " msgid "Basket: "
msgstr "Panier : " msgstr "Panier : "
#: counter/templates/counter/counter_click.jinja:58 #: counter/templates/counter/counter_click.jinja:58
#: counter/templates/counter/counter_main.jinja:24 #: counter/templates/counter/counter_main.jinja:24
#: eboutic/templates/eboutic/eboutic_main.jinja:30 #: eboutic/templates/eboutic/eboutic_main.jinja:30
#: launderette/templates/launderette/counter_click.jinja:58
#: launderette/templates/launderette/counter_main.jinja:24
msgid "Total: " msgid "Total: "
msgstr "Total : " msgstr "Total : "
#: counter/templates/counter/counter_click.jinja:62 #: counter/templates/counter/counter_click.jinja:62
#: launderette/templates/launderette/counter_click.jinja:62
msgid "Finish" msgid "Finish"
msgstr "Terminer" msgstr "Terminer"
#: counter/templates/counter/counter_click.jinja:69 #: counter/templates/counter/counter_click.jinja:69
#: eboutic/templates/eboutic/eboutic_main.jinja:37 #: eboutic/templates/eboutic/eboutic_main.jinja:37
#: launderette/templates/launderette/counter_click.jinja:69
msgid "Products: " msgid "Products: "
msgstr "Produits : " msgstr "Produits : "
#: counter/templates/counter/counter_edit.jinja:4 #: counter/templates/counter/counter_edit.jinja:4
#: launderette/templates/launderette/counter_edit.jinja:4
msgid "Edit counter" msgid "Edit counter"
msgstr "Éditer le comptoir" msgstr "Éditer le comptoir"
@ -1074,135 +1064,107 @@ msgid "There is no counters in this website."
msgstr "Il n'y a pas de comptoirs dans ce site web." msgstr "Il n'y a pas de comptoirs dans ce site web."
#: counter/templates/counter/counter_main.jinja:12 #: counter/templates/counter/counter_main.jinja:12
#: launderette/templates/launderette/counter_main.jinja:12
#, python-format #, python-format
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:15 #: counter/templates/counter/counter_main.jinja:15
#: launderette/templates/launderette/counter_main.jinja:15
msgid "Sellings" msgid "Sellings"
msgstr "Ventes" msgstr "Ventes"
#: counter/templates/counter/counter_main.jinja:17 #: counter/templates/counter/counter_main.jinja:17
#: launderette/templates/launderette/counter_main.jinja:17
msgid "Last selling: " msgid "Last selling: "
msgstr "Dernière vente : " msgstr "Dernière vente : "
#: counter/templates/counter/counter_main.jinja:18 #: counter/templates/counter/counter_main.jinja:18
#: launderette/templates/launderette/counter_main.jinja:18
msgid "Client: " msgid "Client: "
msgstr "Client : " msgstr "Client : "
#: counter/templates/counter/counter_main.jinja:18 #: counter/templates/counter/counter_main.jinja:18
#: launderette/templates/launderette/counter_main.jinja:18
msgid "New amount: " msgid "New amount: "
msgstr "Nouveau montant : " msgstr "Nouveau montant : "
#: counter/templates/counter/counter_main.jinja:27 #: counter/templates/counter/counter_main.jinja:27
#: launderette/templates/launderette/counter_main.jinja:27
msgid "Enter client code:" msgid "Enter client code:"
msgstr "Entrez un code client : " msgstr "Entrez un code client : "
#: counter/templates/counter/counter_main.jinja:31 #: counter/templates/counter/counter_main.jinja:31
#: launderette/templates/launderette/counter_main.jinja:31
msgid "validate" msgid "validate"
msgstr "valider" msgstr "valider"
#: counter/templates/counter/counter_main.jinja:34 #: counter/templates/counter/counter_main.jinja:34
#: launderette/templates/launderette/counter_main.jinja:34
msgid "Please, login" msgid "Please, login"
msgstr "Merci de vous identifier" msgstr "Merci de vous identifier"
#: counter/templates/counter/counter_main.jinja:39 #: counter/templates/counter/counter_main.jinja:39
#: launderette/templates/launderette/counter_main.jinja:39
msgid "Barman: " msgid "Barman: "
msgstr "Barman : " msgstr "Barman : "
#: counter/templates/counter/product_list.jinja:4 #: counter/templates/counter/product_list.jinja:4
#: counter/templates/counter/product_list.jinja:10 #: counter/templates/counter/product_list.jinja:10
#: launderette/templates/launderette/product_list.jinja:4
#: launderette/templates/launderette/product_list.jinja:10
msgid "Product list" msgid "Product list"
msgstr "Liste des produits" msgstr "Liste des produits"
#: counter/templates/counter/product_list.jinja:8 #: counter/templates/counter/product_list.jinja:8
#: launderette/templates/launderette/product_list.jinja:8
msgid "New product" msgid "New product"
msgstr "Nouveau produit" msgstr "Nouveau produit"
#: counter/templates/counter/product_list.jinja:17 #: counter/templates/counter/product_list.jinja:17
#: launderette/templates/launderette/product_list.jinja:17
msgid "There is no products in this website." msgid "There is no products in this website."
msgstr "Il n'y a pas de produits dans ce site web." msgstr "Il n'y a pas de produits dans ce site web."
#: counter/templates/counter/producttype_list.jinja:4 #: counter/templates/counter/producttype_list.jinja:4
#: counter/templates/counter/producttype_list.jinja:10 #: counter/templates/counter/producttype_list.jinja:10
#: launderette/templates/launderette/producttype_list.jinja:4
#: launderette/templates/launderette/producttype_list.jinja:10
msgid "Product type list" msgid "Product type list"
msgstr "Liste des types de produit" msgstr "Liste des types de produit"
#: counter/templates/counter/producttype_list.jinja:8 #: counter/templates/counter/producttype_list.jinja:8
#: launderette/templates/launderette/producttype_list.jinja:8
msgid "New product type" msgid "New product type"
msgstr "Nouveau type de produit" msgstr "Nouveau type de produit"
#: counter/templates/counter/producttype_list.jinja:17 #: counter/templates/counter/producttype_list.jinja:17
#: launderette/templates/launderette/producttype_list.jinja:17
msgid "There is no product types in this website." msgid "There is no product types in this website."
msgstr "Il n'y a pas de types de produit dans ce site web." msgstr "Il n'y a pas de types de produit dans ce site web."
#: counter/templates/counter/user_account.jinja:4 #: counter/templates/counter/user_account.jinja:4
#: launderette/templates/launderette/user_account.jinja:4
#, python-format #, python-format
msgid "%(user_name)s's account" msgid "%(user_name)s's account"
msgstr "Compte de %(user_name)s" msgstr "Compte de %(user_name)s"
#: counter/templates/counter/user_account.jinja:8 #: counter/templates/counter/user_account.jinja:8
#: launderette/templates/launderette/user_account.jinja:8
msgid "User account" msgid "User account"
msgstr "Compte utilisateur" msgstr "Compte utilisateur"
#: counter/templates/counter/user_account.jinja:11 #: counter/templates/counter/user_account.jinja:11
#: launderette/templates/launderette/user_account.jinja:11
msgid "Refillings" msgid "Refillings"
msgstr "Rechargements" msgstr "Rechargements"
#: counter/templates/counter/user_account.jinja:16 #: counter/templates/counter/user_account.jinja:16
#: counter/templates/counter/user_account.jinja:37 #: counter/templates/counter/user_account.jinja:37
#: launderette/templates/launderette/user_account.jinja:16
#: launderette/templates/launderette/user_account.jinja:37
msgid "Barman" msgid "Barman"
msgstr "Barman" msgstr "Barman"
#: counter/templates/counter/user_account.jinja:32 #: counter/templates/counter/user_account.jinja:32
#: launderette/templates/launderette/user_account.jinja:32
msgid "Buyings" msgid "Buyings"
msgstr "Achats" msgstr "Achats"
#: counter/templates/counter/user_account.jinja:38 #: counter/templates/counter/user_account.jinja:38
#: launderette/templates/launderette/user_account.jinja:38
msgid "Product" msgid "Product"
msgstr "Produit" msgstr "Produit"
#: counter/templates/counter/user_account.jinja:39 #: counter/templates/counter/user_account.jinja:39
#: launderette/templates/launderette/user_account.jinja:39
msgid "Quantity" msgid "Quantity"
msgstr "Quantité" msgstr "Quantité"
#: counter/templates/counter/user_account.jinja:40 #: counter/templates/counter/user_account.jinja:40
#: launderette/templates/launderette/user_account.jinja:40
msgid "Total" msgid "Total"
msgstr "Total" msgstr "Total"
#: counter/templates/counter/user_account.jinja:57 #: counter/templates/counter/user_account.jinja:57
#: launderette/templates/launderette/user_account.jinja:57
msgid "Invoices" msgid "Invoices"
msgstr "Factures" msgstr "Factures"
#: counter/templates/counter/user_account.jinja:62 #: counter/templates/counter/user_account.jinja:62
#: launderette/templates/launderette/user_account.jinja:62
msgid "Items" msgid "Items"
msgstr "Articles" msgstr "Articles"
@ -1293,52 +1255,68 @@ msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
msgid "sellers" msgid "sellers"
msgstr "vendeurs" msgstr "vendeurs"
#: launderette/models.py:16 #: launderette/models.py:37 launderette/models.py:60
#: launderette/templates/launderette/launderette_book.jinja:4
#: launderette/templates/launderette/launderette_main.jinja:4
msgid "Launderette"
msgstr "Laverie"
#: launderette/models.py:37 launderette/models.py:53
msgid "launderette" msgid "launderette"
msgstr "laverie" msgstr "laverie"
#: launderette/models.py:38 #: launderette/models.py:38 launderette/models.py:61 launderette/models.py:77
msgid "is working"
msgstr "est HS"
#: launderette/models.py:41
msgid "Machine"
msgstr "Machine"
#: launderette/models.py:54 launderette/models.py:69
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: launderette/models.py:54 launderette/models.py:69 #: launderette/models.py:38 launderette/models.py:61 launderette/models.py:77
#: launderette/templates/launderette/launderette_book.jinja:26
msgid "Washing" msgid "Washing"
msgstr "Lavage" msgstr "Lavage"
#: launderette/models.py:54 launderette/models.py:69 #: launderette/models.py:38 launderette/models.py:61 launderette/models.py:77
#: launderette/templates/launderette/launderette_book.jinja:30
msgid "Drying" msgid "Drying"
msgstr "Séchage" msgstr "Séchage"
#: launderette/models.py:57 #: launderette/models.py:39
msgid "is working"
msgstr "fonctionne"
#: launderette/models.py:42
msgid "Machine"
msgstr "Machine"
#: launderette/models.py:65
msgid "Token" msgid "Token"
msgstr "Jeton" msgstr "Jeton"
#: launderette/models.py:70 #: launderette/models.py:78
msgid "machine" msgid "machine"
msgstr "machine" msgstr "machine"
#: launderette/models.py:71 #: launderette/models.py:79
msgid "token" msgid "token"
msgstr "jeton" msgstr "jeton"
#: launderette/models.py:83
msgid "Slot"
msgstr "Créneau"
#: launderette/templates/launderette/launderette_book.jinja:11
msgid "Choose"
msgstr "Choisir"
#: launderette/templates/launderette/launderette_book.jinja:22
msgid "Washing and drying"
msgstr "Lavage et séchage"
#: launderette/templates/launderette/launderette_detail.jinja:4 #: launderette/templates/launderette/launderette_detail.jinja:4
msgid "Launderette admin" msgid "Launderette admin"
msgstr "Gestion de la laverie" msgstr "Gestion de la laverie"
#: launderette/templates/launderette/launderette_detail.jinja:8
msgid "Machines"
msgstr "Machines"
#: launderette/templates/launderette/launderette_detail.jinja:9
msgid "New machine"
msgstr "Nouvelle machine"
#: launderette/templates/launderette/launderette_list.jinja:4 #: launderette/templates/launderette/launderette_list.jinja:4
#: launderette/templates/launderette/launderette_list.jinja:10 #: launderette/templates/launderette/launderette_list.jinja:10
msgid "Launderette admin list" msgid "Launderette admin list"