From 402a14d69a922ca21588ec8b2df599b99aff0718 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 26 Oct 2016 17:20:42 +0200 Subject: [PATCH 01/27] Stock application creation --- stock/__init__.py | 0 stock/admin.py | 3 +++ stock/migrations/__init__.py | 0 stock/models.py | 10 ++++++++++ stock/tests.py | 3 +++ stock/views.py | 3 +++ 6 files changed, 19 insertions(+) create mode 100644 stock/__init__.py create mode 100644 stock/admin.py create mode 100644 stock/migrations/__init__.py create mode 100644 stock/models.py create mode 100644 stock/tests.py create mode 100644 stock/views.py diff --git a/stock/__init__.py b/stock/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/stock/admin.py b/stock/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/stock/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/stock/migrations/__init__.py b/stock/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/stock/models.py b/stock/models.py new file mode 100644 index 00000000..1fdbf62a --- /dev/null +++ b/stock/models.py @@ -0,0 +1,10 @@ +from django.db import models +from django.counter import Counter + +class Stock(models.Model): + """ The Stock class, this one is used to know how many products are left for a specific counter """ + name = models.CharField(_('name'), max_length=64) + counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') + + def __str__(self): + return self.name \ No newline at end of file diff --git a/stock/tests.py b/stock/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/stock/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/stock/views.py b/stock/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/stock/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. From fdfd7e7388a7a05ec46f626ba251e370c269d94d Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 26 Oct 2016 22:12:56 +0200 Subject: [PATCH 02/27] Addition of the StockItem class --- stock/models.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/stock/models.py b/stock/models.py index 1fdbf62a..1749ccc0 100644 --- a/stock/models.py +++ b/stock/models.py @@ -7,4 +7,15 @@ class Stock(models.Model): counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') def __str__(self): - return self.name \ No newline at end of file + return self.name + +class StockItem(models.Model): + """ The StockItem class, element of the stock """ + name = models.CharField(_('name'), max_length=64) + unit_quantity = models.IntegerField(_('unit quantity'), default=0) + effective_quantity = models.IntegerField(_('effective quantity'), default=0) + stock_owner = models.ForeignKey(Stock, related_name="stock_owner") + + def __str__(self): + return self.name + From 33c7e7db9fe7e5ee2a13af5bc3f4009e1b14a01d Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Mon, 31 Oct 2016 08:19:46 +0100 Subject: [PATCH 03/27] addition of Stock app, model, templates, urls --- sith/settings.py | 1 + stock/admin.py | 4 ++++ stock/migrations/0001_initial.py | 32 ++++++++++++++++++++++++++ stock/models.py | 10 ++++---- stock/templates/stock/stock_main.jinja | 1 + stock/urls.py | 8 +++++++ 6 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 stock/migrations/0001_initial.py create mode 100644 stock/templates/stock/stock_main.jinja create mode 100644 stock/urls.py diff --git a/sith/settings.py b/sith/settings.py index c88b1f24..78966035 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -59,6 +59,7 @@ INSTALLED_APPS = ( 'sas', 'com', 'election', + 'stock', ) MIDDLEWARE_CLASSES = ( diff --git a/stock/admin.py b/stock/admin.py index 8c38f3f3..08bb8622 100644 --- a/stock/admin.py +++ b/stock/admin.py @@ -1,3 +1,7 @@ from django.contrib import admin +from stock.models import Stock, StockItem + # Register your models here. +admin.site.register(Stock) +admin.site.register(StockItem) \ No newline at end of file diff --git a/stock/migrations/0001_initial.py b/stock/migrations/0001_initial.py new file mode 100644 index 00000000..75e99f5a --- /dev/null +++ b/stock/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('counter', '0011_auto_20161004_2039'), + ] + + operations = [ + migrations.CreateModel( + name='Stock', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=64, verbose_name='name')), + ('counter', models.OneToOneField(to='counter.Counter', related_name='stock', verbose_name='counter')), + ], + ), + migrations.CreateModel( + name='StockItem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=64, verbose_name='name')), + ('unit_quantity', models.IntegerField(default=0, verbose_name='unit quantity')), + ('effective_quantity', models.IntegerField(default=0, verbose_name='effective quantity')), + ('stock_owner', models.ForeignKey(related_name='stock_owner', to='stock.Stock')), + ], + ), + ] diff --git a/stock/models.py b/stock/models.py index 1749ccc0..7c769679 100644 --- a/stock/models.py +++ b/stock/models.py @@ -1,13 +1,15 @@ from django.db import models -from django.counter import Counter +from django.utils.translation import ugettext_lazy as _ + +from counter.models import Counter class Stock(models.Model): """ The Stock class, this one is used to know how many products are left for a specific counter """ name = models.CharField(_('name'), max_length=64) counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') - + def __str__(self): - return self.name + return "%s (%s)" % (self.name, self.counter) class StockItem(models.Model): """ The StockItem class, element of the stock """ @@ -17,5 +19,5 @@ class StockItem(models.Model): stock_owner = models.ForeignKey(Stock, related_name="stock_owner") def __str__(self): - return self.name + return "%s (%s)" % (self.name, self.stock_owner) diff --git a/stock/templates/stock/stock_main.jinja b/stock/templates/stock/stock_main.jinja new file mode 100644 index 00000000..fe9f8145 --- /dev/null +++ b/stock/templates/stock/stock_main.jinja @@ -0,0 +1 @@ +TOTO \ No newline at end of file diff --git a/stock/urls.py b/stock/urls.py new file mode 100644 index 00000000..1b3a504e --- /dev/null +++ b/stock/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import include, url + +from stock.views import * + +urlpatterns = [ + url(r'^(?P[0-9]+)$', StockListView.as_view(), name='stock_list'), + url(r'^(?P[0-9]+)/new$', StockCreateView.as_view(), name='stock_new'), +] From 29fb0af893519d2c81e4551c0ae759bb24bac468 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Tue, 8 Nov 2016 18:14:41 +0100 Subject: [PATCH 04/27] Addition of the stock parameter to the counter admin list --- counter/templates/counter/counter_list.jinja | 7 +++++- sith/urls.py | 1 + stock/templates/stock/stock_main.jinja | 12 +++++++++- stock/urls.py | 5 +++-- stock/views.py | 23 +++++++++++++++++++- 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/counter/templates/counter/counter_list.jinja b/counter/templates/counter/counter_list.jinja index 195d1175..68c33cbf 100644 --- a/counter/templates/counter/counter_list.jinja +++ b/counter/templates/counter/counter_list.jinja @@ -33,7 +33,12 @@ {% trans %}Stats{% endtrans %} - {% endif %} {% if user.is_owner(c) %} - {% trans %}Props{% endtrans %} + {% trans %}Props{% endtrans %} - + {%if c.stock %} + {{c.stock}} + {% else %} + {% trans %}Create new stock{% endtrans%} + {% endif %} {% endif %} {% endfor %} diff --git a/sith/urls.py b/sith/urls.py index d759979e..075e2f20 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -34,6 +34,7 @@ urlpatterns = [ url(r'^com/', include('com.urls', namespace="com", app_name="com")), url(r'^club/', include('club.urls', namespace="club", app_name="club")), url(r'^counter/', include('counter.urls', namespace="counter", app_name="counter")), + url(r'^stock/', include('stock.urls', namespace="stock", app_name="stock")), url(r'^accounting/', include('accounting.urls', namespace="accounting", app_name="accounting")), url(r'^eboutic/', include('eboutic.urls', namespace="eboutic", app_name="eboutic")), url(r'^launderette/', include('launderette.urls', namespace="launderette", app_name="launderette")), diff --git a/stock/templates/stock/stock_main.jinja b/stock/templates/stock/stock_main.jinja index fe9f8145..3cf56022 100644 --- a/stock/templates/stock/stock_main.jinja +++ b/stock/templates/stock/stock_main.jinja @@ -1 +1,11 @@ -TOTO \ No newline at end of file +{% extends "core/base.jinja" %} + +{% block title %} +{{stock}} +{% endblock %} + +{% block content %} +

{{stock}}

+{{stock.name}} +{% endblock %} + diff --git a/stock/urls.py b/stock/urls.py index 1b3a504e..0f5ae091 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -3,6 +3,7 @@ from django.conf.urls import include, url from stock.views import * urlpatterns = [ - url(r'^(?P[0-9]+)$', StockListView.as_view(), name='stock_list'), - url(r'^(?P[0-9]+)/new$', StockCreateView.as_view(), name='stock_new'), + url(r'^(?P[0-9]+)$', StockMain.as_view(), name='main'), + url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), + url(r'^(?P[0-9]+)/newItem$', StockItemCreateView.as_view(), name='new_item'), ] diff --git a/stock/views.py b/stock/views.py index 91ea44a2..c60c3528 100644 --- a/stock/views.py +++ b/stock/views.py @@ -1,3 +1,24 @@ from django.shortcuts import render +from django.views.generic import ListView, DetailView, RedirectView, TemplateView +from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin -# Create your views here. + +from stock.models import Stock + +class StockMain(DetailView): + """ + The stock view for the counter owner + """ + model = Stock + template_name = 'stock/stock_main.jinja' + pk_url_kwarg = "stock_id" + +class StockCreateView(CreateView): + """ + docstring for StockCreateView + """ + +class StockItemCreateView(CreateView): + """ + + """ \ No newline at end of file From ccb339b9bda07ed68b049c364b23b0a5e9e3927e Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Tue, 8 Nov 2016 18:21:20 +0100 Subject: [PATCH 05/27] Fix translation files --- locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 37453 bytes locale/fr/LC_MESSAGES/django.po | 3685 ------------------------------- 2 files changed, 3685 deletions(-) create mode 100644 locale/fr/LC_MESSAGES/django.mo delete mode 100644 locale/fr/LC_MESSAGES/django.po diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..896b8e1ebbb385c7c163b83f8bd0ff78c8593731 GIT binary patch literal 37453 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 Tr#@`mhmc@{i(`cnOSJz7Q5CHA literal 0 HcmV?d00001 diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 2ee7274b..00000000 --- a/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,3685 +0,0 @@ -# Sith AE french translation file -# Copyright (C) 2016 -# This file is distributed under the same license as the Sith package. -# Skia , 2016 -# -msgid "" -msgstr "" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-29 01:01+0100\n" -"PO-Revision-Date: 2016-07-18\n" -"Last-Translator: Skia \n" -"Language-Team: AE info \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: accounting/models.py:36 accounting/models.py:58 accounting/models.py:85 -#: accounting/models.py:144 club/models.py:18 counter/models.py:70 -#: counter/models.py:95 counter/models.py:130 launderette/models.py:13 -#: launderette/models.py:58 launderette/models.py:83 -msgid "name" -msgstr "nom" - -#: accounting/models.py:37 -msgid "street" -msgstr "rue" - -#: accounting/models.py:38 -msgid "city" -msgstr "ville" - -#: accounting/models.py:39 -msgid "postcode" -msgstr "code postal" - -#: accounting/models.py:40 -msgid "country" -msgstr "pays" - -#: accounting/models.py:41 core/models.py:168 -msgid "phone" -msgstr "téléphone" - -#: accounting/models.py:42 -msgid "email" -msgstr "email" - -#: accounting/models.py:43 -msgid "website" -msgstr "site internet" - -#: accounting/models.py:46 -msgid "company" -msgstr "entreprise" - -#: accounting/models.py:59 -msgid "iban" -msgstr "IBAN" - -#: accounting/models.py:60 -msgid "account number" -msgstr "numero de compte" - -#: accounting/models.py:61 accounting/models.py:86 club/models.py:145 -#: com/models.py:34 counter/models.py:104 counter/models.py:131 -msgid "club" -msgstr "club" - -#: accounting/models.py:64 -msgid "Bank account" -msgstr "Compte en banque" - -#: accounting/models.py:87 -msgid "bank account" -msgstr "compte en banque" - -#: accounting/models.py:90 -msgid "Club account" -msgstr "Compte club" - -#: accounting/models.py:135 -#, python-format -msgid "%(club_account)s on %(bank_account)s" -msgstr "%(club_account)s sur %(bank_account)s" - -#: accounting/models.py:142 club/models.py:146 counter/models.py:399 -#: election/models.py:18 launderette/models.py:120 -msgid "start date" -msgstr "date de début" - -#: accounting/models.py:143 club/models.py:147 counter/models.py:400 -#: election/models.py:19 -msgid "end date" -msgstr "date de fin" - -#: accounting/models.py:145 -msgid "is closed" -msgstr "est fermé" - -#: accounting/models.py:146 accounting/models.py:349 -msgid "club account" -msgstr "compte club" - -#: accounting/models.py:147 accounting/models.py:193 counter/models.py:28 -#: counter/models.py:239 -msgid "amount" -msgstr "montant" - -#: accounting/models.py:148 -msgid "effective_amount" -msgstr "montant effectif" - -#: accounting/models.py:151 -msgid "General journal" -msgstr "Classeur" - -#: accounting/models.py:191 -msgid "number" -msgstr "numéro" - -#: accounting/models.py:192 -msgid "journal" -msgstr "classeur" - -#: accounting/models.py:194 core/models.py:530 core/models.py:875 -#: core/models.py:915 counter/models.py:242 counter/models.py:290 -#: counter/models.py:416 eboutic/models.py:15 eboutic/models.py:48 -msgid "date" -msgstr "date" - -#: accounting/models.py:195 counter/models.py:417 -msgid "comment" -msgstr "commentaire" - -#: accounting/models.py:196 counter/models.py:243 counter/models.py:291 -#: subscription/models.py:29 -msgid "payment method" -msgstr "méthode de paiement" - -#: accounting/models.py:197 -msgid "cheque number" -msgstr "numéro de chèque" - -#: accounting/models.py:198 eboutic/models.py:116 -msgid "invoice" -msgstr "facture" - -#: accounting/models.py:199 -msgid "is done" -msgstr "est fait" - -#: accounting/models.py:201 -msgid "simple type" -msgstr "type simplifié" - -#: accounting/models.py:203 accounting/models.py:304 -msgid "accounting type" -msgstr "type comptable" - -#: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325 -#: accounting/models.py:348 counter/models.py:282 -msgid "label" -msgstr "étiquette" - -#: accounting/models.py:206 -msgid "target type" -msgstr "type de cible" - -#: accounting/models.py:207 club/templates/club/club_members.jinja:8 -#: club/templates/club/club_old_members.jinja:8 -#: core/templates/core/user_clubs.jinja:15 -#: core/templates/core/user_clubs.jinja:41 -#: counter/templates/counter/cash_summary_list.jinja:32 -#: counter/templates/counter/stats.jinja:15 -#: launderette/templates/launderette/launderette_admin.jinja:44 -msgid "User" -msgstr "Utilisateur" - -#: accounting/models.py:207 club/templates/club/club_detail.jinja:5 -#: com/templates/com/news_admin_list.jinja:17 -#: com/templates/com/news_admin_list.jinja:51 -#: counter/templates/counter/invoices_call.jinja:20 -msgid "Club" -msgstr "Club" - -#: accounting/models.py:207 core/views/user.py:179 -msgid "Account" -msgstr "Compte" - -#: accounting/models.py:207 -msgid "Company" -msgstr "Entreprise" - -#: accounting/models.py:207 sith/settings.py:297 -msgid "Other" -msgstr "Autre" - -#: accounting/models.py:208 -msgid "target id" -msgstr "id de la cible" - -#: accounting/models.py:209 -msgid "target label" -msgstr "nom de la cible" - -#: accounting/models.py:210 -msgid "linked operation" -msgstr "opération liée" - -#: accounting/models.py:226 -#, python-format -msgid "" -"The date can not be before the start date of the journal, which is\n" -"%(start_date)s." -msgstr "" -"La date ne peut pas être avant la date de début du journal, qui est\n" -"%(start_date)s." - -#: accounting/models.py:229 -msgid "Target does not exists" -msgstr "La cible n'existe pas." - -#: accounting/models.py:231 -msgid "Please add a target label if you set no existing target" -msgstr "" -"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" - -#: accounting/models.py:233 -msgid "" -"You need to provide ether a simplified accounting type or a standard " -"accounting type" -msgstr "" -"Vous devez fournir soit un type comptable simplifié ou un type comptable " -"standard" - -#: accounting/models.py:294 counter/models.py:99 -msgid "code" -msgstr "code" - -#: accounting/models.py:296 -msgid "An accounting type code contains only numbers" -msgstr "Un code comptable ne contient que des numéros" - -#: accounting/models.py:300 -msgid "movement type" -msgstr "type de mouvement" - -#: accounting/models.py:300 -#: accounting/templates/accounting/journal_statement_nature.jinja:8 -#: accounting/templates/accounting/journal_statement_person.jinja:11 -#: accounting/views.py:417 -msgid "Credit" -msgstr "Crédit" - -#: accounting/models.py:300 -#: accounting/templates/accounting/journal_statement_nature.jinja:27 -#: accounting/templates/accounting/journal_statement_person.jinja:39 -#: accounting/views.py:417 -msgid "Debit" -msgstr "Débit" - -#: accounting/models.py:301 -msgid "Neutral" -msgstr "Neutre" - -#: accounting/models.py:327 -msgid "simplified accounting types" -msgstr "type simplifié" - -#: accounting/models.py:330 -msgid "simplified type" -msgstr "type simplifié" - -#: accounting/templates/accounting/accountingtype_list.jinja:4 -#: accounting/templates/accounting/accountingtype_list.jinja:15 -msgid "Accounting type list" -msgstr "Liste des types comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:9 -#: accounting/templates/accounting/bank_account_details.jinja:9 -#: accounting/templates/accounting/bank_account_list.jinja:9 -#: accounting/templates/accounting/club_account_details.jinja:9 -#: accounting/templates/accounting/journal_details.jinja:9 -#: accounting/templates/accounting/label_list.jinja:9 -#: accounting/templates/accounting/operation_edit.jinja:9 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 -#: core/templates/core/user_tools.jinja:45 -msgid "Accounting" -msgstr "Comptabilité" - -#: accounting/templates/accounting/accountingtype_list.jinja:10 -msgid "Accounting types" -msgstr "Type comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:13 -msgid "New accounting type" -msgstr "Nouveau type comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:22 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:22 -msgid "There is no types in this website." -msgstr "Il n'y a pas de types comptable dans ce site web." - -#: accounting/templates/accounting/bank_account_details.jinja:4 -#: accounting/templates/accounting/bank_account_details.jinja:13 -#: core/templates/core/user_tools.jinja:54 -msgid "Bank account: " -msgstr "Compte en banque : " - -#: accounting/templates/accounting/bank_account_details.jinja:15 -#: accounting/templates/accounting/club_account_details.jinja:16 -#: accounting/templates/accounting/label_list.jinja:21 -#: club/templates/club/club_sellings.jinja:49 -#: core/templates/core/file_detail.jinja:25 -#: core/templates/core/file_detail.jinja:62 -#: core/templates/core/file_moderation.jinja:24 -#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:49 -#: core/templates/core/macros.jinja:68 -#: core/templates/core/user_account_detail.jinja:38 -#: core/templates/core/user_edit.jinja:19 -#: counter/templates/counter/last_ops.jinja:29 -#: counter/templates/counter/last_ops.jinja:59 -#: election/templates/election/election_detail.jinja:280 -#: election/templates/election/election_detail.jinja:327 -#: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:154 sas/templates/sas/album.jinja:26 -#: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:66 -#: sas/templates/sas/picture.jinja:116 -msgid "Delete" -msgstr "Supprimer" - -#: accounting/templates/accounting/bank_account_details.jinja:17 -#: club/views.py:32 core/views/user.py:130 sas/templates/sas/picture.jinja:78 -msgid "Infos" -msgstr "Infos" - -#: accounting/templates/accounting/bank_account_details.jinja:19 -msgid "IBAN: " -msgstr "IBAN : " - -#: accounting/templates/accounting/bank_account_details.jinja:20 -msgid "Number: " -msgstr "Numéro : " - -#: accounting/templates/accounting/bank_account_details.jinja:22 -msgid "New club account" -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:55 -#: accounting/templates/accounting/journal_details.jinja:82 club/views.py:54 -#: com/templates/com/news_admin_list.jinja:39 -#: com/templates/com/news_admin_list.jinja:71 -#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 -#: core/templates/core/user_tools.jinja:38 core/views/user.py:152 -#: counter/templates/counter/cash_summary_list.jinja:53 -#: counter/templates/counter/counter_list.jinja:17 -#: counter/templates/counter/counter_list.jinja:32 -#: counter/templates/counter/counter_list.jinja:47 -#: election/templates/election/election_detail.jinja:279 -#: election/templates/election/election_detail.jinja:324 -#: election/templates/election/election_detail.jinja:370 -#: launderette/templates/launderette/launderette_list.jinja:16 -#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:92 -msgid "Edit" -msgstr "Éditer" - -#: accounting/templates/accounting/bank_account_list.jinja:4 -#: accounting/templates/accounting/bank_account_list.jinja:17 -msgid "Bank account list" -msgstr "Liste des comptes en banque" - -#: accounting/templates/accounting/bank_account_list.jinja:12 -msgid "Manage simplified types" -msgstr "Gérer les types simplifiés" - -#: accounting/templates/accounting/bank_account_list.jinja:13 -msgid "Manage accounting types" -msgstr "Gérer les types comptable" - -#: accounting/templates/accounting/bank_account_list.jinja:14 -msgid "New bank account" -msgstr "Nouveau compte en banque" - -#: accounting/templates/accounting/bank_account_list.jinja:26 -msgid "There is no accounts in this website." -msgstr "Il n'y a pas de comptes dans ce site web." - -#: accounting/templates/accounting/club_account_details.jinja:4 -#: accounting/templates/accounting/club_account_details.jinja:14 -msgid "Club account:" -msgstr "Compte club : " - -#: accounting/templates/accounting/club_account_details.jinja:18 -#: accounting/templates/accounting/journal_details.jinja:16 -#: accounting/templates/accounting/label_list.jinja:15 -msgid "New label" -msgstr "Nouvelle étiquette" - -#: accounting/templates/accounting/club_account_details.jinja:19 -#: accounting/templates/accounting/journal_details.jinja:17 -#: accounting/templates/accounting/label_list.jinja:4 -#: accounting/templates/accounting/label_list.jinja:17 -msgid "Label list" -msgstr "Liste des étiquettes" - -#: accounting/templates/accounting/club_account_details.jinja:21 -msgid "New journal" -msgstr "Nouveau classeur" - -#: accounting/templates/accounting/club_account_details.jinja:23 -msgid "You can not create new journal while you still have one opened" -msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" - -#: accounting/templates/accounting/club_account_details.jinja:28 -#: launderette/templates/launderette/launderette_admin.jinja:43 -msgid "Name" -msgstr "Nom" - -#: accounting/templates/accounting/club_account_details.jinja:29 -#: com/templates/com/news_admin_list.jinja:20 -#: com/templates/com/news_admin_list.jinja:53 -msgid "Start" -msgstr "Début" - -#: accounting/templates/accounting/club_account_details.jinja:30 -#: com/templates/com/news_admin_list.jinja:21 -#: com/templates/com/news_admin_list.jinja:54 -msgid "End" -msgstr "Fin" - -#: accounting/templates/accounting/club_account_details.jinja:31 -#: accounting/templates/accounting/journal_details.jinja:33 -#: core/templates/core/user_account_detail.jinja:53 -#: core/templates/core/user_account_detail.jinja:80 -#: counter/templates/counter/last_ops.jinja:17 -msgid "Amount" -msgstr "Montant" - -#: accounting/templates/accounting/club_account_details.jinja:32 -msgid "Effective amount" -msgstr "Montant effectif" - -#: accounting/templates/accounting/club_account_details.jinja:33 -msgid "Closed" -msgstr "Fermé" - -#: accounting/templates/accounting/club_account_details.jinja:34 -#: accounting/templates/accounting/journal_details.jinja:41 -#: com/templates/com/news_admin_list.jinja:22 -#: com/templates/com/news_admin_list.jinja:55 -msgid "Actions" -msgstr "Actions" - -#: accounting/templates/accounting/club_account_details.jinja:50 -#: accounting/templates/accounting/journal_details.jinja:61 -msgid "Yes" -msgstr "Oui" - -#: accounting/templates/accounting/club_account_details.jinja:52 -#: accounting/templates/accounting/journal_details.jinja:63 -msgid "No" -msgstr "Non" - -#: accounting/templates/accounting/club_account_details.jinja:54 -#: com/templates/com/news_admin_list.jinja:38 -#: com/templates/com/news_admin_list.jinja:70 -#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 -msgid "View" -msgstr "Voir" - -#: accounting/templates/accounting/co_list.jinja:4 -#: accounting/templates/accounting/journal_details.jinja:18 -#: core/templates/core/user_tools.jinja:50 -msgid "Company list" -msgstr "Liste des entreprises" - -#: accounting/templates/accounting/co_list.jinja:8 -msgid "Create new company" -msgstr "Nouvelle entreprise" - -#: accounting/templates/accounting/co_list.jinja:14 -msgid "Companies" -msgstr "Entreprises" - -#: accounting/templates/accounting/journal_details.jinja:4 -#: accounting/templates/accounting/journal_details.jinja:15 -#: accounting/templates/accounting/journal_statement_accounting.jinja:4 -#: accounting/templates/accounting/journal_statement_nature.jinja:4 -#: accounting/templates/accounting/journal_statement_person.jinja:4 -msgid "General journal:" -msgstr "Classeur : " - -#: accounting/templates/accounting/journal_details.jinja:19 -#: accounting/templates/accounting/journal_statement_accounting.jinja:29 -#: core/templates/core/user_account.jinja:38 -#: core/templates/core/user_account_detail.jinja:10 -#: counter/templates/counter/counter_click.jinja:32 -msgid "Amount: " -msgstr "Montant : " - -#: accounting/templates/accounting/journal_details.jinja:20 -#: accounting/templates/accounting/journal_statement_accounting.jinja:30 -msgid "Effective amount: " -msgstr "Montant effectif: " - -#: accounting/templates/accounting/journal_details.jinja:22 -msgid "Journal is closed, you can not create operation" -msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" - -#: accounting/templates/accounting/journal_details.jinja:24 -msgid "New operation" -msgstr "Nouvelle opération" - -#: accounting/templates/accounting/journal_details.jinja:30 -#: counter/templates/counter/stats.jinja:14 -msgid "Nb" -msgstr "No" - -#: accounting/templates/accounting/journal_details.jinja:31 -#: club/templates/club/club_sellings.jinja:19 -#: core/templates/core/user_account_detail.jinja:17 -#: core/templates/core/user_account_detail.jinja:50 -#: core/templates/core/user_account_detail.jinja:78 -#: counter/templates/counter/cash_summary_list.jinja:34 -#: counter/templates/counter/last_ops.jinja:14 -#: counter/templates/counter/last_ops.jinja:39 -msgid "Date" -msgstr "Date" - -#: accounting/templates/accounting/journal_details.jinja:32 -#: club/templates/club/club_sellings.jinja:23 -#: core/templates/core/user_account_detail.jinja:20 -#: counter/templates/counter/last_ops.jinja:42 -msgid "Label" -msgstr "Étiquette" - -#: accounting/templates/accounting/journal_details.jinja:34 -msgid "Payment mode" -msgstr "Méthode de paiement" - -#: accounting/templates/accounting/journal_details.jinja:35 -msgid "Target" -msgstr "Cible" - -#: accounting/templates/accounting/journal_details.jinja:36 -msgid "Code" -msgstr "Code" - -#: accounting/templates/accounting/journal_details.jinja:37 -msgid "Nature" -msgstr "Nature" - -#: accounting/templates/accounting/journal_details.jinja:38 -msgid "Done" -msgstr "Effectué" - -#: accounting/templates/accounting/journal_details.jinja:39 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:710 -msgid "Comment" -msgstr "Commentaire" - -#: accounting/templates/accounting/journal_details.jinja:40 -msgid "File" -msgstr "Fichier" - -#: accounting/templates/accounting/journal_details.jinja:42 -msgid "PDF" -msgstr "PDF" - -#: accounting/templates/accounting/journal_details.jinja:68 -msgid "" -"Warning: this operation has no linked operation because the targeted club " -"account has no opened journal." -msgstr "" -"Attention: cette opération n'a pas d'opération liée parce qu'il n'y a pas de " -"classeur ouvert dans le compte club cible" - -#: accounting/templates/accounting/journal_details.jinja:71 -#, python-format -msgid "" -"Open a journal in this club account, then save this " -"operation again to make the linked operation." -msgstr "" -"Ouvrez un classeur dans ce compte club, puis sauver " -"cette opération à nouveau pour créer l'opération liée." - -#: accounting/templates/accounting/journal_details.jinja:85 -msgid "Generate" -msgstr "Générer" - -#: accounting/templates/accounting/journal_statement_accounting.jinja:9 -msgid "Accounting statement: " -msgstr "Bilan comptable : " - -#: accounting/templates/accounting/journal_statement_accounting.jinja:14 -msgid "Operation type" -msgstr "Type d'opération" - -#: accounting/templates/accounting/journal_statement_accounting.jinja:15 -#: accounting/templates/accounting/journal_statement_nature.jinja:13 -#: accounting/templates/accounting/journal_statement_nature.jinja:32 -#: accounting/templates/accounting/journal_statement_person.jinja:17 -#: accounting/templates/accounting/journal_statement_person.jinja:45 -#: counter/templates/counter/invoices_call.jinja:21 -msgid "Sum" -msgstr "Somme" - -#: accounting/templates/accounting/journal_statement_nature.jinja:12 -#: accounting/templates/accounting/journal_statement_nature.jinja:31 -msgid "Nature of operation" -msgstr "Nature de l'opération" - -#: accounting/templates/accounting/journal_statement_nature.jinja:25 -#: accounting/templates/accounting/journal_statement_nature.jinja:44 -#: club/templates/club/club_sellings.jinja:14 -#: counter/templates/counter/counter_click.jinja:70 -#: counter/templates/counter/counter_main.jinja:28 -#: eboutic/templates/eboutic/eboutic_main.jinja:34 -msgid "Total: " -msgstr "Total : " - -#: accounting/templates/accounting/journal_statement_nature.jinja:48 -msgid "Statement by nature: " -msgstr "Bilan par nature : " - -#: accounting/templates/accounting/journal_statement_person.jinja:9 -msgid "Statement by person: " -msgstr "Bilan par personne : " - -#: accounting/templates/accounting/journal_statement_person.jinja:16 -#: accounting/templates/accounting/journal_statement_person.jinja:44 -msgid "Target of the operation" -msgstr "Cible de l'opération" - -#: accounting/templates/accounting/label_list.jinja:14 -msgid "Back to club account" -msgstr "Retour au compte club" - -#: accounting/templates/accounting/label_list.jinja:26 -msgid "There is no label in this club account." -msgstr "Il n'y a pas d'étiquette dans ce compte club." - -#: accounting/templates/accounting/operation_edit.jinja:4 -#: accounting/templates/accounting/operation_edit.jinja:13 -#: accounting/templates/accounting/operation_edit.jinja:16 -msgid "Edit operation" -msgstr "Éditer l'opération" - -#: accounting/templates/accounting/operation_edit.jinja:43 -msgid "Linked operation:" -msgstr "Opération liée : " - -#: accounting/templates/accounting/operation_edit.jinja:51 -#: com/templates/com/news_edit.jinja:66 core/templates/core/create.jinja:12 -#: core/templates/core/edit.jinja:7 core/templates/core/edit.jinja.py:15 -#: core/templates/core/edit.jinja:20 core/templates/core/file_edit.jinja:8 -#: core/templates/core/page_prop.jinja:8 -#: core/templates/core/pagerev_edit.jinja:24 -#: core/templates/core/user_godfathers.jinja:35 -#: counter/templates/counter/cash_register_summary.jinja:22 -#: subscription/templates/subscription/subscription.jinja:23 -msgid "Save" -msgstr "Sauver" - -#: accounting/templates/accounting/refound_account.jinja:4 -#: accounting/templates/accounting/refound_account.jinja:8 -#: accounting/views.py:680 -msgid "Refound account" -msgstr "Remboursement de compte" - -#: accounting/templates/accounting/refound_account.jinja:12 -msgid "Refound" -msgstr "Rembourser" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:4 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:15 -msgid "Simplified type list" -msgstr "Liste des types simplifiés" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:10 -msgid "Simplified types" -msgstr "Types simplifiés" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:13 -msgid "New simplified type" -msgstr "Nouveau type simplifié" - -#: accounting/views.py:172 accounting/views.py:179 accounting/views.py:399 -msgid "Journal" -msgstr "Classeur" - -#: accounting/views.py:184 -msgid "Statement by nature" -msgstr "Bilan par nature" - -#: accounting/views.py:189 -msgid "Statement by person" -msgstr "Bilan par personne" - -#: accounting/views.py:194 -msgid "Accounting statement" -msgstr "Bilan comptable" - -#: accounting/views.py:393 accounting/views.py:399 -msgid "Operation" -msgstr "Opération" - -#: accounting/views.py:410 -msgid "Financial proof: " -msgstr "Justificatif de libellé : " - -#: accounting/views.py:411 -#, python-format -msgid "Club: %(club_name)s" -msgstr "Club : %(club_name)s" - -#: accounting/views.py:412 -#, python-format -msgid "Label: %(op_label)s" -msgstr "Libellé : %(op_label)s" - -#: accounting/views.py:413 -#, python-format -msgid "Date: %(date)s" -msgstr "Date : %(date)s" - -#: accounting/views.py:419 -#, python-format -msgid "Amount: %(amount).2f €" -msgstr "Montant : %(amount).2f €" - -#: accounting/views.py:431 -msgid "Debtor" -msgstr "Débiteur" - -#: accounting/views.py:431 -msgid "Creditor" -msgstr "Créditeur" - -#: accounting/views.py:433 -msgid "Comment:" -msgstr "Commentaire :" - -#: accounting/views.py:452 -msgid "Signature:" -msgstr "Signature :" - -#: accounting/views.py:506 -msgid "General statement" -msgstr "Bilan général" - -#: accounting/views.py:509 -msgid "No label operations" -msgstr "Opérations sans étiquette" - -#: accounting/views.py:642 -msgid "Refound this account" -msgstr "Rembourser ce compte" - -#: club/models.py:20 -msgid "unix name" -msgstr "nom unix" - -#: club/models.py:24 -msgid "" -"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " -"characters." -msgstr "" -"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " -"lettres, des nombres, et les caractères ./-/_" - -#: club/models.py:29 -msgid "A club with that unix name already exists." -msgstr "Un club avec ce nom UNIX existe déjà." - -#: club/models.py:32 core/models.py:170 -msgid "address" -msgstr "Adresse" - -#: club/models.py:38 core/models.py:118 -msgid "home" -msgstr "home" - -#: club/models.py:47 -msgid "You can not make loops in clubs" -msgstr "Vous ne pouvez pas faire de boucles dans les clubs" - -#: club/models.py:61 -msgid "A club with that unix_name already exists" -msgstr "Un club avec ce nom UNIX existe déjà." - -#: club/models.py:144 counter/models.py:397 counter/models.py:414 -#: eboutic/models.py:14 eboutic/models.py:47 election/models.py:126 -#: launderette/models.py:87 launderette/models.py:124 sas/models.py:131 -msgid "user" -msgstr "nom d'utilisateur" - -#: club/models.py:148 core/models.py:137 election/models.py:125 -#: election/models.py:141 -msgid "role" -msgstr "rôle" - -#: club/models.py:150 core/models.py:33 counter/models.py:71 -#: counter/models.py:96 election/models.py:15 election/models.py:82 -#: election/models.py:127 -msgid "description" -msgstr "description" - -#: club/models.py:155 -msgid "User must be subscriber to take part to a club" -msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" - -#: club/models.py:157 -msgid "User is already member of that club" -msgstr "L'utilisateur est déjà membre de ce club" - -#: club/models.py:161 -msgid "past member" -msgstr "Anciens membres" - -#: club/templates/club/club_list.jinja:4 -#: club/templates/club/club_list.jinja:24 -msgid "Club list" -msgstr "Liste des clubs" - -#: club/templates/club/club_list.jinja:21 -#: core/templates/core/user_tools.jinja:19 -msgid "New club" -msgstr "Nouveau club" - -#: club/templates/club/club_list.jinja:31 -msgid "There is no club in this website." -msgstr "Il n'y a pas de club dans ce site web." - -#: club/templates/club/club_members.jinja:5 -msgid "Club members" -msgstr "Membres du club" - -#: club/templates/club/club_members.jinja:9 -#: club/templates/club/club_old_members.jinja:9 -#: core/templates/core/user_clubs.jinja:16 -#: core/templates/core/user_clubs.jinja:42 -msgid "Role" -msgstr "Rôle" - -#: club/templates/club/club_members.jinja:10 -#: club/templates/club/club_old_members.jinja:10 -#: core/templates/core/user_clubs.jinja:17 -#: core/templates/core/user_clubs.jinja:43 -msgid "Description" -msgstr "Description" - -#: club/templates/club/club_members.jinja:11 -#: core/templates/core/user_clubs.jinja:18 -#: launderette/templates/launderette/launderette_admin.jinja:45 -msgid "Since" -msgstr "Depuis" - -#: club/templates/club/club_members.jinja:21 -#: core/templates/core/user_clubs.jinja:29 -msgid "Mark as old" -msgstr "Marquer comme ancien" - -#: club/templates/club/club_members.jinja:30 -#: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 -#: launderette/views.py:154 -msgid "Add" -msgstr "Ajouter" - -#: club/templates/club/club_old_members.jinja:5 -msgid "Club old members" -msgstr "Anciens membres du club" - -#: club/templates/club/club_old_members.jinja:11 -#: core/templates/core/user_clubs.jinja:44 -msgid "From" -msgstr "Du" - -#: club/templates/club/club_old_members.jinja:12 -#: core/templates/core/user_clubs.jinja:45 -msgid "To" -msgstr "Au" - -#: club/templates/club/club_sellings.jinja:5 club/views.py:59 -#: club/views.py:219 counter/templates/counter/counter_main.jinja:19 -#: counter/templates/counter/last_ops.jinja:35 -msgid "Sellings" -msgstr "Ventes" - -#: club/templates/club/club_sellings.jinja:9 -#: counter/templates/counter/cash_summary_list.jinja:15 -msgid "Show" -msgstr "Montrer" - -#: club/templates/club/club_sellings.jinja:10 -msgid "Download as cvs" -msgstr "Télécharger en CSV" - -#: club/templates/club/club_sellings.jinja:13 -msgid "Quantity: " -msgstr "Quantité : " - -#: club/templates/club/club_sellings.jinja:13 -msgid "units" -msgstr "unités" - -#: club/templates/club/club_sellings.jinja:20 club/views.py:170 -#: core/templates/core/user_account_detail.jinja:18 -#: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:77 -msgid "Counter" -msgstr "Comptoir" - -#: club/templates/club/club_sellings.jinja:21 -#: core/templates/core/user_account_detail.jinja:19 -#: core/templates/core/user_account_detail.jinja:52 -#: counter/templates/counter/last_ops.jinja:15 -#: counter/templates/counter/last_ops.jinja:40 -msgid "Barman" -msgstr "Barman" - -#: club/templates/club/club_sellings.jinja:22 -#: counter/templates/counter/counter_click.jinja:29 -#: counter/templates/counter/last_ops.jinja:16 -#: counter/templates/counter/last_ops.jinja:41 -msgid "Customer" -msgstr "Client" - -#: club/templates/club/club_sellings.jinja:24 -#: core/templates/core/user_account_detail.jinja:21 -#: core/templates/core/user_stats.jinja:28 -#: counter/templates/counter/last_ops.jinja:43 -msgid "Quantity" -msgstr "Quantité" - -#: club/templates/club/club_sellings.jinja:25 -#: core/templates/core/user_account.jinja:10 -#: core/templates/core/user_account_detail.jinja:22 -#: counter/templates/counter/cash_summary_list.jinja:35 -#: counter/templates/counter/last_ops.jinja:44 -#: counter/templates/counter/stats.jinja:18 -msgid "Total" -msgstr "Total" - -#: club/templates/club/club_sellings.jinja:26 -#: core/templates/core/user_account_detail.jinja:23 -#: core/templates/core/user_account_detail.jinja:54 -#: counter/templates/counter/last_ops.jinja:18 -#: counter/templates/counter/last_ops.jinja:45 -msgid "Payment method" -msgstr "Méthode de paiement" - -#: club/templates/club/club_tools.jinja:4 -#: core/templates/core/user_tools.jinja:82 -msgid "Club tools" -msgstr "Outils club" - -#: club/templates/club/club_tools.jinja:6 -msgid "Communication:" -msgstr "Communication : " - -#: club/templates/club/club_tools.jinja:8 -msgid "Create a news" -msgstr "Créer une nouvelle" - -#: club/templates/club/club_tools.jinja:10 -msgid "Counters:" -msgstr "Comptoirs : " - -#: club/templates/club/club_tools.jinja:26 -msgid "Accouting: " -msgstr "Comptabilité : " - -#: club/templates/club/club_tools.jinja:34 -msgid "Manage launderettes" -msgstr "Gestion des laveries" - -#: club/views.py:38 -msgid "Members" -msgstr "Membres" - -#: club/views.py:43 -msgid "Old members" -msgstr "Anciens membres" - -#: club/views.py:49 core/templates/core/base.jinja:64 core/views/user.py:146 -#: sas/templates/sas/picture.jinja:87 -msgid "Tools" -msgstr "Outils" - -#: club/views.py:65 counter/templates/counter/counter_list.jinja:21 -#: counter/templates/counter/counter_list.jinja:36 -#: counter/templates/counter/counter_list.jinja:51 -msgid "Props" -msgstr "Propriétés" - -#: club/views.py:106 core/views/forms.py:204 counter/views.py:38 -msgid "Select user" -msgstr "Choisir un utilisateur" - -#: club/views.py:153 sas/views.py:81 sas/views.py:131 sas/views.py:181 -msgid "You do not have the permission to do that" -msgstr "Vous n'avez pas la permission de faire cela" - -#: club/views.py:168 counter/views.py:908 -msgid "Begin date" -msgstr "Date de début" - -#: club/views.py:169 com/views.py:81 counter/views.py:909 -#: election/views.py:131 -msgid "End date" -msgstr "Date de fin" - -#: club/views.py:183 core/templates/core/user_stats.jinja:27 -#: counter/views.py:989 -msgid "Product" -msgstr "Produit" - -#: com/models.py:11 -msgid "alert message" -msgstr "message d'alerte" - -#: com/models.py:12 -msgid "info message" -msgstr "message d'info" - -#: com/models.py:13 -msgid "index page" -msgstr "page d'accueil" - -#: com/models.py:22 -msgid "Notice" -msgstr "Information" - -#: com/models.py:23 -msgid "Event" -msgstr "Événement" - -#: com/models.py:24 com/templates/com/news_list.jinja:79 -msgid "Weekly" -msgstr "Hebdomadaire" - -#: com/models.py:25 -msgid "Call" -msgstr "Appel" - -#: com/models.py:30 election/models.py:14 election/models.py:81 -#: election/models.py:114 -msgid "title" -msgstr "titre" - -#: com/models.py:31 -msgid "summary" -msgstr "résumé" - -#: com/models.py:32 -msgid "content" -msgstr "contenu de la nouvelle" - -#: com/models.py:33 core/models.py:914 launderette/models.py:60 -#: launderette/models.py:85 launderette/models.py:121 -msgid "type" -msgstr "type" - -#: com/models.py:35 -msgid "author" -msgstr "auteur" - -#: com/models.py:36 core/models.py:531 -msgid "is moderated" -msgstr "est modéré" - -#: com/models.py:37 -msgid "moderator" -msgstr "modérateur" - -#: com/models.py:61 -msgid "news_date" -msgstr "date de la nouvelle" - -#: com/models.py:62 -msgid "start_date" -msgstr "date de début" - -#: com/models.py:63 -msgid "end_date" -msgstr "date de fin" - -#: com/templates/com/news_admin_list.jinja:5 -msgid "News admin" -msgstr "Administration des nouvelles" - -#: com/templates/com/news_admin_list.jinja:9 -#: com/templates/com/news_detail.jinja:5 -#: com/templates/com/news_detail.jinja:11 com/templates/com/news_list.jinja:4 -#: com/templates/com/news_list.jinja:28 -msgid "News" -msgstr "Nouvelles" - -#: com/templates/com/news_admin_list.jinja:10 -msgid "Displayed news" -msgstr "Nouvelles affichées" - -#: com/templates/com/news_admin_list.jinja:14 -#: com/templates/com/news_admin_list.jinja:48 -#: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:156 -msgid "Type" -msgstr "Type" - -#: com/templates/com/news_admin_list.jinja:15 -#: com/templates/com/news_admin_list.jinja:49 -msgid "Title" -msgstr "Titre" - -#: com/templates/com/news_admin_list.jinja:16 -#: com/templates/com/news_admin_list.jinja:50 -msgid "Summary" -msgstr "Résumé" - -#: com/templates/com/news_admin_list.jinja:18 -#: com/templates/com/news_admin_list.jinja:52 -msgid "Author" -msgstr "Auteur" - -#: com/templates/com/news_admin_list.jinja:19 -msgid "Moderator" -msgstr "Modérateur" - -#: com/templates/com/news_admin_list.jinja:44 -msgid "News to moderate" -msgstr "Nouvelles à modérer" - -#: com/templates/com/news_admin_list.jinja:72 -#: com/templates/com/news_detail.jinja:26 -#: core/templates/core/file_detail.jinja:65 -#: core/templates/core/file_moderation.jinja:23 -#: sas/templates/sas/moderation.jinja:17 sas/templates/sas/picture.jinja:114 -msgid "Moderate" -msgstr "Modérer" - -#: com/templates/com/news_detail.jinja:10 -msgid "Back to news" -msgstr "Retour aux nouvelles" - -#: com/templates/com/news_detail.jinja:22 com/templates/com/news_edit.jinja:34 -msgid "Author: " -msgstr "Auteur : " - -#: com/templates/com/news_detail.jinja:24 sas/templates/sas/picture.jinja:82 -msgid "Moderator: " -msgstr "Modérateur : " - -#: com/templates/com/news_detail.jinja:29 -msgid "Edit (will be remoderated)" -msgstr "Éditer (sera resoumise à modération)" - -#: com/templates/com/news_edit.jinja:6 com/templates/com/news_edit.jinja:38 -msgid "Edit news" -msgstr "Éditer la nouvelle" - -#: com/templates/com/news_edit.jinja:8 com/templates/com/news_edit.jinja:40 -msgid "Create news" -msgstr "Créer nouvelle" - -#: com/templates/com/news_edit.jinja:48 -msgid "Notice: Information, election result - no date" -msgstr "Information, resultat d'élection - sans date" - -#: com/templates/com/news_edit.jinja:49 -msgid "Event: punctual event, associated with one date" -msgstr "Événement : événement ponctuel associé à une date" - -#: com/templates/com/news_edit.jinja:50 -msgid "" -"Weekly: recurrent event, associated with many dates (specify the first one, " -"and a deadline)" -msgstr "" -"Hebdomadaire : événement récurrent, associé à plusieurs dates (spécifier la " -"première, ainsi que la date de fin)" - -#: com/templates/com/news_edit.jinja:51 -msgid "" -"Call: long time event, associated with a long date (election appliance, ...)" -msgstr "" -"Appel : événement de longue durée, associé à une longue date (candidature, " -"concours, ...)" - -#: com/templates/com/news_edit.jinja:65 -#: core/templates/core/pagerev_edit.jinja:23 -msgid "Preview" -msgstr "Prévisualiser" - -#: com/templates/com/news_list.jinja:48 -msgid "Events today and the next few days" -msgstr "Événement aujourd'hui et dans les prochains jours" - -#: com/templates/com/news_list.jinja:65 -msgid "Coming soon... don't miss!" -msgstr "Prochainement... à ne pas rater!" - -#: com/views.py:27 -msgid "Communication administration" -msgstr "Administration de la communication" - -#: com/views.py:34 -msgid "Index page" -msgstr "Page d'accueil" - -#: com/views.py:39 -msgid "Info message" -msgstr "Message d'info" - -#: com/views.py:44 -msgid "Alert message" -msgstr "Message d'alerte" - -#: com/views.py:80 election/views.py:130 -msgid "Start date" -msgstr "Date de début" - -#: com/views.py:82 -msgid "Until" -msgstr "Jusqu'à" - -#: com/views.py:83 -msgid "Automoderation" -msgstr "Automodération" - -#: com/views.py:89 com/views.py:91 com/views.py:93 -msgid "This field is required." -msgstr "Ce champ est obligatoire." - -#: core/models.py:29 -msgid "meta group status" -msgstr "status du meta-groupe" - -#: core/models.py:31 -msgid "Whether a group is a meta group or not" -msgstr "Si un groupe est un meta-groupe ou pas" - -#: core/models.py:59 -#, python-format -msgid "%(value)s is not a valid promo (between 0 and %(end)s)" -msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" - -#: core/models.py:75 -msgid "username" -msgstr "nom d'utilisateur" - -#: core/models.py:78 -msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." -msgstr "" -"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" -"+/-/_" - -#: core/models.py:82 -msgid "" -"Enter a valid username. This value may contain only letters, numbers and ./" -"+/-/_ characters." -msgstr "" -"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" -"+/-/_" - -#: core/models.py:87 -msgid "A user with that username already exists." -msgstr "Un utilisateur de ce nom existe déjà" - -#: core/models.py:90 -msgid "first name" -msgstr "Prénom" - -#: core/models.py:91 -msgid "last name" -msgstr "Nom" - -#: core/models.py:92 -msgid "email address" -msgstr "adresse email" - -#: core/models.py:93 -msgid "date of birth" -msgstr "date de naissance" - -#: core/models.py:94 -msgid "nick name" -msgstr "surnom" - -#: core/models.py:96 -msgid "staff status" -msgstr "status \"staff\"" - -#: core/models.py:98 -msgid "Designates whether the user can log into this admin site." -msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." - -#: core/models.py:101 -msgid "active" -msgstr "actif" - -#: core/models.py:104 -msgid "" -"Designates whether this user should be treated as active. Unselect this " -"instead of deleting accounts." -msgstr "" -"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " -"lieu de supprimer les comptes." - -#: core/models.py:108 -msgid "date joined" -msgstr "date d'inscription" - -#: core/models.py:109 -msgid "last update" -msgstr "dernière mise à jour" - -#: core/models.py:111 -msgid "superuser" -msgstr "super-utilisateur" - -#: core/models.py:114 -msgid "Designates whether this user is a superuser. " -msgstr "Est-ce que l'utilisateur est super-utilisateur." - -#: core/models.py:120 -msgid "profile" -msgstr "profil" - -#: core/models.py:122 -msgid "avatar" -msgstr "avatar" - -#: core/models.py:124 -msgid "scrub" -msgstr "blouse" - -#: core/models.py:126 -msgid "sex" -msgstr "sexe" - -#: core/models.py:126 -msgid "Man" -msgstr "Homme" - -#: core/models.py:126 -msgid "Woman" -msgstr "Femme" - -#: core/models.py:127 -msgid "tshirt size" -msgstr "taille de tshirt" - -#: core/models.py:128 -msgid "-" -msgstr "-" - -#: core/models.py:129 -msgid "XS" -msgstr "XS" - -#: core/models.py:130 -msgid "S" -msgstr "S" - -#: core/models.py:131 -msgid "M" -msgstr "M" - -#: core/models.py:132 -msgid "L" -msgstr "L" - -#: core/models.py:133 -msgid "XL" -msgstr "XL" - -#: core/models.py:134 -msgid "XXL" -msgstr "XXL" - -#: core/models.py:135 -msgid "XXXL" -msgstr "XXXL" - -#: core/models.py:138 -msgid "Student" -msgstr "Étudiant" - -#: core/models.py:139 -msgid "Administrative agent" -msgstr "Personnel administratif" - -#: core/models.py:140 -msgid "Teacher" -msgstr "Enseignant" - -#: core/models.py:141 -msgid "Agent" -msgstr "Personnel" - -#: core/models.py:142 -msgid "Doctor" -msgstr "Doctorant" - -#: core/models.py:143 -msgid "Former student" -msgstr "Ancien étudiant" - -#: core/models.py:144 -msgid "Service" -msgstr "Service" - -#: core/models.py:146 -msgid "department" -msgstr "département" - -#: core/models.py:147 -msgid "TC" -msgstr "TC" - -#: core/models.py:148 -msgid "IMSI" -msgstr "IMSI" - -#: core/models.py:149 -msgid "IMAP" -msgstr "IMAP" - -#: core/models.py:150 -msgid "INFO" -msgstr "INFO" - -#: core/models.py:151 -msgid "GI" -msgstr "GI" - -#: core/models.py:152 -msgid "E" -msgstr "E" - -#: core/models.py:153 -msgid "EE" -msgstr "EE" - -#: core/models.py:154 -msgid "GESC" -msgstr "GESC" - -#: core/models.py:155 -msgid "GMC" -msgstr "GMC" - -#: core/models.py:156 -msgid "MC" -msgstr "MC" - -#: core/models.py:157 -msgid "EDIM" -msgstr "EDIM" - -#: core/models.py:158 -msgid "Humanities" -msgstr "Humanités" - -#: core/models.py:159 -msgid "N/A" -msgstr "N/A" - -#: core/models.py:161 -msgid "dpt option" -msgstr "Filière" - -#: core/models.py:162 -msgid "semester" -msgstr "semestre" - -#: core/models.py:163 -msgid "quote" -msgstr "citation" - -#: core/models.py:164 -msgid "school" -msgstr "école" - -#: core/models.py:165 -msgid "promo" -msgstr "promo" - -#: core/models.py:166 -msgid "forum signature" -msgstr "signature du forum" - -#: core/models.py:167 -msgid "second email address" -msgstr "adresse email secondaire" - -#: core/models.py:169 -msgid "parent phone" -msgstr "téléphone des parents" - -#: core/models.py:171 -msgid "parent address" -msgstr "adresse des parents" - -#: core/models.py:172 -msgid "is subscriber viewable" -msgstr "profil visible par les cotisants" - -#: core/models.py:305 -msgid "A user with that username already exists" -msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" - -#: core/models.py:430 core/templates/core/macros.jinja:17 -#: core/templates/core/user_detail.jinja:14 -#: core/templates/core/user_detail.jinja:16 -#: core/templates/core/user_edit.jinja:17 -#: election/templates/election/election_detail.jinja:316 -msgid "Profile" -msgstr "Profil" - -#: core/models.py:499 -msgid "Visitor" -msgstr "Visiteur" - -#: core/models.py:504 -msgid "define if we show a users stats" -msgstr "Definit si l'on montre les statistiques de l'utilisateur" - -#: core/models.py:506 -msgid "Show your account statistics to others" -msgstr "Montrez vos statistiques de compte aux autres" - -#: core/models.py:519 -msgid "file name" -msgstr "nom du fichier" - -#: core/models.py:520 core/models.py:720 -msgid "parent" -msgstr "parent" - -#: core/models.py:521 core/models.py:537 -msgid "file" -msgstr "fichier" - -#: core/models.py:522 -msgid "compressed file" -msgstr "version allégée" - -#: core/models.py:523 -msgid "thumbnail" -msgstr "miniature" - -#: core/models.py:524 core/models.py:532 -msgid "owner" -msgstr "propriétaire" - -#: core/models.py:525 core/models.py:726 -msgid "edit group" -msgstr "groupe d'édition" - -#: core/models.py:526 core/models.py:727 -msgid "view group" -msgstr "groupe de vue" - -#: core/models.py:527 -msgid "is folder" -msgstr "est un dossier" - -#: core/models.py:528 -msgid "mime type" -msgstr "type mime" - -#: core/models.py:529 -msgid "size" -msgstr "taille" - -#: core/models.py:533 -msgid "asked for removal" -msgstr "retrait demandé" - -#: core/models.py:534 -msgid "is in the SAS" -msgstr "est dans le SAS" - -#: core/models.py:573 -msgid "Character '/' not authorized in name" -msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" - -#: core/models.py:576 core/models.py:581 -msgid "Loop in folder tree" -msgstr "Boucle dans l'arborescence des dossiers" - -#: core/models.py:585 -msgid "You can not make a file be a children of a non folder file" -msgstr "" -"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " -"un dossier" - -#: core/models.py:589 -msgid "Duplicate file" -msgstr "Un fichier de ce nom existe déjà" - -#: core/models.py:603 -msgid "You must provide a file" -msgstr "Vous devez fournir un fichier" - -#: core/models.py:669 -msgid "Folder: " -msgstr "Dossier : " - -#: core/models.py:671 -msgid "File: " -msgstr "Fichier : " - -#: core/models.py:719 core/models.py:723 -msgid "page name" -msgstr "nom de la page" - -#: core/models.py:724 -msgid "owner group" -msgstr "groupe propriétaire" - -#: core/models.py:728 -msgid "lock user" -msgstr "utilisateur bloquant" - -#: core/models.py:729 -msgid "lock_timeout" -msgstr "décompte du déblocage" - -#: core/models.py:756 -msgid "Duplicate page" -msgstr "Une page de ce nom existe déjà" - -#: core/models.py:762 -msgid "Loop in page tree" -msgstr "Boucle dans l'arborescence des pages" - -#: core/models.py:872 -msgid "revision" -msgstr "révision" - -#: core/models.py:873 -msgid "page title" -msgstr "titre de la page" - -#: core/models.py:874 -msgid "page content" -msgstr "contenu de la page" - -#: core/models.py:912 -msgid "url" -msgstr "url" - -#: core/models.py:913 -msgid "param" -msgstr "param" - -#: core/models.py:916 -msgid "viewed" -msgstr "vue" - -#: core/templates/core/403.jinja:5 -msgid "403, Forbidden" -msgstr "403, Non autorisé" - -#: core/templates/core/404.jinja:5 -msgid "404, Not Found" -msgstr "404. Non trouvé" - -#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 -msgid "Welcome!" -msgstr "Bienvenue!" - -#: core/templates/core/base.jinja:19 -msgid "Logo" -msgstr "Logo" - -#: core/templates/core/base.jinja:33 core/templates/core/login.jinja:4 -#: core/templates/core/password_reset_complete.jinja:5 -msgid "Login" -msgstr "Connexion" - -#: core/templates/core/base.jinja:34 core/templates/core/register.jinja:18 -msgid "Register" -msgstr "S'enregister" - -#: core/templates/core/base.jinja:61 -msgid "View more" -msgstr "Voir plus" - -#: core/templates/core/base.jinja:62 -msgid "Mark all as read" -msgstr "Marquer tout commme lu" - -#: core/templates/core/base.jinja:65 -msgid "Logout" -msgstr "Déconnexion" - -#: core/templates/core/base.jinja:67 core/templates/core/base.jinja.py:68 -msgid "Search" -msgstr "Recherche" - -#: core/templates/core/base.jinja:90 -msgid "Main" -msgstr "Accueil" - -#: core/templates/core/base.jinja:91 -msgid "Matmatronch" -msgstr "Matmatronch" - -#: core/templates/core/base.jinja:92 -msgid "Wiki" -msgstr "Wiki" - -#: core/templates/core/base.jinja:93 sas/templates/sas/album.jinja:4 -#: sas/templates/sas/main.jinja:4 sas/templates/sas/main.jinja.py:8 -#: sas/templates/sas/picture.jinja:26 -msgid "SAS" -msgstr "SAS" - -#: core/templates/core/base.jinja:94 -msgid "Forum" -msgstr "Forum" - -#: core/templates/core/base.jinja:95 -msgid "Services" -msgstr "Services" - -#: core/templates/core/base.jinja:96 core/templates/core/file.jinja:20 -#: core/views/files.py:50 -msgid "Files" -msgstr "Fichiers" - -#: core/templates/core/base.jinja:97 -msgid "Sponsors" -msgstr "Partenaires" - -#: core/templates/core/base.jinja:98 -msgid "Help" -msgstr "Aide" - -#: core/templates/core/base.jinja:131 -msgid "Contacts" -msgstr "Contacts" - -#: core/templates/core/base.jinja:132 -msgid "Legal notices" -msgstr "Mentions légales" - -#: core/templates/core/base.jinja:133 -msgid "Intellectual property" -msgstr "Propriété intellectuelle" - -#: core/templates/core/base.jinja:134 -msgid "Help & Documentation" -msgstr "Aide & Documentation" - -#: core/templates/core/base.jinja:135 -msgid "R&D" -msgstr "R&D" - -#: core/templates/core/base.jinja:137 -msgid "Site made by good people" -msgstr "Site réalisé par des gens bons" - -#: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 -#, python-format -msgid "Create %(name)s" -msgstr "Créer %(name)s" - -#: core/templates/core/delete_confirm.jinja:4 -#: core/templates/core/delete_confirm.jinja:8 -#: core/templates/core/file_delete_confirm.jinja:4 -#: core/templates/core/file_delete_confirm.jinja:8 -msgid "Delete confirmation" -msgstr "Confirmation de suppression" - -#: core/templates/core/delete_confirm.jinja:10 -#: core/templates/core/file_delete_confirm.jinja:10 -#, python-format -msgid "Are you sure you want to delete \"%(obj)s\"?" -msgstr "Êtes-vous sûr de vouloir supprimer \"%(obj)s\" ?" - -#: core/templates/core/delete_confirm.jinja:11 -#: core/templates/core/file_delete_confirm.jinja:11 -msgid "Confirm" -msgstr "Confirmation" - -#: core/templates/core/delete_confirm.jinja:14 -#: core/templates/core/file_delete_confirm.jinja:14 -#: counter/templates/counter/counter_click.jinja:93 -msgid "Cancel" -msgstr "Annuler" - -#: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13 -#: core/templates/core/file_edit.jinja:4 -#: counter/templates/counter/cash_register_summary.jinja:4 -#, python-format -msgid "Edit %(obj)s" -msgstr "Éditer %(obj)s" - -#: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 -msgid "File list" -msgstr "Liste des fichiers" - -#: core/templates/core/file.jinja:9 -msgid "New file" -msgstr "Nouveau fichier" - -#: core/templates/core/file.jinja:11 core/templates/core/page.jinja:11 -msgid "Not found" -msgstr "Non trouvé" - -#: core/templates/core/file.jinja:32 -msgid "My files" -msgstr "Mes fichiers" - -#: core/templates/core/file.jinja:41 core/templates/core/page.jinja:34 -msgid "Prop" -msgstr "Propriétés" - -#: core/templates/core/file_detail.jinja:13 -#: core/templates/core/file_moderation.jinja:20 -#: sas/templates/sas/picture.jinja:80 -msgid "Owner: " -msgstr "Propriétaire : " - -#: core/templates/core/file_detail.jinja:26 sas/templates/sas/album.jinja:27 -msgid "Clear clipboard" -msgstr "Vider le presse-papier" - -#: core/templates/core/file_detail.jinja:27 sas/templates/sas/album.jinja:28 -msgid "Cut" -msgstr "Couper" - -#: core/templates/core/file_detail.jinja:28 sas/templates/sas/album.jinja:29 -msgid "Paste" -msgstr "Coller" - -#: core/templates/core/file_detail.jinja:31 sas/templates/sas/album.jinja:32 -msgid "Clipboard: " -msgstr "Presse-papier : " - -#: core/templates/core/file_detail.jinja:53 -msgid "Real name: " -msgstr "Nom réel : " - -#: core/templates/core/file_detail.jinja:54 -#: core/templates/core/file_moderation.jinja:21 -#: sas/templates/sas/picture.jinja:79 -msgid "Date: " -msgstr "Date : " - -#: core/templates/core/file_detail.jinja:56 -msgid "Type: " -msgstr "Type : " - -#: core/templates/core/file_detail.jinja:57 -msgid "Size: " -msgstr "Taille : " - -#: core/templates/core/file_detail.jinja:57 -msgid "bytes" -msgstr "octets" - -#: core/templates/core/file_detail.jinja:59 -msgid "Download" -msgstr "Télécharger" - -#: core/templates/core/file_list.jinja:19 -msgid "There is no file in this website." -msgstr "Il n'y a pas de fichier sur ce site web." - -#: core/templates/core/file_moderation.jinja:4 -#: core/templates/core/file_moderation.jinja:8 -msgid "File moderation" -msgstr "Modération des fichiers" - -#: core/templates/core/file_moderation.jinja:19 -msgid "Full name: " -msgstr "Nom complet : " - -#: core/templates/core/group_edit.jinja:4 -msgid "Back to list" -msgstr "Retour à la liste" - -#: core/templates/core/group_edit.jinja:5 -msgid "Edit group" -msgstr "Éditer le groupe" - -#: core/templates/core/group_edit.jinja:9 -#: core/templates/core/user_edit.jinja:37 -#: core/templates/core/user_group.jinja:8 -msgid "Update" -msgstr "Mettre à jour" - -#: core/templates/core/group_list.jinja:4 -#: core/templates/core/group_list.jinja:8 -msgid "Group list" -msgstr "Liste des groupes" - -#: core/templates/core/group_list.jinja:9 -msgid "New group" -msgstr "Nouveau groupe" - -#: core/templates/core/login.jinja:10 -msgid "Your username and password didn't match. Please try again." -msgstr "" -"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Merci de " -"réessayer." - -#: core/templates/core/login.jinja:15 -msgid "" -"Your account doesn't have access to this page. To proceed,\n" -" please login with an account that has access." -msgstr "" -"Votre compte n'a pas accès à cette page. Merci de vous identifier avec un " -"compte qui a accès." - -#: core/templates/core/login.jinja:18 -msgid "Please login to see this page." -msgstr "Merci de vous identifier pour voir cette page." - -#: core/templates/core/login.jinja:28 -#: counter/templates/counter/counter_main.jinja:51 -msgid "login" -msgstr "login" - -#: core/templates/core/login.jinja:32 -msgid "Lost password?" -msgstr "Mot de passe perdu ?" - -#: core/templates/core/macros.jinja:27 -#: core/templates/core/user_detail.jinja:27 -msgid "Born: " -msgstr "Né le : " - -#: core/templates/core/macros.jinja:31 -#: core/templates/core/user_detail.jinja:48 -msgid "Promo: " -msgstr "Promo : " - -#: core/templates/core/macros.jinja:38 -#, python-format -msgid "Subscribed until %(subscription_end)s" -msgstr "Cotisant jusqu'au %(subscription_end)s" - -#: core/templates/core/macros.jinja:39 core/templates/core/user_edit.jinja:40 -msgid "Account number: " -msgstr "Numero de compte : " - -#: core/templates/core/macros.jinja:44 launderette/models.py:127 -msgid "Slot" -msgstr "Créneau" - -#: core/templates/core/macros.jinja:57 -#: launderette/templates/launderette/launderette_admin.jinja:20 -msgid "Tokens" -msgstr "Jetons" - -#: core/templates/core/new_user_email.jinja:2 -msgid "" -"You're receiving this email because you subscribed to the UTBM student " -"association." -msgstr "" -"Vous avez reçu cet email parce que vous avez cotisé à l'Association des " -"Étudiants de l'UTBM." - -#: core/templates/core/new_user_email.jinja:4 -#: core/templates/core/password_reset_email.jinja:4 -msgid "Please go to the following page and choose a new password:" -msgstr "" -"Merci de vous rendre sur la page suivante et de choisir un nouveau mot de " -"passe :" - -#: core/templates/core/new_user_email.jinja:8 -msgid "Your username, in case it was not given to you: " -msgstr "Votre nom d'utilisateur, si il ne vous a pas été donné :" - -#: core/templates/core/new_user_email.jinja:9 -msgid "" -"You also got a new account that will be useful to purchase products in the " -"living areas and on the Eboutic." -msgstr "" -"Un compte vous a également été créé, qui vous servira notamment à consommer " -"dans les lieux de vie ou sur l'Eboutic." - -#: core/templates/core/new_user_email.jinja:10 -#, python-format -msgid "Here is your account number: %(account)s" -msgstr "Voici votre numéro de compte AE : %(account)s" - -#: core/templates/core/new_user_email.jinja:12 -msgid "Thanks for subscribing! " -msgstr "Merci d'avoir cotisé !" - -#: core/templates/core/new_user_email.jinja:14 -msgid "The AE team" -msgstr "L'équipe AE" - -#: core/templates/core/new_user_email_subject.jinja:2 -msgid "New subscription to the UTBM student association" -msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" - -#: core/templates/core/notification_list.jinja:4 -#: core/templates/core/notification_list.jinja:8 -msgid "Notification list" -msgstr "Liste des notifications" - -#: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 -#: core/templates/core/page_list.jinja:9 -msgid "Page list" -msgstr "Liste des pages" - -#: core/templates/core/page.jinja:9 -msgid "Create page" -msgstr "Créer une page" - -#: core/templates/core/page.jinja:29 -msgid "History" -msgstr "Historique" - -#: core/templates/core/page.jinja:45 -msgid "Page does not exist" -msgstr "La page n'existe pas." - -#: core/templates/core/page.jinja:47 -msgid "Create it?" -msgstr "La créer ?" - -#: core/templates/core/page_detail.jinja:5 -#, python-format -msgid "This may not be the last update, you are seeing revision %(rev_id)s!" -msgstr "" -"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la " -"version %(rev_id)s." - -#: core/templates/core/page_hist.jinja:6 -msgid "Page history" -msgstr "Historique de la page" - -#: core/templates/core/page_hist.jinja:7 -#, python-format -msgid "You're seeing the history of page \"%(page_name)s\"" -msgstr "Vous consultez l'historique de la page \"%(page_name)s\"" - -#: core/templates/core/page_hist.jinja:11 -msgid "last" -msgstr "actuel" - -#: core/templates/core/page_list.jinja:16 -msgid "There is no page in this website." -msgstr "Il n'y a pas de page sur ce site web." - -#: core/templates/core/page_prop.jinja:4 -msgid "Page properties" -msgstr "Propriétés de la page" - -#: core/templates/core/pagerev_edit.jinja:19 -msgid "Edit page" -msgstr "Éditer la page" - -#: core/templates/core/password_change.jinja:6 -#, python-format -msgid "Change password for %(user)s" -msgstr "Changer le mot de passe de %(user)s" - -#: core/templates/core/password_change.jinja:11 -msgid "Change" -msgstr "Changer" - -#: core/templates/core/password_change_done.jinja:4 -msgid "You successfully changed your password!" -msgstr "Vous avez correctement changé votre mot de passe !" - -#: core/templates/core/password_reset.jinja:7 -#: core/templates/core/password_reset_confirm.jinja:7 -msgid "Reset" -msgstr "Reset" - -#: core/templates/core/password_reset_complete.jinja:4 -msgid "You successfully reset your password!" -msgstr "Vous avez correctement réinitialisé votre mot de passe !" - -#: core/templates/core/password_reset_done.jinja:4 -msgid "Password reset sent" -msgstr "Réinitialisation de mot de passe envoyée" - -#: core/templates/core/password_reset_done.jinja:7 -msgid "" -"We've emailed you instructions for setting your password, if an account " -"exists with the email you entered. You should\n" -"receive them shortly." -msgstr "" -"Nous vous avons envoyé les instructions pour réinitialiser votre mot de " -"passe par email, si un compte avec l'email entré existe effectivement.\n" -"Vous devriez les recevoir rapidement." - -#: core/templates/core/password_reset_done.jinja:12 -msgid "" -"If you don't receive an email, please make sure you've entered the address " -"you registered with, and check your spam\n" -"folder." -msgstr "" -"Si vous ne recevez pas d'email, assurez-vous d'avoir correctement entré " -"l'adresse email avec laquelle vous vous êtes inscrit, et vérifiez votre " -"dossier de spam." - -#: core/templates/core/password_reset_email.jinja:2 -#, python-format -msgid "" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s." -msgstr "" -"Vous avez reçu cet email parce que vous avez demandé une réinitialisation du " -"mot de passe pour votre compte sur le site %(site_name)s." - -#: core/templates/core/password_reset_email.jinja:8 -msgid "Your username, in case you've forgotten: " -msgstr "Votre nom d'utilisateur, en cas d'oubli :" - -#: core/templates/core/password_reset_email.jinja:10 -msgid "Thanks for using our site! " -msgstr "Merci d'utiliser notre site !" - -#: core/templates/core/password_reset_email.jinja:12 -#, python-format -msgid "The %(site_name)s team" -msgstr "L'équipe de %(site_name)s" - -#: core/templates/core/register.jinja:3 core/templates/core/register.jinja:6 -msgid "Register a user" -msgstr "Enregistrer un utilisateur" - -#: core/templates/core/register.jinja:9 -#, python-format -msgid "Welcome %(user_name)s!" -msgstr "Bienvenue, %(user_name)s!" - -#: core/templates/core/register.jinja:10 -msgid "" -"You successfully registred and you will soon receive a confirmation mail." -msgstr "" -"Vous vous êtes correctement enregistré, et vous devriez recevoir rapidement " -"un email de confirmation." - -#: core/templates/core/register.jinja:12 -#, python-format -msgid "Your username is %(username)s." -msgstr "Votre nom d'utilisateur est %(username)s." - -#: core/templates/core/search.jinja:6 -msgid "Search result" -msgstr "Résultat de la recherche" - -#: core/templates/core/search.jinja:10 -msgid "Users" -msgstr "Utilisateurs" - -#: core/templates/core/search.jinja:18 core/views/user.py:158 -#: counter/templates/counter/stats.jinja:17 -msgid "Clubs" -msgstr "Clubs" - -#: core/templates/core/user_account.jinja:8 -msgid "Year" -msgstr "Année" - -#: core/templates/core/user_account.jinja:9 -msgid "Month" -msgstr "Mois" - -#: core/templates/core/user_account.jinja:32 -#: core/templates/core/user_account_detail.jinja:4 -#, python-format -msgid "%(user_name)s's account" -msgstr "Compte de %(user_name)s" - -#: core/templates/core/user_account.jinja:37 -#: core/templates/core/user_account_detail.jinja:9 -msgid "User account" -msgstr "Compte utilisateur" - -#: core/templates/core/user_account.jinja:42 -#: core/templates/core/user_account_detail.jinja:13 -msgid "Account buyings" -msgstr "Achat sur compte utilisateur" - -#: core/templates/core/user_account.jinja:45 -#: core/templates/core/user_account_detail.jinja:46 -#: counter/templates/counter/cash_summary_list.jinja:17 -#: counter/templates/counter/last_ops.jinja:10 -msgid "Refillings" -msgstr "Rechargements" - -#: core/templates/core/user_account.jinja:49 -#: core/templates/core/user_account_detail.jinja:74 -msgid "Eboutic invoices" -msgstr "Facture eboutic" - -#: core/templates/core/user_account.jinja:53 -#: core/templates/core/user_tools.jinja:33 counter/views.py:478 -msgid "Etickets" -msgstr "Etickets" - -#: core/templates/core/user_account.jinja:64 -#: core/templates/core/user_account_detail.jinja:102 -msgid "User has no account" -msgstr "L'utilisateur n'a pas de compte" - -#: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:154 -msgid "Back" -msgstr "Retour" - -#: core/templates/core/user_account_detail.jinja:79 -msgid "Items" -msgstr "Articles" - -#: core/templates/core/user_clubs.jinja:4 -#, python-format -msgid "%(user_name)s's club(s)" -msgstr "Clubs de %(user_name)s" - -#: core/templates/core/user_clubs.jinja:8 -msgid "Club(s)" -msgstr "Clubs" - -#: core/templates/core/user_clubs.jinja:10 -msgid "Current club(s) :" -msgstr "Clubs actuels : " - -#: core/templates/core/user_clubs.jinja:36 -msgid "Old club(s) :" -msgstr "Anciens clubs :" - -#: core/templates/core/user_detail.jinja:5 -#, python-format -msgid "%(user_name)s's profile" -msgstr "Profil de %(user_name)s" - -#: core/templates/core/user_detail.jinja:33 -msgid "Option: " -msgstr "Filière : " - -#: core/templates/core/user_detail.jinja:68 -msgid "Not subscribed" -msgstr "Non cotisant" - -#: core/templates/core/user_detail.jinja:70 -#: subscription/templates/subscription/subscription.jinja:4 -#: subscription/templates/subscription/subscription.jinja:8 -msgid "New subscription" -msgstr "Nouvelle cotisation" - -#: core/templates/core/user_edit.jinja:4 -msgid "Edit user" -msgstr "Éditer l'utilisateur" - -#: core/templates/core/user_edit.jinja:8 -msgid "Edit user profile" -msgstr "Éditer le profil de l'utilisateur" - -#: core/templates/core/user_edit.jinja:15 -msgid "Current profile: " -msgstr "Profil actuel : " - -#: core/templates/core/user_edit.jinja:25 -msgid "Take picture" -msgstr "Prendre une photo" - -#: core/templates/core/user_edit.jinja:30 -msgid "Current avatar: " -msgstr "Avatar actuel : " - -#: core/templates/core/user_edit.jinja:31 -msgid "Avatar" -msgstr "Avatar" - -#: core/templates/core/user_edit.jinja:33 -msgid "Current scrub: " -msgstr "Blouse actuelle : " - -#: core/templates/core/user_edit.jinja:34 -msgid "Scrub" -msgstr "Blouse" - -#: core/templates/core/user_edit.jinja:38 -msgid "Username: " -msgstr "Nom d'utilisateur : " - -#: core/templates/core/user_edit.jinja:43 -msgid "Change my password" -msgstr "Changer mon mot de passe" - -#: core/templates/core/user_edit.jinja:45 -msgid "Change user password" -msgstr "Changer le mot de passe" - -#: core/templates/core/user_godfathers.jinja:5 -#, python-format -msgid "%(user_name)s's godfathers" -msgstr "Parrains de %(user_name)s" - -#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 -msgid "Godfathers" -msgstr "Parrains" - -#: core/templates/core/user_godfathers.jinja:18 -msgid "No godfathers" -msgstr "Pas de parrains" - -#: core/templates/core/user_godfathers.jinja:21 -msgid "Godchildren" -msgstr "Fillots" - -#: core/templates/core/user_godfathers.jinja:29 -msgid "No godchildren" -msgstr "Pas de fillots" - -#: core/templates/core/user_group.jinja:4 -#, python-format -msgid "Edit user groups for %(user_name)s" -msgstr "Éditer les groupes pour %(user_name)s" - -#: core/templates/core/user_list.jinja:4 core/templates/core/user_list.jinja:8 -msgid "User list" -msgstr "Liste d'utilisateurs" - -#: core/templates/core/user_pictures.jinja:4 -#, python-format -msgid "%(user_name)s's pictures" -msgstr "Photos de %(user_name)s" - -#: core/templates/core/user_stats.jinja:4 -#, python-format -msgid "%(user_name)s's stats" -msgstr "Stats de %(user_name)s" - -#: core/templates/core/user_stats.jinja:9 -msgid "Permanencies" -msgstr "Permanences" - -#: core/templates/core/user_stats.jinja:17 -msgid "Buyings" -msgstr "Achats" - -#: core/templates/core/user_stats.jinja:23 -msgid "Product top 10" -msgstr "Top 10 produits" - -#: core/templates/core/user_tools.jinja:4 -#, python-format -msgid "%(user_name)s's tools" -msgstr "Outils de %(user_name)s" - -#: core/templates/core/user_tools.jinja:8 -msgid "User Tools" -msgstr "Outils utilisateurs" - -#: core/templates/core/user_tools.jinja:11 -msgid "Sith management" -msgstr "Gestion de Sith" - -#: core/templates/core/user_tools.jinja:14 core/views/user.py:164 -msgid "Groups" -msgstr "Groupes" - -#: core/templates/core/user_tools.jinja:15 -#: rootplace/templates/rootplace/merge.jinja:4 -msgid "Merge users" -msgstr "Fusionner deux utilisateurs" - -#: core/templates/core/user_tools.jinja:18 -msgid "Subscriptions" -msgstr "Cotisations" - -#: core/templates/core/user_tools.jinja:24 counter/views.py:448 -#: counter/views.py:597 -msgid "Counters" -msgstr "Comptoirs" - -#: core/templates/core/user_tools.jinja:27 -msgid "General management" -msgstr "Gestion générale" - -#: core/templates/core/user_tools.jinja:28 -msgid "General counters management" -msgstr "Gestion générale des comptoirs" - -#: core/templates/core/user_tools.jinja:29 -msgid "Products management" -msgstr "Gestion des produits" - -#: core/templates/core/user_tools.jinja:30 -msgid "Product types management" -msgstr "Gestion des types de produit" - -#: core/templates/core/user_tools.jinja:31 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:468 -msgid "Cash register summaries" -msgstr "Relevés de caisse" - -#: core/templates/core/user_tools.jinja:32 -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:473 -msgid "Invoices call" -msgstr "Appels à facture" - -#: core/templates/core/user_tools.jinja:39 core/views/user.py:174 -#: counter/templates/counter/counter_list.jinja:18 -#: counter/templates/counter/counter_list.jinja:33 -#: counter/templates/counter/counter_list.jinja:48 -msgid "Stats" -msgstr "Stats" - -#: core/templates/core/user_tools.jinja:48 -msgid "Refound Account" -msgstr "Rembourser un compte" - -#: core/templates/core/user_tools.jinja:49 -msgid "General accounting" -msgstr "Comptabilité générale" - -#: core/templates/core/user_tools.jinja:59 -msgid "Club account: " -msgstr "Compte club : " - -#: core/templates/core/user_tools.jinja:66 -msgid "Communication" -msgstr "Communication" - -#: core/templates/core/user_tools.jinja:69 -msgid "Moderate news" -msgstr "Modérer les nouvelles" - -#: core/templates/core/user_tools.jinja:70 -msgid "Edit index page" -msgstr "Éditer la page d'accueil" - -#: core/templates/core/user_tools.jinja:71 -msgid "Edit alert message" -msgstr "Éditer le message d'alerte" - -#: core/templates/core/user_tools.jinja:72 -msgid "Edit information message" -msgstr "Éditer le message d'informations" - -#: core/templates/core/user_tools.jinja:73 -msgid "Moderate files" -msgstr "Modérer les fichiers" - -#: core/templates/core/user_tools.jinja:76 -msgid "Moderate pictures" -msgstr "Modérer les photos" - -#: core/templates/core/user_tools.jinja:89 -msgid "Elections" -msgstr "Élections" - -#: core/templates/core/user_tools.jinja:91 -msgid "See available elections" -msgstr "Voir les élections disponibles" - -#: core/templates/core/user_tools.jinja:93 -msgid "Create a new election" -msgstr "Créer une nouvelle élection" - -#: core/views/files.py:49 -msgid "Add a new folder" -msgstr "Ajouter un nouveau dossier" - -#: core/views/files.py:62 -#, python-format -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:72 core/views/forms.py:181 core/views/forms.py:185 -#: sas/views.py:52 -#, python-format -msgid "Error uploading file %(file_name)s: %(msg)s" -msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s" - -#: core/views/forms.py:59 core/views/forms.py:62 -msgid "Choose file" -msgstr "Choisir un fichier" - -#: core/views/forms.py:73 core/views/forms.py:76 -msgid "Choose user" -msgstr "Choisir un utilisateur" - -#: core/views/forms.py:98 -msgid "Username, email, or account number" -msgstr "Nom d'utilisateur, email, ou numéro de compte AE" - -#: core/views/forms.py:140 -msgid "" -"Profile: you need to be visible on the picture, in order to be recognized (e." -"g. by the barmen)" -msgstr "" -"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " -"(par exemple par les barmen)" - -#: core/views/forms.py:141 -msgid "Avatar: used on the forum" -msgstr "Avatar : utilisé sur le forum" - -#: core/views/forms.py:142 -msgid "Scrub: let other know how your scrub looks like!" -msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" - -#: core/views/forms.py:186 -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" - -#: core/views/forms.py:203 -msgid "Godfather" -msgstr "Parrain" - -#: core/views/forms.py:203 -msgid "Godchild" -msgstr "Fillot" - -#: core/views/user.py:140 -msgid "Pictures" -msgstr "Photos" - -#: core/views/user.py:312 -msgid "User already has a profile picture" -msgstr "L'utilisateur a déjà une photo de profil" - -#: counter/models.py:27 -msgid "account id" -msgstr "numéro de compte" - -#: counter/models.py:31 -msgid "customer" -msgstr "client" - -#: counter/models.py:32 -msgid "customers" -msgstr "clients" - -#: counter/models.py:47 counter/templates/counter/counter_click.jinja:48 -#: counter/templates/counter/counter_click.jinja:82 -msgid "Not enough money" -msgstr "Solde insuffisant" - -#: counter/models.py:75 counter/models.py:97 -msgid "product type" -msgstr "type du produit" - -#: counter/models.py:100 -msgid "purchase price" -msgstr "prix d'achat" - -#: counter/models.py:101 -msgid "selling price" -msgstr "prix de vente" - -#: counter/models.py:102 -msgid "special selling price" -msgstr "prix de vente spécial" - -#: counter/models.py:103 -msgid "icon" -msgstr "icône" - -#: counter/models.py:105 -msgid "limit age" -msgstr "âge limite" - -#: counter/models.py:106 -msgid "tray price" -msgstr "prix plateau" - -#: counter/models.py:107 -msgid "parent product" -msgstr "produit parent" - -#: counter/models.py:109 -msgid "buying groups" -msgstr "groupe d'achat" - -#: counter/models.py:110 -msgid "archived" -msgstr "archivé" - -#: counter/models.py:113 counter/models.py:497 -msgid "product" -msgstr "produit" - -#: counter/models.py:132 -msgid "products" -msgstr "produits" - -#: counter/models.py:133 -msgid "counter type" -msgstr "type de comptoir" - -#: counter/models.py:135 -msgid "Bar" -msgstr "Bar" - -#: counter/models.py:135 -msgid "Office" -msgstr "Bureau" - -#: counter/models.py:135 counter/templates/counter/counter_list.jinja:11 -#: eboutic/templates/eboutic/eboutic_main.jinja:4 -#: 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:296 sith/settings.py:304 -msgid "Eboutic" -msgstr "Eboutic" - -#: counter/models.py:136 -msgid "sellers" -msgstr "vendeurs" - -#: counter/models.py:139 launderette/models.py:123 -msgid "token" -msgstr "jeton" - -#: counter/models.py:142 counter/models.py:398 counter/models.py:415 -#: launderette/models.py:14 -msgid "counter" -msgstr "comptoir" - -#: counter/models.py:245 -msgid "bank" -msgstr "banque" - -#: counter/models.py:247 counter/models.py:293 -msgid "is validated" -msgstr "est validé" - -#: counter/models.py:250 -msgid "refilling" -msgstr "rechargement" - -#: counter/models.py:286 eboutic/models.py:103 -msgid "unit price" -msgstr "prix unitaire" - -#: counter/models.py:287 counter/models.py:487 eboutic/models.py:104 -msgid "quantity" -msgstr "quantité" - -#: counter/models.py:292 -msgid "Sith account" -msgstr "Compte utilisateur" - -#: counter/models.py:292 sith/settings.py:289 sith/settings.py:294 -#: sith/settings.py:316 -msgid "Credit card" -msgstr "Carte bancaire" - -#: counter/models.py:296 -msgid "selling" -msgstr "vente" - -#: counter/models.py:315 -msgid "Unknown event" -msgstr "Événement inconnu" - -#: counter/models.py:316 -#, python-format -msgid "Eticket bought for the event %(event)s" -msgstr "Eticket acheté pour l'événement %(event)s" - -#: counter/models.py:318 counter/models.py:330 -#, python-format -msgid "" -"You bought an eticket for the event %(event)s.\n" -"You can download it on this page %(url)s." -msgstr "" -"Vous avez acheté un Eticket pour l'événement %(event)s.\n" -"Vous pouvez le télécharger sur cette page: %(url)s" - -#: counter/models.py:401 -msgid "last activity date" -msgstr "dernière activité" - -#: counter/models.py:404 -msgid "permanency" -msgstr "permanence" - -#: counter/models.py:418 -msgid "emptied" -msgstr "coffre vidée" - -#: counter/models.py:421 -msgid "cash register summary" -msgstr "relevé de caisse" - -#: counter/models.py:485 -msgid "cash summary" -msgstr "relevé" - -#: counter/models.py:486 -msgid "value" -msgstr "valeur" - -#: counter/models.py:488 -msgid "check" -msgstr "chèque" - -#: counter/models.py:491 -msgid "cash register summary item" -msgstr "élément de relevé de caisse" - -#: counter/models.py:498 -msgid "banner" -msgstr "bannière" - -#: counter/models.py:499 -msgid "event date" -msgstr "date de l'événement" - -#: counter/models.py:500 -msgid "event title" -msgstr "titre de l'événement" - -#: counter/models.py:501 -msgid "secret" -msgstr "secret" - -#: counter/templates/counter/activity.jinja:5 -#: counter/templates/counter/activity.jinja:9 -#, python-format -msgid "%(counter_name)s activity" -msgstr "Activité sur %(counter_name)s" - -#: counter/templates/counter/activity.jinja:11 -msgid "Barmen list" -msgstr "Barmans" - -#: counter/templates/counter/activity.jinja:19 -msgid "Legend" -msgstr "Légende" - -#: counter/templates/counter/activity.jinja:20 -msgid "counter is open, there's at least one barman connected" -msgstr "Le comptoir est ouvert, et il y a au moins un barman connecté" - -#: counter/templates/counter/activity.jinja:22 -#, python-format -msgid "" -"counter is open but not active, the last sale was done at least %(minutes)s " -"minutes ago " -msgstr "" -"Le comptoir est ouvert, mais inactif. La dernière vente a eu lieu il y a " -"%(minutes)s minutes." - -#: counter/templates/counter/activity.jinja:24 -msgid "counter is not open : no one is connected" -msgstr "Le comptoir est fermé" - -#: counter/templates/counter/cash_register_summary.jinja:8 -msgid "Make a cash register summary" -msgstr "Faire un relevé de caisse" - -#: counter/templates/counter/cash_summary_list.jinja:5 -#: counter/templates/counter/cash_summary_list.jinja:10 -msgid "Cash register summary list" -msgstr "Liste des relevés de caisse" - -#: counter/templates/counter/cash_summary_list.jinja:11 -msgid "Theoric sums" -msgstr "Sommes théoriques" - -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:711 -msgid "Emptied" -msgstr "Coffre vidé" - -#: counter/templates/counter/cash_summary_list.jinja:48 -msgid "yes" -msgstr "oui" - -#: counter/templates/counter/cash_summary_list.jinja:59 -msgid "There is no cash register summary in this website." -msgstr "Il n'y a pas de relevé de caisse dans ce site web." - -#: counter/templates/counter/counter_click.jinja:35 -#: launderette/templates/launderette/launderette_admin.jinja:8 -msgid "Selling" -msgstr "Vente" - -#: counter/templates/counter/counter_click.jinja:39 -#: counter/templates/counter/counter_click.jinja:73 -msgid "Too young for that product" -msgstr "Trop jeune pour ce produit" - -#: counter/templates/counter/counter_click.jinja:42 -#: counter/templates/counter/counter_click.jinja:76 -msgid "Not allowed for that product" -msgstr "Non autorisé pour ce produit" - -#: counter/templates/counter/counter_click.jinja:45 -#: counter/templates/counter/counter_click.jinja:79 -msgid "No date of birth provided" -msgstr "Pas de date de naissance renseignée" - -#: counter/templates/counter/counter_click.jinja:55 -#: counter/templates/counter/counter_click.jinja:103 -#: counter/templates/counter/invoices_call.jinja:16 -#: launderette/templates/launderette/launderette_admin.jinja:35 -#: launderette/templates/launderette/launderette_click.jinja:13 -#: sas/templates/sas/picture.jinja:74 -msgid "Go" -msgstr "Valider" - -#: counter/templates/counter/counter_click.jinja:57 -#: eboutic/templates/eboutic/eboutic_main.jinja:27 -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 -msgid "Basket: " -msgstr "Panier : " - -#: counter/templates/counter/counter_click.jinja:88 -msgid "Finish" -msgstr "Terminer" - -#: counter/templates/counter/counter_click.jinja:97 -msgid "Refilling" -msgstr "Rechargement" - -#: counter/templates/counter/counter_list.jinja:4 -#: counter/templates/counter/counter_list.jinja:10 -msgid "Counter admin list" -msgstr "Liste des comptoirs" - -#: counter/templates/counter/counter_list.jinja:8 -msgid "New counter" -msgstr "Nouveau comptoir" - -#: counter/templates/counter/counter_list.jinja:26 -msgid "Bars" -msgstr "Bars" - -#: counter/templates/counter/counter_list.jinja:41 -msgid "Offices" -msgstr "Bureaux" - -#: counter/templates/counter/counter_list.jinja:57 -msgid "There is no counters in this website." -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:16 -#: launderette/templates/launderette/launderette_click.jinja:8 -#, python-format -msgid "%(counter_name)s counter" -msgstr "Comptoir %(counter_name)s" - -#: counter/templates/counter/counter_main.jinja:21 -msgid "Last selling: " -msgstr "Dernière vente : " - -#: counter/templates/counter/counter_main.jinja:22 -msgid "Client: " -msgstr "Client : " - -#: counter/templates/counter/counter_main.jinja:22 -msgid "New amount: " -msgstr "Nouveau montant : " - -#: counter/templates/counter/counter_main.jinja:31 -msgid "Enter client code:" -msgstr "Entrez un code client : " - -#: counter/templates/counter/counter_main.jinja:36 -msgid "validate" -msgstr "valider" - -#: counter/templates/counter/counter_main.jinja:39 -msgid "Please, login" -msgstr "Merci de vous identifier" - -#: counter/templates/counter/counter_main.jinja:44 -msgid "Barman: " -msgstr "Barman : " - -#: counter/templates/counter/eticket_list.jinja:4 -#: counter/templates/counter/eticket_list.jinja:10 -msgid "Eticket list" -msgstr "Liste des etickets" - -#: counter/templates/counter/eticket_list.jinja:8 -msgid "New eticket" -msgstr "Nouveau eticket" - -#: counter/templates/counter/eticket_list.jinja:17 -msgid "There is no eticket in this website." -msgstr "Il n'y a pas de eticket sur ce site web." - -#: counter/templates/counter/invoices_call.jinja:8 -#, python-format -msgid "Invoices call for %(date)s" -msgstr "Appels à facture pour %(date)s" - -#: counter/templates/counter/invoices_call.jinja:9 -msgid "Choose another month: " -msgstr "Choisir un autre mois : " - -#: counter/templates/counter/last_ops.jinja:5 -#: counter/templates/counter/last_ops.jinja:9 -#, python-format -msgid "%(counter_name)s last operations" -msgstr "Dernières opérations sur %(counter_name)s" - -#: counter/templates/counter/product_list.jinja:4 -#: counter/templates/counter/product_list.jinja:12 -msgid "Product list" -msgstr "Liste des produits" - -#: counter/templates/counter/product_list.jinja:9 -msgid "New product" -msgstr "Nouveau produit" - -#: counter/templates/counter/product_list.jinja:21 -msgid "Uncategorized" -msgstr "Sans catégorie" - -#: counter/templates/counter/product_list.jinja:28 -msgid "There is no products in this website." -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:10 -msgid "Product type list" -msgstr "Liste des types de produit" - -#: counter/templates/counter/producttype_list.jinja:8 -msgid "New product type" -msgstr "Nouveau type de produit" - -#: counter/templates/counter/producttype_list.jinja:17 -msgid "There is no product types in this website." -msgstr "Il n'y a pas de types de produit dans ce site web." - -#: counter/templates/counter/stats.jinja:5 -#: counter/templates/counter/stats.jinja:9 -#, python-format -msgid "%(counter_name)s stats" -msgstr "Stats sur %(counter_name)s" - -#: counter/templates/counter/stats.jinja:10 -#, python-format -msgid "Top 100 %(counter_name)s" -msgstr "Top 100 %(counter_name)s" - -#: counter/templates/counter/stats.jinja:16 -msgid "Promo" -msgstr "Promo" - -#: counter/templates/counter/stats.jinja:19 -msgid "Percentage" -msgstr "Pourcentage" - -#: counter/views.py:54 -msgid "User not found" -msgstr "Utilisateur non trouvé" - -#: counter/views.py:83 -msgid "Cash summary" -msgstr "Relevé de caisse" - -#: counter/views.py:88 -msgid "Last operations" -msgstr "Dernières opérations" - -#: counter/views.py:122 -msgid "Bad credentials" -msgstr "Mauvais identifiants" - -#: counter/views.py:124 -msgid "User is not barman" -msgstr "L'utilisateur n'est pas barman." - -#: counter/views.py:128 -msgid "Bad location, someone is already logged in somewhere else" -msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" - -#: counter/views.py:318 -msgid "END" -msgstr "FIN" - -#: counter/views.py:320 -msgid "CAN" -msgstr "ANN" - -#: counter/views.py:350 -msgid "You have not enough money to buy all the basket" -msgstr "Vous n'avez pas assez d'argent pour acheter le panier" - -#: counter/views.py:443 -msgid "Counter administration" -msgstr "Administration des comptoirs" - -#: counter/views.py:453 -msgid "Products" -msgstr "Produits" - -#: counter/views.py:458 -msgid "Archived products" -msgstr "Produits archivés" - -#: counter/views.py:463 -msgid "Product types" -msgstr "Types de produit" - -#: counter/views.py:594 -msgid "Parent product" -msgstr "Produit parent" - -#: counter/views.py:595 -msgid "Buying groups" -msgstr "Groupes d'achat" - -#: counter/views.py:690 -msgid "10 cents" -msgstr "10 centimes" - -#: counter/views.py:691 -msgid "20 cents" -msgstr "20 centimes" - -#: counter/views.py:692 -msgid "50 cents" -msgstr "50 centimes" - -#: counter/views.py:693 -msgid "1 euro" -msgstr "1 €" - -#: counter/views.py:694 -msgid "2 euros" -msgstr "2 €" - -#: counter/views.py:695 -msgid "5 euros" -msgstr "5 €" - -#: counter/views.py:696 -msgid "10 euros" -msgstr "10 €" - -#: counter/views.py:697 -msgid "20 euros" -msgstr "20 €" - -#: counter/views.py:698 -msgid "50 euros" -msgstr "50 €" - -#: counter/views.py:699 -msgid "100 euros" -msgstr "100 €" - -#: counter/views.py:700 counter/views.py:702 counter/views.py:704 -#: counter/views.py:706 counter/views.py:708 -msgid "Check amount" -msgstr "Montant du chèque" - -#: counter/views.py:701 counter/views.py:703 counter/views.py:705 -#: counter/views.py:707 counter/views.py:709 -msgid "Check quantity" -msgstr "Nombre de chèque" - -#: counter/views.py:1060 -msgid "people(s)" -msgstr "personne(s)" - -#: eboutic/models.py:49 -msgid "validated" -msgstr "validé" - -#: eboutic/models.py:62 -msgid "Invoice already validated" -msgstr "Facture déjà validée" - -#: eboutic/models.py:100 -msgid "product id" -msgstr "ID du produit" - -#: eboutic/models.py:101 -msgid "product name" -msgstr "nom du produit" - -#: eboutic/models.py:102 -msgid "product type id" -msgstr "id du type du produit" - -#: eboutic/models.py:113 -msgid "basket" -msgstr "panier" - -#: eboutic/templates/eboutic/eboutic_main.jinja:37 -msgid "Proceed to command" -msgstr "Procéder à la commande" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4 -msgid "Basket state" -msgstr "État du panier" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:35 -msgid "Pay with credit card" -msgstr "Payer avec une carte bancaire" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:38 -msgid "" -"AE account payment disabled because your basket contains refilling items." -msgstr "" -"Paiement par compte AE désactivé parce que votre panier contient des bons de " -"rechargement." - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:43 -msgid "Pay with Sith account" -msgstr "Payer avec un compte AE" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:8 -msgid "Payment failed" -msgstr "Le paiement a échoué" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:10 -msgid "Payment successful" -msgstr "Le paiement a été effectué" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:12 -msgid "Return to eboutic" -msgstr "Retourner à l'eboutic" - -#: eboutic/views.py:143 -msgid "You do not have enough money to buy the basket" -msgstr "Vous n'avez pas assez d'argent pour acheter le panier" - -#: election/models.py:16 -msgid "start candidature" -msgstr "début des candidatures" - -#: election/models.py:17 -msgid "end candidature" -msgstr "fin des candidatures" - -#: election/models.py:21 -msgid "edit groups" -msgstr "groupe d'édition" - -#: election/models.py:22 -msgid "view groups" -msgstr "groupe de vue" - -#: election/models.py:23 -msgid "vote groups" -msgstr "groupe de vote" - -#: election/models.py:24 -msgid "candidature groups" -msgstr "groupe de candidature" - -#: election/models.py:80 election/models.py:115 -msgid "election" -msgstr "élection" - -#: election/models.py:83 -msgid "max choice" -msgstr "nombre de choix maxi" - -#: election/models.py:128 -msgid "election list" -msgstr "liste électorale" - -#: election/models.py:142 -msgid "candidature" -msgstr "candidature" - -#: election/templates/election/candidate_form.jinja:4 -#: election/templates/election/candidate_form.jinja:13 -#: election/templates/election/election_detail.jinja:363 -msgid "Candidate" -msgstr "Candidater" - -#: election/templates/election/candidate_form.jinja:17 -msgid "Candidature are closed for this election" -msgstr "Les candidatures sont fermées pour cette élection" - -#: election/templates/election/election_detail.jinja:237 -msgid "Polls close " -msgstr "Votes fermés" - -#: election/templates/election/election_detail.jinja:239 -msgid "Polls closed " -msgstr "Votes fermés" - -#: election/templates/election/election_detail.jinja:241 -msgid "Polls will open " -msgstr "Les votes ouvriront " - -#: election/templates/election/election_detail.jinja:243 -#: election/templates/election/election_detail.jinja:247 -#: election/templates/election/election_list.jinja:31 -#: election/templates/election/election_list.jinja:34 -#: election/templates/election/election_list.jinja:39 -#: election/templates/election/election_list.jinja:42 -msgid " at " -msgstr " à " - -#: election/templates/election/election_detail.jinja:244 -msgid "and will close " -msgstr "et fermeront" - -#: election/templates/election/election_detail.jinja:252 -msgid "You already have submitted your vote." -msgstr "Vous avez déjà soumis votre vote." - -#: election/templates/election/election_detail.jinja:254 -msgid "You have voted in this election." -msgstr "Vous avez déjà voté pour cette élection." - -#: election/templates/election/election_detail.jinja:266 election/views.py:82 -msgid "Blank vote" -msgstr "Vote blanc" - -#: election/templates/election/election_detail.jinja:283 -msgid "You may choose up to" -msgstr "Vous pouvez choisir jusqu'à" - -#: election/templates/election/election_detail.jinja:283 -msgid "people." -msgstr "personne(s)" - -#: election/templates/election/election_detail.jinja:297 -msgid "Choose blank vote" -msgstr "Choisir de voter blanc" - -#: election/templates/election/election_detail.jinja:304 -#: election/templates/election/election_detail.jinja:342 -msgid "votes" -msgstr "votes" - -#: election/templates/election/election_detail.jinja:335 -#: launderette/templates/launderette/launderette_book.jinja:12 -msgid "Choose" -msgstr "Choisir" - -#: election/templates/election/election_detail.jinja:358 -msgid "Submit the vote !" -msgstr "Envoyer le vote !" - -#: election/templates/election/election_detail.jinja:365 -msgid "Add a new list" -msgstr "Ajouter une nouvelle liste" - -#: election/templates/election/election_detail.jinja:368 -msgid "Add a new role" -msgstr "Ajouter un nouveau rôle" - -#: election/templates/election/election_list.jinja:4 -msgid "Election list" -msgstr "Liste des élections" - -#: election/templates/election/election_list.jinja:21 -msgid "Current elections" -msgstr "Élections actuelles" - -#: election/templates/election/election_list.jinja:29 -msgid "Applications open from" -msgstr "Candidatures ouvertes à partir du" - -#: election/templates/election/election_list.jinja:32 -#: election/templates/election/election_list.jinja:40 -msgid "to" -msgstr "au" - -#: election/templates/election/election_list.jinja:37 -msgid "Polls open from" -msgstr "Votes ouverts du" - -#: election/views.py:44 -msgid "You have selected too much candidates." -msgstr "Vous avez sélectionné trop de candidats." - -#: election/views.py:59 -msgid "User to candidate" -msgstr "Utilisateur se présentant" - -#: election/views.py:102 -msgid "This role already exists for this election" -msgstr "Ce rôle existe déjà pour cette élection" - -#: election/views.py:132 -msgid "Start candidature" -msgstr "Début des candidatures" - -#: election/views.py:133 -msgid "End candidature" -msgstr "Fin des candidatures" - -#: launderette/models.py:17 -#: launderette/templates/launderette/launderette_book.jinja:5 -#: launderette/templates/launderette/launderette_book_choose.jinja:4 -#: launderette/templates/launderette/launderette_main.jinja:4 -msgid "Launderette" -msgstr "Laverie" - -#: launderette/models.py:59 launderette/models.py:84 -msgid "launderette" -msgstr "laverie" - -#: launderette/models.py:61 -msgid "is working" -msgstr "fonctionne" - -#: launderette/models.py:64 -msgid "Machine" -msgstr "Machine" - -#: launderette/models.py:86 -msgid "borrow date" -msgstr "date d'emprunt" - -#: launderette/models.py:90 -msgid "Token" -msgstr "Jeton" - -#: launderette/models.py:96 -msgid "Token name can not be blank" -msgstr "Le nom du jeton ne peut pas être vide" - -#: launderette/models.py:122 -msgid "machine" -msgstr "machine" - -#: launderette/templates/launderette/launderette_admin.jinja:4 -msgid "Launderette admin" -msgstr "Gestion de la laverie" - -#: launderette/templates/launderette/launderette_admin.jinja:9 -msgid "Sell" -msgstr "Vendre" - -#: launderette/templates/launderette/launderette_admin.jinja:11 -msgid "Machines" -msgstr "Machines" - -#: launderette/templates/launderette/launderette_admin.jinja:12 -msgid "New machine" -msgstr "Nouvelle machine" - -#: launderette/templates/launderette/launderette_book.jinja:23 -msgid "Washing and drying" -msgstr "Lavage et séchage" - -#: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:437 -msgid "Washing" -msgstr "Lavage" - -#: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:437 -msgid "Drying" -msgstr "Séchage" - -#: launderette/templates/launderette/launderette_list.jinja:4 -#: launderette/templates/launderette/launderette_list.jinja:12 -msgid "Launderette admin list" -msgstr "Liste des laveries" - -#: launderette/templates/launderette/launderette_list.jinja:9 -msgid "New launderette" -msgstr "Nouvelle laverie" - -#: launderette/templates/launderette/launderette_list.jinja:20 -msgid "There is no launderette in this website." -msgstr "Il n'y a pas de laverie dans ce site web." - -#: launderette/templates/launderette/launderette_main.jinja:9 -msgid "Edit presentation page" -msgstr "Éditer la page de présentation" - -#: launderette/templates/launderette/launderette_main.jinja:12 -msgid "Book launderette slot" -msgstr "Réserver un créneau de laverie" - -#: launderette/views.py:155 -msgid "Action" -msgstr "Action" - -#: launderette/views.py:158 -msgid "Tokens, separated by spaces" -msgstr "Jetons, séparés par des espaces" - -#: launderette/views.py:173 launderette/views.py:187 -#, python-format -msgid "Token %(token_name)s does not exists" -msgstr "Le jeton %(token_name)s n'existe pas" - -#: launderette/views.py:181 -#, python-format -msgid "Token %(token_name)s already exists" -msgstr "Un jeton %(token_name)s existe déjà" - -#: launderette/views.py:237 -msgid "User has booked no slot" -msgstr "L'utilisateur n'a pas réservé de créneau" - -#: launderette/views.py:327 -msgid "Token not found" -msgstr "Jeton non trouvé" - -#: rootplace/templates/rootplace/merge.jinja:8 -msgid "Merge two users" -msgstr "Fusionner deux utilisateurs" - -#: rootplace/templates/rootplace/merge.jinja:12 -msgid "Merge" -msgstr "Fusion" - -#: rootplace/views.py:65 -msgid "User that will be kept" -msgstr "Utilisateur qui sera conservé" - -#: rootplace/views.py:66 -msgid "User that will be deleted" -msgstr "Utilisateur qui sera supprimé" - -#: sas/models.py:132 -msgid "picture" -msgstr "photo" - -#: sas/templates/sas/album.jinja:52 sas/templates/sas/album.jinja.py:54 -#: sas/templates/sas/main.jinja:17 sas/templates/sas/main.jinja.py:19 -#: sas/templates/sas/main.jinja:21 -msgid "preview" -msgstr "miniature" - -#: sas/templates/sas/album.jinja:86 -msgid "Upload" -msgstr "Envoyer" - -#: sas/templates/sas/main.jinja:41 -msgid "Create" -msgstr "Créer" - -#: sas/templates/sas/moderation.jinja:4 sas/templates/sas/moderation.jinja:8 -msgid "SAS moderation" -msgstr "Modération du SAS" - -#: sas/templates/sas/moderation.jinja:10 -msgid "Albums" -msgstr "Albums" - -#: sas/templates/sas/picture.jinja:60 -msgid "People" -msgstr "Personne(s)" - -#: sas/templates/sas/picture.jinja:89 -msgid "HD version" -msgstr "Version HD" - -#: sas/templates/sas/picture.jinja:93 -msgid "Rotate left" -msgstr "Tourner vers la gauche" - -#: sas/templates/sas/picture.jinja:94 -msgid "Rotate right" -msgstr "Tourner vers la droite" - -#: sas/templates/sas/picture.jinja:95 -msgid "Ask for removal" -msgstr "Demander le retrait" - -#: sas/templates/sas/picture.jinja:111 -msgid "Asked for removal" -msgstr "Retrait demandé" - -#: sas/views.py:26 -msgid "Add a new album" -msgstr "Ajouter un nouvel album" - -#: sas/views.py:27 -msgid "Upload images" -msgstr "Envoyer les images" - -#: sas/views.py:39 -#, python-format -msgid "Error creating album %(album)s: %(msg)s" -msgstr "Erreur de création de l'album %(album)s : %(msg)s" - -#: sas/views.py:63 -msgid "Add user" -msgstr "Ajouter une personne" - -#: sas/views.py:236 -msgid "Apply rights recursively" -msgstr "Appliquer les droits récursivement" - -#: sith/settings.py:176 -msgid "English" -msgstr "Anglais" - -#: sith/settings.py:177 -msgid "French" -msgstr "Français" - -#: sith/settings.py:286 sith/settings.py:293 sith/settings.py:314 -msgid "Check" -msgstr "Chèque" - -#: sith/settings.py:287 sith/settings.py:295 sith/settings.py:315 -msgid "Cash" -msgstr "Espèces" - -#: sith/settings.py:288 -msgid "Transfert" -msgstr "Virement" - -#: sith/settings.py:301 -msgid "Belfort" -msgstr "Belfort" - -#: sith/settings.py:302 -msgid "Sevenans" -msgstr "Sevenans" - -#: sith/settings.py:303 -msgid "Montbéliard" -msgstr "Montbéliard" - -#: sith/settings.py:344 -msgid "One semester" -msgstr "Un semestre, 15 €" - -#: sith/settings.py:349 -msgid "Two semesters" -msgstr "Deux semestres, 28 €" - -#: sith/settings.py:354 -msgid "Common core cursus" -msgstr "Cursus tronc commun, 45 €" - -#: sith/settings.py:359 -msgid "Branch cursus" -msgstr "Cursus branche, 45 €" - -#: sith/settings.py:364 -msgid "Alternating cursus" -msgstr "Cursus alternant, 30 €" - -#: sith/settings.py:369 -msgid "Honorary member" -msgstr "Membre honoraire, 0 €" - -#: sith/settings.py:374 -msgid "Assidu member" -msgstr "Membre d'Assidu, 0 €" - -#: sith/settings.py:379 -msgid "Amicale/DOCEO member" -msgstr "Membre de l'Amicale/DOCEO, 0 €" - -#: sith/settings.py:384 -msgid "UT network member" -msgstr "Cotisant du réseau UT, 0 €" - -#: sith/settings.py:389 -msgid "CROUS member" -msgstr "Membres du CROUS, 0 €" - -#: sith/settings.py:394 -msgid "Sbarro/ESTA member" -msgstr "Membre de Sbarro ou de l'ESTA, 15 €" - -#: sith/settings.py:402 -msgid "President" -msgstr "Président" - -#: sith/settings.py:403 -msgid "Vice-President" -msgstr "Vice-Président" - -#: sith/settings.py:404 -msgid "Treasurer" -msgstr "Trésorier" - -#: sith/settings.py:405 -msgid "Communication supervisor" -msgstr "Responsable com" - -#: sith/settings.py:406 -msgid "Secretary" -msgstr "Secrétaire" - -#: sith/settings.py:407 -msgid "IT supervisor" -msgstr "Responsable info" - -#: sith/settings.py:408 -msgid "Board member" -msgstr "Membre du bureau" - -#: sith/settings.py:409 -msgid "Active member" -msgstr "Membre actif" - -#: sith/settings.py:410 -msgid "Curious" -msgstr "Curieux" - -#: sith/settings.py:444 -msgid "A fresh new to be moderated" -msgstr "Une nouvelle toute neuve à modérer" - -#: sith/settings.py:445 -msgid "New files to be moderated" -msgstr "Nouveaux fichiers à modérer" - -#: sith/settings.py:446 -msgid "New pictures/album to be moderated in the SAS" -msgstr "Nouvelles photos/albums à modérer dans le SAS" - -#: sith/settings.py:447 -msgid "You've been identified on some pictures" -msgstr "Vous avez été identifié sur des photos" - -#: sith/settings.py:448 -#, python-format -msgid "You just refilled of %s €" -msgstr "Vous avez rechargé votre compte de %s €" - -#: sith/settings.py:449 -#, python-format -msgid "You just bought %s" -msgstr "Vous avez acheté %s" - -#: sith/settings.py:450 -msgid "You have a notification" -msgstr "Vous avez une notification" - -#: subscription/models.py:16 -msgid "Bad subscription type" -msgstr "Mauvais type de cotisation" - -#: subscription/models.py:20 -msgid "Bad payment method" -msgstr "Mauvais type de paiement" - -#: subscription/models.py:24 -msgid "subscription type" -msgstr "type d'inscription" - -#: subscription/models.py:27 -msgid "subscription start" -msgstr "début de la cotisation" - -#: subscription/models.py:28 -msgid "subscription end" -msgstr "fin de la cotisation" - -#: subscription/models.py:31 -msgid "location" -msgstr "lieu" - -#: subscription/models.py:40 -msgid "You can not subscribe many time for the same period" -msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" - -#: subscription/models.py:44 -msgid "Subscription error" -msgstr "Erreur de cotisation" - -#: subscription/views.py:50 -msgid "A user with that email address already exists" -msgstr "Un utilisateur avec cette adresse email existe déjà" - -#: subscription/views.py:66 -msgid "You must either choose an existing user or create a new one properly" -msgstr "" -"Vous devez soit choisir un utilisateur existant, soit en créer un proprement" From 887893fb2df2c182cca5fbefa0d78104ac24446c Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 9 Nov 2016 17:49:19 +0100 Subject: [PATCH 06/27] Creation of the Stock list, edit, create views and creation StockItem create view --- counter/templates/counter/counter_list.jinja | 12 +- counter/views.py | 5 + locale/fr/LC_MESSAGES/django.mo | Bin 37453 -> 37333 bytes locale/fr/LC_MESSAGES/django.po | 2862 ++++++++++++++++++ stock/models.py | 5 + stock/templates/stock/stock_list.jinja | 23 + stock/templates/stock/stock_main.jinja | 2 +- stock/urls.py | 2 + stock/views.py | 75 +- 9 files changed, 2972 insertions(+), 14 deletions(-) create mode 100644 locale/fr/LC_MESSAGES/django.po create mode 100644 stock/templates/stock/stock_list.jinja diff --git a/counter/templates/counter/counter_list.jinja b/counter/templates/counter/counter_list.jinja index 68c33cbf..0dc72d1f 100644 --- a/counter/templates/counter/counter_list.jinja +++ b/counter/templates/counter/counter_list.jinja @@ -31,14 +31,14 @@ {% if user.can_edit(c) %} {% trans %}Edit{% endtrans %} - {% trans %}Stats{% endtrans %} - + {%if c.stock %} + Stock - + {% else %} + {% trans %}Create new stock{% endtrans%} - + {% endif %} {% endif %} {% if user.is_owner(c) %} - {% trans %}Props{% endtrans %} - - {%if c.stock %} - {{c.stock}} - {% else %} - {% trans %}Create new stock{% endtrans%} - {% endif %} + {% trans %}Props{% endtrans %} {% endif %} {% endfor %} diff --git a/counter/views.py b/counter/views.py index de6b0da6..00edd36d 100644 --- a/counter/views.py +++ b/counter/views.py @@ -443,6 +443,11 @@ class CounterLogout(RedirectView): class CounterAdminTabsMixin(TabedViewMixin): tabs_title = _("Counter administration") list_of_tabs = [ + { + 'url': reverse_lazy('stock:list'), + 'slug': 'stocks', + 'name': _("Stocks"), + }, { 'url': reverse_lazy('counter:admin_list'), 'slug': 'counters', diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 896b8e1ebbb385c7c163b83f8bd0ff78c8593731..bf842ded9f53e6cbb8fd2ad6dc6ee0aec1eb11ea 100644 GIT binary patch delta 12763 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 F{};~MR1g3F delta 12960 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 BlA{0s diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 00000000..27709b3a --- /dev/null +++ b/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,2862 @@ +# Sith AE french translation file +# Copyright (C) 2016 +# This file is distributed under the same license as the Sith package. +# Skia , 2016 +# +msgid "" +msgstr "" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-09 17:43+0100\n" +"PO-Revision-Date: 2016-07-18\n" +"Last-Translator: Skia \n" +"Language-Team: AE info \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: accounting/models.py:36 accounting/models.py:55 accounting/models.py:82 +#: accounting/models.py:141 club/models.py:19 counter/models.py:62 +#: counter/models.py:87 counter/models.py:122 launderette/models.py:15 +#: launderette/models.py:60 launderette/models.py:85 stock/models.py:10 +#: stock/models.py:21 +msgid "name" +msgstr "nom" + +#: accounting/models.py:37 +msgid "street" +msgstr "rue" + +#: accounting/models.py:38 +msgid "city" +msgstr "ville" + +#: accounting/models.py:39 +msgid "postcode" +msgstr "code postal" + +#: accounting/models.py:40 +msgid "country" +msgstr "pays" + +#: accounting/models.py:41 core/models.py:166 +msgid "phone" +msgstr "téléphone" + +#: accounting/models.py:42 +msgid "email" +msgstr "email" + +#: accounting/models.py:43 +msgid "website" +msgstr "site internet" + +#: accounting/models.py:46 +msgid "company" +msgstr "entreprise" + +#: accounting/models.py:56 +msgid "iban" +msgstr "IBAN" + +#: accounting/models.py:57 +msgid "account number" +msgstr "numero de compte" + +#: accounting/models.py:58 accounting/models.py:83 club/models.py:145 +#: counter/models.py:96 counter/models.py:123 +msgid "club" +msgstr "club" + +#: accounting/models.py:61 +msgid "Bank account" +msgstr "Compte en banque" + +#: accounting/models.py:84 +msgid "bank account" +msgstr "compte en banque" + +#: accounting/models.py:87 +msgid "Club account" +msgstr "Compte club" + +#: accounting/models.py:132 +#, python-format +msgid "%(club_account)s on %(bank_account)s" +msgstr "%(club_account)s sur %(bank_account)s" + +#: accounting/models.py:139 club/models.py:146 counter/models.py:341 +#: launderette/models.py:122 +msgid "start date" +msgstr "date de début" + +#: accounting/models.py:140 club/models.py:147 counter/models.py:342 +msgid "end date" +msgstr "date de fin" + +#: accounting/models.py:142 +msgid "is closed" +msgstr "est fermé" + +#: accounting/models.py:143 accounting/models.py:346 +msgid "club account" +msgstr "compte club" + +#: accounting/models.py:144 accounting/models.py:190 counter/models.py:27 +#: counter/models.py:226 +msgid "amount" +msgstr "montant" + +#: accounting/models.py:145 +msgid "effective_amount" +msgstr "montant effectif" + +#: accounting/models.py:148 +msgid "General journal" +msgstr "Classeur" + +#: accounting/models.py:188 +msgid "number" +msgstr "numéro" + +#: accounting/models.py:189 +msgid "journal" +msgstr "classeur" + +#: accounting/models.py:191 core/models.py:479 core/models.py:757 +#: counter/models.py:229 counter/models.py:272 counter/models.py:358 +#: eboutic/models.py:15 eboutic/models.py:48 +msgid "date" +msgstr "date" + +#: accounting/models.py:192 counter/models.py:359 +msgid "comment" +msgstr "commentaire" + +#: accounting/models.py:193 counter/models.py:230 counter/models.py:273 +#: subscription/models.py:57 +msgid "payment method" +msgstr "méthode de paiement" + +#: accounting/models.py:194 +msgid "cheque number" +msgstr "numéro de chèque" + +#: accounting/models.py:195 eboutic/models.py:116 +msgid "invoice" +msgstr "facture" + +#: accounting/models.py:196 +msgid "is done" +msgstr "est fait" + +#: accounting/models.py:198 +msgid "simple type" +msgstr "type simplifié" + +#: accounting/models.py:200 accounting/models.py:301 +msgid "accounting type" +msgstr "type comptable" + +#: accounting/models.py:202 accounting/models.py:296 accounting/models.py:322 +#: accounting/models.py:345 counter/models.py:264 +msgid "label" +msgstr "intitulé" + +#: accounting/models.py:203 +msgid "target type" +msgstr "type de cible" + +#: accounting/models.py:204 club/templates/club/club_members.jinja:8 +#: club/templates/club/club_old_members.jinja:8 +#: core/templates/core/user_clubs.jinja:15 +#: core/templates/core/user_clubs.jinja:41 +#: counter/templates/counter/cash_summary_list.jinja:32 +#: counter/templates/counter/stats.jinja:15 +#: launderette/templates/launderette/launderette_admin.jinja:44 +msgid "User" +msgstr "Utilisateur" + +#: accounting/models.py:204 club/templates/club/club_detail.jinja:5 +#: counter/templates/counter/invoices_call.jinja:20 +msgid "Club" +msgstr "Club" + +#: accounting/models.py:204 core/views/user.py:174 +msgid "Account" +msgstr "Compte" + +#: accounting/models.py:204 +msgid "Company" +msgstr "Entreprise" + +#: accounting/models.py:204 sith/settings.py:280 +msgid "Other" +msgstr "Autre" + +#: accounting/models.py:205 +msgid "target id" +msgstr "id de la cible" + +#: accounting/models.py:206 +msgid "target label" +msgstr "nom de la cible" + +#: accounting/models.py:207 +msgid "linked operation" +msgstr "opération liée" + +#: accounting/models.py:223 +#, python-format +msgid "" +"The date can not be before the start date of the journal, which is\n" +"%(start_date)s." +msgstr "" +"La date ne peut pas être avant la date de début du journal, qui est\n" +"%(start_date)s." + +#: accounting/models.py:226 +msgid "Target does not exists" +msgstr "La cible n'existe pas." + +#: accounting/models.py:228 +msgid "Please add a target label if you set no existing target" +msgstr "" +"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" + +#: accounting/models.py:230 +msgid "" +"You need to provide ether a simplified accounting type or a standard " +"accounting type" +msgstr "" +"Vous devez fournir soit un type comptable simplifié ou un type comptable " +"standard" + +#: accounting/models.py:291 counter/models.py:91 +msgid "code" +msgstr "code" + +#: accounting/models.py:293 +msgid "An accounting type code contains only numbers" +msgstr "Un code comptable ne contient que des numéros" + +#: accounting/models.py:297 +msgid "movement type" +msgstr "type de mouvement" + +#: accounting/models.py:297 +msgid "Credit" +msgstr "Crédit" + +#: accounting/models.py:297 +msgid "Debit" +msgstr "Débit" + +#: accounting/models.py:298 +msgid "Neutral" +msgstr "Neutre" + +#: accounting/models.py:324 +msgid "simplified accounting types" +msgstr "type simplifié" + +#: accounting/models.py:327 +msgid "simplified type" +msgstr "type simplifié" + +#: accounting/templates/accounting/accountingtype_list.jinja:4 +#: accounting/templates/accounting/accountingtype_list.jinja:15 +msgid "Accounting type list" +msgstr "Liste des types comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:9 +#: accounting/templates/accounting/bank_account_details.jinja:9 +#: accounting/templates/accounting/bank_account_list.jinja:9 +#: accounting/templates/accounting/club_account_details.jinja:9 +#: accounting/templates/accounting/journal_details.jinja:9 +#: accounting/templates/accounting/label_list.jinja:9 +#: accounting/templates/accounting/operation_edit.jinja:9 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 +#: core/templates/core/user_tools.jinja:42 +msgid "Accounting" +msgstr "Comptabilité" + +#: accounting/templates/accounting/accountingtype_list.jinja:10 +msgid "Accounting types" +msgstr "Type comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:13 +msgid "New accounting type" +msgstr "Nouveau type comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:22 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:22 +msgid "There is no types in this website." +msgstr "Il n'y a pas de types comptable dans ce site web." + +#: accounting/templates/accounting/bank_account_details.jinja:4 +#: accounting/templates/accounting/bank_account_details.jinja:13 +#: core/templates/core/user_tools.jinja:49 +msgid "Bank account: " +msgstr "Compte en banque : " + +#: accounting/templates/accounting/bank_account_details.jinja:15 +#: accounting/templates/accounting/club_account_details.jinja:16 +#: accounting/templates/accounting/label_list.jinja:21 +#: club/templates/club/club_sellings.jinja:48 +#: core/templates/core/file_detail.jinja:43 +#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66 +#: core/templates/core/user_account_detail.jinja:67 +#: core/templates/core/user_edit.jinja:18 +#: counter/templates/counter/last_ops.jinja:29 +#: counter/templates/counter/last_ops.jinja:59 +#: launderette/templates/launderette/launderette_admin.jinja:16 +#: launderette/views.py:146 +msgid "Delete" +msgstr "Supprimer" + +#: accounting/templates/accounting/bank_account_details.jinja:17 +#: club/views.py:31 core/views/user.py:130 +msgid "Infos" +msgstr "Infos" + +#: accounting/templates/accounting/bank_account_details.jinja:19 +msgid "IBAN: " +msgstr "IBAN : " + +#: accounting/templates/accounting/bank_account_details.jinja:20 +msgid "Number: " +msgstr "Numéro : " + +#: accounting/templates/accounting/bank_account_details.jinja:22 +msgid "New club account" +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:55 +#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:53 +#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 +#: core/templates/core/user_tools.jinja:35 core/views/user.py:147 +#: counter/templates/counter/cash_summary_list.jinja:53 +#: counter/templates/counter/counter_list.jinja:17 +#: counter/templates/counter/counter_list.jinja:32 +#: counter/templates/counter/counter_list.jinja:52 +#: launderette/templates/launderette/launderette_list.jinja:16 +msgid "Edit" +msgstr "Éditer" + +#: accounting/templates/accounting/bank_account_list.jinja:4 +#: accounting/templates/accounting/bank_account_list.jinja:17 +msgid "Bank account list" +msgstr "Liste des comptes en banque" + +#: accounting/templates/accounting/bank_account_list.jinja:12 +msgid "Manage simplified types" +msgstr "Gérer les types simplifiés" + +#: accounting/templates/accounting/bank_account_list.jinja:13 +msgid "Manage accounting types" +msgstr "Gérer les types comptable" + +#: accounting/templates/accounting/bank_account_list.jinja:14 +msgid "New bank account" +msgstr "Nouveau compte en banque" + +#: accounting/templates/accounting/bank_account_list.jinja:26 +msgid "There is no accounts in this website." +msgstr "Il n'y a pas de comptes dans ce site web." + +#: accounting/templates/accounting/club_account_details.jinja:4 +#: accounting/templates/accounting/club_account_details.jinja:14 +msgid "Club account:" +msgstr "Compte club : " + +#: accounting/templates/accounting/club_account_details.jinja:18 +#: accounting/templates/accounting/journal_details.jinja:16 +#: accounting/templates/accounting/label_list.jinja:15 +msgid "New label" +msgstr "Nouvelle étiquette" + +#: accounting/templates/accounting/club_account_details.jinja:19 +#: accounting/templates/accounting/journal_details.jinja:17 +#: accounting/templates/accounting/label_list.jinja:4 +#: accounting/templates/accounting/label_list.jinja:17 +msgid "Label list" +msgstr "Liste des étiquettes" + +#: accounting/templates/accounting/club_account_details.jinja:21 +msgid "New journal" +msgstr "Nouveau classeur" + +#: accounting/templates/accounting/club_account_details.jinja:23 +msgid "You can not create new journal while you still have one opened" +msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" + +#: accounting/templates/accounting/club_account_details.jinja:28 +#: launderette/templates/launderette/launderette_admin.jinja:43 +msgid "Name" +msgstr "Nom" + +#: accounting/templates/accounting/club_account_details.jinja:29 +msgid "Start" +msgstr "Début" + +#: accounting/templates/accounting/club_account_details.jinja:30 +msgid "End" +msgstr "Fin" + +#: accounting/templates/accounting/club_account_details.jinja:31 +#: accounting/templates/accounting/journal_details.jinja:31 +#: core/templates/core/user_account_detail.jinja:20 +#: core/templates/core/user_account_detail.jinja:81 +#: counter/templates/counter/last_ops.jinja:17 +msgid "Amount" +msgstr "Montant" + +#: accounting/templates/accounting/club_account_details.jinja:32 +msgid "Effective amount" +msgstr "Montant effectif" + +#: accounting/templates/accounting/club_account_details.jinja:33 +msgid "Closed" +msgstr "Fermé" + +#: accounting/templates/accounting/club_account_details.jinja:34 +#: accounting/templates/accounting/journal_details.jinja:39 +msgid "Actions" +msgstr "Actions" + +#: accounting/templates/accounting/club_account_details.jinja:50 +#: accounting/templates/accounting/journal_details.jinja:58 +msgid "Yes" +msgstr "Oui" + +#: accounting/templates/accounting/club_account_details.jinja:52 +#: accounting/templates/accounting/journal_details.jinja:60 +msgid "No" +msgstr "Non" + +#: accounting/templates/accounting/club_account_details.jinja:54 +#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 +msgid "View" +msgstr "Voir" + +#: accounting/templates/accounting/journal_details.jinja:4 +#: accounting/templates/accounting/journal_details.jinja:15 +msgid "General journal:" +msgstr "Classeur : " + +#: accounting/templates/accounting/journal_details.jinja:18 +#: core/templates/core/user_account.jinja:36 +#: core/templates/core/user_account_detail.jinja:10 +#: counter/templates/counter/counter_click.jinja:32 +msgid "Amount: " +msgstr "Montant: " + +#: accounting/templates/accounting/journal_details.jinja:19 +msgid "Effective amount: " +msgstr "Montant effectif: " + +#: accounting/templates/accounting/journal_details.jinja:21 +msgid "Journal is closed, you can not create operation" +msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" + +#: accounting/templates/accounting/journal_details.jinja:23 +msgid "New operation" +msgstr "Nouvelle opération" + +#: accounting/templates/accounting/journal_details.jinja:28 +#: counter/templates/counter/stats.jinja:14 +msgid "Nb" +msgstr "No" + +#: accounting/templates/accounting/journal_details.jinja:29 +#: club/templates/club/club_sellings.jinja:18 +#: core/templates/core/user_account_detail.jinja:17 +#: core/templates/core/user_account_detail.jinja:46 +#: core/templates/core/user_account_detail.jinja:79 +#: counter/templates/counter/cash_summary_list.jinja:34 +#: counter/templates/counter/last_ops.jinja:14 +#: counter/templates/counter/last_ops.jinja:39 +msgid "Date" +msgstr "Date" + +#: accounting/templates/accounting/journal_details.jinja:30 +#: club/templates/club/club_sellings.jinja:22 +#: core/templates/core/user_account_detail.jinja:49 +#: counter/templates/counter/last_ops.jinja:42 +msgid "Label" +msgstr "Étiquette" + +#: accounting/templates/accounting/journal_details.jinja:32 +msgid "Payment mode" +msgstr "Méthode de paiement" + +#: accounting/templates/accounting/journal_details.jinja:33 +msgid "Target" +msgstr "Cible" + +#: accounting/templates/accounting/journal_details.jinja:34 +msgid "Code" +msgstr "Code" + +#: accounting/templates/accounting/journal_details.jinja:35 +msgid "Nature" +msgstr "Nature" + +#: accounting/templates/accounting/journal_details.jinja:36 +msgid "Done" +msgstr "Effectué" + +#: accounting/templates/accounting/journal_details.jinja:37 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:707 +msgid "Comment" +msgstr "Commentaire" + +#: accounting/templates/accounting/journal_details.jinja:38 +msgid "File" +msgstr "Fichier" + +#: accounting/templates/accounting/label_list.jinja:14 +msgid "Back to club account" +msgstr "Retour au compte club" + +#: accounting/templates/accounting/label_list.jinja:26 +msgid "There is no label in this club account." +msgstr "Il n'y a pas d'étiquette dans ce compte club." + +#: accounting/templates/accounting/operation_edit.jinja:4 +#: accounting/templates/accounting/operation_edit.jinja:13 +#: accounting/templates/accounting/operation_edit.jinja:16 +msgid "Edit operation" +msgstr "Éditer l'opération" + +#: accounting/templates/accounting/operation_edit.jinja:40 +#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:12 +#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 +#: core/templates/core/pagerev_edit.jinja:24 +#: core/templates/core/user_godfathers.jinja:35 +#: counter/templates/counter/cash_register_summary.jinja:22 +#: subscription/templates/subscription/subscription.jinja:23 +msgid "Save" +msgstr "Sauver" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:4 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:15 +msgid "Simplified type list" +msgstr "Liste des types simplifiés" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:10 +msgid "Simplified types" +msgstr "Types simplifiés" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:13 +msgid "New simplified type" +msgstr "Nouveau type simplifié" + +#: club/models.py:21 +msgid "unix name" +msgstr "nom unix" + +#: club/models.py:25 +msgid "" +"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " +"characters." +msgstr "" +"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " +"lettres, des nombres, et les caractères ./-/_" + +#: club/models.py:30 +msgid "A club with that unix name already exists." +msgstr "Un club avec ce nom UNIX existe déjà." + +#: club/models.py:33 core/models.py:168 +msgid "address" +msgstr "Adresse" + +#: club/models.py:39 core/models.py:117 +msgid "home" +msgstr "home" + +#: club/models.py:47 +msgid "You can not make loops in clubs" +msgstr "Vous ne pouvez pas faire de boucles dans les clubs" + +#: club/models.py:61 +msgid "A club with that unix_name already exists" +msgstr "Un club avec ce nom UNIX existe déjà." + +#: club/models.py:144 counter/models.py:339 counter/models.py:356 +#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 +#: launderette/models.py:126 +msgid "user" +msgstr "nom d'utilisateur" + +#: club/models.py:148 core/models.py:135 +msgid "role" +msgstr "rôle" + +#: club/models.py:150 core/models.py:32 counter/models.py:63 +#: counter/models.py:88 +msgid "description" +msgstr "description" + +#: club/models.py:155 +msgid "User must be subscriber to take part to a club" +msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" + +#: club/models.py:157 +msgid "User is already member of that club" +msgstr "L'utilisateur est déjà membre de ce club" + +#: club/models.py:166 +msgid "past member" +msgstr "Anciens membres" + +#: club/templates/club/club_list.jinja:4 club/templates/club/club_list.jinja:24 +msgid "Club list" +msgstr "Liste des clubs" + +#: club/templates/club/club_list.jinja:21 +msgid "New club" +msgstr "Nouveau club" + +#: club/templates/club/club_list.jinja:31 +msgid "There is no club in this website." +msgstr "Il n'y a pas de club dans ce site web." + +#: club/templates/club/club_members.jinja:5 +msgid "Club members" +msgstr "Membres du club" + +#: club/templates/club/club_members.jinja:9 +#: club/templates/club/club_old_members.jinja:9 +#: core/templates/core/user_clubs.jinja:16 +#: core/templates/core/user_clubs.jinja:42 +msgid "Role" +msgstr "Rôle" + +#: club/templates/club/club_members.jinja:10 +#: club/templates/club/club_old_members.jinja:10 +#: core/templates/core/user_clubs.jinja:17 +#: core/templates/core/user_clubs.jinja:43 +msgid "Description" +msgstr "Description" + +#: club/templates/club/club_members.jinja:11 +#: core/templates/core/user_clubs.jinja:18 +#: launderette/templates/launderette/launderette_admin.jinja:45 +msgid "Since" +msgstr "Depuis" + +#: club/templates/club/club_members.jinja:21 +#: core/templates/core/user_clubs.jinja:29 +msgid "Mark as old" +msgstr "Marquer comme ancien" + +#: club/templates/club/club_members.jinja:30 +#: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 +#: launderette/views.py:146 +msgid "Add" +msgstr "Ajouter" + +#: club/templates/club/club_old_members.jinja:5 +msgid "Club old members" +msgstr "Anciens membres du club" + +#: club/templates/club/club_old_members.jinja:11 +#: core/templates/core/user_clubs.jinja:44 +msgid "From" +msgstr "Du" + +#: club/templates/club/club_old_members.jinja:12 +#: core/templates/core/user_clubs.jinja:45 +msgid "To" +msgstr "Au" + +#: club/templates/club/club_sellings.jinja:5 club/views.py:58 +#: counter/templates/counter/counter_main.jinja:19 +#: counter/templates/counter/last_ops.jinja:35 +msgid "Sellings" +msgstr "Ventes" + +#: club/templates/club/club_sellings.jinja:9 +#: counter/templates/counter/cash_summary_list.jinja:15 +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:70 +#: 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:165 +#: core/templates/core/user_account_detail.jinja:18 +#: core/templates/core/user_account_detail.jinja:47 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:75 +msgid "Counter" +msgstr "Comptoir" + +#: club/templates/club/club_sellings.jinja:20 +#: core/templates/core/user_account_detail.jinja:19 +#: core/templates/core/user_account_detail.jinja:48 +#: counter/templates/counter/last_ops.jinja:15 +#: counter/templates/counter/last_ops.jinja:40 +msgid "Barman" +msgstr "Barman" + +#: club/templates/club/club_sellings.jinja:21 +#: counter/templates/counter/counter_click.jinja:29 +#: counter/templates/counter/last_ops.jinja:16 +#: counter/templates/counter/last_ops.jinja:41 +msgid "Customer" +msgstr "Client" + +#: club/templates/club/club_sellings.jinja:23 +#: core/templates/core/user_account_detail.jinja:50 +#: core/templates/core/user_stats.jinja:28 +#: counter/templates/counter/last_ops.jinja:43 +msgid "Quantity" +msgstr "Quantité" + +#: club/templates/club/club_sellings.jinja:24 +#: core/templates/core/user_account.jinja:9 +#: core/templates/core/user_account_detail.jinja:51 +#: counter/templates/counter/cash_summary_list.jinja:35 +#: counter/templates/counter/last_ops.jinja:44 +#: counter/templates/counter/stats.jinja:18 +msgid "Total" +msgstr "Total" + +#: club/templates/club/club_sellings.jinja:25 +#: core/templates/core/user_account_detail.jinja:21 +#: core/templates/core/user_account_detail.jinja:52 +#: counter/templates/counter/last_ops.jinja:18 +#: counter/templates/counter/last_ops.jinja:45 +msgid "Payment method" +msgstr "Méthode de paiement" + +#: club/templates/club/club_tools.jinja:4 +#: core/templates/core/user_tools.jinja:61 +msgid "Club tools" +msgstr "Outils club" + +#: club/templates/club/club_tools.jinja:6 +msgid "Counters:" +msgstr "Comptoirs : " + +#: club/templates/club/club_tools.jinja:22 +msgid "Accouting: " +msgstr "Comptabilité : " + +#: club/templates/club/club_tools.jinja:30 +msgid "Manage launderettes" +msgstr "Gestion des laveries" + +#: club/views.py:37 +msgid "Members" +msgstr "Membres" + +#: club/views.py:42 +msgid "Old members" +msgstr "Anciens membres" + +#: club/views.py:48 core/templates/core/base.jinja:40 core/views/user.py:141 +msgid "Tools" +msgstr "Outils" + +#: club/views.py:64 counter/templates/counter/counter_list.jinja:21 +#: counter/templates/counter/counter_list.jinja:41 +#: counter/templates/counter/counter_list.jinja:56 +msgid "Props" +msgstr "Propriétés" + +#: club/views.py:102 core/views/forms.py:204 counter/views.py:39 +msgid "Select user" +msgstr "Choisir un utilisateur" + +#: club/views.py:163 counter/views.py:905 +msgid "Begin date" +msgstr "Date de début" + +#: club/views.py:164 counter/views.py:906 +msgid "End date" +msgstr "Date de fin" + +#: club/views.py:178 core/templates/core/user_stats.jinja:27 +#: counter/views.py:986 +msgid "Product" +msgstr "Produit" + +#: core/models.py:28 +msgid "meta group status" +msgstr "status du meta-groupe" + +#: core/models.py:30 +msgid "Whether a group is a meta group or not" +msgstr "Si un groupe est un meta-groupe ou pas" + +#: core/models.py:58 +#, python-format +msgid "%(value)s is not a valid promo (between 0 and %(end)s)" +msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" + +#: core/models.py:74 +msgid "username" +msgstr "nom d'utilisateur" + +#: core/models.py:77 +msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." +msgstr "" +"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" +"+/-/_" + +#: core/models.py:81 +msgid "" +"Enter a valid username. This value may contain only letters, numbers and ./" +"+/-/_ characters." +msgstr "" +"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" +"+/-/_" + +#: core/models.py:86 +msgid "A user with that username already exists." +msgstr "Un utilisateur de ce nom existe déjà" + +#: core/models.py:89 +msgid "first name" +msgstr "Prénom" + +#: core/models.py:90 +msgid "last name" +msgstr "Nom" + +#: core/models.py:91 +msgid "email address" +msgstr "adresse email" + +#: core/models.py:92 +msgid "date of birth" +msgstr "date de naissance" + +#: core/models.py:93 +msgid "nick name" +msgstr "surnom" + +#: core/models.py:95 +msgid "staff status" +msgstr "status \"staff\"" + +#: core/models.py:97 +msgid "Designates whether the user can log into this admin site." +msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." + +#: core/models.py:100 +msgid "active" +msgstr "actif" + +#: core/models.py:103 +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " +"lieu de supprimer les comptes." + +#: core/models.py:107 +msgid "date joined" +msgstr "date d'inscription" + +#: core/models.py:108 +msgid "last update" +msgstr "dernière mise à jour" + +#: core/models.py:110 +msgid "superuser" +msgstr "super-utilisateur" + +#: core/models.py:113 +msgid "Designates whether this user is a superuser. " +msgstr "Est-ce que l'utilisateur est super-utilisateur." + +#: core/models.py:118 +msgid "profile" +msgstr "profil" + +#: core/models.py:120 +msgid "avatar" +msgstr "avatar" + +#: core/models.py:122 +msgid "scrub" +msgstr "blouse" + +#: core/models.py:124 +msgid "sex" +msgstr "sexe" + +#: core/models.py:124 +msgid "Man" +msgstr "Homme" + +#: core/models.py:124 +msgid "Woman" +msgstr "Femme" + +#: core/models.py:125 +msgid "tshirt size" +msgstr "taille de tshirt" + +#: core/models.py:126 +msgid "-" +msgstr "-" + +#: core/models.py:127 +msgid "XS" +msgstr "XS" + +#: core/models.py:128 +msgid "S" +msgstr "S" + +#: core/models.py:129 +msgid "M" +msgstr "M" + +#: core/models.py:130 +msgid "L" +msgstr "L" + +#: core/models.py:131 +msgid "XL" +msgstr "XL" + +#: core/models.py:132 +msgid "XXL" +msgstr "XXL" + +#: core/models.py:133 +msgid "XXXL" +msgstr "XXXL" + +#: core/models.py:136 +msgid "Student" +msgstr "Étudiant" + +#: core/models.py:137 +msgid "Administrative agent" +msgstr "Personnel administratif" + +#: core/models.py:138 +msgid "Teacher" +msgstr "Enseignant" + +#: core/models.py:139 +msgid "Agent" +msgstr "Personnel" + +#: core/models.py:140 +msgid "Doctor" +msgstr "Doctorant" + +#: core/models.py:141 +msgid "Former student" +msgstr "Ancien étudiant" + +#: core/models.py:142 +msgid "Service" +msgstr "Service" + +#: core/models.py:144 +msgid "department" +msgstr "département" + +#: core/models.py:145 +msgid "TC" +msgstr "TC" + +#: core/models.py:146 +msgid "IMSI" +msgstr "IMSI" + +#: core/models.py:147 +msgid "IMAP" +msgstr "IMAP" + +#: core/models.py:148 +msgid "INFO" +msgstr "INFO" + +#: core/models.py:149 +msgid "GI" +msgstr "GI" + +#: core/models.py:150 +msgid "E" +msgstr "E" + +#: core/models.py:151 +msgid "EE" +msgstr "EE" + +#: core/models.py:152 +msgid "GESC" +msgstr "GESC" + +#: core/models.py:153 +msgid "GMC" +msgstr "GMC" + +#: core/models.py:154 +msgid "MC" +msgstr "MC" + +#: core/models.py:155 +msgid "EDIM" +msgstr "EDIM" + +#: core/models.py:156 +msgid "Humanities" +msgstr "Humanités" + +#: core/models.py:157 +msgid "N/A" +msgstr "N/A" + +#: core/models.py:159 +msgid "dpt option" +msgstr "Filière" + +#: core/models.py:160 +msgid "semester" +msgstr "semestre" + +#: core/models.py:161 +msgid "quote" +msgstr "citation" + +#: core/models.py:162 +msgid "school" +msgstr "école" + +#: core/models.py:163 +msgid "promo" +msgstr "promo" + +#: core/models.py:164 +msgid "forum signature" +msgstr "signature du forum" + +#: core/models.py:165 +msgid "second email address" +msgstr "adresse email secondaire" + +#: core/models.py:167 +msgid "parent phone" +msgstr "téléphone des parents" + +#: core/models.py:169 +msgid "parent address" +msgstr "adresse des parents" + +#: core/models.py:170 +msgid "is subscriber viewable" +msgstr "profil visible par les cotisants" + +#: core/models.py:285 +msgid "A user with that username already exists" +msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" + +#: core/models.py:406 core/templates/core/macros.jinja:17 +#: core/templates/core/user_detail.jinja:14 +#: core/templates/core/user_detail.jinja:16 +#: core/templates/core/user_edit.jinja:16 +msgid "Profile" +msgstr "Profil" + +#: core/models.py:456 +msgid "Visitor" +msgstr "Visiteur" + +#: core/models.py:461 +msgid "define if we show a users stats" +msgstr "Definit si l'on montre les statistiques de l'utilisateur" + +#: core/models.py:463 +msgid "Show your account statistics to others" +msgstr "Montrez vos statistiques de compte aux autres" + +#: core/models.py:470 +msgid "file name" +msgstr "nom du fichier" + +#: core/models.py:471 core/models.py:606 +msgid "parent" +msgstr "parent" + +#: core/models.py:472 core/models.py:482 +msgid "file" +msgstr "fichier" + +#: core/models.py:473 +msgid "owner" +msgstr "propriétaire" + +#: core/models.py:474 core/models.py:612 +msgid "edit group" +msgstr "groupe d'édition" + +#: core/models.py:475 core/models.py:613 +msgid "view group" +msgstr "groupe de vue" + +#: core/models.py:476 +msgid "is folder" +msgstr "est un dossier" + +#: core/models.py:477 +msgid "mime type" +msgstr "type mime" + +#: core/models.py:478 +msgid "size" +msgstr "taille" + +#: core/models.py:510 +msgid "Character '/' not authorized in name" +msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" + +#: core/models.py:513 core/models.py:518 +msgid "Loop in folder tree" +msgstr "Boucle dans l'arborescence des dossiers" + +#: core/models.py:522 +msgid "You can not make a file be a children of a non folder file" +msgstr "" +"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " +"un dossier" + +#: core/models.py:526 +msgid "Duplicate file" +msgstr "Un fichier de ce nom existe déjà" + +#: core/models.py:536 +msgid "You must provide a file" +msgstr "Vous devez fournir un fichier" + +#: core/models.py:561 +msgid "Folder: " +msgstr "Dossier : " + +#: core/models.py:563 +msgid "File: " +msgstr "Fichier : " + +#: core/models.py:605 core/models.py:609 +msgid "page name" +msgstr "nom de la page" + +#: core/models.py:610 +msgid "owner group" +msgstr "groupe propriétaire" + +#: core/models.py:641 +msgid "Duplicate page" +msgstr "Une page de ce nom existe déjà" + +#: core/models.py:647 +msgid "Loop in page tree" +msgstr "Boucle dans l'arborescence des pages" + +#: core/models.py:754 +msgid "revision" +msgstr "révision" + +#: core/models.py:755 +msgid "page title" +msgstr "titre de la page" + +#: core/models.py:756 +msgid "page content" +msgstr "contenu de la page" + +#: core/templates/core/403.jinja:5 +msgid "403, Forbidden" +msgstr "403. Non autorisé" + +#: core/templates/core/404.jinja:5 +msgid "404, Not Found" +msgstr "404. Non trouvé" + +#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 +msgid "Welcome!" +msgstr "Bienvenue!" + +#: core/templates/core/base.jinja:19 +msgid "Logo" +msgstr "Logo" + +#: 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:23 core/templates/core/register.jinja:18 +msgid "Register" +msgstr "S'enregister" + +#: core/templates/core/base.jinja:41 +msgid "Logout" +msgstr "Déconnexion" + +#: core/templates/core/base.jinja:43 core/templates/core/base.jinja.py:44 +msgid "Search" +msgstr "Recherche" + +#: core/templates/core/base.jinja:66 +msgid "Main" +msgstr "Accueil" + +#: core/templates/core/base.jinja:67 +msgid "Matmatronch" +msgstr "Matmatronch" + +#: core/templates/core/base.jinja:68 +msgid "Wiki" +msgstr "Wiki" + +#: core/templates/core/base.jinja:69 +msgid "SAS" +msgstr "SAS" + +#: core/templates/core/base.jinja:70 +msgid "Forum" +msgstr "Forum" + +#: core/templates/core/base.jinja:71 +msgid "Services" +msgstr "Services" + +#: core/templates/core/base.jinja:72 core/templates/core/file.jinja:20 +#: core/views/files.py:47 +msgid "Files" +msgstr "Fichiers" + +#: core/templates/core/base.jinja:73 +msgid "Sponsors" +msgstr "Partenaires" + +#: core/templates/core/base.jinja:74 +msgid "Help" +msgstr "Aide" + +#: core/templates/core/base.jinja:106 +msgid "Site made by good people" +msgstr "Site réalisé par des gens bons" + +#: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 +#, python-format +msgid "Create %(name)s" +msgstr "Créer %(name)s" + +#: core/templates/core/delete_confirm.jinja:4 +#: core/templates/core/delete_confirm.jinja:8 +#: core/templates/core/file_delete_confirm.jinja:4 +#: core/templates/core/file_delete_confirm.jinja:8 +msgid "Delete confirmation" +msgstr "Confirmation de suppression" + +#: core/templates/core/delete_confirm.jinja:10 +#: core/templates/core/file_delete_confirm.jinja:10 +#, python-format +msgid "Are you sure you want to delete \"%(obj)s\"?" +msgstr "Êtes-vous sûr de vouloir supprimer \"%(obj)s\" ?" + +#: core/templates/core/delete_confirm.jinja:11 +#: core/templates/core/file_delete_confirm.jinja:11 +msgid "Confirm" +msgstr "Confirmation" + +#: core/templates/core/delete_confirm.jinja:14 +#: core/templates/core/file_delete_confirm.jinja:14 +#: counter/templates/counter/counter_click.jinja:93 +msgid "Cancel" +msgstr "Annuler" + +#: core/templates/core/edit.jinja:4 core/templates/core/edit.jinja.py:8 +#: core/templates/core/file_edit.jinja:4 +#: counter/templates/counter/cash_register_summary.jinja:4 +#, python-format +msgid "Edit %(obj)s" +msgstr "Éditer %(obj)s" + +#: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 +msgid "File list" +msgstr "Liste des fichiers" + +#: core/templates/core/file.jinja:9 +msgid "New file" +msgstr "Nouveau fichier" + +#: core/templates/core/file.jinja:11 core/templates/core/page.jinja:11 +msgid "Not found" +msgstr "Non trouvé" + +#: core/templates/core/file.jinja:32 +msgid "My files" +msgstr "Mes fichiers" + +#: core/templates/core/file.jinja:41 core/templates/core/page.jinja:34 +msgid "Prop" +msgstr "Propriétés" + +#: core/templates/core/file_detail.jinja:13 +msgid "Owner: " +msgstr "Propriétaire : " + +#: core/templates/core/file_detail.jinja:34 +msgid "Real name: " +msgstr "Nom réel : " + +#: core/templates/core/file_detail.jinja:35 +msgid "Date: " +msgstr "Date : " + +#: core/templates/core/file_detail.jinja:37 +msgid "Type: " +msgstr "Type : " + +#: core/templates/core/file_detail.jinja:38 +msgid "Size: " +msgstr "Taille : " + +#: core/templates/core/file_detail.jinja:38 +msgid "bytes" +msgstr "octets" + +#: core/templates/core/file_detail.jinja:40 +msgid "Download" +msgstr "Télécharger" + +#: core/templates/core/file_list.jinja:19 +msgid "There is no file in this website." +msgstr "Il n'y a pas de fichier sur ce site web." + +#: core/templates/core/group_edit.jinja:4 +msgid "Back to list" +msgstr "Retour à la liste" + +#: core/templates/core/group_edit.jinja:5 +msgid "Edit group" +msgstr "Éditer le groupe" + +#: core/templates/core/group_edit.jinja:9 +#: core/templates/core/user_edit.jinja:36 +#: core/templates/core/user_group.jinja:8 +msgid "Update" +msgstr "Mettre à jour" + +#: core/templates/core/group_list.jinja:4 +#: core/templates/core/group_list.jinja:8 +msgid "Group list" +msgstr "Liste des groupes" + +#: core/templates/core/group_list.jinja:9 +msgid "New group" +msgstr "Nouveau groupe" + +#: core/templates/core/index.jinja:7 +msgid "Welcome to the new AE's website!" +msgstr "Bienvenue sur le nouveau site de l'AE ! " + +#: core/templates/core/login.jinja:10 +msgid "Your username and password didn't match. Please try again." +msgstr "" +"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Merci de " +"réessayer." + +#: core/templates/core/login.jinja:15 +msgid "" +"Your account doesn't have access to this page. To proceed,\n" +" please login with an account that has access." +msgstr "" +"Votre compte n'a pas accès à cette page. Merci de vous identifier avec un " +"compte qui a accès." + +#: core/templates/core/login.jinja:18 +msgid "Please login to see this page." +msgstr "Merci de vous identifier pour voir cette page." + +#: core/templates/core/login.jinja:28 +#: counter/templates/counter/counter_main.jinja:51 +msgid "login" +msgstr "login" + +#: core/templates/core/login.jinja:32 +msgid "Lost password?" +msgstr "Mot de passe perdu ?" + +#: core/templates/core/macros.jinja:27 core/templates/core/user_detail.jinja:27 +msgid "Born: " +msgstr "Né le : " + +#: core/templates/core/macros.jinja:31 core/templates/core/user_detail.jinja:48 +msgid "Promo: " +msgstr "Promo : " + +#: core/templates/core/macros.jinja:38 +#, python-format +msgid "Subscribed until %(subscription_end)s" +msgstr "Cotisant jusqu'au %(subscription_end)s" + +#: core/templates/core/macros.jinja:39 core/templates/core/user_edit.jinja:39 +msgid "Account number: " +msgstr "Numero de compte : " + +#: core/templates/core/macros.jinja:44 launderette/models.py:129 +msgid "Slot" +msgstr "Créneau" + +#: core/templates/core/macros.jinja:55 +#: launderette/templates/launderette/launderette_admin.jinja:20 +msgid "Tokens" +msgstr "Jetons" + +#: core/templates/core/new_user_email.jinja:2 +msgid "" +"You're receiving this email because you subscribed to the UTBM student " +"association." +msgstr "" +"Vous avez reçu cet email parce que vous avez cotisé à l'Association des " +"Étudiants de l'UTBM." + +#: core/templates/core/new_user_email.jinja:4 +#: core/templates/core/password_reset_email.jinja:4 +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Merci de vous rendre sur la page suivante et de choisir un nouveau mot de " +"passe :" + +#: core/templates/core/new_user_email.jinja:8 +msgid "Your username, in case it was not given to you: " +msgstr "Votre nom d'utilisateur, si il ne vous a pas été donné :" + +#: core/templates/core/new_user_email.jinja:9 +msgid "" +"You also got a new account that will be useful to purchase products in the " +"living areas and on the Eboutic." +msgstr "" +"Un compte vous a également été créé, qui vous servira notamment à consommer " +"dans les lieux de vie ou sur l'Eboutic." + +#: core/templates/core/new_user_email.jinja:10 +#, python-format +msgid "Here is your account number: %(account)s" +msgstr "Voici votre numéro de compte AE : %(account)s" + +#: core/templates/core/new_user_email.jinja:12 +msgid "Thanks for subscribing! " +msgstr "Merci d'avoir cotisé !" + +#: core/templates/core/new_user_email.jinja:14 +msgid "The AE team" +msgstr "L'équipe AE" + +#: core/templates/core/new_user_email_subject.jinja:2 +msgid "New subscription to the UTBM student association" +msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" + +#: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 +#: core/templates/core/page_list.jinja:9 +msgid "Page list" +msgstr "Liste des pages" + +#: core/templates/core/page.jinja:9 +msgid "Create page" +msgstr "Créer une page" + +#: core/templates/core/page.jinja:29 +msgid "History" +msgstr "Historique" + +#: core/templates/core/page.jinja:45 +msgid "Page does not exist" +msgstr "La page n'existe pas." + +#: core/templates/core/page.jinja:47 +msgid "Create it?" +msgstr "La créer ?" + +#: core/templates/core/page_detail.jinja:5 +#, python-format +msgid "This may not be the last update, you are seeing revision %(rev_id)s!" +msgstr "" +"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la " +"version %(rev_id)s." + +#: core/templates/core/page_hist.jinja:6 +msgid "Page history" +msgstr "Historique de la page" + +#: core/templates/core/page_hist.jinja:7 +#, python-format +msgid "You're seeing the history of page \"%(page_name)s\"" +msgstr "Vous consultez l'historique de la page \"%(page_name)s\"" + +#: core/templates/core/page_hist.jinja:11 +msgid "last" +msgstr "actuel" + +#: core/templates/core/page_list.jinja:16 +msgid "There is no page in this website." +msgstr "Il n'y a pas de page sur ce site web." + +#: core/templates/core/page_prop.jinja:4 +msgid "Page properties" +msgstr "Propriétés de la page" + +#: core/templates/core/pagerev_edit.jinja:19 +msgid "Edit page" +msgstr "Éditer la page" + +#: core/templates/core/pagerev_edit.jinja:23 +msgid "Preview" +msgstr "Prévisualiser" + +#: core/templates/core/password_change.jinja:6 +#, python-format +msgid "Change password for %(user)s" +msgstr "Changer le mot de passe de %(user)s" + +#: core/templates/core/password_change.jinja:11 +msgid "Change" +msgstr "Changer" + +#: core/templates/core/password_change_done.jinja:4 +msgid "You successfully changed your password!" +msgstr "Vous avez correctement changé votre mot de passe !" + +#: core/templates/core/password_reset.jinja:7 +#: core/templates/core/password_reset_confirm.jinja:7 +msgid "Reset" +msgstr "Reset" + +#: core/templates/core/password_reset_complete.jinja:4 +msgid "You successfully reset your password!" +msgstr "Vous avez correctement réinitialisé votre mot de passe !" + +#: core/templates/core/password_reset_done.jinja:4 +msgid "Password reset sent" +msgstr "Réinitialisation de mot de passe envoyée" + +#: core/templates/core/password_reset_done.jinja:7 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should\n" +"receive them shortly." +msgstr "" +"Nous vous avons envoyé les instructions pour réinitialiser votre mot de " +"passe par email, si un compte avec l'email entré existe effectivement.\n" +"Vous devriez les recevoir rapidement." + +#: core/templates/core/password_reset_done.jinja:12 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam\n" +"folder." +msgstr "" +"Si vous ne recevez pas d'email, assurez-vous d'avoir correctement entré " +"l'adresse email avec laquelle vous vous êtes inscrit, et vérifiez votre " +"dossier de spam." + +#: core/templates/core/password_reset_email.jinja:2 +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vous avez reçu cet email parce que vous avez demandé une réinitialisation du " +"mot de passe pour votre compte sur le site %(site_name)s." + +#: core/templates/core/password_reset_email.jinja:8 +msgid "Your username, in case you've forgotten: " +msgstr "Votre nom d'utilisateur, en cas d'oubli :" + +#: core/templates/core/password_reset_email.jinja:10 +msgid "Thanks for using our site! " +msgstr "Merci d'utiliser notre site !" + +#: core/templates/core/password_reset_email.jinja:12 +#, python-format +msgid "The %(site_name)s team" +msgstr "L'équipe de %(site_name)s" + +#: core/templates/core/register.jinja:3 core/templates/core/register.jinja:6 +msgid "Register a user" +msgstr "Enregistrer un utilisateur" + +#: core/templates/core/register.jinja:9 +#, python-format +msgid "Welcome %(user_name)s!" +msgstr "Bienvenue, %(user_name)s!" + +#: core/templates/core/register.jinja:10 +msgid "" +"You successfully registred and you will soon receive a confirmation mail." +msgstr "" +"Vous vous êtes correctement enregistré, et vous devriez recevoir rapidement " +"un email de confirmation." + +#: core/templates/core/register.jinja:12 +#, python-format +msgid "Your username is %(username)s." +msgstr "Votre nom d'utilisateur est %(username)s." + +#: core/templates/core/search.jinja:6 +msgid "Search result" +msgstr "Résultat de la recherche" + +#: core/templates/core/search.jinja:10 +msgid "Users" +msgstr "Utilisateurs" + +#: core/templates/core/search.jinja:18 core/views/user.py:153 +#: counter/templates/counter/stats.jinja:17 +msgid "Clubs" +msgstr "Clubs" + +#: core/templates/core/user_account.jinja:7 +msgid "Year" +msgstr "Année" + +#: core/templates/core/user_account.jinja:8 +msgid "Month" +msgstr "Mois" + +#: core/templates/core/user_account.jinja:30 +#: core/templates/core/user_account_detail.jinja:4 +#, python-format +msgid "%(user_name)s's account" +msgstr "Compte de %(user_name)s" + +#: core/templates/core/user_account.jinja:35 +#: core/templates/core/user_account_detail.jinja:9 +msgid "User account" +msgstr "Compte utilisateur" + +#: core/templates/core/user_account.jinja:38 +#: core/templates/core/user_account_detail.jinja:13 +#: counter/templates/counter/cash_summary_list.jinja:17 +#: counter/templates/counter/last_ops.jinja:10 +msgid "Refillings" +msgstr "Rechargements" + +#: core/templates/core/user_account.jinja:42 +#: core/templates/core/user_account_detail.jinja:42 +msgid "Account buyings" +msgstr "Achat sur compte utilisateur" + +#: core/templates/core/user_account.jinja:46 +#: core/templates/core/user_account_detail.jinja:75 +msgid "Eboutic invoices" +msgstr "Facture eboutic" + +#: core/templates/core/user_account.jinja:50 counter/views.py:475 +msgid "Etickets" +msgstr "Etickets" + +#: core/templates/core/user_account.jinja:58 +#: core/templates/core/user_account_detail.jinja:103 +msgid "User has no account" +msgstr "L'utilisateur n'a pas de compte" + +#: core/templates/core/user_account_detail.jinja:11 +#: core/templates/core/user_account_detail.jinja:105 launderette/views.py:146 +msgid "Back" +msgstr "Retour" + +#: core/templates/core/user_account_detail.jinja:80 +msgid "Items" +msgstr "Articles" + +#: core/templates/core/user_clubs.jinja:4 +#, python-format +msgid "%(user_name)s's club(s)" +msgstr "Clubs de %(user_name)s" + +#: core/templates/core/user_clubs.jinja:8 +msgid "Club(s)" +msgstr "Clubs" + +#: core/templates/core/user_clubs.jinja:10 +msgid "Current club(s) :" +msgstr "Clubs actuels : " + +#: core/templates/core/user_clubs.jinja:36 +msgid "Old club(s) :" +msgstr "Anciens clubs :" + +#: core/templates/core/user_detail.jinja:5 +#, python-format +msgid "%(user_name)s's profile" +msgstr "Profil de %(user_name)s" + +#: core/templates/core/user_detail.jinja:33 +msgid "Option: " +msgstr "Filière : " + +#: core/templates/core/user_detail.jinja:68 +msgid "Not subscribed" +msgstr "Non cotisant" + +#: core/templates/core/user_detail.jinja:70 +#: subscription/templates/subscription/subscription.jinja:4 +#: subscription/templates/subscription/subscription.jinja:8 +msgid "New subscription" +msgstr "Nouvelle cotisation" + +#: core/templates/core/user_edit.jinja:4 +msgid "Edit user" +msgstr "Éditer l'utilisateur" + +#: core/templates/core/user_edit.jinja:8 +msgid "Edit user profile" +msgstr "Éditer le profil de l'utilisateur" + +#: core/templates/core/user_edit.jinja:14 +msgid "Current profile: " +msgstr "Profil actuel : " + +#: core/templates/core/user_edit.jinja:24 +msgid "Take picture" +msgstr "Prendre une photo" + +#: core/templates/core/user_edit.jinja:29 +msgid "Current avatar: " +msgstr "Avatar actuel : " + +#: core/templates/core/user_edit.jinja:30 +msgid "Avatar" +msgstr "Avatar" + +#: core/templates/core/user_edit.jinja:32 +msgid "Current scrub: " +msgstr "Blouse actuelle : " + +#: core/templates/core/user_edit.jinja:33 +msgid "Scrub" +msgstr "Blouse" + +#: core/templates/core/user_edit.jinja:37 +msgid "Username: " +msgstr "Nom d'utilisateur : " + +#: core/templates/core/user_edit.jinja:42 +msgid "Change my password" +msgstr "Changer mon mot de passe" + +#: core/templates/core/user_edit.jinja:44 +msgid "Change user password" +msgstr "Changer le mot de passe" + +#: core/templates/core/user_godfathers.jinja:5 +#, python-format +msgid "%(user_name)s's godfathers" +msgstr "Parrains de %(user_name)s" + +#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 +msgid "Godfathers" +msgstr "Parrains" + +#: core/templates/core/user_godfathers.jinja:18 +msgid "No godfathers" +msgstr "Pas de parrains" + +#: core/templates/core/user_godfathers.jinja:21 +msgid "Godchildren" +msgstr "Fillots" + +#: core/templates/core/user_godfathers.jinja:29 +msgid "No godchildren" +msgstr "Pas de fillots" + +#: core/templates/core/user_group.jinja:4 +#, python-format +msgid "Edit user groups for %(user_name)s" +msgstr "Éditer les groupes pour %(user_name)s" + +#: core/templates/core/user_list.jinja:4 core/templates/core/user_list.jinja:8 +msgid "User list" +msgstr "Liste d'utilisateurs" + +#: core/templates/core/user_stats.jinja:4 +#, python-format +msgid "%(user_name)s's stats" +msgstr "Stats de %(user_name)s" + +#: core/templates/core/user_stats.jinja:9 +msgid "Permanencies" +msgstr "Permanences" + +#: core/templates/core/user_stats.jinja:17 +msgid "Buyings" +msgstr "Achats" + +#: core/templates/core/user_stats.jinja:23 +msgid "Product top 10" +msgstr "Top 10 produits" + +#: core/templates/core/user_tools.jinja:4 +#, python-format +msgid "%(user_name)s's tools" +msgstr "Outils de %(user_name)s" + +#: core/templates/core/user_tools.jinja:8 +msgid "User Tools" +msgstr "Outils utilisateurs" + +#: core/templates/core/user_tools.jinja:11 +msgid "Sith management" +msgstr "Gestion de Sith" + +#: core/templates/core/user_tools.jinja:14 core/views/user.py:159 +msgid "Groups" +msgstr "Groupes" + +#: core/templates/core/user_tools.jinja:15 +#: rootplace/templates/rootplace/merge.jinja:4 +msgid "Merge users" +msgstr "Fusionner deux utilisateurs" + +#: core/templates/core/user_tools.jinja:18 +msgid "Subscriptions" +msgstr "Cotisations" + +#: core/templates/core/user_tools.jinja:23 counter/views.py:445 +#: counter/views.py:594 +msgid "Counters" +msgstr "Comptoirs" + +#: core/templates/core/user_tools.jinja:26 +msgid "General management" +msgstr "Gestion générale" + +#: core/templates/core/user_tools.jinja:27 +msgid "General counters management" +msgstr "Gestion générale des comptoirs" + +#: core/templates/core/user_tools.jinja:28 +msgid "Products management" +msgstr "Gestion des produits" + +#: core/templates/core/user_tools.jinja:29 +msgid "Product types management" +msgstr "Gestion des types de produit" + +#: core/templates/core/user_tools.jinja:30 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:465 +msgid "Cash register summaries" +msgstr "Relevés de caisse" + +#: core/templates/core/user_tools.jinja:36 core/views/user.py:169 +#: counter/templates/counter/counter_list.jinja:18 +#: counter/templates/counter/counter_list.jinja:33 +#: counter/templates/counter/counter_list.jinja:53 +msgid "Stats" +msgstr "Stats" + +#: core/templates/core/user_tools.jinja:45 +msgid "General accounting" +msgstr "Comptabilité générale" + +#: core/templates/core/user_tools.jinja:54 +msgid "Club account: " +msgstr "Compte club : " + +#: core/views/files.py:46 +msgid "Add a new folder" +msgstr "Ajouter un nouveau dossier" + +#: core/views/files.py:57 +#, python-format +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:66 core/views/forms.py:181 core/views/forms.py:185 +#, 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:59 core/views/forms.py:62 +msgid "Choose file" +msgstr "Choisir un fichier" + +#: core/views/forms.py:73 core/views/forms.py:76 +msgid "Choose user" +msgstr "Choisir un utilisateur" + +#: core/views/forms.py:98 +msgid "Username, email, or account number" +msgstr "Nom d'utilisateur, email, ou numéro de compte AE" + +#: core/views/forms.py:140 +msgid "" +"Profile: you need to be visible on the picture, in order to be recognized (e." +"g. by the barmen)" +msgstr "" +"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " +"(par exemple par les barmen)" + +#: core/views/forms.py:141 +msgid "Avatar: used on the forum" +msgstr "Avatar : utilisé sur le forum" + +#: core/views/forms.py:142 +msgid "Scrub: let other know how your scrub looks like!" +msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" + +#: core/views/forms.py:186 +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" + +#: core/views/forms.py:203 +msgid "Godfather" +msgstr "Parrain" + +#: core/views/forms.py:203 +msgid "Godchild" +msgstr "Fillot" + +#: core/views/user.py:298 +msgid "User already has a profile picture" +msgstr "L'utilisateur a déjà une photo de profil" + +#: counter/models.py:26 +msgid "account id" +msgstr "numéro de compte" + +#: counter/models.py:30 +msgid "customer" +msgstr "client" + +#: counter/models.py:31 +msgid "customers" +msgstr "clients" + +#: counter/models.py:46 counter/templates/counter/counter_click.jinja:48 +#: counter/templates/counter/counter_click.jinja:82 +msgid "Not enough money" +msgstr "Solde insuffisant" + +#: counter/models.py:67 counter/models.py:89 +msgid "product type" +msgstr "type du produit" + +#: counter/models.py:92 +msgid "purchase price" +msgstr "prix d'achat" + +#: counter/models.py:93 +msgid "selling price" +msgstr "prix de vente" + +#: counter/models.py:94 +msgid "special selling price" +msgstr "prix de vente spécial" + +#: counter/models.py:95 +msgid "icon" +msgstr "icône" + +#: counter/models.py:97 +msgid "limit age" +msgstr "âge limite" + +#: counter/models.py:98 +msgid "tray price" +msgstr "prix plateau" + +#: counter/models.py:99 +msgid "parent product" +msgstr "produit parent" + +#: counter/models.py:101 +msgid "buying groups" +msgstr "groupe d'achat" + +#: counter/models.py:102 +msgid "archived" +msgstr "archivé" + +#: counter/models.py:105 counter/models.py:439 +msgid "product" +msgstr "produit" + +#: counter/models.py:124 +msgid "products" +msgstr "produits" + +#: counter/models.py:125 +msgid "counter type" +msgstr "type de comptoir" + +#: counter/models.py:127 +msgid "Bar" +msgstr "Bar" + +#: counter/models.py:127 +msgid "Office" +msgstr "Bureau" + +#: counter/models.py:127 counter/templates/counter/counter_list.jinja:11 +#: eboutic/templates/eboutic/eboutic_main.jinja:4 +#: 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:279 sith/settings.py:287 +msgid "Eboutic" +msgstr "Eboutic" + +#: counter/models.py:128 +msgid "sellers" +msgstr "vendeurs" + +#: counter/models.py:131 launderette/models.py:125 +msgid "token" +msgstr "jeton" + +#: counter/models.py:134 counter/models.py:340 counter/models.py:357 +#: launderette/models.py:16 stock/models.py:11 +msgid "counter" +msgstr "comptoir" + +#: counter/models.py:232 +msgid "bank" +msgstr "banque" + +#: counter/models.py:234 counter/models.py:275 +msgid "is validated" +msgstr "est validé" + +#: counter/models.py:237 +msgid "refilling" +msgstr "rechargement" + +#: counter/models.py:268 eboutic/models.py:103 +msgid "unit price" +msgstr "prix unitaire" + +#: counter/models.py:269 counter/models.py:429 eboutic/models.py:104 +msgid "quantity" +msgstr "quantité" + +#: counter/models.py:274 +msgid "Sith account" +msgstr "Compte utilisateur" + +#: counter/models.py:274 sith/settings.py:272 sith/settings.py:277 +#: sith/settings.py:299 +msgid "Credit card" +msgstr "Carte bancaire" + +#: counter/models.py:278 +msgid "selling" +msgstr "vente" + +#: counter/models.py:343 +msgid "last activity date" +msgstr "dernière activité" + +#: counter/models.py:346 +msgid "permanency" +msgstr "permanence" + +#: counter/models.py:360 +msgid "emptied" +msgstr "coffre vidée" + +#: counter/models.py:363 +msgid "cash register summary" +msgstr "relevé de caisse" + +#: counter/models.py:427 +msgid "cash summary" +msgstr "relevé" + +#: counter/models.py:428 +msgid "value" +msgstr "valeur" + +#: counter/models.py:430 +msgid "check" +msgstr "chèque" + +#: counter/models.py:433 +msgid "cash register summary item" +msgstr "élément de relevé de caisse" + +#: counter/models.py:440 +msgid "banner" +msgstr "bannière" + +#: counter/models.py:441 +msgid "event date" +msgstr "date de l'événement" + +#: counter/models.py:442 +msgid "event title" +msgstr "titre de l'événement" + +#: counter/models.py:443 +msgid "secret" +msgstr "secret" + +#: counter/templates/counter/activity.jinja:5 +#: counter/templates/counter/activity.jinja:9 +#, python-format +msgid "%(counter_name)s activity" +msgstr "Activité sur %(counter_name)s" + +#: counter/templates/counter/activity.jinja:11 +msgid "Barman list" +msgstr "Barmans" + +#: counter/templates/counter/cash_register_summary.jinja:8 +msgid "Make a cash register summary" +msgstr "Faire un relevé de caisse" + +#: counter/templates/counter/cash_summary_list.jinja:5 +#: counter/templates/counter/cash_summary_list.jinja:10 +msgid "Cash register summary list" +msgstr "Liste des relevés de caisse" + +#: counter/templates/counter/cash_summary_list.jinja:11 +msgid "Theoric sums" +msgstr "Sommes théoriques" + +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:708 +msgid "Emptied" +msgstr "Coffre vidé" + +#: counter/templates/counter/cash_summary_list.jinja:48 +msgid "yes" +msgstr "oui" + +#: counter/templates/counter/cash_summary_list.jinja:59 +msgid "There is no cash register summary in this website." +msgstr "Il n'y a pas de relevé de caisse dans ce site web." + +#: counter/templates/counter/counter_click.jinja:35 +#: launderette/templates/launderette/launderette_admin.jinja:8 +msgid "Selling" +msgstr "Vente" + +#: counter/templates/counter/counter_click.jinja:39 +#: counter/templates/counter/counter_click.jinja:73 +msgid "Too young for that product" +msgstr "Trop jeune pour ce produit" + +#: counter/templates/counter/counter_click.jinja:42 +#: counter/templates/counter/counter_click.jinja:76 +msgid "Not allowed for that product" +msgstr "Non autorisé pour ce produit" + +#: counter/templates/counter/counter_click.jinja:45 +#: counter/templates/counter/counter_click.jinja:79 +msgid "No date of birth provided" +msgstr "Pas de date de naissance renseigné" + +#: counter/templates/counter/counter_click.jinja:55 +#: counter/templates/counter/counter_click.jinja:103 +#: counter/templates/counter/invoices_call.jinja:16 +#: launderette/templates/launderette/launderette_admin.jinja:35 +#: launderette/templates/launderette/launderette_click.jinja:13 +msgid "Go" +msgstr "Valider" + +#: counter/templates/counter/counter_click.jinja:57 +#: eboutic/templates/eboutic/eboutic_main.jinja:27 +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 +msgid "Basket: " +msgstr "Panier : " + +#: counter/templates/counter/counter_click.jinja:88 +msgid "Finish" +msgstr "Terminer" + +#: counter/templates/counter/counter_click.jinja:97 +msgid "Refilling" +msgstr "Rechargement" + +#: counter/templates/counter/counter_list.jinja:4 +#: counter/templates/counter/counter_list.jinja:10 +msgid "Counter admin list" +msgstr "Liste des comptoirs" + +#: counter/templates/counter/counter_list.jinja:8 +msgid "New counter" +msgstr "Nouveau comptoir" + +#: counter/templates/counter/counter_list.jinja:26 +msgid "Bars" +msgstr "Bars" + +#: counter/templates/counter/counter_list.jinja:37 +msgid "Create new stock" +msgstr "Créer un nouveau stock" + +#: counter/templates/counter/counter_list.jinja:46 +msgid "Offices" +msgstr "Bureaux" + +#: counter/templates/counter/counter_list.jinja:62 +msgid "There is no counters in this website." +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:16 +#: launderette/templates/launderette/launderette_click.jinja:8 +#, python-format +msgid "%(counter_name)s counter" +msgstr "Comptoir %(counter_name)s" + +#: counter/templates/counter/counter_main.jinja:21 +msgid "Last selling: " +msgstr "Dernière vente : " + +#: counter/templates/counter/counter_main.jinja:22 +msgid "Client: " +msgstr "Client : " + +#: counter/templates/counter/counter_main.jinja:22 +msgid "New amount: " +msgstr "Nouveau montant : " + +#: counter/templates/counter/counter_main.jinja:31 +msgid "Enter client code:" +msgstr "Entrez un code client : " + +#: counter/templates/counter/counter_main.jinja:36 +msgid "validate" +msgstr "valider" + +#: counter/templates/counter/counter_main.jinja:39 +msgid "Please, login" +msgstr "Merci de vous identifier" + +#: counter/templates/counter/counter_main.jinja:44 +msgid "Barman: " +msgstr "Barman : " + +#: counter/templates/counter/eticket_list.jinja:4 +#: counter/templates/counter/eticket_list.jinja:10 +msgid "Eticket list" +msgstr "Liste des etickets" + +#: counter/templates/counter/eticket_list.jinja:8 +msgid "New eticket" +msgstr "Nouveau eticket" + +#: counter/templates/counter/eticket_list.jinja:17 +msgid "There is no eticket in this website." +msgstr "Il n'y a pas de eticket sur ce site web." + +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:470 +msgid "Invoices call" +msgstr "Appels à facture" + +#: counter/templates/counter/invoices_call.jinja:8 +#, python-format +msgid "Invoices call for %(date)s" +msgstr "Appels à facture pour %(date)s" + +#: counter/templates/counter/invoices_call.jinja:9 +msgid "Choose another month: " +msgstr "Choisir un autre mois : " + +#: counter/templates/counter/invoices_call.jinja:21 +msgid "Sum" +msgstr "Somme" + +#: counter/templates/counter/last_ops.jinja:5 +#: counter/templates/counter/last_ops.jinja:9 +#, python-format +msgid "%(counter_name)s last operations" +msgstr "Dernières opérations sur %(counter_name)s" + +#: counter/templates/counter/product_list.jinja:4 +#: counter/templates/counter/product_list.jinja:12 +msgid "Product list" +msgstr "Liste des produits" + +#: counter/templates/counter/product_list.jinja:9 +msgid "New product" +msgstr "Nouveau produit" + +#: counter/templates/counter/product_list.jinja:21 +msgid "Uncategorized" +msgstr "Sans catégorie" + +#: counter/templates/counter/product_list.jinja:28 +msgid "There is no products in this website." +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:10 +msgid "Product type list" +msgstr "Liste des types de produit" + +#: counter/templates/counter/producttype_list.jinja:8 +msgid "New product type" +msgstr "Nouveau type de produit" + +#: counter/templates/counter/producttype_list.jinja:17 +msgid "There is no product types in this website." +msgstr "Il n'y a pas de types de produit dans ce site web." + +#: counter/templates/counter/stats.jinja:5 +#: counter/templates/counter/stats.jinja:9 +#, python-format +msgid "%(counter_name)s stats" +msgstr "Stats sur %(counter_name)s" + +#: counter/templates/counter/stats.jinja:10 +#, python-format +msgid "Top 100 %(counter_name)s" +msgstr "Top 100 %(counter_name)s" + +#: counter/templates/counter/stats.jinja:16 +msgid "Promo" +msgstr "Promo" + +#: counter/templates/counter/stats.jinja:19 +msgid "Percentage" +msgstr "Pourcentage" + +#: counter/views.py:55 +msgid "User not found" +msgstr "Utilisateur non trouvé" + +#: counter/views.py:81 +msgid "Cash summary" +msgstr "Relevé de caisse" + +#: counter/views.py:86 +msgid "Last operations" +msgstr "Dernières opérations" + +#: counter/views.py:120 +msgid "Bad credentials" +msgstr "Mauvais identifiants" + +#: counter/views.py:122 +msgid "User is not barman" +msgstr "L'utilisateur n'est pas barman." + +#: counter/views.py:126 +msgid "Bad location, someone is already logged in somewhere else" +msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" + +#: counter/views.py:310 +msgid "END" +msgstr "FIN" + +#: counter/views.py:312 +msgid "CAN" +msgstr "ANN" + +#: counter/views.py:342 +msgid "You have not enough money to buy all the basket" +msgstr "Vous n'avez pas assez d'argent pour acheter le panier" + +#: counter/views.py:435 +msgid "Counter administration" +msgstr "Administration des comptoirs" + +#: counter/views.py:440 +msgid "Stocks" +msgstr "" + +#: counter/views.py:450 +msgid "Products" +msgstr "Produits" + +#: counter/views.py:455 +msgid "Archived products" +msgstr "Produits archivés" + +#: counter/views.py:460 +msgid "Product types" +msgstr "Types de produit" + +#: counter/views.py:591 +msgid "Parent product" +msgstr "Produit parent" + +#: counter/views.py:592 +msgid "Buying groups" +msgstr "Groupes d'achat" + +#: counter/views.py:687 +msgid "10 cents" +msgstr "10 centimes" + +#: counter/views.py:688 +msgid "20 cents" +msgstr "20 centimes" + +#: counter/views.py:689 +msgid "50 cents" +msgstr "50 centimes" + +#: counter/views.py:690 +msgid "1 euro" +msgstr "1 €" + +#: counter/views.py:691 +msgid "2 euros" +msgstr "2 €" + +#: counter/views.py:692 +msgid "5 euros" +msgstr "5 €" + +#: counter/views.py:693 +msgid "10 euros" +msgstr "10 €" + +#: counter/views.py:694 +msgid "20 euros" +msgstr "20 €" + +#: counter/views.py:695 +msgid "50 euros" +msgstr "50 €" + +#: counter/views.py:696 +msgid "100 euros" +msgstr "100 €" + +#: counter/views.py:697 counter/views.py:699 counter/views.py:701 +#: counter/views.py:703 counter/views.py:705 +msgid "Check amount" +msgstr "Montant du chèque" + +#: counter/views.py:698 counter/views.py:700 counter/views.py:702 +#: counter/views.py:704 counter/views.py:706 +msgid "Check quantity" +msgstr "Nombre de chèque" + +#: eboutic/models.py:49 +msgid "validated" +msgstr "validé" + +#: eboutic/models.py:62 +msgid "Invoice already validated" +msgstr "Facture déjà validée" + +#: eboutic/models.py:100 +msgid "product id" +msgstr "ID du produit" + +#: eboutic/models.py:101 +msgid "product name" +msgstr "nom du produit" + +#: eboutic/models.py:102 +msgid "product type id" +msgstr "id du type du produit" + +#: eboutic/models.py:113 +msgid "basket" +msgstr "panier" + +#: eboutic/templates/eboutic/eboutic_main.jinja:37 +msgid "Proceed to command" +msgstr "Procéder à la commande" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4 +msgid "Basket state" +msgstr "État du panier" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:35 +msgid "Pay with credit card" +msgstr "Payer avec une carte bancaire" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:38 +msgid "" +"AE account payment disabled because your basket contains refilling items." +msgstr "" +"Paiement par compte AE désactivé parce que votre panier contient des bons de " +"rechargement." + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:43 +msgid "Pay with Sith account" +msgstr "Payer avec un compte AE" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:8 +msgid "Payment failed" +msgstr "Le paiement a échoué" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:10 +msgid "Payment successful" +msgstr "Le paiement a été effectué" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:12 +msgid "Return to eboutic" +msgstr "Retourner à l'eboutic" + +#: eboutic/views.py:140 +msgid "You do not have enough money to buy the basket" +msgstr "Vous n'avez pas assez d'argent pour acheter le panier" + +#: launderette/models.py:19 +#: launderette/templates/launderette/launderette_book.jinja:5 +#: launderette/templates/launderette/launderette_book_choose.jinja:4 +#: launderette/templates/launderette/launderette_main.jinja:4 +msgid "Launderette" +msgstr "Laverie" + +#: launderette/models.py:61 launderette/models.py:86 +msgid "launderette" +msgstr "laverie" + +#: launderette/models.py:62 launderette/models.py:87 launderette/models.py:123 +msgid "type" +msgstr "type" + +#: launderette/models.py:63 +msgid "is working" +msgstr "fonctionne" + +#: launderette/models.py:66 +msgid "Machine" +msgstr "Machine" + +#: launderette/models.py:88 +msgid "borrow date" +msgstr "date d'emprunt" + +#: launderette/models.py:92 +msgid "Token" +msgstr "Jeton" + +#: launderette/models.py:98 +msgid "Token name can not be blank" +msgstr "Le nom du jeton ne peut pas être vide" + +#: launderette/models.py:124 +msgid "machine" +msgstr "machine" + +#: launderette/templates/launderette/launderette_admin.jinja:4 +msgid "Launderette admin" +msgstr "Gestion de la laverie" + +#: launderette/templates/launderette/launderette_admin.jinja:9 +msgid "Sell" +msgstr "Vendre" + +#: launderette/templates/launderette/launderette_admin.jinja:11 +msgid "Machines" +msgstr "Machines" + +#: launderette/templates/launderette/launderette_admin.jinja:12 +msgid "New machine" +msgstr "Nouvelle machine" + +#: launderette/templates/launderette/launderette_admin.jinja:42 +#: launderette/views.py:148 +msgid "Type" +msgstr "Type" + +#: launderette/templates/launderette/launderette_book.jinja:12 +msgid "Choose" +msgstr "Choisir" + +#: launderette/templates/launderette/launderette_book.jinja:23 +msgid "Washing and drying" +msgstr "Lavage et séchage" + +#: launderette/templates/launderette/launderette_book.jinja:27 +#: sith/settings.py:416 +msgid "Washing" +msgstr "Lavage" + +#: launderette/templates/launderette/launderette_book.jinja:31 +#: sith/settings.py:416 +msgid "Drying" +msgstr "Séchage" + +#: launderette/templates/launderette/launderette_list.jinja:4 +#: launderette/templates/launderette/launderette_list.jinja:12 +msgid "Launderette admin list" +msgstr "Liste des laveries" + +#: launderette/templates/launderette/launderette_list.jinja:9 +msgid "New launderette" +msgstr "Nouvelle laverie" + +#: launderette/templates/launderette/launderette_list.jinja:20 +msgid "There is no launderette in this website." +msgstr "Il n'y a pas de laverie dans ce site web." + +#: launderette/templates/launderette/launderette_main.jinja:9 +msgid "Edit presentation page" +msgstr "Éditer la page de présentation" + +#: launderette/templates/launderette/launderette_main.jinja:12 +msgid "Book launderette slot" +msgstr "Réserver un créneau de laverie" + +#: launderette/views.py:147 +msgid "Action" +msgstr "Action" + +#: launderette/views.py:150 +msgid "Tokens, separated by spaces" +msgstr "Jetons, séparés par des espaces" + +#: launderette/views.py:165 launderette/views.py:179 +#, python-format +msgid "Token %(token_name)s does not exists" +msgstr "Le jeton %(token_name)s n'existe pas" + +#: launderette/views.py:173 +#, python-format +msgid "Token %(token_name)s already exists" +msgstr "Un jeton %(token_name)s existe déjà" + +#: launderette/views.py:229 +msgid "User has booked no slot" +msgstr "L'utilisateur n'a pas réservé de créneau" + +#: launderette/views.py:319 +msgid "Token not found" +msgstr "Jeton non trouvé" + +#: rootplace/templates/rootplace/merge.jinja:8 +msgid "Merge two users" +msgstr "Fusionner deux utilisateurs" + +#: rootplace/templates/rootplace/merge.jinja:12 +msgid "Merge" +msgstr "Fusion" + +#: rootplace/views.py:66 +msgid "User that will be kept" +msgstr "Utilisateur qui sera conservé" + +#: rootplace/views.py:67 +msgid "User that will be deleted" +msgstr "Utilisateur qui sera supprimé" + +#: sith/settings.py:166 +msgid "English" +msgstr "Anglais" + +#: sith/settings.py:167 +msgid "French" +msgstr "Français" + +#: sith/settings.py:269 sith/settings.py:276 sith/settings.py:297 +msgid "Check" +msgstr "Chèque" + +#: sith/settings.py:270 sith/settings.py:278 sith/settings.py:298 +msgid "Cash" +msgstr "Espèces" + +#: sith/settings.py:271 +msgid "Transfert" +msgstr "Virement" + +#: sith/settings.py:284 +msgid "Belfort" +msgstr "Belfort" + +#: sith/settings.py:285 +msgid "Sevenans" +msgstr "Sevenans" + +#: sith/settings.py:286 +msgid "Montbéliard" +msgstr "Montbéliard" + +#: sith/settings.py:326 +msgid "One semester" +msgstr "Un semestre, 15 €" + +#: sith/settings.py:331 +msgid "Two semesters" +msgstr "Deux semestres, 28 €" + +#: sith/settings.py:336 +msgid "Common core cursus" +msgstr "Cursus tronc commun, 45 €" + +#: sith/settings.py:341 +msgid "Branch cursus" +msgstr "Cursus branche, 45 €" + +#: sith/settings.py:346 +msgid "Alternating cursus" +msgstr "Cursus alternant, 30 €" + +#: sith/settings.py:351 +msgid "Honorary member" +msgstr "Membre honoraire, 0 €" + +#: sith/settings.py:356 +msgid "Assidu member" +msgstr "Membre d'Assidu, 0 €" + +#: sith/settings.py:361 +msgid "Amicale/DOCEO member" +msgstr "Membre de l'Amicale/DOCEO, 0 €" + +#: sith/settings.py:366 +msgid "UT network member" +msgstr "Cotisant du réseau UT, 0 €" + +#: sith/settings.py:371 +msgid "CROUS member" +msgstr "Membres du CROUS, 0 €" + +#: sith/settings.py:376 +msgid "Sbarro/ESTA member" +msgstr "Membre de Sbarro ou de l'ESTA, 15 €" + +#: sith/settings.py:384 +msgid "President" +msgstr "Président" + +#: sith/settings.py:385 +msgid "Vice-President" +msgstr "Vice-Président" + +#: sith/settings.py:386 +msgid "Treasurer" +msgstr "Trésorier" + +#: sith/settings.py:387 +msgid "Communication supervisor" +msgstr "Responsable com" + +#: sith/settings.py:388 +msgid "Secretary" +msgstr "Secrétaire" + +#: sith/settings.py:389 +msgid "IT supervisor" +msgstr "Responsable info" + +#: sith/settings.py:390 +msgid "Board member" +msgstr "Membre du bureau" + +#: sith/settings.py:391 +msgid "Active member" +msgstr "Membre actif" + +#: sith/settings.py:392 +msgid "Curious" +msgstr "Curieux" + +#: stock/models.py:22 +msgid "unit quantity" +msgstr "Unité de quantité" + +#: stock/models.py:23 +msgid "effective quantity" +msgstr "Quantité actuelle" + +#: stock/templates/stock/stock_list.jinja:4 +#: stock/templates/stock/stock_list.jinja:9 +msgid "Stock list" +msgstr "Liste des stocks" + +#: stock/templates/stock/stock_list.jinja:21 +msgid "There is no stocks in this website." +msgstr "Il n'y a pas de stock sur ce site web." + +#: stock/templates/stock/stock_main.jinja:9 +msgid "New Item" +msgstr "Nouvel élément" + +#: subscription/models.py:16 +msgid "Bad subscription type" +msgstr "Mauvais type de cotisation" + +#: subscription/models.py:20 +msgid "Bad payment method" +msgstr "Mauvais type de paiement" + +#: subscription/models.py:52 +msgid "subscription type" +msgstr "type d'inscription" + +#: subscription/models.py:55 +msgid "subscription start" +msgstr "début de la cotisation" + +#: subscription/models.py:56 +msgid "subscription end" +msgstr "fin de la cotisation" + +#: subscription/models.py:59 +msgid "location" +msgstr "lieu" + +#: subscription/models.py:68 +msgid "You can not subscribe many time for the same period" +msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" + +#: subscription/models.py:72 +msgid "Subscription error" +msgstr "Erreur de cotisation" + +#: subscription/views.py:54 +msgid "A user with that email address already exists" +msgstr "Un utilisateur avec cette adresse email existe déjà" + +#: subscription/views.py:70 +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 "Download as cvs" +#~ msgstr "Télécharger en csv" + +#, fuzzy +#~| msgid "Select user" +#~ msgid "lock user" +#~ msgstr "Choisir un utilisateur" + +#~ msgid "Unknown event" +#~ msgstr "Événement inconnu" + +#~ msgid "Eticket bought for the event %(event)s" +#~ msgstr "Eticket acheté pour l'événement %(event)s" + +#~ msgid "" +#~ "You bought an eticket for the event %(event)s.\n" +#~ "You can download it on this page %(url)s." +#~ msgstr "" +#~ "Vous avez acheté un Eticket pour l'événement %(event)s.\n" +#~ "Vous pouvez le télécharger sur cette page: %(url)s" + +#~ msgid "people(s)" +#~ msgstr "personne(s)" diff --git a/stock/models.py b/stock/models.py index 7c769679..50336f72 100644 --- a/stock/models.py +++ b/stock/models.py @@ -1,5 +1,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse + from counter.models import Counter @@ -11,6 +13,9 @@ class Stock(models.Model): def __str__(self): return "%s (%s)" % (self.name, self.counter) + def get_absolute_url(self): + return reverse('stock:list') + class StockItem(models.Model): """ The StockItem class, element of the stock """ name = models.CharField(_('name'), max_length=64) diff --git a/stock/templates/stock/stock_list.jinja b/stock/templates/stock/stock_list.jinja new file mode 100644 index 00000000..0b3b6122 --- /dev/null +++ b/stock/templates/stock/stock_list.jinja @@ -0,0 +1,23 @@ +{% extends "core/base.jinja" %} + +{% block title %} +{% trans %}Stock list{% endtrans %} +{% endblock %} + +{% block content %} +{% if stock_list %} +

{% trans %}Stock list{% endtrans %}

+
    + {% for s in stock_list.order_by('name') %} +
  • + {% if user.can_edit(s) %} + {{s}} + - Edit + {% endif %} +
  • + {% endfor %} +
+{% else %} +{% trans %}There is no stocks in this website.{% endtrans %} +{% endif %} +{% endblock %} diff --git a/stock/templates/stock/stock_main.jinja b/stock/templates/stock/stock_main.jinja index 3cf56022..9c585863 100644 --- a/stock/templates/stock/stock_main.jinja +++ b/stock/templates/stock/stock_main.jinja @@ -6,6 +6,6 @@ {% block content %}

{{stock}}

-{{stock.name}} +{% trans %}New Item{% endtrans %} {% endblock %} diff --git a/stock/urls.py b/stock/urls.py index 0f5ae091..e824f657 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -5,5 +5,7 @@ from stock.views import * urlpatterns = [ url(r'^(?P[0-9]+)$', StockMain.as_view(), name='main'), url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), + url(r'^edit/(?P[0-9]+)$', StockEditView.as_view(), name='edit'), + url(r'^list$', StockListView.as_view(), name='list'), url(r'^(?P[0-9]+)/newItem$', StockItemCreateView.as_view(), name='new_item'), ] diff --git a/stock/views.py b/stock/views.py index c60c3528..a2e4cbdc 100644 --- a/stock/views.py +++ b/stock/views.py @@ -1,24 +1,85 @@ from django.shortcuts import render from django.views.generic import ListView, DetailView, RedirectView, TemplateView from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin +from django.utils.translation import ugettext_lazy as _ +from django import forms +from django.forms.models import modelform_factory +from django.core.urlresolvers import reverse_lazy, reverse -from stock.models import Stock -class StockMain(DetailView): +from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin +from counter.views import CounterAdminTabsMixin +from counter.models import Counter +from stock.models import Stock, StockItem + + + +class StockMain(CounterAdminTabsMixin, CanCreateMixin, DetailView): """ - The stock view for the counter owner + The stock view for the counter owner """ model = Stock template_name = 'stock/stock_main.jinja' pk_url_kwarg = "stock_id" + current_tab = "stocks" -class StockCreateView(CreateView): +class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ - docstring for StockCreateView + A list view for the admins """ + model = Stock + template_name = 'stock/stock_list.jinja' + current_tab = "stocks" -class StockItemCreateView(CreateView): + +class StockEditForm(forms.ModelForm): """ + docstring for StockEditForm"forms.ModelForm + """ + class Meta: + model = Stock + fields = ['name'] + + def __init__(self, *args, **kwargs): + super(StockEditForm, self).__init__(*args, **kwargs) + + def save(self, *args, **kwargs): + return super(StockEditForm, self).save(*args, **kwargs) + + +class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): + """ + A edit view for the stock + """ + model = Stock + form_class = StockEditForm + pk_url_kwarg = "stock_id" + template_name = 'core/edit.jinja' + current_tab = "stocks" + + +class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): + """ + A create view for a new Stock + """ + model = Stock + form_class = modelform_factory(Stock, fields=['name', 'counter']) + template_name = 'core/create.jinja' + pk_url_kwarg = "counter_id" + current_tab = "stocks" + success_url = reverse_lazy('stock:list') + + +class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): + """ + A create view for a new StockItem + """ + model = StockItem + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'stock_owner']) + template_name = 'core/create.jinja' + pk_url_kwarg = "stock_id" + current_tab = "stocks" - """ \ No newline at end of file + def get_success_url(self): + return reverse_lazy('stock:main', kwargs={'stock_id': self.object.stock_owner.id}) From 587ad96326a7d3519cf522ebb01000a0393e7cfa Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Fri, 11 Nov 2016 16:55:52 +0100 Subject: [PATCH 07/27] Initial StockItem create form value addition --- stock/views.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/stock/views.py b/stock/views.py index a2e4cbdc..6a3c8a86 100644 --- a/stock/views.py +++ b/stock/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render +from django.shortcuts import render, get_object_or_404 from django.views.generic import ListView, DetailView, RedirectView, TemplateView from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin from django.utils.translation import ugettext_lazy as _ @@ -39,7 +39,7 @@ class StockEditForm(forms.ModelForm): """ class Meta: model = Stock - fields = ['name'] + fields = ['name', 'counter'] def __init__(self, *args, **kwargs): super(StockEditForm, self).__init__(*args, **kwargs) @@ -80,6 +80,12 @@ class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): template_name = 'core/create.jinja' pk_url_kwarg = "stock_id" current_tab = "stocks" - + + def get_initial(self): + ret = super(StockItemCreateView, self).get_initial() + if 'stock' in self.request.GET.keys(): + ret['stock_owner'] = self.request.GET['stock'] + return ret + def get_success_url(self): return reverse_lazy('stock:main', kwargs={'stock_id': self.object.stock_owner.id}) From 5cb75ec3ebf661d0677d5fe1cc3c97eb59d8bc34 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Mon, 14 Nov 2016 00:38:33 +0100 Subject: [PATCH 08/27] general modifications --- counter/templates/counter/counter_list.jinja | 4 +-- stock/migrations/0002_auto_20161113_2325.py | 31 ++++++++++++++++++++ stock/models.py | 18 ++++++++---- stock/templates/stock/stock_item_list.jinja | 15 ++++++++++ stock/templates/stock/stock_list.jinja | 2 +- stock/urls.py | 7 +++-- stock/views.py | 22 ++++++++++---- 7 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 stock/migrations/0002_auto_20161113_2325.py create mode 100644 stock/templates/stock/stock_item_list.jinja diff --git a/counter/templates/counter/counter_list.jinja b/counter/templates/counter/counter_list.jinja index 0dc72d1f..5ecdf358 100644 --- a/counter/templates/counter/counter_list.jinja +++ b/counter/templates/counter/counter_list.jinja @@ -32,9 +32,9 @@ {% trans %}Edit{% endtrans %} - {% trans %}Stats{% endtrans %} - {%if c.stock %} - Stock - + Stock - {% else %} - {% trans %}Create new stock{% endtrans%} - + {% trans %}Create new stock{% endtrans%} - {% endif %} {% endif %} {% if user.is_owner(c) %} diff --git a/stock/migrations/0002_auto_20161113_2325.py b/stock/migrations/0002_auto_20161113_2325.py new file mode 100644 index 00000000..8f36b593 --- /dev/null +++ b/stock/migrations/0002_auto_20161113_2325.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('counter', '0011_auto_20161004_2039'), + ('stock', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='stockitem', + name='type', + field=models.ForeignKey(to='counter.ProductType', blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='type', related_name='stockItem_type'), + ), + migrations.AlterField( + model_name='stockitem', + name='effective_quantity', + field=models.IntegerField(help_text='total number of bottle/barrel', verbose_name='effective quantity', default=0), + ), + migrations.AlterField( + model_name='stockitem', + name='unit_quantity', + field=models.IntegerField(help_text='number of beer in one crate (equal one for barrels)', verbose_name='unit quantity', default=0), + ), + ] diff --git a/stock/models.py b/stock/models.py index 50336f72..4b2cccfd 100644 --- a/stock/models.py +++ b/stock/models.py @@ -2,11 +2,12 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse - -from counter.models import Counter +from counter.models import Counter, ProductType class Stock(models.Model): - """ The Stock class, this one is used to know how many products are left for a specific counter """ + """ + The Stock class, this one is used to know how many products are left for a specific counter + """ name = models.CharField(_('name'), max_length=64) counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') @@ -17,12 +18,17 @@ class Stock(models.Model): return reverse('stock:list') class StockItem(models.Model): - """ The StockItem class, element of the stock """ + """ + The StockItem class, element of the stock + """ name = models.CharField(_('name'), max_length=64) - unit_quantity = models.IntegerField(_('unit quantity'), default=0) - effective_quantity = models.IntegerField(_('effective quantity'), default=0) + unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text='number of beer in one crate (equal one for barrels)') + effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text='total number of bottle/barrel') + type = models.ForeignKey(ProductType, related_name="stockItem_type", verbose_name=_("type"), null=True, blank=True, + on_delete=models.SET_NULL) stock_owner = models.ForeignKey(Stock, related_name="stock_owner") + def __str__(self): return "%s (%s)" % (self.name, self.stock_owner) diff --git a/stock/templates/stock/stock_item_list.jinja b/stock/templates/stock/stock_item_list.jinja new file mode 100644 index 00000000..77ccab36 --- /dev/null +++ b/stock/templates/stock/stock_item_list.jinja @@ -0,0 +1,15 @@ +{% extends "core/base.jinja" %} + +{% block title %} +{% trans s=stock %}{{stock}}{% endtrans %} +{% endblock %} + +{% block content %} +{% if current_tab == "stocks" %} +

{% trans %}New item{% endtrans %}

+{% endif %} +

{% trans s=stock %}{{stock}}{% endtrans %}

+ + + +{% endblock %} \ No newline at end of file diff --git a/stock/templates/stock/stock_list.jinja b/stock/templates/stock/stock_list.jinja index 0b3b6122..5e3ed145 100644 --- a/stock/templates/stock/stock_list.jinja +++ b/stock/templates/stock/stock_list.jinja @@ -11,7 +11,7 @@ {% for s in stock_list.order_by('name') %}
  • {% if user.can_edit(s) %} - {{s}} + {{s}} - Edit {% endif %}
  • diff --git a/stock/urls.py b/stock/urls.py index e824f657..f5c8e868 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -3,9 +3,12 @@ from django.conf.urls import include, url from stock.views import * urlpatterns = [ - url(r'^(?P[0-9]+)$', StockMain.as_view(), name='main'), +#Stock urls url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), url(r'^edit/(?P[0-9]+)$', StockEditView.as_view(), name='edit'), url(r'^list$', StockListView.as_view(), name='list'), - url(r'^(?P[0-9]+)/newItem$', StockItemCreateView.as_view(), name='new_item'), + +# StockItem urls + url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), + url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), ] diff --git a/stock/views.py b/stock/views.py index 6a3c8a86..2d259dcf 100644 --- a/stock/views.py +++ b/stock/views.py @@ -6,8 +6,6 @@ from django import forms from django.forms.models import modelform_factory from django.core.urlresolvers import reverse_lazy, reverse - - from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin from counter.views import CounterAdminTabsMixin from counter.models import Counter @@ -19,11 +17,17 @@ class StockMain(CounterAdminTabsMixin, CanCreateMixin, DetailView): """ The stock view for the counter owner """ - model = Stock - template_name = 'stock/stock_main.jinja' + model = StockItem + template_name = 'stock/stock_item_list.jinja' pk_url_kwarg = "stock_id" current_tab = "stocks" + def get_context_data(self, **kwargs): + context = super(StockItemList, self).get_context_data(**kwargs) + if 'stock' in self.request.GET.keys(): + context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() + return context + class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ A list view for the admins @@ -70,13 +74,19 @@ class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): current_tab = "stocks" success_url = reverse_lazy('stock:list') - + def get_initial(self): + ret = super(StockCreateView, self).get_initial() + if 'counter' in self.request.GET.keys(): + ret['counter'] = self.request.GET['counter'] + return ret + class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): """ A create view for a new StockItem """ + model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'stock_owner']) + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'type', 'stock_owner']) template_name = 'core/create.jinja' pk_url_kwarg = "stock_id" current_tab = "stocks" From 6c54b246ca7415726d73436a4c757abf5c831450 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 16 Nov 2016 17:17:17 +0100 Subject: [PATCH 09/27] Stock admin gestion, items list views, create and edit items --- counter/templates/counter/counter_list.jinja | 4 +- locale/fr/LC_MESSAGES/django.po | 2862 ------------------ stock/migrations/0003_auto_20161116_1338.py | 35 + stock/models.py | 12 +- stock/templates/stock/stock_item_list.jinja | 27 +- stock/templates/stock/stock_list.jinja | 2 +- stock/urls.py | 2 + stock/views.py | 41 +- 8 files changed, 95 insertions(+), 2890 deletions(-) delete mode 100644 locale/fr/LC_MESSAGES/django.po create mode 100644 stock/migrations/0003_auto_20161116_1338.py diff --git a/counter/templates/counter/counter_list.jinja b/counter/templates/counter/counter_list.jinja index 5ecdf358..fc3ca1b0 100644 --- a/counter/templates/counter/counter_list.jinja +++ b/counter/templates/counter/counter_list.jinja @@ -32,9 +32,9 @@ {% trans %}Edit{% endtrans %} - {% trans %}Stats{% endtrans %} - {%if c.stock %} - Stock - + Stock - {% else %} - {% trans %}Create new stock{% endtrans%} - + {% trans %}Create new stock{% endtrans%} - {% endif %} {% endif %} {% if user.is_owner(c) %} diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 27709b3a..00000000 --- a/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,2862 +0,0 @@ -# Sith AE french translation file -# Copyright (C) 2016 -# This file is distributed under the same license as the Sith package. -# Skia , 2016 -# -msgid "" -msgstr "" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-09 17:43+0100\n" -"PO-Revision-Date: 2016-07-18\n" -"Last-Translator: Skia \n" -"Language-Team: AE info \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: accounting/models.py:36 accounting/models.py:55 accounting/models.py:82 -#: accounting/models.py:141 club/models.py:19 counter/models.py:62 -#: counter/models.py:87 counter/models.py:122 launderette/models.py:15 -#: launderette/models.py:60 launderette/models.py:85 stock/models.py:10 -#: stock/models.py:21 -msgid "name" -msgstr "nom" - -#: accounting/models.py:37 -msgid "street" -msgstr "rue" - -#: accounting/models.py:38 -msgid "city" -msgstr "ville" - -#: accounting/models.py:39 -msgid "postcode" -msgstr "code postal" - -#: accounting/models.py:40 -msgid "country" -msgstr "pays" - -#: accounting/models.py:41 core/models.py:166 -msgid "phone" -msgstr "téléphone" - -#: accounting/models.py:42 -msgid "email" -msgstr "email" - -#: accounting/models.py:43 -msgid "website" -msgstr "site internet" - -#: accounting/models.py:46 -msgid "company" -msgstr "entreprise" - -#: accounting/models.py:56 -msgid "iban" -msgstr "IBAN" - -#: accounting/models.py:57 -msgid "account number" -msgstr "numero de compte" - -#: accounting/models.py:58 accounting/models.py:83 club/models.py:145 -#: counter/models.py:96 counter/models.py:123 -msgid "club" -msgstr "club" - -#: accounting/models.py:61 -msgid "Bank account" -msgstr "Compte en banque" - -#: accounting/models.py:84 -msgid "bank account" -msgstr "compte en banque" - -#: accounting/models.py:87 -msgid "Club account" -msgstr "Compte club" - -#: accounting/models.py:132 -#, python-format -msgid "%(club_account)s on %(bank_account)s" -msgstr "%(club_account)s sur %(bank_account)s" - -#: accounting/models.py:139 club/models.py:146 counter/models.py:341 -#: launderette/models.py:122 -msgid "start date" -msgstr "date de début" - -#: accounting/models.py:140 club/models.py:147 counter/models.py:342 -msgid "end date" -msgstr "date de fin" - -#: accounting/models.py:142 -msgid "is closed" -msgstr "est fermé" - -#: accounting/models.py:143 accounting/models.py:346 -msgid "club account" -msgstr "compte club" - -#: accounting/models.py:144 accounting/models.py:190 counter/models.py:27 -#: counter/models.py:226 -msgid "amount" -msgstr "montant" - -#: accounting/models.py:145 -msgid "effective_amount" -msgstr "montant effectif" - -#: accounting/models.py:148 -msgid "General journal" -msgstr "Classeur" - -#: accounting/models.py:188 -msgid "number" -msgstr "numéro" - -#: accounting/models.py:189 -msgid "journal" -msgstr "classeur" - -#: accounting/models.py:191 core/models.py:479 core/models.py:757 -#: counter/models.py:229 counter/models.py:272 counter/models.py:358 -#: eboutic/models.py:15 eboutic/models.py:48 -msgid "date" -msgstr "date" - -#: accounting/models.py:192 counter/models.py:359 -msgid "comment" -msgstr "commentaire" - -#: accounting/models.py:193 counter/models.py:230 counter/models.py:273 -#: subscription/models.py:57 -msgid "payment method" -msgstr "méthode de paiement" - -#: accounting/models.py:194 -msgid "cheque number" -msgstr "numéro de chèque" - -#: accounting/models.py:195 eboutic/models.py:116 -msgid "invoice" -msgstr "facture" - -#: accounting/models.py:196 -msgid "is done" -msgstr "est fait" - -#: accounting/models.py:198 -msgid "simple type" -msgstr "type simplifié" - -#: accounting/models.py:200 accounting/models.py:301 -msgid "accounting type" -msgstr "type comptable" - -#: accounting/models.py:202 accounting/models.py:296 accounting/models.py:322 -#: accounting/models.py:345 counter/models.py:264 -msgid "label" -msgstr "intitulé" - -#: accounting/models.py:203 -msgid "target type" -msgstr "type de cible" - -#: accounting/models.py:204 club/templates/club/club_members.jinja:8 -#: club/templates/club/club_old_members.jinja:8 -#: core/templates/core/user_clubs.jinja:15 -#: core/templates/core/user_clubs.jinja:41 -#: counter/templates/counter/cash_summary_list.jinja:32 -#: counter/templates/counter/stats.jinja:15 -#: launderette/templates/launderette/launderette_admin.jinja:44 -msgid "User" -msgstr "Utilisateur" - -#: accounting/models.py:204 club/templates/club/club_detail.jinja:5 -#: counter/templates/counter/invoices_call.jinja:20 -msgid "Club" -msgstr "Club" - -#: accounting/models.py:204 core/views/user.py:174 -msgid "Account" -msgstr "Compte" - -#: accounting/models.py:204 -msgid "Company" -msgstr "Entreprise" - -#: accounting/models.py:204 sith/settings.py:280 -msgid "Other" -msgstr "Autre" - -#: accounting/models.py:205 -msgid "target id" -msgstr "id de la cible" - -#: accounting/models.py:206 -msgid "target label" -msgstr "nom de la cible" - -#: accounting/models.py:207 -msgid "linked operation" -msgstr "opération liée" - -#: accounting/models.py:223 -#, python-format -msgid "" -"The date can not be before the start date of the journal, which is\n" -"%(start_date)s." -msgstr "" -"La date ne peut pas être avant la date de début du journal, qui est\n" -"%(start_date)s." - -#: accounting/models.py:226 -msgid "Target does not exists" -msgstr "La cible n'existe pas." - -#: accounting/models.py:228 -msgid "Please add a target label if you set no existing target" -msgstr "" -"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" - -#: accounting/models.py:230 -msgid "" -"You need to provide ether a simplified accounting type or a standard " -"accounting type" -msgstr "" -"Vous devez fournir soit un type comptable simplifié ou un type comptable " -"standard" - -#: accounting/models.py:291 counter/models.py:91 -msgid "code" -msgstr "code" - -#: accounting/models.py:293 -msgid "An accounting type code contains only numbers" -msgstr "Un code comptable ne contient que des numéros" - -#: accounting/models.py:297 -msgid "movement type" -msgstr "type de mouvement" - -#: accounting/models.py:297 -msgid "Credit" -msgstr "Crédit" - -#: accounting/models.py:297 -msgid "Debit" -msgstr "Débit" - -#: accounting/models.py:298 -msgid "Neutral" -msgstr "Neutre" - -#: accounting/models.py:324 -msgid "simplified accounting types" -msgstr "type simplifié" - -#: accounting/models.py:327 -msgid "simplified type" -msgstr "type simplifié" - -#: accounting/templates/accounting/accountingtype_list.jinja:4 -#: accounting/templates/accounting/accountingtype_list.jinja:15 -msgid "Accounting type list" -msgstr "Liste des types comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:9 -#: accounting/templates/accounting/bank_account_details.jinja:9 -#: accounting/templates/accounting/bank_account_list.jinja:9 -#: accounting/templates/accounting/club_account_details.jinja:9 -#: accounting/templates/accounting/journal_details.jinja:9 -#: accounting/templates/accounting/label_list.jinja:9 -#: accounting/templates/accounting/operation_edit.jinja:9 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 -#: core/templates/core/user_tools.jinja:42 -msgid "Accounting" -msgstr "Comptabilité" - -#: accounting/templates/accounting/accountingtype_list.jinja:10 -msgid "Accounting types" -msgstr "Type comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:13 -msgid "New accounting type" -msgstr "Nouveau type comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:22 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:22 -msgid "There is no types in this website." -msgstr "Il n'y a pas de types comptable dans ce site web." - -#: accounting/templates/accounting/bank_account_details.jinja:4 -#: accounting/templates/accounting/bank_account_details.jinja:13 -#: core/templates/core/user_tools.jinja:49 -msgid "Bank account: " -msgstr "Compte en banque : " - -#: accounting/templates/accounting/bank_account_details.jinja:15 -#: accounting/templates/accounting/club_account_details.jinja:16 -#: accounting/templates/accounting/label_list.jinja:21 -#: club/templates/club/club_sellings.jinja:48 -#: core/templates/core/file_detail.jinja:43 -#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66 -#: core/templates/core/user_account_detail.jinja:67 -#: core/templates/core/user_edit.jinja:18 -#: counter/templates/counter/last_ops.jinja:29 -#: counter/templates/counter/last_ops.jinja:59 -#: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:146 -msgid "Delete" -msgstr "Supprimer" - -#: accounting/templates/accounting/bank_account_details.jinja:17 -#: club/views.py:31 core/views/user.py:130 -msgid "Infos" -msgstr "Infos" - -#: accounting/templates/accounting/bank_account_details.jinja:19 -msgid "IBAN: " -msgstr "IBAN : " - -#: accounting/templates/accounting/bank_account_details.jinja:20 -msgid "Number: " -msgstr "Numéro : " - -#: accounting/templates/accounting/bank_account_details.jinja:22 -msgid "New club account" -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:55 -#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:53 -#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 -#: core/templates/core/user_tools.jinja:35 core/views/user.py:147 -#: counter/templates/counter/cash_summary_list.jinja:53 -#: counter/templates/counter/counter_list.jinja:17 -#: counter/templates/counter/counter_list.jinja:32 -#: counter/templates/counter/counter_list.jinja:52 -#: launderette/templates/launderette/launderette_list.jinja:16 -msgid "Edit" -msgstr "Éditer" - -#: accounting/templates/accounting/bank_account_list.jinja:4 -#: accounting/templates/accounting/bank_account_list.jinja:17 -msgid "Bank account list" -msgstr "Liste des comptes en banque" - -#: accounting/templates/accounting/bank_account_list.jinja:12 -msgid "Manage simplified types" -msgstr "Gérer les types simplifiés" - -#: accounting/templates/accounting/bank_account_list.jinja:13 -msgid "Manage accounting types" -msgstr "Gérer les types comptable" - -#: accounting/templates/accounting/bank_account_list.jinja:14 -msgid "New bank account" -msgstr "Nouveau compte en banque" - -#: accounting/templates/accounting/bank_account_list.jinja:26 -msgid "There is no accounts in this website." -msgstr "Il n'y a pas de comptes dans ce site web." - -#: accounting/templates/accounting/club_account_details.jinja:4 -#: accounting/templates/accounting/club_account_details.jinja:14 -msgid "Club account:" -msgstr "Compte club : " - -#: accounting/templates/accounting/club_account_details.jinja:18 -#: accounting/templates/accounting/journal_details.jinja:16 -#: accounting/templates/accounting/label_list.jinja:15 -msgid "New label" -msgstr "Nouvelle étiquette" - -#: accounting/templates/accounting/club_account_details.jinja:19 -#: accounting/templates/accounting/journal_details.jinja:17 -#: accounting/templates/accounting/label_list.jinja:4 -#: accounting/templates/accounting/label_list.jinja:17 -msgid "Label list" -msgstr "Liste des étiquettes" - -#: accounting/templates/accounting/club_account_details.jinja:21 -msgid "New journal" -msgstr "Nouveau classeur" - -#: accounting/templates/accounting/club_account_details.jinja:23 -msgid "You can not create new journal while you still have one opened" -msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" - -#: accounting/templates/accounting/club_account_details.jinja:28 -#: launderette/templates/launderette/launderette_admin.jinja:43 -msgid "Name" -msgstr "Nom" - -#: accounting/templates/accounting/club_account_details.jinja:29 -msgid "Start" -msgstr "Début" - -#: accounting/templates/accounting/club_account_details.jinja:30 -msgid "End" -msgstr "Fin" - -#: accounting/templates/accounting/club_account_details.jinja:31 -#: accounting/templates/accounting/journal_details.jinja:31 -#: core/templates/core/user_account_detail.jinja:20 -#: core/templates/core/user_account_detail.jinja:81 -#: counter/templates/counter/last_ops.jinja:17 -msgid "Amount" -msgstr "Montant" - -#: accounting/templates/accounting/club_account_details.jinja:32 -msgid "Effective amount" -msgstr "Montant effectif" - -#: accounting/templates/accounting/club_account_details.jinja:33 -msgid "Closed" -msgstr "Fermé" - -#: accounting/templates/accounting/club_account_details.jinja:34 -#: accounting/templates/accounting/journal_details.jinja:39 -msgid "Actions" -msgstr "Actions" - -#: accounting/templates/accounting/club_account_details.jinja:50 -#: accounting/templates/accounting/journal_details.jinja:58 -msgid "Yes" -msgstr "Oui" - -#: accounting/templates/accounting/club_account_details.jinja:52 -#: accounting/templates/accounting/journal_details.jinja:60 -msgid "No" -msgstr "Non" - -#: accounting/templates/accounting/club_account_details.jinja:54 -#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 -msgid "View" -msgstr "Voir" - -#: accounting/templates/accounting/journal_details.jinja:4 -#: accounting/templates/accounting/journal_details.jinja:15 -msgid "General journal:" -msgstr "Classeur : " - -#: accounting/templates/accounting/journal_details.jinja:18 -#: core/templates/core/user_account.jinja:36 -#: core/templates/core/user_account_detail.jinja:10 -#: counter/templates/counter/counter_click.jinja:32 -msgid "Amount: " -msgstr "Montant: " - -#: accounting/templates/accounting/journal_details.jinja:19 -msgid "Effective amount: " -msgstr "Montant effectif: " - -#: accounting/templates/accounting/journal_details.jinja:21 -msgid "Journal is closed, you can not create operation" -msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" - -#: accounting/templates/accounting/journal_details.jinja:23 -msgid "New operation" -msgstr "Nouvelle opération" - -#: accounting/templates/accounting/journal_details.jinja:28 -#: counter/templates/counter/stats.jinja:14 -msgid "Nb" -msgstr "No" - -#: accounting/templates/accounting/journal_details.jinja:29 -#: club/templates/club/club_sellings.jinja:18 -#: core/templates/core/user_account_detail.jinja:17 -#: core/templates/core/user_account_detail.jinja:46 -#: core/templates/core/user_account_detail.jinja:79 -#: counter/templates/counter/cash_summary_list.jinja:34 -#: counter/templates/counter/last_ops.jinja:14 -#: counter/templates/counter/last_ops.jinja:39 -msgid "Date" -msgstr "Date" - -#: accounting/templates/accounting/journal_details.jinja:30 -#: club/templates/club/club_sellings.jinja:22 -#: core/templates/core/user_account_detail.jinja:49 -#: counter/templates/counter/last_ops.jinja:42 -msgid "Label" -msgstr "Étiquette" - -#: accounting/templates/accounting/journal_details.jinja:32 -msgid "Payment mode" -msgstr "Méthode de paiement" - -#: accounting/templates/accounting/journal_details.jinja:33 -msgid "Target" -msgstr "Cible" - -#: accounting/templates/accounting/journal_details.jinja:34 -msgid "Code" -msgstr "Code" - -#: accounting/templates/accounting/journal_details.jinja:35 -msgid "Nature" -msgstr "Nature" - -#: accounting/templates/accounting/journal_details.jinja:36 -msgid "Done" -msgstr "Effectué" - -#: accounting/templates/accounting/journal_details.jinja:37 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:707 -msgid "Comment" -msgstr "Commentaire" - -#: accounting/templates/accounting/journal_details.jinja:38 -msgid "File" -msgstr "Fichier" - -#: accounting/templates/accounting/label_list.jinja:14 -msgid "Back to club account" -msgstr "Retour au compte club" - -#: accounting/templates/accounting/label_list.jinja:26 -msgid "There is no label in this club account." -msgstr "Il n'y a pas d'étiquette dans ce compte club." - -#: accounting/templates/accounting/operation_edit.jinja:4 -#: accounting/templates/accounting/operation_edit.jinja:13 -#: accounting/templates/accounting/operation_edit.jinja:16 -msgid "Edit operation" -msgstr "Éditer l'opération" - -#: accounting/templates/accounting/operation_edit.jinja:40 -#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:12 -#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 -#: core/templates/core/pagerev_edit.jinja:24 -#: core/templates/core/user_godfathers.jinja:35 -#: counter/templates/counter/cash_register_summary.jinja:22 -#: subscription/templates/subscription/subscription.jinja:23 -msgid "Save" -msgstr "Sauver" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:4 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:15 -msgid "Simplified type list" -msgstr "Liste des types simplifiés" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:10 -msgid "Simplified types" -msgstr "Types simplifiés" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:13 -msgid "New simplified type" -msgstr "Nouveau type simplifié" - -#: club/models.py:21 -msgid "unix name" -msgstr "nom unix" - -#: club/models.py:25 -msgid "" -"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " -"characters." -msgstr "" -"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " -"lettres, des nombres, et les caractères ./-/_" - -#: club/models.py:30 -msgid "A club with that unix name already exists." -msgstr "Un club avec ce nom UNIX existe déjà." - -#: club/models.py:33 core/models.py:168 -msgid "address" -msgstr "Adresse" - -#: club/models.py:39 core/models.py:117 -msgid "home" -msgstr "home" - -#: club/models.py:47 -msgid "You can not make loops in clubs" -msgstr "Vous ne pouvez pas faire de boucles dans les clubs" - -#: club/models.py:61 -msgid "A club with that unix_name already exists" -msgstr "Un club avec ce nom UNIX existe déjà." - -#: club/models.py:144 counter/models.py:339 counter/models.py:356 -#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 -#: launderette/models.py:126 -msgid "user" -msgstr "nom d'utilisateur" - -#: club/models.py:148 core/models.py:135 -msgid "role" -msgstr "rôle" - -#: club/models.py:150 core/models.py:32 counter/models.py:63 -#: counter/models.py:88 -msgid "description" -msgstr "description" - -#: club/models.py:155 -msgid "User must be subscriber to take part to a club" -msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" - -#: club/models.py:157 -msgid "User is already member of that club" -msgstr "L'utilisateur est déjà membre de ce club" - -#: club/models.py:166 -msgid "past member" -msgstr "Anciens membres" - -#: club/templates/club/club_list.jinja:4 club/templates/club/club_list.jinja:24 -msgid "Club list" -msgstr "Liste des clubs" - -#: club/templates/club/club_list.jinja:21 -msgid "New club" -msgstr "Nouveau club" - -#: club/templates/club/club_list.jinja:31 -msgid "There is no club in this website." -msgstr "Il n'y a pas de club dans ce site web." - -#: club/templates/club/club_members.jinja:5 -msgid "Club members" -msgstr "Membres du club" - -#: club/templates/club/club_members.jinja:9 -#: club/templates/club/club_old_members.jinja:9 -#: core/templates/core/user_clubs.jinja:16 -#: core/templates/core/user_clubs.jinja:42 -msgid "Role" -msgstr "Rôle" - -#: club/templates/club/club_members.jinja:10 -#: club/templates/club/club_old_members.jinja:10 -#: core/templates/core/user_clubs.jinja:17 -#: core/templates/core/user_clubs.jinja:43 -msgid "Description" -msgstr "Description" - -#: club/templates/club/club_members.jinja:11 -#: core/templates/core/user_clubs.jinja:18 -#: launderette/templates/launderette/launderette_admin.jinja:45 -msgid "Since" -msgstr "Depuis" - -#: club/templates/club/club_members.jinja:21 -#: core/templates/core/user_clubs.jinja:29 -msgid "Mark as old" -msgstr "Marquer comme ancien" - -#: club/templates/club/club_members.jinja:30 -#: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 -#: launderette/views.py:146 -msgid "Add" -msgstr "Ajouter" - -#: club/templates/club/club_old_members.jinja:5 -msgid "Club old members" -msgstr "Anciens membres du club" - -#: club/templates/club/club_old_members.jinja:11 -#: core/templates/core/user_clubs.jinja:44 -msgid "From" -msgstr "Du" - -#: club/templates/club/club_old_members.jinja:12 -#: core/templates/core/user_clubs.jinja:45 -msgid "To" -msgstr "Au" - -#: club/templates/club/club_sellings.jinja:5 club/views.py:58 -#: counter/templates/counter/counter_main.jinja:19 -#: counter/templates/counter/last_ops.jinja:35 -msgid "Sellings" -msgstr "Ventes" - -#: club/templates/club/club_sellings.jinja:9 -#: counter/templates/counter/cash_summary_list.jinja:15 -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:70 -#: 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:165 -#: core/templates/core/user_account_detail.jinja:18 -#: core/templates/core/user_account_detail.jinja:47 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:75 -msgid "Counter" -msgstr "Comptoir" - -#: club/templates/club/club_sellings.jinja:20 -#: core/templates/core/user_account_detail.jinja:19 -#: core/templates/core/user_account_detail.jinja:48 -#: counter/templates/counter/last_ops.jinja:15 -#: counter/templates/counter/last_ops.jinja:40 -msgid "Barman" -msgstr "Barman" - -#: club/templates/club/club_sellings.jinja:21 -#: counter/templates/counter/counter_click.jinja:29 -#: counter/templates/counter/last_ops.jinja:16 -#: counter/templates/counter/last_ops.jinja:41 -msgid "Customer" -msgstr "Client" - -#: club/templates/club/club_sellings.jinja:23 -#: core/templates/core/user_account_detail.jinja:50 -#: core/templates/core/user_stats.jinja:28 -#: counter/templates/counter/last_ops.jinja:43 -msgid "Quantity" -msgstr "Quantité" - -#: club/templates/club/club_sellings.jinja:24 -#: core/templates/core/user_account.jinja:9 -#: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:35 -#: counter/templates/counter/last_ops.jinja:44 -#: counter/templates/counter/stats.jinja:18 -msgid "Total" -msgstr "Total" - -#: club/templates/club/club_sellings.jinja:25 -#: core/templates/core/user_account_detail.jinja:21 -#: core/templates/core/user_account_detail.jinja:52 -#: counter/templates/counter/last_ops.jinja:18 -#: counter/templates/counter/last_ops.jinja:45 -msgid "Payment method" -msgstr "Méthode de paiement" - -#: club/templates/club/club_tools.jinja:4 -#: core/templates/core/user_tools.jinja:61 -msgid "Club tools" -msgstr "Outils club" - -#: club/templates/club/club_tools.jinja:6 -msgid "Counters:" -msgstr "Comptoirs : " - -#: club/templates/club/club_tools.jinja:22 -msgid "Accouting: " -msgstr "Comptabilité : " - -#: club/templates/club/club_tools.jinja:30 -msgid "Manage launderettes" -msgstr "Gestion des laveries" - -#: club/views.py:37 -msgid "Members" -msgstr "Membres" - -#: club/views.py:42 -msgid "Old members" -msgstr "Anciens membres" - -#: club/views.py:48 core/templates/core/base.jinja:40 core/views/user.py:141 -msgid "Tools" -msgstr "Outils" - -#: club/views.py:64 counter/templates/counter/counter_list.jinja:21 -#: counter/templates/counter/counter_list.jinja:41 -#: counter/templates/counter/counter_list.jinja:56 -msgid "Props" -msgstr "Propriétés" - -#: club/views.py:102 core/views/forms.py:204 counter/views.py:39 -msgid "Select user" -msgstr "Choisir un utilisateur" - -#: club/views.py:163 counter/views.py:905 -msgid "Begin date" -msgstr "Date de début" - -#: club/views.py:164 counter/views.py:906 -msgid "End date" -msgstr "Date de fin" - -#: club/views.py:178 core/templates/core/user_stats.jinja:27 -#: counter/views.py:986 -msgid "Product" -msgstr "Produit" - -#: core/models.py:28 -msgid "meta group status" -msgstr "status du meta-groupe" - -#: core/models.py:30 -msgid "Whether a group is a meta group or not" -msgstr "Si un groupe est un meta-groupe ou pas" - -#: core/models.py:58 -#, python-format -msgid "%(value)s is not a valid promo (between 0 and %(end)s)" -msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" - -#: core/models.py:74 -msgid "username" -msgstr "nom d'utilisateur" - -#: core/models.py:77 -msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." -msgstr "" -"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" -"+/-/_" - -#: core/models.py:81 -msgid "" -"Enter a valid username. This value may contain only letters, numbers and ./" -"+/-/_ characters." -msgstr "" -"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" -"+/-/_" - -#: core/models.py:86 -msgid "A user with that username already exists." -msgstr "Un utilisateur de ce nom existe déjà" - -#: core/models.py:89 -msgid "first name" -msgstr "Prénom" - -#: core/models.py:90 -msgid "last name" -msgstr "Nom" - -#: core/models.py:91 -msgid "email address" -msgstr "adresse email" - -#: core/models.py:92 -msgid "date of birth" -msgstr "date de naissance" - -#: core/models.py:93 -msgid "nick name" -msgstr "surnom" - -#: core/models.py:95 -msgid "staff status" -msgstr "status \"staff\"" - -#: core/models.py:97 -msgid "Designates whether the user can log into this admin site." -msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." - -#: core/models.py:100 -msgid "active" -msgstr "actif" - -#: core/models.py:103 -msgid "" -"Designates whether this user should be treated as active. Unselect this " -"instead of deleting accounts." -msgstr "" -"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " -"lieu de supprimer les comptes." - -#: core/models.py:107 -msgid "date joined" -msgstr "date d'inscription" - -#: core/models.py:108 -msgid "last update" -msgstr "dernière mise à jour" - -#: core/models.py:110 -msgid "superuser" -msgstr "super-utilisateur" - -#: core/models.py:113 -msgid "Designates whether this user is a superuser. " -msgstr "Est-ce que l'utilisateur est super-utilisateur." - -#: core/models.py:118 -msgid "profile" -msgstr "profil" - -#: core/models.py:120 -msgid "avatar" -msgstr "avatar" - -#: core/models.py:122 -msgid "scrub" -msgstr "blouse" - -#: core/models.py:124 -msgid "sex" -msgstr "sexe" - -#: core/models.py:124 -msgid "Man" -msgstr "Homme" - -#: core/models.py:124 -msgid "Woman" -msgstr "Femme" - -#: core/models.py:125 -msgid "tshirt size" -msgstr "taille de tshirt" - -#: core/models.py:126 -msgid "-" -msgstr "-" - -#: core/models.py:127 -msgid "XS" -msgstr "XS" - -#: core/models.py:128 -msgid "S" -msgstr "S" - -#: core/models.py:129 -msgid "M" -msgstr "M" - -#: core/models.py:130 -msgid "L" -msgstr "L" - -#: core/models.py:131 -msgid "XL" -msgstr "XL" - -#: core/models.py:132 -msgid "XXL" -msgstr "XXL" - -#: core/models.py:133 -msgid "XXXL" -msgstr "XXXL" - -#: core/models.py:136 -msgid "Student" -msgstr "Étudiant" - -#: core/models.py:137 -msgid "Administrative agent" -msgstr "Personnel administratif" - -#: core/models.py:138 -msgid "Teacher" -msgstr "Enseignant" - -#: core/models.py:139 -msgid "Agent" -msgstr "Personnel" - -#: core/models.py:140 -msgid "Doctor" -msgstr "Doctorant" - -#: core/models.py:141 -msgid "Former student" -msgstr "Ancien étudiant" - -#: core/models.py:142 -msgid "Service" -msgstr "Service" - -#: core/models.py:144 -msgid "department" -msgstr "département" - -#: core/models.py:145 -msgid "TC" -msgstr "TC" - -#: core/models.py:146 -msgid "IMSI" -msgstr "IMSI" - -#: core/models.py:147 -msgid "IMAP" -msgstr "IMAP" - -#: core/models.py:148 -msgid "INFO" -msgstr "INFO" - -#: core/models.py:149 -msgid "GI" -msgstr "GI" - -#: core/models.py:150 -msgid "E" -msgstr "E" - -#: core/models.py:151 -msgid "EE" -msgstr "EE" - -#: core/models.py:152 -msgid "GESC" -msgstr "GESC" - -#: core/models.py:153 -msgid "GMC" -msgstr "GMC" - -#: core/models.py:154 -msgid "MC" -msgstr "MC" - -#: core/models.py:155 -msgid "EDIM" -msgstr "EDIM" - -#: core/models.py:156 -msgid "Humanities" -msgstr "Humanités" - -#: core/models.py:157 -msgid "N/A" -msgstr "N/A" - -#: core/models.py:159 -msgid "dpt option" -msgstr "Filière" - -#: core/models.py:160 -msgid "semester" -msgstr "semestre" - -#: core/models.py:161 -msgid "quote" -msgstr "citation" - -#: core/models.py:162 -msgid "school" -msgstr "école" - -#: core/models.py:163 -msgid "promo" -msgstr "promo" - -#: core/models.py:164 -msgid "forum signature" -msgstr "signature du forum" - -#: core/models.py:165 -msgid "second email address" -msgstr "adresse email secondaire" - -#: core/models.py:167 -msgid "parent phone" -msgstr "téléphone des parents" - -#: core/models.py:169 -msgid "parent address" -msgstr "adresse des parents" - -#: core/models.py:170 -msgid "is subscriber viewable" -msgstr "profil visible par les cotisants" - -#: core/models.py:285 -msgid "A user with that username already exists" -msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" - -#: core/models.py:406 core/templates/core/macros.jinja:17 -#: core/templates/core/user_detail.jinja:14 -#: core/templates/core/user_detail.jinja:16 -#: core/templates/core/user_edit.jinja:16 -msgid "Profile" -msgstr "Profil" - -#: core/models.py:456 -msgid "Visitor" -msgstr "Visiteur" - -#: core/models.py:461 -msgid "define if we show a users stats" -msgstr "Definit si l'on montre les statistiques de l'utilisateur" - -#: core/models.py:463 -msgid "Show your account statistics to others" -msgstr "Montrez vos statistiques de compte aux autres" - -#: core/models.py:470 -msgid "file name" -msgstr "nom du fichier" - -#: core/models.py:471 core/models.py:606 -msgid "parent" -msgstr "parent" - -#: core/models.py:472 core/models.py:482 -msgid "file" -msgstr "fichier" - -#: core/models.py:473 -msgid "owner" -msgstr "propriétaire" - -#: core/models.py:474 core/models.py:612 -msgid "edit group" -msgstr "groupe d'édition" - -#: core/models.py:475 core/models.py:613 -msgid "view group" -msgstr "groupe de vue" - -#: core/models.py:476 -msgid "is folder" -msgstr "est un dossier" - -#: core/models.py:477 -msgid "mime type" -msgstr "type mime" - -#: core/models.py:478 -msgid "size" -msgstr "taille" - -#: core/models.py:510 -msgid "Character '/' not authorized in name" -msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" - -#: core/models.py:513 core/models.py:518 -msgid "Loop in folder tree" -msgstr "Boucle dans l'arborescence des dossiers" - -#: core/models.py:522 -msgid "You can not make a file be a children of a non folder file" -msgstr "" -"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " -"un dossier" - -#: core/models.py:526 -msgid "Duplicate file" -msgstr "Un fichier de ce nom existe déjà" - -#: core/models.py:536 -msgid "You must provide a file" -msgstr "Vous devez fournir un fichier" - -#: core/models.py:561 -msgid "Folder: " -msgstr "Dossier : " - -#: core/models.py:563 -msgid "File: " -msgstr "Fichier : " - -#: core/models.py:605 core/models.py:609 -msgid "page name" -msgstr "nom de la page" - -#: core/models.py:610 -msgid "owner group" -msgstr "groupe propriétaire" - -#: core/models.py:641 -msgid "Duplicate page" -msgstr "Une page de ce nom existe déjà" - -#: core/models.py:647 -msgid "Loop in page tree" -msgstr "Boucle dans l'arborescence des pages" - -#: core/models.py:754 -msgid "revision" -msgstr "révision" - -#: core/models.py:755 -msgid "page title" -msgstr "titre de la page" - -#: core/models.py:756 -msgid "page content" -msgstr "contenu de la page" - -#: core/templates/core/403.jinja:5 -msgid "403, Forbidden" -msgstr "403. Non autorisé" - -#: core/templates/core/404.jinja:5 -msgid "404, Not Found" -msgstr "404. Non trouvé" - -#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 -msgid "Welcome!" -msgstr "Bienvenue!" - -#: core/templates/core/base.jinja:19 -msgid "Logo" -msgstr "Logo" - -#: 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:23 core/templates/core/register.jinja:18 -msgid "Register" -msgstr "S'enregister" - -#: core/templates/core/base.jinja:41 -msgid "Logout" -msgstr "Déconnexion" - -#: core/templates/core/base.jinja:43 core/templates/core/base.jinja.py:44 -msgid "Search" -msgstr "Recherche" - -#: core/templates/core/base.jinja:66 -msgid "Main" -msgstr "Accueil" - -#: core/templates/core/base.jinja:67 -msgid "Matmatronch" -msgstr "Matmatronch" - -#: core/templates/core/base.jinja:68 -msgid "Wiki" -msgstr "Wiki" - -#: core/templates/core/base.jinja:69 -msgid "SAS" -msgstr "SAS" - -#: core/templates/core/base.jinja:70 -msgid "Forum" -msgstr "Forum" - -#: core/templates/core/base.jinja:71 -msgid "Services" -msgstr "Services" - -#: core/templates/core/base.jinja:72 core/templates/core/file.jinja:20 -#: core/views/files.py:47 -msgid "Files" -msgstr "Fichiers" - -#: core/templates/core/base.jinja:73 -msgid "Sponsors" -msgstr "Partenaires" - -#: core/templates/core/base.jinja:74 -msgid "Help" -msgstr "Aide" - -#: core/templates/core/base.jinja:106 -msgid "Site made by good people" -msgstr "Site réalisé par des gens bons" - -#: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 -#, python-format -msgid "Create %(name)s" -msgstr "Créer %(name)s" - -#: core/templates/core/delete_confirm.jinja:4 -#: core/templates/core/delete_confirm.jinja:8 -#: core/templates/core/file_delete_confirm.jinja:4 -#: core/templates/core/file_delete_confirm.jinja:8 -msgid "Delete confirmation" -msgstr "Confirmation de suppression" - -#: core/templates/core/delete_confirm.jinja:10 -#: core/templates/core/file_delete_confirm.jinja:10 -#, python-format -msgid "Are you sure you want to delete \"%(obj)s\"?" -msgstr "Êtes-vous sûr de vouloir supprimer \"%(obj)s\" ?" - -#: core/templates/core/delete_confirm.jinja:11 -#: core/templates/core/file_delete_confirm.jinja:11 -msgid "Confirm" -msgstr "Confirmation" - -#: core/templates/core/delete_confirm.jinja:14 -#: core/templates/core/file_delete_confirm.jinja:14 -#: counter/templates/counter/counter_click.jinja:93 -msgid "Cancel" -msgstr "Annuler" - -#: core/templates/core/edit.jinja:4 core/templates/core/edit.jinja.py:8 -#: core/templates/core/file_edit.jinja:4 -#: counter/templates/counter/cash_register_summary.jinja:4 -#, python-format -msgid "Edit %(obj)s" -msgstr "Éditer %(obj)s" - -#: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 -msgid "File list" -msgstr "Liste des fichiers" - -#: core/templates/core/file.jinja:9 -msgid "New file" -msgstr "Nouveau fichier" - -#: core/templates/core/file.jinja:11 core/templates/core/page.jinja:11 -msgid "Not found" -msgstr "Non trouvé" - -#: core/templates/core/file.jinja:32 -msgid "My files" -msgstr "Mes fichiers" - -#: core/templates/core/file.jinja:41 core/templates/core/page.jinja:34 -msgid "Prop" -msgstr "Propriétés" - -#: core/templates/core/file_detail.jinja:13 -msgid "Owner: " -msgstr "Propriétaire : " - -#: core/templates/core/file_detail.jinja:34 -msgid "Real name: " -msgstr "Nom réel : " - -#: core/templates/core/file_detail.jinja:35 -msgid "Date: " -msgstr "Date : " - -#: core/templates/core/file_detail.jinja:37 -msgid "Type: " -msgstr "Type : " - -#: core/templates/core/file_detail.jinja:38 -msgid "Size: " -msgstr "Taille : " - -#: core/templates/core/file_detail.jinja:38 -msgid "bytes" -msgstr "octets" - -#: core/templates/core/file_detail.jinja:40 -msgid "Download" -msgstr "Télécharger" - -#: core/templates/core/file_list.jinja:19 -msgid "There is no file in this website." -msgstr "Il n'y a pas de fichier sur ce site web." - -#: core/templates/core/group_edit.jinja:4 -msgid "Back to list" -msgstr "Retour à la liste" - -#: core/templates/core/group_edit.jinja:5 -msgid "Edit group" -msgstr "Éditer le groupe" - -#: core/templates/core/group_edit.jinja:9 -#: core/templates/core/user_edit.jinja:36 -#: core/templates/core/user_group.jinja:8 -msgid "Update" -msgstr "Mettre à jour" - -#: core/templates/core/group_list.jinja:4 -#: core/templates/core/group_list.jinja:8 -msgid "Group list" -msgstr "Liste des groupes" - -#: core/templates/core/group_list.jinja:9 -msgid "New group" -msgstr "Nouveau groupe" - -#: core/templates/core/index.jinja:7 -msgid "Welcome to the new AE's website!" -msgstr "Bienvenue sur le nouveau site de l'AE ! " - -#: core/templates/core/login.jinja:10 -msgid "Your username and password didn't match. Please try again." -msgstr "" -"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Merci de " -"réessayer." - -#: core/templates/core/login.jinja:15 -msgid "" -"Your account doesn't have access to this page. To proceed,\n" -" please login with an account that has access." -msgstr "" -"Votre compte n'a pas accès à cette page. Merci de vous identifier avec un " -"compte qui a accès." - -#: core/templates/core/login.jinja:18 -msgid "Please login to see this page." -msgstr "Merci de vous identifier pour voir cette page." - -#: core/templates/core/login.jinja:28 -#: counter/templates/counter/counter_main.jinja:51 -msgid "login" -msgstr "login" - -#: core/templates/core/login.jinja:32 -msgid "Lost password?" -msgstr "Mot de passe perdu ?" - -#: core/templates/core/macros.jinja:27 core/templates/core/user_detail.jinja:27 -msgid "Born: " -msgstr "Né le : " - -#: core/templates/core/macros.jinja:31 core/templates/core/user_detail.jinja:48 -msgid "Promo: " -msgstr "Promo : " - -#: core/templates/core/macros.jinja:38 -#, python-format -msgid "Subscribed until %(subscription_end)s" -msgstr "Cotisant jusqu'au %(subscription_end)s" - -#: core/templates/core/macros.jinja:39 core/templates/core/user_edit.jinja:39 -msgid "Account number: " -msgstr "Numero de compte : " - -#: core/templates/core/macros.jinja:44 launderette/models.py:129 -msgid "Slot" -msgstr "Créneau" - -#: core/templates/core/macros.jinja:55 -#: launderette/templates/launderette/launderette_admin.jinja:20 -msgid "Tokens" -msgstr "Jetons" - -#: core/templates/core/new_user_email.jinja:2 -msgid "" -"You're receiving this email because you subscribed to the UTBM student " -"association." -msgstr "" -"Vous avez reçu cet email parce que vous avez cotisé à l'Association des " -"Étudiants de l'UTBM." - -#: core/templates/core/new_user_email.jinja:4 -#: core/templates/core/password_reset_email.jinja:4 -msgid "Please go to the following page and choose a new password:" -msgstr "" -"Merci de vous rendre sur la page suivante et de choisir un nouveau mot de " -"passe :" - -#: core/templates/core/new_user_email.jinja:8 -msgid "Your username, in case it was not given to you: " -msgstr "Votre nom d'utilisateur, si il ne vous a pas été donné :" - -#: core/templates/core/new_user_email.jinja:9 -msgid "" -"You also got a new account that will be useful to purchase products in the " -"living areas and on the Eboutic." -msgstr "" -"Un compte vous a également été créé, qui vous servira notamment à consommer " -"dans les lieux de vie ou sur l'Eboutic." - -#: core/templates/core/new_user_email.jinja:10 -#, python-format -msgid "Here is your account number: %(account)s" -msgstr "Voici votre numéro de compte AE : %(account)s" - -#: core/templates/core/new_user_email.jinja:12 -msgid "Thanks for subscribing! " -msgstr "Merci d'avoir cotisé !" - -#: core/templates/core/new_user_email.jinja:14 -msgid "The AE team" -msgstr "L'équipe AE" - -#: core/templates/core/new_user_email_subject.jinja:2 -msgid "New subscription to the UTBM student association" -msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" - -#: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 -#: core/templates/core/page_list.jinja:9 -msgid "Page list" -msgstr "Liste des pages" - -#: core/templates/core/page.jinja:9 -msgid "Create page" -msgstr "Créer une page" - -#: core/templates/core/page.jinja:29 -msgid "History" -msgstr "Historique" - -#: core/templates/core/page.jinja:45 -msgid "Page does not exist" -msgstr "La page n'existe pas." - -#: core/templates/core/page.jinja:47 -msgid "Create it?" -msgstr "La créer ?" - -#: core/templates/core/page_detail.jinja:5 -#, python-format -msgid "This may not be the last update, you are seeing revision %(rev_id)s!" -msgstr "" -"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la " -"version %(rev_id)s." - -#: core/templates/core/page_hist.jinja:6 -msgid "Page history" -msgstr "Historique de la page" - -#: core/templates/core/page_hist.jinja:7 -#, python-format -msgid "You're seeing the history of page \"%(page_name)s\"" -msgstr "Vous consultez l'historique de la page \"%(page_name)s\"" - -#: core/templates/core/page_hist.jinja:11 -msgid "last" -msgstr "actuel" - -#: core/templates/core/page_list.jinja:16 -msgid "There is no page in this website." -msgstr "Il n'y a pas de page sur ce site web." - -#: core/templates/core/page_prop.jinja:4 -msgid "Page properties" -msgstr "Propriétés de la page" - -#: core/templates/core/pagerev_edit.jinja:19 -msgid "Edit page" -msgstr "Éditer la page" - -#: core/templates/core/pagerev_edit.jinja:23 -msgid "Preview" -msgstr "Prévisualiser" - -#: core/templates/core/password_change.jinja:6 -#, python-format -msgid "Change password for %(user)s" -msgstr "Changer le mot de passe de %(user)s" - -#: core/templates/core/password_change.jinja:11 -msgid "Change" -msgstr "Changer" - -#: core/templates/core/password_change_done.jinja:4 -msgid "You successfully changed your password!" -msgstr "Vous avez correctement changé votre mot de passe !" - -#: core/templates/core/password_reset.jinja:7 -#: core/templates/core/password_reset_confirm.jinja:7 -msgid "Reset" -msgstr "Reset" - -#: core/templates/core/password_reset_complete.jinja:4 -msgid "You successfully reset your password!" -msgstr "Vous avez correctement réinitialisé votre mot de passe !" - -#: core/templates/core/password_reset_done.jinja:4 -msgid "Password reset sent" -msgstr "Réinitialisation de mot de passe envoyée" - -#: core/templates/core/password_reset_done.jinja:7 -msgid "" -"We've emailed you instructions for setting your password, if an account " -"exists with the email you entered. You should\n" -"receive them shortly." -msgstr "" -"Nous vous avons envoyé les instructions pour réinitialiser votre mot de " -"passe par email, si un compte avec l'email entré existe effectivement.\n" -"Vous devriez les recevoir rapidement." - -#: core/templates/core/password_reset_done.jinja:12 -msgid "" -"If you don't receive an email, please make sure you've entered the address " -"you registered with, and check your spam\n" -"folder." -msgstr "" -"Si vous ne recevez pas d'email, assurez-vous d'avoir correctement entré " -"l'adresse email avec laquelle vous vous êtes inscrit, et vérifiez votre " -"dossier de spam." - -#: core/templates/core/password_reset_email.jinja:2 -#, python-format -msgid "" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s." -msgstr "" -"Vous avez reçu cet email parce que vous avez demandé une réinitialisation du " -"mot de passe pour votre compte sur le site %(site_name)s." - -#: core/templates/core/password_reset_email.jinja:8 -msgid "Your username, in case you've forgotten: " -msgstr "Votre nom d'utilisateur, en cas d'oubli :" - -#: core/templates/core/password_reset_email.jinja:10 -msgid "Thanks for using our site! " -msgstr "Merci d'utiliser notre site !" - -#: core/templates/core/password_reset_email.jinja:12 -#, python-format -msgid "The %(site_name)s team" -msgstr "L'équipe de %(site_name)s" - -#: core/templates/core/register.jinja:3 core/templates/core/register.jinja:6 -msgid "Register a user" -msgstr "Enregistrer un utilisateur" - -#: core/templates/core/register.jinja:9 -#, python-format -msgid "Welcome %(user_name)s!" -msgstr "Bienvenue, %(user_name)s!" - -#: core/templates/core/register.jinja:10 -msgid "" -"You successfully registred and you will soon receive a confirmation mail." -msgstr "" -"Vous vous êtes correctement enregistré, et vous devriez recevoir rapidement " -"un email de confirmation." - -#: core/templates/core/register.jinja:12 -#, python-format -msgid "Your username is %(username)s." -msgstr "Votre nom d'utilisateur est %(username)s." - -#: core/templates/core/search.jinja:6 -msgid "Search result" -msgstr "Résultat de la recherche" - -#: core/templates/core/search.jinja:10 -msgid "Users" -msgstr "Utilisateurs" - -#: core/templates/core/search.jinja:18 core/views/user.py:153 -#: counter/templates/counter/stats.jinja:17 -msgid "Clubs" -msgstr "Clubs" - -#: core/templates/core/user_account.jinja:7 -msgid "Year" -msgstr "Année" - -#: core/templates/core/user_account.jinja:8 -msgid "Month" -msgstr "Mois" - -#: core/templates/core/user_account.jinja:30 -#: core/templates/core/user_account_detail.jinja:4 -#, python-format -msgid "%(user_name)s's account" -msgstr "Compte de %(user_name)s" - -#: core/templates/core/user_account.jinja:35 -#: core/templates/core/user_account_detail.jinja:9 -msgid "User account" -msgstr "Compte utilisateur" - -#: core/templates/core/user_account.jinja:38 -#: core/templates/core/user_account_detail.jinja:13 -#: counter/templates/counter/cash_summary_list.jinja:17 -#: counter/templates/counter/last_ops.jinja:10 -msgid "Refillings" -msgstr "Rechargements" - -#: core/templates/core/user_account.jinja:42 -#: core/templates/core/user_account_detail.jinja:42 -msgid "Account buyings" -msgstr "Achat sur compte utilisateur" - -#: core/templates/core/user_account.jinja:46 -#: core/templates/core/user_account_detail.jinja:75 -msgid "Eboutic invoices" -msgstr "Facture eboutic" - -#: core/templates/core/user_account.jinja:50 counter/views.py:475 -msgid "Etickets" -msgstr "Etickets" - -#: core/templates/core/user_account.jinja:58 -#: core/templates/core/user_account_detail.jinja:103 -msgid "User has no account" -msgstr "L'utilisateur n'a pas de compte" - -#: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:105 launderette/views.py:146 -msgid "Back" -msgstr "Retour" - -#: core/templates/core/user_account_detail.jinja:80 -msgid "Items" -msgstr "Articles" - -#: core/templates/core/user_clubs.jinja:4 -#, python-format -msgid "%(user_name)s's club(s)" -msgstr "Clubs de %(user_name)s" - -#: core/templates/core/user_clubs.jinja:8 -msgid "Club(s)" -msgstr "Clubs" - -#: core/templates/core/user_clubs.jinja:10 -msgid "Current club(s) :" -msgstr "Clubs actuels : " - -#: core/templates/core/user_clubs.jinja:36 -msgid "Old club(s) :" -msgstr "Anciens clubs :" - -#: core/templates/core/user_detail.jinja:5 -#, python-format -msgid "%(user_name)s's profile" -msgstr "Profil de %(user_name)s" - -#: core/templates/core/user_detail.jinja:33 -msgid "Option: " -msgstr "Filière : " - -#: core/templates/core/user_detail.jinja:68 -msgid "Not subscribed" -msgstr "Non cotisant" - -#: core/templates/core/user_detail.jinja:70 -#: subscription/templates/subscription/subscription.jinja:4 -#: subscription/templates/subscription/subscription.jinja:8 -msgid "New subscription" -msgstr "Nouvelle cotisation" - -#: core/templates/core/user_edit.jinja:4 -msgid "Edit user" -msgstr "Éditer l'utilisateur" - -#: core/templates/core/user_edit.jinja:8 -msgid "Edit user profile" -msgstr "Éditer le profil de l'utilisateur" - -#: core/templates/core/user_edit.jinja:14 -msgid "Current profile: " -msgstr "Profil actuel : " - -#: core/templates/core/user_edit.jinja:24 -msgid "Take picture" -msgstr "Prendre une photo" - -#: core/templates/core/user_edit.jinja:29 -msgid "Current avatar: " -msgstr "Avatar actuel : " - -#: core/templates/core/user_edit.jinja:30 -msgid "Avatar" -msgstr "Avatar" - -#: core/templates/core/user_edit.jinja:32 -msgid "Current scrub: " -msgstr "Blouse actuelle : " - -#: core/templates/core/user_edit.jinja:33 -msgid "Scrub" -msgstr "Blouse" - -#: core/templates/core/user_edit.jinja:37 -msgid "Username: " -msgstr "Nom d'utilisateur : " - -#: core/templates/core/user_edit.jinja:42 -msgid "Change my password" -msgstr "Changer mon mot de passe" - -#: core/templates/core/user_edit.jinja:44 -msgid "Change user password" -msgstr "Changer le mot de passe" - -#: core/templates/core/user_godfathers.jinja:5 -#, python-format -msgid "%(user_name)s's godfathers" -msgstr "Parrains de %(user_name)s" - -#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 -msgid "Godfathers" -msgstr "Parrains" - -#: core/templates/core/user_godfathers.jinja:18 -msgid "No godfathers" -msgstr "Pas de parrains" - -#: core/templates/core/user_godfathers.jinja:21 -msgid "Godchildren" -msgstr "Fillots" - -#: core/templates/core/user_godfathers.jinja:29 -msgid "No godchildren" -msgstr "Pas de fillots" - -#: core/templates/core/user_group.jinja:4 -#, python-format -msgid "Edit user groups for %(user_name)s" -msgstr "Éditer les groupes pour %(user_name)s" - -#: core/templates/core/user_list.jinja:4 core/templates/core/user_list.jinja:8 -msgid "User list" -msgstr "Liste d'utilisateurs" - -#: core/templates/core/user_stats.jinja:4 -#, python-format -msgid "%(user_name)s's stats" -msgstr "Stats de %(user_name)s" - -#: core/templates/core/user_stats.jinja:9 -msgid "Permanencies" -msgstr "Permanences" - -#: core/templates/core/user_stats.jinja:17 -msgid "Buyings" -msgstr "Achats" - -#: core/templates/core/user_stats.jinja:23 -msgid "Product top 10" -msgstr "Top 10 produits" - -#: core/templates/core/user_tools.jinja:4 -#, python-format -msgid "%(user_name)s's tools" -msgstr "Outils de %(user_name)s" - -#: core/templates/core/user_tools.jinja:8 -msgid "User Tools" -msgstr "Outils utilisateurs" - -#: core/templates/core/user_tools.jinja:11 -msgid "Sith management" -msgstr "Gestion de Sith" - -#: core/templates/core/user_tools.jinja:14 core/views/user.py:159 -msgid "Groups" -msgstr "Groupes" - -#: core/templates/core/user_tools.jinja:15 -#: rootplace/templates/rootplace/merge.jinja:4 -msgid "Merge users" -msgstr "Fusionner deux utilisateurs" - -#: core/templates/core/user_tools.jinja:18 -msgid "Subscriptions" -msgstr "Cotisations" - -#: core/templates/core/user_tools.jinja:23 counter/views.py:445 -#: counter/views.py:594 -msgid "Counters" -msgstr "Comptoirs" - -#: core/templates/core/user_tools.jinja:26 -msgid "General management" -msgstr "Gestion générale" - -#: core/templates/core/user_tools.jinja:27 -msgid "General counters management" -msgstr "Gestion générale des comptoirs" - -#: core/templates/core/user_tools.jinja:28 -msgid "Products management" -msgstr "Gestion des produits" - -#: core/templates/core/user_tools.jinja:29 -msgid "Product types management" -msgstr "Gestion des types de produit" - -#: core/templates/core/user_tools.jinja:30 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:465 -msgid "Cash register summaries" -msgstr "Relevés de caisse" - -#: core/templates/core/user_tools.jinja:36 core/views/user.py:169 -#: counter/templates/counter/counter_list.jinja:18 -#: counter/templates/counter/counter_list.jinja:33 -#: counter/templates/counter/counter_list.jinja:53 -msgid "Stats" -msgstr "Stats" - -#: core/templates/core/user_tools.jinja:45 -msgid "General accounting" -msgstr "Comptabilité générale" - -#: core/templates/core/user_tools.jinja:54 -msgid "Club account: " -msgstr "Compte club : " - -#: core/views/files.py:46 -msgid "Add a new folder" -msgstr "Ajouter un nouveau dossier" - -#: core/views/files.py:57 -#, python-format -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:66 core/views/forms.py:181 core/views/forms.py:185 -#, 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:59 core/views/forms.py:62 -msgid "Choose file" -msgstr "Choisir un fichier" - -#: core/views/forms.py:73 core/views/forms.py:76 -msgid "Choose user" -msgstr "Choisir un utilisateur" - -#: core/views/forms.py:98 -msgid "Username, email, or account number" -msgstr "Nom d'utilisateur, email, ou numéro de compte AE" - -#: core/views/forms.py:140 -msgid "" -"Profile: you need to be visible on the picture, in order to be recognized (e." -"g. by the barmen)" -msgstr "" -"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " -"(par exemple par les barmen)" - -#: core/views/forms.py:141 -msgid "Avatar: used on the forum" -msgstr "Avatar : utilisé sur le forum" - -#: core/views/forms.py:142 -msgid "Scrub: let other know how your scrub looks like!" -msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" - -#: core/views/forms.py:186 -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" - -#: core/views/forms.py:203 -msgid "Godfather" -msgstr "Parrain" - -#: core/views/forms.py:203 -msgid "Godchild" -msgstr "Fillot" - -#: core/views/user.py:298 -msgid "User already has a profile picture" -msgstr "L'utilisateur a déjà une photo de profil" - -#: counter/models.py:26 -msgid "account id" -msgstr "numéro de compte" - -#: counter/models.py:30 -msgid "customer" -msgstr "client" - -#: counter/models.py:31 -msgid "customers" -msgstr "clients" - -#: counter/models.py:46 counter/templates/counter/counter_click.jinja:48 -#: counter/templates/counter/counter_click.jinja:82 -msgid "Not enough money" -msgstr "Solde insuffisant" - -#: counter/models.py:67 counter/models.py:89 -msgid "product type" -msgstr "type du produit" - -#: counter/models.py:92 -msgid "purchase price" -msgstr "prix d'achat" - -#: counter/models.py:93 -msgid "selling price" -msgstr "prix de vente" - -#: counter/models.py:94 -msgid "special selling price" -msgstr "prix de vente spécial" - -#: counter/models.py:95 -msgid "icon" -msgstr "icône" - -#: counter/models.py:97 -msgid "limit age" -msgstr "âge limite" - -#: counter/models.py:98 -msgid "tray price" -msgstr "prix plateau" - -#: counter/models.py:99 -msgid "parent product" -msgstr "produit parent" - -#: counter/models.py:101 -msgid "buying groups" -msgstr "groupe d'achat" - -#: counter/models.py:102 -msgid "archived" -msgstr "archivé" - -#: counter/models.py:105 counter/models.py:439 -msgid "product" -msgstr "produit" - -#: counter/models.py:124 -msgid "products" -msgstr "produits" - -#: counter/models.py:125 -msgid "counter type" -msgstr "type de comptoir" - -#: counter/models.py:127 -msgid "Bar" -msgstr "Bar" - -#: counter/models.py:127 -msgid "Office" -msgstr "Bureau" - -#: counter/models.py:127 counter/templates/counter/counter_list.jinja:11 -#: eboutic/templates/eboutic/eboutic_main.jinja:4 -#: 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:279 sith/settings.py:287 -msgid "Eboutic" -msgstr "Eboutic" - -#: counter/models.py:128 -msgid "sellers" -msgstr "vendeurs" - -#: counter/models.py:131 launderette/models.py:125 -msgid "token" -msgstr "jeton" - -#: counter/models.py:134 counter/models.py:340 counter/models.py:357 -#: launderette/models.py:16 stock/models.py:11 -msgid "counter" -msgstr "comptoir" - -#: counter/models.py:232 -msgid "bank" -msgstr "banque" - -#: counter/models.py:234 counter/models.py:275 -msgid "is validated" -msgstr "est validé" - -#: counter/models.py:237 -msgid "refilling" -msgstr "rechargement" - -#: counter/models.py:268 eboutic/models.py:103 -msgid "unit price" -msgstr "prix unitaire" - -#: counter/models.py:269 counter/models.py:429 eboutic/models.py:104 -msgid "quantity" -msgstr "quantité" - -#: counter/models.py:274 -msgid "Sith account" -msgstr "Compte utilisateur" - -#: counter/models.py:274 sith/settings.py:272 sith/settings.py:277 -#: sith/settings.py:299 -msgid "Credit card" -msgstr "Carte bancaire" - -#: counter/models.py:278 -msgid "selling" -msgstr "vente" - -#: counter/models.py:343 -msgid "last activity date" -msgstr "dernière activité" - -#: counter/models.py:346 -msgid "permanency" -msgstr "permanence" - -#: counter/models.py:360 -msgid "emptied" -msgstr "coffre vidée" - -#: counter/models.py:363 -msgid "cash register summary" -msgstr "relevé de caisse" - -#: counter/models.py:427 -msgid "cash summary" -msgstr "relevé" - -#: counter/models.py:428 -msgid "value" -msgstr "valeur" - -#: counter/models.py:430 -msgid "check" -msgstr "chèque" - -#: counter/models.py:433 -msgid "cash register summary item" -msgstr "élément de relevé de caisse" - -#: counter/models.py:440 -msgid "banner" -msgstr "bannière" - -#: counter/models.py:441 -msgid "event date" -msgstr "date de l'événement" - -#: counter/models.py:442 -msgid "event title" -msgstr "titre de l'événement" - -#: counter/models.py:443 -msgid "secret" -msgstr "secret" - -#: counter/templates/counter/activity.jinja:5 -#: counter/templates/counter/activity.jinja:9 -#, python-format -msgid "%(counter_name)s activity" -msgstr "Activité sur %(counter_name)s" - -#: counter/templates/counter/activity.jinja:11 -msgid "Barman list" -msgstr "Barmans" - -#: counter/templates/counter/cash_register_summary.jinja:8 -msgid "Make a cash register summary" -msgstr "Faire un relevé de caisse" - -#: counter/templates/counter/cash_summary_list.jinja:5 -#: counter/templates/counter/cash_summary_list.jinja:10 -msgid "Cash register summary list" -msgstr "Liste des relevés de caisse" - -#: counter/templates/counter/cash_summary_list.jinja:11 -msgid "Theoric sums" -msgstr "Sommes théoriques" - -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:708 -msgid "Emptied" -msgstr "Coffre vidé" - -#: counter/templates/counter/cash_summary_list.jinja:48 -msgid "yes" -msgstr "oui" - -#: counter/templates/counter/cash_summary_list.jinja:59 -msgid "There is no cash register summary in this website." -msgstr "Il n'y a pas de relevé de caisse dans ce site web." - -#: counter/templates/counter/counter_click.jinja:35 -#: launderette/templates/launderette/launderette_admin.jinja:8 -msgid "Selling" -msgstr "Vente" - -#: counter/templates/counter/counter_click.jinja:39 -#: counter/templates/counter/counter_click.jinja:73 -msgid "Too young for that product" -msgstr "Trop jeune pour ce produit" - -#: counter/templates/counter/counter_click.jinja:42 -#: counter/templates/counter/counter_click.jinja:76 -msgid "Not allowed for that product" -msgstr "Non autorisé pour ce produit" - -#: counter/templates/counter/counter_click.jinja:45 -#: counter/templates/counter/counter_click.jinja:79 -msgid "No date of birth provided" -msgstr "Pas de date de naissance renseigné" - -#: counter/templates/counter/counter_click.jinja:55 -#: counter/templates/counter/counter_click.jinja:103 -#: counter/templates/counter/invoices_call.jinja:16 -#: launderette/templates/launderette/launderette_admin.jinja:35 -#: launderette/templates/launderette/launderette_click.jinja:13 -msgid "Go" -msgstr "Valider" - -#: counter/templates/counter/counter_click.jinja:57 -#: eboutic/templates/eboutic/eboutic_main.jinja:27 -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 -msgid "Basket: " -msgstr "Panier : " - -#: counter/templates/counter/counter_click.jinja:88 -msgid "Finish" -msgstr "Terminer" - -#: counter/templates/counter/counter_click.jinja:97 -msgid "Refilling" -msgstr "Rechargement" - -#: counter/templates/counter/counter_list.jinja:4 -#: counter/templates/counter/counter_list.jinja:10 -msgid "Counter admin list" -msgstr "Liste des comptoirs" - -#: counter/templates/counter/counter_list.jinja:8 -msgid "New counter" -msgstr "Nouveau comptoir" - -#: counter/templates/counter/counter_list.jinja:26 -msgid "Bars" -msgstr "Bars" - -#: counter/templates/counter/counter_list.jinja:37 -msgid "Create new stock" -msgstr "Créer un nouveau stock" - -#: counter/templates/counter/counter_list.jinja:46 -msgid "Offices" -msgstr "Bureaux" - -#: counter/templates/counter/counter_list.jinja:62 -msgid "There is no counters in this website." -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:16 -#: launderette/templates/launderette/launderette_click.jinja:8 -#, python-format -msgid "%(counter_name)s counter" -msgstr "Comptoir %(counter_name)s" - -#: counter/templates/counter/counter_main.jinja:21 -msgid "Last selling: " -msgstr "Dernière vente : " - -#: counter/templates/counter/counter_main.jinja:22 -msgid "Client: " -msgstr "Client : " - -#: counter/templates/counter/counter_main.jinja:22 -msgid "New amount: " -msgstr "Nouveau montant : " - -#: counter/templates/counter/counter_main.jinja:31 -msgid "Enter client code:" -msgstr "Entrez un code client : " - -#: counter/templates/counter/counter_main.jinja:36 -msgid "validate" -msgstr "valider" - -#: counter/templates/counter/counter_main.jinja:39 -msgid "Please, login" -msgstr "Merci de vous identifier" - -#: counter/templates/counter/counter_main.jinja:44 -msgid "Barman: " -msgstr "Barman : " - -#: counter/templates/counter/eticket_list.jinja:4 -#: counter/templates/counter/eticket_list.jinja:10 -msgid "Eticket list" -msgstr "Liste des etickets" - -#: counter/templates/counter/eticket_list.jinja:8 -msgid "New eticket" -msgstr "Nouveau eticket" - -#: counter/templates/counter/eticket_list.jinja:17 -msgid "There is no eticket in this website." -msgstr "Il n'y a pas de eticket sur ce site web." - -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:470 -msgid "Invoices call" -msgstr "Appels à facture" - -#: counter/templates/counter/invoices_call.jinja:8 -#, python-format -msgid "Invoices call for %(date)s" -msgstr "Appels à facture pour %(date)s" - -#: counter/templates/counter/invoices_call.jinja:9 -msgid "Choose another month: " -msgstr "Choisir un autre mois : " - -#: counter/templates/counter/invoices_call.jinja:21 -msgid "Sum" -msgstr "Somme" - -#: counter/templates/counter/last_ops.jinja:5 -#: counter/templates/counter/last_ops.jinja:9 -#, python-format -msgid "%(counter_name)s last operations" -msgstr "Dernières opérations sur %(counter_name)s" - -#: counter/templates/counter/product_list.jinja:4 -#: counter/templates/counter/product_list.jinja:12 -msgid "Product list" -msgstr "Liste des produits" - -#: counter/templates/counter/product_list.jinja:9 -msgid "New product" -msgstr "Nouveau produit" - -#: counter/templates/counter/product_list.jinja:21 -msgid "Uncategorized" -msgstr "Sans catégorie" - -#: counter/templates/counter/product_list.jinja:28 -msgid "There is no products in this website." -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:10 -msgid "Product type list" -msgstr "Liste des types de produit" - -#: counter/templates/counter/producttype_list.jinja:8 -msgid "New product type" -msgstr "Nouveau type de produit" - -#: counter/templates/counter/producttype_list.jinja:17 -msgid "There is no product types in this website." -msgstr "Il n'y a pas de types de produit dans ce site web." - -#: counter/templates/counter/stats.jinja:5 -#: counter/templates/counter/stats.jinja:9 -#, python-format -msgid "%(counter_name)s stats" -msgstr "Stats sur %(counter_name)s" - -#: counter/templates/counter/stats.jinja:10 -#, python-format -msgid "Top 100 %(counter_name)s" -msgstr "Top 100 %(counter_name)s" - -#: counter/templates/counter/stats.jinja:16 -msgid "Promo" -msgstr "Promo" - -#: counter/templates/counter/stats.jinja:19 -msgid "Percentage" -msgstr "Pourcentage" - -#: counter/views.py:55 -msgid "User not found" -msgstr "Utilisateur non trouvé" - -#: counter/views.py:81 -msgid "Cash summary" -msgstr "Relevé de caisse" - -#: counter/views.py:86 -msgid "Last operations" -msgstr "Dernières opérations" - -#: counter/views.py:120 -msgid "Bad credentials" -msgstr "Mauvais identifiants" - -#: counter/views.py:122 -msgid "User is not barman" -msgstr "L'utilisateur n'est pas barman." - -#: counter/views.py:126 -msgid "Bad location, someone is already logged in somewhere else" -msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" - -#: counter/views.py:310 -msgid "END" -msgstr "FIN" - -#: counter/views.py:312 -msgid "CAN" -msgstr "ANN" - -#: counter/views.py:342 -msgid "You have not enough money to buy all the basket" -msgstr "Vous n'avez pas assez d'argent pour acheter le panier" - -#: counter/views.py:435 -msgid "Counter administration" -msgstr "Administration des comptoirs" - -#: counter/views.py:440 -msgid "Stocks" -msgstr "" - -#: counter/views.py:450 -msgid "Products" -msgstr "Produits" - -#: counter/views.py:455 -msgid "Archived products" -msgstr "Produits archivés" - -#: counter/views.py:460 -msgid "Product types" -msgstr "Types de produit" - -#: counter/views.py:591 -msgid "Parent product" -msgstr "Produit parent" - -#: counter/views.py:592 -msgid "Buying groups" -msgstr "Groupes d'achat" - -#: counter/views.py:687 -msgid "10 cents" -msgstr "10 centimes" - -#: counter/views.py:688 -msgid "20 cents" -msgstr "20 centimes" - -#: counter/views.py:689 -msgid "50 cents" -msgstr "50 centimes" - -#: counter/views.py:690 -msgid "1 euro" -msgstr "1 €" - -#: counter/views.py:691 -msgid "2 euros" -msgstr "2 €" - -#: counter/views.py:692 -msgid "5 euros" -msgstr "5 €" - -#: counter/views.py:693 -msgid "10 euros" -msgstr "10 €" - -#: counter/views.py:694 -msgid "20 euros" -msgstr "20 €" - -#: counter/views.py:695 -msgid "50 euros" -msgstr "50 €" - -#: counter/views.py:696 -msgid "100 euros" -msgstr "100 €" - -#: counter/views.py:697 counter/views.py:699 counter/views.py:701 -#: counter/views.py:703 counter/views.py:705 -msgid "Check amount" -msgstr "Montant du chèque" - -#: counter/views.py:698 counter/views.py:700 counter/views.py:702 -#: counter/views.py:704 counter/views.py:706 -msgid "Check quantity" -msgstr "Nombre de chèque" - -#: eboutic/models.py:49 -msgid "validated" -msgstr "validé" - -#: eboutic/models.py:62 -msgid "Invoice already validated" -msgstr "Facture déjà validée" - -#: eboutic/models.py:100 -msgid "product id" -msgstr "ID du produit" - -#: eboutic/models.py:101 -msgid "product name" -msgstr "nom du produit" - -#: eboutic/models.py:102 -msgid "product type id" -msgstr "id du type du produit" - -#: eboutic/models.py:113 -msgid "basket" -msgstr "panier" - -#: eboutic/templates/eboutic/eboutic_main.jinja:37 -msgid "Proceed to command" -msgstr "Procéder à la commande" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4 -msgid "Basket state" -msgstr "État du panier" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:35 -msgid "Pay with credit card" -msgstr "Payer avec une carte bancaire" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:38 -msgid "" -"AE account payment disabled because your basket contains refilling items." -msgstr "" -"Paiement par compte AE désactivé parce que votre panier contient des bons de " -"rechargement." - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:43 -msgid "Pay with Sith account" -msgstr "Payer avec un compte AE" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:8 -msgid "Payment failed" -msgstr "Le paiement a échoué" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:10 -msgid "Payment successful" -msgstr "Le paiement a été effectué" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:12 -msgid "Return to eboutic" -msgstr "Retourner à l'eboutic" - -#: eboutic/views.py:140 -msgid "You do not have enough money to buy the basket" -msgstr "Vous n'avez pas assez d'argent pour acheter le panier" - -#: launderette/models.py:19 -#: launderette/templates/launderette/launderette_book.jinja:5 -#: launderette/templates/launderette/launderette_book_choose.jinja:4 -#: launderette/templates/launderette/launderette_main.jinja:4 -msgid "Launderette" -msgstr "Laverie" - -#: launderette/models.py:61 launderette/models.py:86 -msgid "launderette" -msgstr "laverie" - -#: launderette/models.py:62 launderette/models.py:87 launderette/models.py:123 -msgid "type" -msgstr "type" - -#: launderette/models.py:63 -msgid "is working" -msgstr "fonctionne" - -#: launderette/models.py:66 -msgid "Machine" -msgstr "Machine" - -#: launderette/models.py:88 -msgid "borrow date" -msgstr "date d'emprunt" - -#: launderette/models.py:92 -msgid "Token" -msgstr "Jeton" - -#: launderette/models.py:98 -msgid "Token name can not be blank" -msgstr "Le nom du jeton ne peut pas être vide" - -#: launderette/models.py:124 -msgid "machine" -msgstr "machine" - -#: launderette/templates/launderette/launderette_admin.jinja:4 -msgid "Launderette admin" -msgstr "Gestion de la laverie" - -#: launderette/templates/launderette/launderette_admin.jinja:9 -msgid "Sell" -msgstr "Vendre" - -#: launderette/templates/launderette/launderette_admin.jinja:11 -msgid "Machines" -msgstr "Machines" - -#: launderette/templates/launderette/launderette_admin.jinja:12 -msgid "New machine" -msgstr "Nouvelle machine" - -#: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:148 -msgid "Type" -msgstr "Type" - -#: launderette/templates/launderette/launderette_book.jinja:12 -msgid "Choose" -msgstr "Choisir" - -#: launderette/templates/launderette/launderette_book.jinja:23 -msgid "Washing and drying" -msgstr "Lavage et séchage" - -#: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:416 -msgid "Washing" -msgstr "Lavage" - -#: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:416 -msgid "Drying" -msgstr "Séchage" - -#: launderette/templates/launderette/launderette_list.jinja:4 -#: launderette/templates/launderette/launderette_list.jinja:12 -msgid "Launderette admin list" -msgstr "Liste des laveries" - -#: launderette/templates/launderette/launderette_list.jinja:9 -msgid "New launderette" -msgstr "Nouvelle laverie" - -#: launderette/templates/launderette/launderette_list.jinja:20 -msgid "There is no launderette in this website." -msgstr "Il n'y a pas de laverie dans ce site web." - -#: launderette/templates/launderette/launderette_main.jinja:9 -msgid "Edit presentation page" -msgstr "Éditer la page de présentation" - -#: launderette/templates/launderette/launderette_main.jinja:12 -msgid "Book launderette slot" -msgstr "Réserver un créneau de laverie" - -#: launderette/views.py:147 -msgid "Action" -msgstr "Action" - -#: launderette/views.py:150 -msgid "Tokens, separated by spaces" -msgstr "Jetons, séparés par des espaces" - -#: launderette/views.py:165 launderette/views.py:179 -#, python-format -msgid "Token %(token_name)s does not exists" -msgstr "Le jeton %(token_name)s n'existe pas" - -#: launderette/views.py:173 -#, python-format -msgid "Token %(token_name)s already exists" -msgstr "Un jeton %(token_name)s existe déjà" - -#: launderette/views.py:229 -msgid "User has booked no slot" -msgstr "L'utilisateur n'a pas réservé de créneau" - -#: launderette/views.py:319 -msgid "Token not found" -msgstr "Jeton non trouvé" - -#: rootplace/templates/rootplace/merge.jinja:8 -msgid "Merge two users" -msgstr "Fusionner deux utilisateurs" - -#: rootplace/templates/rootplace/merge.jinja:12 -msgid "Merge" -msgstr "Fusion" - -#: rootplace/views.py:66 -msgid "User that will be kept" -msgstr "Utilisateur qui sera conservé" - -#: rootplace/views.py:67 -msgid "User that will be deleted" -msgstr "Utilisateur qui sera supprimé" - -#: sith/settings.py:166 -msgid "English" -msgstr "Anglais" - -#: sith/settings.py:167 -msgid "French" -msgstr "Français" - -#: sith/settings.py:269 sith/settings.py:276 sith/settings.py:297 -msgid "Check" -msgstr "Chèque" - -#: sith/settings.py:270 sith/settings.py:278 sith/settings.py:298 -msgid "Cash" -msgstr "Espèces" - -#: sith/settings.py:271 -msgid "Transfert" -msgstr "Virement" - -#: sith/settings.py:284 -msgid "Belfort" -msgstr "Belfort" - -#: sith/settings.py:285 -msgid "Sevenans" -msgstr "Sevenans" - -#: sith/settings.py:286 -msgid "Montbéliard" -msgstr "Montbéliard" - -#: sith/settings.py:326 -msgid "One semester" -msgstr "Un semestre, 15 €" - -#: sith/settings.py:331 -msgid "Two semesters" -msgstr "Deux semestres, 28 €" - -#: sith/settings.py:336 -msgid "Common core cursus" -msgstr "Cursus tronc commun, 45 €" - -#: sith/settings.py:341 -msgid "Branch cursus" -msgstr "Cursus branche, 45 €" - -#: sith/settings.py:346 -msgid "Alternating cursus" -msgstr "Cursus alternant, 30 €" - -#: sith/settings.py:351 -msgid "Honorary member" -msgstr "Membre honoraire, 0 €" - -#: sith/settings.py:356 -msgid "Assidu member" -msgstr "Membre d'Assidu, 0 €" - -#: sith/settings.py:361 -msgid "Amicale/DOCEO member" -msgstr "Membre de l'Amicale/DOCEO, 0 €" - -#: sith/settings.py:366 -msgid "UT network member" -msgstr "Cotisant du réseau UT, 0 €" - -#: sith/settings.py:371 -msgid "CROUS member" -msgstr "Membres du CROUS, 0 €" - -#: sith/settings.py:376 -msgid "Sbarro/ESTA member" -msgstr "Membre de Sbarro ou de l'ESTA, 15 €" - -#: sith/settings.py:384 -msgid "President" -msgstr "Président" - -#: sith/settings.py:385 -msgid "Vice-President" -msgstr "Vice-Président" - -#: sith/settings.py:386 -msgid "Treasurer" -msgstr "Trésorier" - -#: sith/settings.py:387 -msgid "Communication supervisor" -msgstr "Responsable com" - -#: sith/settings.py:388 -msgid "Secretary" -msgstr "Secrétaire" - -#: sith/settings.py:389 -msgid "IT supervisor" -msgstr "Responsable info" - -#: sith/settings.py:390 -msgid "Board member" -msgstr "Membre du bureau" - -#: sith/settings.py:391 -msgid "Active member" -msgstr "Membre actif" - -#: sith/settings.py:392 -msgid "Curious" -msgstr "Curieux" - -#: stock/models.py:22 -msgid "unit quantity" -msgstr "Unité de quantité" - -#: stock/models.py:23 -msgid "effective quantity" -msgstr "Quantité actuelle" - -#: stock/templates/stock/stock_list.jinja:4 -#: stock/templates/stock/stock_list.jinja:9 -msgid "Stock list" -msgstr "Liste des stocks" - -#: stock/templates/stock/stock_list.jinja:21 -msgid "There is no stocks in this website." -msgstr "Il n'y a pas de stock sur ce site web." - -#: stock/templates/stock/stock_main.jinja:9 -msgid "New Item" -msgstr "Nouvel élément" - -#: subscription/models.py:16 -msgid "Bad subscription type" -msgstr "Mauvais type de cotisation" - -#: subscription/models.py:20 -msgid "Bad payment method" -msgstr "Mauvais type de paiement" - -#: subscription/models.py:52 -msgid "subscription type" -msgstr "type d'inscription" - -#: subscription/models.py:55 -msgid "subscription start" -msgstr "début de la cotisation" - -#: subscription/models.py:56 -msgid "subscription end" -msgstr "fin de la cotisation" - -#: subscription/models.py:59 -msgid "location" -msgstr "lieu" - -#: subscription/models.py:68 -msgid "You can not subscribe many time for the same period" -msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" - -#: subscription/models.py:72 -msgid "Subscription error" -msgstr "Erreur de cotisation" - -#: subscription/views.py:54 -msgid "A user with that email address already exists" -msgstr "Un utilisateur avec cette adresse email existe déjà" - -#: subscription/views.py:70 -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 "Download as cvs" -#~ msgstr "Télécharger en csv" - -#, fuzzy -#~| msgid "Select user" -#~ msgid "lock user" -#~ msgstr "Choisir un utilisateur" - -#~ msgid "Unknown event" -#~ msgstr "Événement inconnu" - -#~ msgid "Eticket bought for the event %(event)s" -#~ msgstr "Eticket acheté pour l'événement %(event)s" - -#~ msgid "" -#~ "You bought an eticket for the event %(event)s.\n" -#~ "You can download it on this page %(url)s." -#~ msgstr "" -#~ "Vous avez acheté un Eticket pour l'événement %(event)s.\n" -#~ "Vous pouvez le télécharger sur cette page: %(url)s" - -#~ msgid "people(s)" -#~ msgstr "personne(s)" diff --git a/stock/migrations/0003_auto_20161116_1338.py b/stock/migrations/0003_auto_20161116_1338.py new file mode 100644 index 00000000..89a0c19b --- /dev/null +++ b/stock/migrations/0003_auto_20161116_1338.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0002_auto_20161113_2325'), + ] + + operations = [ + migrations.AlterField( + model_name='stockitem', + name='effective_quantity', + field=models.IntegerField(default=0, verbose_name='effective quantity', help_text='number of box'), + ), + migrations.AlterField( + model_name='stockitem', + name='stock_owner', + field=models.ForeignKey(related_name='items', to='stock.Stock'), + ), + migrations.AlterField( + model_name='stockitem', + name='type', + field=models.ForeignKey(related_name='stock_items', verbose_name='type', null=True, to='counter.ProductType', blank=True, on_delete=django.db.models.deletion.SET_NULL), + ), + migrations.AlterField( + model_name='stockitem', + name='unit_quantity', + field=models.IntegerField(default=0, verbose_name='unit quantity', help_text='number of element in one box'), + ), + ] diff --git a/stock/models.py b/stock/models.py index 4b2cccfd..e016493a 100644 --- a/stock/models.py +++ b/stock/models.py @@ -22,13 +22,15 @@ class StockItem(models.Model): The StockItem class, element of the stock """ name = models.CharField(_('name'), max_length=64) - unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text='number of beer in one crate (equal one for barrels)') - effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text='total number of bottle/barrel') - type = models.ForeignKey(ProductType, related_name="stockItem_type", verbose_name=_("type"), null=True, blank=True, + unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text='number of element in one box') + effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text='number of box') + type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, on_delete=models.SET_NULL) - stock_owner = models.ForeignKey(Stock, related_name="stock_owner") + stock_owner = models.ForeignKey(Stock, related_name="items") def __str__(self): - return "%s (%s)" % (self.name, self.stock_owner) + return "%s (%s)" % (self.name, self.effective_quantity) + def get_absolute_url(self): + return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) \ No newline at end of file diff --git a/stock/templates/stock/stock_item_list.jinja b/stock/templates/stock/stock_item_list.jinja index 77ccab36..cac5fb30 100644 --- a/stock/templates/stock/stock_item_list.jinja +++ b/stock/templates/stock/stock_item_list.jinja @@ -1,15 +1,30 @@ {% extends "core/base.jinja" %} {% block title %} -{% trans s=stock %}{{stock}}{% endtrans %} +{{ stock }} {% endblock %} {% block content %} {% if current_tab == "stocks" %} -

    {% trans %}New item{% endtrans %}

    +

    {% trans %}New item{% endtrans %}

    +{% endif %} +{% if stock %} +

    {{ stock }}

    +{% for t in ProductType.objects.order_by('name') %} +

    {{ t }}

    +
      + {% for i in stock.items.filter(type=t).order_by('name') %} +
    • {{ i }}
    • + {% endfor %} +
    +{% endfor %} +

    {% trans %}Others{% endtrans %}

    +
      + {% for i in stock.items.filter(type=None).order_by('name') %} +
    • {{ i }}
    • + {% endfor %} +
    +{% else %} +{% trans %}There is no items in this stock.{% endtrans %} {% endif %} -

    {% trans s=stock %}{{stock}}{% endtrans %}

    - - - {% endblock %} \ No newline at end of file diff --git a/stock/templates/stock/stock_list.jinja b/stock/templates/stock/stock_list.jinja index 5e3ed145..b0450984 100644 --- a/stock/templates/stock/stock_list.jinja +++ b/stock/templates/stock/stock_list.jinja @@ -11,7 +11,7 @@ {% for s in stock_list.order_by('name') %}
  • {% if user.can_edit(s) %} - {{s}} + {{s}} - Edit {% endif %}
  • diff --git a/stock/urls.py b/stock/urls.py index f5c8e868..436f7a4d 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -11,4 +11,6 @@ urlpatterns = [ # StockItem urls url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), + url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), + ] diff --git a/stock/views.py b/stock/views.py index 2d259dcf..e38e21db 100644 --- a/stock/views.py +++ b/stock/views.py @@ -15,18 +15,18 @@ from stock.models import Stock, StockItem class StockMain(CounterAdminTabsMixin, CanCreateMixin, DetailView): """ - The stock view for the counter owner + The stockitems list view for the counter owner """ - model = StockItem + model = Stock template_name = 'stock/stock_item_list.jinja' pk_url_kwarg = "stock_id" current_tab = "stocks" - def get_context_data(self, **kwargs): - context = super(StockItemList, self).get_context_data(**kwargs) - if 'stock' in self.request.GET.keys(): - context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() - return context + #def get_context_data(self, **kwargs): + # context = super(StockItemList, self).get_context_data(**kwargs) + # if 'stock' in self.request.GET.keys(): + # context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() + # return context class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ @@ -39,7 +39,7 @@ class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): class StockEditForm(forms.ModelForm): """ - docstring for StockEditForm"forms.ModelForm + A form to change stock's characteristics """ class Meta: model = Stock @@ -54,7 +54,7 @@ class StockEditForm(forms.ModelForm): class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): """ - A edit view for the stock + An edit view for the stock """ model = Stock form_class = StockEditForm @@ -63,6 +63,17 @@ class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): current_tab = "stocks" +class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): + """ + An edit view for a stock item + """ + model = StockItem + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'type', 'stock_owner']) + pk_url_kwarg = "item_id" + template_name = 'core/edit.jinja' + current_tab = "stocks" + + class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): """ A create view for a new Stock @@ -76,8 +87,8 @@ class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): def get_initial(self): ret = super(StockCreateView, self).get_initial() - if 'counter' in self.request.GET.keys(): - ret['counter'] = self.request.GET['counter'] + if 'counter_id' in self.kwargs.keys(): + ret['counter'] = self.kwargs['counter_id'] return ret class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): @@ -93,9 +104,11 @@ class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): def get_initial(self): ret = super(StockItemCreateView, self).get_initial() - if 'stock' in self.request.GET.keys(): - ret['stock_owner'] = self.request.GET['stock'] + if 'stock_id' in self.kwargs.keys(): + ret['stock_owner'] = self.kwargs['stock_id'] return ret def get_success_url(self): - return reverse_lazy('stock:main', kwargs={'stock_id': self.object.stock_owner.id}) + return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) + '?stock=' + str(self.object.stock_owner.id) + + From 9d8264bcbbdd785a111e9357bfc42b76fd1e1323 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 16 Nov 2016 19:23:55 +0100 Subject: [PATCH 10/27] remove stock_main.jinja --- locale/fr/LC_MESSAGES/django.po | 2908 +++++++++++++++++++++++++++++++ 1 file changed, 2908 insertions(+) create mode 100644 locale/fr/LC_MESSAGES/django.po diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 00000000..644b75ee --- /dev/null +++ b/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,2908 @@ +# Sith AE french translation file +# Copyright (C) 2016 +# This file is distributed under the same license as the Sith package. +# Skia , 2016 +# +msgid "" +msgstr "" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-16 19:23+0100\n" +"PO-Revision-Date: 2016-07-18\n" +"Last-Translator: Skia \n" +"Language-Team: AE info \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: accounting/models.py:36 accounting/models.py:58 accounting/models.py:85 +#: accounting/models.py:144 club/models.py:19 counter/models.py:71 +#: counter/models.py:96 counter/models.py:131 launderette/models.py:15 +#: launderette/models.py:60 launderette/models.py:85 stock/models.py:11 +#: stock/models.py:24 +msgid "name" +msgstr "nom" + +#: accounting/models.py:37 +msgid "street" +msgstr "rue" + +#: accounting/models.py:38 +msgid "city" +msgstr "ville" + +#: accounting/models.py:39 +msgid "postcode" +msgstr "code postal" + +#: accounting/models.py:40 +msgid "country" +msgstr "pays" + +#: accounting/models.py:41 core/models.py:167 +msgid "phone" +msgstr "téléphone" + +#: accounting/models.py:42 +msgid "email" +msgstr "email" + +#: accounting/models.py:43 +msgid "website" +msgstr "site internet" + +#: accounting/models.py:46 +msgid "company" +msgstr "entreprise" + +#: accounting/models.py:59 +msgid "iban" +msgstr "IBAN" + +#: accounting/models.py:60 +msgid "account number" +msgstr "numero de compte" + +#: accounting/models.py:61 accounting/models.py:86 club/models.py:145 +#: counter/models.py:105 counter/models.py:132 +msgid "club" +msgstr "club" + +#: accounting/models.py:64 +msgid "Bank account" +msgstr "Compte en banque" + +#: accounting/models.py:87 +msgid "bank account" +msgstr "compte en banque" + +#: accounting/models.py:90 +msgid "Club account" +msgstr "Compte club" + +#: accounting/models.py:135 +#, python-format +msgid "%(club_account)s on %(bank_account)s" +msgstr "%(club_account)s sur %(bank_account)s" + +#: accounting/models.py:142 club/models.py:146 counter/models.py:388 +#: launderette/models.py:122 +msgid "start date" +msgstr "date de début" + +#: accounting/models.py:143 club/models.py:147 counter/models.py:389 +msgid "end date" +msgstr "date de fin" + +#: accounting/models.py:145 +msgid "is closed" +msgstr "est fermé" + +#: accounting/models.py:146 accounting/models.py:349 +msgid "club account" +msgstr "compte club" + +#: accounting/models.py:147 accounting/models.py:193 counter/models.py:29 +#: counter/models.py:241 +msgid "amount" +msgstr "montant" + +#: accounting/models.py:148 +msgid "effective_amount" +msgstr "montant effectif" + +#: accounting/models.py:151 +msgid "General journal" +msgstr "Classeur" + +#: accounting/models.py:191 +msgid "number" +msgstr "numéro" + +#: accounting/models.py:192 +msgid "journal" +msgstr "classeur" + +#: accounting/models.py:194 core/models.py:498 core/models.py:778 +#: counter/models.py:244 counter/models.py:287 counter/models.py:405 +#: eboutic/models.py:15 eboutic/models.py:48 +msgid "date" +msgstr "date" + +#: accounting/models.py:195 counter/models.py:406 +msgid "comment" +msgstr "commentaire" + +#: accounting/models.py:196 counter/models.py:245 counter/models.py:288 +#: subscription/models.py:57 +msgid "payment method" +msgstr "méthode de paiement" + +#: accounting/models.py:197 +msgid "cheque number" +msgstr "numéro de chèque" + +#: accounting/models.py:198 eboutic/models.py:116 +msgid "invoice" +msgstr "facture" + +#: accounting/models.py:199 +msgid "is done" +msgstr "est fait" + +#: accounting/models.py:201 +msgid "simple type" +msgstr "type simplifié" + +#: accounting/models.py:203 accounting/models.py:304 +msgid "accounting type" +msgstr "type comptable" + +#: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325 +#: accounting/models.py:348 counter/models.py:279 +msgid "label" +msgstr "intitulé" + +#: accounting/models.py:206 +msgid "target type" +msgstr "type de cible" + +#: accounting/models.py:207 club/templates/club/club_members.jinja:8 +#: club/templates/club/club_old_members.jinja:8 +#: core/templates/core/user_clubs.jinja:15 +#: core/templates/core/user_clubs.jinja:41 +#: counter/templates/counter/cash_summary_list.jinja:32 +#: counter/templates/counter/stats.jinja:15 +#: launderette/templates/launderette/launderette_admin.jinja:44 +msgid "User" +msgstr "Utilisateur" + +#: accounting/models.py:207 club/templates/club/club_detail.jinja:5 +#: counter/templates/counter/invoices_call.jinja:20 +msgid "Club" +msgstr "Club" + +#: accounting/models.py:207 core/views/user.py:174 +msgid "Account" +msgstr "Compte" + +#: accounting/models.py:207 +msgid "Company" +msgstr "Entreprise" + +#: accounting/models.py:207 sith/settings.py:291 +msgid "Other" +msgstr "Autre" + +#: accounting/models.py:208 +msgid "target id" +msgstr "id de la cible" + +#: accounting/models.py:209 +msgid "target label" +msgstr "nom de la cible" + +#: accounting/models.py:210 +msgid "linked operation" +msgstr "opération liée" + +#: accounting/models.py:226 +#, python-format +msgid "" +"The date can not be before the start date of the journal, which is\n" +"%(start_date)s." +msgstr "" +"La date ne peut pas être avant la date de début du journal, qui est\n" +"%(start_date)s." + +#: accounting/models.py:229 +msgid "Target does not exists" +msgstr "La cible n'existe pas." + +#: accounting/models.py:231 +msgid "Please add a target label if you set no existing target" +msgstr "" +"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" + +#: accounting/models.py:233 +msgid "" +"You need to provide ether a simplified accounting type or a standard " +"accounting type" +msgstr "" +"Vous devez fournir soit un type comptable simplifié ou un type comptable " +"standard" + +#: accounting/models.py:294 counter/models.py:100 +msgid "code" +msgstr "code" + +#: accounting/models.py:296 +msgid "An accounting type code contains only numbers" +msgstr "Un code comptable ne contient que des numéros" + +#: accounting/models.py:300 +msgid "movement type" +msgstr "type de mouvement" + +#: accounting/models.py:300 +msgid "Credit" +msgstr "Crédit" + +#: accounting/models.py:300 +msgid "Debit" +msgstr "Débit" + +#: accounting/models.py:301 +msgid "Neutral" +msgstr "Neutre" + +#: accounting/models.py:327 +msgid "simplified accounting types" +msgstr "type simplifié" + +#: accounting/models.py:330 +msgid "simplified type" +msgstr "type simplifié" + +#: accounting/templates/accounting/accountingtype_list.jinja:4 +#: accounting/templates/accounting/accountingtype_list.jinja:15 +msgid "Accounting type list" +msgstr "Liste des types comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:9 +#: accounting/templates/accounting/bank_account_details.jinja:9 +#: accounting/templates/accounting/bank_account_list.jinja:9 +#: accounting/templates/accounting/club_account_details.jinja:9 +#: accounting/templates/accounting/journal_details.jinja:9 +#: accounting/templates/accounting/label_list.jinja:9 +#: accounting/templates/accounting/operation_edit.jinja:9 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 +#: core/templates/core/user_tools.jinja:43 +msgid "Accounting" +msgstr "Comptabilité" + +#: accounting/templates/accounting/accountingtype_list.jinja:10 +msgid "Accounting types" +msgstr "Type comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:13 +msgid "New accounting type" +msgstr "Nouveau type comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:22 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:22 +msgid "There is no types in this website." +msgstr "Il n'y a pas de types comptable dans ce site web." + +#: accounting/templates/accounting/bank_account_details.jinja:4 +#: accounting/templates/accounting/bank_account_details.jinja:13 +#: core/templates/core/user_tools.jinja:50 +msgid "Bank account: " +msgstr "Compte en banque : " + +#: accounting/templates/accounting/bank_account_details.jinja:15 +#: accounting/templates/accounting/club_account_details.jinja:16 +#: accounting/templates/accounting/label_list.jinja:21 +#: club/templates/club/club_sellings.jinja:49 +#: core/templates/core/file_detail.jinja:43 +#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66 +#: core/templates/core/user_account_detail.jinja:38 +#: core/templates/core/user_edit.jinja:18 +#: counter/templates/counter/last_ops.jinja:29 +#: counter/templates/counter/last_ops.jinja:59 +#: launderette/templates/launderette/launderette_admin.jinja:16 +#: launderette/views.py:146 +msgid "Delete" +msgstr "Supprimer" + +#: accounting/templates/accounting/bank_account_details.jinja:17 +#: club/views.py:32 core/views/user.py:130 +msgid "Infos" +msgstr "Infos" + +#: accounting/templates/accounting/bank_account_details.jinja:19 +msgid "IBAN: " +msgstr "IBAN : " + +#: accounting/templates/accounting/bank_account_details.jinja:20 +msgid "Number: " +msgstr "Numéro : " + +#: accounting/templates/accounting/bank_account_details.jinja:22 +msgid "New club account" +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:55 +#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:54 +#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 +#: core/templates/core/user_tools.jinja:36 core/views/user.py:147 +#: counter/templates/counter/cash_summary_list.jinja:53 +#: counter/templates/counter/counter_list.jinja:17 +#: counter/templates/counter/counter_list.jinja:32 +#: counter/templates/counter/counter_list.jinja:53 +#: launderette/templates/launderette/launderette_list.jinja:16 +msgid "Edit" +msgstr "Éditer" + +#: accounting/templates/accounting/bank_account_list.jinja:4 +#: accounting/templates/accounting/bank_account_list.jinja:17 +msgid "Bank account list" +msgstr "Liste des comptes en banque" + +#: accounting/templates/accounting/bank_account_list.jinja:12 +msgid "Manage simplified types" +msgstr "Gérer les types simplifiés" + +#: accounting/templates/accounting/bank_account_list.jinja:13 +msgid "Manage accounting types" +msgstr "Gérer les types comptable" + +#: accounting/templates/accounting/bank_account_list.jinja:14 +msgid "New bank account" +msgstr "Nouveau compte en banque" + +#: accounting/templates/accounting/bank_account_list.jinja:26 +msgid "There is no accounts in this website." +msgstr "Il n'y a pas de comptes dans ce site web." + +#: accounting/templates/accounting/club_account_details.jinja:4 +#: accounting/templates/accounting/club_account_details.jinja:14 +msgid "Club account:" +msgstr "Compte club : " + +#: accounting/templates/accounting/club_account_details.jinja:18 +#: accounting/templates/accounting/journal_details.jinja:16 +#: accounting/templates/accounting/label_list.jinja:15 +msgid "New label" +msgstr "Nouvelle étiquette" + +#: accounting/templates/accounting/club_account_details.jinja:19 +#: accounting/templates/accounting/journal_details.jinja:17 +#: accounting/templates/accounting/label_list.jinja:4 +#: accounting/templates/accounting/label_list.jinja:17 +msgid "Label list" +msgstr "Liste des étiquettes" + +#: accounting/templates/accounting/club_account_details.jinja:21 +msgid "New journal" +msgstr "Nouveau classeur" + +#: accounting/templates/accounting/club_account_details.jinja:23 +msgid "You can not create new journal while you still have one opened" +msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" + +#: accounting/templates/accounting/club_account_details.jinja:28 +#: launderette/templates/launderette/launderette_admin.jinja:43 +msgid "Name" +msgstr "Nom" + +#: accounting/templates/accounting/club_account_details.jinja:29 +msgid "Start" +msgstr "Début" + +#: accounting/templates/accounting/club_account_details.jinja:30 +msgid "End" +msgstr "Fin" + +#: accounting/templates/accounting/club_account_details.jinja:31 +#: accounting/templates/accounting/journal_details.jinja:31 +#: core/templates/core/user_account_detail.jinja:53 +#: core/templates/core/user_account_detail.jinja:80 +#: counter/templates/counter/last_ops.jinja:17 +msgid "Amount" +msgstr "Montant" + +#: accounting/templates/accounting/club_account_details.jinja:32 +msgid "Effective amount" +msgstr "Montant effectif" + +#: accounting/templates/accounting/club_account_details.jinja:33 +msgid "Closed" +msgstr "Fermé" + +#: accounting/templates/accounting/club_account_details.jinja:34 +#: accounting/templates/accounting/journal_details.jinja:39 +msgid "Actions" +msgstr "Actions" + +#: accounting/templates/accounting/club_account_details.jinja:50 +#: accounting/templates/accounting/journal_details.jinja:58 +msgid "Yes" +msgstr "Oui" + +#: accounting/templates/accounting/club_account_details.jinja:52 +#: accounting/templates/accounting/journal_details.jinja:60 +msgid "No" +msgstr "Non" + +#: accounting/templates/accounting/club_account_details.jinja:54 +#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 +msgid "View" +msgstr "Voir" + +#: accounting/templates/accounting/journal_details.jinja:4 +#: accounting/templates/accounting/journal_details.jinja:15 +msgid "General journal:" +msgstr "Classeur : " + +#: accounting/templates/accounting/journal_details.jinja:18 +#: core/templates/core/user_account.jinja:38 +#: core/templates/core/user_account_detail.jinja:10 +#: counter/templates/counter/counter_click.jinja:32 +msgid "Amount: " +msgstr "Montant: " + +#: accounting/templates/accounting/journal_details.jinja:19 +msgid "Effective amount: " +msgstr "Montant effectif: " + +#: accounting/templates/accounting/journal_details.jinja:21 +msgid "Journal is closed, you can not create operation" +msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" + +#: accounting/templates/accounting/journal_details.jinja:23 +msgid "New operation" +msgstr "Nouvelle opération" + +#: accounting/templates/accounting/journal_details.jinja:28 +#: counter/templates/counter/stats.jinja:14 +msgid "Nb" +msgstr "No" + +#: accounting/templates/accounting/journal_details.jinja:29 +#: club/templates/club/club_sellings.jinja:19 +#: core/templates/core/user_account_detail.jinja:17 +#: core/templates/core/user_account_detail.jinja:50 +#: core/templates/core/user_account_detail.jinja:78 +#: counter/templates/counter/cash_summary_list.jinja:34 +#: counter/templates/counter/last_ops.jinja:14 +#: counter/templates/counter/last_ops.jinja:39 +msgid "Date" +msgstr "Date" + +#: accounting/templates/accounting/journal_details.jinja:30 +#: club/templates/club/club_sellings.jinja:23 +#: core/templates/core/user_account_detail.jinja:20 +#: counter/templates/counter/last_ops.jinja:42 +msgid "Label" +msgstr "Étiquette" + +#: accounting/templates/accounting/journal_details.jinja:32 +msgid "Payment mode" +msgstr "Méthode de paiement" + +#: accounting/templates/accounting/journal_details.jinja:33 +msgid "Target" +msgstr "Cible" + +#: accounting/templates/accounting/journal_details.jinja:34 +msgid "Code" +msgstr "Code" + +#: accounting/templates/accounting/journal_details.jinja:35 +msgid "Nature" +msgstr "Nature" + +#: accounting/templates/accounting/journal_details.jinja:36 +msgid "Done" +msgstr "Effectué" + +#: accounting/templates/accounting/journal_details.jinja:37 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:716 +msgid "Comment" +msgstr "Commentaire" + +#: accounting/templates/accounting/journal_details.jinja:38 +msgid "File" +msgstr "Fichier" + +#: accounting/templates/accounting/label_list.jinja:14 +msgid "Back to club account" +msgstr "Retour au compte club" + +#: accounting/templates/accounting/label_list.jinja:26 +msgid "There is no label in this club account." +msgstr "Il n'y a pas d'étiquette dans ce compte club." + +#: accounting/templates/accounting/operation_edit.jinja:4 +#: accounting/templates/accounting/operation_edit.jinja:13 +#: accounting/templates/accounting/operation_edit.jinja:16 +msgid "Edit operation" +msgstr "Éditer l'opération" + +#: accounting/templates/accounting/operation_edit.jinja:40 +#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7 +#: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20 +#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 +#: core/templates/core/pagerev_edit.jinja:24 +#: core/templates/core/user_godfathers.jinja:35 +#: counter/templates/counter/cash_register_summary.jinja:22 +#: subscription/templates/subscription/subscription.jinja:23 +msgid "Save" +msgstr "Sauver" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:4 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:15 +msgid "Simplified type list" +msgstr "Liste des types simplifiés" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:10 +msgid "Simplified types" +msgstr "Types simplifiés" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:13 +msgid "New simplified type" +msgstr "Nouveau type simplifié" + +#: club/models.py:21 +msgid "unix name" +msgstr "nom unix" + +#: club/models.py:25 +msgid "" +"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " +"characters." +msgstr "" +"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " +"lettres, des nombres, et les caractères ./-/_" + +#: club/models.py:30 +msgid "A club with that unix name already exists." +msgstr "Un club avec ce nom UNIX existe déjà." + +#: club/models.py:33 core/models.py:169 +msgid "address" +msgstr "Adresse" + +#: club/models.py:39 core/models.py:118 +msgid "home" +msgstr "home" + +#: club/models.py:47 +msgid "You can not make loops in clubs" +msgstr "Vous ne pouvez pas faire de boucles dans les clubs" + +#: club/models.py:61 +msgid "A club with that unix_name already exists" +msgstr "Un club avec ce nom UNIX existe déjà." + +#: club/models.py:144 counter/models.py:386 counter/models.py:403 +#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 +#: launderette/models.py:126 +msgid "user" +msgstr "nom d'utilisateur" + +#: club/models.py:148 core/models.py:136 +msgid "role" +msgstr "rôle" + +#: club/models.py:150 core/models.py:33 counter/models.py:72 +#: counter/models.py:97 +msgid "description" +msgstr "description" + +#: club/models.py:155 +msgid "User must be subscriber to take part to a club" +msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" + +#: club/models.py:157 +msgid "User is already member of that club" +msgstr "L'utilisateur est déjà membre de ce club" + +#: club/models.py:166 +msgid "past member" +msgstr "Anciens membres" + +#: club/templates/club/club_list.jinja:4 club/templates/club/club_list.jinja:24 +msgid "Club list" +msgstr "Liste des clubs" + +#: club/templates/club/club_list.jinja:21 +#: core/templates/core/user_tools.jinja:19 +msgid "New club" +msgstr "Nouveau club" + +#: club/templates/club/club_list.jinja:31 +msgid "There is no club in this website." +msgstr "Il n'y a pas de club dans ce site web." + +#: club/templates/club/club_members.jinja:5 +msgid "Club members" +msgstr "Membres du club" + +#: club/templates/club/club_members.jinja:9 +#: club/templates/club/club_old_members.jinja:9 +#: core/templates/core/user_clubs.jinja:16 +#: core/templates/core/user_clubs.jinja:42 +msgid "Role" +msgstr "Rôle" + +#: club/templates/club/club_members.jinja:10 +#: club/templates/club/club_old_members.jinja:10 +#: core/templates/core/user_clubs.jinja:17 +#: core/templates/core/user_clubs.jinja:43 +msgid "Description" +msgstr "Description" + +#: club/templates/club/club_members.jinja:11 +#: core/templates/core/user_clubs.jinja:18 +#: launderette/templates/launderette/launderette_admin.jinja:45 +msgid "Since" +msgstr "Depuis" + +#: club/templates/club/club_members.jinja:21 +#: core/templates/core/user_clubs.jinja:29 +msgid "Mark as old" +msgstr "Marquer comme ancien" + +#: club/templates/club/club_members.jinja:30 +#: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 +#: launderette/views.py:146 +msgid "Add" +msgstr "Ajouter" + +#: club/templates/club/club_old_members.jinja:5 +msgid "Club old members" +msgstr "Anciens membres du club" + +#: club/templates/club/club_old_members.jinja:11 +#: core/templates/core/user_clubs.jinja:44 +msgid "From" +msgstr "Du" + +#: club/templates/club/club_old_members.jinja:12 +#: core/templates/core/user_clubs.jinja:45 +msgid "To" +msgstr "Au" + +#: club/templates/club/club_sellings.jinja:5 club/views.py:59 club/views.py:216 +#: counter/templates/counter/counter_main.jinja:19 +#: counter/templates/counter/last_ops.jinja:35 +msgid "Sellings" +msgstr "Ventes" + +#: club/templates/club/club_sellings.jinja:9 +#: counter/templates/counter/cash_summary_list.jinja:15 +msgid "Show" +msgstr "Montrer" + +#: club/templates/club/club_sellings.jinja:10 +msgid "Download as cvs" +msgstr "Télécharger en CSV" + +#: club/templates/club/club_sellings.jinja:13 +msgid "Quantity: " +msgstr "Quantité : " + +#: club/templates/club/club_sellings.jinja:13 +msgid "units" +msgstr "unités" + +#: club/templates/club/club_sellings.jinja:14 +#: counter/templates/counter/counter_click.jinja:70 +#: counter/templates/counter/counter_main.jinja:28 +#: eboutic/templates/eboutic/eboutic_main.jinja:34 +msgid "Total: " +msgstr "Total : " + +#: club/templates/club/club_sellings.jinja:20 club/views.py:167 +#: core/templates/core/user_account_detail.jinja:18 +#: core/templates/core/user_account_detail.jinja:51 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:78 +msgid "Counter" +msgstr "Comptoir" + +#: club/templates/club/club_sellings.jinja:21 +#: core/templates/core/user_account_detail.jinja:19 +#: core/templates/core/user_account_detail.jinja:52 +#: counter/templates/counter/last_ops.jinja:15 +#: counter/templates/counter/last_ops.jinja:40 +msgid "Barman" +msgstr "Barman" + +#: club/templates/club/club_sellings.jinja:22 +#: counter/templates/counter/counter_click.jinja:29 +#: counter/templates/counter/last_ops.jinja:16 +#: counter/templates/counter/last_ops.jinja:41 +msgid "Customer" +msgstr "Client" + +#: club/templates/club/club_sellings.jinja:24 +#: core/templates/core/user_account_detail.jinja:21 +#: core/templates/core/user_stats.jinja:28 +#: counter/templates/counter/last_ops.jinja:43 +msgid "Quantity" +msgstr "Quantité" + +#: club/templates/club/club_sellings.jinja:25 +#: core/templates/core/user_account.jinja:10 +#: core/templates/core/user_account_detail.jinja:22 +#: counter/templates/counter/cash_summary_list.jinja:35 +#: counter/templates/counter/last_ops.jinja:44 +#: counter/templates/counter/stats.jinja:18 +msgid "Total" +msgstr "Total" + +#: club/templates/club/club_sellings.jinja:26 +#: core/templates/core/user_account_detail.jinja:23 +#: core/templates/core/user_account_detail.jinja:54 +#: counter/templates/counter/last_ops.jinja:18 +#: counter/templates/counter/last_ops.jinja:45 +msgid "Payment method" +msgstr "Méthode de paiement" + +#: club/templates/club/club_tools.jinja:4 +#: core/templates/core/user_tools.jinja:62 +msgid "Club tools" +msgstr "Outils club" + +#: club/templates/club/club_tools.jinja:6 +msgid "Counters:" +msgstr "Comptoirs : " + +#: club/templates/club/club_tools.jinja:22 +msgid "Accouting: " +msgstr "Comptabilité : " + +#: club/templates/club/club_tools.jinja:30 +msgid "Manage launderettes" +msgstr "Gestion des laveries" + +#: club/views.py:38 +msgid "Members" +msgstr "Membres" + +#: club/views.py:43 +msgid "Old members" +msgstr "Anciens membres" + +#: club/views.py:49 core/templates/core/base.jinja:44 core/views/user.py:141 +msgid "Tools" +msgstr "Outils" + +#: club/views.py:65 counter/templates/counter/counter_list.jinja:21 +#: counter/templates/counter/counter_list.jinja:42 +#: counter/templates/counter/counter_list.jinja:57 +msgid "Props" +msgstr "Propriétés" + +#: club/views.py:103 core/views/forms.py:204 counter/views.py:39 +msgid "Select user" +msgstr "Choisir un utilisateur" + +#: club/views.py:150 +msgid "You do not have the permission to do that" +msgstr "Vous n'avez pas la permission de faire cela" + +#: club/views.py:165 counter/views.py:914 +msgid "Begin date" +msgstr "Date de début" + +#: club/views.py:166 counter/views.py:915 +msgid "End date" +msgstr "Date de fin" + +#: club/views.py:180 core/templates/core/user_stats.jinja:27 +#: counter/views.py:995 +msgid "Product" +msgstr "Produit" + +#: core/models.py:29 +msgid "meta group status" +msgstr "status du meta-groupe" + +#: core/models.py:31 +msgid "Whether a group is a meta group or not" +msgstr "Si un groupe est un meta-groupe ou pas" + +#: core/models.py:59 +#, python-format +msgid "%(value)s is not a valid promo (between 0 and %(end)s)" +msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" + +#: core/models.py:75 +msgid "username" +msgstr "nom d'utilisateur" + +#: core/models.py:78 +msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." +msgstr "" +"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" +"+/-/_" + +#: core/models.py:82 +msgid "" +"Enter a valid username. This value may contain only letters, numbers and ./" +"+/-/_ characters." +msgstr "" +"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" +"+/-/_" + +#: core/models.py:87 +msgid "A user with that username already exists." +msgstr "Un utilisateur de ce nom existe déjà" + +#: core/models.py:90 +msgid "first name" +msgstr "Prénom" + +#: core/models.py:91 +msgid "last name" +msgstr "Nom" + +#: core/models.py:92 +msgid "email address" +msgstr "adresse email" + +#: core/models.py:93 +msgid "date of birth" +msgstr "date de naissance" + +#: core/models.py:94 +msgid "nick name" +msgstr "surnom" + +#: core/models.py:96 +msgid "staff status" +msgstr "status \"staff\"" + +#: core/models.py:98 +msgid "Designates whether the user can log into this admin site." +msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." + +#: core/models.py:101 +msgid "active" +msgstr "actif" + +#: core/models.py:104 +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " +"lieu de supprimer les comptes." + +#: core/models.py:108 +msgid "date joined" +msgstr "date d'inscription" + +#: core/models.py:109 +msgid "last update" +msgstr "dernière mise à jour" + +#: core/models.py:111 +msgid "superuser" +msgstr "super-utilisateur" + +#: core/models.py:114 +msgid "Designates whether this user is a superuser. " +msgstr "Est-ce que l'utilisateur est super-utilisateur." + +#: core/models.py:119 +msgid "profile" +msgstr "profil" + +#: core/models.py:121 +msgid "avatar" +msgstr "avatar" + +#: core/models.py:123 +msgid "scrub" +msgstr "blouse" + +#: core/models.py:125 +msgid "sex" +msgstr "sexe" + +#: core/models.py:125 +msgid "Man" +msgstr "Homme" + +#: core/models.py:125 +msgid "Woman" +msgstr "Femme" + +#: core/models.py:126 +msgid "tshirt size" +msgstr "taille de tshirt" + +#: core/models.py:127 +msgid "-" +msgstr "-" + +#: core/models.py:128 +msgid "XS" +msgstr "XS" + +#: core/models.py:129 +msgid "S" +msgstr "S" + +#: core/models.py:130 +msgid "M" +msgstr "M" + +#: core/models.py:131 +msgid "L" +msgstr "L" + +#: core/models.py:132 +msgid "XL" +msgstr "XL" + +#: core/models.py:133 +msgid "XXL" +msgstr "XXL" + +#: core/models.py:134 +msgid "XXXL" +msgstr "XXXL" + +#: core/models.py:137 +msgid "Student" +msgstr "Étudiant" + +#: core/models.py:138 +msgid "Administrative agent" +msgstr "Personnel administratif" + +#: core/models.py:139 +msgid "Teacher" +msgstr "Enseignant" + +#: core/models.py:140 +msgid "Agent" +msgstr "Personnel" + +#: core/models.py:141 +msgid "Doctor" +msgstr "Doctorant" + +#: core/models.py:142 +msgid "Former student" +msgstr "Ancien étudiant" + +#: core/models.py:143 +msgid "Service" +msgstr "Service" + +#: core/models.py:145 +msgid "department" +msgstr "département" + +#: core/models.py:146 +msgid "TC" +msgstr "TC" + +#: core/models.py:147 +msgid "IMSI" +msgstr "IMSI" + +#: core/models.py:148 +msgid "IMAP" +msgstr "IMAP" + +#: core/models.py:149 +msgid "INFO" +msgstr "INFO" + +#: core/models.py:150 +msgid "GI" +msgstr "GI" + +#: core/models.py:151 +msgid "E" +msgstr "E" + +#: core/models.py:152 +msgid "EE" +msgstr "EE" + +#: core/models.py:153 +msgid "GESC" +msgstr "GESC" + +#: core/models.py:154 +msgid "GMC" +msgstr "GMC" + +#: core/models.py:155 +msgid "MC" +msgstr "MC" + +#: core/models.py:156 +msgid "EDIM" +msgstr "EDIM" + +#: core/models.py:157 +msgid "Humanities" +msgstr "Humanités" + +#: core/models.py:158 +msgid "N/A" +msgstr "N/A" + +#: core/models.py:160 +msgid "dpt option" +msgstr "Filière" + +#: core/models.py:161 +msgid "semester" +msgstr "semestre" + +#: core/models.py:162 +msgid "quote" +msgstr "citation" + +#: core/models.py:163 +msgid "school" +msgstr "école" + +#: core/models.py:164 +msgid "promo" +msgstr "promo" + +#: core/models.py:165 +msgid "forum signature" +msgstr "signature du forum" + +#: core/models.py:166 +msgid "second email address" +msgstr "adresse email secondaire" + +#: core/models.py:168 +msgid "parent phone" +msgstr "téléphone des parents" + +#: core/models.py:170 +msgid "parent address" +msgstr "adresse des parents" + +#: core/models.py:171 +msgid "is subscriber viewable" +msgstr "profil visible par les cotisants" + +#: core/models.py:294 +msgid "A user with that username already exists" +msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" + +#: core/models.py:417 core/templates/core/macros.jinja:17 +#: core/templates/core/user_detail.jinja:14 +#: core/templates/core/user_detail.jinja:16 +#: core/templates/core/user_edit.jinja:16 +msgid "Profile" +msgstr "Profil" + +#: core/models.py:475 +msgid "Visitor" +msgstr "Visiteur" + +#: core/models.py:480 +msgid "define if we show a users stats" +msgstr "Definit si l'on montre les statistiques de l'utilisateur" + +#: core/models.py:482 +msgid "Show your account statistics to others" +msgstr "Montrez vos statistiques de compte aux autres" + +#: core/models.py:489 +msgid "file name" +msgstr "nom du fichier" + +#: core/models.py:490 core/models.py:625 +msgid "parent" +msgstr "parent" + +#: core/models.py:491 core/models.py:501 +msgid "file" +msgstr "fichier" + +#: core/models.py:492 +msgid "owner" +msgstr "propriétaire" + +#: core/models.py:493 core/models.py:631 +msgid "edit group" +msgstr "groupe d'édition" + +#: core/models.py:494 core/models.py:632 +msgid "view group" +msgstr "groupe de vue" + +#: core/models.py:495 +msgid "is folder" +msgstr "est un dossier" + +#: core/models.py:496 +msgid "mime type" +msgstr "type mime" + +#: core/models.py:497 +msgid "size" +msgstr "taille" + +#: core/models.py:529 +msgid "Character '/' not authorized in name" +msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" + +#: core/models.py:532 core/models.py:537 +msgid "Loop in folder tree" +msgstr "Boucle dans l'arborescence des dossiers" + +#: core/models.py:541 +msgid "You can not make a file be a children of a non folder file" +msgstr "" +"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " +"un dossier" + +#: core/models.py:545 +msgid "Duplicate file" +msgstr "Un fichier de ce nom existe déjà" + +#: core/models.py:555 +msgid "You must provide a file" +msgstr "Vous devez fournir un fichier" + +#: core/models.py:580 +msgid "Folder: " +msgstr "Dossier : " + +#: core/models.py:582 +msgid "File: " +msgstr "Fichier : " + +#: core/models.py:624 core/models.py:628 +msgid "page name" +msgstr "nom de la page" + +#: core/models.py:629 +msgid "owner group" +msgstr "groupe propriétaire" + +#: core/models.py:633 +msgid "lock user" +msgstr "utilisateur bloquant" + +#: core/models.py:634 +msgid "lock_timeout" +msgstr "décompte du déblocage" + +#: core/models.py:661 +msgid "Duplicate page" +msgstr "Une page de ce nom existe déjà" + +#: core/models.py:667 +msgid "Loop in page tree" +msgstr "Boucle dans l'arborescence des pages" + +#: core/models.py:775 +msgid "revision" +msgstr "révision" + +#: core/models.py:776 +msgid "page title" +msgstr "titre de la page" + +#: core/models.py:777 +msgid "page content" +msgstr "contenu de la page" + +#: core/templates/core/403.jinja:5 +msgid "403, Forbidden" +msgstr "403. Non autorisé" + +#: core/templates/core/404.jinja:5 +msgid "404, Not Found" +msgstr "404. Non trouvé" + +#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 +msgid "Welcome!" +msgstr "Bienvenue!" + +#: core/templates/core/base.jinja:19 +msgid "Logo" +msgstr "Logo" + +#: core/templates/core/base.jinja:24 core/templates/core/login.jinja:4 +#: core/templates/core/password_reset_complete.jinja:5 +msgid "Login" +msgstr "Connexion" + +#: core/templates/core/base.jinja:25 core/templates/core/register.jinja:18 +msgid "Register" +msgstr "S'enregister" + +#: core/templates/core/base.jinja:45 +msgid "Logout" +msgstr "Déconnexion" + +#: core/templates/core/base.jinja:47 core/templates/core/base.jinja.py:48 +msgid "Search" +msgstr "Recherche" + +#: core/templates/core/base.jinja:70 +msgid "Main" +msgstr "Accueil" + +#: core/templates/core/base.jinja:71 +msgid "Matmatronch" +msgstr "Matmatronch" + +#: core/templates/core/base.jinja:72 +msgid "Wiki" +msgstr "Wiki" + +#: core/templates/core/base.jinja:73 +msgid "SAS" +msgstr "SAS" + +#: core/templates/core/base.jinja:74 +msgid "Forum" +msgstr "Forum" + +#: core/templates/core/base.jinja:75 +msgid "Services" +msgstr "Services" + +#: core/templates/core/base.jinja:76 core/templates/core/file.jinja:20 +#: core/views/files.py:47 +msgid "Files" +msgstr "Fichiers" + +#: core/templates/core/base.jinja:77 +msgid "Sponsors" +msgstr "Partenaires" + +#: core/templates/core/base.jinja:78 +msgid "Help" +msgstr "Aide" + +#: core/templates/core/base.jinja:110 +msgid "Site made by good people" +msgstr "Site réalisé par des gens bons" + +#: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 +#, python-format +msgid "Create %(name)s" +msgstr "Créer %(name)s" + +#: core/templates/core/delete_confirm.jinja:4 +#: core/templates/core/delete_confirm.jinja:8 +#: core/templates/core/file_delete_confirm.jinja:4 +#: core/templates/core/file_delete_confirm.jinja:8 +msgid "Delete confirmation" +msgstr "Confirmation de suppression" + +#: core/templates/core/delete_confirm.jinja:10 +#: core/templates/core/file_delete_confirm.jinja:10 +#, python-format +msgid "Are you sure you want to delete \"%(obj)s\"?" +msgstr "Êtes-vous sûr de vouloir supprimer \"%(obj)s\" ?" + +#: core/templates/core/delete_confirm.jinja:11 +#: core/templates/core/file_delete_confirm.jinja:11 +msgid "Confirm" +msgstr "Confirmation" + +#: core/templates/core/delete_confirm.jinja:14 +#: core/templates/core/file_delete_confirm.jinja:14 +#: counter/templates/counter/counter_click.jinja:93 +msgid "Cancel" +msgstr "Annuler" + +#: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13 +#: core/templates/core/file_edit.jinja:4 +#: counter/templates/counter/cash_register_summary.jinja:4 +#, python-format +msgid "Edit %(obj)s" +msgstr "Éditer %(obj)s" + +#: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 +msgid "File list" +msgstr "Liste des fichiers" + +#: core/templates/core/file.jinja:9 +msgid "New file" +msgstr "Nouveau fichier" + +#: core/templates/core/file.jinja:11 core/templates/core/page.jinja:11 +msgid "Not found" +msgstr "Non trouvé" + +#: core/templates/core/file.jinja:32 +msgid "My files" +msgstr "Mes fichiers" + +#: core/templates/core/file.jinja:41 core/templates/core/page.jinja:34 +msgid "Prop" +msgstr "Propriétés" + +#: core/templates/core/file_detail.jinja:13 +msgid "Owner: " +msgstr "Propriétaire : " + +#: core/templates/core/file_detail.jinja:34 +msgid "Real name: " +msgstr "Nom réel : " + +#: core/templates/core/file_detail.jinja:35 +msgid "Date: " +msgstr "Date : " + +#: core/templates/core/file_detail.jinja:37 +msgid "Type: " +msgstr "Type : " + +#: core/templates/core/file_detail.jinja:38 +msgid "Size: " +msgstr "Taille : " + +#: core/templates/core/file_detail.jinja:38 +msgid "bytes" +msgstr "octets" + +#: core/templates/core/file_detail.jinja:40 +msgid "Download" +msgstr "Télécharger" + +#: core/templates/core/file_list.jinja:19 +msgid "There is no file in this website." +msgstr "Il n'y a pas de fichier sur ce site web." + +#: core/templates/core/group_edit.jinja:4 +msgid "Back to list" +msgstr "Retour à la liste" + +#: core/templates/core/group_edit.jinja:5 +msgid "Edit group" +msgstr "Éditer le groupe" + +#: core/templates/core/group_edit.jinja:9 +#: core/templates/core/user_edit.jinja:36 +#: core/templates/core/user_group.jinja:8 +msgid "Update" +msgstr "Mettre à jour" + +#: core/templates/core/group_list.jinja:4 +#: core/templates/core/group_list.jinja:8 +msgid "Group list" +msgstr "Liste des groupes" + +#: core/templates/core/group_list.jinja:9 +msgid "New group" +msgstr "Nouveau groupe" + +#: core/templates/core/index.jinja:7 +msgid "Welcome to the new AE's website!" +msgstr "Bienvenue sur le nouveau site de l'AE ! " + +#: core/templates/core/login.jinja:10 +msgid "Your username and password didn't match. Please try again." +msgstr "" +"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Merci de " +"réessayer." + +#: core/templates/core/login.jinja:15 +msgid "" +"Your account doesn't have access to this page. To proceed,\n" +" please login with an account that has access." +msgstr "" +"Votre compte n'a pas accès à cette page. Merci de vous identifier avec un " +"compte qui a accès." + +#: core/templates/core/login.jinja:18 +msgid "Please login to see this page." +msgstr "Merci de vous identifier pour voir cette page." + +#: core/templates/core/login.jinja:28 +#: counter/templates/counter/counter_main.jinja:51 +msgid "login" +msgstr "login" + +#: core/templates/core/login.jinja:32 +msgid "Lost password?" +msgstr "Mot de passe perdu ?" + +#: core/templates/core/macros.jinja:27 core/templates/core/user_detail.jinja:27 +msgid "Born: " +msgstr "Né le : " + +#: core/templates/core/macros.jinja:31 core/templates/core/user_detail.jinja:48 +msgid "Promo: " +msgstr "Promo : " + +#: core/templates/core/macros.jinja:38 +#, python-format +msgid "Subscribed until %(subscription_end)s" +msgstr "Cotisant jusqu'au %(subscription_end)s" + +#: core/templates/core/macros.jinja:39 core/templates/core/user_edit.jinja:39 +msgid "Account number: " +msgstr "Numero de compte : " + +#: core/templates/core/macros.jinja:44 launderette/models.py:129 +msgid "Slot" +msgstr "Créneau" + +#: core/templates/core/macros.jinja:55 +#: launderette/templates/launderette/launderette_admin.jinja:20 +msgid "Tokens" +msgstr "Jetons" + +#: core/templates/core/new_user_email.jinja:2 +msgid "" +"You're receiving this email because you subscribed to the UTBM student " +"association." +msgstr "" +"Vous avez reçu cet email parce que vous avez cotisé à l'Association des " +"Étudiants de l'UTBM." + +#: core/templates/core/new_user_email.jinja:4 +#: core/templates/core/password_reset_email.jinja:4 +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Merci de vous rendre sur la page suivante et de choisir un nouveau mot de " +"passe :" + +#: core/templates/core/new_user_email.jinja:8 +msgid "Your username, in case it was not given to you: " +msgstr "Votre nom d'utilisateur, si il ne vous a pas été donné :" + +#: core/templates/core/new_user_email.jinja:9 +msgid "" +"You also got a new account that will be useful to purchase products in the " +"living areas and on the Eboutic." +msgstr "" +"Un compte vous a également été créé, qui vous servira notamment à consommer " +"dans les lieux de vie ou sur l'Eboutic." + +#: core/templates/core/new_user_email.jinja:10 +#, python-format +msgid "Here is your account number: %(account)s" +msgstr "Voici votre numéro de compte AE : %(account)s" + +#: core/templates/core/new_user_email.jinja:12 +msgid "Thanks for subscribing! " +msgstr "Merci d'avoir cotisé !" + +#: core/templates/core/new_user_email.jinja:14 +msgid "The AE team" +msgstr "L'équipe AE" + +#: core/templates/core/new_user_email_subject.jinja:2 +msgid "New subscription to the UTBM student association" +msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" + +#: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 +#: core/templates/core/page_list.jinja:9 +msgid "Page list" +msgstr "Liste des pages" + +#: core/templates/core/page.jinja:9 +msgid "Create page" +msgstr "Créer une page" + +#: core/templates/core/page.jinja:29 +msgid "History" +msgstr "Historique" + +#: core/templates/core/page.jinja:45 +msgid "Page does not exist" +msgstr "La page n'existe pas." + +#: core/templates/core/page.jinja:47 +msgid "Create it?" +msgstr "La créer ?" + +#: core/templates/core/page_detail.jinja:5 +#, python-format +msgid "This may not be the last update, you are seeing revision %(rev_id)s!" +msgstr "" +"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la " +"version %(rev_id)s." + +#: core/templates/core/page_hist.jinja:6 +msgid "Page history" +msgstr "Historique de la page" + +#: core/templates/core/page_hist.jinja:7 +#, python-format +msgid "You're seeing the history of page \"%(page_name)s\"" +msgstr "Vous consultez l'historique de la page \"%(page_name)s\"" + +#: core/templates/core/page_hist.jinja:11 +msgid "last" +msgstr "actuel" + +#: core/templates/core/page_list.jinja:16 +msgid "There is no page in this website." +msgstr "Il n'y a pas de page sur ce site web." + +#: core/templates/core/page_prop.jinja:4 +msgid "Page properties" +msgstr "Propriétés de la page" + +#: core/templates/core/pagerev_edit.jinja:19 +msgid "Edit page" +msgstr "Éditer la page" + +#: core/templates/core/pagerev_edit.jinja:23 +msgid "Preview" +msgstr "Prévisualiser" + +#: core/templates/core/password_change.jinja:6 +#, python-format +msgid "Change password for %(user)s" +msgstr "Changer le mot de passe de %(user)s" + +#: core/templates/core/password_change.jinja:11 +msgid "Change" +msgstr "Changer" + +#: core/templates/core/password_change_done.jinja:4 +msgid "You successfully changed your password!" +msgstr "Vous avez correctement changé votre mot de passe !" + +#: core/templates/core/password_reset.jinja:7 +#: core/templates/core/password_reset_confirm.jinja:7 +msgid "Reset" +msgstr "Reset" + +#: core/templates/core/password_reset_complete.jinja:4 +msgid "You successfully reset your password!" +msgstr "Vous avez correctement réinitialisé votre mot de passe !" + +#: core/templates/core/password_reset_done.jinja:4 +msgid "Password reset sent" +msgstr "Réinitialisation de mot de passe envoyée" + +#: core/templates/core/password_reset_done.jinja:7 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should\n" +"receive them shortly." +msgstr "" +"Nous vous avons envoyé les instructions pour réinitialiser votre mot de " +"passe par email, si un compte avec l'email entré existe effectivement.\n" +"Vous devriez les recevoir rapidement." + +#: core/templates/core/password_reset_done.jinja:12 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam\n" +"folder." +msgstr "" +"Si vous ne recevez pas d'email, assurez-vous d'avoir correctement entré " +"l'adresse email avec laquelle vous vous êtes inscrit, et vérifiez votre " +"dossier de spam." + +#: core/templates/core/password_reset_email.jinja:2 +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vous avez reçu cet email parce que vous avez demandé une réinitialisation du " +"mot de passe pour votre compte sur le site %(site_name)s." + +#: core/templates/core/password_reset_email.jinja:8 +msgid "Your username, in case you've forgotten: " +msgstr "Votre nom d'utilisateur, en cas d'oubli :" + +#: core/templates/core/password_reset_email.jinja:10 +msgid "Thanks for using our site! " +msgstr "Merci d'utiliser notre site !" + +#: core/templates/core/password_reset_email.jinja:12 +#, python-format +msgid "The %(site_name)s team" +msgstr "L'équipe de %(site_name)s" + +#: core/templates/core/register.jinja:3 core/templates/core/register.jinja:6 +msgid "Register a user" +msgstr "Enregistrer un utilisateur" + +#: core/templates/core/register.jinja:9 +#, python-format +msgid "Welcome %(user_name)s!" +msgstr "Bienvenue, %(user_name)s!" + +#: core/templates/core/register.jinja:10 +msgid "" +"You successfully registred and you will soon receive a confirmation mail." +msgstr "" +"Vous vous êtes correctement enregistré, et vous devriez recevoir rapidement " +"un email de confirmation." + +#: core/templates/core/register.jinja:12 +#, python-format +msgid "Your username is %(username)s." +msgstr "Votre nom d'utilisateur est %(username)s." + +#: core/templates/core/search.jinja:6 +msgid "Search result" +msgstr "Résultat de la recherche" + +#: core/templates/core/search.jinja:10 +msgid "Users" +msgstr "Utilisateurs" + +#: core/templates/core/search.jinja:18 core/views/user.py:153 +#: counter/templates/counter/stats.jinja:17 +msgid "Clubs" +msgstr "Clubs" + +#: core/templates/core/user_account.jinja:8 +msgid "Year" +msgstr "Année" + +#: core/templates/core/user_account.jinja:9 +msgid "Month" +msgstr "Mois" + +#: core/templates/core/user_account.jinja:32 +#: core/templates/core/user_account_detail.jinja:4 +#, python-format +msgid "%(user_name)s's account" +msgstr "Compte de %(user_name)s" + +#: core/templates/core/user_account.jinja:37 +#: core/templates/core/user_account_detail.jinja:9 +msgid "User account" +msgstr "Compte utilisateur" + +#: core/templates/core/user_account.jinja:42 +#: core/templates/core/user_account_detail.jinja:13 +msgid "Account buyings" +msgstr "Achat sur compte utilisateur" + +#: core/templates/core/user_account.jinja:45 +#: core/templates/core/user_account_detail.jinja:46 +#: counter/templates/counter/cash_summary_list.jinja:17 +#: counter/templates/counter/last_ops.jinja:10 +msgid "Refillings" +msgstr "Rechargements" + +#: core/templates/core/user_account.jinja:49 +#: core/templates/core/user_account_detail.jinja:74 +msgid "Eboutic invoices" +msgstr "Facture eboutic" + +#: core/templates/core/user_account.jinja:53 counter/views.py:484 +msgid "Etickets" +msgstr "Etickets" + +#: core/templates/core/user_account.jinja:64 +#: core/templates/core/user_account_detail.jinja:102 +msgid "User has no account" +msgstr "L'utilisateur n'a pas de compte" + +#: core/templates/core/user_account_detail.jinja:11 +#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:146 +msgid "Back" +msgstr "Retour" + +#: core/templates/core/user_account_detail.jinja:79 +msgid "Items" +msgstr "Articles" + +#: core/templates/core/user_clubs.jinja:4 +#, python-format +msgid "%(user_name)s's club(s)" +msgstr "Clubs de %(user_name)s" + +#: core/templates/core/user_clubs.jinja:8 +msgid "Club(s)" +msgstr "Clubs" + +#: core/templates/core/user_clubs.jinja:10 +msgid "Current club(s) :" +msgstr "Clubs actuels : " + +#: core/templates/core/user_clubs.jinja:36 +msgid "Old club(s) :" +msgstr "Anciens clubs :" + +#: core/templates/core/user_detail.jinja:5 +#, python-format +msgid "%(user_name)s's profile" +msgstr "Profil de %(user_name)s" + +#: core/templates/core/user_detail.jinja:33 +msgid "Option: " +msgstr "Filière : " + +#: core/templates/core/user_detail.jinja:68 +msgid "Not subscribed" +msgstr "Non cotisant" + +#: core/templates/core/user_detail.jinja:70 +#: subscription/templates/subscription/subscription.jinja:4 +#: subscription/templates/subscription/subscription.jinja:8 +msgid "New subscription" +msgstr "Nouvelle cotisation" + +#: core/templates/core/user_edit.jinja:4 +msgid "Edit user" +msgstr "Éditer l'utilisateur" + +#: core/templates/core/user_edit.jinja:8 +msgid "Edit user profile" +msgstr "Éditer le profil de l'utilisateur" + +#: core/templates/core/user_edit.jinja:14 +msgid "Current profile: " +msgstr "Profil actuel : " + +#: core/templates/core/user_edit.jinja:24 +msgid "Take picture" +msgstr "Prendre une photo" + +#: core/templates/core/user_edit.jinja:29 +msgid "Current avatar: " +msgstr "Avatar actuel : " + +#: core/templates/core/user_edit.jinja:30 +msgid "Avatar" +msgstr "Avatar" + +#: core/templates/core/user_edit.jinja:32 +msgid "Current scrub: " +msgstr "Blouse actuelle : " + +#: core/templates/core/user_edit.jinja:33 +msgid "Scrub" +msgstr "Blouse" + +#: core/templates/core/user_edit.jinja:37 +msgid "Username: " +msgstr "Nom d'utilisateur : " + +#: core/templates/core/user_edit.jinja:42 +msgid "Change my password" +msgstr "Changer mon mot de passe" + +#: core/templates/core/user_edit.jinja:44 +msgid "Change user password" +msgstr "Changer le mot de passe" + +#: core/templates/core/user_godfathers.jinja:5 +#, python-format +msgid "%(user_name)s's godfathers" +msgstr "Parrains de %(user_name)s" + +#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 +msgid "Godfathers" +msgstr "Parrains" + +#: core/templates/core/user_godfathers.jinja:18 +msgid "No godfathers" +msgstr "Pas de parrains" + +#: core/templates/core/user_godfathers.jinja:21 +msgid "Godchildren" +msgstr "Fillots" + +#: core/templates/core/user_godfathers.jinja:29 +msgid "No godchildren" +msgstr "Pas de fillots" + +#: core/templates/core/user_group.jinja:4 +#, python-format +msgid "Edit user groups for %(user_name)s" +msgstr "Éditer les groupes pour %(user_name)s" + +#: core/templates/core/user_list.jinja:4 core/templates/core/user_list.jinja:8 +msgid "User list" +msgstr "Liste d'utilisateurs" + +#: core/templates/core/user_stats.jinja:4 +#, python-format +msgid "%(user_name)s's stats" +msgstr "Stats de %(user_name)s" + +#: core/templates/core/user_stats.jinja:9 +msgid "Permanencies" +msgstr "Permanences" + +#: core/templates/core/user_stats.jinja:17 +msgid "Buyings" +msgstr "Achats" + +#: core/templates/core/user_stats.jinja:23 +msgid "Product top 10" +msgstr "Top 10 produits" + +#: core/templates/core/user_tools.jinja:4 +#, python-format +msgid "%(user_name)s's tools" +msgstr "Outils de %(user_name)s" + +#: core/templates/core/user_tools.jinja:8 +msgid "User Tools" +msgstr "Outils utilisateurs" + +#: core/templates/core/user_tools.jinja:11 +msgid "Sith management" +msgstr "Gestion de Sith" + +#: core/templates/core/user_tools.jinja:14 core/views/user.py:159 +msgid "Groups" +msgstr "Groupes" + +#: core/templates/core/user_tools.jinja:15 +#: rootplace/templates/rootplace/merge.jinja:4 +msgid "Merge users" +msgstr "Fusionner deux utilisateurs" + +#: core/templates/core/user_tools.jinja:18 +msgid "Subscriptions" +msgstr "Cotisations" + +#: core/templates/core/user_tools.jinja:24 counter/views.py:454 +#: counter/views.py:603 +msgid "Counters" +msgstr "Comptoirs" + +#: core/templates/core/user_tools.jinja:27 +msgid "General management" +msgstr "Gestion générale" + +#: core/templates/core/user_tools.jinja:28 +msgid "General counters management" +msgstr "Gestion générale des comptoirs" + +#: core/templates/core/user_tools.jinja:29 +msgid "Products management" +msgstr "Gestion des produits" + +#: core/templates/core/user_tools.jinja:30 +msgid "Product types management" +msgstr "Gestion des types de produit" + +#: core/templates/core/user_tools.jinja:31 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:474 +msgid "Cash register summaries" +msgstr "Relevés de caisse" + +#: core/templates/core/user_tools.jinja:37 core/views/user.py:169 +#: counter/templates/counter/counter_list.jinja:18 +#: counter/templates/counter/counter_list.jinja:33 +#: counter/templates/counter/counter_list.jinja:54 +msgid "Stats" +msgstr "Stats" + +#: core/templates/core/user_tools.jinja:46 +msgid "General accounting" +msgstr "Comptabilité générale" + +#: core/templates/core/user_tools.jinja:55 +msgid "Club account: " +msgstr "Compte club : " + +#: core/views/files.py:46 +msgid "Add a new folder" +msgstr "Ajouter un nouveau dossier" + +#: core/views/files.py:57 +#, python-format +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:66 core/views/forms.py:181 core/views/forms.py:185 +#, 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:59 core/views/forms.py:62 +msgid "Choose file" +msgstr "Choisir un fichier" + +#: core/views/forms.py:73 core/views/forms.py:76 +msgid "Choose user" +msgstr "Choisir un utilisateur" + +#: core/views/forms.py:98 +msgid "Username, email, or account number" +msgstr "Nom d'utilisateur, email, ou numéro de compte AE" + +#: core/views/forms.py:140 +msgid "" +"Profile: you need to be visible on the picture, in order to be recognized (e." +"g. by the barmen)" +msgstr "" +"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " +"(par exemple par les barmen)" + +#: core/views/forms.py:141 +msgid "Avatar: used on the forum" +msgstr "Avatar : utilisé sur le forum" + +#: core/views/forms.py:142 +msgid "Scrub: let other know how your scrub looks like!" +msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" + +#: core/views/forms.py:186 +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" + +#: core/views/forms.py:203 +msgid "Godfather" +msgstr "Parrain" + +#: core/views/forms.py:203 +msgid "Godchild" +msgstr "Fillot" + +#: core/views/user.py:298 +msgid "User already has a profile picture" +msgstr "L'utilisateur a déjà une photo de profil" + +#: counter/models.py:28 +msgid "account id" +msgstr "numéro de compte" + +#: counter/models.py:32 +msgid "customer" +msgstr "client" + +#: counter/models.py:33 +msgid "customers" +msgstr "clients" + +#: counter/models.py:48 counter/templates/counter/counter_click.jinja:48 +#: counter/templates/counter/counter_click.jinja:82 +msgid "Not enough money" +msgstr "Solde insuffisant" + +#: counter/models.py:76 counter/models.py:98 +msgid "product type" +msgstr "type du produit" + +#: counter/models.py:101 +msgid "purchase price" +msgstr "prix d'achat" + +#: counter/models.py:102 +msgid "selling price" +msgstr "prix de vente" + +#: counter/models.py:103 +msgid "special selling price" +msgstr "prix de vente spécial" + +#: counter/models.py:104 +msgid "icon" +msgstr "icône" + +#: counter/models.py:106 +msgid "limit age" +msgstr "âge limite" + +#: counter/models.py:107 +msgid "tray price" +msgstr "prix plateau" + +#: counter/models.py:108 +msgid "parent product" +msgstr "produit parent" + +#: counter/models.py:110 +msgid "buying groups" +msgstr "groupe d'achat" + +#: counter/models.py:111 +msgid "archived" +msgstr "archivé" + +#: counter/models.py:114 counter/models.py:486 +msgid "product" +msgstr "produit" + +#: counter/models.py:133 +msgid "products" +msgstr "produits" + +#: counter/models.py:134 +msgid "counter type" +msgstr "type de comptoir" + +#: counter/models.py:136 +msgid "Bar" +msgstr "Bar" + +#: counter/models.py:136 +msgid "Office" +msgstr "Bureau" + +#: counter/models.py:136 counter/templates/counter/counter_list.jinja:11 +#: eboutic/templates/eboutic/eboutic_main.jinja:4 +#: 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:290 sith/settings.py:298 +msgid "Eboutic" +msgstr "Eboutic" + +#: counter/models.py:137 +msgid "sellers" +msgstr "vendeurs" + +#: counter/models.py:140 launderette/models.py:125 +msgid "token" +msgstr "jeton" + +#: counter/models.py:143 counter/models.py:387 counter/models.py:404 +#: launderette/models.py:16 stock/models.py:12 +msgid "counter" +msgstr "comptoir" + +#: counter/models.py:247 +msgid "bank" +msgstr "banque" + +#: counter/models.py:249 counter/models.py:290 +msgid "is validated" +msgstr "est validé" + +#: counter/models.py:252 +msgid "refilling" +msgstr "rechargement" + +#: counter/models.py:283 eboutic/models.py:103 +msgid "unit price" +msgstr "prix unitaire" + +#: counter/models.py:284 counter/models.py:476 eboutic/models.py:104 +msgid "quantity" +msgstr "quantité" + +#: counter/models.py:289 +msgid "Sith account" +msgstr "Compte utilisateur" + +#: counter/models.py:289 sith/settings.py:283 sith/settings.py:288 +#: sith/settings.py:310 +msgid "Credit card" +msgstr "Carte bancaire" + +#: counter/models.py:293 +msgid "selling" +msgstr "vente" + +#: counter/models.py:312 +msgid "Unknown event" +msgstr "Événement inconnu" + +#: counter/models.py:313 +#, python-format +msgid "Eticket bought for the event %(event)s" +msgstr "Eticket acheté pour l'événement %(event)s" + +#: counter/models.py:315 counter/models.py:327 +#, python-format +msgid "" +"You bought an eticket for the event %(event)s.\n" +"You can download it on this page %(url)s." +msgstr "" +"Vous avez acheté un Eticket pour l'événement %(event)s.\n" +"Vous pouvez le télécharger sur cette page: %(url)s" + +#: counter/models.py:390 +msgid "last activity date" +msgstr "dernière activité" + +#: counter/models.py:393 +msgid "permanency" +msgstr "permanence" + +#: counter/models.py:407 +msgid "emptied" +msgstr "coffre vidée" + +#: counter/models.py:410 +msgid "cash register summary" +msgstr "relevé de caisse" + +#: counter/models.py:474 +msgid "cash summary" +msgstr "relevé" + +#: counter/models.py:475 +msgid "value" +msgstr "valeur" + +#: counter/models.py:477 +msgid "check" +msgstr "chèque" + +#: counter/models.py:480 +msgid "cash register summary item" +msgstr "élément de relevé de caisse" + +#: counter/models.py:487 +msgid "banner" +msgstr "bannière" + +#: counter/models.py:488 +msgid "event date" +msgstr "date de l'événement" + +#: counter/models.py:489 +msgid "event title" +msgstr "titre de l'événement" + +#: counter/models.py:490 +msgid "secret" +msgstr "secret" + +#: counter/templates/counter/activity.jinja:5 +#: counter/templates/counter/activity.jinja:9 +#, python-format +msgid "%(counter_name)s activity" +msgstr "Activité sur %(counter_name)s" + +#: counter/templates/counter/activity.jinja:11 +msgid "Barmen list" +msgstr "Barmans" + +#: counter/templates/counter/activity.jinja:19 +msgid "Legend" +msgstr "Légende" + +#: counter/templates/counter/activity.jinja:20 +msgid "counter is open, there's at least one barman connected" +msgstr "Le comptoir est ouvert, et il y a au moins un barman connecté" + +#: counter/templates/counter/activity.jinja:22 +#, python-format +msgid "" +"counter is open but not active, the last sale was done at least %(minutes)s " +"minutes ago " +msgstr "" +"Le comptoir est ouvert, mais inactif. La dernière vente a eu lieu il y a " +"%(minutes)s minutes." + +#: counter/templates/counter/activity.jinja:24 +msgid "counter is not open : no one is connected" +msgstr "Le comptoir est fermé" + +#: counter/templates/counter/cash_register_summary.jinja:8 +msgid "Make a cash register summary" +msgstr "Faire un relevé de caisse" + +#: counter/templates/counter/cash_summary_list.jinja:5 +#: counter/templates/counter/cash_summary_list.jinja:10 +msgid "Cash register summary list" +msgstr "Liste des relevés de caisse" + +#: counter/templates/counter/cash_summary_list.jinja:11 +msgid "Theoric sums" +msgstr "Sommes théoriques" + +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:717 +msgid "Emptied" +msgstr "Coffre vidé" + +#: counter/templates/counter/cash_summary_list.jinja:48 +msgid "yes" +msgstr "oui" + +#: counter/templates/counter/cash_summary_list.jinja:59 +msgid "There is no cash register summary in this website." +msgstr "Il n'y a pas de relevé de caisse dans ce site web." + +#: counter/templates/counter/counter_click.jinja:35 +#: launderette/templates/launderette/launderette_admin.jinja:8 +msgid "Selling" +msgstr "Vente" + +#: counter/templates/counter/counter_click.jinja:39 +#: counter/templates/counter/counter_click.jinja:73 +msgid "Too young for that product" +msgstr "Trop jeune pour ce produit" + +#: counter/templates/counter/counter_click.jinja:42 +#: counter/templates/counter/counter_click.jinja:76 +msgid "Not allowed for that product" +msgstr "Non autorisé pour ce produit" + +#: counter/templates/counter/counter_click.jinja:45 +#: counter/templates/counter/counter_click.jinja:79 +msgid "No date of birth provided" +msgstr "Pas de date de naissance renseigné" + +#: counter/templates/counter/counter_click.jinja:55 +#: counter/templates/counter/counter_click.jinja:103 +#: counter/templates/counter/invoices_call.jinja:16 +#: launderette/templates/launderette/launderette_admin.jinja:35 +#: launderette/templates/launderette/launderette_click.jinja:13 +msgid "Go" +msgstr "Valider" + +#: counter/templates/counter/counter_click.jinja:57 +#: eboutic/templates/eboutic/eboutic_main.jinja:27 +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 +msgid "Basket: " +msgstr "Panier : " + +#: counter/templates/counter/counter_click.jinja:88 +msgid "Finish" +msgstr "Terminer" + +#: counter/templates/counter/counter_click.jinja:97 +msgid "Refilling" +msgstr "Rechargement" + +#: counter/templates/counter/counter_list.jinja:4 +#: counter/templates/counter/counter_list.jinja:10 +msgid "Counter admin list" +msgstr "Liste des comptoirs" + +#: counter/templates/counter/counter_list.jinja:8 +msgid "New counter" +msgstr "Nouveau comptoir" + +#: counter/templates/counter/counter_list.jinja:26 +msgid "Bars" +msgstr "Bars" + +#: counter/templates/counter/counter_list.jinja:38 +msgid "Create new stock" +msgstr "Créer un stock" + +#: counter/templates/counter/counter_list.jinja:47 +msgid "Offices" +msgstr "Bureaux" + +#: counter/templates/counter/counter_list.jinja:63 +msgid "There is no counters in this website." +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:16 +#: launderette/templates/launderette/launderette_click.jinja:8 +#, python-format +msgid "%(counter_name)s counter" +msgstr "Comptoir %(counter_name)s" + +#: counter/templates/counter/counter_main.jinja:21 +msgid "Last selling: " +msgstr "Dernière vente : " + +#: counter/templates/counter/counter_main.jinja:22 +msgid "Client: " +msgstr "Client : " + +#: counter/templates/counter/counter_main.jinja:22 +msgid "New amount: " +msgstr "Nouveau montant : " + +#: counter/templates/counter/counter_main.jinja:31 +msgid "Enter client code:" +msgstr "Entrez un code client : " + +#: counter/templates/counter/counter_main.jinja:36 +msgid "validate" +msgstr "valider" + +#: counter/templates/counter/counter_main.jinja:39 +msgid "Please, login" +msgstr "Merci de vous identifier" + +#: counter/templates/counter/counter_main.jinja:44 +msgid "Barman: " +msgstr "Barman : " + +#: counter/templates/counter/eticket_list.jinja:4 +#: counter/templates/counter/eticket_list.jinja:10 +msgid "Eticket list" +msgstr "Liste des etickets" + +#: counter/templates/counter/eticket_list.jinja:8 +msgid "New eticket" +msgstr "Nouveau eticket" + +#: counter/templates/counter/eticket_list.jinja:17 +msgid "There is no eticket in this website." +msgstr "Il n'y a pas de eticket sur ce site web." + +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:479 +msgid "Invoices call" +msgstr "Appels à facture" + +#: counter/templates/counter/invoices_call.jinja:8 +#, python-format +msgid "Invoices call for %(date)s" +msgstr "Appels à facture pour %(date)s" + +#: counter/templates/counter/invoices_call.jinja:9 +msgid "Choose another month: " +msgstr "Choisir un autre mois : " + +#: counter/templates/counter/invoices_call.jinja:21 +msgid "Sum" +msgstr "Somme" + +#: counter/templates/counter/last_ops.jinja:5 +#: counter/templates/counter/last_ops.jinja:9 +#, python-format +msgid "%(counter_name)s last operations" +msgstr "Dernières opérations sur %(counter_name)s" + +#: counter/templates/counter/product_list.jinja:4 +#: counter/templates/counter/product_list.jinja:12 +msgid "Product list" +msgstr "Liste des produits" + +#: counter/templates/counter/product_list.jinja:9 +msgid "New product" +msgstr "Nouveau produit" + +#: counter/templates/counter/product_list.jinja:21 +msgid "Uncategorized" +msgstr "Sans catégorie" + +#: counter/templates/counter/product_list.jinja:28 +msgid "There is no products in this website." +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:10 +msgid "Product type list" +msgstr "Liste des types de produit" + +#: counter/templates/counter/producttype_list.jinja:8 +msgid "New product type" +msgstr "Nouveau type de produit" + +#: counter/templates/counter/producttype_list.jinja:17 +msgid "There is no product types in this website." +msgstr "Il n'y a pas de types de produit dans ce site web." + +#: counter/templates/counter/stats.jinja:5 +#: counter/templates/counter/stats.jinja:9 +#, python-format +msgid "%(counter_name)s stats" +msgstr "Stats sur %(counter_name)s" + +#: counter/templates/counter/stats.jinja:10 +#, python-format +msgid "Top 100 %(counter_name)s" +msgstr "Top 100 %(counter_name)s" + +#: counter/templates/counter/stats.jinja:16 +msgid "Promo" +msgstr "Promo" + +#: counter/templates/counter/stats.jinja:19 +msgid "Percentage" +msgstr "Pourcentage" + +#: counter/views.py:55 +msgid "User not found" +msgstr "Utilisateur non trouvé" + +#: counter/views.py:84 +msgid "Cash summary" +msgstr "Relevé de caisse" + +#: counter/views.py:89 +msgid "Last operations" +msgstr "Dernières opérations" + +#: counter/views.py:123 +msgid "Bad credentials" +msgstr "Mauvais identifiants" + +#: counter/views.py:125 +msgid "User is not barman" +msgstr "L'utilisateur n'est pas barman." + +#: counter/views.py:129 +msgid "Bad location, someone is already logged in somewhere else" +msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" + +#: counter/views.py:319 +msgid "END" +msgstr "FIN" + +#: counter/views.py:321 +msgid "CAN" +msgstr "ANN" + +#: counter/views.py:351 +msgid "You have not enough money to buy all the basket" +msgstr "Vous n'avez pas assez d'argent pour acheter le panier" + +#: counter/views.py:444 +msgid "Counter administration" +msgstr "Administration des comptoirs" + +#: counter/views.py:449 +msgid "Stocks" +msgstr "" + +#: counter/views.py:459 +msgid "Products" +msgstr "Produits" + +#: counter/views.py:464 +msgid "Archived products" +msgstr "Produits archivés" + +#: counter/views.py:469 +msgid "Product types" +msgstr "Types de produit" + +#: counter/views.py:600 +msgid "Parent product" +msgstr "Produit parent" + +#: counter/views.py:601 +msgid "Buying groups" +msgstr "Groupes d'achat" + +#: counter/views.py:696 +msgid "10 cents" +msgstr "10 centimes" + +#: counter/views.py:697 +msgid "20 cents" +msgstr "20 centimes" + +#: counter/views.py:698 +msgid "50 cents" +msgstr "50 centimes" + +#: counter/views.py:699 +msgid "1 euro" +msgstr "1 €" + +#: counter/views.py:700 +msgid "2 euros" +msgstr "2 €" + +#: counter/views.py:701 +msgid "5 euros" +msgstr "5 €" + +#: counter/views.py:702 +msgid "10 euros" +msgstr "10 €" + +#: counter/views.py:703 +msgid "20 euros" +msgstr "20 €" + +#: counter/views.py:704 +msgid "50 euros" +msgstr "50 €" + +#: counter/views.py:705 +msgid "100 euros" +msgstr "100 €" + +#: counter/views.py:706 counter/views.py:708 counter/views.py:710 +#: counter/views.py:712 counter/views.py:714 +msgid "Check amount" +msgstr "Montant du chèque" + +#: counter/views.py:707 counter/views.py:709 counter/views.py:711 +#: counter/views.py:713 counter/views.py:715 +msgid "Check quantity" +msgstr "Nombre de chèque" + +#: counter/views.py:1066 +msgid "people(s)" +msgstr "personne(s)" + +#: eboutic/models.py:49 +msgid "validated" +msgstr "validé" + +#: eboutic/models.py:62 +msgid "Invoice already validated" +msgstr "Facture déjà validée" + +#: eboutic/models.py:100 +msgid "product id" +msgstr "ID du produit" + +#: eboutic/models.py:101 +msgid "product name" +msgstr "nom du produit" + +#: eboutic/models.py:102 +msgid "product type id" +msgstr "id du type du produit" + +#: eboutic/models.py:113 +msgid "basket" +msgstr "panier" + +#: eboutic/templates/eboutic/eboutic_main.jinja:37 +msgid "Proceed to command" +msgstr "Procéder à la commande" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4 +msgid "Basket state" +msgstr "État du panier" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:35 +msgid "Pay with credit card" +msgstr "Payer avec une carte bancaire" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:38 +msgid "" +"AE account payment disabled because your basket contains refilling items." +msgstr "" +"Paiement par compte AE désactivé parce que votre panier contient des bons de " +"rechargement." + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:43 +msgid "Pay with Sith account" +msgstr "Payer avec un compte AE" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:8 +msgid "Payment failed" +msgstr "Le paiement a échoué" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:10 +msgid "Payment successful" +msgstr "Le paiement a été effectué" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:12 +msgid "Return to eboutic" +msgstr "Retourner à l'eboutic" + +#: eboutic/views.py:141 +msgid "You do not have enough money to buy the basket" +msgstr "Vous n'avez pas assez d'argent pour acheter le panier" + +#: launderette/models.py:19 +#: launderette/templates/launderette/launderette_book.jinja:5 +#: launderette/templates/launderette/launderette_book_choose.jinja:4 +#: launderette/templates/launderette/launderette_main.jinja:4 +msgid "Launderette" +msgstr "Laverie" + +#: launderette/models.py:61 launderette/models.py:86 +msgid "launderette" +msgstr "laverie" + +#: launderette/models.py:62 launderette/models.py:87 launderette/models.py:123 +#: stock/models.py:27 +msgid "type" +msgstr "type" + +#: launderette/models.py:63 +msgid "is working" +msgstr "fonctionne" + +#: launderette/models.py:66 +msgid "Machine" +msgstr "Machine" + +#: launderette/models.py:88 +msgid "borrow date" +msgstr "date d'emprunt" + +#: launderette/models.py:92 +msgid "Token" +msgstr "Jeton" + +#: launderette/models.py:98 +msgid "Token name can not be blank" +msgstr "Le nom du jeton ne peut pas être vide" + +#: launderette/models.py:124 +msgid "machine" +msgstr "machine" + +#: launderette/templates/launderette/launderette_admin.jinja:4 +msgid "Launderette admin" +msgstr "Gestion de la laverie" + +#: launderette/templates/launderette/launderette_admin.jinja:9 +msgid "Sell" +msgstr "Vendre" + +#: launderette/templates/launderette/launderette_admin.jinja:11 +msgid "Machines" +msgstr "Machines" + +#: launderette/templates/launderette/launderette_admin.jinja:12 +msgid "New machine" +msgstr "Nouvelle machine" + +#: launderette/templates/launderette/launderette_admin.jinja:42 +#: launderette/views.py:148 +msgid "Type" +msgstr "Type" + +#: launderette/templates/launderette/launderette_book.jinja:12 +msgid "Choose" +msgstr "Choisir" + +#: launderette/templates/launderette/launderette_book.jinja:23 +msgid "Washing and drying" +msgstr "Lavage et séchage" + +#: launderette/templates/launderette/launderette_book.jinja:27 +#: sith/settings.py:430 +msgid "Washing" +msgstr "Lavage" + +#: launderette/templates/launderette/launderette_book.jinja:31 +#: sith/settings.py:430 +msgid "Drying" +msgstr "Séchage" + +#: launderette/templates/launderette/launderette_list.jinja:4 +#: launderette/templates/launderette/launderette_list.jinja:12 +msgid "Launderette admin list" +msgstr "Liste des laveries" + +#: launderette/templates/launderette/launderette_list.jinja:9 +msgid "New launderette" +msgstr "Nouvelle laverie" + +#: launderette/templates/launderette/launderette_list.jinja:20 +msgid "There is no launderette in this website." +msgstr "Il n'y a pas de laverie dans ce site web." + +#: launderette/templates/launderette/launderette_main.jinja:9 +msgid "Edit presentation page" +msgstr "Éditer la page de présentation" + +#: launderette/templates/launderette/launderette_main.jinja:12 +msgid "Book launderette slot" +msgstr "Réserver un créneau de laverie" + +#: launderette/views.py:147 +msgid "Action" +msgstr "Action" + +#: launderette/views.py:150 +msgid "Tokens, separated by spaces" +msgstr "Jetons, séparés par des espaces" + +#: launderette/views.py:165 launderette/views.py:179 +#, python-format +msgid "Token %(token_name)s does not exists" +msgstr "Le jeton %(token_name)s n'existe pas" + +#: launderette/views.py:173 +#, python-format +msgid "Token %(token_name)s already exists" +msgstr "Un jeton %(token_name)s existe déjà" + +#: launderette/views.py:229 +msgid "User has booked no slot" +msgstr "L'utilisateur n'a pas réservé de créneau" + +#: launderette/views.py:319 +msgid "Token not found" +msgstr "Jeton non trouvé" + +#: rootplace/templates/rootplace/merge.jinja:8 +msgid "Merge two users" +msgstr "Fusionner deux utilisateurs" + +#: rootplace/templates/rootplace/merge.jinja:12 +msgid "Merge" +msgstr "Fusion" + +#: rootplace/views.py:66 +msgid "User that will be kept" +msgstr "Utilisateur qui sera conservé" + +#: rootplace/views.py:67 +msgid "User that will be deleted" +msgstr "Utilisateur qui sera supprimé" + +#: sith/settings.py:166 +msgid "English" +msgstr "Anglais" + +#: sith/settings.py:167 +msgid "French" +msgstr "Français" + +#: sith/settings.py:280 sith/settings.py:287 sith/settings.py:308 +msgid "Check" +msgstr "Chèque" + +#: sith/settings.py:281 sith/settings.py:289 sith/settings.py:309 +msgid "Cash" +msgstr "Espèces" + +#: sith/settings.py:282 +msgid "Transfert" +msgstr "Virement" + +#: sith/settings.py:295 +msgid "Belfort" +msgstr "Belfort" + +#: sith/settings.py:296 +msgid "Sevenans" +msgstr "Sevenans" + +#: sith/settings.py:297 +msgid "Montbéliard" +msgstr "Montbéliard" + +#: sith/settings.py:337 +msgid "One semester" +msgstr "Un semestre, 15 €" + +#: sith/settings.py:342 +msgid "Two semesters" +msgstr "Deux semestres, 28 €" + +#: sith/settings.py:347 +msgid "Common core cursus" +msgstr "Cursus tronc commun, 45 €" + +#: sith/settings.py:352 +msgid "Branch cursus" +msgstr "Cursus branche, 45 €" + +#: sith/settings.py:357 +msgid "Alternating cursus" +msgstr "Cursus alternant, 30 €" + +#: sith/settings.py:362 +msgid "Honorary member" +msgstr "Membre honoraire, 0 €" + +#: sith/settings.py:367 +msgid "Assidu member" +msgstr "Membre d'Assidu, 0 €" + +#: sith/settings.py:372 +msgid "Amicale/DOCEO member" +msgstr "Membre de l'Amicale/DOCEO, 0 €" + +#: sith/settings.py:377 +msgid "UT network member" +msgstr "Cotisant du réseau UT, 0 €" + +#: sith/settings.py:382 +msgid "CROUS member" +msgstr "Membres du CROUS, 0 €" + +#: sith/settings.py:387 +msgid "Sbarro/ESTA member" +msgstr "Membre de Sbarro ou de l'ESTA, 15 €" + +#: sith/settings.py:395 +msgid "President" +msgstr "Président" + +#: sith/settings.py:396 +msgid "Vice-President" +msgstr "Vice-Président" + +#: sith/settings.py:397 +msgid "Treasurer" +msgstr "Trésorier" + +#: sith/settings.py:398 +msgid "Communication supervisor" +msgstr "Responsable com" + +#: sith/settings.py:399 +msgid "Secretary" +msgstr "Secrétaire" + +#: sith/settings.py:400 +msgid "IT supervisor" +msgstr "Responsable info" + +#: sith/settings.py:401 +msgid "Board member" +msgstr "Membre du bureau" + +#: sith/settings.py:402 +msgid "Active member" +msgstr "Membre actif" + +#: sith/settings.py:403 +msgid "Curious" +msgstr "Curieux" + +#: stock/models.py:25 +msgid "unit quantity" +msgstr "quantité unitaire" + +#: stock/models.py:26 +msgid "effective quantity" +msgstr "quantité effective" + +#: stock/templates/stock/stock_item_list.jinja:9 +msgid "New item" +msgstr "Nouvel élément" + +#: stock/templates/stock/stock_item_list.jinja:21 +msgid "Others" +msgstr "Autres" + +#: stock/templates/stock/stock_item_list.jinja:28 +msgid "There is no items in this stock." +msgstr "Il n'y a pas d'éléments dans ce comptoir." + +#: stock/templates/stock/stock_list.jinja:4 +#: stock/templates/stock/stock_list.jinja:9 +msgid "Stock list" +msgstr "Liste des stocks" + +#: stock/templates/stock/stock_list.jinja:21 +msgid "There is no stocks in this website." +msgstr "Il n'y a pas de stock sur ce site web." + +#: subscription/models.py:16 +msgid "Bad subscription type" +msgstr "Mauvais type de cotisation" + +#: subscription/models.py:20 +msgid "Bad payment method" +msgstr "Mauvais type de paiement" + +#: subscription/models.py:52 +msgid "subscription type" +msgstr "type d'inscription" + +#: subscription/models.py:55 +msgid "subscription start" +msgstr "début de la cotisation" + +#: subscription/models.py:56 +msgid "subscription end" +msgstr "fin de la cotisation" + +#: subscription/models.py:59 +msgid "location" +msgstr "lieu" + +#: subscription/models.py:68 +msgid "You can not subscribe many time for the same period" +msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" + +#: subscription/models.py:72 +msgid "Subscription error" +msgstr "Erreur de cotisation" + +#: subscription/views.py:54 +msgid "A user with that email address already exists" +msgstr "Un utilisateur avec cette adresse email existe déjà" + +#: subscription/views.py:70 +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." From 5b2f126eeed97318ad27a6fe06d21f08d32c5753 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Thu, 24 Nov 2016 10:40:42 +0100 Subject: [PATCH 11/27] Shopping list structure view addition --- stock/templates/stock/stock_item_list.jinja | 1 + stock/templates/stock/stock_list.jinja | 2 +- .../templates/stock/stock_shopping_list.jinja | 10 +++++++ stock/urls.py | 2 +- stock/views.py | 29 ++++++++++++------- 5 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 stock/templates/stock/stock_shopping_list.jinja diff --git a/stock/templates/stock/stock_item_list.jinja b/stock/templates/stock/stock_item_list.jinja index cac5fb30..ef1a3a4d 100644 --- a/stock/templates/stock/stock_item_list.jinja +++ b/stock/templates/stock/stock_item_list.jinja @@ -7,6 +7,7 @@ {% block content %} {% if current_tab == "stocks" %}

    {% trans %}New item{% endtrans %}

    +
    {% trans %}Shopping list{% endtrans %}
    {% endif %} {% if stock %}

    {{ stock }}

    diff --git a/stock/templates/stock/stock_list.jinja b/stock/templates/stock/stock_list.jinja index b0450984..829ad6c5 100644 --- a/stock/templates/stock/stock_list.jinja +++ b/stock/templates/stock/stock_list.jinja @@ -11,7 +11,7 @@ {% for s in stock_list.order_by('name') %}
  • {% if user.can_edit(s) %} - {{s}} + {{s}} - Edit {% endif %}
  • diff --git a/stock/templates/stock/stock_shopping_list.jinja b/stock/templates/stock/stock_shopping_list.jinja new file mode 100644 index 00000000..96b48085 --- /dev/null +++ b/stock/templates/stock/stock_shopping_list.jinja @@ -0,0 +1,10 @@ +{% extends "core/base.jinja" %} + +{% block title %} +Shopping list for {{ stock }} +{% endblock %} + +{% block content %} +

    Shopping list for {{ stock }}

    + +{% endblock %} \ No newline at end of file diff --git a/stock/urls.py b/stock/urls.py index 436f7a4d..d7512b24 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -12,5 +12,5 @@ urlpatterns = [ url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), - + url(r'^(?P[0-9]+)/shopping$', StockShoppingListView.as_view(), name='shopping_list'), ] diff --git a/stock/views.py b/stock/views.py index e38e21db..0f8af903 100644 --- a/stock/views.py +++ b/stock/views.py @@ -13,7 +13,7 @@ from stock.models import Stock, StockItem -class StockMain(CounterAdminTabsMixin, CanCreateMixin, DetailView): +class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): """ The stockitems list view for the counter owner """ @@ -22,12 +22,6 @@ class StockMain(CounterAdminTabsMixin, CanCreateMixin, DetailView): pk_url_kwarg = "stock_id" current_tab = "stocks" - #def get_context_data(self, **kwargs): - # context = super(StockItemList, self).get_context_data(**kwargs) - # if 'stock' in self.request.GET.keys(): - # context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() - # return context - class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ A list view for the admins @@ -94,8 +88,7 @@ class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): """ A create view for a new StockItem - """ - + """ model = StockItem form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'type', 'stock_owner']) template_name = 'core/create.jinja' @@ -109,6 +102,20 @@ class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): return ret def get_success_url(self): - return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) + '?stock=' + str(self.object.stock_owner.id) + return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) - + +class StockShoppingListView(CounterAdminTabsMixin, CanViewMixin, ListView): + """ + A list view for the people to know the item to buy + """ + model = Stock + template_name = "stock/stock_shopping_list.jinja" + pk_url_kwarg = "stock_id" + current_tab = "stocks" + + def get_context_data(self): + ret = super(StockShoppingListView, self).get_context_data() + if 'stock_id' in self.kwargs.keys(): + ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); + return ret From c6310c53154d54d8b2a3741f2dc463b329356a7c Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Thu, 1 Dec 2016 11:54:49 +0100 Subject: [PATCH 12/27] correct missing endif --- counter/templates/counter/counter_list.jinja | 1 + 1 file changed, 1 insertion(+) diff --git a/counter/templates/counter/counter_list.jinja b/counter/templates/counter/counter_list.jinja index fc3ca1b0..b3d30ded 100644 --- a/counter/templates/counter/counter_list.jinja +++ b/counter/templates/counter/counter_list.jinja @@ -31,6 +31,7 @@ {% if user.can_edit(c) %} {% trans %}Edit{% endtrans %} - {% trans %}Stats{% endtrans %} - + {% endif %} {%if c.stock %} Stock - {% else %} From 75af525945f547c6c6251c560cc38932edc30a9c Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 26 Oct 2016 22:12:56 +0200 Subject: [PATCH 13/27] Addition of the StockItem class addition of Stock app, model, templates, urls Addition of the stock parameter to the counter admin list Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Stock application creation Addition of the StockItem class addition of Stock app, model, templates, urls Addition of the stock parameter to the counter admin list Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Initial StockItem create form value addition general modifications Stock admin gestion, items list views, create and edit items remove stock_main.jinja Stock application creation Addition of the StockItem class addition of Stock app, model, templates, urls Addition of the stock parameter to the counter admin list Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Addition of the StockItem class addition of Stock app, model, templates, urls Addition of the stock parameter to the counter admin list Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Initial StockItem create form value addition general modifications Stock admin gestion, items list views, create and edit items Shopping list structure view addition correct missing endif a correct missing endif Stock application creation addition of Stock app, model, templates, urls Addition of the stock parameter to the counter admin list Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Stock application creation addition of Stock app, model, templates, urls Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Initial StockItem create form value addition general modifications Stock admin gestion, items list views, create and edit items remove stock_main.jinja Stock application creation addition of Stock app, model, templates, urls Addition of the stock parameter to the counter admin list Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Fix translation files Creation of the Stock list, edit, create views and creation StockItem create view Initial StockItem create form value addition general modifications Shopping list structure view addition correct missing endif --- stock/views.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/stock/views.py b/stock/views.py index 0f8af903..614d9752 100644 --- a/stock/views.py +++ b/stock/views.py @@ -46,6 +46,45 @@ class StockEditForm(forms.ModelForm): return super(StockEditForm, self).save(*args, **kwargs) +class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): + """ + An edit view for the stock + """ + model = Stock + form_class = StockEditForm + pk_url_kwarg = "stock_id" + current_tab = "stocks" + + def get_context_data(self, **kwargs): + context = super(StockItemList, self).get_context_data(**kwargs) + if 'stock' in self.request.GET.keys(): + context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() + return context + +class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): + """ + A list view for the admins + """ + model = Stock + template_name = 'stock/stock_list.jinja' + current_tab = "stocks" + + +class StockEditForm(forms.ModelForm): + """ + A form to change stock's characteristics + """ + class Meta: + model = Stock + fields = ['name', 'counter'] + + def __init__(self, *args, **kwargs): + super(StockEditForm, self).__init__(*args, **kwargs) + + def save(self, *args, **kwargs): + return super(StockEditForm, self).save(*args, **kwargs) + + class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): """ An edit view for the stock @@ -119,3 +158,8 @@ class StockShoppingListView(CounterAdminTabsMixin, CanViewMixin, ListView): if 'stock_id' in self.kwargs.keys(): ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); return ret + +class StockItemOutEditView(CounterAdminTabsMixin, CanViewMixin, UpdateView): + """ + docstring for StockItemOutList + """ From 21c05cc779f2183775290ee5e9ab16ff291b3e38 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Wed, 28 Dec 2016 19:25:43 +0100 Subject: [PATCH 14/27] Addition of the ShoppingList view to know the item to buy --- counter/templates/counter/counter_list.jinja | 4 +- counter/views.py | 5 + stock/migrations/0014_auto_20161228_1717.py | 19 +++ stock/models.py | 17 ++- .../templates/stock/shopping_list_items.jinja | 34 +++++ stock/templates/stock/stock_item_list.jinja | 2 +- stock/templates/stock/stock_list.jinja | 1 + stock/templates/stock/stock_main.jinja | 11 -- .../templates/stock/stock_shopping_list.jinja | 56 +++++++- stock/urls.py | 13 +- stock/views.py | 136 +++++++++++++++++- 11 files changed, 280 insertions(+), 18 deletions(-) create mode 100644 stock/migrations/0014_auto_20161228_1717.py create mode 100644 stock/templates/stock/shopping_list_items.jinja delete mode 100644 stock/templates/stock/stock_main.jinja diff --git a/counter/templates/counter/counter_list.jinja b/counter/templates/counter/counter_list.jinja index b3d30ded..bc6144b2 100644 --- a/counter/templates/counter/counter_list.jinja +++ b/counter/templates/counter/counter_list.jinja @@ -32,12 +32,12 @@ {% trans %}Edit{% endtrans %} - {% trans %}Stats{% endtrans %} - {% endif %} - {%if c.stock %} + {% if c.stock %} Stock - + {% trans %}Shopping lists{% endtrans %} - {% else %} {% trans %}Create new stock{% endtrans%} - {% endif %} - {% endif %} {% if user.is_owner(c) %} {% trans %}Props{% endtrans %} {% endif %} diff --git a/counter/views.py b/counter/views.py index 00edd36d..4678fd44 100644 --- a/counter/views.py +++ b/counter/views.py @@ -88,6 +88,11 @@ class CounterTabsMixin(TabedViewMixin): 'slug': 'last_ops', 'name': _("Last operations"), }) + tab_list.append({ + 'url': reverse_lazy('stock:items_list', kwargs={'stock_id': self.object.stock.id}), + 'slug': 'stock_items_list', + 'name': _("Stock items list"), + }) return tab_list class CounterMain(CounterTabsMixin, CanViewMixin, DetailView, ProcessFormView, FormMixin): diff --git a/stock/migrations/0014_auto_20161228_1717.py b/stock/migrations/0014_auto_20161228_1717.py new file mode 100644 index 00000000..f6b7bfb4 --- /dev/null +++ b/stock/migrations/0014_auto_20161228_1717.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0013_auto_20161228_1006'), + ] + + operations = [ + migrations.AlterField( + model_name='shoppinglist', + name='stock_owner', + field=models.ForeignKey(related_name='shopping_lists', null=True, to='stock.Stock'), + ), + ] diff --git a/stock/models.py b/stock/models.py index e016493a..46f30b34 100644 --- a/stock/models.py +++ b/stock/models.py @@ -28,9 +28,24 @@ class StockItem(models.Model): on_delete=models.SET_NULL) stock_owner = models.ForeignKey(Stock, related_name="items") + def __str__(self): + return "%s" % (self.name) + + def get_absolute_url(self): + return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) + +class ShoppingList(models.Model): + """ + The ShoppingList class, used to make an history of the shopping lists + """ + date = models.DateTimeField(_('date')) + name = models.CharField(_('name'), max_length=64) + todo = models.BooleanField(_('todo')) + items_to_buy = models.ManyToManyField(StockItem, verbose_name=_('items to buy'), related_name="shopping_lists") + stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") def __str__(self): return "%s (%s)" % (self.name, self.effective_quantity) def get_absolute_url(self): - return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) \ No newline at end of file + return reverse('stock:shoppinglist_list') diff --git a/stock/templates/stock/shopping_list_items.jinja b/stock/templates/stock/shopping_list_items.jinja new file mode 100644 index 00000000..822db850 --- /dev/null +++ b/stock/templates/stock/shopping_list_items.jinja @@ -0,0 +1,34 @@ +{% extends "core/base.jinja" %} + +{% block title %} +{% trans %}{{ shoppinglist }}'s items{% endtrans %} +{% endblock %} + +{% block content %} +{% if current_tab == "stocks" %} + {% trans %}Back{% endtrans %} +{% endif %} + +

    {{ shoppinglist.name }}

    +{% for t in ProductType.objects.order_by('name') %} + {% if shoppinglist.items_to_buy.filter(type=t) %} +

    {{ t }}

    + + + + + + + + + {% for i in shoppinglist.items_to_buy.filter(type=t).order_by('name') %} + + + + + {% endfor %} + +
    {% trans %}Name{% endtrans %}{% trans %}Number{% endtrans %}
    {{ i.name }}{{ i.tobuy_quantity }}
    + {% endif %} +{% endfor %} +{% endblock %} \ No newline at end of file diff --git a/stock/templates/stock/stock_item_list.jinja b/stock/templates/stock/stock_item_list.jinja index ef1a3a4d..a5370389 100644 --- a/stock/templates/stock/stock_item_list.jinja +++ b/stock/templates/stock/stock_item_list.jinja @@ -7,7 +7,7 @@ {% block content %} {% if current_tab == "stocks" %}

    {% trans %}New item{% endtrans %}

    -
    {% trans %}Shopping list{% endtrans %}
    +
    {% trans %}Shopping list{% endtrans %}
    {% endif %} {% if stock %}

    {{ stock }}

    diff --git a/stock/templates/stock/stock_list.jinja b/stock/templates/stock/stock_list.jinja index 829ad6c5..6b425128 100644 --- a/stock/templates/stock/stock_list.jinja +++ b/stock/templates/stock/stock_list.jinja @@ -13,6 +13,7 @@ {% if user.can_edit(s) %} {{s}} - Edit + - {% trans %}Shopping lists{% endtrans %} {% endif %} {% endfor %} diff --git a/stock/templates/stock/stock_main.jinja b/stock/templates/stock/stock_main.jinja deleted file mode 100644 index 9c585863..00000000 --- a/stock/templates/stock/stock_main.jinja +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "core/base.jinja" %} - -{% block title %} -{{stock}} -{% endblock %} - -{% block content %} -

    {{stock}}

    -{% trans %}New Item{% endtrans %} -{% endblock %} - diff --git a/stock/templates/stock/stock_shopping_list.jinja b/stock/templates/stock/stock_shopping_list.jinja index 96b48085..febed4bc 100644 --- a/stock/templates/stock/stock_shopping_list.jinja +++ b/stock/templates/stock/stock_shopping_list.jinja @@ -5,6 +5,60 @@ Shopping list for {{ stock }} {% endblock %} {% block content %} -

    Shopping list for {{ stock }}

    +{% if current_tab == "stocks" %} + {% trans %}Do shopping{% endtrans %} +{% endif %} +

    {% trans s=stock %}Shopping lists history for {{ s }}{% endtrans %}

    +

    To do

    + + + + + + + + + + {% for s in shoppinglist_list.filter(todo=True).filter(stock_owner=stock).order_by('-date') %} + + + + + + + + {% endfor %} + +
    {% trans %}Date{% endtrans %}{% trans %}Name{% endtrans %}{% trans %}Number of items{% endtrans %}
    {{ s.date|localtime|date("Y-m-d H:i") }}{{ s.name }}{{ s.items_to_buy.count() }} + {% trans %}Mark as done{% endtrans %} + + {% trans %}Delete{% endtrans %} +
    + +

    Done

    + + + + + + + + + + {% for s in shoppinglist_list.filter(todo=False).filter(stock_owner=stock).order_by('-date') %} + + + + + + + + {% endfor %} + +
    {% trans %}Date{% endtrans %}{% trans %}Name{% endtrans %}{% trans %}Number of items{% endtrans %}
    {{ s.date|localtime|date("Y-m-d H:i") }}{{ s.name }}{{ s.items_to_buy.count() }} + {% trans %}Mark as todo{% endtrans %} + + {% trans %}Delete{% endtrans %} +
    {% endblock %} \ No newline at end of file diff --git a/stock/urls.py b/stock/urls.py index d7512b24..987c7a3b 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -12,5 +12,16 @@ urlpatterns = [ url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), - url(r'^(?P[0-9]+)/shopping$', StockShoppingListView.as_view(), name='shopping_list'), + +# ShoppingList urls + url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), + url(r'^(?P[0-9]+)/shoppingList/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), + name='shoppinglist_items'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), + name='shoppinglist_delete'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setDone$', StockShopppingListSetDone.as_view(), + name='shoppinglist_set_done'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), + name='shoppinglist_set_todo'), ] diff --git a/stock/views.py b/stock/views.py index 614d9752..aff866cc 100644 --- a/stock/views.py +++ b/stock/views.py @@ -3,6 +3,7 @@ from django.views.generic import ListView, DetailView, RedirectView, TemplateVie from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin from django.utils.translation import ugettext_lazy as _ from django import forms +from django.http import HttpResponseRedirect, HttpResponse from django.forms.models import modelform_factory from django.core.urlresolvers import reverse_lazy, reverse @@ -159,7 +160,140 @@ class StockShoppingListView(CounterAdminTabsMixin, CanViewMixin, ListView): ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); return ret -class StockItemOutEditView(CounterAdminTabsMixin, CanViewMixin, UpdateView): + +class StockItemQuantityForm(forms.BaseForm): + def clean(self): + with transaction.atomic(): + self.stock = Stock.objects.filter(id=self.stock_id).first() + shopping_list = ShoppingList(name="Courses "+self.stock.counter.name, date=timezone.now(), todo=True) + shopping_list.save() + shopping_list.stock_owner = self.stock + shopping_list.save() + for k,t in self.cleaned_data.items(): + if t is not None: + item_id = int(k[5:]) + item = StockItem.objects.filter(id=item_id).first() + item.tobuy_quantity = t + item.shopping_lists.add(shopping_list) + item.save() + + return self.cleaned_data + +class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): """ docstring for StockItemOutList """ + model = StockItem + template_name = "stock/shopping_list_quantity.jinja" + pk_url_kwarg = "stock_id" + current_tab = "stocks" + + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + for t in ProductType.objects.order_by('name').all(): + for i in self.stock.items.filter(type=t).order_by('name').all(): + if i.effective_quantity <= i.minimal_quantity: + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), + help_text=str(i.effective_quantity)+" left") + kwargs[field_name] = i.effective_quantity + kwargs['stock_id'] = self.stock.id + kwargs['base_fields'] = fields + return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) + + def get(self, request, *args, **kwargs): + """ + Simple get view + """ + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockItemQuantityBaseFormView, self).get(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockItemQuantityBaseFormView, self).post(request, *args, **kwargs) + + def form_valid(self, form): + """ + We handle here the redirection, passing the user id of the asked customer + """ + return super(StockItemQuantityBaseFormView, self).form_valid(form) + + def get_context_data(self, **kwargs): + """ + We handle here the login form for the barman + """ + kwargs = super(StockItemQuantityBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['stock'] = self.stock + return kwargs + + def get_success_url(self): + return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) + + +class StockShoppingListItemListView(CounterAdminTabsMixin, CanViewMixin, ListView): + """docstring for StockShoppingListItemListView""" + model = ShoppingList + template_name = "stock/shopping_list_items.jinja" + pk_url_kwarg = "shoppinglist_id" + current_tab = "stocks" + + def get_context_data(self): + ret = super(StockShoppingListItemListView, self).get_context_data() + if 'shoppinglist_id' in self.kwargs.keys(): + ret['shoppinglist'] = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first(); + return ret + +class StockShoppingListDeleteView(CounterAdminTabsMixin, CanEditMixin, DeleteView): + """ + Delete a ShoppingList (for the resonsible account) + """ + model = ShoppingList + pk_url_kwarg = "shoppinglist_id" + template_name = 'core/delete_confirm.jinja' + current_tab = "stocks" + + def get_success_url(self): + return reverse_lazy('stock:shoppinglist_list', kwargs={'stock_id':self.object.stock_owner.id}) + + +class StockShopppingListSetDone(CanEditMixin, DetailView): + """ + Set a ShoppingList as done + """ + model = ShoppingList + pk_url_kwarg = "shoppinglist_id" + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + self.object.todo = False + self.object.save() + return HttpResponseRedirect(reverse('stock:shoppinglist_list', args=self.args, kwargs={'stock_id':self.object.stock_owner.id})) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + return HttpResponseRedirect(reverse('stock:shoppinglist_list', args=self.args, kwargs={'stock_id':self.object.stock_owner.id})) + + +class StockShopppingListSetTodo(CanEditMixin, DetailView): + """ + Set a ShoppingList as done + """ + model = ShoppingList + pk_url_kwarg = "shoppinglist_id" + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + self.object.todo = True + self.object.save() + return HttpResponseRedirect(reverse('stock:shoppinglist_list', args=self.args, kwargs={'stock_id':self.object.stock_owner.id})) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + return HttpResponseRedirect(reverse('stock:shoppinglist_list', args=self.args, kwargs={'stock_id':self.object.stock_owner.id})) From 0660ea5e64929b01dc8cdbf11b49fd9b3d664108 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Thu, 29 Dec 2016 11:58:19 +0100 Subject: [PATCH 15/27] MAJ translations ; stock acces addition in user tool --- core/templates/core/user_tools.jinja | 13 +- locale/fr/LC_MESSAGES/django.po | 2908 ----------------- .../stock/shopping_list_quantity.jinja | 16 + stock/templates/stock/stock_item_list.jinja | 3 +- stock/templates/stock/stock_list.jinja | 2 +- .../templates/stock/stock_shopping_list.jinja | 8 +- stock/views.py | 2 +- 7 files changed, 35 insertions(+), 2917 deletions(-) delete mode 100644 locale/fr/LC_MESSAGES/django.po create mode 100644 stock/templates/stock/shopping_list_quantity.jinja diff --git a/core/templates/core/user_tools.jinja b/core/templates/core/user_tools.jinja index 371dcd3f..a4542722 100644 --- a/core/templates/core/user_tools.jinja +++ b/core/templates/core/user_tools.jinja @@ -34,9 +34,18 @@ {% endif %} {% for b in settings.SITH_COUNTER_BARS %} {% if user.is_in_group(b[1]+" admin") %} -
  • {{ b[1] }} - +
  • + {{ b[1] }} - {% trans %}Edit{% endtrans %} - - {% trans %}Stats{% endtrans %}
  • + {% trans %}Stats{% endtrans %} - + {% set c = Counter.objects.filter(id=b[0]).first() %} + {% if c.stock %} + Stock - + {% trans %}Shopping lists{% endtrans %} + {% else %} + {% trans %}Create new stock{% endtrans%} + {% endif %} + {% endif %} {% endfor %} diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index 644b75ee..00000000 --- a/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,2908 +0,0 @@ -# Sith AE french translation file -# Copyright (C) 2016 -# This file is distributed under the same license as the Sith package. -# Skia , 2016 -# -msgid "" -msgstr "" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-16 19:23+0100\n" -"PO-Revision-Date: 2016-07-18\n" -"Last-Translator: Skia \n" -"Language-Team: AE info \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: accounting/models.py:36 accounting/models.py:58 accounting/models.py:85 -#: accounting/models.py:144 club/models.py:19 counter/models.py:71 -#: counter/models.py:96 counter/models.py:131 launderette/models.py:15 -#: launderette/models.py:60 launderette/models.py:85 stock/models.py:11 -#: stock/models.py:24 -msgid "name" -msgstr "nom" - -#: accounting/models.py:37 -msgid "street" -msgstr "rue" - -#: accounting/models.py:38 -msgid "city" -msgstr "ville" - -#: accounting/models.py:39 -msgid "postcode" -msgstr "code postal" - -#: accounting/models.py:40 -msgid "country" -msgstr "pays" - -#: accounting/models.py:41 core/models.py:167 -msgid "phone" -msgstr "téléphone" - -#: accounting/models.py:42 -msgid "email" -msgstr "email" - -#: accounting/models.py:43 -msgid "website" -msgstr "site internet" - -#: accounting/models.py:46 -msgid "company" -msgstr "entreprise" - -#: accounting/models.py:59 -msgid "iban" -msgstr "IBAN" - -#: accounting/models.py:60 -msgid "account number" -msgstr "numero de compte" - -#: accounting/models.py:61 accounting/models.py:86 club/models.py:145 -#: counter/models.py:105 counter/models.py:132 -msgid "club" -msgstr "club" - -#: accounting/models.py:64 -msgid "Bank account" -msgstr "Compte en banque" - -#: accounting/models.py:87 -msgid "bank account" -msgstr "compte en banque" - -#: accounting/models.py:90 -msgid "Club account" -msgstr "Compte club" - -#: accounting/models.py:135 -#, python-format -msgid "%(club_account)s on %(bank_account)s" -msgstr "%(club_account)s sur %(bank_account)s" - -#: accounting/models.py:142 club/models.py:146 counter/models.py:388 -#: launderette/models.py:122 -msgid "start date" -msgstr "date de début" - -#: accounting/models.py:143 club/models.py:147 counter/models.py:389 -msgid "end date" -msgstr "date de fin" - -#: accounting/models.py:145 -msgid "is closed" -msgstr "est fermé" - -#: accounting/models.py:146 accounting/models.py:349 -msgid "club account" -msgstr "compte club" - -#: accounting/models.py:147 accounting/models.py:193 counter/models.py:29 -#: counter/models.py:241 -msgid "amount" -msgstr "montant" - -#: accounting/models.py:148 -msgid "effective_amount" -msgstr "montant effectif" - -#: accounting/models.py:151 -msgid "General journal" -msgstr "Classeur" - -#: accounting/models.py:191 -msgid "number" -msgstr "numéro" - -#: accounting/models.py:192 -msgid "journal" -msgstr "classeur" - -#: accounting/models.py:194 core/models.py:498 core/models.py:778 -#: counter/models.py:244 counter/models.py:287 counter/models.py:405 -#: eboutic/models.py:15 eboutic/models.py:48 -msgid "date" -msgstr "date" - -#: accounting/models.py:195 counter/models.py:406 -msgid "comment" -msgstr "commentaire" - -#: accounting/models.py:196 counter/models.py:245 counter/models.py:288 -#: subscription/models.py:57 -msgid "payment method" -msgstr "méthode de paiement" - -#: accounting/models.py:197 -msgid "cheque number" -msgstr "numéro de chèque" - -#: accounting/models.py:198 eboutic/models.py:116 -msgid "invoice" -msgstr "facture" - -#: accounting/models.py:199 -msgid "is done" -msgstr "est fait" - -#: accounting/models.py:201 -msgid "simple type" -msgstr "type simplifié" - -#: accounting/models.py:203 accounting/models.py:304 -msgid "accounting type" -msgstr "type comptable" - -#: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325 -#: accounting/models.py:348 counter/models.py:279 -msgid "label" -msgstr "intitulé" - -#: accounting/models.py:206 -msgid "target type" -msgstr "type de cible" - -#: accounting/models.py:207 club/templates/club/club_members.jinja:8 -#: club/templates/club/club_old_members.jinja:8 -#: core/templates/core/user_clubs.jinja:15 -#: core/templates/core/user_clubs.jinja:41 -#: counter/templates/counter/cash_summary_list.jinja:32 -#: counter/templates/counter/stats.jinja:15 -#: launderette/templates/launderette/launderette_admin.jinja:44 -msgid "User" -msgstr "Utilisateur" - -#: accounting/models.py:207 club/templates/club/club_detail.jinja:5 -#: counter/templates/counter/invoices_call.jinja:20 -msgid "Club" -msgstr "Club" - -#: accounting/models.py:207 core/views/user.py:174 -msgid "Account" -msgstr "Compte" - -#: accounting/models.py:207 -msgid "Company" -msgstr "Entreprise" - -#: accounting/models.py:207 sith/settings.py:291 -msgid "Other" -msgstr "Autre" - -#: accounting/models.py:208 -msgid "target id" -msgstr "id de la cible" - -#: accounting/models.py:209 -msgid "target label" -msgstr "nom de la cible" - -#: accounting/models.py:210 -msgid "linked operation" -msgstr "opération liée" - -#: accounting/models.py:226 -#, python-format -msgid "" -"The date can not be before the start date of the journal, which is\n" -"%(start_date)s." -msgstr "" -"La date ne peut pas être avant la date de début du journal, qui est\n" -"%(start_date)s." - -#: accounting/models.py:229 -msgid "Target does not exists" -msgstr "La cible n'existe pas." - -#: accounting/models.py:231 -msgid "Please add a target label if you set no existing target" -msgstr "" -"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" - -#: accounting/models.py:233 -msgid "" -"You need to provide ether a simplified accounting type or a standard " -"accounting type" -msgstr "" -"Vous devez fournir soit un type comptable simplifié ou un type comptable " -"standard" - -#: accounting/models.py:294 counter/models.py:100 -msgid "code" -msgstr "code" - -#: accounting/models.py:296 -msgid "An accounting type code contains only numbers" -msgstr "Un code comptable ne contient que des numéros" - -#: accounting/models.py:300 -msgid "movement type" -msgstr "type de mouvement" - -#: accounting/models.py:300 -msgid "Credit" -msgstr "Crédit" - -#: accounting/models.py:300 -msgid "Debit" -msgstr "Débit" - -#: accounting/models.py:301 -msgid "Neutral" -msgstr "Neutre" - -#: accounting/models.py:327 -msgid "simplified accounting types" -msgstr "type simplifié" - -#: accounting/models.py:330 -msgid "simplified type" -msgstr "type simplifié" - -#: accounting/templates/accounting/accountingtype_list.jinja:4 -#: accounting/templates/accounting/accountingtype_list.jinja:15 -msgid "Accounting type list" -msgstr "Liste des types comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:9 -#: accounting/templates/accounting/bank_account_details.jinja:9 -#: accounting/templates/accounting/bank_account_list.jinja:9 -#: accounting/templates/accounting/club_account_details.jinja:9 -#: accounting/templates/accounting/journal_details.jinja:9 -#: accounting/templates/accounting/label_list.jinja:9 -#: accounting/templates/accounting/operation_edit.jinja:9 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 -#: core/templates/core/user_tools.jinja:43 -msgid "Accounting" -msgstr "Comptabilité" - -#: accounting/templates/accounting/accountingtype_list.jinja:10 -msgid "Accounting types" -msgstr "Type comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:13 -msgid "New accounting type" -msgstr "Nouveau type comptable" - -#: accounting/templates/accounting/accountingtype_list.jinja:22 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:22 -msgid "There is no types in this website." -msgstr "Il n'y a pas de types comptable dans ce site web." - -#: accounting/templates/accounting/bank_account_details.jinja:4 -#: accounting/templates/accounting/bank_account_details.jinja:13 -#: core/templates/core/user_tools.jinja:50 -msgid "Bank account: " -msgstr "Compte en banque : " - -#: accounting/templates/accounting/bank_account_details.jinja:15 -#: accounting/templates/accounting/club_account_details.jinja:16 -#: accounting/templates/accounting/label_list.jinja:21 -#: club/templates/club/club_sellings.jinja:49 -#: core/templates/core/file_detail.jinja:43 -#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66 -#: core/templates/core/user_account_detail.jinja:38 -#: core/templates/core/user_edit.jinja:18 -#: counter/templates/counter/last_ops.jinja:29 -#: counter/templates/counter/last_ops.jinja:59 -#: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:146 -msgid "Delete" -msgstr "Supprimer" - -#: accounting/templates/accounting/bank_account_details.jinja:17 -#: club/views.py:32 core/views/user.py:130 -msgid "Infos" -msgstr "Infos" - -#: accounting/templates/accounting/bank_account_details.jinja:19 -msgid "IBAN: " -msgstr "IBAN : " - -#: accounting/templates/accounting/bank_account_details.jinja:20 -msgid "Number: " -msgstr "Numéro : " - -#: accounting/templates/accounting/bank_account_details.jinja:22 -msgid "New club account" -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:55 -#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:54 -#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 -#: core/templates/core/user_tools.jinja:36 core/views/user.py:147 -#: counter/templates/counter/cash_summary_list.jinja:53 -#: counter/templates/counter/counter_list.jinja:17 -#: counter/templates/counter/counter_list.jinja:32 -#: counter/templates/counter/counter_list.jinja:53 -#: launderette/templates/launderette/launderette_list.jinja:16 -msgid "Edit" -msgstr "Éditer" - -#: accounting/templates/accounting/bank_account_list.jinja:4 -#: accounting/templates/accounting/bank_account_list.jinja:17 -msgid "Bank account list" -msgstr "Liste des comptes en banque" - -#: accounting/templates/accounting/bank_account_list.jinja:12 -msgid "Manage simplified types" -msgstr "Gérer les types simplifiés" - -#: accounting/templates/accounting/bank_account_list.jinja:13 -msgid "Manage accounting types" -msgstr "Gérer les types comptable" - -#: accounting/templates/accounting/bank_account_list.jinja:14 -msgid "New bank account" -msgstr "Nouveau compte en banque" - -#: accounting/templates/accounting/bank_account_list.jinja:26 -msgid "There is no accounts in this website." -msgstr "Il n'y a pas de comptes dans ce site web." - -#: accounting/templates/accounting/club_account_details.jinja:4 -#: accounting/templates/accounting/club_account_details.jinja:14 -msgid "Club account:" -msgstr "Compte club : " - -#: accounting/templates/accounting/club_account_details.jinja:18 -#: accounting/templates/accounting/journal_details.jinja:16 -#: accounting/templates/accounting/label_list.jinja:15 -msgid "New label" -msgstr "Nouvelle étiquette" - -#: accounting/templates/accounting/club_account_details.jinja:19 -#: accounting/templates/accounting/journal_details.jinja:17 -#: accounting/templates/accounting/label_list.jinja:4 -#: accounting/templates/accounting/label_list.jinja:17 -msgid "Label list" -msgstr "Liste des étiquettes" - -#: accounting/templates/accounting/club_account_details.jinja:21 -msgid "New journal" -msgstr "Nouveau classeur" - -#: accounting/templates/accounting/club_account_details.jinja:23 -msgid "You can not create new journal while you still have one opened" -msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" - -#: accounting/templates/accounting/club_account_details.jinja:28 -#: launderette/templates/launderette/launderette_admin.jinja:43 -msgid "Name" -msgstr "Nom" - -#: accounting/templates/accounting/club_account_details.jinja:29 -msgid "Start" -msgstr "Début" - -#: accounting/templates/accounting/club_account_details.jinja:30 -msgid "End" -msgstr "Fin" - -#: accounting/templates/accounting/club_account_details.jinja:31 -#: accounting/templates/accounting/journal_details.jinja:31 -#: core/templates/core/user_account_detail.jinja:53 -#: core/templates/core/user_account_detail.jinja:80 -#: counter/templates/counter/last_ops.jinja:17 -msgid "Amount" -msgstr "Montant" - -#: accounting/templates/accounting/club_account_details.jinja:32 -msgid "Effective amount" -msgstr "Montant effectif" - -#: accounting/templates/accounting/club_account_details.jinja:33 -msgid "Closed" -msgstr "Fermé" - -#: accounting/templates/accounting/club_account_details.jinja:34 -#: accounting/templates/accounting/journal_details.jinja:39 -msgid "Actions" -msgstr "Actions" - -#: accounting/templates/accounting/club_account_details.jinja:50 -#: accounting/templates/accounting/journal_details.jinja:58 -msgid "Yes" -msgstr "Oui" - -#: accounting/templates/accounting/club_account_details.jinja:52 -#: accounting/templates/accounting/journal_details.jinja:60 -msgid "No" -msgstr "Non" - -#: accounting/templates/accounting/club_account_details.jinja:54 -#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 -msgid "View" -msgstr "Voir" - -#: accounting/templates/accounting/journal_details.jinja:4 -#: accounting/templates/accounting/journal_details.jinja:15 -msgid "General journal:" -msgstr "Classeur : " - -#: accounting/templates/accounting/journal_details.jinja:18 -#: core/templates/core/user_account.jinja:38 -#: core/templates/core/user_account_detail.jinja:10 -#: counter/templates/counter/counter_click.jinja:32 -msgid "Amount: " -msgstr "Montant: " - -#: accounting/templates/accounting/journal_details.jinja:19 -msgid "Effective amount: " -msgstr "Montant effectif: " - -#: accounting/templates/accounting/journal_details.jinja:21 -msgid "Journal is closed, you can not create operation" -msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" - -#: accounting/templates/accounting/journal_details.jinja:23 -msgid "New operation" -msgstr "Nouvelle opération" - -#: accounting/templates/accounting/journal_details.jinja:28 -#: counter/templates/counter/stats.jinja:14 -msgid "Nb" -msgstr "No" - -#: accounting/templates/accounting/journal_details.jinja:29 -#: club/templates/club/club_sellings.jinja:19 -#: core/templates/core/user_account_detail.jinja:17 -#: core/templates/core/user_account_detail.jinja:50 -#: core/templates/core/user_account_detail.jinja:78 -#: counter/templates/counter/cash_summary_list.jinja:34 -#: counter/templates/counter/last_ops.jinja:14 -#: counter/templates/counter/last_ops.jinja:39 -msgid "Date" -msgstr "Date" - -#: accounting/templates/accounting/journal_details.jinja:30 -#: club/templates/club/club_sellings.jinja:23 -#: core/templates/core/user_account_detail.jinja:20 -#: counter/templates/counter/last_ops.jinja:42 -msgid "Label" -msgstr "Étiquette" - -#: accounting/templates/accounting/journal_details.jinja:32 -msgid "Payment mode" -msgstr "Méthode de paiement" - -#: accounting/templates/accounting/journal_details.jinja:33 -msgid "Target" -msgstr "Cible" - -#: accounting/templates/accounting/journal_details.jinja:34 -msgid "Code" -msgstr "Code" - -#: accounting/templates/accounting/journal_details.jinja:35 -msgid "Nature" -msgstr "Nature" - -#: accounting/templates/accounting/journal_details.jinja:36 -msgid "Done" -msgstr "Effectué" - -#: accounting/templates/accounting/journal_details.jinja:37 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:716 -msgid "Comment" -msgstr "Commentaire" - -#: accounting/templates/accounting/journal_details.jinja:38 -msgid "File" -msgstr "Fichier" - -#: accounting/templates/accounting/label_list.jinja:14 -msgid "Back to club account" -msgstr "Retour au compte club" - -#: accounting/templates/accounting/label_list.jinja:26 -msgid "There is no label in this club account." -msgstr "Il n'y a pas d'étiquette dans ce compte club." - -#: accounting/templates/accounting/operation_edit.jinja:4 -#: accounting/templates/accounting/operation_edit.jinja:13 -#: accounting/templates/accounting/operation_edit.jinja:16 -msgid "Edit operation" -msgstr "Éditer l'opération" - -#: accounting/templates/accounting/operation_edit.jinja:40 -#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7 -#: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20 -#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 -#: core/templates/core/pagerev_edit.jinja:24 -#: core/templates/core/user_godfathers.jinja:35 -#: counter/templates/counter/cash_register_summary.jinja:22 -#: subscription/templates/subscription/subscription.jinja:23 -msgid "Save" -msgstr "Sauver" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:4 -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:15 -msgid "Simplified type list" -msgstr "Liste des types simplifiés" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:10 -msgid "Simplified types" -msgstr "Types simplifiés" - -#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:13 -msgid "New simplified type" -msgstr "Nouveau type simplifié" - -#: club/models.py:21 -msgid "unix name" -msgstr "nom unix" - -#: club/models.py:25 -msgid "" -"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " -"characters." -msgstr "" -"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " -"lettres, des nombres, et les caractères ./-/_" - -#: club/models.py:30 -msgid "A club with that unix name already exists." -msgstr "Un club avec ce nom UNIX existe déjà." - -#: club/models.py:33 core/models.py:169 -msgid "address" -msgstr "Adresse" - -#: club/models.py:39 core/models.py:118 -msgid "home" -msgstr "home" - -#: club/models.py:47 -msgid "You can not make loops in clubs" -msgstr "Vous ne pouvez pas faire de boucles dans les clubs" - -#: club/models.py:61 -msgid "A club with that unix_name already exists" -msgstr "Un club avec ce nom UNIX existe déjà." - -#: club/models.py:144 counter/models.py:386 counter/models.py:403 -#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 -#: launderette/models.py:126 -msgid "user" -msgstr "nom d'utilisateur" - -#: club/models.py:148 core/models.py:136 -msgid "role" -msgstr "rôle" - -#: club/models.py:150 core/models.py:33 counter/models.py:72 -#: counter/models.py:97 -msgid "description" -msgstr "description" - -#: club/models.py:155 -msgid "User must be subscriber to take part to a club" -msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" - -#: club/models.py:157 -msgid "User is already member of that club" -msgstr "L'utilisateur est déjà membre de ce club" - -#: club/models.py:166 -msgid "past member" -msgstr "Anciens membres" - -#: club/templates/club/club_list.jinja:4 club/templates/club/club_list.jinja:24 -msgid "Club list" -msgstr "Liste des clubs" - -#: club/templates/club/club_list.jinja:21 -#: core/templates/core/user_tools.jinja:19 -msgid "New club" -msgstr "Nouveau club" - -#: club/templates/club/club_list.jinja:31 -msgid "There is no club in this website." -msgstr "Il n'y a pas de club dans ce site web." - -#: club/templates/club/club_members.jinja:5 -msgid "Club members" -msgstr "Membres du club" - -#: club/templates/club/club_members.jinja:9 -#: club/templates/club/club_old_members.jinja:9 -#: core/templates/core/user_clubs.jinja:16 -#: core/templates/core/user_clubs.jinja:42 -msgid "Role" -msgstr "Rôle" - -#: club/templates/club/club_members.jinja:10 -#: club/templates/club/club_old_members.jinja:10 -#: core/templates/core/user_clubs.jinja:17 -#: core/templates/core/user_clubs.jinja:43 -msgid "Description" -msgstr "Description" - -#: club/templates/club/club_members.jinja:11 -#: core/templates/core/user_clubs.jinja:18 -#: launderette/templates/launderette/launderette_admin.jinja:45 -msgid "Since" -msgstr "Depuis" - -#: club/templates/club/club_members.jinja:21 -#: core/templates/core/user_clubs.jinja:29 -msgid "Mark as old" -msgstr "Marquer comme ancien" - -#: club/templates/club/club_members.jinja:30 -#: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 -#: launderette/views.py:146 -msgid "Add" -msgstr "Ajouter" - -#: club/templates/club/club_old_members.jinja:5 -msgid "Club old members" -msgstr "Anciens membres du club" - -#: club/templates/club/club_old_members.jinja:11 -#: core/templates/core/user_clubs.jinja:44 -msgid "From" -msgstr "Du" - -#: club/templates/club/club_old_members.jinja:12 -#: core/templates/core/user_clubs.jinja:45 -msgid "To" -msgstr "Au" - -#: club/templates/club/club_sellings.jinja:5 club/views.py:59 club/views.py:216 -#: counter/templates/counter/counter_main.jinja:19 -#: counter/templates/counter/last_ops.jinja:35 -msgid "Sellings" -msgstr "Ventes" - -#: club/templates/club/club_sellings.jinja:9 -#: counter/templates/counter/cash_summary_list.jinja:15 -msgid "Show" -msgstr "Montrer" - -#: club/templates/club/club_sellings.jinja:10 -msgid "Download as cvs" -msgstr "Télécharger en CSV" - -#: club/templates/club/club_sellings.jinja:13 -msgid "Quantity: " -msgstr "Quantité : " - -#: club/templates/club/club_sellings.jinja:13 -msgid "units" -msgstr "unités" - -#: club/templates/club/club_sellings.jinja:14 -#: counter/templates/counter/counter_click.jinja:70 -#: counter/templates/counter/counter_main.jinja:28 -#: eboutic/templates/eboutic/eboutic_main.jinja:34 -msgid "Total: " -msgstr "Total : " - -#: club/templates/club/club_sellings.jinja:20 club/views.py:167 -#: core/templates/core/user_account_detail.jinja:18 -#: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:78 -msgid "Counter" -msgstr "Comptoir" - -#: club/templates/club/club_sellings.jinja:21 -#: core/templates/core/user_account_detail.jinja:19 -#: core/templates/core/user_account_detail.jinja:52 -#: counter/templates/counter/last_ops.jinja:15 -#: counter/templates/counter/last_ops.jinja:40 -msgid "Barman" -msgstr "Barman" - -#: club/templates/club/club_sellings.jinja:22 -#: counter/templates/counter/counter_click.jinja:29 -#: counter/templates/counter/last_ops.jinja:16 -#: counter/templates/counter/last_ops.jinja:41 -msgid "Customer" -msgstr "Client" - -#: club/templates/club/club_sellings.jinja:24 -#: core/templates/core/user_account_detail.jinja:21 -#: core/templates/core/user_stats.jinja:28 -#: counter/templates/counter/last_ops.jinja:43 -msgid "Quantity" -msgstr "Quantité" - -#: club/templates/club/club_sellings.jinja:25 -#: core/templates/core/user_account.jinja:10 -#: core/templates/core/user_account_detail.jinja:22 -#: counter/templates/counter/cash_summary_list.jinja:35 -#: counter/templates/counter/last_ops.jinja:44 -#: counter/templates/counter/stats.jinja:18 -msgid "Total" -msgstr "Total" - -#: club/templates/club/club_sellings.jinja:26 -#: core/templates/core/user_account_detail.jinja:23 -#: core/templates/core/user_account_detail.jinja:54 -#: counter/templates/counter/last_ops.jinja:18 -#: counter/templates/counter/last_ops.jinja:45 -msgid "Payment method" -msgstr "Méthode de paiement" - -#: club/templates/club/club_tools.jinja:4 -#: core/templates/core/user_tools.jinja:62 -msgid "Club tools" -msgstr "Outils club" - -#: club/templates/club/club_tools.jinja:6 -msgid "Counters:" -msgstr "Comptoirs : " - -#: club/templates/club/club_tools.jinja:22 -msgid "Accouting: " -msgstr "Comptabilité : " - -#: club/templates/club/club_tools.jinja:30 -msgid "Manage launderettes" -msgstr "Gestion des laveries" - -#: club/views.py:38 -msgid "Members" -msgstr "Membres" - -#: club/views.py:43 -msgid "Old members" -msgstr "Anciens membres" - -#: club/views.py:49 core/templates/core/base.jinja:44 core/views/user.py:141 -msgid "Tools" -msgstr "Outils" - -#: club/views.py:65 counter/templates/counter/counter_list.jinja:21 -#: counter/templates/counter/counter_list.jinja:42 -#: counter/templates/counter/counter_list.jinja:57 -msgid "Props" -msgstr "Propriétés" - -#: club/views.py:103 core/views/forms.py:204 counter/views.py:39 -msgid "Select user" -msgstr "Choisir un utilisateur" - -#: club/views.py:150 -msgid "You do not have the permission to do that" -msgstr "Vous n'avez pas la permission de faire cela" - -#: club/views.py:165 counter/views.py:914 -msgid "Begin date" -msgstr "Date de début" - -#: club/views.py:166 counter/views.py:915 -msgid "End date" -msgstr "Date de fin" - -#: club/views.py:180 core/templates/core/user_stats.jinja:27 -#: counter/views.py:995 -msgid "Product" -msgstr "Produit" - -#: core/models.py:29 -msgid "meta group status" -msgstr "status du meta-groupe" - -#: core/models.py:31 -msgid "Whether a group is a meta group or not" -msgstr "Si un groupe est un meta-groupe ou pas" - -#: core/models.py:59 -#, python-format -msgid "%(value)s is not a valid promo (between 0 and %(end)s)" -msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" - -#: core/models.py:75 -msgid "username" -msgstr "nom d'utilisateur" - -#: core/models.py:78 -msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." -msgstr "" -"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" -"+/-/_" - -#: core/models.py:82 -msgid "" -"Enter a valid username. This value may contain only letters, numbers and ./" -"+/-/_ characters." -msgstr "" -"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" -"+/-/_" - -#: core/models.py:87 -msgid "A user with that username already exists." -msgstr "Un utilisateur de ce nom existe déjà" - -#: core/models.py:90 -msgid "first name" -msgstr "Prénom" - -#: core/models.py:91 -msgid "last name" -msgstr "Nom" - -#: core/models.py:92 -msgid "email address" -msgstr "adresse email" - -#: core/models.py:93 -msgid "date of birth" -msgstr "date de naissance" - -#: core/models.py:94 -msgid "nick name" -msgstr "surnom" - -#: core/models.py:96 -msgid "staff status" -msgstr "status \"staff\"" - -#: core/models.py:98 -msgid "Designates whether the user can log into this admin site." -msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." - -#: core/models.py:101 -msgid "active" -msgstr "actif" - -#: core/models.py:104 -msgid "" -"Designates whether this user should be treated as active. Unselect this " -"instead of deleting accounts." -msgstr "" -"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " -"lieu de supprimer les comptes." - -#: core/models.py:108 -msgid "date joined" -msgstr "date d'inscription" - -#: core/models.py:109 -msgid "last update" -msgstr "dernière mise à jour" - -#: core/models.py:111 -msgid "superuser" -msgstr "super-utilisateur" - -#: core/models.py:114 -msgid "Designates whether this user is a superuser. " -msgstr "Est-ce que l'utilisateur est super-utilisateur." - -#: core/models.py:119 -msgid "profile" -msgstr "profil" - -#: core/models.py:121 -msgid "avatar" -msgstr "avatar" - -#: core/models.py:123 -msgid "scrub" -msgstr "blouse" - -#: core/models.py:125 -msgid "sex" -msgstr "sexe" - -#: core/models.py:125 -msgid "Man" -msgstr "Homme" - -#: core/models.py:125 -msgid "Woman" -msgstr "Femme" - -#: core/models.py:126 -msgid "tshirt size" -msgstr "taille de tshirt" - -#: core/models.py:127 -msgid "-" -msgstr "-" - -#: core/models.py:128 -msgid "XS" -msgstr "XS" - -#: core/models.py:129 -msgid "S" -msgstr "S" - -#: core/models.py:130 -msgid "M" -msgstr "M" - -#: core/models.py:131 -msgid "L" -msgstr "L" - -#: core/models.py:132 -msgid "XL" -msgstr "XL" - -#: core/models.py:133 -msgid "XXL" -msgstr "XXL" - -#: core/models.py:134 -msgid "XXXL" -msgstr "XXXL" - -#: core/models.py:137 -msgid "Student" -msgstr "Étudiant" - -#: core/models.py:138 -msgid "Administrative agent" -msgstr "Personnel administratif" - -#: core/models.py:139 -msgid "Teacher" -msgstr "Enseignant" - -#: core/models.py:140 -msgid "Agent" -msgstr "Personnel" - -#: core/models.py:141 -msgid "Doctor" -msgstr "Doctorant" - -#: core/models.py:142 -msgid "Former student" -msgstr "Ancien étudiant" - -#: core/models.py:143 -msgid "Service" -msgstr "Service" - -#: core/models.py:145 -msgid "department" -msgstr "département" - -#: core/models.py:146 -msgid "TC" -msgstr "TC" - -#: core/models.py:147 -msgid "IMSI" -msgstr "IMSI" - -#: core/models.py:148 -msgid "IMAP" -msgstr "IMAP" - -#: core/models.py:149 -msgid "INFO" -msgstr "INFO" - -#: core/models.py:150 -msgid "GI" -msgstr "GI" - -#: core/models.py:151 -msgid "E" -msgstr "E" - -#: core/models.py:152 -msgid "EE" -msgstr "EE" - -#: core/models.py:153 -msgid "GESC" -msgstr "GESC" - -#: core/models.py:154 -msgid "GMC" -msgstr "GMC" - -#: core/models.py:155 -msgid "MC" -msgstr "MC" - -#: core/models.py:156 -msgid "EDIM" -msgstr "EDIM" - -#: core/models.py:157 -msgid "Humanities" -msgstr "Humanités" - -#: core/models.py:158 -msgid "N/A" -msgstr "N/A" - -#: core/models.py:160 -msgid "dpt option" -msgstr "Filière" - -#: core/models.py:161 -msgid "semester" -msgstr "semestre" - -#: core/models.py:162 -msgid "quote" -msgstr "citation" - -#: core/models.py:163 -msgid "school" -msgstr "école" - -#: core/models.py:164 -msgid "promo" -msgstr "promo" - -#: core/models.py:165 -msgid "forum signature" -msgstr "signature du forum" - -#: core/models.py:166 -msgid "second email address" -msgstr "adresse email secondaire" - -#: core/models.py:168 -msgid "parent phone" -msgstr "téléphone des parents" - -#: core/models.py:170 -msgid "parent address" -msgstr "adresse des parents" - -#: core/models.py:171 -msgid "is subscriber viewable" -msgstr "profil visible par les cotisants" - -#: core/models.py:294 -msgid "A user with that username already exists" -msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" - -#: core/models.py:417 core/templates/core/macros.jinja:17 -#: core/templates/core/user_detail.jinja:14 -#: core/templates/core/user_detail.jinja:16 -#: core/templates/core/user_edit.jinja:16 -msgid "Profile" -msgstr "Profil" - -#: core/models.py:475 -msgid "Visitor" -msgstr "Visiteur" - -#: core/models.py:480 -msgid "define if we show a users stats" -msgstr "Definit si l'on montre les statistiques de l'utilisateur" - -#: core/models.py:482 -msgid "Show your account statistics to others" -msgstr "Montrez vos statistiques de compte aux autres" - -#: core/models.py:489 -msgid "file name" -msgstr "nom du fichier" - -#: core/models.py:490 core/models.py:625 -msgid "parent" -msgstr "parent" - -#: core/models.py:491 core/models.py:501 -msgid "file" -msgstr "fichier" - -#: core/models.py:492 -msgid "owner" -msgstr "propriétaire" - -#: core/models.py:493 core/models.py:631 -msgid "edit group" -msgstr "groupe d'édition" - -#: core/models.py:494 core/models.py:632 -msgid "view group" -msgstr "groupe de vue" - -#: core/models.py:495 -msgid "is folder" -msgstr "est un dossier" - -#: core/models.py:496 -msgid "mime type" -msgstr "type mime" - -#: core/models.py:497 -msgid "size" -msgstr "taille" - -#: core/models.py:529 -msgid "Character '/' not authorized in name" -msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" - -#: core/models.py:532 core/models.py:537 -msgid "Loop in folder tree" -msgstr "Boucle dans l'arborescence des dossiers" - -#: core/models.py:541 -msgid "You can not make a file be a children of a non folder file" -msgstr "" -"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " -"un dossier" - -#: core/models.py:545 -msgid "Duplicate file" -msgstr "Un fichier de ce nom existe déjà" - -#: core/models.py:555 -msgid "You must provide a file" -msgstr "Vous devez fournir un fichier" - -#: core/models.py:580 -msgid "Folder: " -msgstr "Dossier : " - -#: core/models.py:582 -msgid "File: " -msgstr "Fichier : " - -#: core/models.py:624 core/models.py:628 -msgid "page name" -msgstr "nom de la page" - -#: core/models.py:629 -msgid "owner group" -msgstr "groupe propriétaire" - -#: core/models.py:633 -msgid "lock user" -msgstr "utilisateur bloquant" - -#: core/models.py:634 -msgid "lock_timeout" -msgstr "décompte du déblocage" - -#: core/models.py:661 -msgid "Duplicate page" -msgstr "Une page de ce nom existe déjà" - -#: core/models.py:667 -msgid "Loop in page tree" -msgstr "Boucle dans l'arborescence des pages" - -#: core/models.py:775 -msgid "revision" -msgstr "révision" - -#: core/models.py:776 -msgid "page title" -msgstr "titre de la page" - -#: core/models.py:777 -msgid "page content" -msgstr "contenu de la page" - -#: core/templates/core/403.jinja:5 -msgid "403, Forbidden" -msgstr "403. Non autorisé" - -#: core/templates/core/404.jinja:5 -msgid "404, Not Found" -msgstr "404. Non trouvé" - -#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 -msgid "Welcome!" -msgstr "Bienvenue!" - -#: core/templates/core/base.jinja:19 -msgid "Logo" -msgstr "Logo" - -#: core/templates/core/base.jinja:24 core/templates/core/login.jinja:4 -#: core/templates/core/password_reset_complete.jinja:5 -msgid "Login" -msgstr "Connexion" - -#: core/templates/core/base.jinja:25 core/templates/core/register.jinja:18 -msgid "Register" -msgstr "S'enregister" - -#: core/templates/core/base.jinja:45 -msgid "Logout" -msgstr "Déconnexion" - -#: core/templates/core/base.jinja:47 core/templates/core/base.jinja.py:48 -msgid "Search" -msgstr "Recherche" - -#: core/templates/core/base.jinja:70 -msgid "Main" -msgstr "Accueil" - -#: core/templates/core/base.jinja:71 -msgid "Matmatronch" -msgstr "Matmatronch" - -#: core/templates/core/base.jinja:72 -msgid "Wiki" -msgstr "Wiki" - -#: core/templates/core/base.jinja:73 -msgid "SAS" -msgstr "SAS" - -#: core/templates/core/base.jinja:74 -msgid "Forum" -msgstr "Forum" - -#: core/templates/core/base.jinja:75 -msgid "Services" -msgstr "Services" - -#: core/templates/core/base.jinja:76 core/templates/core/file.jinja:20 -#: core/views/files.py:47 -msgid "Files" -msgstr "Fichiers" - -#: core/templates/core/base.jinja:77 -msgid "Sponsors" -msgstr "Partenaires" - -#: core/templates/core/base.jinja:78 -msgid "Help" -msgstr "Aide" - -#: core/templates/core/base.jinja:110 -msgid "Site made by good people" -msgstr "Site réalisé par des gens bons" - -#: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 -#, python-format -msgid "Create %(name)s" -msgstr "Créer %(name)s" - -#: core/templates/core/delete_confirm.jinja:4 -#: core/templates/core/delete_confirm.jinja:8 -#: core/templates/core/file_delete_confirm.jinja:4 -#: core/templates/core/file_delete_confirm.jinja:8 -msgid "Delete confirmation" -msgstr "Confirmation de suppression" - -#: core/templates/core/delete_confirm.jinja:10 -#: core/templates/core/file_delete_confirm.jinja:10 -#, python-format -msgid "Are you sure you want to delete \"%(obj)s\"?" -msgstr "Êtes-vous sûr de vouloir supprimer \"%(obj)s\" ?" - -#: core/templates/core/delete_confirm.jinja:11 -#: core/templates/core/file_delete_confirm.jinja:11 -msgid "Confirm" -msgstr "Confirmation" - -#: core/templates/core/delete_confirm.jinja:14 -#: core/templates/core/file_delete_confirm.jinja:14 -#: counter/templates/counter/counter_click.jinja:93 -msgid "Cancel" -msgstr "Annuler" - -#: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13 -#: core/templates/core/file_edit.jinja:4 -#: counter/templates/counter/cash_register_summary.jinja:4 -#, python-format -msgid "Edit %(obj)s" -msgstr "Éditer %(obj)s" - -#: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 -msgid "File list" -msgstr "Liste des fichiers" - -#: core/templates/core/file.jinja:9 -msgid "New file" -msgstr "Nouveau fichier" - -#: core/templates/core/file.jinja:11 core/templates/core/page.jinja:11 -msgid "Not found" -msgstr "Non trouvé" - -#: core/templates/core/file.jinja:32 -msgid "My files" -msgstr "Mes fichiers" - -#: core/templates/core/file.jinja:41 core/templates/core/page.jinja:34 -msgid "Prop" -msgstr "Propriétés" - -#: core/templates/core/file_detail.jinja:13 -msgid "Owner: " -msgstr "Propriétaire : " - -#: core/templates/core/file_detail.jinja:34 -msgid "Real name: " -msgstr "Nom réel : " - -#: core/templates/core/file_detail.jinja:35 -msgid "Date: " -msgstr "Date : " - -#: core/templates/core/file_detail.jinja:37 -msgid "Type: " -msgstr "Type : " - -#: core/templates/core/file_detail.jinja:38 -msgid "Size: " -msgstr "Taille : " - -#: core/templates/core/file_detail.jinja:38 -msgid "bytes" -msgstr "octets" - -#: core/templates/core/file_detail.jinja:40 -msgid "Download" -msgstr "Télécharger" - -#: core/templates/core/file_list.jinja:19 -msgid "There is no file in this website." -msgstr "Il n'y a pas de fichier sur ce site web." - -#: core/templates/core/group_edit.jinja:4 -msgid "Back to list" -msgstr "Retour à la liste" - -#: core/templates/core/group_edit.jinja:5 -msgid "Edit group" -msgstr "Éditer le groupe" - -#: core/templates/core/group_edit.jinja:9 -#: core/templates/core/user_edit.jinja:36 -#: core/templates/core/user_group.jinja:8 -msgid "Update" -msgstr "Mettre à jour" - -#: core/templates/core/group_list.jinja:4 -#: core/templates/core/group_list.jinja:8 -msgid "Group list" -msgstr "Liste des groupes" - -#: core/templates/core/group_list.jinja:9 -msgid "New group" -msgstr "Nouveau groupe" - -#: core/templates/core/index.jinja:7 -msgid "Welcome to the new AE's website!" -msgstr "Bienvenue sur le nouveau site de l'AE ! " - -#: core/templates/core/login.jinja:10 -msgid "Your username and password didn't match. Please try again." -msgstr "" -"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Merci de " -"réessayer." - -#: core/templates/core/login.jinja:15 -msgid "" -"Your account doesn't have access to this page. To proceed,\n" -" please login with an account that has access." -msgstr "" -"Votre compte n'a pas accès à cette page. Merci de vous identifier avec un " -"compte qui a accès." - -#: core/templates/core/login.jinja:18 -msgid "Please login to see this page." -msgstr "Merci de vous identifier pour voir cette page." - -#: core/templates/core/login.jinja:28 -#: counter/templates/counter/counter_main.jinja:51 -msgid "login" -msgstr "login" - -#: core/templates/core/login.jinja:32 -msgid "Lost password?" -msgstr "Mot de passe perdu ?" - -#: core/templates/core/macros.jinja:27 core/templates/core/user_detail.jinja:27 -msgid "Born: " -msgstr "Né le : " - -#: core/templates/core/macros.jinja:31 core/templates/core/user_detail.jinja:48 -msgid "Promo: " -msgstr "Promo : " - -#: core/templates/core/macros.jinja:38 -#, python-format -msgid "Subscribed until %(subscription_end)s" -msgstr "Cotisant jusqu'au %(subscription_end)s" - -#: core/templates/core/macros.jinja:39 core/templates/core/user_edit.jinja:39 -msgid "Account number: " -msgstr "Numero de compte : " - -#: core/templates/core/macros.jinja:44 launderette/models.py:129 -msgid "Slot" -msgstr "Créneau" - -#: core/templates/core/macros.jinja:55 -#: launderette/templates/launderette/launderette_admin.jinja:20 -msgid "Tokens" -msgstr "Jetons" - -#: core/templates/core/new_user_email.jinja:2 -msgid "" -"You're receiving this email because you subscribed to the UTBM student " -"association." -msgstr "" -"Vous avez reçu cet email parce que vous avez cotisé à l'Association des " -"Étudiants de l'UTBM." - -#: core/templates/core/new_user_email.jinja:4 -#: core/templates/core/password_reset_email.jinja:4 -msgid "Please go to the following page and choose a new password:" -msgstr "" -"Merci de vous rendre sur la page suivante et de choisir un nouveau mot de " -"passe :" - -#: core/templates/core/new_user_email.jinja:8 -msgid "Your username, in case it was not given to you: " -msgstr "Votre nom d'utilisateur, si il ne vous a pas été donné :" - -#: core/templates/core/new_user_email.jinja:9 -msgid "" -"You also got a new account that will be useful to purchase products in the " -"living areas and on the Eboutic." -msgstr "" -"Un compte vous a également été créé, qui vous servira notamment à consommer " -"dans les lieux de vie ou sur l'Eboutic." - -#: core/templates/core/new_user_email.jinja:10 -#, python-format -msgid "Here is your account number: %(account)s" -msgstr "Voici votre numéro de compte AE : %(account)s" - -#: core/templates/core/new_user_email.jinja:12 -msgid "Thanks for subscribing! " -msgstr "Merci d'avoir cotisé !" - -#: core/templates/core/new_user_email.jinja:14 -msgid "The AE team" -msgstr "L'équipe AE" - -#: core/templates/core/new_user_email_subject.jinja:2 -msgid "New subscription to the UTBM student association" -msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" - -#: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 -#: core/templates/core/page_list.jinja:9 -msgid "Page list" -msgstr "Liste des pages" - -#: core/templates/core/page.jinja:9 -msgid "Create page" -msgstr "Créer une page" - -#: core/templates/core/page.jinja:29 -msgid "History" -msgstr "Historique" - -#: core/templates/core/page.jinja:45 -msgid "Page does not exist" -msgstr "La page n'existe pas." - -#: core/templates/core/page.jinja:47 -msgid "Create it?" -msgstr "La créer ?" - -#: core/templates/core/page_detail.jinja:5 -#, python-format -msgid "This may not be the last update, you are seeing revision %(rev_id)s!" -msgstr "" -"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la " -"version %(rev_id)s." - -#: core/templates/core/page_hist.jinja:6 -msgid "Page history" -msgstr "Historique de la page" - -#: core/templates/core/page_hist.jinja:7 -#, python-format -msgid "You're seeing the history of page \"%(page_name)s\"" -msgstr "Vous consultez l'historique de la page \"%(page_name)s\"" - -#: core/templates/core/page_hist.jinja:11 -msgid "last" -msgstr "actuel" - -#: core/templates/core/page_list.jinja:16 -msgid "There is no page in this website." -msgstr "Il n'y a pas de page sur ce site web." - -#: core/templates/core/page_prop.jinja:4 -msgid "Page properties" -msgstr "Propriétés de la page" - -#: core/templates/core/pagerev_edit.jinja:19 -msgid "Edit page" -msgstr "Éditer la page" - -#: core/templates/core/pagerev_edit.jinja:23 -msgid "Preview" -msgstr "Prévisualiser" - -#: core/templates/core/password_change.jinja:6 -#, python-format -msgid "Change password for %(user)s" -msgstr "Changer le mot de passe de %(user)s" - -#: core/templates/core/password_change.jinja:11 -msgid "Change" -msgstr "Changer" - -#: core/templates/core/password_change_done.jinja:4 -msgid "You successfully changed your password!" -msgstr "Vous avez correctement changé votre mot de passe !" - -#: core/templates/core/password_reset.jinja:7 -#: core/templates/core/password_reset_confirm.jinja:7 -msgid "Reset" -msgstr "Reset" - -#: core/templates/core/password_reset_complete.jinja:4 -msgid "You successfully reset your password!" -msgstr "Vous avez correctement réinitialisé votre mot de passe !" - -#: core/templates/core/password_reset_done.jinja:4 -msgid "Password reset sent" -msgstr "Réinitialisation de mot de passe envoyée" - -#: core/templates/core/password_reset_done.jinja:7 -msgid "" -"We've emailed you instructions for setting your password, if an account " -"exists with the email you entered. You should\n" -"receive them shortly." -msgstr "" -"Nous vous avons envoyé les instructions pour réinitialiser votre mot de " -"passe par email, si un compte avec l'email entré existe effectivement.\n" -"Vous devriez les recevoir rapidement." - -#: core/templates/core/password_reset_done.jinja:12 -msgid "" -"If you don't receive an email, please make sure you've entered the address " -"you registered with, and check your spam\n" -"folder." -msgstr "" -"Si vous ne recevez pas d'email, assurez-vous d'avoir correctement entré " -"l'adresse email avec laquelle vous vous êtes inscrit, et vérifiez votre " -"dossier de spam." - -#: core/templates/core/password_reset_email.jinja:2 -#, python-format -msgid "" -"You're receiving this email because you requested a password reset for your " -"user account at %(site_name)s." -msgstr "" -"Vous avez reçu cet email parce que vous avez demandé une réinitialisation du " -"mot de passe pour votre compte sur le site %(site_name)s." - -#: core/templates/core/password_reset_email.jinja:8 -msgid "Your username, in case you've forgotten: " -msgstr "Votre nom d'utilisateur, en cas d'oubli :" - -#: core/templates/core/password_reset_email.jinja:10 -msgid "Thanks for using our site! " -msgstr "Merci d'utiliser notre site !" - -#: core/templates/core/password_reset_email.jinja:12 -#, python-format -msgid "The %(site_name)s team" -msgstr "L'équipe de %(site_name)s" - -#: core/templates/core/register.jinja:3 core/templates/core/register.jinja:6 -msgid "Register a user" -msgstr "Enregistrer un utilisateur" - -#: core/templates/core/register.jinja:9 -#, python-format -msgid "Welcome %(user_name)s!" -msgstr "Bienvenue, %(user_name)s!" - -#: core/templates/core/register.jinja:10 -msgid "" -"You successfully registred and you will soon receive a confirmation mail." -msgstr "" -"Vous vous êtes correctement enregistré, et vous devriez recevoir rapidement " -"un email de confirmation." - -#: core/templates/core/register.jinja:12 -#, python-format -msgid "Your username is %(username)s." -msgstr "Votre nom d'utilisateur est %(username)s." - -#: core/templates/core/search.jinja:6 -msgid "Search result" -msgstr "Résultat de la recherche" - -#: core/templates/core/search.jinja:10 -msgid "Users" -msgstr "Utilisateurs" - -#: core/templates/core/search.jinja:18 core/views/user.py:153 -#: counter/templates/counter/stats.jinja:17 -msgid "Clubs" -msgstr "Clubs" - -#: core/templates/core/user_account.jinja:8 -msgid "Year" -msgstr "Année" - -#: core/templates/core/user_account.jinja:9 -msgid "Month" -msgstr "Mois" - -#: core/templates/core/user_account.jinja:32 -#: core/templates/core/user_account_detail.jinja:4 -#, python-format -msgid "%(user_name)s's account" -msgstr "Compte de %(user_name)s" - -#: core/templates/core/user_account.jinja:37 -#: core/templates/core/user_account_detail.jinja:9 -msgid "User account" -msgstr "Compte utilisateur" - -#: core/templates/core/user_account.jinja:42 -#: core/templates/core/user_account_detail.jinja:13 -msgid "Account buyings" -msgstr "Achat sur compte utilisateur" - -#: core/templates/core/user_account.jinja:45 -#: core/templates/core/user_account_detail.jinja:46 -#: counter/templates/counter/cash_summary_list.jinja:17 -#: counter/templates/counter/last_ops.jinja:10 -msgid "Refillings" -msgstr "Rechargements" - -#: core/templates/core/user_account.jinja:49 -#: core/templates/core/user_account_detail.jinja:74 -msgid "Eboutic invoices" -msgstr "Facture eboutic" - -#: core/templates/core/user_account.jinja:53 counter/views.py:484 -msgid "Etickets" -msgstr "Etickets" - -#: core/templates/core/user_account.jinja:64 -#: core/templates/core/user_account_detail.jinja:102 -msgid "User has no account" -msgstr "L'utilisateur n'a pas de compte" - -#: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:146 -msgid "Back" -msgstr "Retour" - -#: core/templates/core/user_account_detail.jinja:79 -msgid "Items" -msgstr "Articles" - -#: core/templates/core/user_clubs.jinja:4 -#, python-format -msgid "%(user_name)s's club(s)" -msgstr "Clubs de %(user_name)s" - -#: core/templates/core/user_clubs.jinja:8 -msgid "Club(s)" -msgstr "Clubs" - -#: core/templates/core/user_clubs.jinja:10 -msgid "Current club(s) :" -msgstr "Clubs actuels : " - -#: core/templates/core/user_clubs.jinja:36 -msgid "Old club(s) :" -msgstr "Anciens clubs :" - -#: core/templates/core/user_detail.jinja:5 -#, python-format -msgid "%(user_name)s's profile" -msgstr "Profil de %(user_name)s" - -#: core/templates/core/user_detail.jinja:33 -msgid "Option: " -msgstr "Filière : " - -#: core/templates/core/user_detail.jinja:68 -msgid "Not subscribed" -msgstr "Non cotisant" - -#: core/templates/core/user_detail.jinja:70 -#: subscription/templates/subscription/subscription.jinja:4 -#: subscription/templates/subscription/subscription.jinja:8 -msgid "New subscription" -msgstr "Nouvelle cotisation" - -#: core/templates/core/user_edit.jinja:4 -msgid "Edit user" -msgstr "Éditer l'utilisateur" - -#: core/templates/core/user_edit.jinja:8 -msgid "Edit user profile" -msgstr "Éditer le profil de l'utilisateur" - -#: core/templates/core/user_edit.jinja:14 -msgid "Current profile: " -msgstr "Profil actuel : " - -#: core/templates/core/user_edit.jinja:24 -msgid "Take picture" -msgstr "Prendre une photo" - -#: core/templates/core/user_edit.jinja:29 -msgid "Current avatar: " -msgstr "Avatar actuel : " - -#: core/templates/core/user_edit.jinja:30 -msgid "Avatar" -msgstr "Avatar" - -#: core/templates/core/user_edit.jinja:32 -msgid "Current scrub: " -msgstr "Blouse actuelle : " - -#: core/templates/core/user_edit.jinja:33 -msgid "Scrub" -msgstr "Blouse" - -#: core/templates/core/user_edit.jinja:37 -msgid "Username: " -msgstr "Nom d'utilisateur : " - -#: core/templates/core/user_edit.jinja:42 -msgid "Change my password" -msgstr "Changer mon mot de passe" - -#: core/templates/core/user_edit.jinja:44 -msgid "Change user password" -msgstr "Changer le mot de passe" - -#: core/templates/core/user_godfathers.jinja:5 -#, python-format -msgid "%(user_name)s's godfathers" -msgstr "Parrains de %(user_name)s" - -#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 -msgid "Godfathers" -msgstr "Parrains" - -#: core/templates/core/user_godfathers.jinja:18 -msgid "No godfathers" -msgstr "Pas de parrains" - -#: core/templates/core/user_godfathers.jinja:21 -msgid "Godchildren" -msgstr "Fillots" - -#: core/templates/core/user_godfathers.jinja:29 -msgid "No godchildren" -msgstr "Pas de fillots" - -#: core/templates/core/user_group.jinja:4 -#, python-format -msgid "Edit user groups for %(user_name)s" -msgstr "Éditer les groupes pour %(user_name)s" - -#: core/templates/core/user_list.jinja:4 core/templates/core/user_list.jinja:8 -msgid "User list" -msgstr "Liste d'utilisateurs" - -#: core/templates/core/user_stats.jinja:4 -#, python-format -msgid "%(user_name)s's stats" -msgstr "Stats de %(user_name)s" - -#: core/templates/core/user_stats.jinja:9 -msgid "Permanencies" -msgstr "Permanences" - -#: core/templates/core/user_stats.jinja:17 -msgid "Buyings" -msgstr "Achats" - -#: core/templates/core/user_stats.jinja:23 -msgid "Product top 10" -msgstr "Top 10 produits" - -#: core/templates/core/user_tools.jinja:4 -#, python-format -msgid "%(user_name)s's tools" -msgstr "Outils de %(user_name)s" - -#: core/templates/core/user_tools.jinja:8 -msgid "User Tools" -msgstr "Outils utilisateurs" - -#: core/templates/core/user_tools.jinja:11 -msgid "Sith management" -msgstr "Gestion de Sith" - -#: core/templates/core/user_tools.jinja:14 core/views/user.py:159 -msgid "Groups" -msgstr "Groupes" - -#: core/templates/core/user_tools.jinja:15 -#: rootplace/templates/rootplace/merge.jinja:4 -msgid "Merge users" -msgstr "Fusionner deux utilisateurs" - -#: core/templates/core/user_tools.jinja:18 -msgid "Subscriptions" -msgstr "Cotisations" - -#: core/templates/core/user_tools.jinja:24 counter/views.py:454 -#: counter/views.py:603 -msgid "Counters" -msgstr "Comptoirs" - -#: core/templates/core/user_tools.jinja:27 -msgid "General management" -msgstr "Gestion générale" - -#: core/templates/core/user_tools.jinja:28 -msgid "General counters management" -msgstr "Gestion générale des comptoirs" - -#: core/templates/core/user_tools.jinja:29 -msgid "Products management" -msgstr "Gestion des produits" - -#: core/templates/core/user_tools.jinja:30 -msgid "Product types management" -msgstr "Gestion des types de produit" - -#: core/templates/core/user_tools.jinja:31 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:474 -msgid "Cash register summaries" -msgstr "Relevés de caisse" - -#: core/templates/core/user_tools.jinja:37 core/views/user.py:169 -#: counter/templates/counter/counter_list.jinja:18 -#: counter/templates/counter/counter_list.jinja:33 -#: counter/templates/counter/counter_list.jinja:54 -msgid "Stats" -msgstr "Stats" - -#: core/templates/core/user_tools.jinja:46 -msgid "General accounting" -msgstr "Comptabilité générale" - -#: core/templates/core/user_tools.jinja:55 -msgid "Club account: " -msgstr "Compte club : " - -#: core/views/files.py:46 -msgid "Add a new folder" -msgstr "Ajouter un nouveau dossier" - -#: core/views/files.py:57 -#, python-format -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:66 core/views/forms.py:181 core/views/forms.py:185 -#, 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:59 core/views/forms.py:62 -msgid "Choose file" -msgstr "Choisir un fichier" - -#: core/views/forms.py:73 core/views/forms.py:76 -msgid "Choose user" -msgstr "Choisir un utilisateur" - -#: core/views/forms.py:98 -msgid "Username, email, or account number" -msgstr "Nom d'utilisateur, email, ou numéro de compte AE" - -#: core/views/forms.py:140 -msgid "" -"Profile: you need to be visible on the picture, in order to be recognized (e." -"g. by the barmen)" -msgstr "" -"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " -"(par exemple par les barmen)" - -#: core/views/forms.py:141 -msgid "Avatar: used on the forum" -msgstr "Avatar : utilisé sur le forum" - -#: core/views/forms.py:142 -msgid "Scrub: let other know how your scrub looks like!" -msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" - -#: core/views/forms.py:186 -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" - -#: core/views/forms.py:203 -msgid "Godfather" -msgstr "Parrain" - -#: core/views/forms.py:203 -msgid "Godchild" -msgstr "Fillot" - -#: core/views/user.py:298 -msgid "User already has a profile picture" -msgstr "L'utilisateur a déjà une photo de profil" - -#: counter/models.py:28 -msgid "account id" -msgstr "numéro de compte" - -#: counter/models.py:32 -msgid "customer" -msgstr "client" - -#: counter/models.py:33 -msgid "customers" -msgstr "clients" - -#: counter/models.py:48 counter/templates/counter/counter_click.jinja:48 -#: counter/templates/counter/counter_click.jinja:82 -msgid "Not enough money" -msgstr "Solde insuffisant" - -#: counter/models.py:76 counter/models.py:98 -msgid "product type" -msgstr "type du produit" - -#: counter/models.py:101 -msgid "purchase price" -msgstr "prix d'achat" - -#: counter/models.py:102 -msgid "selling price" -msgstr "prix de vente" - -#: counter/models.py:103 -msgid "special selling price" -msgstr "prix de vente spécial" - -#: counter/models.py:104 -msgid "icon" -msgstr "icône" - -#: counter/models.py:106 -msgid "limit age" -msgstr "âge limite" - -#: counter/models.py:107 -msgid "tray price" -msgstr "prix plateau" - -#: counter/models.py:108 -msgid "parent product" -msgstr "produit parent" - -#: counter/models.py:110 -msgid "buying groups" -msgstr "groupe d'achat" - -#: counter/models.py:111 -msgid "archived" -msgstr "archivé" - -#: counter/models.py:114 counter/models.py:486 -msgid "product" -msgstr "produit" - -#: counter/models.py:133 -msgid "products" -msgstr "produits" - -#: counter/models.py:134 -msgid "counter type" -msgstr "type de comptoir" - -#: counter/models.py:136 -msgid "Bar" -msgstr "Bar" - -#: counter/models.py:136 -msgid "Office" -msgstr "Bureau" - -#: counter/models.py:136 counter/templates/counter/counter_list.jinja:11 -#: eboutic/templates/eboutic/eboutic_main.jinja:4 -#: 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:290 sith/settings.py:298 -msgid "Eboutic" -msgstr "Eboutic" - -#: counter/models.py:137 -msgid "sellers" -msgstr "vendeurs" - -#: counter/models.py:140 launderette/models.py:125 -msgid "token" -msgstr "jeton" - -#: counter/models.py:143 counter/models.py:387 counter/models.py:404 -#: launderette/models.py:16 stock/models.py:12 -msgid "counter" -msgstr "comptoir" - -#: counter/models.py:247 -msgid "bank" -msgstr "banque" - -#: counter/models.py:249 counter/models.py:290 -msgid "is validated" -msgstr "est validé" - -#: counter/models.py:252 -msgid "refilling" -msgstr "rechargement" - -#: counter/models.py:283 eboutic/models.py:103 -msgid "unit price" -msgstr "prix unitaire" - -#: counter/models.py:284 counter/models.py:476 eboutic/models.py:104 -msgid "quantity" -msgstr "quantité" - -#: counter/models.py:289 -msgid "Sith account" -msgstr "Compte utilisateur" - -#: counter/models.py:289 sith/settings.py:283 sith/settings.py:288 -#: sith/settings.py:310 -msgid "Credit card" -msgstr "Carte bancaire" - -#: counter/models.py:293 -msgid "selling" -msgstr "vente" - -#: counter/models.py:312 -msgid "Unknown event" -msgstr "Événement inconnu" - -#: counter/models.py:313 -#, python-format -msgid "Eticket bought for the event %(event)s" -msgstr "Eticket acheté pour l'événement %(event)s" - -#: counter/models.py:315 counter/models.py:327 -#, python-format -msgid "" -"You bought an eticket for the event %(event)s.\n" -"You can download it on this page %(url)s." -msgstr "" -"Vous avez acheté un Eticket pour l'événement %(event)s.\n" -"Vous pouvez le télécharger sur cette page: %(url)s" - -#: counter/models.py:390 -msgid "last activity date" -msgstr "dernière activité" - -#: counter/models.py:393 -msgid "permanency" -msgstr "permanence" - -#: counter/models.py:407 -msgid "emptied" -msgstr "coffre vidée" - -#: counter/models.py:410 -msgid "cash register summary" -msgstr "relevé de caisse" - -#: counter/models.py:474 -msgid "cash summary" -msgstr "relevé" - -#: counter/models.py:475 -msgid "value" -msgstr "valeur" - -#: counter/models.py:477 -msgid "check" -msgstr "chèque" - -#: counter/models.py:480 -msgid "cash register summary item" -msgstr "élément de relevé de caisse" - -#: counter/models.py:487 -msgid "banner" -msgstr "bannière" - -#: counter/models.py:488 -msgid "event date" -msgstr "date de l'événement" - -#: counter/models.py:489 -msgid "event title" -msgstr "titre de l'événement" - -#: counter/models.py:490 -msgid "secret" -msgstr "secret" - -#: counter/templates/counter/activity.jinja:5 -#: counter/templates/counter/activity.jinja:9 -#, python-format -msgid "%(counter_name)s activity" -msgstr "Activité sur %(counter_name)s" - -#: counter/templates/counter/activity.jinja:11 -msgid "Barmen list" -msgstr "Barmans" - -#: counter/templates/counter/activity.jinja:19 -msgid "Legend" -msgstr "Légende" - -#: counter/templates/counter/activity.jinja:20 -msgid "counter is open, there's at least one barman connected" -msgstr "Le comptoir est ouvert, et il y a au moins un barman connecté" - -#: counter/templates/counter/activity.jinja:22 -#, python-format -msgid "" -"counter is open but not active, the last sale was done at least %(minutes)s " -"minutes ago " -msgstr "" -"Le comptoir est ouvert, mais inactif. La dernière vente a eu lieu il y a " -"%(minutes)s minutes." - -#: counter/templates/counter/activity.jinja:24 -msgid "counter is not open : no one is connected" -msgstr "Le comptoir est fermé" - -#: counter/templates/counter/cash_register_summary.jinja:8 -msgid "Make a cash register summary" -msgstr "Faire un relevé de caisse" - -#: counter/templates/counter/cash_summary_list.jinja:5 -#: counter/templates/counter/cash_summary_list.jinja:10 -msgid "Cash register summary list" -msgstr "Liste des relevés de caisse" - -#: counter/templates/counter/cash_summary_list.jinja:11 -msgid "Theoric sums" -msgstr "Sommes théoriques" - -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:717 -msgid "Emptied" -msgstr "Coffre vidé" - -#: counter/templates/counter/cash_summary_list.jinja:48 -msgid "yes" -msgstr "oui" - -#: counter/templates/counter/cash_summary_list.jinja:59 -msgid "There is no cash register summary in this website." -msgstr "Il n'y a pas de relevé de caisse dans ce site web." - -#: counter/templates/counter/counter_click.jinja:35 -#: launderette/templates/launderette/launderette_admin.jinja:8 -msgid "Selling" -msgstr "Vente" - -#: counter/templates/counter/counter_click.jinja:39 -#: counter/templates/counter/counter_click.jinja:73 -msgid "Too young for that product" -msgstr "Trop jeune pour ce produit" - -#: counter/templates/counter/counter_click.jinja:42 -#: counter/templates/counter/counter_click.jinja:76 -msgid "Not allowed for that product" -msgstr "Non autorisé pour ce produit" - -#: counter/templates/counter/counter_click.jinja:45 -#: counter/templates/counter/counter_click.jinja:79 -msgid "No date of birth provided" -msgstr "Pas de date de naissance renseigné" - -#: counter/templates/counter/counter_click.jinja:55 -#: counter/templates/counter/counter_click.jinja:103 -#: counter/templates/counter/invoices_call.jinja:16 -#: launderette/templates/launderette/launderette_admin.jinja:35 -#: launderette/templates/launderette/launderette_click.jinja:13 -msgid "Go" -msgstr "Valider" - -#: counter/templates/counter/counter_click.jinja:57 -#: eboutic/templates/eboutic/eboutic_main.jinja:27 -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 -msgid "Basket: " -msgstr "Panier : " - -#: counter/templates/counter/counter_click.jinja:88 -msgid "Finish" -msgstr "Terminer" - -#: counter/templates/counter/counter_click.jinja:97 -msgid "Refilling" -msgstr "Rechargement" - -#: counter/templates/counter/counter_list.jinja:4 -#: counter/templates/counter/counter_list.jinja:10 -msgid "Counter admin list" -msgstr "Liste des comptoirs" - -#: counter/templates/counter/counter_list.jinja:8 -msgid "New counter" -msgstr "Nouveau comptoir" - -#: counter/templates/counter/counter_list.jinja:26 -msgid "Bars" -msgstr "Bars" - -#: counter/templates/counter/counter_list.jinja:38 -msgid "Create new stock" -msgstr "Créer un stock" - -#: counter/templates/counter/counter_list.jinja:47 -msgid "Offices" -msgstr "Bureaux" - -#: counter/templates/counter/counter_list.jinja:63 -msgid "There is no counters in this website." -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:16 -#: launderette/templates/launderette/launderette_click.jinja:8 -#, python-format -msgid "%(counter_name)s counter" -msgstr "Comptoir %(counter_name)s" - -#: counter/templates/counter/counter_main.jinja:21 -msgid "Last selling: " -msgstr "Dernière vente : " - -#: counter/templates/counter/counter_main.jinja:22 -msgid "Client: " -msgstr "Client : " - -#: counter/templates/counter/counter_main.jinja:22 -msgid "New amount: " -msgstr "Nouveau montant : " - -#: counter/templates/counter/counter_main.jinja:31 -msgid "Enter client code:" -msgstr "Entrez un code client : " - -#: counter/templates/counter/counter_main.jinja:36 -msgid "validate" -msgstr "valider" - -#: counter/templates/counter/counter_main.jinja:39 -msgid "Please, login" -msgstr "Merci de vous identifier" - -#: counter/templates/counter/counter_main.jinja:44 -msgid "Barman: " -msgstr "Barman : " - -#: counter/templates/counter/eticket_list.jinja:4 -#: counter/templates/counter/eticket_list.jinja:10 -msgid "Eticket list" -msgstr "Liste des etickets" - -#: counter/templates/counter/eticket_list.jinja:8 -msgid "New eticket" -msgstr "Nouveau eticket" - -#: counter/templates/counter/eticket_list.jinja:17 -msgid "There is no eticket in this website." -msgstr "Il n'y a pas de eticket sur ce site web." - -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:479 -msgid "Invoices call" -msgstr "Appels à facture" - -#: counter/templates/counter/invoices_call.jinja:8 -#, python-format -msgid "Invoices call for %(date)s" -msgstr "Appels à facture pour %(date)s" - -#: counter/templates/counter/invoices_call.jinja:9 -msgid "Choose another month: " -msgstr "Choisir un autre mois : " - -#: counter/templates/counter/invoices_call.jinja:21 -msgid "Sum" -msgstr "Somme" - -#: counter/templates/counter/last_ops.jinja:5 -#: counter/templates/counter/last_ops.jinja:9 -#, python-format -msgid "%(counter_name)s last operations" -msgstr "Dernières opérations sur %(counter_name)s" - -#: counter/templates/counter/product_list.jinja:4 -#: counter/templates/counter/product_list.jinja:12 -msgid "Product list" -msgstr "Liste des produits" - -#: counter/templates/counter/product_list.jinja:9 -msgid "New product" -msgstr "Nouveau produit" - -#: counter/templates/counter/product_list.jinja:21 -msgid "Uncategorized" -msgstr "Sans catégorie" - -#: counter/templates/counter/product_list.jinja:28 -msgid "There is no products in this website." -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:10 -msgid "Product type list" -msgstr "Liste des types de produit" - -#: counter/templates/counter/producttype_list.jinja:8 -msgid "New product type" -msgstr "Nouveau type de produit" - -#: counter/templates/counter/producttype_list.jinja:17 -msgid "There is no product types in this website." -msgstr "Il n'y a pas de types de produit dans ce site web." - -#: counter/templates/counter/stats.jinja:5 -#: counter/templates/counter/stats.jinja:9 -#, python-format -msgid "%(counter_name)s stats" -msgstr "Stats sur %(counter_name)s" - -#: counter/templates/counter/stats.jinja:10 -#, python-format -msgid "Top 100 %(counter_name)s" -msgstr "Top 100 %(counter_name)s" - -#: counter/templates/counter/stats.jinja:16 -msgid "Promo" -msgstr "Promo" - -#: counter/templates/counter/stats.jinja:19 -msgid "Percentage" -msgstr "Pourcentage" - -#: counter/views.py:55 -msgid "User not found" -msgstr "Utilisateur non trouvé" - -#: counter/views.py:84 -msgid "Cash summary" -msgstr "Relevé de caisse" - -#: counter/views.py:89 -msgid "Last operations" -msgstr "Dernières opérations" - -#: counter/views.py:123 -msgid "Bad credentials" -msgstr "Mauvais identifiants" - -#: counter/views.py:125 -msgid "User is not barman" -msgstr "L'utilisateur n'est pas barman." - -#: counter/views.py:129 -msgid "Bad location, someone is already logged in somewhere else" -msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" - -#: counter/views.py:319 -msgid "END" -msgstr "FIN" - -#: counter/views.py:321 -msgid "CAN" -msgstr "ANN" - -#: counter/views.py:351 -msgid "You have not enough money to buy all the basket" -msgstr "Vous n'avez pas assez d'argent pour acheter le panier" - -#: counter/views.py:444 -msgid "Counter administration" -msgstr "Administration des comptoirs" - -#: counter/views.py:449 -msgid "Stocks" -msgstr "" - -#: counter/views.py:459 -msgid "Products" -msgstr "Produits" - -#: counter/views.py:464 -msgid "Archived products" -msgstr "Produits archivés" - -#: counter/views.py:469 -msgid "Product types" -msgstr "Types de produit" - -#: counter/views.py:600 -msgid "Parent product" -msgstr "Produit parent" - -#: counter/views.py:601 -msgid "Buying groups" -msgstr "Groupes d'achat" - -#: counter/views.py:696 -msgid "10 cents" -msgstr "10 centimes" - -#: counter/views.py:697 -msgid "20 cents" -msgstr "20 centimes" - -#: counter/views.py:698 -msgid "50 cents" -msgstr "50 centimes" - -#: counter/views.py:699 -msgid "1 euro" -msgstr "1 €" - -#: counter/views.py:700 -msgid "2 euros" -msgstr "2 €" - -#: counter/views.py:701 -msgid "5 euros" -msgstr "5 €" - -#: counter/views.py:702 -msgid "10 euros" -msgstr "10 €" - -#: counter/views.py:703 -msgid "20 euros" -msgstr "20 €" - -#: counter/views.py:704 -msgid "50 euros" -msgstr "50 €" - -#: counter/views.py:705 -msgid "100 euros" -msgstr "100 €" - -#: counter/views.py:706 counter/views.py:708 counter/views.py:710 -#: counter/views.py:712 counter/views.py:714 -msgid "Check amount" -msgstr "Montant du chèque" - -#: counter/views.py:707 counter/views.py:709 counter/views.py:711 -#: counter/views.py:713 counter/views.py:715 -msgid "Check quantity" -msgstr "Nombre de chèque" - -#: counter/views.py:1066 -msgid "people(s)" -msgstr "personne(s)" - -#: eboutic/models.py:49 -msgid "validated" -msgstr "validé" - -#: eboutic/models.py:62 -msgid "Invoice already validated" -msgstr "Facture déjà validée" - -#: eboutic/models.py:100 -msgid "product id" -msgstr "ID du produit" - -#: eboutic/models.py:101 -msgid "product name" -msgstr "nom du produit" - -#: eboutic/models.py:102 -msgid "product type id" -msgstr "id du type du produit" - -#: eboutic/models.py:113 -msgid "basket" -msgstr "panier" - -#: eboutic/templates/eboutic/eboutic_main.jinja:37 -msgid "Proceed to command" -msgstr "Procéder à la commande" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4 -msgid "Basket state" -msgstr "État du panier" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:35 -msgid "Pay with credit card" -msgstr "Payer avec une carte bancaire" - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:38 -msgid "" -"AE account payment disabled because your basket contains refilling items." -msgstr "" -"Paiement par compte AE désactivé parce que votre panier contient des bons de " -"rechargement." - -#: eboutic/templates/eboutic/eboutic_makecommand.jinja:43 -msgid "Pay with Sith account" -msgstr "Payer avec un compte AE" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:8 -msgid "Payment failed" -msgstr "Le paiement a échoué" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:10 -msgid "Payment successful" -msgstr "Le paiement a été effectué" - -#: eboutic/templates/eboutic/eboutic_payment_result.jinja:12 -msgid "Return to eboutic" -msgstr "Retourner à l'eboutic" - -#: eboutic/views.py:141 -msgid "You do not have enough money to buy the basket" -msgstr "Vous n'avez pas assez d'argent pour acheter le panier" - -#: launderette/models.py:19 -#: launderette/templates/launderette/launderette_book.jinja:5 -#: launderette/templates/launderette/launderette_book_choose.jinja:4 -#: launderette/templates/launderette/launderette_main.jinja:4 -msgid "Launderette" -msgstr "Laverie" - -#: launderette/models.py:61 launderette/models.py:86 -msgid "launderette" -msgstr "laverie" - -#: launderette/models.py:62 launderette/models.py:87 launderette/models.py:123 -#: stock/models.py:27 -msgid "type" -msgstr "type" - -#: launderette/models.py:63 -msgid "is working" -msgstr "fonctionne" - -#: launderette/models.py:66 -msgid "Machine" -msgstr "Machine" - -#: launderette/models.py:88 -msgid "borrow date" -msgstr "date d'emprunt" - -#: launderette/models.py:92 -msgid "Token" -msgstr "Jeton" - -#: launderette/models.py:98 -msgid "Token name can not be blank" -msgstr "Le nom du jeton ne peut pas être vide" - -#: launderette/models.py:124 -msgid "machine" -msgstr "machine" - -#: launderette/templates/launderette/launderette_admin.jinja:4 -msgid "Launderette admin" -msgstr "Gestion de la laverie" - -#: launderette/templates/launderette/launderette_admin.jinja:9 -msgid "Sell" -msgstr "Vendre" - -#: launderette/templates/launderette/launderette_admin.jinja:11 -msgid "Machines" -msgstr "Machines" - -#: launderette/templates/launderette/launderette_admin.jinja:12 -msgid "New machine" -msgstr "Nouvelle machine" - -#: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:148 -msgid "Type" -msgstr "Type" - -#: launderette/templates/launderette/launderette_book.jinja:12 -msgid "Choose" -msgstr "Choisir" - -#: launderette/templates/launderette/launderette_book.jinja:23 -msgid "Washing and drying" -msgstr "Lavage et séchage" - -#: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:430 -msgid "Washing" -msgstr "Lavage" - -#: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:430 -msgid "Drying" -msgstr "Séchage" - -#: launderette/templates/launderette/launderette_list.jinja:4 -#: launderette/templates/launderette/launderette_list.jinja:12 -msgid "Launderette admin list" -msgstr "Liste des laveries" - -#: launderette/templates/launderette/launderette_list.jinja:9 -msgid "New launderette" -msgstr "Nouvelle laverie" - -#: launderette/templates/launderette/launderette_list.jinja:20 -msgid "There is no launderette in this website." -msgstr "Il n'y a pas de laverie dans ce site web." - -#: launderette/templates/launderette/launderette_main.jinja:9 -msgid "Edit presentation page" -msgstr "Éditer la page de présentation" - -#: launderette/templates/launderette/launderette_main.jinja:12 -msgid "Book launderette slot" -msgstr "Réserver un créneau de laverie" - -#: launderette/views.py:147 -msgid "Action" -msgstr "Action" - -#: launderette/views.py:150 -msgid "Tokens, separated by spaces" -msgstr "Jetons, séparés par des espaces" - -#: launderette/views.py:165 launderette/views.py:179 -#, python-format -msgid "Token %(token_name)s does not exists" -msgstr "Le jeton %(token_name)s n'existe pas" - -#: launderette/views.py:173 -#, python-format -msgid "Token %(token_name)s already exists" -msgstr "Un jeton %(token_name)s existe déjà" - -#: launderette/views.py:229 -msgid "User has booked no slot" -msgstr "L'utilisateur n'a pas réservé de créneau" - -#: launderette/views.py:319 -msgid "Token not found" -msgstr "Jeton non trouvé" - -#: rootplace/templates/rootplace/merge.jinja:8 -msgid "Merge two users" -msgstr "Fusionner deux utilisateurs" - -#: rootplace/templates/rootplace/merge.jinja:12 -msgid "Merge" -msgstr "Fusion" - -#: rootplace/views.py:66 -msgid "User that will be kept" -msgstr "Utilisateur qui sera conservé" - -#: rootplace/views.py:67 -msgid "User that will be deleted" -msgstr "Utilisateur qui sera supprimé" - -#: sith/settings.py:166 -msgid "English" -msgstr "Anglais" - -#: sith/settings.py:167 -msgid "French" -msgstr "Français" - -#: sith/settings.py:280 sith/settings.py:287 sith/settings.py:308 -msgid "Check" -msgstr "Chèque" - -#: sith/settings.py:281 sith/settings.py:289 sith/settings.py:309 -msgid "Cash" -msgstr "Espèces" - -#: sith/settings.py:282 -msgid "Transfert" -msgstr "Virement" - -#: sith/settings.py:295 -msgid "Belfort" -msgstr "Belfort" - -#: sith/settings.py:296 -msgid "Sevenans" -msgstr "Sevenans" - -#: sith/settings.py:297 -msgid "Montbéliard" -msgstr "Montbéliard" - -#: sith/settings.py:337 -msgid "One semester" -msgstr "Un semestre, 15 €" - -#: sith/settings.py:342 -msgid "Two semesters" -msgstr "Deux semestres, 28 €" - -#: sith/settings.py:347 -msgid "Common core cursus" -msgstr "Cursus tronc commun, 45 €" - -#: sith/settings.py:352 -msgid "Branch cursus" -msgstr "Cursus branche, 45 €" - -#: sith/settings.py:357 -msgid "Alternating cursus" -msgstr "Cursus alternant, 30 €" - -#: sith/settings.py:362 -msgid "Honorary member" -msgstr "Membre honoraire, 0 €" - -#: sith/settings.py:367 -msgid "Assidu member" -msgstr "Membre d'Assidu, 0 €" - -#: sith/settings.py:372 -msgid "Amicale/DOCEO member" -msgstr "Membre de l'Amicale/DOCEO, 0 €" - -#: sith/settings.py:377 -msgid "UT network member" -msgstr "Cotisant du réseau UT, 0 €" - -#: sith/settings.py:382 -msgid "CROUS member" -msgstr "Membres du CROUS, 0 €" - -#: sith/settings.py:387 -msgid "Sbarro/ESTA member" -msgstr "Membre de Sbarro ou de l'ESTA, 15 €" - -#: sith/settings.py:395 -msgid "President" -msgstr "Président" - -#: sith/settings.py:396 -msgid "Vice-President" -msgstr "Vice-Président" - -#: sith/settings.py:397 -msgid "Treasurer" -msgstr "Trésorier" - -#: sith/settings.py:398 -msgid "Communication supervisor" -msgstr "Responsable com" - -#: sith/settings.py:399 -msgid "Secretary" -msgstr "Secrétaire" - -#: sith/settings.py:400 -msgid "IT supervisor" -msgstr "Responsable info" - -#: sith/settings.py:401 -msgid "Board member" -msgstr "Membre du bureau" - -#: sith/settings.py:402 -msgid "Active member" -msgstr "Membre actif" - -#: sith/settings.py:403 -msgid "Curious" -msgstr "Curieux" - -#: stock/models.py:25 -msgid "unit quantity" -msgstr "quantité unitaire" - -#: stock/models.py:26 -msgid "effective quantity" -msgstr "quantité effective" - -#: stock/templates/stock/stock_item_list.jinja:9 -msgid "New item" -msgstr "Nouvel élément" - -#: stock/templates/stock/stock_item_list.jinja:21 -msgid "Others" -msgstr "Autres" - -#: stock/templates/stock/stock_item_list.jinja:28 -msgid "There is no items in this stock." -msgstr "Il n'y a pas d'éléments dans ce comptoir." - -#: stock/templates/stock/stock_list.jinja:4 -#: stock/templates/stock/stock_list.jinja:9 -msgid "Stock list" -msgstr "Liste des stocks" - -#: stock/templates/stock/stock_list.jinja:21 -msgid "There is no stocks in this website." -msgstr "Il n'y a pas de stock sur ce site web." - -#: subscription/models.py:16 -msgid "Bad subscription type" -msgstr "Mauvais type de cotisation" - -#: subscription/models.py:20 -msgid "Bad payment method" -msgstr "Mauvais type de paiement" - -#: subscription/models.py:52 -msgid "subscription type" -msgstr "type d'inscription" - -#: subscription/models.py:55 -msgid "subscription start" -msgstr "début de la cotisation" - -#: subscription/models.py:56 -msgid "subscription end" -msgstr "fin de la cotisation" - -#: subscription/models.py:59 -msgid "location" -msgstr "lieu" - -#: subscription/models.py:68 -msgid "You can not subscribe many time for the same period" -msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" - -#: subscription/models.py:72 -msgid "Subscription error" -msgstr "Erreur de cotisation" - -#: subscription/views.py:54 -msgid "A user with that email address already exists" -msgstr "Un utilisateur avec cette adresse email existe déjà" - -#: subscription/views.py:70 -msgid "You must either choose an existing user or create a new one properly" -msgstr "" -"Vous devez soit choisir un utilisateur existant, ou en créer un proprement." diff --git a/stock/templates/stock/shopping_list_quantity.jinja b/stock/templates/stock/shopping_list_quantity.jinja new file mode 100644 index 00000000..45a76d97 --- /dev/null +++ b/stock/templates/stock/shopping_list_quantity.jinja @@ -0,0 +1,16 @@ +{% extends "core/base.jinja" %} + +{% block title %} +{% trans s = stock %}{{ s }}'s quantity to buy{% endtrans %} +{% endblock %} + +{% block content %} +

    {% trans s = stock %}{{ s }}'s quantity to buy{% endtrans %}

    +
    +
    + {% csrf_token %} + {{ form.as_p() }} +

    +
    +
    +{% endblock %} diff --git a/stock/templates/stock/stock_item_list.jinja b/stock/templates/stock/stock_item_list.jinja index a5370389..66639f71 100644 --- a/stock/templates/stock/stock_item_list.jinja +++ b/stock/templates/stock/stock_item_list.jinja @@ -1,4 +1,5 @@ {% extends "core/base.jinja" %} +{% from 'core/macros.jinja' import user_profile_link %} {% block title %} {{ stock }} @@ -7,7 +8,7 @@ {% block content %} {% if current_tab == "stocks" %}

    {% trans %}New item{% endtrans %}

    -
    {% trans %}Shopping list{% endtrans %}
    +
    {% trans %}Shopping lists{% endtrans %}
    {% endif %} {% if stock %}

    {{ stock }}

    diff --git a/stock/templates/stock/stock_list.jinja b/stock/templates/stock/stock_list.jinja index 6b425128..b803094a 100644 --- a/stock/templates/stock/stock_list.jinja +++ b/stock/templates/stock/stock_list.jinja @@ -11,7 +11,7 @@ {% for s in stock_list.order_by('name') %}
  • {% if user.can_edit(s) %} - {{s}} + {{ s }} - Edit - {% trans %}Shopping lists{% endtrans %} {% endif %} diff --git a/stock/templates/stock/stock_shopping_list.jinja b/stock/templates/stock/stock_shopping_list.jinja index febed4bc..eaafe6c7 100644 --- a/stock/templates/stock/stock_shopping_list.jinja +++ b/stock/templates/stock/stock_shopping_list.jinja @@ -6,11 +6,11 @@ Shopping list for {{ stock }} {% block content %} {% if current_tab == "stocks" %} - {% trans %}Do shopping{% endtrans %} + {% trans %}Create shopping list{% endtrans %} {% endif %}

    {% trans s=stock %}Shopping lists history for {{ s }}{% endtrans %}

    -

    To do

    +

    {% trans %}To do{% endtrans %}

    @@ -36,7 +36,7 @@ Shopping list for {{ stock }}
    -

    Done

    +

    {% trans %}Done{% endtrans %}

    @@ -52,7 +52,7 @@ Shopping list for {{ stock }} - {% for s in shoppinglist_list.filter(todo=True).filter(stock_owner=stock).order_by('-date') %} + {% for s in stock.shopping_lists.filter(todo=True).filter(stock_owner=stock).order_by('-date').all() %} - + @@ -57,11 +57,11 @@ Shopping list for {{ stock }} - {% for s in shoppinglist_list.filter(todo=False).filter(stock_owner=stock).order_by('-date') %} + {% for s in stock.shopping_lists.filter(todo=False).filter(stock_owner=stock).order_by('-date').all() %} - + diff --git a/stock/views.py b/stock/views.py index 96fa90ca..2a31037b 100644 --- a/stock/views.py +++ b/stock/views.py @@ -1,16 +1,21 @@ +from collections import OrderedDict +from datetime import datetime, timedelta + +from django.utils import timezone from django.shortcuts import render, get_object_or_404 from django.views.generic import ListView, DetailView, RedirectView, TemplateView -from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin +from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin, BaseFormView from django.utils.translation import ugettext_lazy as _ from django import forms from django.http import HttpResponseRedirect, HttpResponse from django.forms.models import modelform_factory from django.core.urlresolvers import reverse_lazy, reverse +from django.db import transaction, DataError from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin from counter.views import CounterAdminTabsMixin, CounterTabsMixin from counter.models import Counter, ProductType -from stock.models import Stock, StockItem, ShoppingList +from stock.models import Stock, StockItem, ShoppingList, ShoppingListItem class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): @@ -76,7 +81,7 @@ class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): An edit view for a stock item """ model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'type', 'stock_owner']) + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) pk_url_kwarg = "item_id" template_name = 'core/edit.jinja' current_tab = "stocks" @@ -104,7 +109,7 @@ class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): A create view for a new StockItem """ model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'type', 'stock_owner']) + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) template_name = 'core/create.jinja' pk_url_kwarg = "stock_id" current_tab = "stocks" @@ -144,13 +149,21 @@ class StockItemQuantityForm(forms.BaseForm): shopping_list.stock_owner = self.stock shopping_list.save() for k,t in self.cleaned_data.items(): - if int(t) > 0 : - item_id = int(k[5:]) - item = StockItem.objects.filter(id=item_id).first() - item.tobuy_quantity = t - item.shopping_lists.add(shopping_list) - item.save() - + if k == 'name': + shopping_list.name = t + shopping_list.save() + elif k == "comment": + shopping_list.comment = t + shopping_list.save() + else: + if t > 0 : + item_id = int(k[5:]) + item = StockItem.objects.filter(id=item_id).first() + shoppinglist_item = ShoppingListItem(stockitem_owner=item, name=item.name, type=item.type, tobuy_quantity=t) + shoppinglist_item.save() + shoppinglist_item.shopping_lists.add(shopping_list) + shoppinglist_item.save() + return self.cleaned_data class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): @@ -165,13 +178,15 @@ class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailV def get_form_class(self): fields = OrderedDict() kwargs = {} + fields['name'] = forms.CharField(max_length=30, required=True, label='Shopping list name') for t in ProductType.objects.order_by('name').all(): for i in self.stock.items.filter(type=t).order_by('name').all(): if i.effective_quantity <= i.minimal_quantity: field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), + fields[field_name] = forms.IntegerField(required=True, label=str(i), help_text=str(i.effective_quantity)+" left") - kwargs[field_name] = i.effective_quantity + fields['comment'] = forms.CharField(widget=forms.Textarea(), required=False, + initial="Add here, items to buy that are not reference as a product (example : sponge, knife, mugs ...)") kwargs['stock_id'] = self.stock.id kwargs['base_fields'] = fields return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) @@ -272,11 +287,18 @@ class StockUpdateAfterShopppingForm(forms.BaseForm): with transaction.atomic(): self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() for k,t in self.cleaned_data.items(): - item_id = int(k[5:]) + shoppinglist_item_id = int(k[5:]) + #item_id = int(k[5:]) if int(t) > 0 : - item = StockItem.objects.filter(id=item_id).first() - item.effective_quantity += int(t) - item.save() + shoppinglist_item = ShoppingListItem.objects.filter(id=shoppinglist_item_id).first() + shoppinglist_item.bought_quantity = int(t) + shoppinglist_item.save() + shoppinglist_item.stockitem_owner.effective_quantity += int(t) + shoppinglist_item.stockitem_owner.save() + #item = StockItem.objects.filter(id=item_id).first() + #item.bought_quantity = int(t) + #item.effective_quantity += int(t) + #item.save() self.shoppinglist.todo = False self.shoppinglist.save() return self.cleaned_data @@ -294,7 +316,7 @@ class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin, fields = OrderedDict() kwargs = {} for t in ProductType.objects.order_by('name').all(): - for i in self.shoppinglist.items_to_buy.filter(type=t).order_by('name').all(): + for i in self.shoppinglist.shopping_items_to_buy.filter(type=t).order_by('name').all(): field_name = "item-%s" % (str(i.id)) fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), help_text=str(i.tobuy_quantity) + " asked") @@ -341,9 +363,9 @@ class StockTakeItemsForm(forms.BaseForm): with transaction.atomic(): for k,t in self.cleaned_data.items(): item_id = int(k[5:]) - if int(t) > 0 : + if t > 0 : item = StockItem.objects.filter(id=item_id).first() - item.effective_quantity -= int(t) + item.effective_quantity -= t item.save() return self.cleaned_data @@ -363,7 +385,7 @@ class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, Bas for t in ProductType.objects.order_by('name').all(): for i in self.stock.items.filter(type=t).order_by('name').all(): field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i)) + fields[field_name] = forms.IntegerField(required=False, label=str(i), help_text="("+ str(i.effective_quantity) + " left)") kwargs[field_name] = i.effective_quantity kwargs['stock_id'] = self.stock.id kwargs['counter_id'] = self.stock.counter.id From 6f88d0cf8c08906bb6cf4ade9f3118dcafa787b5 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Sun, 8 Jan 2017 11:46:25 +0100 Subject: [PATCH 21/27] Translations update --- locale/fr/LC_MESSAGES/django.mo | Bin 37333 -> 52661 bytes locale/fr/LC_MESSAGES/django.po | 1622 ++++++++++++----- stock/models.py | 12 +- .../templates/stock/shopping_list_items.jinja | 2 +- .../templates/stock/stock_shopping_list.jinja | 2 +- stock/templates/stock/stock_take_items.jinja | 4 +- stock/views.py | 17 +- 7 files changed, 1159 insertions(+), 500 deletions(-) diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index bf842ded9f53e6cbb8fd2ad6dc6ee0aec1eb11ea..8667ce295c7e20f71cbe56639b99d3a4bc9b037c 100644 GIT binary patch literal 52661 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

    W*7+Fg5dOlmzH{$|c=SeN~ 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\n" "Language-Team: AE info \n" @@ -17,10 +17,10 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: accounting/models.py:36 accounting/models.py:58 accounting/models.py:85 -#: accounting/models.py:144 club/models.py:19 counter/models.py:71 -#: counter/models.py:96 counter/models.py:131 launderette/models.py:15 -#: launderette/models.py:60 launderette/models.py:85 stock/models.py:11 -#: stock/models.py:24 stock/models.py:45 +#: accounting/models.py:144 club/models.py:18 counter/models.py:70 +#: counter/models.py:95 counter/models.py:130 launderette/models.py:13 +#: launderette/models.py:58 launderette/models.py:83 stock/models.py:13 +#: stock/models.py:29 stock/models.py:52 stock/models.py:72 msgid "name" msgstr "nom" @@ -40,7 +40,7 @@ msgstr "code postal" msgid "country" msgstr "pays" -#: accounting/models.py:41 core/models.py:168 +#: accounting/models.py:41 core/models.py:155 msgid "phone" msgstr "téléphone" @@ -64,8 +64,8 @@ msgstr "IBAN" msgid "account number" msgstr "numero de compte" -#: accounting/models.py:61 accounting/models.py:86 club/models.py:146 -#: counter/models.py:105 counter/models.py:132 +#: accounting/models.py:61 accounting/models.py:86 club/models.py:145 +#: com/models.py:34 counter/models.py:104 counter/models.py:131 msgid "club" msgstr "club" @@ -86,12 +86,13 @@ msgstr "Compte club" msgid "%(club_account)s on %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s" -#: accounting/models.py:142 club/models.py:147 counter/models.py:388 -#: launderette/models.py:122 +#: accounting/models.py:142 club/models.py:146 counter/models.py:399 +#: election/models.py:18 launderette/models.py:120 msgid "start date" msgstr "date de début" -#: accounting/models.py:143 club/models.py:148 counter/models.py:389 +#: accounting/models.py:143 club/models.py:147 counter/models.py:400 +#: election/models.py:19 msgid "end date" msgstr "date de fin" @@ -103,8 +104,8 @@ msgstr "est fermé" msgid "club account" msgstr "compte club" -#: accounting/models.py:147 accounting/models.py:193 counter/models.py:29 -#: counter/models.py:241 +#: accounting/models.py:147 accounting/models.py:193 counter/models.py:28 +#: counter/models.py:239 msgid "amount" msgstr "montant" @@ -124,18 +125,19 @@ msgstr "numéro" msgid "journal" msgstr "classeur" -#: accounting/models.py:194 core/models.py:515 core/models.py:818 -#: counter/models.py:244 counter/models.py:287 counter/models.py:405 -#: eboutic/models.py:15 eboutic/models.py:48 stock/models.py:44 +#: accounting/models.py:194 core/models.py:517 core/models.py:862 +#: core/models.py:902 counter/models.py:242 counter/models.py:290 +#: counter/models.py:416 eboutic/models.py:15 eboutic/models.py:48 +#: stock/models.py:51 msgid "date" msgstr "date" -#: accounting/models.py:195 counter/models.py:406 +#: accounting/models.py:195 counter/models.py:417 stock/models.py:54 msgid "comment" msgstr "commentaire" -#: accounting/models.py:196 counter/models.py:245 counter/models.py:288 -#: subscription/models.py:57 +#: accounting/models.py:196 counter/models.py:243 counter/models.py:291 +#: subscription/models.py:29 msgid "payment method" msgstr "méthode de paiement" @@ -160,9 +162,9 @@ msgid "accounting type" msgstr "type comptable" #: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325 -#: accounting/models.py:348 counter/models.py:279 +#: accounting/models.py:348 counter/models.py:282 msgid "label" -msgstr "intitulé" +msgstr "étiquette" #: accounting/models.py:206 msgid "target type" @@ -174,11 +176,15 @@ msgstr "type de cible" #: core/templates/core/user_clubs.jinja:41 #: counter/templates/counter/cash_summary_list.jinja:32 #: counter/templates/counter/stats.jinja:15 +#: counter/templates/counter/stats.jinja:52 +#: counter/templates/counter/stats.jinja:77 #: launderette/templates/launderette/launderette_admin.jinja:44 msgid "User" msgstr "Utilisateur" #: accounting/models.py:207 club/templates/club/club_detail.jinja:5 +#: com/templates/com/news_admin_list.jinja:17 +#: com/templates/com/news_admin_list.jinja:51 #: counter/templates/counter/invoices_call.jinja:20 msgid "Club" msgstr "Club" @@ -191,7 +197,8 @@ msgstr "Compte" msgid "Company" msgstr "Entreprise" -#: accounting/models.py:207 sith/settings.py:305 +#: accounting/models.py:207 sith/settings.py:314 +#: stock/templates/stock/shopping_list_items.jinja:37 msgid "Other" msgstr "Autre" @@ -233,7 +240,7 @@ msgstr "" "Vous devez fournir soit un type comptable simplifié ou un type comptable " "standard" -#: accounting/models.py:294 counter/models.py:100 +#: accounting/models.py:294 counter/models.py:99 msgid "code" msgstr "code" @@ -245,11 +252,17 @@ msgstr "Un code comptable ne contient que des numéros" msgid "movement type" msgstr "type de mouvement" -#: accounting/models.py:300 accounting/views.py:388 +#: accounting/models.py:300 +#: accounting/templates/accounting/journal_statement_nature.jinja:8 +#: accounting/templates/accounting/journal_statement_person.jinja:11 +#: accounting/views.py:417 msgid "Credit" msgstr "Crédit" -#: accounting/models.py:300 accounting/views.py:388 +#: accounting/models.py:300 +#: accounting/templates/accounting/journal_statement_nature.jinja:27 +#: accounting/templates/accounting/journal_statement_person.jinja:39 +#: accounting/views.py:417 msgid "Debit" msgstr "Débit" @@ -278,7 +291,7 @@ msgstr "Liste des types comptable" #: accounting/templates/accounting/label_list.jinja:9 #: accounting/templates/accounting/operation_edit.jinja:9 #: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 -#: core/templates/core/user_tools.jinja:52 +#: core/templates/core/user_tools.jinja:54 msgid "Accounting" msgstr "Comptabilité" @@ -297,7 +310,7 @@ msgstr "Il n'y a pas de types comptable dans ce site web." #: accounting/templates/accounting/bank_account_details.jinja:4 #: accounting/templates/accounting/bank_account_details.jinja:13 -#: core/templates/core/user_tools.jinja:60 +#: core/templates/core/user_tools.jinja:63 msgid "Bank account: " msgstr "Compte en banque : " @@ -305,23 +318,28 @@ msgstr "Compte en banque : " #: accounting/templates/accounting/club_account_details.jinja:16 #: accounting/templates/accounting/label_list.jinja:21 #: club/templates/club/club_sellings.jinja:49 -#: core/templates/core/file_detail.jinja:43 +#: core/templates/core/file_detail.jinja:25 +#: core/templates/core/file_detail.jinja:62 #: core/templates/core/file_moderation.jinja:24 -#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66 +#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:49 +#: core/templates/core/macros.jinja:68 #: core/templates/core/user_account_detail.jinja:38 #: core/templates/core/user_edit.jinja:19 #: counter/templates/counter/last_ops.jinja:29 #: counter/templates/counter/last_ops.jinja:59 +#: election/templates/election/election_detail.jinja:280 +#: election/templates/election/election_detail.jinja:327 #: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:146 sas/templates/sas/moderation.jinja:35 -#: sas/templates/sas/picture.jinja:66 +#: launderette/views.py:154 sas/templates/sas/album.jinja:26 +#: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:66 +#: sas/templates/sas/picture.jinja.py:116 #: stock/templates/stock/stock_shopping_list.jinja:43 #: stock/templates/stock/stock_shopping_list.jinja:69 msgid "Delete" msgstr "Supprimer" #: accounting/templates/accounting/bank_account_details.jinja:17 -#: club/views.py:32 core/views/user.py:130 sas/templates/sas/picture.jinja:78 +#: club/views.py:33 core/views/user.py:130 sas/templates/sas/picture.jinja:78 msgid "Infos" msgstr "Infos" @@ -340,15 +358,19 @@ 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:55 -#: accounting/templates/accounting/journal_details.jinja:71 club/views.py:54 -#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 -#: core/templates/core/user_tools.jinja:37 core/views/user.py:152 -#: counter/templates/counter/cash_summary_list.jinja:53 +#: accounting/templates/accounting/journal_details.jinja:82 club/views.py:55 +#: com/templates/com/news_admin_list.jinja:39 +#: com/templates/com/news_admin_list.jinja:71 core/templates/core/file.jinja:38 +#: core/templates/core/page.jinja:31 core/templates/core/user_tools.jinja:39 +#: core/views/user.py:152 counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:32 #: counter/templates/counter/counter_list.jinja:53 +#: election/templates/election/election_detail.jinja:279 +#: election/templates/election/election_detail.jinja:324 +#: election/templates/election/election_detail.jinja:370 #: launderette/templates/launderette/launderette_list.jinja:16 -#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:88 +#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:92 msgid "Edit" msgstr "Éditer" @@ -401,22 +423,26 @@ msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" #: accounting/templates/accounting/club_account_details.jinja:28 #: launderette/templates/launderette/launderette_admin.jinja:43 -#: stock/templates/stock/shopping_list_items.jinja:19 +#: stock/templates/stock/shopping_list_items.jinja:20 #: stock/templates/stock/stock_shopping_list.jinja:26 #: stock/templates/stock/stock_shopping_list.jinja:55 msgid "Name" msgstr "Nom" #: accounting/templates/accounting/club_account_details.jinja:29 +#: com/templates/com/news_admin_list.jinja:20 +#: com/templates/com/news_admin_list.jinja:53 msgid "Start" -msgstr "" +msgstr "Début" #: accounting/templates/accounting/club_account_details.jinja:30 +#: com/templates/com/news_admin_list.jinja:21 +#: com/templates/com/news_admin_list.jinja:54 msgid "End" msgstr "Fin" #: accounting/templates/accounting/club_account_details.jinja:31 -#: accounting/templates/accounting/journal_details.jinja:31 +#: accounting/templates/accounting/journal_details.jinja:33 #: core/templates/core/user_account_detail.jinja:53 #: core/templates/core/user_account_detail.jinja:80 #: counter/templates/counter/last_ops.jinja:17 @@ -432,55 +458,80 @@ msgid "Closed" msgstr "Fermé" #: accounting/templates/accounting/club_account_details.jinja:34 -#: accounting/templates/accounting/journal_details.jinja:39 +#: accounting/templates/accounting/journal_details.jinja:41 +#: com/templates/com/news_admin_list.jinja:22 +#: com/templates/com/news_admin_list.jinja:55 msgid "Actions" msgstr "Actions" #: accounting/templates/accounting/club_account_details.jinja:50 -#: accounting/templates/accounting/journal_details.jinja:59 +#: accounting/templates/accounting/journal_details.jinja:61 msgid "Yes" msgstr "Oui" #: accounting/templates/accounting/club_account_details.jinja:52 -#: accounting/templates/accounting/journal_details.jinja:61 +#: accounting/templates/accounting/journal_details.jinja:63 msgid "No" msgstr "Non" #: accounting/templates/accounting/club_account_details.jinja:54 -#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 +#: com/templates/com/news_admin_list.jinja:38 +#: com/templates/com/news_admin_list.jinja:70 core/templates/core/file.jinja:36 +#: core/templates/core/page.jinja:28 msgid "View" msgstr "Voir" +#: accounting/templates/accounting/co_list.jinja:4 +#: accounting/templates/accounting/journal_details.jinja:18 +#: core/templates/core/user_tools.jinja:59 +msgid "Company list" +msgstr "Liste des entreprises" + +#: accounting/templates/accounting/co_list.jinja:8 +msgid "Create new company" +msgstr "Nouvelle entreprise" + +#: accounting/templates/accounting/co_list.jinja:14 +msgid "Companies" +msgstr "Entreprises" + #: accounting/templates/accounting/journal_details.jinja:4 #: accounting/templates/accounting/journal_details.jinja:15 +#: accounting/templates/accounting/journal_statement_accounting.jinja:4 +#: accounting/templates/accounting/journal_statement_nature.jinja:4 +#: accounting/templates/accounting/journal_statement_person.jinja:4 msgid "General journal:" msgstr "Classeur : " -#: accounting/templates/accounting/journal_details.jinja:18 +#: accounting/templates/accounting/journal_details.jinja:19 +#: accounting/templates/accounting/journal_statement_accounting.jinja:29 #: core/templates/core/user_account.jinja:38 #: core/templates/core/user_account_detail.jinja:10 #: counter/templates/counter/counter_click.jinja:32 msgid "Amount: " msgstr "Montant : " -#: accounting/templates/accounting/journal_details.jinja:19 +#: accounting/templates/accounting/journal_details.jinja:20 +#: accounting/templates/accounting/journal_statement_accounting.jinja:30 msgid "Effective amount: " msgstr "Montant effectif: " -#: accounting/templates/accounting/journal_details.jinja:21 +#: accounting/templates/accounting/journal_details.jinja:22 msgid "Journal is closed, you can not create operation" msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" -#: accounting/templates/accounting/journal_details.jinja:23 +#: accounting/templates/accounting/journal_details.jinja:24 msgid "New operation" msgstr "Nouvelle opération" -#: accounting/templates/accounting/journal_details.jinja:28 +#: accounting/templates/accounting/journal_details.jinja:30 #: counter/templates/counter/stats.jinja:14 +#: counter/templates/counter/stats.jinja:51 +#: counter/templates/counter/stats.jinja:76 msgid "Nb" msgstr "No" -#: accounting/templates/accounting/journal_details.jinja:29 +#: accounting/templates/accounting/journal_details.jinja:31 #: club/templates/club/club_sellings.jinja:19 #: core/templates/core/user_account_detail.jinja:17 #: core/templates/core/user_account_detail.jinja:50 @@ -493,51 +544,112 @@ msgstr "No" msgid "Date" msgstr "Date" -#: accounting/templates/accounting/journal_details.jinja:30 +#: accounting/templates/accounting/journal_details.jinja:32 #: club/templates/club/club_sellings.jinja:23 #: core/templates/core/user_account_detail.jinja:20 #: counter/templates/counter/last_ops.jinja:42 msgid "Label" msgstr "Étiquette" -#: accounting/templates/accounting/journal_details.jinja:32 +#: accounting/templates/accounting/journal_details.jinja:34 msgid "Payment mode" msgstr "Méthode de paiement" -#: accounting/templates/accounting/journal_details.jinja:33 +#: accounting/templates/accounting/journal_details.jinja:35 msgid "Target" msgstr "Cible" -#: accounting/templates/accounting/journal_details.jinja:34 +#: accounting/templates/accounting/journal_details.jinja:36 msgid "Code" msgstr "Code" -#: accounting/templates/accounting/journal_details.jinja:35 +#: accounting/templates/accounting/journal_details.jinja:37 msgid "Nature" msgstr "Nature" -#: accounting/templates/accounting/journal_details.jinja:36 +#: accounting/templates/accounting/journal_details.jinja:38 #: stock/templates/stock/stock_shopping_list.jinja:50 msgid "Done" msgstr "Effectuées" -#: accounting/templates/accounting/journal_details.jinja:37 +#: accounting/templates/accounting/journal_details.jinja:39 #: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:728 msgid "Comment" msgstr "Commentaire" -#: accounting/templates/accounting/journal_details.jinja:38 +#: accounting/templates/accounting/journal_details.jinja:40 msgid "File" msgstr "Fichier" -#: accounting/templates/accounting/journal_details.jinja:40 +#: accounting/templates/accounting/journal_details.jinja:42 msgid "PDF" -msgstr "" +msgstr "PDF" -#: accounting/templates/accounting/journal_details.jinja:74 +#: accounting/templates/accounting/journal_details.jinja:68 +msgid "" +"Warning: this operation has no linked operation because the targeted club " +"account has no opened journal." +msgstr "" +"Attention: cette opération n'a pas d'opération liée parce qu'il n'y a pas de " +"classeur ouvert dans le compte club cible" + +#: accounting/templates/accounting/journal_details.jinja:71 +#, python-format +msgid "" +"Open a journal in this club account, then save this " +"operation again to make the linked operation." +msgstr "" +"Ouvrez un classeur dans ce compte club, puis sauver " +"cette opération à nouveau pour créer l'opération liée." + +#: accounting/templates/accounting/journal_details.jinja:85 msgid "Generate" msgstr "Générer" +#: accounting/templates/accounting/journal_statement_accounting.jinja:9 +msgid "Accounting statement: " +msgstr "Bilan comptable : " + +#: accounting/templates/accounting/journal_statement_accounting.jinja:14 +msgid "Operation type" +msgstr "Type d'opération" + +#: accounting/templates/accounting/journal_statement_accounting.jinja:15 +#: accounting/templates/accounting/journal_statement_nature.jinja:13 +#: accounting/templates/accounting/journal_statement_nature.jinja:32 +#: accounting/templates/accounting/journal_statement_person.jinja:17 +#: accounting/templates/accounting/journal_statement_person.jinja:45 +#: counter/templates/counter/invoices_call.jinja:21 +msgid "Sum" +msgstr "Somme" + +#: accounting/templates/accounting/journal_statement_nature.jinja:12 +#: accounting/templates/accounting/journal_statement_nature.jinja:31 +msgid "Nature of operation" +msgstr "Nature de l'opération" + +#: accounting/templates/accounting/journal_statement_nature.jinja:25 +#: accounting/templates/accounting/journal_statement_nature.jinja:44 +#: club/templates/club/club_sellings.jinja:14 +#: counter/templates/counter/counter_click.jinja:70 +#: counter/templates/counter/counter_main.jinja:28 +#: eboutic/templates/eboutic/eboutic_main.jinja:34 +msgid "Total: " +msgstr "Total : " + +#: accounting/templates/accounting/journal_statement_nature.jinja:48 +msgid "Statement by nature: " +msgstr "Bilan par nature : " + +#: accounting/templates/accounting/journal_statement_person.jinja:9 +msgid "Statement by person: " +msgstr "Bilan par personne : " + +#: accounting/templates/accounting/journal_statement_person.jinja:16 +#: accounting/templates/accounting/journal_statement_person.jinja:44 +msgid "Target of the operation" +msgstr "Cible de l'opération" + #: accounting/templates/accounting/label_list.jinja:14 msgid "Back to club account" msgstr "Retour au compte club" @@ -552,10 +664,15 @@ msgstr "Il n'y a pas d'étiquette dans ce compte club." msgid "Edit operation" msgstr "Éditer l'opération" -#: accounting/templates/accounting/operation_edit.jinja:41 -#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7 -#: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20 -#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 +#: accounting/templates/accounting/operation_edit.jinja:43 +msgid "Linked operation:" +msgstr "Opération liée : " + +#: accounting/templates/accounting/operation_edit.jinja:51 +#: com/templates/com/news_edit.jinja:66 core/templates/core/create.jinja:12 +#: core/templates/core/edit.jinja:7 core/templates/core/edit.jinja.py:15 +#: core/templates/core/edit.jinja:20 core/templates/core/file_edit.jinja:8 +#: core/templates/core/page_prop.jinja:8 #: core/templates/core/pagerev_edit.jinja:24 #: core/templates/core/user_godfathers.jinja:35 #: counter/templates/counter/cash_register_summary.jinja:22 @@ -565,7 +682,7 @@ msgstr "Sauver" #: accounting/templates/accounting/refound_account.jinja:4 #: accounting/templates/accounting/refound_account.jinja:8 -#: accounting/views.py:530 +#: accounting/views.py:680 msgid "Refound account" msgstr "Remboursement de compte" @@ -586,54 +703,83 @@ msgstr "Types simplifiés" msgid "New simplified type" msgstr "Nouveau type simplifié" -#: accounting/views.py:365 accounting/views.py:371 -msgid "Operation" -msgstr "Opération" - -#: accounting/views.py:371 +#: accounting/views.py:172 accounting/views.py:179 accounting/views.py:399 msgid "Journal" msgstr "Classeur" -#: accounting/views.py:382 +#: accounting/views.py:184 +msgid "Statement by nature" +msgstr "Bilan par nature" + +#: accounting/views.py:189 +msgid "Statement by person" +msgstr "Bilan par personne" + +#: accounting/views.py:194 +msgid "Accounting statement" +msgstr "Bilan comptable" + +#: accounting/views.py:393 accounting/views.py:399 +msgid "Operation" +msgstr "Opération" + +#: accounting/views.py:410 msgid "Financial proof: " msgstr "Justificatif de libellé : " -#: accounting/views.py:383 +#: accounting/views.py:411 #, python-format msgid "Club: %(club_name)s" msgstr "Club : %(club_name)s" -#: accounting/views.py:384 +#: accounting/views.py:412 #, python-format msgid "Label: %(op_label)s" msgstr "Libellé : %(op_label)s" -#: accounting/views.py:390 +#: accounting/views.py:413 +#, python-format +msgid "Date: %(date)s" +msgstr "Date : %(date)s" + +#: accounting/views.py:419 #, python-format msgid "Amount: %(amount).2f €" msgstr "Montant : %(amount).2f €" -#: accounting/views.py:402 +#: accounting/views.py:431 msgid "Debtor" msgstr "Débiteur" -#: accounting/views.py:402 +#: accounting/views.py:431 msgid "Creditor" msgstr "Créditeur" -#: accounting/views.py:404 +#: accounting/views.py:433 msgid "Comment:" msgstr "Commentaire :" -#: accounting/views.py:491 +#: accounting/views.py:452 +msgid "Signature:" +msgstr "Signature :" + +#: accounting/views.py:506 +msgid "General statement" +msgstr "Bilan général" + +#: accounting/views.py:509 +msgid "No label operations" +msgstr "Opérations sans étiquette" + +#: accounting/views.py:642 msgid "Refound this account" msgstr "Rembourser ce compte" -#: club/models.py:21 +#: club/models.py:20 msgid "unix name" msgstr "nom unix" -#: club/models.py:25 +#: club/models.py:24 msgid "" "Enter a valid unix name. This value may contain only letters, numbers ./-/_ " "characters." @@ -641,50 +787,52 @@ msgstr "" "Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " "lettres, des nombres, et les caractères ./-/_" -#: club/models.py:30 +#: club/models.py:29 msgid "A club with that unix name already exists." msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:33 core/models.py:170 +#: club/models.py:32 core/models.py:157 msgid "address" msgstr "Adresse" -#: club/models.py:39 core/models.py:118 +#: club/models.py:38 core/models.py:118 msgid "home" msgstr "home" -#: club/models.py:48 +#: club/models.py:47 msgid "You can not make loops in clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs" -#: club/models.py:62 +#: club/models.py:61 msgid "A club with that unix_name already exists" msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:145 counter/models.py:386 counter/models.py:403 -#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 -#: launderette/models.py:126 sas/models.py:101 +#: club/models.py:144 counter/models.py:397 counter/models.py:414 +#: eboutic/models.py:14 eboutic/models.py:47 election/models.py:126 +#: launderette/models.py:87 launderette/models.py:124 sas/models.py:131 msgid "user" msgstr "nom d'utilisateur" -#: club/models.py:149 core/models.py:137 +#: club/models.py:148 core/models.py:137 election/models.py:125 +#: election/models.py:141 msgid "role" msgstr "rôle" -#: club/models.py:151 core/models.py:33 counter/models.py:72 -#: counter/models.py:97 +#: club/models.py:150 core/models.py:33 counter/models.py:71 +#: counter/models.py:96 election/models.py:15 election/models.py:82 +#: election/models.py:127 msgid "description" msgstr "description" -#: club/models.py:156 +#: club/models.py:155 msgid "User must be subscriber to take part to a club" msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" -#: club/models.py:158 +#: club/models.py:157 msgid "User is already member of that club" msgstr "L'utilisateur est déjà membre de ce club" -#: club/models.py:167 +#: club/models.py:161 msgid "past member" msgstr "Anciens membres" @@ -697,7 +845,7 @@ msgstr "Liste des clubs" msgid "New club" msgstr "Nouveau club" -#: club/templates/club/club_list.jinja:31 +#: club/templates/club/club_list.jinja:31 club/templates/club/stats.jinja:44 msgid "There is no club in this website." msgstr "Il n'y a pas de club dans ce site web." @@ -717,7 +865,7 @@ msgstr "Rôle" #: core/templates/core/user_clubs.jinja:17 #: core/templates/core/user_clubs.jinja:43 msgid "Description" -msgstr "description" +msgstr "Description" #: club/templates/club/club_members.jinja:11 #: core/templates/core/user_clubs.jinja:18 @@ -732,7 +880,7 @@ msgstr "Marquer comme ancien" #: club/templates/club/club_members.jinja:30 #: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 -#: launderette/views.py:146 +#: launderette/views.py:154 msgid "Add" msgstr "Ajouter" @@ -750,13 +898,13 @@ msgstr "Du" msgid "To" msgstr "Au" -#: club/templates/club/club_sellings.jinja:5 club/views.py:59 club/views.py:216 +#: club/templates/club/club_sellings.jinja:5 club/views.py:60 club/views.py:220 #: counter/templates/counter/counter_main.jinja:19 #: counter/templates/counter/last_ops.jinja:35 msgid "Sellings" msgstr "Ventes" -#: club/templates/club/club_sellings.jinja:9 +#: club/templates/club/club_sellings.jinja:9 club/templates/club/stats.jinja:19 #: counter/templates/counter/cash_summary_list.jinja:15 msgid "Show" msgstr "Montrer" @@ -773,14 +921,7 @@ msgstr "Quantité : " msgid "units" msgstr "unités" -#: club/templates/club/club_sellings.jinja:14 -#: counter/templates/counter/counter_click.jinja:70 -#: counter/templates/counter/counter_main.jinja:28 -#: eboutic/templates/eboutic/eboutic_main.jinja:34 -msgid "Total: " -msgstr "Total : " - -#: club/templates/club/club_sellings.jinja:20 club/views.py:167 +#: club/templates/club/club_sellings.jinja:20 club/views.py:171 #: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:51 #: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:82 @@ -827,62 +968,289 @@ msgid "Payment method" msgstr "Méthode de paiement" #: club/templates/club/club_tools.jinja:4 -#: core/templates/core/user_tools.jinja:84 +#: core/templates/core/user_tools.jinja:91 msgid "Club tools" msgstr "Outils club" #: club/templates/club/club_tools.jinja:6 +msgid "Communication:" +msgstr "Communication : " + +#: club/templates/club/club_tools.jinja:8 +msgid "Create a news" +msgstr "Créer une nouvelle" + +#: club/templates/club/club_tools.jinja:10 msgid "Counters:" msgstr "Comptoirs : " -#: club/templates/club/club_tools.jinja:22 +#: club/templates/club/club_tools.jinja:26 msgid "Accouting: " msgstr "Comptabilité : " -#: club/templates/club/club_tools.jinja:30 +#: club/templates/club/club_tools.jinja:34 msgid "Manage launderettes" msgstr "Gestion des laveries" -#: club/views.py:38 +#: club/templates/club/stats.jinja:4 club/templates/club/stats.jinja.py:9 +msgid "Club stats" +msgstr "Statistiques du club" + +#: club/views.py:39 msgid "Members" msgstr "Membres" -#: club/views.py:43 +#: club/views.py:44 msgid "Old members" msgstr "Anciens membres" -#: club/views.py:49 core/templates/core/base.jinja:42 core/views/user.py:146 -#: sas/templates/sas/picture.jinja:83 +#: club/views.py:50 core/templates/core/base.jinja:64 core/views/user.py:146 +#: sas/templates/sas/picture.jinja:87 msgid "Tools" msgstr "Outils" -#: club/views.py:65 counter/templates/counter/counter_list.jinja:21 +#: club/views.py:66 counter/templates/counter/counter_list.jinja:21 #: counter/templates/counter/counter_list.jinja:42 #: counter/templates/counter/counter_list.jinja:57 msgid "Props" msgstr "Propriétés" -#: club/views.py:103 core/views/forms.py:204 counter/views.py:39 +#: club/views.py:107 core/views/forms.py:204 counter/views.py:39 msgid "Select user" msgstr "Choisir un utilisateur" -#: club/views.py:150 sas/views.py:71 sas/views.py:117 sas/views.py:159 +#: club/views.py:154 sas/views.py:82 sas/views.py:132 sas/views.py:201 msgid "You do not have the permission to do that" msgstr "Vous n'avez pas la permission de faire cela" -#: club/views.py:165 counter/views.py:926 +#: club/views.py:169 counter/views.py:949 msgid "Begin date" msgstr "Date de début" -#: club/views.py:166 counter/views.py:927 +#: club/views.py:170 com/views.py:81 counter/views.py:950 election/views.py:131 msgid "End date" msgstr "Date de fin" -#: club/views.py:180 core/templates/core/user_stats.jinja:27 -#: counter/views.py:1007 +#: club/views.py:184 core/templates/core/user_stats.jinja:27 +#: counter/views.py:1030 msgid "Product" msgstr "Produit" +#: com/models.py:11 +msgid "alert message" +msgstr "message d'alerte" + +#: com/models.py:12 +msgid "info message" +msgstr "message d'info" + +#: com/models.py:13 +msgid "index page" +msgstr "page d'accueil" + +#: com/models.py:22 +msgid "Notice" +msgstr "Information" + +#: com/models.py:23 +msgid "Event" +msgstr "Événement" + +#: com/models.py:24 com/templates/com/news_list.jinja:79 +msgid "Weekly" +msgstr "Hebdomadaire" + +#: com/models.py:25 +msgid "Call" +msgstr "Appel" + +#: com/models.py:30 election/models.py:14 election/models.py:81 +#: election/models.py:114 +msgid "title" +msgstr "titre" + +#: com/models.py:31 +msgid "summary" +msgstr "résumé" + +#: com/models.py:32 +msgid "content" +msgstr "contenu de la nouvelle" + +#: com/models.py:33 core/models.py:901 launderette/models.py:60 +#: launderette/models.py:85 launderette/models.py:121 stock/models.py:34 +#: stock/models.py:73 +msgid "type" +msgstr "type" + +#: com/models.py:35 +msgid "author" +msgstr "auteur" + +#: com/models.py:36 core/models.py:518 +msgid "is moderated" +msgstr "est modéré" + +#: com/models.py:37 +msgid "moderator" +msgstr "modérateur" + +#: com/models.py:61 +msgid "news_date" +msgstr "date de la nouvelle" + +#: com/models.py:62 +msgid "start_date" +msgstr "date de début" + +#: com/models.py:63 +msgid "end_date" +msgstr "date de fin" + +#: com/templates/com/news_admin_list.jinja:5 +msgid "News admin" +msgstr "Administration des nouvelles" + +#: com/templates/com/news_admin_list.jinja:9 +#: com/templates/com/news_detail.jinja:5 com/templates/com/news_detail.jinja:11 +#: com/templates/com/news_list.jinja:4 com/templates/com/news_list.jinja:28 +msgid "News" +msgstr "Nouvelles" + +#: com/templates/com/news_admin_list.jinja:10 +msgid "Displayed news" +msgstr "Nouvelles affichées" + +#: com/templates/com/news_admin_list.jinja:14 +#: com/templates/com/news_admin_list.jinja:48 +#: launderette/templates/launderette/launderette_admin.jinja:42 +#: launderette/views.py:156 +msgid "Type" +msgstr "Type" + +#: com/templates/com/news_admin_list.jinja:15 +#: com/templates/com/news_admin_list.jinja:49 +msgid "Title" +msgstr "Titre" + +#: com/templates/com/news_admin_list.jinja:16 +#: com/templates/com/news_admin_list.jinja:50 +msgid "Summary" +msgstr "Résumé" + +#: com/templates/com/news_admin_list.jinja:18 +#: com/templates/com/news_admin_list.jinja:52 +msgid "Author" +msgstr "Auteur" + +#: com/templates/com/news_admin_list.jinja:19 +msgid "Moderator" +msgstr "Modérateur" + +#: com/templates/com/news_admin_list.jinja:44 +msgid "News to moderate" +msgstr "Nouvelles à modérer" + +#: com/templates/com/news_admin_list.jinja:72 +#: com/templates/com/news_detail.jinja:26 +#: core/templates/core/file_detail.jinja:65 +#: core/templates/core/file_moderation.jinja:23 +#: sas/templates/sas/moderation.jinja:17 sas/templates/sas/picture.jinja:114 +msgid "Moderate" +msgstr "Modérer" + +#: com/templates/com/news_detail.jinja:10 +msgid "Back to news" +msgstr "Retour aux nouvelles" + +#: com/templates/com/news_detail.jinja:22 com/templates/com/news_edit.jinja:34 +msgid "Author: " +msgstr "Auteur : " + +#: com/templates/com/news_detail.jinja:24 sas/templates/sas/picture.jinja:82 +msgid "Moderator: " +msgstr "Modérateur : " + +#: com/templates/com/news_detail.jinja:29 +msgid "Edit (will be remoderated)" +msgstr "Éditer (sera resoumise à modération)" + +#: com/templates/com/news_edit.jinja:6 com/templates/com/news_edit.jinja:38 +msgid "Edit news" +msgstr "Éditer la nouvelle" + +#: com/templates/com/news_edit.jinja:8 com/templates/com/news_edit.jinja:40 +msgid "Create news" +msgstr "Créer nouvelle" + +#: com/templates/com/news_edit.jinja:48 +msgid "Notice: Information, election result - no date" +msgstr "Information, resultat d'élection - sans date" + +#: com/templates/com/news_edit.jinja:49 +msgid "Event: punctual event, associated with one date" +msgstr "Événement : événement ponctuel associé à une date" + +#: com/templates/com/news_edit.jinja:50 +msgid "" +"Weekly: recurrent event, associated with many dates (specify the first one, " +"and a deadline)" +msgstr "" +"Hebdomadaire : événement récurrent, associé à plusieurs dates (spécifier la " +"première, ainsi que la date de fin)" + +#: com/templates/com/news_edit.jinja:51 +msgid "" +"Call: long time event, associated with a long date (election appliance, ...)" +msgstr "" +"Appel : événement de longue durée, associé à une longue date (candidature, " +"concours, ...)" + +#: com/templates/com/news_edit.jinja:65 +#: core/templates/core/pagerev_edit.jinja:23 +msgid "Preview" +msgstr "Prévisualiser" + +#: com/templates/com/news_list.jinja:48 +msgid "Events today and the next few days" +msgstr "Événement aujourd'hui et dans les prochains jours" + +#: com/templates/com/news_list.jinja:65 +msgid "Coming soon... don't miss!" +msgstr "Prochainement... à ne pas rater!" + +#: com/views.py:27 +msgid "Communication administration" +msgstr "Administration de la communication" + +#: com/views.py:34 +msgid "Index page" +msgstr "Page d'accueil" + +#: com/views.py:39 +msgid "Info message" +msgstr "Message d'info" + +#: com/views.py:44 +msgid "Alert message" +msgstr "Message d'alerte" + +#: com/views.py:80 election/views.py:130 +msgid "Start date" +msgstr "Date de début" + +#: com/views.py:82 +msgid "Until" +msgstr "Jusqu'à" + +#: com/views.py:83 +msgid "Automoderation" +msgstr "Automodération" + +#: com/views.py:89 com/views.py:91 com/views.py:93 +msgid "This field is required." +msgstr "Ce champ est obligatoire." + #: core/models.py:29 msgid "meta group status" msgstr "status du meta-groupe" @@ -1066,246 +1434,203 @@ msgstr "Service" msgid "department" msgstr "département" -#: core/models.py:147 -msgid "TC" -msgstr "TC" - #: core/models.py:148 -msgid "IMSI" -msgstr "IMSI" - -#: core/models.py:149 -msgid "IMAP" -msgstr "IMAP" - -#: core/models.py:150 -msgid "INFO" -msgstr "INFO" - -#: core/models.py:151 -msgid "GI" -msgstr "GI" - -#: core/models.py:152 -msgid "E" -msgstr "E" - -#: core/models.py:153 -msgid "EE" -msgstr "EE" - -#: core/models.py:154 -msgid "GESC" -msgstr "GESC" - -#: core/models.py:155 -msgid "GMC" -msgstr "GMC" - -#: core/models.py:156 -msgid "MC" -msgstr "MC" - -#: core/models.py:157 -msgid "EDIM" -msgstr "EDIM" - -#: core/models.py:158 -msgid "Humanities" -msgstr "Humanités" - -#: core/models.py:159 -msgid "N/A" -msgstr "N/A" - -#: core/models.py:161 msgid "dpt option" msgstr "Filière" -#: core/models.py:162 +#: core/models.py:149 msgid "semester" msgstr "semestre" -#: core/models.py:163 +#: core/models.py:150 msgid "quote" msgstr "citation" -#: core/models.py:164 +#: core/models.py:151 msgid "school" msgstr "école" -#: core/models.py:165 +#: core/models.py:152 msgid "promo" msgstr "promo" -#: core/models.py:166 +#: core/models.py:153 msgid "forum signature" msgstr "signature du forum" -#: core/models.py:167 +#: core/models.py:154 msgid "second email address" msgstr "adresse email secondaire" -#: core/models.py:169 +#: core/models.py:156 msgid "parent phone" msgstr "téléphone des parents" -#: core/models.py:171 +#: core/models.py:158 msgid "parent address" msgstr "adresse des parents" -#: core/models.py:172 +#: core/models.py:159 msgid "is subscriber viewable" msgstr "profil visible par les cotisants" -#: core/models.py:301 +#: core/models.py:292 msgid "A user with that username already exists" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" -#: core/models.py:426 core/templates/core/macros.jinja:17 +#: core/models.py:417 core/templates/core/macros.jinja:17 #: core/templates/core/user_detail.jinja:14 #: core/templates/core/user_detail.jinja:16 #: core/templates/core/user_edit.jinja:17 +#: election/templates/election/election_detail.jinja:316 msgid "Profile" msgstr "Profil" -#: core/models.py:484 +#: core/models.py:486 msgid "Visitor" msgstr "Visiteur" -#: core/models.py:489 +#: core/models.py:491 msgid "define if we show a users stats" msgstr "Definit si l'on montre les statistiques de l'utilisateur" -#: core/models.py:491 +#: core/models.py:493 msgid "Show your account statistics to others" msgstr "Montrez vos statistiques de compte aux autres" -#: core/models.py:504 +#: core/models.py:506 msgid "file name" msgstr "nom du fichier" -#: core/models.py:505 core/models.py:665 +#: core/models.py:507 core/models.py:707 msgid "parent" msgstr "parent" -#: core/models.py:506 core/models.py:521 +#: core/models.py:508 core/models.py:524 msgid "file" msgstr "fichier" -#: core/models.py:507 +#: core/models.py:509 msgid "compressed file" msgstr "version allégée" -#: core/models.py:508 +#: core/models.py:510 msgid "thumbnail" msgstr "miniature" -#: core/models.py:509 +#: core/models.py:511 core/models.py:519 msgid "owner" msgstr "propriétaire" -#: core/models.py:510 core/models.py:671 +#: core/models.py:512 core/models.py:713 msgid "edit group" msgstr "groupe d'édition" -#: core/models.py:511 core/models.py:672 +#: core/models.py:513 core/models.py:714 msgid "view group" msgstr "groupe de vue" -#: core/models.py:512 +#: core/models.py:514 msgid "is folder" msgstr "est un dossier" -#: core/models.py:513 +#: core/models.py:515 msgid "mime type" msgstr "type mime" -#: core/models.py:514 +#: core/models.py:516 msgid "size" msgstr "taille" -#: core/models.py:516 -msgid "is moderated" -msgstr "est modéré" - -#: core/models.py:517 +#: core/models.py:520 msgid "asked for removal" msgstr "retrait demandé" -#: core/models.py:518 +#: core/models.py:521 msgid "is in the SAS" msgstr "est dans le SAS" -#: core/models.py:555 +#: core/models.py:560 msgid "Character '/' not authorized in name" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" -#: core/models.py:558 core/models.py:563 +#: core/models.py:563 core/models.py:568 msgid "Loop in folder tree" msgstr "Boucle dans l'arborescence des dossiers" -#: core/models.py:567 +#: core/models.py:572 msgid "You can not make a file be a children of a non folder file" msgstr "" "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "un dossier" -#: core/models.py:571 +#: core/models.py:576 msgid "Duplicate file" msgstr "Un fichier de ce nom existe déjà" -#: core/models.py:585 +#: core/models.py:590 msgid "You must provide a file" msgstr "Vous devez fournir un fichier" -#: core/models.py:617 +#: core/models.py:656 msgid "Folder: " msgstr "Dossier : " -#: core/models.py:619 +#: core/models.py:658 msgid "File: " msgstr "Fichier : " -#: core/models.py:664 core/models.py:668 +#: core/models.py:706 core/models.py:710 msgid "page name" msgstr "nom de la page" -#: core/models.py:669 +#: core/models.py:711 msgid "owner group" msgstr "groupe propriétaire" -#: core/models.py:673 +#: core/models.py:715 msgid "lock user" msgstr "utilisateur bloquant" -#: core/models.py:674 +#: core/models.py:716 msgid "lock_timeout" msgstr "décompte du déblocage" -#: core/models.py:701 +#: core/models.py:743 msgid "Duplicate page" msgstr "Une page de ce nom existe déjà" -#: core/models.py:707 +#: core/models.py:749 msgid "Loop in page tree" msgstr "Boucle dans l'arborescence des pages" -#: core/models.py:815 +#: core/models.py:859 msgid "revision" msgstr "révision" -#: core/models.py:816 +#: core/models.py:860 msgid "page title" msgstr "titre de la page" -#: core/models.py:817 +#: core/models.py:861 msgid "page content" msgstr "contenu de la page" +#: core/models.py:899 +msgid "url" +msgstr "url" + +#: core/models.py:900 +msgid "param" +msgstr "param" + +#: core/models.py:903 +msgid "viewed" +msgstr "vue" + #: core/templates/core/403.jinja:5 msgid "403, Forbidden" -msgstr "403. Non autorisé" +msgstr "403, Non autorisé" #: core/templates/core/404.jinja:5 msgid "404, Not Found" @@ -1319,83 +1644,91 @@ msgstr "Bienvenue!" msgid "Logo" msgstr "Logo" -#: core/templates/core/base.jinja:22 core/templates/core/login.jinja:4 +#: core/templates/core/base.jinja:33 core/templates/core/login.jinja:4 #: core/templates/core/password_reset_complete.jinja:5 msgid "Login" msgstr "Connexion" -#: core/templates/core/base.jinja:23 core/templates/core/register.jinja:18 +#: core/templates/core/base.jinja:34 core/templates/core/register.jinja:18 msgid "Register" msgstr "S'enregister" -#: core/templates/core/base.jinja:43 +#: core/templates/core/base.jinja:61 +msgid "View more" +msgstr "Voir plus" + +#: core/templates/core/base.jinja:62 +msgid "Mark all as read" +msgstr "Marquer tout commme lu" + +#: core/templates/core/base.jinja:65 msgid "Logout" msgstr "Déconnexion" -#: core/templates/core/base.jinja:45 core/templates/core/base.jinja.py:46 +#: core/templates/core/base.jinja:67 core/templates/core/base.jinja.py:68 msgid "Search" msgstr "Recherche" -#: core/templates/core/base.jinja:68 +#: core/templates/core/base.jinja:90 msgid "Main" msgstr "Accueil" -#: core/templates/core/base.jinja:69 +#: core/templates/core/base.jinja:91 msgid "Matmatronch" msgstr "Matmatronch" -#: core/templates/core/base.jinja:70 +#: core/templates/core/base.jinja:92 msgid "Wiki" msgstr "Wiki" -#: core/templates/core/base.jinja:71 sas/templates/sas/album.jinja:4 +#: core/templates/core/base.jinja:93 sas/templates/sas/album.jinja:4 #: sas/templates/sas/main.jinja:4 sas/templates/sas/main.jinja.py:8 #: sas/templates/sas/picture.jinja:26 msgid "SAS" msgstr "SAS" -#: core/templates/core/base.jinja:72 +#: core/templates/core/base.jinja:94 msgid "Forum" msgstr "Forum" -#: core/templates/core/base.jinja:73 +#: core/templates/core/base.jinja:95 msgid "Services" msgstr "Services" -#: core/templates/core/base.jinja:74 core/templates/core/file.jinja:20 -#: core/views/files.py:48 +#: core/templates/core/base.jinja:96 core/templates/core/file.jinja:20 +#: core/views/files.py:50 msgid "Files" msgstr "Fichiers" -#: core/templates/core/base.jinja:75 +#: core/templates/core/base.jinja:97 msgid "Sponsors" msgstr "Partenaires" -#: core/templates/core/base.jinja:76 +#: core/templates/core/base.jinja:98 msgid "Help" msgstr "Aide" -#: core/templates/core/base.jinja:109 +#: core/templates/core/base.jinja:131 msgid "Contacts" msgstr "Contacts" -#: core/templates/core/base.jinja:110 +#: core/templates/core/base.jinja:132 msgid "Legal notices" msgstr "Mentions légales" -#: core/templates/core/base.jinja:111 +#: core/templates/core/base.jinja:133 msgid "Intellectual property" msgstr "Propriété intellectuelle" -#: core/templates/core/base.jinja:112 +#: core/templates/core/base.jinja:134 msgid "Help & Documentation" msgstr "Aide & Documentation" -#: core/templates/core/base.jinja:113 +#: core/templates/core/base.jinja:135 msgid "R&D" msgstr "R&D" -#: core/templates/core/base.jinja:115 +#: core/templates/core/base.jinja:137 msgid "Site made by good people" msgstr "Site réalisé par des gens bons" @@ -1437,7 +1770,7 @@ msgstr "Éditer %(obj)s" #: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 msgid "File list" -msgstr "Liste de fichiers" +msgstr "Liste des fichiers" #: core/templates/core/file.jinja:9 msgid "New file" @@ -1457,42 +1790,52 @@ msgstr "Propriétés" #: core/templates/core/file_detail.jinja:13 #: core/templates/core/file_moderation.jinja:20 -#: sas/templates/sas/moderation.jinja:23 +#: sas/templates/sas/picture.jinja:80 msgid "Owner: " msgstr "Propriétaire : " -#: core/templates/core/file_detail.jinja:34 +#: core/templates/core/file_detail.jinja:26 sas/templates/sas/album.jinja:27 +msgid "Clear clipboard" +msgstr "Vider le presse-papier" + +#: core/templates/core/file_detail.jinja:27 sas/templates/sas/album.jinja:28 +msgid "Cut" +msgstr "Couper" + +#: core/templates/core/file_detail.jinja:28 sas/templates/sas/album.jinja:29 +msgid "Paste" +msgstr "Coller" + +#: core/templates/core/file_detail.jinja:31 sas/templates/sas/album.jinja:32 +msgid "Clipboard: " +msgstr "Presse-papier : " + +#: core/templates/core/file_detail.jinja:53 msgid "Real name: " msgstr "Nom réel : " -#: core/templates/core/file_detail.jinja:35 +#: core/templates/core/file_detail.jinja:54 #: core/templates/core/file_moderation.jinja:21 -#: sas/templates/sas/moderation.jinja:24 sas/templates/sas/picture.jinja:79 +#: sas/templates/sas/picture.jinja:79 msgid "Date: " msgstr "Date : " -#: core/templates/core/file_detail.jinja:37 +#: core/templates/core/file_detail.jinja:56 msgid "Type: " msgstr "Type : " -#: core/templates/core/file_detail.jinja:38 +#: core/templates/core/file_detail.jinja:57 msgid "Size: " msgstr "Taille : " -#: core/templates/core/file_detail.jinja:38 +#: core/templates/core/file_detail.jinja:57 msgid "bytes" msgstr "octets" -#: core/templates/core/file_detail.jinja:40 +#: core/templates/core/file_detail.jinja:59 msgid "Download" msgstr "Télécharger" -#: core/templates/core/file_detail.jinja:46 -#: core/templates/core/file_moderation.jinja:23 -#: sas/templates/sas/moderation.jinja:31 -msgid "Moderate" -msgstr "Modérer" - #: core/templates/core/file_list.jinja:19 msgid "There is no file in this website." msgstr "Il n'y a pas de fichier sur ce site web." @@ -1503,7 +1846,6 @@ msgid "File moderation" msgstr "Modération des fichiers" #: core/templates/core/file_moderation.jinja:19 -#: sas/templates/sas/moderation.jinja:22 msgid "Full name: " msgstr "Nom complet : " @@ -1530,10 +1872,6 @@ msgstr "Liste des groupes" msgid "New group" msgstr "Nouveau groupe" -#: core/templates/core/index.jinja:7 -msgid "Welcome to the new AE's website!" -msgstr "Bienvenue sur le nouveau site de l'AE ! " - #: core/templates/core/login.jinja:10 msgid "Your username and password didn't match. Please try again." msgstr "" @@ -1578,11 +1916,11 @@ msgstr "Cotisant jusqu'au %(subscription_end)s" msgid "Account number: " msgstr "Numero de compte : " -#: core/templates/core/macros.jinja:44 launderette/models.py:129 +#: core/templates/core/macros.jinja:44 launderette/models.py:127 msgid "Slot" msgstr "Créneau" -#: core/templates/core/macros.jinja:55 +#: core/templates/core/macros.jinja:57 #: launderette/templates/launderette/launderette_admin.jinja:20 msgid "Tokens" msgstr "Jetons" @@ -1631,6 +1969,11 @@ msgstr "L'équipe AE" msgid "New subscription to the UTBM student association" msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" +#: core/templates/core/notification_list.jinja:4 +#: core/templates/core/notification_list.jinja:8 +msgid "Notification list" +msgstr "Liste des notifications" + #: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 #: core/templates/core/page_list.jinja:9 msgid "Page list" @@ -1684,10 +2027,6 @@ msgstr "Propriétés de la page" msgid "Edit page" msgstr "Éditer la page" -#: core/templates/core/pagerev_edit.jinja:23 -msgid "Preview" -msgstr "Prévisualiser" - #: core/templates/core/password_change.jinja:6 #, python-format msgid "Change password for %(user)s" @@ -1826,7 +2165,8 @@ msgstr "Rechargements" msgid "Eboutic invoices" msgstr "Facture eboutic" -#: core/templates/core/user_account.jinja:53 counter/views.py:496 +#: core/templates/core/user_account.jinja:53 +#: core/templates/core/user_tools.jinja:33 counter/views.py:496 msgid "Etickets" msgstr "Etickets" @@ -1836,7 +2176,7 @@ msgid "User has no account" msgstr "L'utilisateur n'a pas de compte" #: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:146 +#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:154 #: stock/templates/stock/shopping_list_items.jinja:9 msgid "Back" msgstr "Retour" @@ -1856,7 +2196,7 @@ msgstr "Clubs" #: core/templates/core/user_clubs.jinja:10 msgid "Current club(s) :" -msgstr "Club(s) actuel(s) : " +msgstr "Clubs actuels : " #: core/templates/core/user_clubs.jinja:36 msgid "Old club(s) :" @@ -1955,7 +2295,7 @@ msgstr "Éditer les groupes pour %(user_name)s" msgid "User list" msgstr "Liste d'utilisateurs" -#: core/templates/core/user_pictures.jinja:5 +#: core/templates/core/user_pictures.jinja:4 #, python-format msgid "%(user_name)s's pictures" msgstr "Photos de %(user_name)s" @@ -2029,60 +2369,93 @@ msgstr "Gestion des types de produit" msgid "Cash register summaries" msgstr "Relevés de caisse" -#: core/templates/core/user_tools.jinja:38 core/views/user.py:174 +#: core/templates/core/user_tools.jinja:32 +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:491 +msgid "Invoices call" +msgstr "Appels à facture" + +#: core/templates/core/user_tools.jinja:40 core/views/user.py:174 #: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:33 #: counter/templates/counter/counter_list.jinja:54 msgid "Stats" msgstr "Stats" -#: core/templates/core/user_tools.jinja:42 +#: core/templates/core/user_tools.jinja:44 #: counter/templates/counter/counter_list.jinja:37 #: stock/templates/stock/stock_item_list.jinja:11 #: stock/templates/stock/stock_list.jinja:16 msgid "Shopping lists" -msgstr "" +msgstr "Liste de course" -#: core/templates/core/user_tools.jinja:44 +#: core/templates/core/user_tools.jinja:46 #: counter/templates/counter/counter_list.jinja:39 msgid "Create new stock" -msgstr "Créer un stock" +msgstr "Créer nouveau stock" -#: core/templates/core/user_tools.jinja:55 +#: core/templates/core/user_tools.jinja:57 msgid "Refound Account" msgstr "Rembourser un compte" -#: core/templates/core/user_tools.jinja:56 +#: core/templates/core/user_tools.jinja:58 msgid "General accounting" msgstr "Comptabilité générale" -#: core/templates/core/user_tools.jinja:65 +#: core/templates/core/user_tools.jinja:68 msgid "Club account: " msgstr "Compte club : " -#: core/templates/core/user_tools.jinja:72 +#: core/templates/core/user_tools.jinja:75 msgid "Communication" msgstr "Communication" -#: core/templates/core/user_tools.jinja:75 +#: core/templates/core/user_tools.jinja:78 +msgid "Moderate news" +msgstr "Modérer les nouvelles" + +#: core/templates/core/user_tools.jinja:79 +msgid "Edit index page" +msgstr "Éditer la page d'accueil" + +#: core/templates/core/user_tools.jinja:80 +msgid "Edit alert message" +msgstr "Éditer le message d'alerte" + +#: core/templates/core/user_tools.jinja:81 +msgid "Edit information message" +msgstr "Éditer le message d'informations" + +#: core/templates/core/user_tools.jinja:82 msgid "Moderate files" msgstr "Modérer les fichiers" -#: core/templates/core/user_tools.jinja:78 +#: core/templates/core/user_tools.jinja:85 msgid "Moderate pictures" msgstr "Modérer les photos" -#: core/views/files.py:47 +#: core/templates/core/user_tools.jinja:98 +msgid "Elections" +msgstr "Élections" + +#: core/templates/core/user_tools.jinja:100 +msgid "See available elections" +msgstr "Voir les élections disponibles" + +#: core/templates/core/user_tools.jinja:102 +msgid "Create a new election" +msgstr "Créer une nouvelle élection" + +#: core/views/files.py:49 msgid "Add a new folder" msgstr "Ajouter un nouveau dossier" -#: core/views/files.py:58 +#: core/views/files.py:62 #, python-format 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:67 core/views/forms.py:181 core/views/forms.py:185 -#: sas/views.py:46 +#: core/views/files.py:72 core/views/forms.py:181 core/views/forms.py:185 +#: sas/views.py:53 #, python-format msgid "Error uploading file %(file_name)s: %(msg)s" msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s" @@ -2135,148 +2508,148 @@ msgstr "Photos" msgid "User already has a profile picture" msgstr "L'utilisateur a déjà une photo de profil" -#: counter/models.py:28 +#: counter/models.py:27 msgid "account id" msgstr "numéro de compte" -#: counter/models.py:32 +#: counter/models.py:31 msgid "customer" msgstr "client" -#: counter/models.py:33 +#: counter/models.py:32 msgid "customers" msgstr "clients" -#: counter/models.py:48 counter/templates/counter/counter_click.jinja:48 +#: counter/models.py:47 counter/templates/counter/counter_click.jinja:48 #: counter/templates/counter/counter_click.jinja:82 msgid "Not enough money" msgstr "Solde insuffisant" -#: counter/models.py:76 counter/models.py:98 +#: counter/models.py:75 counter/models.py:97 msgid "product type" msgstr "type du produit" -#: counter/models.py:101 +#: counter/models.py:100 msgid "purchase price" msgstr "prix d'achat" -#: counter/models.py:102 +#: counter/models.py:101 msgid "selling price" msgstr "prix de vente" -#: counter/models.py:103 +#: counter/models.py:102 msgid "special selling price" msgstr "prix de vente spécial" -#: counter/models.py:104 +#: counter/models.py:103 msgid "icon" msgstr "icône" -#: counter/models.py:106 +#: counter/models.py:105 msgid "limit age" msgstr "âge limite" -#: counter/models.py:107 +#: counter/models.py:106 msgid "tray price" msgstr "prix plateau" -#: counter/models.py:108 +#: counter/models.py:107 msgid "parent product" msgstr "produit parent" -#: counter/models.py:110 +#: counter/models.py:109 msgid "buying groups" msgstr "groupe d'achat" -#: counter/models.py:111 +#: counter/models.py:110 msgid "archived" msgstr "archivé" -#: counter/models.py:114 counter/models.py:486 +#: counter/models.py:113 counter/models.py:497 msgid "product" msgstr "produit" -#: counter/models.py:133 +#: counter/models.py:132 msgid "products" msgstr "produits" -#: counter/models.py:134 +#: counter/models.py:133 msgid "counter type" msgstr "type de comptoir" -#: counter/models.py:136 +#: counter/models.py:135 msgid "Bar" msgstr "Bar" -#: counter/models.py:136 +#: counter/models.py:135 msgid "Office" msgstr "Bureau" -#: counter/models.py:136 counter/templates/counter/counter_list.jinja:11 +#: counter/models.py:135 counter/templates/counter/counter_list.jinja:11 #: eboutic/templates/eboutic/eboutic_main.jinja:4 #: 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:304 sith/settings.py:312 +#: sith/settings.py:313 sith/settings.py:321 msgid "Eboutic" msgstr "Eboutic" -#: counter/models.py:137 +#: counter/models.py:136 msgid "sellers" msgstr "vendeurs" -#: counter/models.py:140 launderette/models.py:125 +#: counter/models.py:139 launderette/models.py:123 msgid "token" msgstr "jeton" -#: counter/models.py:143 counter/models.py:387 counter/models.py:404 -#: launderette/models.py:16 stock/models.py:12 +#: counter/models.py:142 counter/models.py:398 counter/models.py:415 +#: launderette/models.py:14 stock/models.py:14 msgid "counter" msgstr "comptoir" -#: counter/models.py:247 +#: counter/models.py:245 msgid "bank" msgstr "banque" -#: counter/models.py:249 counter/models.py:290 +#: counter/models.py:247 counter/models.py:293 msgid "is validated" msgstr "est validé" -#: counter/models.py:252 +#: counter/models.py:250 msgid "refilling" msgstr "rechargement" -#: counter/models.py:283 eboutic/models.py:103 +#: counter/models.py:286 eboutic/models.py:103 msgid "unit price" msgstr "prix unitaire" -#: counter/models.py:284 counter/models.py:476 eboutic/models.py:104 +#: counter/models.py:287 counter/models.py:487 eboutic/models.py:104 msgid "quantity" msgstr "quantité" -#: counter/models.py:289 +#: counter/models.py:292 msgid "Sith account" msgstr "Compte utilisateur" -#: counter/models.py:289 sith/settings.py:297 sith/settings.py:302 -#: sith/settings.py:324 +#: counter/models.py:292 sith/settings.py:306 sith/settings.py:311 +#: sith/settings.py:333 msgid "Credit card" msgstr "Carte bancaire" -#: counter/models.py:293 +#: counter/models.py:296 msgid "selling" msgstr "vente" -#: counter/models.py:312 +#: counter/models.py:315 msgid "Unknown event" msgstr "Événement inconnu" -#: counter/models.py:313 +#: counter/models.py:316 #, python-format msgid "Eticket bought for the event %(event)s" msgstr "Eticket acheté pour l'événement %(event)s" -#: counter/models.py:315 counter/models.py:327 +#: counter/models.py:318 counter/models.py:330 #, python-format msgid "" "You bought an eticket for the event %(event)s.\n" @@ -2285,51 +2658,51 @@ msgstr "" "Vous avez acheté un Eticket pour l'événement %(event)s.\n" "Vous pouvez le télécharger sur cette page: %(url)s" -#: counter/models.py:390 +#: counter/models.py:401 msgid "last activity date" msgstr "dernière activité" -#: counter/models.py:393 +#: counter/models.py:404 msgid "permanency" msgstr "permanence" -#: counter/models.py:407 +#: counter/models.py:418 msgid "emptied" msgstr "coffre vidée" -#: counter/models.py:410 +#: counter/models.py:421 msgid "cash register summary" msgstr "relevé de caisse" -#: counter/models.py:474 +#: counter/models.py:485 msgid "cash summary" msgstr "relevé" -#: counter/models.py:475 +#: counter/models.py:486 msgid "value" msgstr "valeur" -#: counter/models.py:477 +#: counter/models.py:488 msgid "check" msgstr "chèque" -#: counter/models.py:480 +#: counter/models.py:491 msgid "cash register summary item" msgstr "élément de relevé de caisse" -#: counter/models.py:487 +#: counter/models.py:498 msgid "banner" msgstr "bannière" -#: counter/models.py:488 +#: counter/models.py:499 msgid "event date" msgstr "date de l'événement" -#: counter/models.py:489 +#: counter/models.py:500 msgid "event title" msgstr "titre de l'événement" -#: counter/models.py:490 +#: counter/models.py:501 msgid "secret" msgstr "secret" @@ -2407,14 +2780,14 @@ msgstr "Non autorisé pour ce produit" #: counter/templates/counter/counter_click.jinja:45 #: counter/templates/counter/counter_click.jinja:79 msgid "No date of birth provided" -msgstr "Pas de date de naissance renseigné" +msgstr "Pas de date de naissance renseignée" #: counter/templates/counter/counter_click.jinja:55 #: counter/templates/counter/counter_click.jinja:103 #: counter/templates/counter/invoices_call.jinja:16 #: launderette/templates/launderette/launderette_admin.jinja:35 #: launderette/templates/launderette/launderette_click.jinja:13 -#: sas/templates/sas/moderation.jinja:39 sas/templates/sas/picture.jinja:74 +#: sas/templates/sas/picture.jinja:74 msgid "Go" msgstr "Valider" @@ -2501,10 +2874,6 @@ msgstr "Nouveau eticket" msgid "There is no eticket in this website." msgstr "Il n'y a pas de eticket sur ce site web." -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:491 -msgid "Invoices call" -msgstr "Appels à facture" - #: counter/templates/counter/invoices_call.jinja:8 #, python-format msgid "Invoices call for %(date)s" @@ -2514,10 +2883,6 @@ msgstr "Appels à facture pour %(date)s" msgid "Choose another month: " msgstr "Choisir un autre mois : " -#: counter/templates/counter/invoices_call.jinja:21 -msgid "Sum" -msgstr "Somme" - #: counter/templates/counter/last_ops.jinja:5 #: counter/templates/counter/last_ops.jinja:9 #, python-format @@ -2573,6 +2938,21 @@ msgstr "Promo" msgid "Percentage" msgstr "Pourcentage" +#: counter/templates/counter/stats.jinja:47 +#, python-format +msgid "Top 100 barman %(counter_name)s" +msgstr "Top 100 barman %(counter_name)s" + +#: counter/templates/counter/stats.jinja:53 +#: counter/templates/counter/stats.jinja:78 +msgid "Time" +msgstr "Heure" + +#: counter/templates/counter/stats.jinja:72 +#, python-format +msgid "Top 100 barman %(counter_name)s (all semesters)" +msgstr "Top 100 barman %(counter_name)s (tous les semestres)" + #: counter/views.py:55 msgid "User not found" msgstr "Utilisateur non trouvé" @@ -2587,7 +2967,7 @@ msgstr "Dernières opérations" #: counter/views.py:101 msgid "Take items from stock" -msgstr "" +msgstr "Prendre des éléments du stock" #: counter/views.py:135 msgid "Bad credentials" @@ -2619,7 +2999,7 @@ msgstr "Administration des comptoirs" #: counter/views.py:461 msgid "Stocks" -msgstr "" +msgstr "Stocks" #: counter/views.py:471 msgid "Products" @@ -2691,7 +3071,7 @@ msgstr "Montant du chèque" msgid "Check quantity" msgstr "Nombre de chèque" -#: counter/views.py:1078 +#: counter/views.py:1101 msgid "people(s)" msgstr "personne(s)" @@ -2754,47 +3134,204 @@ msgstr "Le paiement a été effectué" msgid "Return to eboutic" msgstr "Retourner à l'eboutic" -#: eboutic/views.py:141 +#: eboutic/views.py:145 msgid "You do not have enough money to buy the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: launderette/models.py:19 +#: election/models.py:16 +msgid "start candidature" +msgstr "début des candidatures" + +#: election/models.py:17 +msgid "end candidature" +msgstr "fin des candidatures" + +#: election/models.py:21 +msgid "edit groups" +msgstr "groupe d'édition" + +#: election/models.py:22 +msgid "view groups" +msgstr "groupe de vue" + +#: election/models.py:23 +msgid "vote groups" +msgstr "groupe de vote" + +#: election/models.py:24 +msgid "candidature groups" +msgstr "groupe de candidature" + +#: election/models.py:80 election/models.py:115 +msgid "election" +msgstr "élection" + +#: election/models.py:83 +msgid "max choice" +msgstr "nombre de choix maxi" + +#: election/models.py:128 +msgid "election list" +msgstr "liste électorale" + +#: election/models.py:142 +msgid "candidature" +msgstr "candidature" + +#: election/templates/election/candidate_form.jinja:4 +#: election/templates/election/candidate_form.jinja:13 +#: election/templates/election/election_detail.jinja:363 +msgid "Candidate" +msgstr "Candidater" + +#: election/templates/election/candidate_form.jinja:17 +msgid "Candidature are closed for this election" +msgstr "Les candidatures sont fermées pour cette élection" + +#: election/templates/election/election_detail.jinja:237 +msgid "Polls close " +msgstr "Votes fermés" + +#: election/templates/election/election_detail.jinja:239 +msgid "Polls closed " +msgstr "Votes fermés" + +#: election/templates/election/election_detail.jinja:241 +msgid "Polls will open " +msgstr "Les votes ouvriront " + +#: election/templates/election/election_detail.jinja:243 +#: election/templates/election/election_detail.jinja:247 +#: election/templates/election/election_list.jinja:31 +#: election/templates/election/election_list.jinja:34 +#: election/templates/election/election_list.jinja:39 +#: election/templates/election/election_list.jinja:42 +msgid " at " +msgstr " à " + +#: election/templates/election/election_detail.jinja:244 +msgid "and will close " +msgstr "et fermeront" + +#: election/templates/election/election_detail.jinja:252 +msgid "You already have submitted your vote." +msgstr "Vous avez déjà soumis votre vote." + +#: election/templates/election/election_detail.jinja:254 +msgid "You have voted in this election." +msgstr "Vous avez déjà voté pour cette élection." + +#: election/templates/election/election_detail.jinja:266 election/views.py:82 +msgid "Blank vote" +msgstr "Vote blanc" + +#: election/templates/election/election_detail.jinja:283 +msgid "You may choose up to" +msgstr "Vous pouvez choisir jusqu'à" + +#: election/templates/election/election_detail.jinja:283 +msgid "people." +msgstr "personne(s)" + +#: election/templates/election/election_detail.jinja:297 +msgid "Choose blank vote" +msgstr "Choisir de voter blanc" + +#: election/templates/election/election_detail.jinja:304 +#: election/templates/election/election_detail.jinja:342 +msgid "votes" +msgstr "votes" + +#: election/templates/election/election_detail.jinja:335 +#: launderette/templates/launderette/launderette_book.jinja:12 +msgid "Choose" +msgstr "Choisir" + +#: election/templates/election/election_detail.jinja:358 +msgid "Submit the vote !" +msgstr "Envoyer le vote !" + +#: election/templates/election/election_detail.jinja:365 +msgid "Add a new list" +msgstr "Ajouter une nouvelle liste" + +#: election/templates/election/election_detail.jinja:368 +msgid "Add a new role" +msgstr "Ajouter un nouveau rôle" + +#: election/templates/election/election_list.jinja:4 +msgid "Election list" +msgstr "Liste des élections" + +#: election/templates/election/election_list.jinja:21 +msgid "Current elections" +msgstr "Élections actuelles" + +#: election/templates/election/election_list.jinja:29 +msgid "Applications open from" +msgstr "Candidatures ouvertes à partir du" + +#: election/templates/election/election_list.jinja:32 +#: election/templates/election/election_list.jinja:40 +msgid "to" +msgstr "au" + +#: election/templates/election/election_list.jinja:37 +msgid "Polls open from" +msgstr "Votes ouverts du" + +#: election/views.py:44 +msgid "You have selected too much candidates." +msgstr "Vous avez sélectionné trop de candidats." + +#: election/views.py:59 +msgid "User to candidate" +msgstr "Utilisateur se présentant" + +#: election/views.py:102 +msgid "This role already exists for this election" +msgstr "Ce rôle existe déjà pour cette élection" + +#: election/views.py:132 +msgid "Start candidature" +msgstr "Début des candidatures" + +#: election/views.py:133 +msgid "End candidature" +msgstr "Fin des candidatures" + +#: launderette/models.py:17 #: launderette/templates/launderette/launderette_book.jinja:5 #: launderette/templates/launderette/launderette_book_choose.jinja:4 #: launderette/templates/launderette/launderette_main.jinja:4 msgid "Launderette" msgstr "Laverie" -#: launderette/models.py:61 launderette/models.py:86 +#: launderette/models.py:59 launderette/models.py:84 msgid "launderette" msgstr "laverie" -#: launderette/models.py:62 launderette/models.py:87 launderette/models.py:123 -#: stock/models.py:30 -msgid "type" -msgstr "type" - -#: launderette/models.py:63 +#: launderette/models.py:61 msgid "is working" msgstr "fonctionne" -#: launderette/models.py:66 +#: launderette/models.py:64 msgid "Machine" msgstr "Machine" -#: launderette/models.py:88 +#: launderette/models.py:86 msgid "borrow date" msgstr "date d'emprunt" -#: launderette/models.py:92 +#: launderette/models.py:90 msgid "Token" msgstr "Jeton" -#: launderette/models.py:98 +#: launderette/models.py:96 msgid "Token name can not be blank" msgstr "Le nom du jeton ne peut pas être vide" -#: launderette/models.py:124 +#: launderette/models.py:122 msgid "machine" msgstr "machine" @@ -2814,26 +3351,17 @@ msgstr "Machines" msgid "New machine" msgstr "Nouvelle machine" -#: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:148 -msgid "Type" -msgstr "Type" - -#: launderette/templates/launderette/launderette_book.jinja:12 -msgid "Choose" -msgstr "Choisir" - #: launderette/templates/launderette/launderette_book.jinja:23 msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:444 +#: sith/settings.py:454 msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:444 +#: sith/settings.py:454 msgid "Drying" msgstr "Séchage" @@ -2858,29 +3386,29 @@ msgstr "Éditer la page de présentation" msgid "Book launderette slot" msgstr "Réserver un créneau de laverie" -#: launderette/views.py:147 +#: launderette/views.py:155 msgid "Action" msgstr "Action" -#: launderette/views.py:150 +#: launderette/views.py:158 msgid "Tokens, separated by spaces" msgstr "Jetons, séparés par des espaces" -#: launderette/views.py:165 launderette/views.py:179 +#: launderette/views.py:173 launderette/views.py:187 #, python-format msgid "Token %(token_name)s does not exists" msgstr "Le jeton %(token_name)s n'existe pas" -#: launderette/views.py:173 +#: launderette/views.py:181 #, python-format msgid "Token %(token_name)s already exists" msgstr "Un jeton %(token_name)s existe déjà" -#: launderette/views.py:229 +#: launderette/views.py:237 msgid "User has booked no slot" msgstr "L'utilisateur n'a pas réservé de créneau" -#: launderette/views.py:319 +#: launderette/views.py:327 msgid "Token not found" msgstr "Jeton non trouvé" @@ -2892,25 +3420,25 @@ msgstr "Fusionner deux utilisateurs" msgid "Merge" msgstr "Fusion" -#: rootplace/views.py:66 +#: rootplace/views.py:65 msgid "User that will be kept" msgstr "Utilisateur qui sera conservé" -#: rootplace/views.py:67 +#: rootplace/views.py:66 msgid "User that will be deleted" msgstr "Utilisateur qui sera supprimé" -#: sas/models.py:102 +#: sas/models.py:132 msgid "picture" msgstr "photo" -#: sas/templates/sas/album.jinja:26 sas/templates/sas/album.jinja.py:28 -#: sas/templates/sas/album.jinja:30 sas/templates/sas/main.jinja:17 -#: sas/templates/sas/main.jinja.py:19 sas/templates/sas/main.jinja:21 +#: sas/templates/sas/album.jinja:52 sas/templates/sas/album.jinja.py:54 +#: sas/templates/sas/main.jinja:17 sas/templates/sas/main.jinja.py:19 +#: sas/templates/sas/main.jinja:21 msgid "preview" msgstr "miniature" -#: sas/templates/sas/album.jinja:52 +#: sas/templates/sas/album.jinja:86 msgid "Upload" msgstr "Envoyer" @@ -2922,197 +3450,323 @@ msgstr "Créer" msgid "SAS moderation" msgstr "Modération du SAS" -#: sas/templates/sas/moderation.jinja:27 -msgid "Asked for removal" -msgstr "Retrait demandé" +#: sas/templates/sas/moderation.jinja:10 +msgid "Albums" +msgstr "Albums" #: sas/templates/sas/picture.jinja:60 msgid "People" msgstr "Personne(s)" -#: sas/templates/sas/picture.jinja:85 +#: sas/templates/sas/picture.jinja:89 msgid "HD version" msgstr "Version HD" -#: sas/templates/sas/picture.jinja:89 +#: sas/templates/sas/picture.jinja:93 msgid "Rotate left" msgstr "Tourner vers la gauche" -#: sas/templates/sas/picture.jinja:90 +#: sas/templates/sas/picture.jinja:94 msgid "Rotate right" msgstr "Tourner vers la droite" -#: sas/templates/sas/picture.jinja:91 +#: sas/templates/sas/picture.jinja:95 msgid "Ask for removal" msgstr "Demander le retrait" -#: sas/views.py:25 +#: sas/templates/sas/picture.jinja:111 +msgid "Asked for removal" +msgstr "Retrait demandé" + +#: sas/views.py:27 msgid "Add a new album" msgstr "Ajouter un nouvel album" -#: sas/views.py:26 +#: sas/views.py:28 msgid "Upload images" msgstr "Envoyer les images" -#: sas/views.py:36 +#: sas/views.py:40 #, python-format msgid "Error creating album %(album)s: %(msg)s" msgstr "Erreur de création de l'album %(album)s : %(msg)s" -#: sas/views.py:53 +#: sas/views.py:64 msgid "Add user" msgstr "Ajouter une personne" -#: sith/settings.py:167 +#: sas/views.py:256 +msgid "Apply rights recursively" +msgstr "Appliquer les droits récursivement" + +#: sith/settings.py:177 msgid "English" msgstr "Anglais" -#: sith/settings.py:168 +#: sith/settings.py:178 msgid "French" msgstr "Français" -#: sith/settings.py:294 sith/settings.py:301 sith/settings.py:322 +#: sith/settings.py:287 +msgid "TC" +msgstr "TC" + +#: sith/settings.py:288 +msgid "IMSI" +msgstr "IMSI" + +#: sith/settings.py:289 +msgid "IMAP" +msgstr "IMAP" + +#: sith/settings.py:290 +msgid "INFO" +msgstr "INFO" + +#: sith/settings.py:291 +msgid "GI" +msgstr "GI" + +#: sith/settings.py:292 +msgid "E" +msgstr "E" + +#: sith/settings.py:293 +msgid "EE" +msgstr "EE" + +#: sith/settings.py:294 +msgid "GESC" +msgstr "GESC" + +#: sith/settings.py:295 +msgid "GMC" +msgstr "GMC" + +#: sith/settings.py:296 +msgid "MC" +msgstr "MC" + +#: sith/settings.py:297 +msgid "EDIM" +msgstr "EDIM" + +#: sith/settings.py:298 +msgid "Humanities" +msgstr "Humanités" + +#: sith/settings.py:299 +msgid "N/A" +msgstr "N/A" + +#: sith/settings.py:303 sith/settings.py:310 sith/settings.py:331 msgid "Check" msgstr "Chèque" -#: sith/settings.py:295 sith/settings.py:303 sith/settings.py:323 +#: sith/settings.py:304 sith/settings.py:312 sith/settings.py:332 msgid "Cash" msgstr "Espèces" -#: sith/settings.py:296 +#: sith/settings.py:305 msgid "Transfert" msgstr "Virement" -#: sith/settings.py:309 +#: sith/settings.py:318 msgid "Belfort" msgstr "Belfort" -#: sith/settings.py:310 +#: sith/settings.py:319 msgid "Sevenans" msgstr "Sevenans" -#: sith/settings.py:311 +#: sith/settings.py:320 msgid "Montbéliard" msgstr "Montbéliard" -#: sith/settings.py:351 +#: sith/settings.py:361 msgid "One semester" msgstr "Un semestre, 15 €" -#: sith/settings.py:356 +#: sith/settings.py:366 msgid "Two semesters" msgstr "Deux semestres, 28 €" -#: sith/settings.py:361 +#: sith/settings.py:371 msgid "Common core cursus" msgstr "Cursus tronc commun, 45 €" -#: sith/settings.py:366 +#: sith/settings.py:376 msgid "Branch cursus" msgstr "Cursus branche, 45 €" -#: sith/settings.py:371 +#: sith/settings.py:381 msgid "Alternating cursus" msgstr "Cursus alternant, 30 €" -#: sith/settings.py:376 +#: sith/settings.py:386 msgid "Honorary member" msgstr "Membre honoraire, 0 €" -#: sith/settings.py:381 +#: sith/settings.py:391 msgid "Assidu member" msgstr "Membre d'Assidu, 0 €" -#: sith/settings.py:386 +#: sith/settings.py:396 msgid "Amicale/DOCEO member" msgstr "Membre de l'Amicale/DOCEO, 0 €" -#: sith/settings.py:391 +#: sith/settings.py:401 msgid "UT network member" msgstr "Cotisant du réseau UT, 0 €" -#: sith/settings.py:396 +#: sith/settings.py:406 msgid "CROUS member" msgstr "Membres du CROUS, 0 €" -#: sith/settings.py:401 +#: sith/settings.py:411 msgid "Sbarro/ESTA member" msgstr "Membre de Sbarro ou de l'ESTA, 15 €" -#: sith/settings.py:409 +#: sith/settings.py:419 msgid "President" msgstr "Président" -#: sith/settings.py:410 +#: sith/settings.py:420 msgid "Vice-President" msgstr "Vice-Président" -#: sith/settings.py:411 +#: sith/settings.py:421 msgid "Treasurer" msgstr "Trésorier" -#: sith/settings.py:412 +#: sith/settings.py:422 msgid "Communication supervisor" msgstr "Responsable com" -#: sith/settings.py:413 +#: sith/settings.py:423 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:414 +#: sith/settings.py:424 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:415 +#: sith/settings.py:425 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:416 +#: sith/settings.py:426 msgid "Active member" msgstr "Membre actif" -#: sith/settings.py:417 +#: sith/settings.py:427 msgid "Curious" msgstr "Curieux" -#: stock/models.py:25 +#: sith/settings.py:461 +msgid "A fresh new to be moderated" +msgstr "Une nouvelle toute neuve à modérer" + +#: sith/settings.py:462 +msgid "New files to be moderated" +msgstr "Nouveaux fichiers à modérer" + +#: sith/settings.py:463 +msgid "New pictures/album to be moderated in the SAS" +msgstr "Nouvelles photos/albums à modérer dans le SAS" + +#: sith/settings.py:464 +msgid "You've been identified on some pictures" +msgstr "Vous avez été identifié sur des photos" + +#: sith/settings.py:465 +#, python-format +msgid "You just refilled of %s €" +msgstr "Vous avez rechargé votre compte de %s €" + +#: sith/settings.py:466 +#, python-format +msgid "You just bought %s" +msgstr "Vous avez acheté %s" + +#: sith/settings.py:467 +msgid "You have a notification" +msgstr "Vous avez une notification" + +#: stock/models.py:30 msgid "unit quantity" -msgstr "quantité unitaire" +msgstr "quantité unitaire " -#: stock/models.py:26 +#: stock/models.py:30 +msgid "number of element in one box" +msgstr "nombre d'éléments dans une boite" + +#: stock/models.py:31 msgid "effective quantity" -msgstr "quantité effective" +msgstr "qunatité effective" -#: stock/models.py:27 +#: stock/models.py:31 +msgid "number of box" +msgstr "nombre de boites" + +#: stock/models.py:32 msgid "minimal quantity" msgstr "quantité minimale" -#: stock/models.py:29 -msgid "quantity to buy" -msgstr "quantité à acheter" +#: stock/models.py:33 +msgid "" +"if the effective quantity is less than the minimal, item is added to the " +"shopping list" +msgstr "" +"si la quantité effective est plus petite que la minimale, l'élément est " +"ajouté à la liste de courses" -#: stock/models.py:46 +#: stock/models.py:53 msgid "todo" msgstr "à faire" -#: stock/models.py:47 -msgid "items to buy" -msgstr "éléments à acheter" +#: stock/models.py:70 +msgid "shopping lists" +msgstr "Listes de courses" + +#: stock/models.py:75 +msgid "quantity to buy" +msgstr "quantité à acheter" + +#: stock/models.py:75 +msgid "quantity to buy during the next shopping session" +msgstr "quantité à acheter pendant les prochaines courses" + +#: stock/models.py:76 +msgid "quantity bought" +msgstr "quantité achetée" + +#: stock/models.py:76 +msgid "quantity bought during the last shopping session" +msgstr "quantité achetée pendant les dernières courses" #: stock/templates/stock/shopping_list_items.jinja:4 #, python-format msgid "%(shoppinglist)s's items" msgstr "Éléments de %(shoppinglist)s" -#: stock/templates/stock/shopping_list_items.jinja:20 -msgid "Number" -msgstr "Nombre" +#: stock/templates/stock/shopping_list_items.jinja:21 +msgid "Quantity asked" +msgstr "Quantité demandée" + +#: stock/templates/stock/shopping_list_items.jinja:22 +msgid "Quantity bought" +msgstr "Quantité achetée" + +#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:188 +msgid "Comments" +msgstr "Commentaires" #: stock/templates/stock/shopping_list_quantity.jinja:4 #: stock/templates/stock/shopping_list_quantity.jinja:8 #, python-format msgid "%(s)s's quantity to buy" -msgstr "Quantité à acheter pour %(s)s" +msgstr "Quantité à acheter de %(s)s" #: stock/templates/stock/shopping_list_quantity.jinja:13 #: stock/templates/stock/stock_shopping_list.jinja:9 @@ -3129,7 +3783,7 @@ msgstr "Autres" #: stock/templates/stock/stock_item_list.jinja:30 msgid "There is no items in this stock." -msgstr "Il n'y a pas d'éléments dans ce comptoir." +msgstr "Il n'y a pas d'éléments dans ce stock." #: stock/templates/stock/stock_list.jinja:4 #: stock/templates/stock/stock_list.jinja:9 @@ -3140,19 +3794,10 @@ msgstr "Liste des stocks" msgid "There is no stocks in this website." msgstr "Il n'y a pas de stock sur ce site web." -#: stock/templates/stock/stock_main.jinja:9 -msgid "New Item" -msgstr "Nouvel élément" - -#: stock/templates/stock/stock_shopping_list.jinja:4 -#, python-format -msgid "Shopping list for %(s)s" -msgstr "Liste de courses pour %(s)s" - #: stock/templates/stock/stock_shopping_list.jinja:11 #, python-format msgid "Shopping lists history for %(s)s" -msgstr "Historique des listes de courses pour %(s)s" +msgstr "Historique des listes de courses de %(s)s" #: stock/templates/stock/stock_shopping_list.jinja:14 msgid "Information :" @@ -3163,17 +3808,17 @@ msgid "" "Use the \"update stock\" action when you get back from shopping to add the " "effective quantity bought for each shopping list item." msgstr "" -"L'action \"Mettre à jour le stock\" doit être utilisée lorsque vous revenez " -"des courses pour ajouter les quantités effectivement achetées pour chaque " -"élément." +"Utiliser l'action \"Mettre le stock à jour\" quand vous revenez des courses " +"pour ajouter les quantités réellement achétées pour chacun des éléments de " +"la liste" #: stock/templates/stock/stock_shopping_list.jinja:18 msgid "" -"For example, 3 Cheesburger (boxes) are aksing in the list, but there were " +"For example, 3 Cheeseburger (boxes) are aksing in the list, but there were " "only 2 so, 2 have to be added in the stock quantity." msgstr "" -"Par exemple, 3 boites de cheeseburger sont demandées dans la liste, mais il " -"n'y en avait plus que 2, donc 2 doivent être ajoutées au stock." +"Par exemple, 3 Cheeseburger (boites) sont demandées dans la liste, mais il " +"n'en restait plus que 2, donc seulement 2 doivent être ajoutés au stock" #: stock/templates/stock/stock_shopping_list.jinja:21 msgid "To do" @@ -3186,11 +3831,11 @@ msgstr "Nombre d'éléments" #: stock/templates/stock/stock_shopping_list.jinja:37 msgid "Update stock" -msgstr "Mettre à jour le stock" +msgstr "Mettre le stock à jour" #: stock/templates/stock/stock_shopping_list.jinja:40 msgid "Mark as done" -msgstr "Marquer comme effectué(e)" +msgstr "Marquer comme ancien" #: stock/templates/stock/stock_shopping_list.jinja:66 msgid "Mark as to do" @@ -3199,24 +3844,46 @@ msgstr "Marquer comme à faire" #: stock/templates/stock/stock_take_items.jinja:5 #: stock/templates/stock/stock_take_items.jinja:9 #, python-format -msgid "Take items form %(s)s" -msgstr "" +msgid "Take items from %(s)s" +msgstr "Prendre des éléments dans %(s)s" #: stock/templates/stock/stock_take_items.jinja:14 -#, fuzzy -#| msgid "Take picture" msgid "Take items" -msgstr "Prendre une photo" +msgstr "Prendre un élément" #: stock/templates/stock/update_after_shopping.jinja:4 #: stock/templates/stock/update_after_shopping.jinja:8 #, python-format msgid "Update %(s)s's quantity after shopping" -msgstr "Mise à jour des stocks selon les quantités achetées pour %(s)s" +msgstr "Mettre à jour les quantités de %(s)s après les courses" #: stock/templates/stock/update_after_shopping.jinja:13 msgid "Update stock quantities" +msgstr "Mettre à jour les quantités du stock" + +#: stock/views.py:181 +msgid "Shopping list name" +msgstr "Nom de la liste de course" + +#: stock/views.py:187 +msgid " left" +msgstr " restant(s)" + +#: stock/views.py:189 +msgid "" +"Add here, items to buy that are not reference as a stock item (example : " +"sponge, knife, mugs ...)" msgstr "" +"Ajouter ici les éléments à acheter qui ne sont pas référencés comme un " +"élément du stock (exemple : éponges, couteaux, tasses ..." + +#: stock/views.py:317 +msgid " asked" +msgstr " demandé(s)" + +#: stock/views.py:383 +msgid "(" +msgstr "(" #: subscription/models.py:16 msgid "Bad subscription type" @@ -3226,38 +3893,35 @@ msgstr "Mauvais type de cotisation" msgid "Bad payment method" msgstr "Mauvais type de paiement" -#: subscription/models.py:52 +#: subscription/models.py:24 msgid "subscription type" msgstr "type d'inscription" -#: subscription/models.py:55 +#: subscription/models.py:27 msgid "subscription start" msgstr "début de la cotisation" -#: subscription/models.py:56 +#: subscription/models.py:28 msgid "subscription end" msgstr "fin de la cotisation" -#: subscription/models.py:59 +#: subscription/models.py:31 msgid "location" msgstr "lieu" -#: subscription/models.py:68 +#: subscription/models.py:40 msgid "You can not subscribe many time for the same period" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" -#: subscription/models.py:72 +#: subscription/models.py:44 msgid "Subscription error" msgstr "Erreur de cotisation" -#: subscription/views.py:54 +#: subscription/views.py:50 msgid "A user with that email address already exists" msgstr "Un utilisateur avec cette adresse email existe déjà" -#: subscription/views.py:70 +#: subscription/views.py:66 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 "Stock items list" -#~ msgstr "Liste des éléments du stock" +"Vous devez soit choisir un utilisateur existant, soit en créer un proprement" diff --git a/stock/models.py b/stock/models.py index 903be49a..760fa262 100644 --- a/stock/models.py +++ b/stock/models.py @@ -27,10 +27,10 @@ class StockItem(models.Model): The StockItem class, element of the stock """ name = models.CharField(_('name'), max_length=64) - unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text='number of element in one box') - effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text='number of box') + unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text=_('number of element in one box')) + effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text=_('number of box')) minimal_quantity = models.IntegerField(_('minimal quantity'), default=1, - help_text='if the effective quantity is less than the minimal, item is added to the shopping list') + help_text=_('if the effective quantity is less than the minimal, item is added to the shopping list')) type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, on_delete=models.SET_NULL) stock_owner = models.ForeignKey(Stock, related_name="items") @@ -67,13 +67,13 @@ class ShoppingList(models.Model): class ShoppingListItem(models.Model): """ """ - shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_('shopping lists'), related_name="shopping_items_to_buy") + shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_("shopping lists"), related_name="shopping_items_to_buy") stockitem_owner = models.ForeignKey(StockItem, related_name="shopping_item", null=True) name = models.CharField(_('name'), max_length=64) type = models.ForeignKey(ProductType, related_name="shoppinglist_items", verbose_name=_("type"), null=True, blank=True, on_delete=models.SET_NULL) - tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text="quantity to buy during the next shopping session") - bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text="quantity bought during the last shopping session") + tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text=_("quantity to buy during the next shopping session")) + bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text=_("quantity bought during the last shopping session")) def __str__(self): return "%s - %s" % (self.name, self.shopping_lists.first()) diff --git a/stock/templates/stock/shopping_list_items.jinja b/stock/templates/stock/shopping_list_items.jinja index 24f3b93c..bafcd872 100644 --- a/stock/templates/stock/shopping_list_items.jinja +++ b/stock/templates/stock/shopping_list_items.jinja @@ -34,7 +34,7 @@

    {{ s.name }} {{ s.items_to_buy.count() }} - {% trans %}Mark as todo{% endtrans %} + {% trans %}Mark as to do{% endtrans %} {% trans %}Delete{% endtrans %} diff --git a/stock/views.py b/stock/views.py index aff866cc..2b4468c6 100644 --- a/stock/views.py +++ b/stock/views.py @@ -170,7 +170,7 @@ class StockItemQuantityForm(forms.BaseForm): shopping_list.stock_owner = self.stock shopping_list.save() for k,t in self.cleaned_data.items(): - if t is not None: + if int(t) > 0 : item_id = int(k[5:]) item = StockItem.objects.filter(id=item_id).first() item.tobuy_quantity = t From 2f721592f123ca73a6908cf5683a0b332ea79da7 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Thu, 29 Dec 2016 18:50:19 +0100 Subject: [PATCH 16/27] Update stock items quantity after shopping --- locale/fr/LC_MESSAGES/django.po | 3247 +++++++++++++++++ .../templates/stock/stock_shopping_list.jinja | 11 + .../stock/update_after_shopping.jinja | 16 + stock/urls.py | 2 + stock/views.py | 72 +- 5 files changed, 3342 insertions(+), 6 deletions(-) create mode 100644 locale/fr/LC_MESSAGES/django.po create mode 100644 stock/templates/stock/update_after_shopping.jinja diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 00000000..b868605f --- /dev/null +++ b/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,3247 @@ +# Sith AE french translation file +# Copyright (C) 2016 +# This file is distributed under the same license as the Sith package. +# Skia , 2016 +# +msgid "" +msgstr "" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-29 18:13+0100\n" +"PO-Revision-Date: 2016-07-18\n" +"Last-Translator: Skia \n" +"Language-Team: AE info \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: accounting/models.py:36 accounting/models.py:58 accounting/models.py:85 +#: accounting/models.py:144 club/models.py:19 counter/models.py:71 +#: counter/models.py:96 counter/models.py:131 launderette/models.py:15 +#: launderette/models.py:60 launderette/models.py:85 stock/models.py:11 +#: stock/models.py:24 stock/models.py:45 +msgid "name" +msgstr "nom" + +#: accounting/models.py:37 +msgid "street" +msgstr "rue" + +#: accounting/models.py:38 +msgid "city" +msgstr "ville" + +#: accounting/models.py:39 +msgid "postcode" +msgstr "code postal" + +#: accounting/models.py:40 +msgid "country" +msgstr "pays" + +#: accounting/models.py:41 core/models.py:168 +msgid "phone" +msgstr "téléphone" + +#: accounting/models.py:42 +msgid "email" +msgstr "email" + +#: accounting/models.py:43 +msgid "website" +msgstr "site internet" + +#: accounting/models.py:46 +msgid "company" +msgstr "entreprise" + +#: accounting/models.py:59 +msgid "iban" +msgstr "IBAN" + +#: accounting/models.py:60 +msgid "account number" +msgstr "numero de compte" + +#: accounting/models.py:61 accounting/models.py:86 club/models.py:146 +#: counter/models.py:105 counter/models.py:132 +msgid "club" +msgstr "club" + +#: accounting/models.py:64 +msgid "Bank account" +msgstr "Compte en banque" + +#: accounting/models.py:87 +msgid "bank account" +msgstr "compte en banque" + +#: accounting/models.py:90 +msgid "Club account" +msgstr "Compte club" + +#: accounting/models.py:135 +#, python-format +msgid "%(club_account)s on %(bank_account)s" +msgstr "%(club_account)s sur %(bank_account)s" + +#: accounting/models.py:142 club/models.py:147 counter/models.py:388 +#: launderette/models.py:122 +msgid "start date" +msgstr "date de début" + +#: accounting/models.py:143 club/models.py:148 counter/models.py:389 +msgid "end date" +msgstr "date de fin" + +#: accounting/models.py:145 +msgid "is closed" +msgstr "est fermé" + +#: accounting/models.py:146 accounting/models.py:349 +msgid "club account" +msgstr "compte club" + +#: accounting/models.py:147 accounting/models.py:193 counter/models.py:29 +#: counter/models.py:241 +msgid "amount" +msgstr "montant" + +#: accounting/models.py:148 +msgid "effective_amount" +msgstr "montant effectif" + +#: accounting/models.py:151 +msgid "General journal" +msgstr "Classeur" + +#: accounting/models.py:191 +msgid "number" +msgstr "numéro" + +#: accounting/models.py:192 +msgid "journal" +msgstr "classeur" + +#: accounting/models.py:194 core/models.py:515 core/models.py:818 +#: counter/models.py:244 counter/models.py:287 counter/models.py:405 +#: eboutic/models.py:15 eboutic/models.py:48 stock/models.py:44 +msgid "date" +msgstr "date" + +#: accounting/models.py:195 counter/models.py:406 +msgid "comment" +msgstr "commentaire" + +#: accounting/models.py:196 counter/models.py:245 counter/models.py:288 +#: subscription/models.py:57 +msgid "payment method" +msgstr "méthode de paiement" + +#: accounting/models.py:197 +msgid "cheque number" +msgstr "numéro de chèque" + +#: accounting/models.py:198 eboutic/models.py:116 +msgid "invoice" +msgstr "facture" + +#: accounting/models.py:199 +msgid "is done" +msgstr "est fait" + +#: accounting/models.py:201 +msgid "simple type" +msgstr "type simplifié" + +#: accounting/models.py:203 accounting/models.py:304 +msgid "accounting type" +msgstr "type comptable" + +#: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325 +#: accounting/models.py:348 counter/models.py:279 +msgid "label" +msgstr "intitulé" + +#: accounting/models.py:206 +msgid "target type" +msgstr "type de cible" + +#: accounting/models.py:207 club/templates/club/club_members.jinja:8 +#: club/templates/club/club_old_members.jinja:8 +#: core/templates/core/user_clubs.jinja:15 +#: core/templates/core/user_clubs.jinja:41 +#: counter/templates/counter/cash_summary_list.jinja:32 +#: counter/templates/counter/stats.jinja:15 +#: launderette/templates/launderette/launderette_admin.jinja:44 +msgid "User" +msgstr "Utilisateur" + +#: accounting/models.py:207 club/templates/club/club_detail.jinja:5 +#: counter/templates/counter/invoices_call.jinja:20 +msgid "Club" +msgstr "Club" + +#: accounting/models.py:207 core/views/user.py:179 +msgid "Account" +msgstr "Compte" + +#: accounting/models.py:207 +msgid "Company" +msgstr "Entreprise" + +#: accounting/models.py:207 sith/settings.py:305 +msgid "Other" +msgstr "Autre" + +#: accounting/models.py:208 +msgid "target id" +msgstr "id de la cible" + +#: accounting/models.py:209 +msgid "target label" +msgstr "nom de la cible" + +#: accounting/models.py:210 +msgid "linked operation" +msgstr "opération liée" + +#: accounting/models.py:226 +#, python-format +msgid "" +"The date can not be before the start date of the journal, which is\n" +"%(start_date)s." +msgstr "" +"La date ne peut pas être avant la date de début du journal, qui est\n" +"%(start_date)s." + +#: accounting/models.py:229 +msgid "Target does not exists" +msgstr "La cible n'existe pas." + +#: accounting/models.py:231 +msgid "Please add a target label if you set no existing target" +msgstr "" +"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" + +#: accounting/models.py:233 +msgid "" +"You need to provide ether a simplified accounting type or a standard " +"accounting type" +msgstr "" +"Vous devez fournir soit un type comptable simplifié ou un type comptable " +"standard" + +#: accounting/models.py:294 counter/models.py:100 +msgid "code" +msgstr "code" + +#: accounting/models.py:296 +msgid "An accounting type code contains only numbers" +msgstr "Un code comptable ne contient que des numéros" + +#: accounting/models.py:300 +msgid "movement type" +msgstr "type de mouvement" + +#: accounting/models.py:300 accounting/views.py:388 +msgid "Credit" +msgstr "Crédit" + +#: accounting/models.py:300 accounting/views.py:388 +msgid "Debit" +msgstr "Débit" + +#: accounting/models.py:301 +msgid "Neutral" +msgstr "Neutre" + +#: accounting/models.py:327 +msgid "simplified accounting types" +msgstr "type simplifié" + +#: accounting/models.py:330 +msgid "simplified type" +msgstr "type simplifié" + +#: accounting/templates/accounting/accountingtype_list.jinja:4 +#: accounting/templates/accounting/accountingtype_list.jinja:15 +msgid "Accounting type list" +msgstr "Liste des types comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:9 +#: accounting/templates/accounting/bank_account_details.jinja:9 +#: accounting/templates/accounting/bank_account_list.jinja:9 +#: accounting/templates/accounting/club_account_details.jinja:9 +#: accounting/templates/accounting/journal_details.jinja:9 +#: accounting/templates/accounting/label_list.jinja:9 +#: accounting/templates/accounting/operation_edit.jinja:9 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:9 +#: core/templates/core/user_tools.jinja:52 +msgid "Accounting" +msgstr "Comptabilité" + +#: accounting/templates/accounting/accountingtype_list.jinja:10 +msgid "Accounting types" +msgstr "Type comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:13 +msgid "New accounting type" +msgstr "Nouveau type comptable" + +#: accounting/templates/accounting/accountingtype_list.jinja:22 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:22 +msgid "There is no types in this website." +msgstr "Il n'y a pas de types comptable dans ce site web." + +#: accounting/templates/accounting/bank_account_details.jinja:4 +#: accounting/templates/accounting/bank_account_details.jinja:13 +#: core/templates/core/user_tools.jinja:60 +msgid "Bank account: " +msgstr "Compte en banque : " + +#: accounting/templates/accounting/bank_account_details.jinja:15 +#: accounting/templates/accounting/club_account_details.jinja:16 +#: accounting/templates/accounting/label_list.jinja:21 +#: club/templates/club/club_sellings.jinja:49 +#: core/templates/core/file_detail.jinja:43 +#: core/templates/core/file_moderation.jinja:24 +#: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:66 +#: core/templates/core/user_account_detail.jinja:38 +#: core/templates/core/user_edit.jinja:19 +#: counter/templates/counter/last_ops.jinja:29 +#: counter/templates/counter/last_ops.jinja:59 +#: launderette/templates/launderette/launderette_admin.jinja:16 +#: launderette/views.py:146 sas/templates/sas/moderation.jinja:35 +#: sas/templates/sas/picture.jinja:66 +#: stock/templates/stock/stock_shopping_list.jinja:43 +#: stock/templates/stock/stock_shopping_list.jinja:69 +msgid "Delete" +msgstr "Supprimer" + +#: accounting/templates/accounting/bank_account_details.jinja:17 +#: club/views.py:32 core/views/user.py:130 sas/templates/sas/picture.jinja:78 +msgid "Infos" +msgstr "Infos" + +#: accounting/templates/accounting/bank_account_details.jinja:19 +msgid "IBAN: " +msgstr "IBAN : " + +#: accounting/templates/accounting/bank_account_details.jinja:20 +msgid "Number: " +msgstr "Numéro : " + +#: accounting/templates/accounting/bank_account_details.jinja:22 +msgid "New club account" +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:55 +#: accounting/templates/accounting/journal_details.jinja:71 club/views.py:54 +#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 +#: core/templates/core/user_tools.jinja:37 core/views/user.py:152 +#: counter/templates/counter/cash_summary_list.jinja:53 +#: counter/templates/counter/counter_list.jinja:17 +#: counter/templates/counter/counter_list.jinja:32 +#: counter/templates/counter/counter_list.jinja:53 +#: launderette/templates/launderette/launderette_list.jinja:16 +#: sas/templates/sas/album.jinja:18 sas/templates/sas/picture.jinja:88 +msgid "Edit" +msgstr "Éditer" + +#: accounting/templates/accounting/bank_account_list.jinja:4 +#: accounting/templates/accounting/bank_account_list.jinja:17 +msgid "Bank account list" +msgstr "Liste des comptes en banque" + +#: accounting/templates/accounting/bank_account_list.jinja:12 +msgid "Manage simplified types" +msgstr "Gérer les types simplifiés" + +#: accounting/templates/accounting/bank_account_list.jinja:13 +msgid "Manage accounting types" +msgstr "Gérer les types comptable" + +#: accounting/templates/accounting/bank_account_list.jinja:14 +msgid "New bank account" +msgstr "Nouveau compte en banque" + +#: accounting/templates/accounting/bank_account_list.jinja:26 +msgid "There is no accounts in this website." +msgstr "Il n'y a pas de comptes dans ce site web." + +#: accounting/templates/accounting/club_account_details.jinja:4 +#: accounting/templates/accounting/club_account_details.jinja:14 +msgid "Club account:" +msgstr "Compte club : " + +#: accounting/templates/accounting/club_account_details.jinja:18 +#: accounting/templates/accounting/journal_details.jinja:16 +#: accounting/templates/accounting/label_list.jinja:15 +msgid "New label" +msgstr "Nouvelle étiquette" + +#: accounting/templates/accounting/club_account_details.jinja:19 +#: accounting/templates/accounting/journal_details.jinja:17 +#: accounting/templates/accounting/label_list.jinja:4 +#: accounting/templates/accounting/label_list.jinja:17 +msgid "Label list" +msgstr "Liste des étiquettes" + +#: accounting/templates/accounting/club_account_details.jinja:21 +msgid "New journal" +msgstr "Nouveau classeur" + +#: accounting/templates/accounting/club_account_details.jinja:23 +msgid "You can not create new journal while you still have one opened" +msgstr "Vous ne pouvez pas créer de journal tant qu'il y en a un d'ouvert" + +#: accounting/templates/accounting/club_account_details.jinja:28 +#: launderette/templates/launderette/launderette_admin.jinja:43 +#: stock/templates/stock/shopping_list_items.jinja:19 +#: stock/templates/stock/stock_shopping_list.jinja:26 +#: stock/templates/stock/stock_shopping_list.jinja:55 +msgid "Name" +msgstr "Nom" + +#: accounting/templates/accounting/club_account_details.jinja:29 +msgid "Start" +msgstr "" + +#: accounting/templates/accounting/club_account_details.jinja:30 +msgid "End" +msgstr "Fin" + +#: accounting/templates/accounting/club_account_details.jinja:31 +#: accounting/templates/accounting/journal_details.jinja:31 +#: core/templates/core/user_account_detail.jinja:53 +#: core/templates/core/user_account_detail.jinja:80 +#: counter/templates/counter/last_ops.jinja:17 +msgid "Amount" +msgstr "Montant" + +#: accounting/templates/accounting/club_account_details.jinja:32 +msgid "Effective amount" +msgstr "Montant effectif" + +#: accounting/templates/accounting/club_account_details.jinja:33 +msgid "Closed" +msgstr "Fermé" + +#: accounting/templates/accounting/club_account_details.jinja:34 +#: accounting/templates/accounting/journal_details.jinja:39 +msgid "Actions" +msgstr "Actions" + +#: accounting/templates/accounting/club_account_details.jinja:50 +#: accounting/templates/accounting/journal_details.jinja:59 +msgid "Yes" +msgstr "Oui" + +#: accounting/templates/accounting/club_account_details.jinja:52 +#: accounting/templates/accounting/journal_details.jinja:61 +msgid "No" +msgstr "Non" + +#: accounting/templates/accounting/club_account_details.jinja:54 +#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28 +msgid "View" +msgstr "Voir" + +#: accounting/templates/accounting/journal_details.jinja:4 +#: accounting/templates/accounting/journal_details.jinja:15 +msgid "General journal:" +msgstr "Classeur : " + +#: accounting/templates/accounting/journal_details.jinja:18 +#: core/templates/core/user_account.jinja:38 +#: core/templates/core/user_account_detail.jinja:10 +#: counter/templates/counter/counter_click.jinja:32 +msgid "Amount: " +msgstr "Montant : " + +#: accounting/templates/accounting/journal_details.jinja:19 +msgid "Effective amount: " +msgstr "Montant effectif: " + +#: accounting/templates/accounting/journal_details.jinja:21 +msgid "Journal is closed, you can not create operation" +msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération" + +#: accounting/templates/accounting/journal_details.jinja:23 +msgid "New operation" +msgstr "Nouvelle opération" + +#: accounting/templates/accounting/journal_details.jinja:28 +#: counter/templates/counter/stats.jinja:14 +msgid "Nb" +msgstr "No" + +#: accounting/templates/accounting/journal_details.jinja:29 +#: club/templates/club/club_sellings.jinja:19 +#: core/templates/core/user_account_detail.jinja:17 +#: core/templates/core/user_account_detail.jinja:50 +#: core/templates/core/user_account_detail.jinja:78 +#: counter/templates/counter/cash_summary_list.jinja:34 +#: counter/templates/counter/last_ops.jinja:14 +#: counter/templates/counter/last_ops.jinja:39 +#: stock/templates/stock/stock_shopping_list.jinja:25 +#: stock/templates/stock/stock_shopping_list.jinja:54 +msgid "Date" +msgstr "Date" + +#: accounting/templates/accounting/journal_details.jinja:30 +#: club/templates/club/club_sellings.jinja:23 +#: core/templates/core/user_account_detail.jinja:20 +#: counter/templates/counter/last_ops.jinja:42 +msgid "Label" +msgstr "Étiquette" + +#: accounting/templates/accounting/journal_details.jinja:32 +msgid "Payment mode" +msgstr "Méthode de paiement" + +#: accounting/templates/accounting/journal_details.jinja:33 +msgid "Target" +msgstr "Cible" + +#: accounting/templates/accounting/journal_details.jinja:34 +msgid "Code" +msgstr "Code" + +#: accounting/templates/accounting/journal_details.jinja:35 +msgid "Nature" +msgstr "Nature" + +#: accounting/templates/accounting/journal_details.jinja:36 +#: stock/templates/stock/stock_shopping_list.jinja:50 +msgid "Done" +msgstr "Effectué" + +#: accounting/templates/accounting/journal_details.jinja:37 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:721 +msgid "Comment" +msgstr "Commentaire" + +#: accounting/templates/accounting/journal_details.jinja:38 +msgid "File" +msgstr "Fichier" + +#: accounting/templates/accounting/journal_details.jinja:40 +msgid "PDF" +msgstr "" + +#: accounting/templates/accounting/journal_details.jinja:74 +msgid "Generate" +msgstr "Générer" + +#: accounting/templates/accounting/label_list.jinja:14 +msgid "Back to club account" +msgstr "Retour au compte club" + +#: accounting/templates/accounting/label_list.jinja:26 +msgid "There is no label in this club account." +msgstr "Il n'y a pas d'étiquette dans ce compte club." + +#: accounting/templates/accounting/operation_edit.jinja:4 +#: accounting/templates/accounting/operation_edit.jinja:13 +#: accounting/templates/accounting/operation_edit.jinja:16 +msgid "Edit operation" +msgstr "Éditer l'opération" + +#: accounting/templates/accounting/operation_edit.jinja:41 +#: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7 +#: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20 +#: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 +#: core/templates/core/pagerev_edit.jinja:24 +#: core/templates/core/user_godfathers.jinja:35 +#: counter/templates/counter/cash_register_summary.jinja:22 +#: subscription/templates/subscription/subscription.jinja:23 +msgid "Save" +msgstr "Sauver" + +#: accounting/templates/accounting/refound_account.jinja:4 +#: accounting/templates/accounting/refound_account.jinja:8 +#: accounting/views.py:530 +msgid "Refound account" +msgstr "Remboursement de compte" + +#: accounting/templates/accounting/refound_account.jinja:12 +msgid "Refound" +msgstr "Rembourser" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:4 +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:15 +msgid "Simplified type list" +msgstr "Liste des types simplifiés" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:10 +msgid "Simplified types" +msgstr "Types simplifiés" + +#: accounting/templates/accounting/simplifiedaccountingtype_list.jinja:13 +msgid "New simplified type" +msgstr "Nouveau type simplifié" + +#: accounting/views.py:365 accounting/views.py:371 +msgid "Operation" +msgstr "Opération" + +#: accounting/views.py:371 +msgid "Journal" +msgstr "Classeur" + +#: accounting/views.py:382 +msgid "Financial proof: " +msgstr "Justificatif de libellé : " + +#: accounting/views.py:383 +#, python-format +msgid "Club: %(club_name)s" +msgstr "Club : %(club_name)s" + +#: accounting/views.py:384 +#, python-format +msgid "Label: %(op_label)s" +msgstr "Libellé : %(op_label)s" + +#: accounting/views.py:390 +#, python-format +msgid "Amount: %(amount).2f €" +msgstr "Montant : %(amount).2f €" + +#: accounting/views.py:402 +msgid "Debtor" +msgstr "Débiteur" + +#: accounting/views.py:402 +msgid "Creditor" +msgstr "Créditeur" + +#: accounting/views.py:404 +msgid "Comment:" +msgstr "Commentaire :" + +#: accounting/views.py:491 +msgid "Refound this account" +msgstr "Rembourser ce compte" + +#: club/models.py:21 +msgid "unix name" +msgstr "nom unix" + +#: club/models.py:25 +msgid "" +"Enter a valid unix name. This value may contain only letters, numbers ./-/_ " +"characters." +msgstr "" +"Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " +"lettres, des nombres, et les caractères ./-/_" + +#: club/models.py:30 +msgid "A club with that unix name already exists." +msgstr "Un club avec ce nom UNIX existe déjà." + +#: club/models.py:33 core/models.py:170 +msgid "address" +msgstr "Adresse" + +#: club/models.py:39 core/models.py:118 +msgid "home" +msgstr "home" + +#: club/models.py:48 +msgid "You can not make loops in clubs" +msgstr "Vous ne pouvez pas faire de boucles dans les clubs" + +#: club/models.py:62 +msgid "A club with that unix_name already exists" +msgstr "Un club avec ce nom UNIX existe déjà." + +#: club/models.py:145 counter/models.py:386 counter/models.py:403 +#: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 +#: launderette/models.py:126 sas/models.py:101 +msgid "user" +msgstr "nom d'utilisateur" + +#: club/models.py:149 core/models.py:137 +msgid "role" +msgstr "rôle" + +#: club/models.py:151 core/models.py:33 counter/models.py:72 +#: counter/models.py:97 +msgid "description" +msgstr "description" + +#: club/models.py:156 +msgid "User must be subscriber to take part to a club" +msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" + +#: club/models.py:158 +msgid "User is already member of that club" +msgstr "L'utilisateur est déjà membre de ce club" + +#: club/models.py:167 +msgid "past member" +msgstr "Anciens membres" + +#: club/templates/club/club_list.jinja:4 club/templates/club/club_list.jinja:24 +msgid "Club list" +msgstr "Liste des clubs" + +#: club/templates/club/club_list.jinja:21 +#: core/templates/core/user_tools.jinja:19 +msgid "New club" +msgstr "Nouveau club" + +#: club/templates/club/club_list.jinja:31 +msgid "There is no club in this website." +msgstr "Il n'y a pas de club dans ce site web." + +#: club/templates/club/club_members.jinja:5 +msgid "Club members" +msgstr "Membres du club" + +#: club/templates/club/club_members.jinja:9 +#: club/templates/club/club_old_members.jinja:9 +#: core/templates/core/user_clubs.jinja:16 +#: core/templates/core/user_clubs.jinja:42 +msgid "Role" +msgstr "Rôle" + +#: club/templates/club/club_members.jinja:10 +#: club/templates/club/club_old_members.jinja:10 +#: core/templates/core/user_clubs.jinja:17 +#: core/templates/core/user_clubs.jinja:43 +msgid "Description" +msgstr "description" + +#: club/templates/club/club_members.jinja:11 +#: core/templates/core/user_clubs.jinja:18 +#: launderette/templates/launderette/launderette_admin.jinja:45 +msgid "Since" +msgstr "Depuis" + +#: club/templates/club/club_members.jinja:21 +#: core/templates/core/user_clubs.jinja:29 +msgid "Mark as old" +msgstr "Marquer comme ancien" + +#: club/templates/club/club_members.jinja:30 +#: core/templates/core/file_detail.jinja:19 core/views/forms.py:203 +#: launderette/views.py:146 +msgid "Add" +msgstr "Ajouter" + +#: club/templates/club/club_old_members.jinja:5 +msgid "Club old members" +msgstr "Anciens membres du club" + +#: club/templates/club/club_old_members.jinja:11 +#: core/templates/core/user_clubs.jinja:44 +msgid "From" +msgstr "Du" + +#: club/templates/club/club_old_members.jinja:12 +#: core/templates/core/user_clubs.jinja:45 +msgid "To" +msgstr "Au" + +#: club/templates/club/club_sellings.jinja:5 club/views.py:59 club/views.py:216 +#: counter/templates/counter/counter_main.jinja:19 +#: counter/templates/counter/last_ops.jinja:35 +msgid "Sellings" +msgstr "Ventes" + +#: club/templates/club/club_sellings.jinja:9 +#: counter/templates/counter/cash_summary_list.jinja:15 +msgid "Show" +msgstr "Montrer" + +#: club/templates/club/club_sellings.jinja:10 +msgid "Download as cvs" +msgstr "Télécharger en CSV" + +#: club/templates/club/club_sellings.jinja:13 +msgid "Quantity: " +msgstr "Quantité : " + +#: club/templates/club/club_sellings.jinja:13 +msgid "units" +msgstr "unités" + +#: club/templates/club/club_sellings.jinja:14 +#: counter/templates/counter/counter_click.jinja:70 +#: counter/templates/counter/counter_main.jinja:28 +#: eboutic/templates/eboutic/eboutic_main.jinja:34 +msgid "Total: " +msgstr "Total : " + +#: club/templates/club/club_sellings.jinja:20 club/views.py:167 +#: core/templates/core/user_account_detail.jinja:18 +#: core/templates/core/user_account_detail.jinja:51 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:78 +msgid "Counter" +msgstr "Comptoir" + +#: club/templates/club/club_sellings.jinja:21 +#: core/templates/core/user_account_detail.jinja:19 +#: core/templates/core/user_account_detail.jinja:52 +#: counter/templates/counter/last_ops.jinja:15 +#: counter/templates/counter/last_ops.jinja:40 +msgid "Barman" +msgstr "Barman" + +#: club/templates/club/club_sellings.jinja:22 +#: counter/templates/counter/counter_click.jinja:29 +#: counter/templates/counter/last_ops.jinja:16 +#: counter/templates/counter/last_ops.jinja:41 +msgid "Customer" +msgstr "Client" + +#: club/templates/club/club_sellings.jinja:24 +#: core/templates/core/user_account_detail.jinja:21 +#: core/templates/core/user_stats.jinja:28 +#: counter/templates/counter/last_ops.jinja:43 +msgid "Quantity" +msgstr "Quantité" + +#: club/templates/club/club_sellings.jinja:25 +#: core/templates/core/user_account.jinja:10 +#: core/templates/core/user_account_detail.jinja:22 +#: counter/templates/counter/cash_summary_list.jinja:35 +#: counter/templates/counter/last_ops.jinja:44 +#: counter/templates/counter/stats.jinja:18 +msgid "Total" +msgstr "Total" + +#: club/templates/club/club_sellings.jinja:26 +#: core/templates/core/user_account_detail.jinja:23 +#: core/templates/core/user_account_detail.jinja:54 +#: counter/templates/counter/last_ops.jinja:18 +#: counter/templates/counter/last_ops.jinja:45 +msgid "Payment method" +msgstr "Méthode de paiement" + +#: club/templates/club/club_tools.jinja:4 +#: core/templates/core/user_tools.jinja:84 +msgid "Club tools" +msgstr "Outils club" + +#: club/templates/club/club_tools.jinja:6 +msgid "Counters:" +msgstr "Comptoirs : " + +#: club/templates/club/club_tools.jinja:22 +msgid "Accouting: " +msgstr "Comptabilité : " + +#: club/templates/club/club_tools.jinja:30 +msgid "Manage launderettes" +msgstr "Gestion des laveries" + +#: club/views.py:38 +msgid "Members" +msgstr "Membres" + +#: club/views.py:43 +msgid "Old members" +msgstr "Anciens membres" + +#: club/views.py:49 core/templates/core/base.jinja:42 core/views/user.py:146 +#: sas/templates/sas/picture.jinja:83 +msgid "Tools" +msgstr "Outils" + +#: club/views.py:65 counter/templates/counter/counter_list.jinja:21 +#: counter/templates/counter/counter_list.jinja:42 +#: counter/templates/counter/counter_list.jinja:57 +msgid "Props" +msgstr "Propriétés" + +#: club/views.py:103 core/views/forms.py:204 counter/views.py:39 +msgid "Select user" +msgstr "Choisir un utilisateur" + +#: club/views.py:150 sas/views.py:71 sas/views.py:117 sas/views.py:159 +msgid "You do not have the permission to do that" +msgstr "Vous n'avez pas la permission de faire cela" + +#: club/views.py:165 counter/views.py:919 +msgid "Begin date" +msgstr "Date de début" + +#: club/views.py:166 counter/views.py:920 +msgid "End date" +msgstr "Date de fin" + +#: club/views.py:180 core/templates/core/user_stats.jinja:27 +#: counter/views.py:1000 +msgid "Product" +msgstr "Produit" + +#: core/models.py:29 +msgid "meta group status" +msgstr "status du meta-groupe" + +#: core/models.py:31 +msgid "Whether a group is a meta group or not" +msgstr "Si un groupe est un meta-groupe ou pas" + +#: core/models.py:59 +#, python-format +msgid "%(value)s is not a valid promo (between 0 and %(end)s)" +msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" + +#: core/models.py:75 +msgid "username" +msgstr "nom d'utilisateur" + +#: core/models.py:78 +msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." +msgstr "" +"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" +"+/-/_" + +#: core/models.py:82 +msgid "" +"Enter a valid username. This value may contain only letters, numbers and ./" +"+/-/_ characters." +msgstr "" +"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" +"+/-/_" + +#: core/models.py:87 +msgid "A user with that username already exists." +msgstr "Un utilisateur de ce nom existe déjà" + +#: core/models.py:90 +msgid "first name" +msgstr "Prénom" + +#: core/models.py:91 +msgid "last name" +msgstr "Nom" + +#: core/models.py:92 +msgid "email address" +msgstr "adresse email" + +#: core/models.py:93 +msgid "date of birth" +msgstr "date de naissance" + +#: core/models.py:94 +msgid "nick name" +msgstr "surnom" + +#: core/models.py:96 +msgid "staff status" +msgstr "status \"staff\"" + +#: core/models.py:98 +msgid "Designates whether the user can log into this admin site." +msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." + +#: core/models.py:101 +msgid "active" +msgstr "actif" + +#: core/models.py:104 +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " +"lieu de supprimer les comptes." + +#: core/models.py:108 +msgid "date joined" +msgstr "date d'inscription" + +#: core/models.py:109 +msgid "last update" +msgstr "dernière mise à jour" + +#: core/models.py:111 +msgid "superuser" +msgstr "super-utilisateur" + +#: core/models.py:114 +msgid "Designates whether this user is a superuser. " +msgstr "Est-ce que l'utilisateur est super-utilisateur." + +#: core/models.py:120 +msgid "profile" +msgstr "profil" + +#: core/models.py:122 +msgid "avatar" +msgstr "avatar" + +#: core/models.py:124 +msgid "scrub" +msgstr "blouse" + +#: core/models.py:126 +msgid "sex" +msgstr "sexe" + +#: core/models.py:126 +msgid "Man" +msgstr "Homme" + +#: core/models.py:126 +msgid "Woman" +msgstr "Femme" + +#: core/models.py:127 +msgid "tshirt size" +msgstr "taille de tshirt" + +#: core/models.py:128 +msgid "-" +msgstr "-" + +#: core/models.py:129 +msgid "XS" +msgstr "XS" + +#: core/models.py:130 +msgid "S" +msgstr "S" + +#: core/models.py:131 +msgid "M" +msgstr "M" + +#: core/models.py:132 +msgid "L" +msgstr "L" + +#: core/models.py:133 +msgid "XL" +msgstr "XL" + +#: core/models.py:134 +msgid "XXL" +msgstr "XXL" + +#: core/models.py:135 +msgid "XXXL" +msgstr "XXXL" + +#: core/models.py:138 +msgid "Student" +msgstr "Étudiant" + +#: core/models.py:139 +msgid "Administrative agent" +msgstr "Personnel administratif" + +#: core/models.py:140 +msgid "Teacher" +msgstr "Enseignant" + +#: core/models.py:141 +msgid "Agent" +msgstr "Personnel" + +#: core/models.py:142 +msgid "Doctor" +msgstr "Doctorant" + +#: core/models.py:143 +msgid "Former student" +msgstr "Ancien étudiant" + +#: core/models.py:144 +msgid "Service" +msgstr "Service" + +#: core/models.py:146 +msgid "department" +msgstr "département" + +#: core/models.py:147 +msgid "TC" +msgstr "TC" + +#: core/models.py:148 +msgid "IMSI" +msgstr "IMSI" + +#: core/models.py:149 +msgid "IMAP" +msgstr "IMAP" + +#: core/models.py:150 +msgid "INFO" +msgstr "INFO" + +#: core/models.py:151 +msgid "GI" +msgstr "GI" + +#: core/models.py:152 +msgid "E" +msgstr "E" + +#: core/models.py:153 +msgid "EE" +msgstr "EE" + +#: core/models.py:154 +msgid "GESC" +msgstr "GESC" + +#: core/models.py:155 +msgid "GMC" +msgstr "GMC" + +#: core/models.py:156 +msgid "MC" +msgstr "MC" + +#: core/models.py:157 +msgid "EDIM" +msgstr "EDIM" + +#: core/models.py:158 +msgid "Humanities" +msgstr "Humanités" + +#: core/models.py:159 +msgid "N/A" +msgstr "N/A" + +#: core/models.py:161 +msgid "dpt option" +msgstr "Filière" + +#: core/models.py:162 +msgid "semester" +msgstr "semestre" + +#: core/models.py:163 +msgid "quote" +msgstr "citation" + +#: core/models.py:164 +msgid "school" +msgstr "école" + +#: core/models.py:165 +msgid "promo" +msgstr "promo" + +#: core/models.py:166 +msgid "forum signature" +msgstr "signature du forum" + +#: core/models.py:167 +msgid "second email address" +msgstr "adresse email secondaire" + +#: core/models.py:169 +msgid "parent phone" +msgstr "téléphone des parents" + +#: core/models.py:171 +msgid "parent address" +msgstr "adresse des parents" + +#: core/models.py:172 +msgid "is subscriber viewable" +msgstr "profil visible par les cotisants" + +#: core/models.py:301 +msgid "A user with that username already exists" +msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" + +#: core/models.py:426 core/templates/core/macros.jinja:17 +#: core/templates/core/user_detail.jinja:14 +#: core/templates/core/user_detail.jinja:16 +#: core/templates/core/user_edit.jinja:17 +msgid "Profile" +msgstr "Profil" + +#: core/models.py:484 +msgid "Visitor" +msgstr "Visiteur" + +#: core/models.py:489 +msgid "define if we show a users stats" +msgstr "Definit si l'on montre les statistiques de l'utilisateur" + +#: core/models.py:491 +msgid "Show your account statistics to others" +msgstr "Montrez vos statistiques de compte aux autres" + +#: core/models.py:504 +msgid "file name" +msgstr "nom du fichier" + +#: core/models.py:505 core/models.py:665 +msgid "parent" +msgstr "parent" + +#: core/models.py:506 core/models.py:521 +msgid "file" +msgstr "fichier" + +#: core/models.py:507 +msgid "compressed file" +msgstr "version allégée" + +#: core/models.py:508 +msgid "thumbnail" +msgstr "miniature" + +#: core/models.py:509 +msgid "owner" +msgstr "propriétaire" + +#: core/models.py:510 core/models.py:671 +msgid "edit group" +msgstr "groupe d'édition" + +#: core/models.py:511 core/models.py:672 +msgid "view group" +msgstr "groupe de vue" + +#: core/models.py:512 +msgid "is folder" +msgstr "est un dossier" + +#: core/models.py:513 +msgid "mime type" +msgstr "type mime" + +#: core/models.py:514 +msgid "size" +msgstr "taille" + +#: core/models.py:516 +msgid "is moderated" +msgstr "est modéré" + +#: core/models.py:517 +msgid "asked for removal" +msgstr "retrait demandé" + +#: core/models.py:518 +msgid "is in the SAS" +msgstr "est dans le SAS" + +#: core/models.py:555 +msgid "Character '/' not authorized in name" +msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" + +#: core/models.py:558 core/models.py:563 +msgid "Loop in folder tree" +msgstr "Boucle dans l'arborescence des dossiers" + +#: core/models.py:567 +msgid "You can not make a file be a children of a non folder file" +msgstr "" +"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " +"un dossier" + +#: core/models.py:571 +msgid "Duplicate file" +msgstr "Un fichier de ce nom existe déjà" + +#: core/models.py:585 +msgid "You must provide a file" +msgstr "Vous devez fournir un fichier" + +#: core/models.py:617 +msgid "Folder: " +msgstr "Dossier : " + +#: core/models.py:619 +msgid "File: " +msgstr "Fichier : " + +#: core/models.py:664 core/models.py:668 +msgid "page name" +msgstr "nom de la page" + +#: core/models.py:669 +msgid "owner group" +msgstr "groupe propriétaire" + +#: core/models.py:673 +msgid "lock user" +msgstr "utilisateur bloquant" + +#: core/models.py:674 +msgid "lock_timeout" +msgstr "décompte du déblocage" + +#: core/models.py:701 +msgid "Duplicate page" +msgstr "Une page de ce nom existe déjà" + +#: core/models.py:707 +msgid "Loop in page tree" +msgstr "Boucle dans l'arborescence des pages" + +#: core/models.py:815 +msgid "revision" +msgstr "révision" + +#: core/models.py:816 +msgid "page title" +msgstr "titre de la page" + +#: core/models.py:817 +msgid "page content" +msgstr "contenu de la page" + +#: core/templates/core/403.jinja:5 +msgid "403, Forbidden" +msgstr "403. Non autorisé" + +#: core/templates/core/404.jinja:5 +msgid "404, Not Found" +msgstr "404. Non trouvé" + +#: core/templates/core/base.jinja:5 core/templates/core/index.jinja:4 +msgid "Welcome!" +msgstr "Bienvenue!" + +#: core/templates/core/base.jinja:19 +msgid "Logo" +msgstr "Logo" + +#: 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:23 core/templates/core/register.jinja:18 +msgid "Register" +msgstr "S'enregister" + +#: core/templates/core/base.jinja:43 +msgid "Logout" +msgstr "Déconnexion" + +#: core/templates/core/base.jinja:45 core/templates/core/base.jinja.py:46 +msgid "Search" +msgstr "Recherche" + +#: core/templates/core/base.jinja:68 +msgid "Main" +msgstr "Accueil" + +#: core/templates/core/base.jinja:69 +msgid "Matmatronch" +msgstr "Matmatronch" + +#: core/templates/core/base.jinja:70 +msgid "Wiki" +msgstr "Wiki" + +#: core/templates/core/base.jinja:71 sas/templates/sas/album.jinja:4 +#: sas/templates/sas/main.jinja:4 sas/templates/sas/main.jinja.py:8 +#: sas/templates/sas/picture.jinja:26 +msgid "SAS" +msgstr "SAS" + +#: core/templates/core/base.jinja:72 +msgid "Forum" +msgstr "Forum" + +#: core/templates/core/base.jinja:73 +msgid "Services" +msgstr "Services" + +#: core/templates/core/base.jinja:74 core/templates/core/file.jinja:20 +#: core/views/files.py:48 +msgid "Files" +msgstr "Fichiers" + +#: core/templates/core/base.jinja:75 +msgid "Sponsors" +msgstr "Partenaires" + +#: core/templates/core/base.jinja:76 +msgid "Help" +msgstr "Aide" + +#: core/templates/core/base.jinja:109 +msgid "Contacts" +msgstr "Contacts" + +#: core/templates/core/base.jinja:110 +msgid "Legal notices" +msgstr "Mentions légales" + +#: core/templates/core/base.jinja:111 +msgid "Intellectual property" +msgstr "Propriété intellectuelle" + +#: core/templates/core/base.jinja:112 +msgid "Help & Documentation" +msgstr "Aide & Documentation" + +#: core/templates/core/base.jinja:113 +msgid "R&D" +msgstr "R&D" + +#: core/templates/core/base.jinja:115 +msgid "Site made by good people" +msgstr "Site réalisé par des gens bons" + +#: core/templates/core/create.jinja:4 core/templates/core/create.jinja.py:8 +#, python-format +msgid "Create %(name)s" +msgstr "Créer %(name)s" + +#: core/templates/core/delete_confirm.jinja:4 +#: core/templates/core/delete_confirm.jinja:8 +#: core/templates/core/file_delete_confirm.jinja:4 +#: core/templates/core/file_delete_confirm.jinja:8 +msgid "Delete confirmation" +msgstr "Confirmation de suppression" + +#: core/templates/core/delete_confirm.jinja:10 +#: core/templates/core/file_delete_confirm.jinja:10 +#, python-format +msgid "Are you sure you want to delete \"%(obj)s\"?" +msgstr "Êtes-vous sûr de vouloir supprimer \"%(obj)s\" ?" + +#: core/templates/core/delete_confirm.jinja:11 +#: core/templates/core/file_delete_confirm.jinja:11 +msgid "Confirm" +msgstr "Confirmation" + +#: core/templates/core/delete_confirm.jinja:14 +#: core/templates/core/file_delete_confirm.jinja:14 +#: counter/templates/counter/counter_click.jinja:93 +msgid "Cancel" +msgstr "Annuler" + +#: core/templates/core/edit.jinja:5 core/templates/core/edit.jinja.py:13 +#: core/templates/core/file_edit.jinja:4 +#: counter/templates/counter/cash_register_summary.jinja:4 +#, python-format +msgid "Edit %(obj)s" +msgstr "Éditer %(obj)s" + +#: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 +msgid "File list" +msgstr "Liste de fichiers" + +#: core/templates/core/file.jinja:9 +msgid "New file" +msgstr "Nouveau fichier" + +#: core/templates/core/file.jinja:11 core/templates/core/page.jinja:11 +msgid "Not found" +msgstr "Non trouvé" + +#: core/templates/core/file.jinja:32 +msgid "My files" +msgstr "Mes fichiers" + +#: core/templates/core/file.jinja:41 core/templates/core/page.jinja:34 +msgid "Prop" +msgstr "Propriétés" + +#: core/templates/core/file_detail.jinja:13 +#: core/templates/core/file_moderation.jinja:20 +#: sas/templates/sas/moderation.jinja:23 +msgid "Owner: " +msgstr "Propriétaire : " + +#: core/templates/core/file_detail.jinja:34 +msgid "Real name: " +msgstr "Nom réel : " + +#: core/templates/core/file_detail.jinja:35 +#: core/templates/core/file_moderation.jinja:21 +#: sas/templates/sas/moderation.jinja:24 sas/templates/sas/picture.jinja:79 +msgid "Date: " +msgstr "Date : " + +#: core/templates/core/file_detail.jinja:37 +msgid "Type: " +msgstr "Type : " + +#: core/templates/core/file_detail.jinja:38 +msgid "Size: " +msgstr "Taille : " + +#: core/templates/core/file_detail.jinja:38 +msgid "bytes" +msgstr "octets" + +#: core/templates/core/file_detail.jinja:40 +msgid "Download" +msgstr "Télécharger" + +#: core/templates/core/file_detail.jinja:46 +#: core/templates/core/file_moderation.jinja:23 +#: sas/templates/sas/moderation.jinja:31 +msgid "Moderate" +msgstr "Modérer" + +#: core/templates/core/file_list.jinja:19 +msgid "There is no file in this website." +msgstr "Il n'y a pas de fichier sur ce site web." + +#: core/templates/core/file_moderation.jinja:4 +#: core/templates/core/file_moderation.jinja:8 +msgid "File moderation" +msgstr "Modération des fichiers" + +#: core/templates/core/file_moderation.jinja:19 +#: sas/templates/sas/moderation.jinja:22 +msgid "Full name: " +msgstr "Nom complet : " + +#: core/templates/core/group_edit.jinja:4 +msgid "Back to list" +msgstr "Retour à la liste" + +#: core/templates/core/group_edit.jinja:5 +msgid "Edit group" +msgstr "Éditer le groupe" + +#: core/templates/core/group_edit.jinja:9 +#: core/templates/core/user_edit.jinja:37 +#: core/templates/core/user_group.jinja:8 +msgid "Update" +msgstr "Mettre à jour" + +#: core/templates/core/group_list.jinja:4 +#: core/templates/core/group_list.jinja:8 +msgid "Group list" +msgstr "Liste des groupes" + +#: core/templates/core/group_list.jinja:9 +msgid "New group" +msgstr "Nouveau groupe" + +#: core/templates/core/index.jinja:7 +msgid "Welcome to the new AE's website!" +msgstr "Bienvenue sur le nouveau site de l'AE ! " + +#: core/templates/core/login.jinja:10 +msgid "Your username and password didn't match. Please try again." +msgstr "" +"Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Merci de " +"réessayer." + +#: core/templates/core/login.jinja:15 +msgid "" +"Your account doesn't have access to this page. To proceed,\n" +" please login with an account that has access." +msgstr "" +"Votre compte n'a pas accès à cette page. Merci de vous identifier avec un " +"compte qui a accès." + +#: core/templates/core/login.jinja:18 +msgid "Please login to see this page." +msgstr "Merci de vous identifier pour voir cette page." + +#: core/templates/core/login.jinja:28 +#: counter/templates/counter/counter_main.jinja:51 +msgid "login" +msgstr "login" + +#: core/templates/core/login.jinja:32 +msgid "Lost password?" +msgstr "Mot de passe perdu ?" + +#: core/templates/core/macros.jinja:27 core/templates/core/user_detail.jinja:27 +msgid "Born: " +msgstr "Né le : " + +#: core/templates/core/macros.jinja:31 core/templates/core/user_detail.jinja:48 +msgid "Promo: " +msgstr "Promo : " + +#: core/templates/core/macros.jinja:38 +#, python-format +msgid "Subscribed until %(subscription_end)s" +msgstr "Cotisant jusqu'au %(subscription_end)s" + +#: core/templates/core/macros.jinja:39 core/templates/core/user_edit.jinja:40 +msgid "Account number: " +msgstr "Numero de compte : " + +#: core/templates/core/macros.jinja:44 launderette/models.py:129 +msgid "Slot" +msgstr "Créneau" + +#: core/templates/core/macros.jinja:55 +#: launderette/templates/launderette/launderette_admin.jinja:20 +msgid "Tokens" +msgstr "Jetons" + +#: core/templates/core/new_user_email.jinja:2 +msgid "" +"You're receiving this email because you subscribed to the UTBM student " +"association." +msgstr "" +"Vous avez reçu cet email parce que vous avez cotisé à l'Association des " +"Étudiants de l'UTBM." + +#: core/templates/core/new_user_email.jinja:4 +#: core/templates/core/password_reset_email.jinja:4 +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Merci de vous rendre sur la page suivante et de choisir un nouveau mot de " +"passe :" + +#: core/templates/core/new_user_email.jinja:8 +msgid "Your username, in case it was not given to you: " +msgstr "Votre nom d'utilisateur, si il ne vous a pas été donné :" + +#: core/templates/core/new_user_email.jinja:9 +msgid "" +"You also got a new account that will be useful to purchase products in the " +"living areas and on the Eboutic." +msgstr "" +"Un compte vous a également été créé, qui vous servira notamment à consommer " +"dans les lieux de vie ou sur l'Eboutic." + +#: core/templates/core/new_user_email.jinja:10 +#, python-format +msgid "Here is your account number: %(account)s" +msgstr "Voici votre numéro de compte AE : %(account)s" + +#: core/templates/core/new_user_email.jinja:12 +msgid "Thanks for subscribing! " +msgstr "Merci d'avoir cotisé !" + +#: core/templates/core/new_user_email.jinja:14 +msgid "The AE team" +msgstr "L'équipe AE" + +#: core/templates/core/new_user_email_subject.jinja:2 +msgid "New subscription to the UTBM student association" +msgstr "Nouvelle cotisation à l'Association des Étudiants de l'UTBM" + +#: core/templates/core/page.jinja:7 core/templates/core/page_list.jinja:4 +#: core/templates/core/page_list.jinja:9 +msgid "Page list" +msgstr "Liste des pages" + +#: core/templates/core/page.jinja:9 +msgid "Create page" +msgstr "Créer une page" + +#: core/templates/core/page.jinja:29 +msgid "History" +msgstr "Historique" + +#: core/templates/core/page.jinja:45 +msgid "Page does not exist" +msgstr "La page n'existe pas." + +#: core/templates/core/page.jinja:47 +msgid "Create it?" +msgstr "La créer ?" + +#: core/templates/core/page_detail.jinja:5 +#, python-format +msgid "This may not be the last update, you are seeing revision %(rev_id)s!" +msgstr "" +"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la " +"version %(rev_id)s." + +#: core/templates/core/page_hist.jinja:6 +msgid "Page history" +msgstr "Historique de la page" + +#: core/templates/core/page_hist.jinja:7 +#, python-format +msgid "You're seeing the history of page \"%(page_name)s\"" +msgstr "Vous consultez l'historique de la page \"%(page_name)s\"" + +#: core/templates/core/page_hist.jinja:11 +msgid "last" +msgstr "actuel" + +#: core/templates/core/page_list.jinja:16 +msgid "There is no page in this website." +msgstr "Il n'y a pas de page sur ce site web." + +#: core/templates/core/page_prop.jinja:4 +msgid "Page properties" +msgstr "Propriétés de la page" + +#: core/templates/core/pagerev_edit.jinja:19 +msgid "Edit page" +msgstr "Éditer la page" + +#: core/templates/core/pagerev_edit.jinja:23 +msgid "Preview" +msgstr "Prévisualiser" + +#: core/templates/core/password_change.jinja:6 +#, python-format +msgid "Change password for %(user)s" +msgstr "Changer le mot de passe de %(user)s" + +#: core/templates/core/password_change.jinja:11 +msgid "Change" +msgstr "Changer" + +#: core/templates/core/password_change_done.jinja:4 +msgid "You successfully changed your password!" +msgstr "Vous avez correctement changé votre mot de passe !" + +#: core/templates/core/password_reset.jinja:7 +#: core/templates/core/password_reset_confirm.jinja:7 +msgid "Reset" +msgstr "Reset" + +#: core/templates/core/password_reset_complete.jinja:4 +msgid "You successfully reset your password!" +msgstr "Vous avez correctement réinitialisé votre mot de passe !" + +#: core/templates/core/password_reset_done.jinja:4 +msgid "Password reset sent" +msgstr "Réinitialisation de mot de passe envoyée" + +#: core/templates/core/password_reset_done.jinja:7 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should\n" +"receive them shortly." +msgstr "" +"Nous vous avons envoyé les instructions pour réinitialiser votre mot de " +"passe par email, si un compte avec l'email entré existe effectivement.\n" +"Vous devriez les recevoir rapidement." + +#: core/templates/core/password_reset_done.jinja:12 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam\n" +"folder." +msgstr "" +"Si vous ne recevez pas d'email, assurez-vous d'avoir correctement entré " +"l'adresse email avec laquelle vous vous êtes inscrit, et vérifiez votre " +"dossier de spam." + +#: core/templates/core/password_reset_email.jinja:2 +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vous avez reçu cet email parce que vous avez demandé une réinitialisation du " +"mot de passe pour votre compte sur le site %(site_name)s." + +#: core/templates/core/password_reset_email.jinja:8 +msgid "Your username, in case you've forgotten: " +msgstr "Votre nom d'utilisateur, en cas d'oubli :" + +#: core/templates/core/password_reset_email.jinja:10 +msgid "Thanks for using our site! " +msgstr "Merci d'utiliser notre site !" + +#: core/templates/core/password_reset_email.jinja:12 +#, python-format +msgid "The %(site_name)s team" +msgstr "L'équipe de %(site_name)s" + +#: core/templates/core/register.jinja:3 core/templates/core/register.jinja:6 +msgid "Register a user" +msgstr "Enregistrer un utilisateur" + +#: core/templates/core/register.jinja:9 +#, python-format +msgid "Welcome %(user_name)s!" +msgstr "Bienvenue, %(user_name)s!" + +#: core/templates/core/register.jinja:10 +msgid "" +"You successfully registred and you will soon receive a confirmation mail." +msgstr "" +"Vous vous êtes correctement enregistré, et vous devriez recevoir rapidement " +"un email de confirmation." + +#: core/templates/core/register.jinja:12 +#, python-format +msgid "Your username is %(username)s." +msgstr "Votre nom d'utilisateur est %(username)s." + +#: core/templates/core/search.jinja:6 +msgid "Search result" +msgstr "Résultat de la recherche" + +#: core/templates/core/search.jinja:10 +msgid "Users" +msgstr "Utilisateurs" + +#: core/templates/core/search.jinja:18 core/views/user.py:158 +#: counter/templates/counter/stats.jinja:17 +msgid "Clubs" +msgstr "Clubs" + +#: core/templates/core/user_account.jinja:8 +msgid "Year" +msgstr "Année" + +#: core/templates/core/user_account.jinja:9 +msgid "Month" +msgstr "Mois" + +#: core/templates/core/user_account.jinja:32 +#: core/templates/core/user_account_detail.jinja:4 +#, python-format +msgid "%(user_name)s's account" +msgstr "Compte de %(user_name)s" + +#: core/templates/core/user_account.jinja:37 +#: core/templates/core/user_account_detail.jinja:9 +msgid "User account" +msgstr "Compte utilisateur" + +#: core/templates/core/user_account.jinja:42 +#: core/templates/core/user_account_detail.jinja:13 +msgid "Account buyings" +msgstr "Achat sur compte utilisateur" + +#: core/templates/core/user_account.jinja:45 +#: core/templates/core/user_account_detail.jinja:46 +#: counter/templates/counter/cash_summary_list.jinja:17 +#: counter/templates/counter/last_ops.jinja:10 +msgid "Refillings" +msgstr "Rechargements" + +#: core/templates/core/user_account.jinja:49 +#: core/templates/core/user_account_detail.jinja:74 +msgid "Eboutic invoices" +msgstr "Facture eboutic" + +#: core/templates/core/user_account.jinja:53 counter/views.py:489 +msgid "Etickets" +msgstr "Etickets" + +#: core/templates/core/user_account.jinja:64 +#: core/templates/core/user_account_detail.jinja:102 +msgid "User has no account" +msgstr "L'utilisateur n'a pas de compte" + +#: core/templates/core/user_account_detail.jinja:11 +#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:146 +#: stock/templates/stock/shopping_list_items.jinja:9 +msgid "Back" +msgstr "Retour" + +#: core/templates/core/user_account_detail.jinja:79 +msgid "Items" +msgstr "Articles" + +#: core/templates/core/user_clubs.jinja:4 +#, python-format +msgid "%(user_name)s's club(s)" +msgstr "Clubs de %(user_name)s" + +#: core/templates/core/user_clubs.jinja:8 +msgid "Club(s)" +msgstr "Clubs" + +#: core/templates/core/user_clubs.jinja:10 +msgid "Current club(s) :" +msgstr "Club(s) actuel(s) : " + +#: core/templates/core/user_clubs.jinja:36 +msgid "Old club(s) :" +msgstr "Anciens clubs :" + +#: core/templates/core/user_detail.jinja:5 +#, python-format +msgid "%(user_name)s's profile" +msgstr "Profil de %(user_name)s" + +#: core/templates/core/user_detail.jinja:33 +msgid "Option: " +msgstr "Filière : " + +#: core/templates/core/user_detail.jinja:68 +msgid "Not subscribed" +msgstr "Non cotisant" + +#: core/templates/core/user_detail.jinja:70 +#: subscription/templates/subscription/subscription.jinja:4 +#: subscription/templates/subscription/subscription.jinja:8 +msgid "New subscription" +msgstr "Nouvelle cotisation" + +#: core/templates/core/user_edit.jinja:4 +msgid "Edit user" +msgstr "Éditer l'utilisateur" + +#: core/templates/core/user_edit.jinja:8 +msgid "Edit user profile" +msgstr "Éditer le profil de l'utilisateur" + +#: core/templates/core/user_edit.jinja:15 +msgid "Current profile: " +msgstr "Profil actuel : " + +#: core/templates/core/user_edit.jinja:25 +msgid "Take picture" +msgstr "Prendre une photo" + +#: core/templates/core/user_edit.jinja:30 +msgid "Current avatar: " +msgstr "Avatar actuel : " + +#: core/templates/core/user_edit.jinja:31 +msgid "Avatar" +msgstr "Avatar" + +#: core/templates/core/user_edit.jinja:33 +msgid "Current scrub: " +msgstr "Blouse actuelle : " + +#: core/templates/core/user_edit.jinja:34 +msgid "Scrub" +msgstr "Blouse" + +#: core/templates/core/user_edit.jinja:38 +msgid "Username: " +msgstr "Nom d'utilisateur : " + +#: core/templates/core/user_edit.jinja:43 +msgid "Change my password" +msgstr "Changer mon mot de passe" + +#: core/templates/core/user_edit.jinja:45 +msgid "Change user password" +msgstr "Changer le mot de passe" + +#: core/templates/core/user_godfathers.jinja:5 +#, python-format +msgid "%(user_name)s's godfathers" +msgstr "Parrains de %(user_name)s" + +#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 +msgid "Godfathers" +msgstr "Parrains" + +#: core/templates/core/user_godfathers.jinja:18 +msgid "No godfathers" +msgstr "Pas de parrains" + +#: core/templates/core/user_godfathers.jinja:21 +msgid "Godchildren" +msgstr "Fillots" + +#: core/templates/core/user_godfathers.jinja:29 +msgid "No godchildren" +msgstr "Pas de fillots" + +#: core/templates/core/user_group.jinja:4 +#, python-format +msgid "Edit user groups for %(user_name)s" +msgstr "Éditer les groupes pour %(user_name)s" + +#: core/templates/core/user_list.jinja:4 core/templates/core/user_list.jinja:8 +msgid "User list" +msgstr "Liste d'utilisateurs" + +#: core/templates/core/user_pictures.jinja:5 +#, python-format +msgid "%(user_name)s's pictures" +msgstr "Photos de %(user_name)s" + +#: core/templates/core/user_stats.jinja:4 +#, python-format +msgid "%(user_name)s's stats" +msgstr "Stats de %(user_name)s" + +#: core/templates/core/user_stats.jinja:9 +msgid "Permanencies" +msgstr "Permanences" + +#: core/templates/core/user_stats.jinja:17 +msgid "Buyings" +msgstr "Achats" + +#: core/templates/core/user_stats.jinja:23 +msgid "Product top 10" +msgstr "Top 10 produits" + +#: core/templates/core/user_tools.jinja:4 +#, python-format +msgid "%(user_name)s's tools" +msgstr "Outils de %(user_name)s" + +#: core/templates/core/user_tools.jinja:8 +msgid "User Tools" +msgstr "Outils utilisateurs" + +#: core/templates/core/user_tools.jinja:11 +msgid "Sith management" +msgstr "Gestion de Sith" + +#: core/templates/core/user_tools.jinja:14 core/views/user.py:164 +msgid "Groups" +msgstr "Groupes" + +#: core/templates/core/user_tools.jinja:15 +#: rootplace/templates/rootplace/merge.jinja:4 +msgid "Merge users" +msgstr "Fusionner deux utilisateurs" + +#: core/templates/core/user_tools.jinja:18 +msgid "Subscriptions" +msgstr "Cotisations" + +#: core/templates/core/user_tools.jinja:24 counter/views.py:459 +#: counter/views.py:608 +msgid "Counters" +msgstr "Comptoirs" + +#: core/templates/core/user_tools.jinja:27 +msgid "General management" +msgstr "Gestion générale" + +#: core/templates/core/user_tools.jinja:28 +msgid "General counters management" +msgstr "Gestion générale des comptoirs" + +#: core/templates/core/user_tools.jinja:29 +msgid "Products management" +msgstr "Gestion des produits" + +#: core/templates/core/user_tools.jinja:30 +msgid "Product types management" +msgstr "Gestion des types de produit" + +#: core/templates/core/user_tools.jinja:31 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:479 +msgid "Cash register summaries" +msgstr "Relevés de caisse" + +#: core/templates/core/user_tools.jinja:38 core/views/user.py:174 +#: counter/templates/counter/counter_list.jinja:18 +#: counter/templates/counter/counter_list.jinja:33 +#: counter/templates/counter/counter_list.jinja:54 +msgid "Stats" +msgstr "Stats" + +#: core/templates/core/user_tools.jinja:42 +#: counter/templates/counter/counter_list.jinja:37 +#: stock/templates/stock/stock_item_list.jinja:11 +#: stock/templates/stock/stock_list.jinja:16 +msgid "Shopping lists" +msgstr "" + +#: core/templates/core/user_tools.jinja:44 +#: counter/templates/counter/counter_list.jinja:39 +msgid "Create new stock" +msgstr "Créer un stock" + +#: core/templates/core/user_tools.jinja:55 +msgid "Refound Account" +msgstr "Rembourser un compte" + +#: core/templates/core/user_tools.jinja:56 +msgid "General accounting" +msgstr "Comptabilité générale" + +#: core/templates/core/user_tools.jinja:65 +msgid "Club account: " +msgstr "Compte club : " + +#: core/templates/core/user_tools.jinja:72 +msgid "Communication" +msgstr "Communication" + +#: core/templates/core/user_tools.jinja:75 +msgid "Moderate files" +msgstr "Modérer les fichiers" + +#: core/templates/core/user_tools.jinja:78 +msgid "Moderate pictures" +msgstr "Modérer les photos" + +#: core/views/files.py:47 +msgid "Add a new folder" +msgstr "Ajouter un nouveau dossier" + +#: core/views/files.py:58 +#, python-format +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:67 core/views/forms.py:181 core/views/forms.py:185 +#: sas/views.py:46 +#, python-format +msgid "Error uploading file %(file_name)s: %(msg)s" +msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s" + +#: core/views/forms.py:59 core/views/forms.py:62 +msgid "Choose file" +msgstr "Choisir un fichier" + +#: core/views/forms.py:73 core/views/forms.py:76 +msgid "Choose user" +msgstr "Choisir un utilisateur" + +#: core/views/forms.py:98 +msgid "Username, email, or account number" +msgstr "Nom d'utilisateur, email, ou numéro de compte AE" + +#: core/views/forms.py:140 +msgid "" +"Profile: you need to be visible on the picture, in order to be recognized (e." +"g. by the barmen)" +msgstr "" +"Photo de profil: vous devez être visible sur la photo afin d'être reconnu " +"(par exemple par les barmen)" + +#: core/views/forms.py:141 +msgid "Avatar: used on the forum" +msgstr "Avatar : utilisé sur le forum" + +#: core/views/forms.py:142 +msgid "Scrub: let other know how your scrub looks like!" +msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" + +#: core/views/forms.py:186 +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" + +#: core/views/forms.py:203 +msgid "Godfather" +msgstr "Parrain" + +#: core/views/forms.py:203 +msgid "Godchild" +msgstr "Fillot" + +#: core/views/user.py:140 +msgid "Pictures" +msgstr "Photos" + +#: core/views/user.py:312 +msgid "User already has a profile picture" +msgstr "L'utilisateur a déjà une photo de profil" + +#: counter/models.py:28 +msgid "account id" +msgstr "numéro de compte" + +#: counter/models.py:32 +msgid "customer" +msgstr "client" + +#: counter/models.py:33 +msgid "customers" +msgstr "clients" + +#: counter/models.py:48 counter/templates/counter/counter_click.jinja:48 +#: counter/templates/counter/counter_click.jinja:82 +msgid "Not enough money" +msgstr "Solde insuffisant" + +#: counter/models.py:76 counter/models.py:98 +msgid "product type" +msgstr "type du produit" + +#: counter/models.py:101 +msgid "purchase price" +msgstr "prix d'achat" + +#: counter/models.py:102 +msgid "selling price" +msgstr "prix de vente" + +#: counter/models.py:103 +msgid "special selling price" +msgstr "prix de vente spécial" + +#: counter/models.py:104 +msgid "icon" +msgstr "icône" + +#: counter/models.py:106 +msgid "limit age" +msgstr "âge limite" + +#: counter/models.py:107 +msgid "tray price" +msgstr "prix plateau" + +#: counter/models.py:108 +msgid "parent product" +msgstr "produit parent" + +#: counter/models.py:110 +msgid "buying groups" +msgstr "groupe d'achat" + +#: counter/models.py:111 +msgid "archived" +msgstr "archivé" + +#: counter/models.py:114 counter/models.py:486 +msgid "product" +msgstr "produit" + +#: counter/models.py:133 +msgid "products" +msgstr "produits" + +#: counter/models.py:134 +msgid "counter type" +msgstr "type de comptoir" + +#: counter/models.py:136 +msgid "Bar" +msgstr "Bar" + +#: counter/models.py:136 +msgid "Office" +msgstr "Bureau" + +#: counter/models.py:136 counter/templates/counter/counter_list.jinja:11 +#: eboutic/templates/eboutic/eboutic_main.jinja:4 +#: 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:304 sith/settings.py:312 +msgid "Eboutic" +msgstr "Eboutic" + +#: counter/models.py:137 +msgid "sellers" +msgstr "vendeurs" + +#: counter/models.py:140 launderette/models.py:125 +msgid "token" +msgstr "jeton" + +#: counter/models.py:143 counter/models.py:387 counter/models.py:404 +#: launderette/models.py:16 stock/models.py:12 +msgid "counter" +msgstr "comptoir" + +#: counter/models.py:247 +msgid "bank" +msgstr "banque" + +#: counter/models.py:249 counter/models.py:290 +msgid "is validated" +msgstr "est validé" + +#: counter/models.py:252 +msgid "refilling" +msgstr "rechargement" + +#: counter/models.py:283 eboutic/models.py:103 +msgid "unit price" +msgstr "prix unitaire" + +#: counter/models.py:284 counter/models.py:476 eboutic/models.py:104 +msgid "quantity" +msgstr "quantité" + +#: counter/models.py:289 +msgid "Sith account" +msgstr "Compte utilisateur" + +#: counter/models.py:289 sith/settings.py:297 sith/settings.py:302 +#: sith/settings.py:324 +msgid "Credit card" +msgstr "Carte bancaire" + +#: counter/models.py:293 +msgid "selling" +msgstr "vente" + +#: counter/models.py:312 +msgid "Unknown event" +msgstr "Événement inconnu" + +#: counter/models.py:313 +#, python-format +msgid "Eticket bought for the event %(event)s" +msgstr "Eticket acheté pour l'événement %(event)s" + +#: counter/models.py:315 counter/models.py:327 +#, python-format +msgid "" +"You bought an eticket for the event %(event)s.\n" +"You can download it on this page %(url)s." +msgstr "" +"Vous avez acheté un Eticket pour l'événement %(event)s.\n" +"Vous pouvez le télécharger sur cette page: %(url)s" + +#: counter/models.py:390 +msgid "last activity date" +msgstr "dernière activité" + +#: counter/models.py:393 +msgid "permanency" +msgstr "permanence" + +#: counter/models.py:407 +msgid "emptied" +msgstr "coffre vidée" + +#: counter/models.py:410 +msgid "cash register summary" +msgstr "relevé de caisse" + +#: counter/models.py:474 +msgid "cash summary" +msgstr "relevé" + +#: counter/models.py:475 +msgid "value" +msgstr "valeur" + +#: counter/models.py:477 +msgid "check" +msgstr "chèque" + +#: counter/models.py:480 +msgid "cash register summary item" +msgstr "élément de relevé de caisse" + +#: counter/models.py:487 +msgid "banner" +msgstr "bannière" + +#: counter/models.py:488 +msgid "event date" +msgstr "date de l'événement" + +#: counter/models.py:489 +msgid "event title" +msgstr "titre de l'événement" + +#: counter/models.py:490 +msgid "secret" +msgstr "secret" + +#: counter/templates/counter/activity.jinja:5 +#: counter/templates/counter/activity.jinja:9 +#, python-format +msgid "%(counter_name)s activity" +msgstr "Activité sur %(counter_name)s" + +#: counter/templates/counter/activity.jinja:11 +msgid "Barmen list" +msgstr "Barmans" + +#: counter/templates/counter/activity.jinja:19 +msgid "Legend" +msgstr "Légende" + +#: counter/templates/counter/activity.jinja:20 +msgid "counter is open, there's at least one barman connected" +msgstr "Le comptoir est ouvert, et il y a au moins un barman connecté" + +#: counter/templates/counter/activity.jinja:22 +#, python-format +msgid "" +"counter is open but not active, the last sale was done at least %(minutes)s " +"minutes ago " +msgstr "" +"Le comptoir est ouvert, mais inactif. La dernière vente a eu lieu il y a " +"%(minutes)s minutes." + +#: counter/templates/counter/activity.jinja:24 +msgid "counter is not open : no one is connected" +msgstr "Le comptoir est fermé" + +#: counter/templates/counter/cash_register_summary.jinja:8 +msgid "Make a cash register summary" +msgstr "Faire un relevé de caisse" + +#: counter/templates/counter/cash_summary_list.jinja:5 +#: counter/templates/counter/cash_summary_list.jinja:10 +msgid "Cash register summary list" +msgstr "Liste des relevés de caisse" + +#: counter/templates/counter/cash_summary_list.jinja:11 +msgid "Theoric sums" +msgstr "Sommes théoriques" + +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:722 +msgid "Emptied" +msgstr "Coffre vidé" + +#: counter/templates/counter/cash_summary_list.jinja:48 +msgid "yes" +msgstr "oui" + +#: counter/templates/counter/cash_summary_list.jinja:59 +msgid "There is no cash register summary in this website." +msgstr "Il n'y a pas de relevé de caisse dans ce site web." + +#: counter/templates/counter/counter_click.jinja:35 +#: launderette/templates/launderette/launderette_admin.jinja:8 +msgid "Selling" +msgstr "Vente" + +#: counter/templates/counter/counter_click.jinja:39 +#: counter/templates/counter/counter_click.jinja:73 +msgid "Too young for that product" +msgstr "Trop jeune pour ce produit" + +#: counter/templates/counter/counter_click.jinja:42 +#: counter/templates/counter/counter_click.jinja:76 +msgid "Not allowed for that product" +msgstr "Non autorisé pour ce produit" + +#: counter/templates/counter/counter_click.jinja:45 +#: counter/templates/counter/counter_click.jinja:79 +msgid "No date of birth provided" +msgstr "Pas de date de naissance renseigné" + +#: counter/templates/counter/counter_click.jinja:55 +#: counter/templates/counter/counter_click.jinja:103 +#: counter/templates/counter/invoices_call.jinja:16 +#: launderette/templates/launderette/launderette_admin.jinja:35 +#: launderette/templates/launderette/launderette_click.jinja:13 +#: sas/templates/sas/moderation.jinja:39 sas/templates/sas/picture.jinja:74 +msgid "Go" +msgstr "Valider" + +#: counter/templates/counter/counter_click.jinja:57 +#: eboutic/templates/eboutic/eboutic_main.jinja:27 +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11 +msgid "Basket: " +msgstr "Panier : " + +#: counter/templates/counter/counter_click.jinja:88 +msgid "Finish" +msgstr "Terminer" + +#: counter/templates/counter/counter_click.jinja:97 +msgid "Refilling" +msgstr "Rechargement" + +#: counter/templates/counter/counter_list.jinja:4 +#: counter/templates/counter/counter_list.jinja:10 +msgid "Counter admin list" +msgstr "Liste des comptoirs" + +#: counter/templates/counter/counter_list.jinja:8 +msgid "New counter" +msgstr "Nouveau comptoir" + +#: counter/templates/counter/counter_list.jinja:26 +msgid "Bars" +msgstr "Bars" + +#: counter/templates/counter/counter_list.jinja:47 +msgid "Offices" +msgstr "Bureaux" + +#: counter/templates/counter/counter_list.jinja:63 +msgid "There is no counters in this website." +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:16 +#: launderette/templates/launderette/launderette_click.jinja:8 +#, python-format +msgid "%(counter_name)s counter" +msgstr "Comptoir %(counter_name)s" + +#: counter/templates/counter/counter_main.jinja:21 +msgid "Last selling: " +msgstr "Dernière vente : " + +#: counter/templates/counter/counter_main.jinja:22 +msgid "Client: " +msgstr "Client : " + +#: counter/templates/counter/counter_main.jinja:22 +msgid "New amount: " +msgstr "Nouveau montant : " + +#: counter/templates/counter/counter_main.jinja:31 +msgid "Enter client code:" +msgstr "Entrez un code client : " + +#: counter/templates/counter/counter_main.jinja:36 +msgid "validate" +msgstr "valider" + +#: counter/templates/counter/counter_main.jinja:39 +msgid "Please, login" +msgstr "Merci de vous identifier" + +#: counter/templates/counter/counter_main.jinja:44 +msgid "Barman: " +msgstr "Barman : " + +#: counter/templates/counter/eticket_list.jinja:4 +#: counter/templates/counter/eticket_list.jinja:10 +msgid "Eticket list" +msgstr "Liste des etickets" + +#: counter/templates/counter/eticket_list.jinja:8 +msgid "New eticket" +msgstr "Nouveau eticket" + +#: counter/templates/counter/eticket_list.jinja:17 +msgid "There is no eticket in this website." +msgstr "Il n'y a pas de eticket sur ce site web." + +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:484 +msgid "Invoices call" +msgstr "Appels à facture" + +#: counter/templates/counter/invoices_call.jinja:8 +#, python-format +msgid "Invoices call for %(date)s" +msgstr "Appels à facture pour %(date)s" + +#: counter/templates/counter/invoices_call.jinja:9 +msgid "Choose another month: " +msgstr "Choisir un autre mois : " + +#: counter/templates/counter/invoices_call.jinja:21 +msgid "Sum" +msgstr "Somme" + +#: counter/templates/counter/last_ops.jinja:5 +#: counter/templates/counter/last_ops.jinja:9 +#, python-format +msgid "%(counter_name)s last operations" +msgstr "Dernières opérations sur %(counter_name)s" + +#: counter/templates/counter/product_list.jinja:4 +#: counter/templates/counter/product_list.jinja:12 +msgid "Product list" +msgstr "Liste des produits" + +#: counter/templates/counter/product_list.jinja:9 +msgid "New product" +msgstr "Nouveau produit" + +#: counter/templates/counter/product_list.jinja:21 +msgid "Uncategorized" +msgstr "Sans catégorie" + +#: counter/templates/counter/product_list.jinja:28 +msgid "There is no products in this website." +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:10 +msgid "Product type list" +msgstr "Liste des types de produit" + +#: counter/templates/counter/producttype_list.jinja:8 +msgid "New product type" +msgstr "Nouveau type de produit" + +#: counter/templates/counter/producttype_list.jinja:17 +msgid "There is no product types in this website." +msgstr "Il n'y a pas de types de produit dans ce site web." + +#: counter/templates/counter/stats.jinja:5 +#: counter/templates/counter/stats.jinja:9 +#, python-format +msgid "%(counter_name)s stats" +msgstr "Stats sur %(counter_name)s" + +#: counter/templates/counter/stats.jinja:10 +#, python-format +msgid "Top 100 %(counter_name)s" +msgstr "Top 100 %(counter_name)s" + +#: counter/templates/counter/stats.jinja:16 +msgid "Promo" +msgstr "Promo" + +#: counter/templates/counter/stats.jinja:19 +msgid "Percentage" +msgstr "Pourcentage" + +#: counter/views.py:55 +msgid "User not found" +msgstr "Utilisateur non trouvé" + +#: counter/views.py:84 +msgid "Cash summary" +msgstr "Relevé de caisse" + +#: counter/views.py:89 +msgid "Last operations" +msgstr "Dernières opérations" + +#: counter/views.py:94 +msgid "Stock items list" +msgstr "Liste des éléments du stock" + +#: counter/views.py:128 +msgid "Bad credentials" +msgstr "Mauvais identifiants" + +#: counter/views.py:130 +msgid "User is not barman" +msgstr "L'utilisateur n'est pas barman." + +#: counter/views.py:134 +msgid "Bad location, someone is already logged in somewhere else" +msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" + +#: counter/views.py:324 +msgid "END" +msgstr "FIN" + +#: counter/views.py:326 +msgid "CAN" +msgstr "ANN" + +#: counter/views.py:356 +msgid "You have not enough money to buy all the basket" +msgstr "Vous n'avez pas assez d'argent pour acheter le panier" + +#: counter/views.py:449 +msgid "Counter administration" +msgstr "Administration des comptoirs" + +#: counter/views.py:454 +msgid "Stocks" +msgstr "" + +#: counter/views.py:464 +msgid "Products" +msgstr "Produits" + +#: counter/views.py:469 +msgid "Archived products" +msgstr "Produits archivés" + +#: counter/views.py:474 +msgid "Product types" +msgstr "Types de produit" + +#: counter/views.py:605 +msgid "Parent product" +msgstr "Produit parent" + +#: counter/views.py:606 +msgid "Buying groups" +msgstr "Groupes d'achat" + +#: counter/views.py:701 +msgid "10 cents" +msgstr "10 centimes" + +#: counter/views.py:702 +msgid "20 cents" +msgstr "20 centimes" + +#: counter/views.py:703 +msgid "50 cents" +msgstr "50 centimes" + +#: counter/views.py:704 +msgid "1 euro" +msgstr "1 €" + +#: counter/views.py:705 +msgid "2 euros" +msgstr "2 €" + +#: counter/views.py:706 +msgid "5 euros" +msgstr "5 €" + +#: counter/views.py:707 +msgid "10 euros" +msgstr "10 €" + +#: counter/views.py:708 +msgid "20 euros" +msgstr "20 €" + +#: counter/views.py:709 +msgid "50 euros" +msgstr "50 €" + +#: counter/views.py:710 +msgid "100 euros" +msgstr "100 €" + +#: counter/views.py:711 counter/views.py:713 counter/views.py:715 +#: counter/views.py:717 counter/views.py:719 +msgid "Check amount" +msgstr "Montant du chèque" + +#: counter/views.py:712 counter/views.py:714 counter/views.py:716 +#: counter/views.py:718 counter/views.py:720 +msgid "Check quantity" +msgstr "Nombre de chèque" + +#: counter/views.py:1071 +msgid "people(s)" +msgstr "personne(s)" + +#: eboutic/models.py:49 +msgid "validated" +msgstr "validé" + +#: eboutic/models.py:62 +msgid "Invoice already validated" +msgstr "Facture déjà validée" + +#: eboutic/models.py:100 +msgid "product id" +msgstr "ID du produit" + +#: eboutic/models.py:101 +msgid "product name" +msgstr "nom du produit" + +#: eboutic/models.py:102 +msgid "product type id" +msgstr "id du type du produit" + +#: eboutic/models.py:113 +msgid "basket" +msgstr "panier" + +#: eboutic/templates/eboutic/eboutic_main.jinja:37 +msgid "Proceed to command" +msgstr "Procéder à la commande" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4 +msgid "Basket state" +msgstr "État du panier" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:35 +msgid "Pay with credit card" +msgstr "Payer avec une carte bancaire" + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:38 +msgid "" +"AE account payment disabled because your basket contains refilling items." +msgstr "" +"Paiement par compte AE désactivé parce que votre panier contient des bons de " +"rechargement." + +#: eboutic/templates/eboutic/eboutic_makecommand.jinja:43 +msgid "Pay with Sith account" +msgstr "Payer avec un compte AE" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:8 +msgid "Payment failed" +msgstr "Le paiement a échoué" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:10 +msgid "Payment successful" +msgstr "Le paiement a été effectué" + +#: eboutic/templates/eboutic/eboutic_payment_result.jinja:12 +msgid "Return to eboutic" +msgstr "Retourner à l'eboutic" + +#: eboutic/views.py:141 +msgid "You do not have enough money to buy the basket" +msgstr "Vous n'avez pas assez d'argent pour acheter le panier" + +#: launderette/models.py:19 +#: launderette/templates/launderette/launderette_book.jinja:5 +#: launderette/templates/launderette/launderette_book_choose.jinja:4 +#: launderette/templates/launderette/launderette_main.jinja:4 +msgid "Launderette" +msgstr "Laverie" + +#: launderette/models.py:61 launderette/models.py:86 +msgid "launderette" +msgstr "laverie" + +#: launderette/models.py:62 launderette/models.py:87 launderette/models.py:123 +#: stock/models.py:30 +msgid "type" +msgstr "type" + +#: launderette/models.py:63 +msgid "is working" +msgstr "fonctionne" + +#: launderette/models.py:66 +msgid "Machine" +msgstr "Machine" + +#: launderette/models.py:88 +msgid "borrow date" +msgstr "date d'emprunt" + +#: launderette/models.py:92 +msgid "Token" +msgstr "Jeton" + +#: launderette/models.py:98 +msgid "Token name can not be blank" +msgstr "Le nom du jeton ne peut pas être vide" + +#: launderette/models.py:124 +msgid "machine" +msgstr "machine" + +#: launderette/templates/launderette/launderette_admin.jinja:4 +msgid "Launderette admin" +msgstr "Gestion de la laverie" + +#: launderette/templates/launderette/launderette_admin.jinja:9 +msgid "Sell" +msgstr "Vendre" + +#: launderette/templates/launderette/launderette_admin.jinja:11 +msgid "Machines" +msgstr "Machines" + +#: launderette/templates/launderette/launderette_admin.jinja:12 +msgid "New machine" +msgstr "Nouvelle machine" + +#: launderette/templates/launderette/launderette_admin.jinja:42 +#: launderette/views.py:148 +msgid "Type" +msgstr "Type" + +#: launderette/templates/launderette/launderette_book.jinja:12 +msgid "Choose" +msgstr "Choisir" + +#: launderette/templates/launderette/launderette_book.jinja:23 +msgid "Washing and drying" +msgstr "Lavage et séchage" + +#: launderette/templates/launderette/launderette_book.jinja:27 +#: sith/settings.py:444 +msgid "Washing" +msgstr "Lavage" + +#: launderette/templates/launderette/launderette_book.jinja:31 +#: sith/settings.py:444 +msgid "Drying" +msgstr "Séchage" + +#: launderette/templates/launderette/launderette_list.jinja:4 +#: launderette/templates/launderette/launderette_list.jinja:12 +msgid "Launderette admin list" +msgstr "Liste des laveries" + +#: launderette/templates/launderette/launderette_list.jinja:9 +msgid "New launderette" +msgstr "Nouvelle laverie" + +#: launderette/templates/launderette/launderette_list.jinja:20 +msgid "There is no launderette in this website." +msgstr "Il n'y a pas de laverie dans ce site web." + +#: launderette/templates/launderette/launderette_main.jinja:9 +msgid "Edit presentation page" +msgstr "Éditer la page de présentation" + +#: launderette/templates/launderette/launderette_main.jinja:12 +msgid "Book launderette slot" +msgstr "Réserver un créneau de laverie" + +#: launderette/views.py:147 +msgid "Action" +msgstr "Action" + +#: launderette/views.py:150 +msgid "Tokens, separated by spaces" +msgstr "Jetons, séparés par des espaces" + +#: launderette/views.py:165 launderette/views.py:179 +#, python-format +msgid "Token %(token_name)s does not exists" +msgstr "Le jeton %(token_name)s n'existe pas" + +#: launderette/views.py:173 +#, python-format +msgid "Token %(token_name)s already exists" +msgstr "Un jeton %(token_name)s existe déjà" + +#: launderette/views.py:229 +msgid "User has booked no slot" +msgstr "L'utilisateur n'a pas réservé de créneau" + +#: launderette/views.py:319 +msgid "Token not found" +msgstr "Jeton non trouvé" + +#: rootplace/templates/rootplace/merge.jinja:8 +msgid "Merge two users" +msgstr "Fusionner deux utilisateurs" + +#: rootplace/templates/rootplace/merge.jinja:12 +msgid "Merge" +msgstr "Fusion" + +#: rootplace/views.py:66 +msgid "User that will be kept" +msgstr "Utilisateur qui sera conservé" + +#: rootplace/views.py:67 +msgid "User that will be deleted" +msgstr "Utilisateur qui sera supprimé" + +#: sas/models.py:102 +msgid "picture" +msgstr "photo" + +#: sas/templates/sas/album.jinja:26 sas/templates/sas/album.jinja.py:28 +#: sas/templates/sas/album.jinja:30 sas/templates/sas/main.jinja:17 +#: sas/templates/sas/main.jinja.py:19 sas/templates/sas/main.jinja:21 +msgid "preview" +msgstr "miniature" + +#: sas/templates/sas/album.jinja:52 +msgid "Upload" +msgstr "Envoyer" + +#: sas/templates/sas/main.jinja:41 +msgid "Create" +msgstr "Créer" + +#: sas/templates/sas/moderation.jinja:4 sas/templates/sas/moderation.jinja:8 +msgid "SAS moderation" +msgstr "Modération du SAS" + +#: sas/templates/sas/moderation.jinja:27 +msgid "Asked for removal" +msgstr "Retrait demandé" + +#: sas/templates/sas/picture.jinja:60 +msgid "People" +msgstr "Personne(s)" + +#: sas/templates/sas/picture.jinja:85 +msgid "HD version" +msgstr "Version HD" + +#: sas/templates/sas/picture.jinja:89 +msgid "Rotate left" +msgstr "Tourner vers la gauche" + +#: sas/templates/sas/picture.jinja:90 +msgid "Rotate right" +msgstr "Tourner vers la droite" + +#: sas/templates/sas/picture.jinja:91 +msgid "Ask for removal" +msgstr "Demander le retrait" + +#: sas/views.py:25 +msgid "Add a new album" +msgstr "Ajouter un nouvel album" + +#: sas/views.py:26 +msgid "Upload images" +msgstr "Envoyer les images" + +#: sas/views.py:36 +#, python-format +msgid "Error creating album %(album)s: %(msg)s" +msgstr "Erreur de création de l'album %(album)s : %(msg)s" + +#: sas/views.py:53 +msgid "Add user" +msgstr "Ajouter une personne" + +#: sith/settings.py:167 +msgid "English" +msgstr "Anglais" + +#: sith/settings.py:168 +msgid "French" +msgstr "Français" + +#: sith/settings.py:294 sith/settings.py:301 sith/settings.py:322 +msgid "Check" +msgstr "Chèque" + +#: sith/settings.py:295 sith/settings.py:303 sith/settings.py:323 +msgid "Cash" +msgstr "Espèces" + +#: sith/settings.py:296 +msgid "Transfert" +msgstr "Virement" + +#: sith/settings.py:309 +msgid "Belfort" +msgstr "Belfort" + +#: sith/settings.py:310 +msgid "Sevenans" +msgstr "Sevenans" + +#: sith/settings.py:311 +msgid "Montbéliard" +msgstr "Montbéliard" + +#: sith/settings.py:351 +msgid "One semester" +msgstr "Un semestre, 15 €" + +#: sith/settings.py:356 +msgid "Two semesters" +msgstr "Deux semestres, 28 €" + +#: sith/settings.py:361 +msgid "Common core cursus" +msgstr "Cursus tronc commun, 45 €" + +#: sith/settings.py:366 +msgid "Branch cursus" +msgstr "Cursus branche, 45 €" + +#: sith/settings.py:371 +msgid "Alternating cursus" +msgstr "Cursus alternant, 30 €" + +#: sith/settings.py:376 +msgid "Honorary member" +msgstr "Membre honoraire, 0 €" + +#: sith/settings.py:381 +msgid "Assidu member" +msgstr "Membre d'Assidu, 0 €" + +#: sith/settings.py:386 +msgid "Amicale/DOCEO member" +msgstr "Membre de l'Amicale/DOCEO, 0 €" + +#: sith/settings.py:391 +msgid "UT network member" +msgstr "Cotisant du réseau UT, 0 €" + +#: sith/settings.py:396 +msgid "CROUS member" +msgstr "Membres du CROUS, 0 €" + +#: sith/settings.py:401 +msgid "Sbarro/ESTA member" +msgstr "Membre de Sbarro ou de l'ESTA, 15 €" + +#: sith/settings.py:409 +msgid "President" +msgstr "Président" + +#: sith/settings.py:410 +msgid "Vice-President" +msgstr "Vice-Président" + +#: sith/settings.py:411 +msgid "Treasurer" +msgstr "Trésorier" + +#: sith/settings.py:412 +msgid "Communication supervisor" +msgstr "Responsable com" + +#: sith/settings.py:413 +msgid "Secretary" +msgstr "Secrétaire" + +#: sith/settings.py:414 +msgid "IT supervisor" +msgstr "Responsable info" + +#: sith/settings.py:415 +msgid "Board member" +msgstr "Membre du bureau" + +#: sith/settings.py:416 +msgid "Active member" +msgstr "Membre actif" + +#: sith/settings.py:417 +msgid "Curious" +msgstr "Curieux" + +#: stock/models.py:25 +msgid "unit quantity" +msgstr "quantité unitaire" + +#: stock/models.py:26 +msgid "effective quantity" +msgstr "quantité effective" + +#: stock/models.py:27 +msgid "minimal quantity" +msgstr "quantité minimale" + +#: stock/models.py:29 +msgid "quantity to buy" +msgstr "quantité à acheter" + +#: stock/models.py:46 +msgid "todo" +msgstr "à faire" + +#: stock/models.py:47 +msgid "items to buy" +msgstr "éléments à acheter" + +#: stock/templates/stock/shopping_list_items.jinja:4 +#, python-format +msgid "%(shoppinglist)s's items" +msgstr "Éléments de %(shoppinglist)s" + +#: stock/templates/stock/shopping_list_items.jinja:20 +msgid "Number" +msgstr "Nombre" + +#: stock/templates/stock/shopping_list_quantity.jinja:4 +#: stock/templates/stock/shopping_list_quantity.jinja:8 +#, python-format +msgid "%(s)s's quantity to buy" +msgstr "Quantité à acheter pour %(s)s" + +#: stock/templates/stock/shopping_list_quantity.jinja:13 +#: stock/templates/stock/stock_shopping_list.jinja:9 +msgid "Create shopping list" +msgstr "Créer une liste de courses" + +#: stock/templates/stock/stock_item_list.jinja:10 +msgid "New item" +msgstr "Nouvel élément" + +#: stock/templates/stock/stock_item_list.jinja:23 +msgid "Others" +msgstr "Autres" + +#: stock/templates/stock/stock_item_list.jinja:30 +msgid "There is no items in this stock." +msgstr "Il n'y a pas d'éléments dans ce comptoir." + +#: stock/templates/stock/stock_list.jinja:4 +#: stock/templates/stock/stock_list.jinja:9 +msgid "Stock list" +msgstr "Liste des stocks" + +#: stock/templates/stock/stock_list.jinja:22 +msgid "There is no stocks in this website." +msgstr "Il n'y a pas de stock sur ce site web." + +#: stock/templates/stock/stock_main.jinja:9 +msgid "New Item" +msgstr "Nouvel élément" + +#: stock/templates/stock/stock_shopping_list.jinja:4 +#, python-format +msgid "Shopping list for %(s)s" +msgstr "Liste de courses pour %(s)s" + +#: stock/templates/stock/stock_shopping_list.jinja:11 +#, python-format +msgid "Shopping lists history for %(s)s" +msgstr "Historique des listes de courses pour %(s)s" + +#: stock/templates/stock/stock_shopping_list.jinja:14 +msgid "Information :" +msgstr "Information :" + +#: stock/templates/stock/stock_shopping_list.jinja:16 +msgid "" +"Use the \"update stock\" action when you get back from shopping to add the " +"effective quantity bought for each shopping list item." +msgstr "" +"L'action \"Mettre à jour le stock\" doit être utilisée lorsque vous revenez " +"des courses pour ajouter les quantités effectivement achetées pour chaque " +"élément." + +#: stock/templates/stock/stock_shopping_list.jinja:18 +msgid "" +"For example, 3 Cheesburger (boxes) are aksing in the list, but there were " +"only 2 so, 2 have to be added in the stock quantity." +msgstr "" +"Par exemple, 3 boites de cheeseburger sont demandées dans la liste, mais il " +"n'y en avait plus que 2, donc 2 doivent être ajoutées au stock." + +#: stock/templates/stock/stock_shopping_list.jinja:21 +msgid "To do" +msgstr "À faire" + +#: stock/templates/stock/stock_shopping_list.jinja:27 +#: stock/templates/stock/stock_shopping_list.jinja:56 +msgid "Number of items" +msgstr "Nombre d'éléments" + +#: stock/templates/stock/stock_shopping_list.jinja:37 +msgid "Update stock" +msgstr "Mettre à jour le stock" + +#: stock/templates/stock/stock_shopping_list.jinja:40 +msgid "Mark as done" +msgstr "Marquer comme effectué(e)" + +#: stock/templates/stock/stock_shopping_list.jinja:66 +msgid "Mark as to do" +msgstr "Marquer comme à faire" + +#: stock/templates/stock/update_after_shopping.jinja:4 +#: stock/templates/stock/update_after_shopping.jinja:8 +msgid "Update %(s)s's quantity after shopping" +msgstr "Mise à jour des stocks selon les quantités achetées pour %(s)s" + +#: stock/templates/stock/update_after_shopping.jinja:13 +msgid "Update stock quantities" +msgstr "" + +#: subscription/models.py:16 +msgid "Bad subscription type" +msgstr "Mauvais type de cotisation" + +#: subscription/models.py:20 +msgid "Bad payment method" +msgstr "Mauvais type de paiement" + +#: subscription/models.py:52 +msgid "subscription type" +msgstr "type d'inscription" + +#: subscription/models.py:55 +msgid "subscription start" +msgstr "début de la cotisation" + +#: subscription/models.py:56 +msgid "subscription end" +msgstr "fin de la cotisation" + +#: subscription/models.py:59 +msgid "location" +msgstr "lieu" + +#: subscription/models.py:68 +msgid "You can not subscribe many time for the same period" +msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" + +#: subscription/models.py:72 +msgid "Subscription error" +msgstr "Erreur de cotisation" + +#: subscription/views.py:54 +msgid "A user with that email address already exists" +msgstr "Un utilisateur avec cette adresse email existe déjà" + +#: subscription/views.py:70 +msgid "You must either choose an existing user or create a new one properly" +msgstr "" +"Vous devez soit choisir un utilisateur existant, ou en créer un proprement." diff --git a/stock/templates/stock/stock_shopping_list.jinja b/stock/templates/stock/stock_shopping_list.jinja index eaafe6c7..bdc3a40b 100644 --- a/stock/templates/stock/stock_shopping_list.jinja +++ b/stock/templates/stock/stock_shopping_list.jinja @@ -10,6 +10,14 @@ Shopping list for {{ stock }} {% endif %}

    {% trans s=stock %}Shopping lists history for {{ s }}{% endtrans %}

    +

    + {% trans %}Information :{% endtrans %} +
    + {% trans %}Use the "update stock" action when you get back from shopping to add the effective quantity bought for each shopping list item.{% endtrans %} +
    + {% trans %}For example, 3 Cheesburger (boxes) are aksing in the list, but there were only 2 so, 2 have to be added in the stock quantity.{% endtrans %} +

    +

    {% trans %}To do{% endtrans %}

    @@ -25,6 +33,9 @@ Shopping list for {{ stock }} + diff --git a/stock/templates/stock/update_after_shopping.jinja b/stock/templates/stock/update_after_shopping.jinja new file mode 100644 index 00000000..fb043985 --- /dev/null +++ b/stock/templates/stock/update_after_shopping.jinja @@ -0,0 +1,16 @@ +{% extends "core/base.jinja" %} + +{% block title %} +{% trans s = shoppinglist %}Update {{ s }}'s quantity after shopping{% endtrans %} +{% endblock %} + +{% block content %} +

    {% trans s = shoppinglist %}Update {{ s }}'s quantity after shopping{% endtrans %}

    +
    +
    + {% csrf_token %} + {{ form.as_p() }} +

    + +
    +{% endblock %} \ No newline at end of file diff --git a/stock/urls.py b/stock/urls.py index 987c7a3b..7a84cf99 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -24,4 +24,6 @@ urlpatterns = [ name='shoppinglist_set_done'), url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), name='shoppinglist_set_todo'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/updateStock$', StockUpdateAfterShopppingBaseFormView.as_view(), + name='update_after_shopping'), ] diff --git a/stock/views.py b/stock/views.py index 2b4468c6..44735e4e 100644 --- a/stock/views.py +++ b/stock/views.py @@ -218,15 +218,9 @@ class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailV return super(StockItemQuantityBaseFormView, self).post(request, *args, **kwargs) def form_valid(self, form): - """ - We handle here the redirection, passing the user id of the asked customer - """ return super(StockItemQuantityBaseFormView, self).form_valid(form) def get_context_data(self, **kwargs): - """ - We handle here the login form for the barman - """ kwargs = super(StockItemQuantityBaseFormView, self).get_context_data(**kwargs) if 'form' not in kwargs.keys(): kwargs['form'] = self.get_form() @@ -297,3 +291,69 @@ class StockShopppingListSetTodo(CanEditMixin, DetailView): def post(self, request, *args, **kwargs): self.object = self.get_object() return HttpResponseRedirect(reverse('stock:shoppinglist_list', args=self.args, kwargs={'stock_id':self.object.stock_owner.id})) + + +class StockUpdateAfterShopppingForm(forms.BaseForm): + def clean(self): + with transaction.atomic(): + self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() + for k,t in self.cleaned_data.items(): + item_id = int(k[5:]) + if int(t) > 0 : + item = StockItem.objects.filter(id=item_id).first() + item.effective_quantity += int(t) + item.save() + self.shoppinglist.todo = False + self.shoppinglist.save() + return self.cleaned_data + +class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): + """ + docstring for StockUpdateAfterShopppingBaseFormView + """ + model = ShoppingList + template_name = "stock/update_after_shopping.jinja" + pk_url_kwarg = "shoppinglist_id" + current_tab = "stocks" + + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + for t in ProductType.objects.order_by('name').all(): + for i in self.shoppinglist.items_to_buy.filter(type=t).order_by('name').all(): + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), + help_text=str(i.tobuy_quantity) + " asked") + kwargs['shoppinglist_id'] = self.shoppinglist.id + kwargs['base_fields'] = fields + return type('StockUpdateAfterShopppingForm', (StockUpdateAfterShopppingForm,), kwargs) + + def get(self, request, *args, **kwargs): + self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() + return super(StockUpdateAfterShopppingBaseFormView, self).get(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() + return super(StockUpdateAfterShopppingBaseFormView, self).post(request, *args, **kwargs) + + def form_valid(self, form): + """ + We handle here the redirection + """ + return super(StockUpdateAfterShopppingBaseFormView, self).form_valid(form) + + def get_context_data(self, **kwargs): + kwargs = super(StockUpdateAfterShopppingBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['shoppinglist'] = self.shoppinglist + kwargs['stock'] = self.shoppinglist.stock_owner + return kwargs + + def get_success_url(self): + self.kwargs.pop('shoppinglist_id', None) + return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) From 8f88f7cb70dd9b23629468e2e58e33281de586a3 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Tue, 3 Jan 2017 14:50:49 +0100 Subject: [PATCH 17/27] Take item from stock form addition --- counter/views.py | 23 ++-- locale/fr/LC_MESSAGES/django.po | 108 +++++++++++-------- stock/templates/stock/stock_take_items.jinja | 17 +++ stock/urls.py | 1 + stock/views.py | 84 ++++++++++++++- 5 files changed, 175 insertions(+), 58 deletions(-) create mode 100644 stock/templates/stock/stock_take_items.jinja diff --git a/counter/views.py b/counter/views.py index 4678fd44..22f4e7fb 100644 --- a/counter/views.py +++ b/counter/views.py @@ -69,29 +69,36 @@ class RefillForm(forms.ModelForm): class CounterTabsMixin(TabedViewMixin): def get_tabs_title(self): - return self.object + if hasattr(self.object, 'stock_owner') : + return self.object.stock_owner.counter + else: + return self.object def get_list_of_tabs(self): tab_list = [] tab_list.append({ - 'url': reverse_lazy('counter:details', kwargs={'counter_id': self.object.id}), + 'url': reverse_lazy('counter:details', + kwargs={'counter_id': self.object.stock_owner.counter.id if hasattr(self.object, 'stock_owner') else self.object.id }), 'slug': 'counter', 'name': _("Counter"), }) - if self.object.type == "BAR": + if self.object.stock_owner.counter.type if hasattr(self.object, 'stock_owner') else self.object.type == "BAR": tab_list.append({ - 'url': reverse_lazy('counter:cash_summary', kwargs={'counter_id': self.object.id}), + 'url': reverse_lazy('counter:cash_summary', + kwargs={'counter_id': self.object.stock_owner.counter.id if hasattr(self.object, 'stock_owner') else self.object.id}), 'slug': 'cash_summary', 'name': _("Cash summary"), }) tab_list.append({ - 'url': reverse_lazy('counter:last_ops', kwargs={'counter_id': self.object.id}), + 'url': reverse_lazy('counter:last_ops', + kwargs={'counter_id': self.object.stock_owner.counter.id if hasattr(self.object, 'stock_owner') else self.object.id}), 'slug': 'last_ops', 'name': _("Last operations"), }) tab_list.append({ - 'url': reverse_lazy('stock:items_list', kwargs={'stock_id': self.object.stock.id}), - 'slug': 'stock_items_list', - 'name': _("Stock items list"), + 'url': reverse_lazy('stock:take_items', + kwargs={'stock_id': self.object.stock.id if hasattr(self.object, 'stock') else self.object.stock_owner.id}), + 'slug': 'take_items_from_stock', + 'name': _("Take items from stock"), }) return tab_list diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index b868605f..2df6d543 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-29 18:13+0100\n" +"POT-Creation-Date: 2017-01-03 14:35+0100\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -519,10 +519,10 @@ msgstr "Nature" #: accounting/templates/accounting/journal_details.jinja:36 #: stock/templates/stock/stock_shopping_list.jinja:50 msgid "Done" -msgstr "Effectué" +msgstr "Effectuées" #: accounting/templates/accounting/journal_details.jinja:37 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:721 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:728 msgid "Comment" msgstr "Commentaire" @@ -783,7 +783,7 @@ msgstr "Total : " #: club/templates/club/club_sellings.jinja:20 club/views.py:167 #: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:78 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:82 msgid "Counter" msgstr "Comptoir" @@ -870,16 +870,16 @@ msgstr "Choisir un utilisateur" msgid "You do not have the permission to do that" msgstr "Vous n'avez pas la permission de faire cela" -#: club/views.py:165 counter/views.py:919 +#: club/views.py:165 counter/views.py:926 msgid "Begin date" msgstr "Date de début" -#: club/views.py:166 counter/views.py:920 +#: club/views.py:166 counter/views.py:927 msgid "End date" msgstr "Date de fin" #: club/views.py:180 core/templates/core/user_stats.jinja:27 -#: counter/views.py:1000 +#: counter/views.py:1007 msgid "Product" msgstr "Produit" @@ -1826,7 +1826,7 @@ msgstr "Rechargements" msgid "Eboutic invoices" msgstr "Facture eboutic" -#: core/templates/core/user_account.jinja:53 counter/views.py:489 +#: core/templates/core/user_account.jinja:53 counter/views.py:496 msgid "Etickets" msgstr "Etickets" @@ -2003,8 +2003,8 @@ msgstr "Fusionner deux utilisateurs" msgid "Subscriptions" msgstr "Cotisations" -#: core/templates/core/user_tools.jinja:24 counter/views.py:459 -#: counter/views.py:608 +#: core/templates/core/user_tools.jinja:24 counter/views.py:466 +#: counter/views.py:615 msgid "Counters" msgstr "Comptoirs" @@ -2025,7 +2025,7 @@ msgid "Product types management" msgstr "Gestion des types de produit" #: core/templates/core/user_tools.jinja:31 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:479 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:486 msgid "Cash register summaries" msgstr "Relevés de caisse" @@ -2377,7 +2377,7 @@ msgstr "Liste des relevés de caisse" msgid "Theoric sums" msgstr "Sommes théoriques" -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:722 +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:729 msgid "Emptied" msgstr "Coffre vidé" @@ -2501,7 +2501,7 @@ msgstr "Nouveau eticket" msgid "There is no eticket in this website." msgstr "Il n'y a pas de eticket sur ce site web." -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:484 +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:491 msgid "Invoices call" msgstr "Appels à facture" @@ -2577,121 +2577,121 @@ msgstr "Pourcentage" msgid "User not found" msgstr "Utilisateur non trouvé" -#: counter/views.py:84 +#: counter/views.py:89 msgid "Cash summary" msgstr "Relevé de caisse" -#: counter/views.py:89 +#: counter/views.py:95 msgid "Last operations" msgstr "Dernières opérations" -#: counter/views.py:94 -msgid "Stock items list" -msgstr "Liste des éléments du stock" +#: counter/views.py:101 +msgid "Take items from stock" +msgstr "" -#: counter/views.py:128 +#: counter/views.py:135 msgid "Bad credentials" msgstr "Mauvais identifiants" -#: counter/views.py:130 +#: counter/views.py:137 msgid "User is not barman" msgstr "L'utilisateur n'est pas barman." -#: counter/views.py:134 +#: counter/views.py:141 msgid "Bad location, someone is already logged in somewhere else" msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" -#: counter/views.py:324 +#: counter/views.py:331 msgid "END" msgstr "FIN" -#: counter/views.py:326 +#: counter/views.py:333 msgid "CAN" msgstr "ANN" -#: counter/views.py:356 +#: counter/views.py:363 msgid "You have not enough money to buy all the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: counter/views.py:449 +#: counter/views.py:456 msgid "Counter administration" msgstr "Administration des comptoirs" -#: counter/views.py:454 +#: counter/views.py:461 msgid "Stocks" msgstr "" -#: counter/views.py:464 +#: counter/views.py:471 msgid "Products" msgstr "Produits" -#: counter/views.py:469 +#: counter/views.py:476 msgid "Archived products" msgstr "Produits archivés" -#: counter/views.py:474 +#: counter/views.py:481 msgid "Product types" msgstr "Types de produit" -#: counter/views.py:605 +#: counter/views.py:612 msgid "Parent product" msgstr "Produit parent" -#: counter/views.py:606 +#: counter/views.py:613 msgid "Buying groups" msgstr "Groupes d'achat" -#: counter/views.py:701 +#: counter/views.py:708 msgid "10 cents" msgstr "10 centimes" -#: counter/views.py:702 +#: counter/views.py:709 msgid "20 cents" msgstr "20 centimes" -#: counter/views.py:703 +#: counter/views.py:710 msgid "50 cents" msgstr "50 centimes" -#: counter/views.py:704 +#: counter/views.py:711 msgid "1 euro" msgstr "1 €" -#: counter/views.py:705 +#: counter/views.py:712 msgid "2 euros" msgstr "2 €" -#: counter/views.py:706 +#: counter/views.py:713 msgid "5 euros" msgstr "5 €" -#: counter/views.py:707 +#: counter/views.py:714 msgid "10 euros" msgstr "10 €" -#: counter/views.py:708 +#: counter/views.py:715 msgid "20 euros" msgstr "20 €" -#: counter/views.py:709 +#: counter/views.py:716 msgid "50 euros" msgstr "50 €" -#: counter/views.py:710 +#: counter/views.py:717 msgid "100 euros" msgstr "100 €" -#: counter/views.py:711 counter/views.py:713 counter/views.py:715 -#: counter/views.py:717 counter/views.py:719 +#: counter/views.py:718 counter/views.py:720 counter/views.py:722 +#: counter/views.py:724 counter/views.py:726 msgid "Check amount" msgstr "Montant du chèque" -#: counter/views.py:712 counter/views.py:714 counter/views.py:716 -#: counter/views.py:718 counter/views.py:720 +#: counter/views.py:719 counter/views.py:721 counter/views.py:723 +#: counter/views.py:725 counter/views.py:727 msgid "Check quantity" msgstr "Nombre de chèque" -#: counter/views.py:1071 +#: counter/views.py:1078 msgid "people(s)" msgstr "personne(s)" @@ -3196,8 +3196,21 @@ msgstr "Marquer comme effectué(e)" msgid "Mark as to do" msgstr "Marquer comme à faire" +#: stock/templates/stock/stock_take_items.jinja:5 +#: stock/templates/stock/stock_take_items.jinja:9 +#, python-format +msgid "Take items form %(s)s" +msgstr "" + +#: stock/templates/stock/stock_take_items.jinja:14 +#, fuzzy +#| msgid "Take picture" +msgid "Take items" +msgstr "Prendre une photo" + #: stock/templates/stock/update_after_shopping.jinja:4 #: stock/templates/stock/update_after_shopping.jinja:8 +#, python-format msgid "Update %(s)s's quantity after shopping" msgstr "Mise à jour des stocks selon les quantités achetées pour %(s)s" @@ -3245,3 +3258,6 @@ 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 "Stock items list" +#~ msgstr "Liste des éléments du stock" diff --git a/stock/templates/stock/stock_take_items.jinja b/stock/templates/stock/stock_take_items.jinja new file mode 100644 index 00000000..f61a2d09 --- /dev/null +++ b/stock/templates/stock/stock_take_items.jinja @@ -0,0 +1,17 @@ +{% extends "core/base.jinja" %} +{% from 'core/macros.jinja' import user_profile_link %} + +{% block title %} +{% trans s = stock %}Take items form {{ s }}{% endtrans %} +{% endblock %} + +{% block content %} +

    {% trans s = stock %}Take items form {{ s }}{% endtrans %}

    +
    +
    + {% csrf_token %} + {{ form.as_p() }} +

    + +
    +{% endblock %} diff --git a/stock/urls.py b/stock/urls.py index 7a84cf99..b7744e45 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -12,6 +12,7 @@ urlpatterns = [ url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), + url(r'^(?P[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'), # ShoppingList urls url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), diff --git a/stock/views.py b/stock/views.py index 44735e4e..2acfb50c 100644 --- a/stock/views.py +++ b/stock/views.py @@ -8,10 +8,9 @@ from django.forms.models import modelform_factory from django.core.urlresolvers import reverse_lazy, reverse from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin -from counter.views import CounterAdminTabsMixin -from counter.models import Counter -from stock.models import Stock, StockItem - +from counter.views import CounterAdminTabsMixin, CounterTabsMixin +from counter.models import Counter, ProductType +from stock.models import Stock, StockItem, ShoppingList class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): @@ -23,6 +22,9 @@ class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): pk_url_kwarg = "stock_id" current_tab = "stocks" + #def can_be_viewed_by(self, user): + #return user.is_in_group(settings.SITH_GROUPS['counter-admin'].id) + class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ A list view for the admins @@ -357,3 +359,77 @@ class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin, def get_success_url(self): self.kwargs.pop('shoppinglist_id', None) return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) + + +class StockTakeItemsForm(forms.BaseForm): + """ + docstring for StockTakeItemsFormView + """ + def clean(self): + with transaction.atomic(): + for k,t in self.cleaned_data.items(): + item_id = int(k[5:]) + if int(t) > 0 : + item = StockItem.objects.filter(id=item_id).first() + item.effective_quantity -= int(t) + item.save() + return self.cleaned_data + + +class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, BaseFormView): + """ + docstring for StockTakeItemsBaseFormView + """ + model = StockItem + template_name = "stock/stock_take_items.jinja" + pk_url_kwarg = "stock_id" + current_tab = "take_items_from_stock" + + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + for t in ProductType.objects.order_by('name').all(): + for i in self.stock.items.filter(type=t).order_by('name').all(): + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i)) + kwargs[field_name] = i.effective_quantity + kwargs['stock_id'] = self.stock.id + kwargs['counter_id'] = self.stock.counter.id + kwargs['base_fields'] = fields + return type('StockTakeItemsForm', (StockTakeItemsForm,), kwargs) + + def get(self, request, *args, **kwargs): + """ + Simple get view + """ + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockTakeItemsBaseFormView, self).get(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + if self.stock.counter.type == "BAR" and not ('counter_token' in self.request.session.keys() and + self.request.session['counter_token'] == self.stock.counter.token): # Also check the token to avoid the bar to be stolen + return HttpResponseRedirect(reverse_lazy('counter:details', args=self.args, + kwargs={'counter_id': self.stock.counter.id})+'?bad_location') + return super(StockTakeItemsBaseFormView, self).post(request, *args, **kwargs) + + def form_valid(self, form): + return super(StockTakeItemsBaseFormView, self).form_valid(form) + + def get_context_data(self, **kwargs): + kwargs = super(StockTakeItemsBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['stock'] = self.stock + kwargs['counter'] = self.stock.counter + return kwargs + + def get_success_url(self): + stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + self.kwargs['counter_id'] = stock.counter.id + self.kwargs.pop('stock_id', None) + return reverse_lazy('counter:details', args=self.args, kwargs=self.kwargs) From fa97929da80c096825cf8a51e818b49279356ed2 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Tue, 3 Jan 2017 16:29:13 +0100 Subject: [PATCH 18/27] Some classes defined twice -- correction --- stock/views.py | 46 +++++++++------------------------------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/stock/views.py b/stock/views.py index 2acfb50c..6520e650 100644 --- a/stock/views.py +++ b/stock/views.py @@ -22,9 +22,9 @@ class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): pk_url_kwarg = "stock_id" current_tab = "stocks" - #def can_be_viewed_by(self, user): - #return user.is_in_group(settings.SITH_GROUPS['counter-admin'].id) - + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ A list view for the admins @@ -33,6 +33,9 @@ class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): template_name = 'stock/stock_list.jinja' current_tab = "stocks" + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + class StockEditForm(forms.ModelForm): """ @@ -64,41 +67,10 @@ class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() return context -class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """ - A list view for the admins - """ - model = Stock - template_name = 'stock/stock_list.jinja' - current_tab = "stocks" - - -class StockEditForm(forms.ModelForm): - """ - A form to change stock's characteristics - """ - class Meta: - model = Stock - fields = ['name', 'counter'] - - def __init__(self, *args, **kwargs): - super(StockEditForm, self).__init__(*args, **kwargs) - - def save(self, *args, **kwargs): - return super(StockEditForm, self).save(*args, **kwargs) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) -class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): - """ - An edit view for the stock - """ - model = Stock - form_class = StockEditForm - pk_url_kwarg = "stock_id" - template_name = 'core/edit.jinja' - current_tab = "stocks" - - class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): """ An edit view for a stock item @@ -432,4 +404,4 @@ class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, Bas stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() self.kwargs['counter_id'] = stock.counter.id self.kwargs.pop('stock_id', None) - return reverse_lazy('counter:details', args=self.args, kwargs=self.kwargs) + return reverse_lazy('counter:details', args=self.args, kwargs=self.kwargs) \ No newline at end of file From 62200827c2df8f8aee40e172384afef058cf4ff7 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Thu, 5 Jan 2017 00:52:27 +0100 Subject: [PATCH 19/27] Finish back up app Stock --- stock/models.py | 11 +++++++++++ stock/views.py | 12 ++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/stock/models.py b/stock/models.py index 46f30b34..666e7117 100644 --- a/stock/models.py +++ b/stock/models.py @@ -1,6 +1,8 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse +from django.conf import settings + from counter.models import Counter, ProductType @@ -17,6 +19,9 @@ class Stock(models.Model): def get_absolute_url(self): return reverse('stock:list') + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + class StockItem(models.Model): """ The StockItem class, element of the stock @@ -34,6 +39,9 @@ class StockItem(models.Model): def get_absolute_url(self): return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + class ShoppingList(models.Model): """ The ShoppingList class, used to make an history of the shopping lists @@ -49,3 +57,6 @@ class ShoppingList(models.Model): def get_absolute_url(self): return reverse('stock:shoppinglist_list') + + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) diff --git a/stock/views.py b/stock/views.py index 6520e650..96fa90ca 100644 --- a/stock/views.py +++ b/stock/views.py @@ -22,8 +22,11 @@ class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): pk_url_kwarg = "stock_id" current_tab = "stocks" - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def get_context_data(self): + ret = super(StockItemList, self).get_context_data() + if 'stock_id' in self.kwargs.keys(): + ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); + return ret class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): """ @@ -35,7 +38,7 @@ class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): def can_be_viewed_by(self, user): return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) - + class StockEditForm(forms.ModelForm): """ @@ -66,9 +69,6 @@ class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): if 'stock' in self.request.GET.keys(): context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() return context - - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): From 539faccab2960b188c593cbc513ae75af2ac20de Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Sat, 7 Jan 2017 11:17:06 +0100 Subject: [PATCH 20/27] Update shopping list history (ShoppingListItem creation) --- stock/admin.py | 6 +- stock/migrations/0001_initial.py | 33 ++++++++-- stock/migrations/0002_auto_20161113_2325.py | 31 --------- stock/migrations/0002_auto_20170105_2017.py | 29 +++++++++ stock/migrations/0003_auto_20161116_1338.py | 35 ---------- stock/migrations/0003_auto_20170105_2138.py | 32 ++++++++++ stock/migrations/0004_auto_20170105_2145.py | 32 ++++++++++ stock/migrations/0005_auto_20170107_0857.py | 46 +++++++++++++ stock/migrations/0006_auto_20170107_0910.py | 48 ++++++++++++++ .../migrations/0007_shoppinglistitem_type.py | 21 ++++++ ...228_1717.py => 0008_auto_20170107_1012.py} | 8 +-- stock/models.py | 28 +++++++- .../templates/stock/shopping_list_items.jinja | 25 ++++++-- .../templates/stock/stock_shopping_list.jinja | 8 +-- stock/views.py | 64 +++++++++++++------ 15 files changed, 337 insertions(+), 109 deletions(-) delete mode 100644 stock/migrations/0002_auto_20161113_2325.py create mode 100644 stock/migrations/0002_auto_20170105_2017.py delete mode 100644 stock/migrations/0003_auto_20161116_1338.py create mode 100644 stock/migrations/0003_auto_20170105_2138.py create mode 100644 stock/migrations/0004_auto_20170105_2145.py create mode 100644 stock/migrations/0005_auto_20170107_0857.py create mode 100644 stock/migrations/0006_auto_20170107_0910.py create mode 100644 stock/migrations/0007_shoppinglistitem_type.py rename stock/migrations/{0014_auto_20161228_1717.py => 0008_auto_20170107_1012.py} (51%) diff --git a/stock/admin.py b/stock/admin.py index 08bb8622..63054a75 100644 --- a/stock/admin.py +++ b/stock/admin.py @@ -1,7 +1,9 @@ from django.contrib import admin -from stock.models import Stock, StockItem +from stock.models import Stock, StockItem, ShoppingList, ShoppingListItem # Register your models here. admin.site.register(Stock) -admin.site.register(StockItem) \ No newline at end of file +admin.site.register(StockItem) +admin.site.register(ShoppingList) +admin.site.register(ShoppingListItem) \ No newline at end of file diff --git a/stock/migrations/0001_initial.py b/stock/migrations/0001_initial.py index 75e99f5a..f9771e9a 100644 --- a/stock/migrations/0001_initial.py +++ b/stock/migrations/0001_initial.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -11,22 +12,42 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='ShoppingList', + fields=[ + ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), + ('date', models.DateTimeField(verbose_name='date')), + ('name', models.CharField(max_length=64, verbose_name='name')), + ('todo', models.BooleanField(verbose_name='todo')), + ], + ), migrations.CreateModel( name='Stock', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=64, verbose_name='name')), - ('counter', models.OneToOneField(to='counter.Counter', related_name='stock', verbose_name='counter')), + ('counter', models.OneToOneField(to='counter.Counter', verbose_name='counter', related_name='stock')), ], ), migrations.CreateModel( name='StockItem', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=64, verbose_name='name')), - ('unit_quantity', models.IntegerField(default=0, verbose_name='unit quantity')), - ('effective_quantity', models.IntegerField(default=0, verbose_name='effective quantity')), - ('stock_owner', models.ForeignKey(related_name='stock_owner', to='stock.Stock')), + ('unit_quantity', models.IntegerField(default=0, help_text='number of element in one box', verbose_name='unit quantity')), + ('effective_quantity', models.IntegerField(default=0, help_text='number of box', verbose_name='effective quantity')), + ('stock_owner', models.ForeignKey(to='stock.Stock', related_name='items')), + ('type', models.ForeignKey(to='counter.ProductType', on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='type', blank=True, related_name='stock_items')), ], ), + migrations.AddField( + model_name='shoppinglist', + name='items_to_buy', + field=models.ManyToManyField(to='stock.StockItem', related_name='shopping_lists', verbose_name='items to buy'), + ), + migrations.AddField( + model_name='shoppinglist', + name='stock_owner', + field=models.ForeignKey(to='stock.Stock', null=True, related_name='shopping_lists'), + ), ] diff --git a/stock/migrations/0002_auto_20161113_2325.py b/stock/migrations/0002_auto_20161113_2325.py deleted file mode 100644 index 8f36b593..00000000 --- a/stock/migrations/0002_auto_20161113_2325.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('counter', '0011_auto_20161004_2039'), - ('stock', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='stockitem', - name='type', - field=models.ForeignKey(to='counter.ProductType', blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='type', related_name='stockItem_type'), - ), - migrations.AlterField( - model_name='stockitem', - name='effective_quantity', - field=models.IntegerField(help_text='total number of bottle/barrel', verbose_name='effective quantity', default=0), - ), - migrations.AlterField( - model_name='stockitem', - name='unit_quantity', - field=models.IntegerField(help_text='number of beer in one crate (equal one for barrels)', verbose_name='unit quantity', default=0), - ), - ] diff --git a/stock/migrations/0002_auto_20170105_2017.py b/stock/migrations/0002_auto_20170105_2017.py new file mode 100644 index 00000000..326ef815 --- /dev/null +++ b/stock/migrations/0002_auto_20170105_2017.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='stockitem', + name='bought_quantity', + field=models.IntegerField(help_text='quantity bought during the last shopping session', default=6, verbose_name='quantity bought'), + ), + migrations.AddField( + model_name='stockitem', + name='minimal_quantity', + field=models.IntegerField(help_text='if the effective quantity is less than the minimal, item is added to the shopping list', default=1, verbose_name='minimal quantity'), + ), + migrations.AddField( + model_name='stockitem', + name='tobuy_quantity', + field=models.IntegerField(help_text='quantity to buy during the next shopping session', default=6, verbose_name='quantity to buy'), + ), + ] diff --git a/stock/migrations/0003_auto_20161116_1338.py b/stock/migrations/0003_auto_20161116_1338.py deleted file mode 100644 index 89a0c19b..00000000 --- a/stock/migrations/0003_auto_20161116_1338.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0002_auto_20161113_2325'), - ] - - operations = [ - migrations.AlterField( - model_name='stockitem', - name='effective_quantity', - field=models.IntegerField(default=0, verbose_name='effective quantity', help_text='number of box'), - ), - migrations.AlterField( - model_name='stockitem', - name='stock_owner', - field=models.ForeignKey(related_name='items', to='stock.Stock'), - ), - migrations.AlterField( - model_name='stockitem', - name='type', - field=models.ForeignKey(related_name='stock_items', verbose_name='type', null=True, to='counter.ProductType', blank=True, on_delete=django.db.models.deletion.SET_NULL), - ), - migrations.AlterField( - model_name='stockitem', - name='unit_quantity', - field=models.IntegerField(default=0, verbose_name='unit quantity', help_text='number of element in one box'), - ), - ] diff --git a/stock/migrations/0003_auto_20170105_2138.py b/stock/migrations/0003_auto_20170105_2138.py new file mode 100644 index 00000000..a05ff305 --- /dev/null +++ b/stock/migrations/0003_auto_20170105_2138.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0002_auto_20170105_2017'), + ] + + operations = [ + migrations.RemoveField( + model_name='stockitem', + name='bought_quantity', + ), + migrations.RemoveField( + model_name='stockitem', + name='tobuy_quantity', + ), + migrations.AddField( + model_name='shoppinglist', + name='bought_quantity', + field=models.IntegerField(help_text='quantity bought during the last shopping session', default=6, verbose_name='quantity bought'), + ), + migrations.AddField( + model_name='shoppinglist', + name='tobuy_quantity', + field=models.IntegerField(help_text='quantity to buy during the next shopping session', default=6, verbose_name='quantity to buy'), + ), + ] diff --git a/stock/migrations/0004_auto_20170105_2145.py b/stock/migrations/0004_auto_20170105_2145.py new file mode 100644 index 00000000..e8acdaea --- /dev/null +++ b/stock/migrations/0004_auto_20170105_2145.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0003_auto_20170105_2138'), + ] + + operations = [ + migrations.RemoveField( + model_name='shoppinglist', + name='bought_quantity', + ), + migrations.RemoveField( + model_name='shoppinglist', + name='tobuy_quantity', + ), + migrations.AddField( + model_name='stockitem', + name='bought_quantity', + field=models.IntegerField(help_text='quantity bought during the last shopping session', verbose_name='quantity bought', default=6), + ), + migrations.AddField( + model_name='stockitem', + name='tobuy_quantity', + field=models.IntegerField(help_text='quantity to buy during the next shopping session', verbose_name='quantity to buy', default=6), + ), + ] diff --git a/stock/migrations/0005_auto_20170107_0857.py b/stock/migrations/0005_auto_20170107_0857.py new file mode 100644 index 00000000..4363bb47 --- /dev/null +++ b/stock/migrations/0005_auto_20170107_0857.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0004_auto_20170105_2145'), + ] + + operations = [ + migrations.CreateModel( + name='ShoppingListItems', + fields=[ + ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), + ('name', models.CharField(max_length=64, verbose_name='name')), + ('tobuy_quantity', models.IntegerField(verbose_name='quantity to buy', default=6, help_text='quantity to buy during the next shopping session')), + ('bought_quantity', models.IntegerField(verbose_name='quantity bought', default=6, help_text='quantity bought during the last shopping session')), + ], + ), + migrations.RemoveField( + model_name='stockitem', + name='bought_quantity', + ), + migrations.RemoveField( + model_name='stockitem', + name='tobuy_quantity', + ), + migrations.AddField( + model_name='shoppinglist', + name='comment', + field=models.TextField(null=True, verbose_name='comment', blank=True), + ), + migrations.AddField( + model_name='shoppinglistitems', + name='shoppinglist_owner', + field=models.ForeignKey(related_name='item_quantity', to='stock.ShoppingList'), + ), + migrations.AddField( + model_name='shoppinglistitems', + name='stockitem_owner', + field=models.ForeignKey(related_name='item', null=True, to='stock.StockItem'), + ), + ] diff --git a/stock/migrations/0006_auto_20170107_0910.py b/stock/migrations/0006_auto_20170107_0910.py new file mode 100644 index 00000000..c58cbdca --- /dev/null +++ b/stock/migrations/0006_auto_20170107_0910.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0005_auto_20170107_0857'), + ] + + operations = [ + migrations.CreateModel( + name='ShoppingListItem', + fields=[ + ('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')), + ('name', models.CharField(max_length=64, verbose_name='name')), + ('tobuy_quantity', models.IntegerField(default=6, help_text='quantity to buy during the next shopping session', verbose_name='quantity to buy')), + ('bought_quantity', models.IntegerField(default=0, help_text='quantity bought during the last shopping session', verbose_name='quantity bought')), + ], + ), + migrations.RemoveField( + model_name='shoppinglistitems', + name='shoppinglist_owner', + ), + migrations.RemoveField( + model_name='shoppinglistitems', + name='stockitem_owner', + ), + migrations.RemoveField( + model_name='shoppinglist', + name='items_to_buy', + ), + migrations.DeleteModel( + name='ShoppingListItems', + ), + migrations.AddField( + model_name='shoppinglistitem', + name='shopping_lists', + field=models.ManyToManyField(related_name='shopping_items_to_buy', to='stock.ShoppingList', verbose_name='shopping lists'), + ), + migrations.AddField( + model_name='shoppinglistitem', + name='stockitem_owner', + field=models.ForeignKey(related_name='item', null=True, to='stock.StockItem'), + ), + ] diff --git a/stock/migrations/0007_shoppinglistitem_type.py b/stock/migrations/0007_shoppinglistitem_type.py new file mode 100644 index 00000000..4cf4c036 --- /dev/null +++ b/stock/migrations/0007_shoppinglistitem_type.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('counter', '0011_auto_20161004_2039'), + ('stock', '0006_auto_20170107_0910'), + ] + + operations = [ + migrations.AddField( + model_name='shoppinglistitem', + name='type', + field=models.ForeignKey(null=True, verbose_name='type', on_delete=django.db.models.deletion.SET_NULL, to='counter.ProductType', blank=True, related_name='shoppinglist_items'), + ), + ] diff --git a/stock/migrations/0014_auto_20161228_1717.py b/stock/migrations/0008_auto_20170107_1012.py similarity index 51% rename from stock/migrations/0014_auto_20161228_1717.py rename to stock/migrations/0008_auto_20170107_1012.py index f6b7bfb4..2896537a 100644 --- a/stock/migrations/0014_auto_20161228_1717.py +++ b/stock/migrations/0008_auto_20170107_1012.py @@ -7,13 +7,13 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('stock', '0013_auto_20161228_1006'), + ('stock', '0007_shoppinglistitem_type'), ] operations = [ migrations.AlterField( - model_name='shoppinglist', - name='stock_owner', - field=models.ForeignKey(related_name='shopping_lists', null=True, to='stock.Stock'), + model_name='shoppinglistitem', + name='stockitem_owner', + field=models.ForeignKey(related_name='shopping_item', to='stock.StockItem', null=True), ), ] diff --git a/stock/models.py b/stock/models.py index 666e7117..903be49a 100644 --- a/stock/models.py +++ b/stock/models.py @@ -29,6 +29,8 @@ class StockItem(models.Model): name = models.CharField(_('name'), max_length=64) unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text='number of element in one box') effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text='number of box') + minimal_quantity = models.IntegerField(_('minimal quantity'), default=1, + help_text='if the effective quantity is less than the minimal, item is added to the shopping list') type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, on_delete=models.SET_NULL) stock_owner = models.ForeignKey(Stock, related_name="items") @@ -49,14 +51,36 @@ class ShoppingList(models.Model): date = models.DateTimeField(_('date')) name = models.CharField(_('name'), max_length=64) todo = models.BooleanField(_('todo')) - items_to_buy = models.ManyToManyField(StockItem, verbose_name=_('items to buy'), related_name="shopping_lists") + comment = models.TextField(_('comment'), null=True, blank=True) stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") def __str__(self): - return "%s (%s)" % (self.name, self.effective_quantity) + return "%s (%s)" % (self.name, self.date) def get_absolute_url(self): return reverse('stock:shoppinglist_list') def can_be_viewed_by(self, user): return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + + +class ShoppingListItem(models.Model): + """ + """ + shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_('shopping lists'), related_name="shopping_items_to_buy") + stockitem_owner = models.ForeignKey(StockItem, related_name="shopping_item", null=True) + name = models.CharField(_('name'), max_length=64) + type = models.ForeignKey(ProductType, related_name="shoppinglist_items", verbose_name=_("type"), null=True, blank=True, + on_delete=models.SET_NULL) + tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text="quantity to buy during the next shopping session") + bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text="quantity bought during the last shopping session") + + def __str__(self): + return "%s - %s" % (self.name, self.shopping_lists.first()) + + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + + def get_absolute_url(self): + return reverse('stock:shoppinglist_list') + diff --git a/stock/templates/stock/shopping_list_items.jinja b/stock/templates/stock/shopping_list_items.jinja index 822db850..24f3b93c 100644 --- a/stock/templates/stock/shopping_list_items.jinja +++ b/stock/templates/stock/shopping_list_items.jinja @@ -10,25 +10,42 @@ {% endif %}

    {{ shoppinglist.name }}

    -{% for t in ProductType.objects.order_by('name') %} - {% if shoppinglist.items_to_buy.filter(type=t) %} +{% for t in ProductType.objects.order_by('name').all() %} + {% if shoppinglist.shopping_items_to_buy.filter(type=t) %}

    {{ t }}

    +
    {{ s.date|localtime|date("Y-m-d H:i") }} {{ s.name }} {{ s.items_to_buy.count() }} + {% trans %}Update stock{% endtrans %} + {% trans %}Mark as done{% endtrans %}
    - + + - {% for i in shoppinglist.items_to_buy.filter(type=t).order_by('name') %} + {% for i in shoppinglist.shopping_items_to_buy.filter(type=t).order_by('name').all() %} + {% endfor %}
    {% trans %}Name{% endtrans %}{% trans %}Number{% endtrans %}{% trans %}Quantity asked{% endtrans %}{% trans %}Quantity bought{% endtrans %}
    {{ i.name }} {{ i.tobuy_quantity }}{{ i.bought_quantity }}
    {% endif %} {% endfor %} +

    Other

    +
    + + + + + + + + + + + +
    {% trans %}Comments{% endtrans %}
    {{ shoppinglist.comment }}
    {% endblock %} \ No newline at end of file diff --git a/stock/templates/stock/stock_shopping_list.jinja b/stock/templates/stock/stock_shopping_list.jinja index bdc3a40b..8f659da6 100644 --- a/stock/templates/stock/stock_shopping_list.jinja +++ b/stock/templates/stock/stock_shopping_list.jinja @@ -28,11 +28,11 @@ Shopping list for {{ stock }}
    {{ s.date|localtime|date("Y-m-d H:i") }} {{ s.name }}{{ s.items_to_buy.count() }}{{ s.shopping_items_to_buy.count() }} {% trans %}Update stock{% endtrans %}
    {{ s.date|localtime|date("Y-m-d H:i") }} {{ s.name }}{{ s.items_to_buy.count() }}{{ s.shopping_items_to_buy.count() }} {% trans %}Mark as to do{% endtrans %}
    {% endif %} {% endfor %} -

    Other

    +

    {% trans %}Other{% endtrans %}


    diff --git a/stock/templates/stock/stock_shopping_list.jinja b/stock/templates/stock/stock_shopping_list.jinja index 8f659da6..b8ca84e3 100644 --- a/stock/templates/stock/stock_shopping_list.jinja +++ b/stock/templates/stock/stock_shopping_list.jinja @@ -15,7 +15,7 @@ Shopping list for {{ stock }}
    {% trans %}Use the "update stock" action when you get back from shopping to add the effective quantity bought for each shopping list item.{% endtrans %}
    - {% trans %}For example, 3 Cheesburger (boxes) are aksing in the list, but there were only 2 so, 2 have to be added in the stock quantity.{% endtrans %} + {% trans %}For example, 3 Cheeseburger (boxes) are aksing in the list, but there were only 2 so, 2 have to be added in the stock quantity.{% endtrans %}

    {% trans %}To do{% endtrans %}

    diff --git a/stock/templates/stock/stock_take_items.jinja b/stock/templates/stock/stock_take_items.jinja index f61a2d09..ed59b3bc 100644 --- a/stock/templates/stock/stock_take_items.jinja +++ b/stock/templates/stock/stock_take_items.jinja @@ -2,11 +2,11 @@ {% from 'core/macros.jinja' import user_profile_link %} {% block title %} -{% trans s = stock %}Take items form {{ s }}{% endtrans %} +{% trans s = stock %}Take items from {{ s }}{% endtrans %} {% endblock %} {% block content %} -

    {% trans s = stock %}Take items form {{ s }}{% endtrans %}

    +

    {% trans s = stock %}Take items from {{ s }}{% endtrans %}

    {% csrf_token %} diff --git a/stock/views.py b/stock/views.py index 2a31037b..8c68c13c 100644 --- a/stock/views.py +++ b/stock/views.py @@ -178,15 +178,15 @@ class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailV def get_form_class(self): fields = OrderedDict() kwargs = {} - fields['name'] = forms.CharField(max_length=30, required=True, label='Shopping list name') + fields['name'] = forms.CharField(max_length=30, required=True, label=_('Shopping list name')) for t in ProductType.objects.order_by('name').all(): for i in self.stock.items.filter(type=t).order_by('name').all(): if i.effective_quantity <= i.minimal_quantity: field_name = "item-%s" % (str(i.id)) fields[field_name] = forms.IntegerField(required=True, label=str(i), - help_text=str(i.effective_quantity)+" left") - fields['comment'] = forms.CharField(widget=forms.Textarea(), required=False, - initial="Add here, items to buy that are not reference as a product (example : sponge, knife, mugs ...)") + help_text=_(str(i.effective_quantity)+" left")) + fields['comment'] = forms.CharField(widget=forms.Textarea(), required=False, label=_("Comments"), + initial=_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")) kwargs['stock_id'] = self.stock.id kwargs['base_fields'] = fields return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) @@ -288,17 +288,12 @@ class StockUpdateAfterShopppingForm(forms.BaseForm): self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() for k,t in self.cleaned_data.items(): shoppinglist_item_id = int(k[5:]) - #item_id = int(k[5:]) if int(t) > 0 : shoppinglist_item = ShoppingListItem.objects.filter(id=shoppinglist_item_id).first() shoppinglist_item.bought_quantity = int(t) shoppinglist_item.save() shoppinglist_item.stockitem_owner.effective_quantity += int(t) shoppinglist_item.stockitem_owner.save() - #item = StockItem.objects.filter(id=item_id).first() - #item.bought_quantity = int(t) - #item.effective_quantity += int(t) - #item.save() self.shoppinglist.todo = False self.shoppinglist.save() return self.cleaned_data @@ -319,7 +314,7 @@ class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin, for i in self.shoppinglist.shopping_items_to_buy.filter(type=t).order_by('name').all(): field_name = "item-%s" % (str(i.id)) fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), - help_text=str(i.tobuy_quantity) + " asked") + help_text=_(str(i.tobuy_quantity) + " asked")) kwargs['shoppinglist_id'] = self.shoppinglist.id kwargs['base_fields'] = fields return type('StockUpdateAfterShopppingForm', (StockUpdateAfterShopppingForm,), kwargs) @@ -385,7 +380,7 @@ class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, Bas for t in ProductType.objects.order_by('name').all(): for i in self.stock.items.filter(type=t).order_by('name').all(): field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.IntegerField(required=False, label=str(i), help_text="("+ str(i.effective_quantity) + " left)") + fields[field_name] = forms.IntegerField(required=False, label=str(i), help_text=_("("+ str(i.effective_quantity) + " left)")) kwargs[field_name] = i.effective_quantity kwargs['stock_id'] = self.stock.id kwargs['counter_id'] = self.stock.counter.id From 7d10c5d837995e9593cca12513612810f9f7ceb4 Mon Sep 17 00:00:00 2001 From: guillaume-renaud Date: Fri, 13 Jan 2017 12:38:04 +0100 Subject: [PATCH 22/27] Forms initial quantity addition --- locale/fr/LC_MESSAGES/django.mo | Bin 52661 -> 52664 bytes locale/fr/LC_MESSAGES/django.po | 22 +++++++++---------- stock/templates/stock/stock_item_list.jinja | 4 ++-- stock/views.py | 23 +++++++------------- 4 files changed, 21 insertions(+), 28 deletions(-) diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 8667ce295c7e20f71cbe56639b99d3a4bc9b037c..d177ae604a75b73fdace82afd3beda176b6aa8d6 100644 GIT binary patch delta 6492 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 g*#ie<4;VRiO#Yz!jSsD?afL3KRtyL&;S4c delta 6487 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 diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 265295a3..41a2407a 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-01-07 13:15+0100\n" +"POT-Creation-Date: 2017-01-12 15:49+0100\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -2386,7 +2386,7 @@ msgstr "Stats" #: stock/templates/stock/stock_item_list.jinja:11 #: stock/templates/stock/stock_list.jinja:16 msgid "Shopping lists" -msgstr "Liste de course" +msgstr "Liste de courses" #: core/templates/core/user_tools.jinja:46 #: counter/templates/counter/counter_list.jinja:39 @@ -3703,7 +3703,7 @@ msgstr "nombre d'éléments dans une boite" #: stock/models.py:31 msgid "effective quantity" -msgstr "qunatité effective" +msgstr "quantité effective" #: stock/models.py:31 msgid "number of box" @@ -3758,7 +3758,7 @@ msgstr "Quantité demandée" msgid "Quantity bought" msgstr "Quantité achetée" -#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:188 +#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:181 msgid "Comments" msgstr "Commentaires" @@ -3861,27 +3861,27 @@ msgstr "Mettre à jour les quantités de %(s)s après les courses" msgid "Update stock quantities" msgstr "Mettre à jour les quantités du stock" -#: stock/views.py:181 +#: stock/views.py:173 msgid "Shopping list name" -msgstr "Nom de la liste de course" +msgstr "Nom de la liste de courses" -#: stock/views.py:187 +#: stock/views.py:179 msgid " left" msgstr " restant(s)" -#: stock/views.py:189 +#: stock/views.py:180 msgid "" "Add here, items to buy that are not reference as a stock item (example : " "sponge, knife, mugs ...)" msgstr "" "Ajouter ici les éléments à acheter qui ne sont pas référencés comme un " -"élément du stock (exemple : éponges, couteaux, tasses ..." +"élément du stock (exemple : éponges, couteaux, tasses ...)" -#: stock/views.py:317 +#: stock/views.py:309 msgid " asked" msgstr " demandé(s)" -#: stock/views.py:383 +#: stock/views.py:376 msgid "(" msgstr "(" diff --git a/stock/templates/stock/stock_item_list.jinja b/stock/templates/stock/stock_item_list.jinja index 66639f71..dd8e68b6 100644 --- a/stock/templates/stock/stock_item_list.jinja +++ b/stock/templates/stock/stock_item_list.jinja @@ -16,14 +16,14 @@

    {{ t }}

    {% endfor %}

    {% trans %}Others{% endtrans %}

    {% else %} diff --git a/stock/views.py b/stock/views.py index 8c68c13c..2fab9ea4 100644 --- a/stock/views.py +++ b/stock/views.py @@ -41,10 +41,7 @@ class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): template_name = 'stock/stock_list.jinja' current_tab = "stocks" - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) - - + class StockEditForm(forms.ModelForm): """ A form to change stock's characteristics @@ -65,15 +62,10 @@ class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): An edit view for the stock """ model = Stock - form_class = StockEditForm + form_class = modelform_factory(Stock, fields=['name', 'counter']) pk_url_kwarg = "stock_id" + template_name = 'core/edit.jinja' current_tab = "stocks" - - def get_context_data(self, **kwargs): - context = super(StockItemList, self).get_context_data(**kwargs) - if 'stock' in self.request.GET.keys(): - context['stock'] = Stock.objects.filter(id=self.request.GET['stock']).first() - return context class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): @@ -183,10 +175,10 @@ class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailV for i in self.stock.items.filter(type=t).order_by('name').all(): if i.effective_quantity <= i.minimal_quantity: field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.IntegerField(required=True, label=str(i), + fields[field_name] = forms.IntegerField(required=True, label=str(i), initial=0, help_text=_(str(i.effective_quantity)+" left")) - fields['comment'] = forms.CharField(widget=forms.Textarea(), required=False, label=_("Comments"), - initial=_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")) + fields['comment'] = forms.CharField(widget=forms.Textarea(attrs={"placeholder":_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")}), + required=False, label=_("Comments")) kwargs['stock_id'] = self.stock.id kwargs['base_fields'] = fields return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) @@ -380,7 +372,8 @@ class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, Bas for t in ProductType.objects.order_by('name').all(): for i in self.stock.items.filter(type=t).order_by('name').all(): field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.IntegerField(required=False, label=str(i), help_text=_("("+ str(i.effective_quantity) + " left)")) + fields[field_name] = forms.IntegerField(required=False, label=str(i), initial=0, min_value=0, max_value=i.effective_quantity, + help_text=_("("+ str(i.effective_quantity) + " left)")) kwargs[field_name] = i.effective_quantity kwargs['stock_id'] = self.stock.id kwargs['counter_id'] = self.stock.counter.id From df20bf6dde35e4c85d15882eca1b46abfb2bff53 Mon Sep 17 00:00:00 2001 From: Skia Date: Tue, 25 Apr 2017 08:57:07 +0200 Subject: [PATCH 23/27] Reindent stock app --- stock/models.py | 116 +++++----- stock/urls.py | 46 ++-- stock/views.py | 588 ++++++++++++++++++++++++------------------------ 3 files changed, 375 insertions(+), 375 deletions(-) diff --git a/stock/models.py b/stock/models.py index 760fa262..edded142 100644 --- a/stock/models.py +++ b/stock/models.py @@ -7,80 +7,80 @@ from django.conf import settings from counter.models import Counter, ProductType class Stock(models.Model): - """ - The Stock class, this one is used to know how many products are left for a specific counter - """ - name = models.CharField(_('name'), max_length=64) - counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') + """ + The Stock class, this one is used to know how many products are left for a specific counter + """ + name = models.CharField(_('name'), max_length=64) + counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='stock') - def __str__(self): - return "%s (%s)" % (self.name, self.counter) + def __str__(self): + return "%s (%s)" % (self.name, self.counter) - def get_absolute_url(self): - return reverse('stock:list') + def get_absolute_url(self): + return reverse('stock:list') - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class StockItem(models.Model): - """ - The StockItem class, element of the stock - """ - name = models.CharField(_('name'), max_length=64) - unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text=_('number of element in one box')) - effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text=_('number of box')) - minimal_quantity = models.IntegerField(_('minimal quantity'), default=1, - help_text=_('if the effective quantity is less than the minimal, item is added to the shopping list')) - type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, - on_delete=models.SET_NULL) - stock_owner = models.ForeignKey(Stock, related_name="items") + """ + The StockItem class, element of the stock + """ + name = models.CharField(_('name'), max_length=64) + unit_quantity = models.IntegerField(_('unit quantity'), default=0, help_text=_('number of element in one box')) + effective_quantity = models.IntegerField(_('effective quantity'), default=0, help_text=_('number of box')) + minimal_quantity = models.IntegerField(_('minimal quantity'), default=1, + help_text=_('if the effective quantity is less than the minimal, item is added to the shopping list')) + type = models.ForeignKey(ProductType, related_name="stock_items", verbose_name=_("type"), null=True, blank=True, + on_delete=models.SET_NULL) + stock_owner = models.ForeignKey(Stock, related_name="items") - def __str__(self): - return "%s" % (self.name) + def __str__(self): + return "%s" % (self.name) - def get_absolute_url(self): - return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) + def get_absolute_url(self): + return reverse('stock:items_list', kwargs={'stock_id':self.stock_owner.id}) - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class ShoppingList(models.Model): - """ - The ShoppingList class, used to make an history of the shopping lists - """ - date = models.DateTimeField(_('date')) - name = models.CharField(_('name'), max_length=64) - todo = models.BooleanField(_('todo')) - comment = models.TextField(_('comment'), null=True, blank=True) - stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") + """ + The ShoppingList class, used to make an history of the shopping lists + """ + date = models.DateTimeField(_('date')) + name = models.CharField(_('name'), max_length=64) + todo = models.BooleanField(_('todo')) + comment = models.TextField(_('comment'), null=True, blank=True) + stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") - def __str__(self): - return "%s (%s)" % (self.name, self.date) + def __str__(self): + return "%s (%s)" % (self.name, self.date) - def get_absolute_url(self): - return reverse('stock:shoppinglist_list') + def get_absolute_url(self): + return reverse('stock:shoppinglist_list') - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) class ShoppingListItem(models.Model): - """ - """ - shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_("shopping lists"), related_name="shopping_items_to_buy") - stockitem_owner = models.ForeignKey(StockItem, related_name="shopping_item", null=True) - name = models.CharField(_('name'), max_length=64) - type = models.ForeignKey(ProductType, related_name="shoppinglist_items", verbose_name=_("type"), null=True, blank=True, - on_delete=models.SET_NULL) - tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text=_("quantity to buy during the next shopping session")) - bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text=_("quantity bought during the last shopping session")) + """ + """ + shopping_lists = models.ManyToManyField(ShoppingList, verbose_name=_("shopping lists"), related_name="shopping_items_to_buy") + stockitem_owner = models.ForeignKey(StockItem, related_name="shopping_item", null=True) + name = models.CharField(_('name'), max_length=64) + type = models.ForeignKey(ProductType, related_name="shoppinglist_items", verbose_name=_("type"), null=True, blank=True, + on_delete=models.SET_NULL) + tobuy_quantity = models.IntegerField(_('quantity to buy'), default=6, help_text=_("quantity to buy during the next shopping session")) + bought_quantity = models.IntegerField(_('quantity bought'), default=0, help_text=_("quantity bought during the last shopping session")) - def __str__(self): - return "%s - %s" % (self.name, self.shopping_lists.first()) + def __str__(self): + return "%s - %s" % (self.name, self.shopping_lists.first()) - def can_be_viewed_by(self, user): - return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + def can_be_viewed_by(self, user): + return user.is_in_group(settings.SITH_GROUP_COUNTER_ADMIN_ID) + + def get_absolute_url(self): + return reverse('stock:shoppinglist_list') - def get_absolute_url(self): - return reverse('stock:shoppinglist_list') - diff --git a/stock/urls.py b/stock/urls.py index b7744e45..cf5c4677 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -3,28 +3,28 @@ from django.conf.urls import include, url from stock.views import * urlpatterns = [ -#Stock urls - url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), - url(r'^edit/(?P[0-9]+)$', StockEditView.as_view(), name='edit'), - url(r'^list$', StockListView.as_view(), name='list'), + #Stock urls + url(r'^new/counter/(?P[0-9]+)$', StockCreateView.as_view(), name='new'), + url(r'^edit/(?P[0-9]+)$', StockEditView.as_view(), name='edit'), + url(r'^list$', StockListView.as_view(), name='list'), -# StockItem urls - url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), - url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), - url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), - url(r'^(?P[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'), + # StockItem urls + url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), + url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), + url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), + url(r'^(?P[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'), -# ShoppingList urls - url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), - url(r'^(?P[0-9]+)/shoppingList/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), - name='shoppinglist_items'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), - name='shoppinglist_delete'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setDone$', StockShopppingListSetDone.as_view(), - name='shoppinglist_set_done'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), - name='shoppinglist_set_todo'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/updateStock$', StockUpdateAfterShopppingBaseFormView.as_view(), - name='update_after_shopping'), -] + # ShoppingList urls + url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), + url(r'^(?P[0-9]+)/shoppingList/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), + name='shoppinglist_items'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), + name='shoppinglist_delete'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setDone$', StockShopppingListSetDone.as_view(), + name='shoppinglist_set_done'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), + name='shoppinglist_set_todo'), + url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/updateStock$', StockUpdateAfterShopppingBaseFormView.as_view(), + name='update_after_shopping'), + ] diff --git a/stock/views.py b/stock/views.py index 2fab9ea4..5d242c25 100644 --- a/stock/views.py +++ b/stock/views.py @@ -19,211 +19,211 @@ from stock.models import Stock, StockItem, ShoppingList, ShoppingListItem class StockItemList(CounterAdminTabsMixin, CanCreateMixin, ListView): - """ - The stockitems list view for the counter owner - """ - model = Stock - template_name = 'stock/stock_item_list.jinja' - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + The stockitems list view for the counter owner + """ + model = Stock + template_name = 'stock/stock_item_list.jinja' + pk_url_kwarg = "stock_id" + current_tab = "stocks" + + def get_context_data(self): + ret = super(StockItemList, self).get_context_data() + if 'stock_id' in self.kwargs.keys(): + ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); + return ret - def get_context_data(self): - ret = super(StockItemList, self).get_context_data() - if 'stock_id' in self.kwargs.keys(): - ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); - return ret - class StockListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """ - A list view for the admins - """ - model = Stock - template_name = 'stock/stock_list.jinja' - current_tab = "stocks" + """ + A list view for the admins + """ + model = Stock + template_name = 'stock/stock_list.jinja' + current_tab = "stocks" + - class StockEditForm(forms.ModelForm): - """ - A form to change stock's characteristics - """ - class Meta: - model = Stock - fields = ['name', 'counter'] - - def __init__(self, *args, **kwargs): - super(StockEditForm, self).__init__(*args, **kwargs) + """ + A form to change stock's characteristics + """ + class Meta: + model = Stock + fields = ['name', 'counter'] + + def __init__(self, *args, **kwargs): + super(StockEditForm, self).__init__(*args, **kwargs) + + def save(self, *args, **kwargs): + return super(StockEditForm, self).save(*args, **kwargs) - def save(self, *args, **kwargs): - return super(StockEditForm, self).save(*args, **kwargs) - class StockEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): - """ - An edit view for the stock - """ - model = Stock - form_class = modelform_factory(Stock, fields=['name', 'counter']) - pk_url_kwarg = "stock_id" - template_name = 'core/edit.jinja' - current_tab = "stocks" - + """ + An edit view for the stock + """ + model = Stock + form_class = modelform_factory(Stock, fields=['name', 'counter']) + pk_url_kwarg = "stock_id" + template_name = 'core/edit.jinja' + current_tab = "stocks" + class StockItemEditView(CounterAdminTabsMixin, CanEditPropMixin, UpdateView): - """ - An edit view for a stock item - """ - model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) - pk_url_kwarg = "item_id" - template_name = 'core/edit.jinja' - current_tab = "stocks" + """ + An edit view for a stock item + """ + model = StockItem + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) + pk_url_kwarg = "item_id" + template_name = 'core/edit.jinja' + current_tab = "stocks" class StockCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): - """ - A create view for a new Stock - """ - model = Stock - form_class = modelform_factory(Stock, fields=['name', 'counter']) - template_name = 'core/create.jinja' - pk_url_kwarg = "counter_id" - current_tab = "stocks" - success_url = reverse_lazy('stock:list') + """ + A create view for a new Stock + """ + model = Stock + form_class = modelform_factory(Stock, fields=['name', 'counter']) + template_name = 'core/create.jinja' + pk_url_kwarg = "counter_id" + current_tab = "stocks" + success_url = reverse_lazy('stock:list') + + def get_initial(self): + ret = super(StockCreateView, self).get_initial() + if 'counter_id' in self.kwargs.keys(): + ret['counter'] = self.kwargs['counter_id'] + return ret - def get_initial(self): - ret = super(StockCreateView, self).get_initial() - if 'counter_id' in self.kwargs.keys(): - ret['counter'] = self.kwargs['counter_id'] - return ret - class StockItemCreateView(CounterAdminTabsMixin, CanCreateMixin, CreateView): - """ - A create view for a new StockItem - """ - model = StockItem - form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) - template_name = 'core/create.jinja' - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + A create view for a new StockItem + """ + model = StockItem + form_class = modelform_factory(StockItem, fields=['name', 'unit_quantity', 'effective_quantity', 'minimal_quantity', 'type', 'stock_owner']) + template_name = 'core/create.jinja' + pk_url_kwarg = "stock_id" + current_tab = "stocks" - def get_initial(self): - ret = super(StockItemCreateView, self).get_initial() - if 'stock_id' in self.kwargs.keys(): - ret['stock_owner'] = self.kwargs['stock_id'] - return ret + def get_initial(self): + ret = super(StockItemCreateView, self).get_initial() + if 'stock_id' in self.kwargs.keys(): + ret['stock_owner'] = self.kwargs['stock_id'] + return ret - def get_success_url(self): - return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) + def get_success_url(self): + return reverse_lazy('stock:items_list', kwargs={'stock_id':self.object.stock_owner.id}) class StockShoppingListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """ - A list view for the people to know the item to buy - """ - model = Stock - template_name = "stock/stock_shopping_list.jinja" - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + A list view for the people to know the item to buy + """ + model = Stock + template_name = "stock/stock_shopping_list.jinja" + pk_url_kwarg = "stock_id" + current_tab = "stocks" - def get_context_data(self): - ret = super(StockShoppingListView, self).get_context_data() - if 'stock_id' in self.kwargs.keys(): - ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); - return ret + def get_context_data(self): + ret = super(StockShoppingListView, self).get_context_data() + if 'stock_id' in self.kwargs.keys(): + ret['stock'] = Stock.objects.filter(id=self.kwargs['stock_id']).first(); + return ret class StockItemQuantityForm(forms.BaseForm): - def clean(self): - with transaction.atomic(): - self.stock = Stock.objects.filter(id=self.stock_id).first() - shopping_list = ShoppingList(name="Courses "+self.stock.counter.name, date=timezone.now(), todo=True) - shopping_list.save() - shopping_list.stock_owner = self.stock - shopping_list.save() - for k,t in self.cleaned_data.items(): - if k == 'name': - shopping_list.name = t - shopping_list.save() - elif k == "comment": - shopping_list.comment = t - shopping_list.save() - else: - if t > 0 : - item_id = int(k[5:]) - item = StockItem.objects.filter(id=item_id).first() - shoppinglist_item = ShoppingListItem(stockitem_owner=item, name=item.name, type=item.type, tobuy_quantity=t) - shoppinglist_item.save() - shoppinglist_item.shopping_lists.add(shopping_list) - shoppinglist_item.save() - - return self.cleaned_data + def clean(self): + with transaction.atomic(): + self.stock = Stock.objects.filter(id=self.stock_id).first() + shopping_list = ShoppingList(name="Courses "+self.stock.counter.name, date=timezone.now(), todo=True) + shopping_list.save() + shopping_list.stock_owner = self.stock + shopping_list.save() + for k,t in self.cleaned_data.items(): + if k == 'name': + shopping_list.name = t + shopping_list.save() + elif k == "comment": + shopping_list.comment = t + shopping_list.save() + else: + if t > 0 : + item_id = int(k[5:]) + item = StockItem.objects.filter(id=item_id).first() + shoppinglist_item = ShoppingListItem(stockitem_owner=item, name=item.name, type=item.type, tobuy_quantity=t) + shoppinglist_item.save() + shoppinglist_item.shopping_lists.add(shopping_list) + shoppinglist_item.save() + + return self.cleaned_data class StockItemQuantityBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): - """ - docstring for StockItemOutList - """ - model = StockItem - template_name = "stock/shopping_list_quantity.jinja" - pk_url_kwarg = "stock_id" - current_tab = "stocks" + """ + docstring for StockItemOutList + """ + model = StockItem + template_name = "stock/shopping_list_quantity.jinja" + pk_url_kwarg = "stock_id" + current_tab = "stocks" - def get_form_class(self): - fields = OrderedDict() - kwargs = {} - fields['name'] = forms.CharField(max_length=30, required=True, label=_('Shopping list name')) - for t in ProductType.objects.order_by('name').all(): - for i in self.stock.items.filter(type=t).order_by('name').all(): - if i.effective_quantity <= i.minimal_quantity: - field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.IntegerField(required=True, label=str(i), initial=0, - help_text=_(str(i.effective_quantity)+" left")) - fields['comment'] = forms.CharField(widget=forms.Textarea(attrs={"placeholder":_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")}), - required=False, label=_("Comments")) - kwargs['stock_id'] = self.stock.id - kwargs['base_fields'] = fields - return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + fields['name'] = forms.CharField(max_length=30, required=True, label=_('Shopping list name')) + for t in ProductType.objects.order_by('name').all(): + for i in self.stock.items.filter(type=t).order_by('name').all(): + if i.effective_quantity <= i.minimal_quantity: + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.IntegerField(required=True, label=str(i), initial=0, + help_text=_(str(i.effective_quantity)+" left")) + fields['comment'] = forms.CharField(widget=forms.Textarea(attrs={"placeholder":_("Add here, items to buy that are not reference as a stock item (example : sponge, knife, mugs ...)")}), + required=False, label=_("Comments")) + kwargs['stock_id'] = self.stock.id + kwargs['base_fields'] = fields + return type('StockItemQuantityForm', (StockItemQuantityForm,), kwargs) - def get(self, request, *args, **kwargs): - """ - Simple get view - """ - self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() - return super(StockItemQuantityBaseFormView, self).get(request, *args, **kwargs) - - def post(self, request, *args, **kwargs): - """ - Handle the many possibilities of the post request - """ - self.object = self.get_object() - self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() - return super(StockItemQuantityBaseFormView, self).post(request, *args, **kwargs) + def get(self, request, *args, **kwargs): + """ + Simple get view + """ + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockItemQuantityBaseFormView, self).get(request, *args, **kwargs) - def form_valid(self, form): - return super(StockItemQuantityBaseFormView, self).form_valid(form) + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockItemQuantityBaseFormView, self).post(request, *args, **kwargs) - def get_context_data(self, **kwargs): - kwargs = super(StockItemQuantityBaseFormView, self).get_context_data(**kwargs) - if 'form' not in kwargs.keys(): - kwargs['form'] = self.get_form() - kwargs['stock'] = self.stock - return kwargs + def form_valid(self, form): + return super(StockItemQuantityBaseFormView, self).form_valid(form) - def get_success_url(self): - return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) + def get_context_data(self, **kwargs): + kwargs = super(StockItemQuantityBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['stock'] = self.stock + return kwargs + + def get_success_url(self): + return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) class StockShoppingListItemListView(CounterAdminTabsMixin, CanViewMixin, ListView): - """docstring for StockShoppingListItemListView""" - model = ShoppingList - template_name = "stock/shopping_list_items.jinja" - pk_url_kwarg = "shoppinglist_id" - current_tab = "stocks" + """docstring for StockShoppingListItemListView""" + model = ShoppingList + template_name = "stock/shopping_list_items.jinja" + pk_url_kwarg = "shoppinglist_id" + current_tab = "stocks" - def get_context_data(self): - ret = super(StockShoppingListItemListView, self).get_context_data() - if 'shoppinglist_id' in self.kwargs.keys(): - ret['shoppinglist'] = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first(); - return ret + def get_context_data(self): + ret = super(StockShoppingListItemListView, self).get_context_data() + if 'shoppinglist_id' in self.kwargs.keys(): + ret['shoppinglist'] = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first(); + return ret class StockShoppingListDeleteView(CounterAdminTabsMixin, CanEditMixin, DeleteView): """ @@ -235,7 +235,7 @@ class StockShoppingListDeleteView(CounterAdminTabsMixin, CanEditMixin, DeleteVie current_tab = "stocks" def get_success_url(self): - return reverse_lazy('stock:shoppinglist_list', kwargs={'stock_id':self.object.stock_owner.id}) + return reverse_lazy('stock:shoppinglist_list', kwargs={'stock_id':self.object.stock_owner.id}) class StockShopppingListSetDone(CanEditMixin, DetailView): @@ -275,143 +275,143 @@ class StockShopppingListSetTodo(CanEditMixin, DetailView): class StockUpdateAfterShopppingForm(forms.BaseForm): - def clean(self): - with transaction.atomic(): - self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() - for k,t in self.cleaned_data.items(): - shoppinglist_item_id = int(k[5:]) - if int(t) > 0 : - shoppinglist_item = ShoppingListItem.objects.filter(id=shoppinglist_item_id).first() - shoppinglist_item.bought_quantity = int(t) - shoppinglist_item.save() - shoppinglist_item.stockitem_owner.effective_quantity += int(t) - shoppinglist_item.stockitem_owner.save() - self.shoppinglist.todo = False - self.shoppinglist.save() - return self.cleaned_data + def clean(self): + with transaction.atomic(): + self.shoppinglist = ShoppingList.objects.filter(id=self.shoppinglist_id).first() + for k,t in self.cleaned_data.items(): + shoppinglist_item_id = int(k[5:]) + if int(t) > 0 : + shoppinglist_item = ShoppingListItem.objects.filter(id=shoppinglist_item_id).first() + shoppinglist_item.bought_quantity = int(t) + shoppinglist_item.save() + shoppinglist_item.stockitem_owner.effective_quantity += int(t) + shoppinglist_item.stockitem_owner.save() + self.shoppinglist.todo = False + self.shoppinglist.save() + return self.cleaned_data class StockUpdateAfterShopppingBaseFormView(CounterAdminTabsMixin, CanEditMixin, DetailView, BaseFormView): - """ - docstring for StockUpdateAfterShopppingBaseFormView - """ - model = ShoppingList - template_name = "stock/update_after_shopping.jinja" - pk_url_kwarg = "shoppinglist_id" - current_tab = "stocks" + """ + docstring for StockUpdateAfterShopppingBaseFormView + """ + model = ShoppingList + template_name = "stock/update_after_shopping.jinja" + pk_url_kwarg = "shoppinglist_id" + current_tab = "stocks" - def get_form_class(self): - fields = OrderedDict() - kwargs = {} - for t in ProductType.objects.order_by('name').all(): - for i in self.shoppinglist.shopping_items_to_buy.filter(type=t).order_by('name').all(): - field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), - help_text=_(str(i.tobuy_quantity) + " asked")) - kwargs['shoppinglist_id'] = self.shoppinglist.id - kwargs['base_fields'] = fields - return type('StockUpdateAfterShopppingForm', (StockUpdateAfterShopppingForm,), kwargs) + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + for t in ProductType.objects.order_by('name').all(): + for i in self.shoppinglist.shopping_items_to_buy.filter(type=t).order_by('name').all(): + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.CharField(max_length=30, required=True, label=str(i), + help_text=_(str(i.tobuy_quantity) + " asked")) + kwargs['shoppinglist_id'] = self.shoppinglist.id + kwargs['base_fields'] = fields + return type('StockUpdateAfterShopppingForm', (StockUpdateAfterShopppingForm,), kwargs) - def get(self, request, *args, **kwargs): - self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() - return super(StockUpdateAfterShopppingBaseFormView, self).get(request, *args, **kwargs) - - def post(self, request, *args, **kwargs): - """ - Handle the many possibilities of the post request - """ - self.object = self.get_object() - self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() - return super(StockUpdateAfterShopppingBaseFormView, self).post(request, *args, **kwargs) + def get(self, request, *args, **kwargs): + self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() + return super(StockUpdateAfterShopppingBaseFormView, self).get(request, *args, **kwargs) - def form_valid(self, form): - """ - We handle here the redirection - """ - return super(StockUpdateAfterShopppingBaseFormView, self).form_valid(form) + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.shoppinglist = ShoppingList.objects.filter(id=self.kwargs['shoppinglist_id']).first() + return super(StockUpdateAfterShopppingBaseFormView, self).post(request, *args, **kwargs) - def get_context_data(self, **kwargs): - kwargs = super(StockUpdateAfterShopppingBaseFormView, self).get_context_data(**kwargs) - if 'form' not in kwargs.keys(): - kwargs['form'] = self.get_form() - kwargs['shoppinglist'] = self.shoppinglist - kwargs['stock'] = self.shoppinglist.stock_owner - return kwargs + def form_valid(self, form): + """ + We handle here the redirection + """ + return super(StockUpdateAfterShopppingBaseFormView, self).form_valid(form) - def get_success_url(self): - self.kwargs.pop('shoppinglist_id', None) - return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) + def get_context_data(self, **kwargs): + kwargs = super(StockUpdateAfterShopppingBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['shoppinglist'] = self.shoppinglist + kwargs['stock'] = self.shoppinglist.stock_owner + return kwargs + + def get_success_url(self): + self.kwargs.pop('shoppinglist_id', None) + return reverse_lazy('stock:shoppinglist_list', args=self.args, kwargs=self.kwargs) class StockTakeItemsForm(forms.BaseForm): - """ - docstring for StockTakeItemsFormView - """ - def clean(self): - with transaction.atomic(): - for k,t in self.cleaned_data.items(): - item_id = int(k[5:]) - if t > 0 : - item = StockItem.objects.filter(id=item_id).first() - item.effective_quantity -= t - item.save() - return self.cleaned_data + """ + docstring for StockTakeItemsFormView + """ + def clean(self): + with transaction.atomic(): + for k,t in self.cleaned_data.items(): + item_id = int(k[5:]) + if t > 0 : + item = StockItem.objects.filter(id=item_id).first() + item.effective_quantity -= t + item.save() + return self.cleaned_data class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, BaseFormView): - """ - docstring for StockTakeItemsBaseFormView - """ - model = StockItem - template_name = "stock/stock_take_items.jinja" - pk_url_kwarg = "stock_id" - current_tab = "take_items_from_stock" + """ + docstring for StockTakeItemsBaseFormView + """ + model = StockItem + template_name = "stock/stock_take_items.jinja" + pk_url_kwarg = "stock_id" + current_tab = "take_items_from_stock" - def get_form_class(self): - fields = OrderedDict() - kwargs = {} - for t in ProductType.objects.order_by('name').all(): - for i in self.stock.items.filter(type=t).order_by('name').all(): - field_name = "item-%s" % (str(i.id)) - fields[field_name] = forms.IntegerField(required=False, label=str(i), initial=0, min_value=0, max_value=i.effective_quantity, - help_text=_("("+ str(i.effective_quantity) + " left)")) - kwargs[field_name] = i.effective_quantity - kwargs['stock_id'] = self.stock.id - kwargs['counter_id'] = self.stock.counter.id - kwargs['base_fields'] = fields - return type('StockTakeItemsForm', (StockTakeItemsForm,), kwargs) + def get_form_class(self): + fields = OrderedDict() + kwargs = {} + for t in ProductType.objects.order_by('name').all(): + for i in self.stock.items.filter(type=t).order_by('name').all(): + field_name = "item-%s" % (str(i.id)) + fields[field_name] = forms.IntegerField(required=False, label=str(i), initial=0, min_value=0, max_value=i.effective_quantity, + help_text=_("(%(effective_quantity)s left" % {"effective_quantity": str(i.effective_quantity)})) + kwargs[field_name] = i.effective_quantity + kwargs['stock_id'] = self.stock.id + kwargs['counter_id'] = self.stock.counter.id + kwargs['base_fields'] = fields + return type('StockTakeItemsForm', (StockTakeItemsForm,), kwargs) - def get(self, request, *args, **kwargs): - """ - Simple get view - """ - self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() - return super(StockTakeItemsBaseFormView, self).get(request, *args, **kwargs) - - def post(self, request, *args, **kwargs): - """ - Handle the many possibilities of the post request - """ - self.object = self.get_object() - self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() - if self.stock.counter.type == "BAR" and not ('counter_token' in self.request.session.keys() and - self.request.session['counter_token'] == self.stock.counter.token): # Also check the token to avoid the bar to be stolen - return HttpResponseRedirect(reverse_lazy('counter:details', args=self.args, - kwargs={'counter_id': self.stock.counter.id})+'?bad_location') - return super(StockTakeItemsBaseFormView, self).post(request, *args, **kwargs) + def get(self, request, *args, **kwargs): + """ + Simple get view + """ + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + return super(StockTakeItemsBaseFormView, self).get(request, *args, **kwargs) - def form_valid(self, form): - return super(StockTakeItemsBaseFormView, self).form_valid(form) + def post(self, request, *args, **kwargs): + """ + Handle the many possibilities of the post request + """ + self.object = self.get_object() + self.stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + if self.stock.counter.type == "BAR" and not ('counter_token' in self.request.session.keys() and + self.request.session['counter_token'] == self.stock.counter.token): # Also check the token to avoid the bar to be stolen + return HttpResponseRedirect(reverse_lazy('counter:details', args=self.args, + kwargs={'counter_id': self.stock.counter.id})+'?bad_location') + return super(StockTakeItemsBaseFormView, self).post(request, *args, **kwargs) - def get_context_data(self, **kwargs): - kwargs = super(StockTakeItemsBaseFormView, self).get_context_data(**kwargs) - if 'form' not in kwargs.keys(): - kwargs['form'] = self.get_form() - kwargs['stock'] = self.stock - kwargs['counter'] = self.stock.counter - return kwargs + def form_valid(self, form): + return super(StockTakeItemsBaseFormView, self).form_valid(form) - def get_success_url(self): - stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() - self.kwargs['counter_id'] = stock.counter.id - self.kwargs.pop('stock_id', None) - return reverse_lazy('counter:details', args=self.args, kwargs=self.kwargs) \ No newline at end of file + def get_context_data(self, **kwargs): + kwargs = super(StockTakeItemsBaseFormView, self).get_context_data(**kwargs) + if 'form' not in kwargs.keys(): + kwargs['form'] = self.get_form() + kwargs['stock'] = self.stock + kwargs['counter'] = self.stock.counter + return kwargs + + def get_success_url(self): + stock = Stock.objects.filter(id=self.kwargs['stock_id']).first() + self.kwargs['counter_id'] = stock.counter.id + self.kwargs.pop('stock_id', None) + return reverse_lazy('counter:details', args=self.args, kwargs=self.kwargs) From 423313f008500cb6fe4ec69a2d5f21835a052cac Mon Sep 17 00:00:00 2001 From: Skia Date: Tue, 25 Apr 2017 09:16:38 +0200 Subject: [PATCH 24/27] Update stock translations --- counter/views.py | 8 +- locale/fr/LC_MESSAGES/django.mo | Bin 52664 -> 57274 bytes locale/fr/LC_MESSAGES/django.po | 1258 ++++++++++++++++++------------- sith/settings.py | 1 + stock/views.py | 2 +- 5 files changed, 745 insertions(+), 524 deletions(-) diff --git a/counter/views.py b/counter/views.py index d69db0f8..dc8bf1a8 100644 --- a/counter/views.py +++ b/counter/views.py @@ -118,7 +118,7 @@ class RefillForm(forms.ModelForm): class CounterTabsMixin(TabedViewMixin): def get_tabs_title(self): - if hasattr(self.object, 'stock_owner') : + if hasattr(self.object, 'stock_owner') : return self.object.stock_owner.counter else: return self.object @@ -132,19 +132,19 @@ class CounterTabsMixin(TabedViewMixin): }) if self.object.stock_owner.counter.type if hasattr(self.object, 'stock_owner') else self.object.type == "BAR": tab_list.append({ - 'url': reverse_lazy('counter:cash_summary', + 'url': reverse_lazy('counter:cash_summary', kwargs={'counter_id': self.object.stock_owner.counter.id if hasattr(self.object, 'stock_owner') else self.object.id}), 'slug': 'cash_summary', 'name': _("Cash summary"), }) tab_list.append({ - 'url': reverse_lazy('counter:last_ops', + 'url': reverse_lazy('counter:last_ops', kwargs={'counter_id': self.object.stock_owner.counter.id if hasattr(self.object, 'stock_owner') else self.object.id}), 'slug': 'last_ops', 'name': _("Last operations"), }) tab_list.append({ - 'url': reverse_lazy('stock:take_items', + 'url': reverse_lazy('stock:take_items', kwargs={'stock_id': self.object.stock.id if hasattr(self.object, 'stock') else self.object.stock_owner.id}), 'slug': 'take_items_from_stock', 'name': _("Take items from stock"), diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index d177ae604a75b73fdace82afd3beda176b6aa8d6..8f8ab2f5da26f3ca7add1c558a2529b46c78df8d 100644 GIT binary patch delta 23963 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 JviZLk{2y9dMf3mw delta 19785 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\n" "Language-Team: AE info \n" @@ -16,161 +16,162 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounting/models.py:36 accounting/models.py:84 accounting/models.py:111 -#: accounting/models.py:170 club/models.py:18 counter/models.py:75 -#: counter/models.py:100 counter/models.py:135 forum/models.py:25 -#: launderette/models.py:13 launderette/models.py:58 launderette/models.py:83 +#: accounting/models.py:60 accounting/models.py:108 accounting/models.py:135 +#: accounting/models.py:194 club/models.py:42 counter/models.py:99 +#: counter/models.py:124 counter/models.py:159 forum/models.py:49 +#: launderette/models.py:37 launderette/models.py:82 launderette/models.py:107 +#: stock/models.py:13 stock/models.py:29 stock/models.py:52 stock/models.py:72 msgid "name" msgstr "nom" -#: accounting/models.py:37 +#: accounting/models.py:61 msgid "street" msgstr "rue" -#: accounting/models.py:38 +#: accounting/models.py:62 msgid "city" msgstr "ville" -#: accounting/models.py:39 +#: accounting/models.py:63 msgid "postcode" msgstr "code postal" -#: accounting/models.py:40 +#: accounting/models.py:64 msgid "country" msgstr "pays" -#: accounting/models.py:41 core/models.py:163 +#: accounting/models.py:65 core/models.py:187 msgid "phone" msgstr "téléphone" -#: accounting/models.py:42 +#: accounting/models.py:66 msgid "email" msgstr "email" -#: accounting/models.py:43 +#: accounting/models.py:67 msgid "website" msgstr "site internet" -#: accounting/models.py:46 +#: accounting/models.py:70 msgid "company" msgstr "entreprise" -#: accounting/models.py:85 +#: accounting/models.py:109 msgid "iban" msgstr "IBAN" -#: accounting/models.py:86 +#: accounting/models.py:110 msgid "account number" msgstr "numero de compte" -#: accounting/models.py:87 accounting/models.py:112 club/models.py:148 -#: com/models.py:37 com/models.py:122 counter/models.py:109 -#: counter/models.py:136 +#: accounting/models.py:111 accounting/models.py:136 club/models.py:172 +#: com/models.py:62 com/models.py:147 counter/models.py:133 +#: counter/models.py:160 msgid "club" msgstr "club" -#: accounting/models.py:90 +#: accounting/models.py:114 msgid "Bank account" msgstr "Compte en banque" -#: accounting/models.py:113 +#: accounting/models.py:137 msgid "bank account" msgstr "compte en banque" -#: accounting/models.py:116 +#: accounting/models.py:140 msgid "Club account" msgstr "Compte club" -#: accounting/models.py:161 +#: accounting/models.py:185 #, python-format msgid "%(club_account)s on %(bank_account)s" msgstr "%(club_account)s sur %(bank_account)s" -#: accounting/models.py:168 club/models.py:149 counter/models.py:404 -#: election/models.py:18 launderette/models.py:120 +#: accounting/models.py:192 club/models.py:173 counter/models.py:428 +#: election/models.py:18 launderette/models.py:144 msgid "start date" msgstr "date de début" -#: accounting/models.py:169 club/models.py:150 counter/models.py:405 +#: accounting/models.py:193 club/models.py:174 counter/models.py:429 #: election/models.py:19 msgid "end date" msgstr "date de fin" -#: accounting/models.py:171 +#: accounting/models.py:195 msgid "is closed" msgstr "est fermé" -#: accounting/models.py:172 accounting/models.py:390 +#: accounting/models.py:196 accounting/models.py:414 msgid "club account" msgstr "compte club" -#: accounting/models.py:173 accounting/models.py:229 counter/models.py:28 -#: counter/models.py:244 +#: accounting/models.py:197 accounting/models.py:253 counter/models.py:52 +#: counter/models.py:268 msgid "amount" msgstr "montant" -#: accounting/models.py:174 +#: accounting/models.py:198 msgid "effective_amount" msgstr "montant effectif" -#: accounting/models.py:177 +#: accounting/models.py:201 msgid "General journal" msgstr "Classeur" -#: accounting/models.py:227 +#: accounting/models.py:251 msgid "number" msgstr "numéro" -#: accounting/models.py:228 +#: accounting/models.py:252 msgid "journal" msgstr "classeur" -#: accounting/models.py:230 core/models.py:553 core/models.py:924 -#: core/models.py:964 counter/models.py:247 counter/models.py:295 -#: counter/models.py:421 eboutic/models.py:15 eboutic/models.py:48 -#: forum/models.py:170 forum/models.py:225 +#: accounting/models.py:254 core/models.py:577 core/models.py:948 +#: core/models.py:988 counter/models.py:271 counter/models.py:319 +#: counter/models.py:445 eboutic/models.py:39 eboutic/models.py:72 +#: forum/models.py:194 forum/models.py:249 stock/models.py:51 msgid "date" msgstr "date" -#: accounting/models.py:231 counter/models.py:422 +#: accounting/models.py:255 counter/models.py:446 stock/models.py:54 msgid "comment" msgstr "commentaire" -#: accounting/models.py:232 counter/models.py:248 counter/models.py:296 -#: subscription/models.py:29 +#: accounting/models.py:256 counter/models.py:272 counter/models.py:320 +#: subscription/models.py:53 msgid "payment method" msgstr "méthode de paiement" -#: accounting/models.py:233 +#: accounting/models.py:257 msgid "cheque number" msgstr "numéro de chèque" -#: accounting/models.py:234 eboutic/models.py:116 +#: accounting/models.py:258 eboutic/models.py:140 msgid "invoice" msgstr "facture" -#: accounting/models.py:235 +#: accounting/models.py:259 msgid "is done" msgstr "est fait" -#: accounting/models.py:237 +#: accounting/models.py:261 msgid "simple type" msgstr "type simplifié" -#: accounting/models.py:239 accounting/models.py:345 +#: accounting/models.py:263 accounting/models.py:369 msgid "accounting type" msgstr "type comptable" -#: accounting/models.py:241 accounting/models.py:340 accounting/models.py:366 -#: accounting/models.py:389 counter/models.py:287 +#: accounting/models.py:265 accounting/models.py:364 accounting/models.py:390 +#: accounting/models.py:413 counter/models.py:311 msgid "label" msgstr "étiquette" -#: accounting/models.py:242 +#: accounting/models.py:266 msgid "target type" msgstr "type de cible" -#: accounting/models.py:243 club/templates/club/club_members.jinja:8 +#: accounting/models.py:267 club/templates/club/club_members.jinja:8 #: club/templates/club/club_old_members.jinja:8 #: core/templates/core/user_clubs.jinja:15 #: core/templates/core/user_clubs.jinja:41 @@ -182,7 +183,7 @@ msgstr "type de cible" msgid "User" msgstr "Utilisateur" -#: accounting/models.py:243 club/templates/club/club_detail.jinja:5 +#: accounting/models.py:267 club/templates/club/club_detail.jinja:5 #: com/templates/com/news_admin_list.jinja:17 #: com/templates/com/news_admin_list.jinja:51 #: com/templates/com/weekmail.jinja:18 com/templates/com/weekmail.jinja:47 @@ -190,31 +191,32 @@ msgstr "Utilisateur" msgid "Club" msgstr "Club" -#: accounting/models.py:243 core/views/user.py:184 +#: accounting/models.py:267 core/views/user.py:208 msgid "Account" msgstr "Compte" -#: accounting/models.py:243 +#: accounting/models.py:267 msgid "Company" msgstr "Entreprise" -#: accounting/models.py:243 sith/settings.py:325 +#: accounting/models.py:267 sith/settings.py:350 +#: stock/templates/stock/shopping_list_items.jinja:37 msgid "Other" msgstr "Autre" -#: accounting/models.py:244 +#: accounting/models.py:268 msgid "target id" msgstr "id de la cible" -#: accounting/models.py:245 +#: accounting/models.py:269 msgid "target label" msgstr "nom de la cible" -#: accounting/models.py:246 +#: accounting/models.py:270 msgid "linked operation" msgstr "opération liée" -#: accounting/models.py:262 +#: accounting/models.py:286 #, python-format msgid "" "The date can not be before the start date of the journal, which is\n" @@ -223,16 +225,16 @@ msgstr "" "La date ne peut pas être avant la date de début du journal, qui est\n" "%(start_date)s." -#: accounting/models.py:265 +#: accounting/models.py:289 msgid "Target does not exists" msgstr "La cible n'existe pas." -#: accounting/models.py:267 +#: accounting/models.py:291 msgid "Please add a target label if you set no existing target" msgstr "" "Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante" -#: accounting/models.py:269 +#: accounting/models.py:293 msgid "" "You need to provide ether a simplified accounting type or a standard " "accounting type" @@ -240,41 +242,41 @@ msgstr "" "Vous devez fournir soit un type comptable simplifié ou un type comptable " "standard" -#: accounting/models.py:335 counter/models.py:104 +#: accounting/models.py:359 counter/models.py:128 msgid "code" msgstr "code" -#: accounting/models.py:337 +#: accounting/models.py:361 msgid "An accounting type code contains only numbers" msgstr "Un code comptable ne contient que des numéros" -#: accounting/models.py:341 +#: accounting/models.py:365 msgid "movement type" msgstr "type de mouvement" -#: accounting/models.py:341 +#: accounting/models.py:365 #: accounting/templates/accounting/journal_statement_nature.jinja:8 #: accounting/templates/accounting/journal_statement_person.jinja:11 -#: accounting/views.py:431 +#: accounting/views.py:455 msgid "Credit" msgstr "Crédit" -#: accounting/models.py:341 +#: accounting/models.py:365 #: accounting/templates/accounting/journal_statement_nature.jinja:27 #: accounting/templates/accounting/journal_statement_person.jinja:39 -#: accounting/views.py:431 +#: accounting/views.py:455 msgid "Debit" msgstr "Débit" -#: accounting/models.py:342 +#: accounting/models.py:366 msgid "Neutral" msgstr "Neutre" -#: accounting/models.py:368 +#: accounting/models.py:392 msgid "simplified accounting types" msgstr "type simplifié" -#: accounting/models.py:371 +#: accounting/models.py:395 msgid "simplified type" msgstr "type simplifié" @@ -326,24 +328,25 @@ msgstr "Compte en banque : " #: core/templates/core/file_moderation.jinja:24 #: core/templates/core/group_list.jinja:13 core/templates/core/macros.jinja:49 #: core/templates/core/macros.jinja:68 -#: core/templates/core/pagerev_edit.jinja:26 +#: core/templates/core/pagerev_edit.jinja:28 #: core/templates/core/user_account_detail.jinja:38 #: core/templates/core/user_edit.jinja:19 #: counter/templates/counter/last_ops.jinja:29 #: counter/templates/counter/last_ops.jinja:59 #: election/templates/election/election_detail.jinja:280 #: election/templates/election/election_detail.jinja:329 -#: forum/templates/forum/macros.jinja:20 -#: forum/templates/forum/macros.jinja:110 +#: forum/templates/forum/macros.jinja:20 forum/templates/forum/macros.jinja:110 #: launderette/templates/launderette/launderette_admin.jinja:16 -#: launderette/views.py:154 sas/templates/sas/album.jinja:26 +#: launderette/views.py:178 sas/templates/sas/album.jinja:26 #: sas/templates/sas/moderation.jinja:18 sas/templates/sas/picture.jinja:74 -#: sas/templates/sas/picture.jinja:124 +#: sas/templates/sas/picture.jinja.py:124 +#: stock/templates/stock/stock_shopping_list.jinja:43 +#: stock/templates/stock/stock_shopping_list.jinja:69 msgid "Delete" msgstr "Supprimer" #: accounting/templates/accounting/bank_account_details.jinja:17 -#: club/views.py:33 core/views/user.py:130 sas/templates/sas/picture.jinja:86 +#: club/views.py:57 core/views/user.py:154 sas/templates/sas/picture.jinja:86 msgid "Infos" msgstr "Infos" @@ -362,12 +365,12 @@ 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:57 -#: accounting/templates/accounting/journal_details.jinja:83 club/views.py:55 +#: accounting/templates/accounting/journal_details.jinja:83 club/views.py:79 #: com/templates/com/news_admin_list.jinja:39 #: com/templates/com/news_admin_list.jinja:71 #: com/templates/com/weekmail.jinja:32 com/templates/com/weekmail.jinja:61 #: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 -#: core/templates/core/user_tools.jinja:38 core/views/user.py:152 +#: core/templates/core/user_tools.jinja:39 core/views/user.py:176 #: counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/counter_list.jinja:17 #: counter/templates/counter/counter_list.jinja:32 @@ -547,7 +550,9 @@ msgstr "No" #: core/templates/core/user_account_detail.jinja:78 #: counter/templates/counter/cash_summary_list.jinja:34 #: counter/templates/counter/last_ops.jinja:14 -#: counter/templates/counter/last_ops.jinja:39 sas/views.py:257 +#: counter/templates/counter/last_ops.jinja:39 sas/views.py:281 +#: stock/templates/stock/stock_shopping_list.jinja:25 +#: stock/templates/stock/stock_shopping_list.jinja:54 msgid "Date" msgstr "Date" @@ -580,7 +585,7 @@ msgid "Done" msgstr "Effectuées" #: accounting/templates/accounting/journal_details.jinja:39 -#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:756 +#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:797 msgid "Comment" msgstr "Commentaire" @@ -676,21 +681,21 @@ msgid "Linked operation:" msgstr "Opération liée : " #: accounting/templates/accounting/operation_edit.jinja:51 -#: com/templates/com/news_edit.jinja:66 com/templates/com/weekmail.jinja:74 +#: com/templates/com/news_edit.jinja:56 com/templates/com/weekmail.jinja:74 #: core/templates/core/create.jinja:12 core/templates/core/edit.jinja:7 #: core/templates/core/edit.jinja.py:15 core/templates/core/edit.jinja:20 #: core/templates/core/file_edit.jinja:8 core/templates/core/page_prop.jinja:8 -#: core/templates/core/pagerev_edit.jinja:24 +#: core/templates/core/pagerev_edit.jinja:26 #: core/templates/core/user_godfathers.jinja:35 #: counter/templates/counter/cash_register_summary.jinja:22 -#: forum/templates/forum/reply.jinja:22 +#: forum/templates/forum/reply.jinja:31 #: subscription/templates/subscription/subscription.jinja:23 msgid "Save" msgstr "Sauver" #: accounting/templates/accounting/refound_account.jinja:4 #: accounting/templates/accounting/refound_account.jinja:8 -#: accounting/views.py:694 +#: accounting/views.py:718 msgid "Refound account" msgstr "Remboursement de compte" @@ -711,83 +716,83 @@ msgstr "Types simplifiés" msgid "New simplified type" msgstr "Nouveau type simplifié" -#: accounting/views.py:172 accounting/views.py:179 accounting/views.py:414 +#: accounting/views.py:196 accounting/views.py:203 accounting/views.py:438 msgid "Journal" msgstr "Classeur" -#: accounting/views.py:184 +#: accounting/views.py:208 msgid "Statement by nature" msgstr "Bilan par nature" -#: accounting/views.py:189 +#: accounting/views.py:213 msgid "Statement by person" msgstr "Bilan par personne" -#: accounting/views.py:194 +#: accounting/views.py:218 msgid "Accounting statement" msgstr "Bilan comptable" -#: accounting/views.py:408 accounting/views.py:414 +#: accounting/views.py:432 accounting/views.py:438 msgid "Operation" msgstr "Opération" -#: accounting/views.py:424 +#: accounting/views.py:448 msgid "Financial proof: " msgstr "Justificatif de libellé : " -#: accounting/views.py:425 +#: accounting/views.py:449 #, python-format msgid "Club: %(club_name)s" msgstr "Club : %(club_name)s" -#: accounting/views.py:426 +#: accounting/views.py:450 #, python-format msgid "Label: %(op_label)s" msgstr "Libellé : %(op_label)s" -#: accounting/views.py:427 +#: accounting/views.py:451 #, python-format msgid "Date: %(date)s" msgstr "Date : %(date)s" -#: accounting/views.py:433 +#: accounting/views.py:457 #, python-format msgid "Amount: %(amount).2f €" msgstr "Montant : %(amount).2f €" -#: accounting/views.py:445 +#: accounting/views.py:469 msgid "Debtor" msgstr "Débiteur" -#: accounting/views.py:445 +#: accounting/views.py:469 msgid "Creditor" msgstr "Créditeur" -#: accounting/views.py:447 +#: accounting/views.py:471 msgid "Comment:" msgstr "Commentaire :" -#: accounting/views.py:466 +#: accounting/views.py:490 msgid "Signature:" msgstr "Signature :" -#: accounting/views.py:520 +#: accounting/views.py:544 msgid "General statement" msgstr "Bilan général" -#: accounting/views.py:523 +#: accounting/views.py:547 msgid "No label operations" msgstr "Opérations sans étiquette" -#: accounting/views.py:656 +#: accounting/views.py:680 msgid "Refound this account" msgstr "Rembourser ce compte" -#: club/models.py:20 +#: club/models.py:44 msgid "unix name" msgstr "nom unix" -#: club/models.py:24 +#: club/models.py:48 msgid "" "Enter a valid unix name. This value may contain only letters, numbers ./-/_ " "characters." @@ -795,52 +800,52 @@ msgstr "" "Entrez un nom UNIX valide. Cette valeur peut contenir uniquement des " "lettres, des nombres, et les caractères ./-/_" -#: club/models.py:29 +#: club/models.py:53 msgid "A club with that unix name already exists." msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:32 core/models.py:165 +#: club/models.py:56 core/models.py:189 msgid "address" msgstr "Adresse" -#: club/models.py:38 core/models.py:126 +#: club/models.py:62 core/models.py:150 msgid "home" msgstr "home" -#: club/models.py:50 +#: club/models.py:74 msgid "You can not make loops in clubs" msgstr "Vous ne pouvez pas faire de boucles dans les clubs" -#: club/models.py:64 +#: club/models.py:88 msgid "A club with that unix_name already exists" msgstr "Un club avec ce nom UNIX existe déjà." -#: club/models.py:147 counter/models.py:402 counter/models.py:419 -#: eboutic/models.py:14 eboutic/models.py:47 election/models.py:130 -#: launderette/models.py:87 launderette/models.py:124 sas/models.py:132 +#: club/models.py:171 counter/models.py:426 counter/models.py:443 +#: eboutic/models.py:38 eboutic/models.py:71 election/models.py:130 +#: launderette/models.py:111 launderette/models.py:148 sas/models.py:156 msgid "user" msgstr "nom d'utilisateur" -#: club/models.py:151 core/models.py:145 election/models.py:129 +#: club/models.py:175 core/models.py:169 election/models.py:129 #: election/models.py:145 msgid "role" msgstr "rôle" -#: club/models.py:153 core/models.py:37 counter/models.py:76 -#: counter/models.py:101 election/models.py:15 election/models.py:82 -#: election/models.py:131 forum/models.py:26 forum/models.py:125 +#: club/models.py:177 core/models.py:61 counter/models.py:100 +#: counter/models.py:125 election/models.py:15 election/models.py:82 +#: election/models.py:131 forum/models.py:50 forum/models.py:149 msgid "description" msgstr "description" -#: club/models.py:158 +#: club/models.py:182 msgid "User must be subscriber to take part to a club" msgstr "L'utilisateur doit être cotisant pour faire partie d'un club" -#: club/models.py:160 +#: club/models.py:184 msgid "User is already member of that club" msgstr "L'utilisateur est déjà membre de ce club" -#: club/models.py:164 +#: club/models.py:188 msgid "past member" msgstr "Anciens membres" @@ -887,8 +892,8 @@ msgid "Mark as old" msgstr "Marquer comme ancien" #: club/templates/club/club_members.jinja:30 -#: core/templates/core/file_detail.jinja:19 core/views/forms.py:205 -#: launderette/views.py:154 +#: core/templates/core/file_detail.jinja:19 core/views/forms.py:229 +#: launderette/views.py:178 msgid "Add" msgstr "Ajouter" @@ -906,14 +911,13 @@ msgstr "Du" msgid "To" msgstr "Au" -#: club/templates/club/club_sellings.jinja:5 club/views.py:60 -#: club/views.py:223 counter/templates/counter/counter_main.jinja:19 +#: club/templates/club/club_sellings.jinja:5 club/views.py:84 club/views.py:247 +#: counter/templates/counter/counter_main.jinja:19 #: counter/templates/counter/last_ops.jinja:35 msgid "Sellings" msgstr "Ventes" -#: club/templates/club/club_sellings.jinja:9 -#: club/templates/club/stats.jinja:19 +#: club/templates/club/club_sellings.jinja:9 club/templates/club/stats.jinja:19 #: counter/templates/counter/cash_summary_list.jinja:15 msgid "Show" msgstr "Montrer" @@ -934,10 +938,10 @@ msgstr "unités" msgid "Benefit: " msgstr "Bénéfice : " -#: club/templates/club/club_sellings.jinja:21 club/views.py:173 +#: club/templates/club/club_sellings.jinja:21 club/views.py:197 #: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:51 -#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:103 +#: counter/templates/counter/cash_summary_list.jinja:33 counter/views.py:131 msgid "Counter" msgstr "Comptoir" @@ -981,7 +985,7 @@ msgid "Payment method" msgstr "Méthode de paiement" #: club/templates/club/club_tools.jinja:4 -#: core/templates/core/user_tools.jinja:86 +#: core/templates/core/user_tools.jinja:95 msgid "Club tools" msgstr "Outils club" @@ -1013,146 +1017,147 @@ msgstr "Gestion des laveries" msgid "Club stats" msgstr "Statistiques du club" -#: club/views.py:39 +#: club/views.py:63 msgid "Members" msgstr "Membres" -#: club/views.py:44 +#: club/views.py:68 msgid "Old members" msgstr "Anciens membres" -#: club/views.py:50 core/templates/core/base.jinja:64 core/views/user.py:146 +#: club/views.py:74 core/templates/core/base.jinja:64 core/views/user.py:170 #: sas/templates/sas/picture.jinja:95 msgid "Tools" msgstr "Outils" -#: club/views.py:66 counter/templates/counter/counter_list.jinja:21 -#: counter/templates/counter/counter_list.jinja:36 -#: counter/templates/counter/counter_list.jinja:51 +#: club/views.py:90 counter/templates/counter/counter_list.jinja:21 +#: counter/templates/counter/counter_list.jinja:42 +#: counter/templates/counter/counter_list.jinja:57 msgid "Props" msgstr "Propriétés" -#: club/views.py:107 core/views/forms.py:206 counter/views.py:68 +#: club/views.py:131 core/views/forms.py:230 counter/views.py:92 msgid "Select user" msgstr "Choisir un utilisateur" -#: club/views.py:156 sas/views.py:82 sas/views.py:133 sas/views.py:204 +#: club/views.py:180 sas/views.py:106 sas/views.py:157 sas/views.py:228 msgid "You do not have the permission to do that" msgstr "Vous n'avez pas la permission de faire cela" -#: club/views.py:171 counter/views.py:977 +#: club/views.py:195 counter/views.py:1018 msgid "Begin date" msgstr "Date de début" -#: club/views.py:172 com/views.py:99 counter/views.py:978 +#: club/views.py:196 com/views.py:123 counter/views.py:1019 #: election/views.py:131 msgid "End date" msgstr "Date de fin" -#: club/views.py:186 core/templates/core/user_stats.jinja:27 -#: counter/views.py:1064 +#: club/views.py:210 core/templates/core/user_stats.jinja:27 +#: counter/views.py:1105 msgid "Product" msgstr "Produit" -#: com/models.py:13 +#: com/models.py:38 msgid "alert message" msgstr "message d'alerte" -#: com/models.py:14 +#: com/models.py:39 msgid "info message" msgstr "message d'info" -#: com/models.py:15 +#: com/models.py:40 msgid "index page" msgstr "page d'accueil" -#: com/models.py:16 +#: com/models.py:41 msgid "weekmail destinations" msgstr "destinataires du weekmail" -#: com/models.py:25 +#: com/models.py:50 msgid "Notice" msgstr "Information" -#: com/models.py:26 +#: com/models.py:51 msgid "Event" msgstr "Événement" -#: com/models.py:27 com/templates/com/news_list.jinja:79 +#: com/models.py:52 com/templates/com/news_list.jinja:81 msgid "Weekly" msgstr "Hebdomadaire" -#: com/models.py:28 +#: com/models.py:53 msgid "Call" msgstr "Appel" -#: com/models.py:33 com/models.py:75 com/models.py:119 election/models.py:14 -#: election/models.py:81 election/models.py:118 forum/models.py:168 +#: com/models.py:58 com/models.py:100 com/models.py:144 election/models.py:14 +#: election/models.py:81 election/models.py:118 forum/models.py:192 msgid "title" msgstr "titre" -#: com/models.py:34 +#: com/models.py:59 msgid "summary" msgstr "résumé" -#: com/models.py:35 com/models.py:120 +#: com/models.py:60 com/models.py:145 msgid "content" msgstr "contenu de la nouvelle" -#: com/models.py:36 core/models.py:963 launderette/models.py:60 -#: launderette/models.py:85 launderette/models.py:121 +#: com/models.py:61 core/models.py:987 launderette/models.py:84 +#: launderette/models.py:109 launderette/models.py:145 stock/models.py:34 +#: stock/models.py:73 msgid "type" msgstr "type" -#: com/models.py:38 com/models.py:121 +#: com/models.py:63 com/models.py:146 msgid "author" msgstr "auteur" -#: com/models.py:39 core/models.py:554 +#: com/models.py:64 core/models.py:578 msgid "is moderated" msgstr "est modéré" -#: com/models.py:40 +#: com/models.py:65 msgid "moderator" msgstr "modérateur" -#: com/models.py:64 +#: com/models.py:89 msgid "news_date" msgstr "date de la nouvelle" -#: com/models.py:65 +#: com/models.py:90 msgid "start_date" msgstr "date de début" -#: com/models.py:66 +#: com/models.py:91 msgid "end_date" msgstr "date de fin" -#: com/models.py:76 +#: com/models.py:101 msgid "intro" msgstr "intro" -#: com/models.py:77 +#: com/models.py:102 msgid "joke" msgstr "blague" -#: com/models.py:78 +#: com/models.py:103 msgid "protip" msgstr "astuce" -#: com/models.py:79 +#: com/models.py:104 msgid "conclusion" msgstr "conclusion" -#: com/models.py:80 +#: com/models.py:105 msgid "sent" msgstr "envoyé" -#: com/models.py:118 +#: com/models.py:143 msgid "weekmail" msgstr "weekmail" -#: com/models.py:123 +#: com/models.py:148 msgid "rank" msgstr "rang" @@ -1173,7 +1178,7 @@ msgstr "Nouvelles affichées" #: com/templates/com/news_admin_list.jinja:14 #: com/templates/com/news_admin_list.jinja:48 #: launderette/templates/launderette/launderette_admin.jinja:42 -#: launderette/views.py:156 +#: launderette/views.py:180 msgid "Type" msgstr "Type" @@ -1181,6 +1186,7 @@ msgstr "Type" #: com/templates/com/news_admin_list.jinja:49 #: com/templates/com/weekmail.jinja:19 com/templates/com/weekmail.jinja:48 #: forum/templates/forum/forum.jinja:26 forum/templates/forum/forum.jinja:44 +#: forum/views.py:127 msgid "Title" msgstr "Titre" @@ -1216,7 +1222,7 @@ msgstr "Modérer" msgid "Back to news" msgstr "Retour aux nouvelles" -#: com/templates/com/news_detail.jinja:22 com/templates/com/news_edit.jinja:34 +#: com/templates/com/news_detail.jinja:22 com/templates/com/news_edit.jinja:24 msgid "Author: " msgstr "Auteur : " @@ -1228,24 +1234,24 @@ msgstr "Modérateur : " msgid "Edit (will be remoderated)" msgstr "Éditer (sera resoumise à modération)" -#: com/templates/com/news_edit.jinja:6 com/templates/com/news_edit.jinja:38 +#: com/templates/com/news_edit.jinja:6 com/templates/com/news_edit.jinja:28 msgid "Edit news" msgstr "Éditer la nouvelle" -#: com/templates/com/news_edit.jinja:8 com/templates/com/news_edit.jinja:40 -#: core/templates/core/user_tools.jinja:72 +#: com/templates/com/news_edit.jinja:8 com/templates/com/news_edit.jinja:30 +#: core/templates/core/user_tools.jinja:81 msgid "Create news" msgstr "Créer nouvelle" -#: com/templates/com/news_edit.jinja:48 +#: com/templates/com/news_edit.jinja:38 msgid "Notice: Information, election result - no date" msgstr "Information, resultat d'élection - sans date" -#: com/templates/com/news_edit.jinja:49 +#: com/templates/com/news_edit.jinja:39 msgid "Event: punctual event, associated with one date" msgstr "Événement : événement ponctuel associé à une date" -#: com/templates/com/news_edit.jinja:50 +#: com/templates/com/news_edit.jinja:40 msgid "" "Weekly: recurrent event, associated with many dates (specify the first one, " "and a deadline)" @@ -1253,15 +1259,16 @@ msgstr "" "Hebdomadaire : événement récurrent, associé à plusieurs dates (spécifier la " "première, ainsi que la date de fin)" -#: com/templates/com/news_edit.jinja:51 +#: com/templates/com/news_edit.jinja:41 msgid "" "Call: long time event, associated with a long date (election appliance, ...)" msgstr "" "Appel : événement de longue durée, associé à une longue date (candidature, " "concours, ...)" -#: com/templates/com/news_edit.jinja:65 com/templates/com/weekmail.jinja:10 -#: core/templates/core/pagerev_edit.jinja:23 +#: com/templates/com/news_edit.jinja:55 com/templates/com/weekmail.jinja:10 +#: core/templates/core/pagerev_edit.jinja:25 +#: forum/templates/forum/reply.jinja:30 msgid "Preview" msgstr "Prévisualiser" @@ -1269,12 +1276,12 @@ msgstr "Prévisualiser" msgid "Events today and the next few days" msgstr "Événement aujourd'hui et dans les prochains jours" -#: com/templates/com/news_list.jinja:65 +#: com/templates/com/news_list.jinja:67 msgid "Coming soon... don't miss!" msgstr "Prochainement... à ne pas rater!" #: com/templates/com/weekmail.jinja:5 com/templates/com/weekmail.jinja.py:9 -#: com/views.py:37 core/templates/core/user_tools.jinja:70 +#: com/views.py:61 core/templates/core/user_tools.jinja:79 msgid "Weekmail" msgstr "Weekmail" @@ -1317,7 +1324,8 @@ msgstr "Supprimer du Weekmail" #: com/templates/com/weekmail_preview.jinja:9 #: core/templates/core/user_account_detail.jinja:11 -#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:154 +#: core/templates/core/user_account_detail.jinja:104 launderette/views.py:178 +#: stock/templates/stock/shopping_list_items.jinja:9 msgid "Back" msgstr "Retour" @@ -1358,74 +1366,78 @@ msgstr "Astuce" msgid "Final word" msgstr "Le mot de la fin" -#: com/views.py:30 +#: com/views.py:54 msgid "Communication administration" msgstr "Administration de la communication" -#: com/views.py:42 core/templates/core/user_tools.jinja:71 +#: com/views.py:66 core/templates/core/user_tools.jinja:80 msgid "Weekmail destinations" msgstr "Destinataires du Weekmail" -#: com/views.py:47 +#: com/views.py:71 msgid "Index page" msgstr "Page d'accueil" -#: com/views.py:52 +#: com/views.py:76 msgid "Info message" msgstr "Message d'info" -#: com/views.py:57 +#: com/views.py:81 msgid "Alert message" msgstr "Message d'alerte" -#: com/views.py:98 election/views.py:130 +#: com/views.py:122 election/views.py:130 msgid "Start date" msgstr "Date de début" -#: com/views.py:100 +#: com/views.py:124 msgid "Until" msgstr "Jusqu'à" -#: com/views.py:101 +#: com/views.py:125 msgid "Automoderation" msgstr "Automodération" -#: com/views.py:107 com/views.py:109 com/views.py:111 +#: com/views.py:131 com/views.py:133 com/views.py:137 msgid "This field is required." msgstr "Ce champ est obligatoire." -#: com/views.py:264 +#: com/views.py:135 +msgid "You crazy? You can not finish an event before starting it." +msgstr "T'es fou? Un événement ne peut pas finir avant même de commencer." + +#: com/views.py:290 msgid "Delete and save to regenerate" msgstr "Supprimer et sauver pour regénérer" -#: com/views.py:272 +#: com/views.py:298 msgid "Weekmail of the " msgstr "Weekmail du " -#: core/models.py:33 +#: core/models.py:57 msgid "meta group status" msgstr "status du meta-groupe" -#: core/models.py:35 +#: core/models.py:59 msgid "Whether a group is a meta group or not" msgstr "Si un groupe est un meta-groupe ou pas" -#: core/models.py:67 +#: core/models.py:91 #, python-format msgid "%(value)s is not a valid promo (between 0 and %(end)s)" msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)" -#: core/models.py:83 +#: core/models.py:107 msgid "username" msgstr "nom d'utilisateur" -#: core/models.py:86 +#: core/models.py:110 msgid "Required. 254 characters or fewer. Letters, digits and ./+/-/_ only." msgstr "" "Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et ./" "+/-/_" -#: core/models.py:90 +#: core/models.py:114 msgid "" "Enter a valid username. This value may contain only letters, numbers and ./" "+/-/_ characters." @@ -1433,43 +1445,43 @@ msgstr "" "Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et ./" "+/-/_" -#: core/models.py:95 +#: core/models.py:119 msgid "A user with that username already exists." msgstr "Un utilisateur de ce nom existe déjà" -#: core/models.py:98 +#: core/models.py:122 msgid "first name" msgstr "Prénom" -#: core/models.py:99 +#: core/models.py:123 msgid "last name" msgstr "Nom" -#: core/models.py:100 +#: core/models.py:124 msgid "email address" msgstr "adresse email" -#: core/models.py:101 +#: core/models.py:125 msgid "date of birth" msgstr "date de naissance" -#: core/models.py:102 +#: core/models.py:126 msgid "nick name" msgstr "surnom" -#: core/models.py:104 +#: core/models.py:128 msgid "staff status" msgstr "status \"staff\"" -#: core/models.py:106 +#: core/models.py:130 msgid "Designates whether the user can log into this admin site." msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site." -#: core/models.py:109 +#: core/models.py:133 msgid "active" msgstr "actif" -#: core/models.py:112 +#: core/models.py:136 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." @@ -1477,270 +1489,271 @@ msgstr "" "Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au " "lieu de supprimer les comptes." -#: core/models.py:116 +#: core/models.py:140 msgid "date joined" msgstr "date d'inscription" -#: core/models.py:117 +#: core/models.py:141 msgid "last update" msgstr "dernière mise à jour" -#: core/models.py:119 +#: core/models.py:143 msgid "superuser" msgstr "super-utilisateur" -#: core/models.py:122 +#: core/models.py:146 msgid "Designates whether this user is a superuser. " msgstr "Est-ce que l'utilisateur est super-utilisateur." -#: core/models.py:128 +#: core/models.py:152 msgid "profile" msgstr "profil" -#: core/models.py:130 +#: core/models.py:154 msgid "avatar" msgstr "avatar" -#: core/models.py:132 +#: core/models.py:156 msgid "scrub" msgstr "blouse" -#: core/models.py:134 +#: core/models.py:158 msgid "sex" msgstr "sexe" -#: core/models.py:134 +#: core/models.py:158 msgid "Man" msgstr "Homme" -#: core/models.py:134 +#: core/models.py:158 msgid "Woman" msgstr "Femme" -#: core/models.py:135 +#: core/models.py:159 msgid "tshirt size" msgstr "taille de tshirt" -#: core/models.py:136 +#: core/models.py:160 msgid "-" msgstr "-" -#: core/models.py:137 +#: core/models.py:161 msgid "XS" msgstr "XS" -#: core/models.py:138 +#: core/models.py:162 msgid "S" msgstr "S" -#: core/models.py:139 +#: core/models.py:163 msgid "M" msgstr "M" -#: core/models.py:140 +#: core/models.py:164 msgid "L" msgstr "L" -#: core/models.py:141 +#: core/models.py:165 msgid "XL" msgstr "XL" -#: core/models.py:142 +#: core/models.py:166 msgid "XXL" msgstr "XXL" -#: core/models.py:143 +#: core/models.py:167 msgid "XXXL" msgstr "XXXL" -#: core/models.py:146 +#: core/models.py:170 msgid "Student" msgstr "Étudiant" -#: core/models.py:147 +#: core/models.py:171 msgid "Administrative agent" msgstr "Personnel administratif" -#: core/models.py:148 +#: core/models.py:172 msgid "Teacher" msgstr "Enseignant" -#: core/models.py:149 +#: core/models.py:173 msgid "Agent" msgstr "Personnel" -#: core/models.py:150 +#: core/models.py:174 msgid "Doctor" msgstr "Doctorant" -#: core/models.py:151 +#: core/models.py:175 msgid "Former student" msgstr "Ancien étudiant" -#: core/models.py:152 +#: core/models.py:176 msgid "Service" msgstr "Service" -#: core/models.py:154 +#: core/models.py:178 msgid "department" msgstr "département" -#: core/models.py:156 +#: core/models.py:180 msgid "dpt option" msgstr "Filière" -#: core/models.py:157 +#: core/models.py:181 msgid "semester" msgstr "semestre" -#: core/models.py:158 +#: core/models.py:182 msgid "quote" msgstr "citation" -#: core/models.py:159 +#: core/models.py:183 msgid "school" msgstr "école" -#: core/models.py:160 +#: core/models.py:184 msgid "promo" msgstr "promo" -#: core/models.py:161 +#: core/models.py:185 msgid "forum signature" msgstr "signature du forum" -#: core/models.py:162 +#: core/models.py:186 msgid "second email address" msgstr "adresse email secondaire" -#: core/models.py:164 +#: core/models.py:188 msgid "parent phone" msgstr "téléphone des parents" -#: core/models.py:166 +#: core/models.py:190 msgid "parent address" msgstr "adresse des parents" -#: core/models.py:167 +#: core/models.py:191 msgid "is subscriber viewable" msgstr "profil visible par les cotisants" -#: core/models.py:306 +#: core/models.py:330 msgid "A user with that username already exists" msgstr "Un utilisateur de ce nom d'utilisateur existe déjà" -#: core/models.py:431 core/templates/core/macros.jinja:17 +#: core/models.py:455 core/templates/core/macros.jinja:17 #: core/templates/core/user_detail.jinja:14 #: core/templates/core/user_detail.jinja:16 #: core/templates/core/user_edit.jinja:17 #: election/templates/election/election_detail.jinja:316 #: forum/templates/forum/macros.jinja:87 forum/templates/forum/macros.jinja:89 +#: forum/templates/forum/reply.jinja:36 forum/templates/forum/reply.jinja:38 msgid "Profile" msgstr "Profil" -#: core/models.py:511 +#: core/models.py:535 msgid "Visitor" msgstr "Visiteur" -#: core/models.py:516 +#: core/models.py:540 msgid "do you want to receive the weekmail" msgstr "voulez-vous recevoir le Weekmail" -#: core/models.py:521 +#: core/models.py:545 msgid "define if we show a users stats" msgstr "Definit si l'on montre les statistiques de l'utilisateur" -#: core/models.py:523 +#: core/models.py:547 msgid "Show your account statistics to others" msgstr "Montrez vos statistiques de compte aux autres" -#: core/models.py:542 +#: core/models.py:566 msgid "file name" msgstr "nom du fichier" -#: core/models.py:543 core/models.py:751 +#: core/models.py:567 core/models.py:775 msgid "parent" msgstr "parent" -#: core/models.py:544 core/models.py:560 +#: core/models.py:568 core/models.py:584 msgid "file" msgstr "fichier" -#: core/models.py:545 +#: core/models.py:569 msgid "compressed file" msgstr "version allégée" -#: core/models.py:546 +#: core/models.py:570 msgid "thumbnail" msgstr "miniature" -#: core/models.py:547 core/models.py:555 +#: core/models.py:571 core/models.py:579 msgid "owner" msgstr "propriétaire" -#: core/models.py:548 core/models.py:757 core/views/files.py:122 +#: core/models.py:572 core/models.py:781 core/views/files.py:146 msgid "edit group" msgstr "groupe d'édition" -#: core/models.py:549 core/models.py:758 core/views/files.py:123 +#: core/models.py:573 core/models.py:782 core/views/files.py:147 msgid "view group" msgstr "groupe de vue" -#: core/models.py:550 +#: core/models.py:574 msgid "is folder" msgstr "est un dossier" -#: core/models.py:551 +#: core/models.py:575 msgid "mime type" msgstr "type mime" -#: core/models.py:552 +#: core/models.py:576 msgid "size" msgstr "taille" -#: core/models.py:556 +#: core/models.py:580 msgid "asked for removal" msgstr "retrait demandé" -#: core/models.py:557 +#: core/models.py:581 msgid "is in the SAS" msgstr "est dans le SAS" -#: core/models.py:596 +#: core/models.py:620 msgid "Character '/' not authorized in name" msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier" -#: core/models.py:599 core/models.py:604 +#: core/models.py:623 core/models.py:628 msgid "Loop in folder tree" msgstr "Boucle dans l'arborescence des dossiers" -#: core/models.py:608 +#: core/models.py:632 msgid "You can not make a file be a children of a non folder file" msgstr "" "Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas " "un dossier" -#: core/models.py:612 +#: core/models.py:636 msgid "Duplicate file" msgstr "Un fichier de ce nom existe déjà" -#: core/models.py:626 +#: core/models.py:650 msgid "You must provide a file" msgstr "Vous devez fournir un fichier" -#: core/models.py:692 +#: core/models.py:716 msgid "Folder: " msgstr "Dossier : " -#: core/models.py:694 +#: core/models.py:718 msgid "File: " msgstr "Fichier : " -#: core/models.py:742 +#: core/models.py:766 msgid "page unix name" msgstr "nom unix de la page" -#: core/models.py:746 +#: core/models.py:770 msgid "" "Enter a valid page name. This value may contain only unaccented letters, " "numbers and ./+/-/_ characters." @@ -1748,51 +1761,51 @@ msgstr "" "Entrez un nom de page correct. Uniquement des lettres non accentuées, " "numéros, et ./+/-/_" -#: core/models.py:754 +#: core/models.py:778 msgid "page name" msgstr "nom de la page" -#: core/models.py:755 +#: core/models.py:779 msgid "owner group" msgstr "groupe propriétaire" -#: core/models.py:759 +#: core/models.py:783 msgid "lock user" msgstr "utilisateur bloquant" -#: core/models.py:760 +#: core/models.py:784 msgid "lock_timeout" msgstr "décompte du déblocage" -#: core/models.py:787 +#: core/models.py:811 msgid "Duplicate page" msgstr "Une page de ce nom existe déjà" -#: core/models.py:793 +#: core/models.py:817 msgid "Loop in page tree" msgstr "Boucle dans l'arborescence des pages" -#: core/models.py:921 +#: core/models.py:945 msgid "revision" msgstr "révision" -#: core/models.py:922 +#: core/models.py:946 msgid "page title" msgstr "titre de la page" -#: core/models.py:923 +#: core/models.py:947 msgid "page content" msgstr "contenu de la page" -#: core/models.py:961 +#: core/models.py:985 msgid "url" msgstr "url" -#: core/models.py:962 +#: core/models.py:986 msgid "param" msgstr "param" -#: core/models.py:965 +#: core/models.py:989 msgid "viewed" msgstr "vue" @@ -1825,8 +1838,7 @@ msgstr "S'enregister" msgid "View more" msgstr "Voir plus" -#: core/templates/core/base.jinja:62 -#: forum/templates/forum/last_unread.jinja:15 +#: core/templates/core/base.jinja:62 forum/templates/forum/last_unread.jinja:15 msgid "Mark all as read" msgstr "Marquer tout commme lu" @@ -1858,8 +1870,8 @@ msgstr "SAS" #: core/templates/core/base.jinja:94 forum/templates/forum/forum.jinja:10 #: forum/templates/forum/last_unread.jinja:12 -#: forum/templates/forum/main.jinja:6 forum/templates/forum/main.jinja:11 -#: forum/templates/forum/main.jinja:13 forum/templates/forum/reply.jinja:10 +#: forum/templates/forum/main.jinja:6 forum/templates/forum/main.jinja.py:11 +#: forum/templates/forum/main.jinja:13 forum/templates/forum/reply.jinja:15 #: forum/templates/forum/topic.jinja:30 msgid "Forum" msgstr "Forum" @@ -1869,7 +1881,7 @@ msgid "Services" msgstr "Services" #: core/templates/core/base.jinja:96 core/templates/core/file.jinja:20 -#: core/views/files.py:51 +#: core/views/files.py:75 msgid "Files" msgstr "Fichiers" @@ -2089,7 +2101,7 @@ msgstr "Cotisant jusqu'au %(subscription_end)s" msgid "Account number: " msgstr "Numero de compte : " -#: core/templates/core/macros.jinja:44 launderette/models.py:127 +#: core/templates/core/macros.jinja:44 launderette/models.py:151 msgid "Slot" msgstr "Créneau" @@ -2196,7 +2208,7 @@ msgstr "Il n'y a pas de page sur ce site web." msgid "Page properties" msgstr "Propriétés de la page" -#: core/templates/core/pagerev_edit.jinja:19 +#: core/templates/core/pagerev_edit.jinja:21 msgid "Edit page" msgstr "Éditer la page" @@ -2297,7 +2309,7 @@ msgstr "Résultat de la recherche" msgid "Users" msgstr "Utilisateurs" -#: core/templates/core/search.jinja:18 core/views/user.py:163 +#: core/templates/core/search.jinja:18 core/views/user.py:187 #: counter/templates/counter/stats.jinja:17 msgid "Clubs" msgstr "Clubs" @@ -2339,7 +2351,7 @@ msgid "Eboutic invoices" msgstr "Facture eboutic" #: core/templates/core/user_account.jinja:53 -#: core/templates/core/user_tools.jinja:33 counter/views.py:519 +#: core/templates/core/user_tools.jinja:33 counter/views.py:560 msgid "Etickets" msgstr "Etickets" @@ -2437,7 +2449,7 @@ msgstr "Changer le mot de passe" msgid "%(user_name)s's godfathers" msgstr "Parrains de %(user_name)s" -#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:135 +#: core/templates/core/user_godfathers.jinja:10 core/views/user.py:159 msgid "Godfathers" msgstr "Parrains" @@ -2497,7 +2509,7 @@ msgstr "Outils utilisateurs" msgid "Sith management" msgstr "Gestion de Sith" -#: core/templates/core/user_tools.jinja:14 core/views/user.py:169 +#: core/templates/core/user_tools.jinja:14 core/views/user.py:193 msgid "Groups" msgstr "Groupes" @@ -2510,8 +2522,8 @@ msgstr "Fusionner deux utilisateurs" msgid "Subscriptions" msgstr "Cotisations" -#: core/templates/core/user_tools.jinja:24 counter/views.py:489 -#: counter/views.py:643 +#: core/templates/core/user_tools.jinja:24 counter/views.py:530 +#: counter/views.py:684 msgid "Counters" msgstr "Comptoirs" @@ -2532,16 +2544,16 @@ msgid "Product types management" msgstr "Gestion des types de produit" #: core/templates/core/user_tools.jinja:31 -#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:509 +#: counter/templates/counter/cash_summary_list.jinja:23 counter/views.py:550 msgid "Cash register summaries" msgstr "Relevés de caisse" #: core/templates/core/user_tools.jinja:32 -#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:514 +#: counter/templates/counter/invoices_call.jinja:4 counter/views.py:555 msgid "Invoices call" msgstr "Appels à facture" -#: core/templates/core/user_tools.jinja:39 core/views/user.py:179 +#: core/templates/core/user_tools.jinja:40 core/views/user.py:203 #: counter/templates/counter/counter_list.jinja:18 #: counter/templates/counter/counter_list.jinja:33 #: counter/templates/counter/counter_list.jinja:54 @@ -2576,78 +2588,78 @@ msgstr "Compte club : " msgid "Communication" msgstr "Communication" -#: core/templates/core/user_tools.jinja:69 +#: core/templates/core/user_tools.jinja:78 msgid "Create weekmail article" msgstr "Rédiger un nouvel article dans le Weekmail" -#: core/templates/core/user_tools.jinja:73 +#: core/templates/core/user_tools.jinja:82 msgid "Moderate news" msgstr "Modérer les nouvelles" -#: core/templates/core/user_tools.jinja:74 +#: core/templates/core/user_tools.jinja:83 msgid "Edit index page" msgstr "Éditer la page d'accueil" -#: core/templates/core/user_tools.jinja:75 +#: core/templates/core/user_tools.jinja:84 msgid "Edit alert message" msgstr "Éditer le message d'alerte" -#: core/templates/core/user_tools.jinja:76 +#: core/templates/core/user_tools.jinja:85 msgid "Edit information message" msgstr "Éditer le message d'informations" -#: core/templates/core/user_tools.jinja:77 +#: core/templates/core/user_tools.jinja:86 msgid "Moderate files" msgstr "Modérer les fichiers" -#: core/templates/core/user_tools.jinja:80 +#: core/templates/core/user_tools.jinja:89 msgid "Moderate pictures" msgstr "Modérer les photos" -#: core/templates/core/user_tools.jinja:93 +#: core/templates/core/user_tools.jinja:102 msgid "Elections" msgstr "Élections" -#: core/templates/core/user_tools.jinja:95 +#: core/templates/core/user_tools.jinja:104 msgid "See available elections" msgstr "Voir les élections disponibles" -#: core/templates/core/user_tools.jinja:97 +#: core/templates/core/user_tools.jinja:106 msgid "Create a new election" msgstr "Créer une nouvelle élection" -#: core/views/files.py:50 +#: core/views/files.py:74 msgid "Add a new folder" msgstr "Ajouter un nouveau dossier" -#: core/views/files.py:63 +#: core/views/files.py:87 #, python-format 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:73 core/views/forms.py:183 core/views/forms.py:187 -#: sas/views.py:53 +#: core/views/files.py:97 core/views/forms.py:207 core/views/forms.py:211 +#: sas/views.py:77 #, python-format msgid "Error uploading file %(file_name)s: %(msg)s" msgstr "Erreur d'envoi du fichier %(file_name)s : %(msg)s" -#: core/views/files.py:124 sas/views.py:260 +#: core/views/files.py:148 sas/views.py:284 msgid "Apply rights recursively" msgstr "Appliquer les droits récursivement" -#: core/views/forms.py:60 core/views/forms.py:63 +#: core/views/forms.py:84 core/views/forms.py:87 msgid "Choose file" msgstr "Choisir un fichier" -#: core/views/forms.py:74 core/views/forms.py:77 +#: core/views/forms.py:98 core/views/forms.py:101 msgid "Choose user" msgstr "Choisir un utilisateur" -#: core/views/forms.py:99 +#: core/views/forms.py:123 msgid "Username, email, or account number" msgstr "Nom d'utilisateur, email, ou numéro de compte AE" -#: core/views/forms.py:141 +#: core/views/forms.py:165 msgid "" "Profile: you need to be visible on the picture, in order to be recognized (e." "g. by the barmen)" @@ -2655,180 +2667,180 @@ msgstr "" "Photo de profil: vous devez être visible sur la photo afin d'être reconnu " "(par exemple par les barmen)" -#: core/views/forms.py:142 +#: core/views/forms.py:166 msgid "Avatar: used on the forum" msgstr "Avatar : utilisé sur le forum" -#: core/views/forms.py:143 +#: core/views/forms.py:167 msgid "Scrub: let other know how your scrub looks like!" msgstr "Blouse : montrez aux autres à quoi ressemble votre blouse !" -#: core/views/forms.py:188 +#: core/views/forms.py:212 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" -#: core/views/forms.py:205 +#: core/views/forms.py:229 msgid "Godfather" msgstr "Parrain" -#: core/views/forms.py:205 +#: core/views/forms.py:229 msgid "Godchild" msgstr "Fillot" -#: core/views/user.py:140 +#: core/views/user.py:164 msgid "Pictures" msgstr "Photos" -#: core/views/user.py:157 +#: core/views/user.py:181 msgid "Preferences" msgstr "Préférences" -#: core/views/user.py:331 +#: core/views/user.py:355 msgid "User already has a profile picture" msgstr "L'utilisateur a déjà une photo de profil" -#: counter/models.py:27 +#: counter/models.py:51 msgid "account id" msgstr "numéro de compte" -#: counter/models.py:31 +#: counter/models.py:55 msgid "customer" msgstr "client" -#: counter/models.py:32 +#: counter/models.py:56 msgid "customers" msgstr "clients" -#: counter/models.py:52 counter/templates/counter/counter_click.jinja:48 +#: counter/models.py:76 counter/templates/counter/counter_click.jinja:48 #: counter/templates/counter/counter_click.jinja:82 msgid "Not enough money" msgstr "Solde insuffisant" -#: counter/models.py:80 counter/models.py:102 +#: counter/models.py:104 counter/models.py:126 msgid "product type" msgstr "type du produit" -#: counter/models.py:105 +#: counter/models.py:129 msgid "purchase price" msgstr "prix d'achat" -#: counter/models.py:106 +#: counter/models.py:130 msgid "selling price" msgstr "prix de vente" -#: counter/models.py:107 +#: counter/models.py:131 msgid "special selling price" msgstr "prix de vente spécial" -#: counter/models.py:108 +#: counter/models.py:132 msgid "icon" msgstr "icône" -#: counter/models.py:110 +#: counter/models.py:134 msgid "limit age" msgstr "âge limite" -#: counter/models.py:111 +#: counter/models.py:135 msgid "tray price" msgstr "prix plateau" -#: counter/models.py:112 +#: counter/models.py:136 msgid "parent product" msgstr "produit parent" -#: counter/models.py:114 +#: counter/models.py:138 msgid "buying groups" msgstr "groupe d'achat" -#: counter/models.py:115 +#: counter/models.py:139 msgid "archived" msgstr "archivé" -#: counter/models.py:118 counter/models.py:502 +#: counter/models.py:142 counter/models.py:526 msgid "product" msgstr "produit" -#: counter/models.py:137 +#: counter/models.py:161 msgid "products" msgstr "produits" -#: counter/models.py:138 +#: counter/models.py:162 msgid "counter type" msgstr "type de comptoir" -#: counter/models.py:140 +#: counter/models.py:164 msgid "Bar" msgstr "Bar" -#: counter/models.py:140 +#: counter/models.py:164 msgid "Office" msgstr "Bureau" -#: counter/models.py:140 counter/templates/counter/counter_list.jinja:11 +#: counter/models.py:164 counter/templates/counter/counter_list.jinja:11 #: eboutic/templates/eboutic/eboutic_main.jinja:4 #: 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:324 sith/settings.py:332 +#: sith/settings.py:349 sith/settings.py:357 msgid "Eboutic" msgstr "Eboutic" -#: counter/models.py:141 +#: counter/models.py:165 msgid "sellers" msgstr "vendeurs" -#: counter/models.py:144 launderette/models.py:123 +#: counter/models.py:168 launderette/models.py:147 msgid "token" msgstr "jeton" -#: counter/models.py:147 counter/models.py:403 counter/models.py:420 -#: launderette/models.py:14 +#: counter/models.py:171 counter/models.py:427 counter/models.py:444 +#: launderette/models.py:38 stock/models.py:14 msgid "counter" msgstr "comptoir" -#: counter/models.py:250 +#: counter/models.py:274 msgid "bank" msgstr "banque" -#: counter/models.py:252 counter/models.py:298 +#: counter/models.py:276 counter/models.py:322 msgid "is validated" msgstr "est validé" -#: counter/models.py:255 +#: counter/models.py:279 msgid "refilling" msgstr "rechargement" -#: counter/models.py:291 eboutic/models.py:103 +#: counter/models.py:315 eboutic/models.py:127 msgid "unit price" msgstr "prix unitaire" -#: counter/models.py:292 counter/models.py:492 eboutic/models.py:104 +#: counter/models.py:316 counter/models.py:516 eboutic/models.py:128 msgid "quantity" msgstr "quantité" -#: counter/models.py:297 +#: counter/models.py:321 msgid "Sith account" msgstr "Compte utilisateur" -#: counter/models.py:297 sith/settings.py:317 sith/settings.py:322 -#: sith/settings.py:344 +#: counter/models.py:321 sith/settings.py:342 sith/settings.py:347 +#: sith/settings.py:369 msgid "Credit card" msgstr "Carte bancaire" -#: counter/models.py:301 +#: counter/models.py:325 msgid "selling" msgstr "vente" -#: counter/models.py:320 +#: counter/models.py:344 msgid "Unknown event" msgstr "Événement inconnu" -#: counter/models.py:321 +#: counter/models.py:345 #, python-format msgid "Eticket bought for the event %(event)s" msgstr "Eticket acheté pour l'événement %(event)s" -#: counter/models.py:323 counter/models.py:335 +#: counter/models.py:347 counter/models.py:359 #, python-format msgid "" "You bought an eticket for the event %(event)s.\n" @@ -2837,51 +2849,51 @@ msgstr "" "Vous avez acheté un Eticket pour l'événement %(event)s.\n" "Vous pouvez le télécharger sur cette page: %(url)s" -#: counter/models.py:406 +#: counter/models.py:430 msgid "last activity date" msgstr "dernière activité" -#: counter/models.py:409 +#: counter/models.py:433 msgid "permanency" msgstr "permanence" -#: counter/models.py:423 +#: counter/models.py:447 msgid "emptied" msgstr "coffre vidée" -#: counter/models.py:426 +#: counter/models.py:450 msgid "cash register summary" msgstr "relevé de caisse" -#: counter/models.py:490 +#: counter/models.py:514 msgid "cash summary" msgstr "relevé" -#: counter/models.py:491 +#: counter/models.py:515 msgid "value" msgstr "valeur" -#: counter/models.py:493 +#: counter/models.py:517 msgid "check" msgstr "chèque" -#: counter/models.py:496 +#: counter/models.py:520 msgid "cash register summary item" msgstr "élément de relevé de caisse" -#: counter/models.py:503 +#: counter/models.py:527 msgid "banner" msgstr "bannière" -#: counter/models.py:504 +#: counter/models.py:528 msgid "event date" msgstr "date de l'événement" -#: counter/models.py:505 +#: counter/models.py:529 msgid "event title" msgstr "titre de l'événement" -#: counter/models.py:506 +#: counter/models.py:530 msgid "secret" msgstr "secret" @@ -2920,6 +2932,10 @@ msgstr "Le comptoir est fermé" msgid "Make a cash register summary" msgstr "Faire un relevé de caisse" +#: counter/templates/counter/cash_register_summary.jinja:22 +msgid "Are you sure ?" +msgstr "Êtes vous sûr?" + #: counter/templates/counter/cash_summary_list.jinja:5 #: counter/templates/counter/cash_summary_list.jinja:10 msgid "Cash register summary list" @@ -2929,7 +2945,7 @@ msgstr "Liste des relevés de caisse" msgid "Theoric sums" msgstr "Sommes théoriques" -#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:757 +#: counter/templates/counter/cash_summary_list.jinja:36 counter/views.py:798 msgid "Emptied" msgstr "Coffre vidé" @@ -3150,141 +3166,149 @@ msgstr "Temps" msgid "Top 100 barman %(counter_name)s (all semesters)" msgstr "Top 100 barman %(counter_name)s (tous les semestres)" -#: counter/views.py:82 +#: counter/views.py:106 msgid "User not found" msgstr "Utilisateur non trouvé" -#: counter/views.py:109 +#: counter/views.py:138 msgid "Cash summary" msgstr "Relevé de caisse" -#: counter/views.py:114 +#: counter/views.py:144 msgid "Last operations" msgstr "Dernières opérations" -#: counter/views.py:148 +#: counter/views.py:150 +msgid "Take items from stock" +msgstr "Prendre des éléments du stock" + +#: counter/views.py:184 msgid "Bad credentials" msgstr "Mauvais identifiants" -#: counter/views.py:150 +#: counter/views.py:186 msgid "User is not barman" msgstr "L'utilisateur n'est pas barman." -#: counter/views.py:154 +#: counter/views.py:190 msgid "Bad location, someone is already logged in somewhere else" msgstr "Mauvais comptoir, quelqu'un est déjà connecté ailleurs" -#: counter/views.py:356 +#: counter/views.py:392 msgid "END" msgstr "FIN" -#: counter/views.py:358 +#: counter/views.py:394 msgid "CAN" msgstr "ANN" -#: counter/views.py:388 +#: counter/views.py:424 msgid "You have not enough money to buy all the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" -#: counter/views.py:484 +#: counter/views.py:520 msgid "Counter administration" msgstr "Administration des comptoirs" -#: counter/views.py:494 +#: counter/views.py:525 +msgid "Stocks" +msgstr "Stocks" + +#: counter/views.py:535 msgid "Products" msgstr "Produits" -#: counter/views.py:499 +#: counter/views.py:540 msgid "Archived products" msgstr "Produits archivés" -#: counter/views.py:504 +#: counter/views.py:545 msgid "Product types" msgstr "Types de produit" -#: counter/views.py:640 +#: counter/views.py:681 msgid "Parent product" msgstr "Produit parent" -#: counter/views.py:641 +#: counter/views.py:682 msgid "Buying groups" msgstr "Groupes d'achat" -#: counter/views.py:736 +#: counter/views.py:777 msgid "10 cents" msgstr "10 centimes" -#: counter/views.py:737 +#: counter/views.py:778 msgid "20 cents" msgstr "20 centimes" -#: counter/views.py:738 +#: counter/views.py:779 msgid "50 cents" msgstr "50 centimes" -#: counter/views.py:739 +#: counter/views.py:780 msgid "1 euro" msgstr "1 €" -#: counter/views.py:740 +#: counter/views.py:781 msgid "2 euros" msgstr "2 €" -#: counter/views.py:741 +#: counter/views.py:782 msgid "5 euros" msgstr "5 €" -#: counter/views.py:742 +#: counter/views.py:783 msgid "10 euros" msgstr "10 €" -#: counter/views.py:743 +#: counter/views.py:784 msgid "20 euros" msgstr "20 €" -#: counter/views.py:744 +#: counter/views.py:785 msgid "50 euros" msgstr "50 €" -#: counter/views.py:745 +#: counter/views.py:786 msgid "100 euros" msgstr "100 €" -#: counter/views.py:746 counter/views.py:748 counter/views.py:750 -#: counter/views.py:752 counter/views.py:754 +#: counter/views.py:787 counter/views.py:789 counter/views.py:791 +#: counter/views.py:793 counter/views.py:795 msgid "Check amount" msgstr "Montant du chèque" -#: counter/views.py:747 counter/views.py:749 counter/views.py:751 -#: counter/views.py:753 counter/views.py:755 +#: counter/views.py:788 counter/views.py:790 counter/views.py:792 +#: counter/views.py:794 counter/views.py:796 msgid "Check quantity" msgstr "Nombre de chèque" -#: counter/views.py:1135 +#: counter/views.py:1176 msgid "people(s)" msgstr "personne(s)" -#: eboutic/models.py:49 +#: eboutic/models.py:73 msgid "validated" msgstr "validé" -#: eboutic/models.py:62 +#: eboutic/models.py:86 msgid "Invoice already validated" msgstr "Facture déjà validée" -#: eboutic/models.py:100 +#: eboutic/models.py:124 msgid "product id" msgstr "ID du produit" -#: eboutic/models.py:101 +#: eboutic/models.py:125 msgid "product name" msgstr "nom du produit" -#: eboutic/models.py:102 +#: eboutic/models.py:126 msgid "product type id" msgstr "id du type du produit" -#: eboutic/models.py:113 +#: eboutic/models.py:137 msgid "basket" msgstr "panier" @@ -3323,7 +3347,7 @@ msgstr "Le paiement a été effectué" msgid "Return to eboutic" msgstr "Retourner à l'eboutic" -#: eboutic/views.py:145 +#: eboutic/views.py:169 msgid "You do not have enough money to buy the basket" msgstr "Vous n'avez pas assez d'argent pour acheter le panier" @@ -3490,47 +3514,47 @@ msgstr "Début des candidatures" msgid "End candidature" msgstr "Fin des candidatures" -#: forum/models.py:27 +#: forum/models.py:51 msgid "is a category" msgstr "est une catégorie" -#: forum/models.py:29 +#: forum/models.py:53 msgid "owner club" msgstr "club propriétaire" -#: forum/models.py:35 +#: forum/models.py:59 msgid "number to choose a specific forum ordering" msgstr "numéro spécifiant l'ordre d'affichage" -#: forum/models.py:79 +#: forum/models.py:103 msgid "You can not make loops in forums" msgstr "Vous ne pouvez pas faire de boucles dans les forums" -#: forum/models.py:169 +#: forum/models.py:193 msgid "message" msgstr "message" -#: forum/models.py:171 +#: forum/models.py:195 msgid "readers" msgstr "lecteurs" -#: forum/models.py:217 +#: forum/models.py:241 msgid "Message edited by" msgstr "Message édité par" -#: forum/models.py:218 +#: forum/models.py:242 msgid "Message deleted by" msgstr "Message supprimé par" -#: forum/models.py:219 +#: forum/models.py:243 msgid "Message undeleted by" msgstr "Message restauré par" -#: forum/models.py:226 +#: forum/models.py:250 msgid "action" msgstr "action" -#: forum/models.py:235 +#: forum/models.py:259 msgid "last read date" msgstr "dernière date de lecture" @@ -3538,7 +3562,8 @@ msgstr "dernière date de lecture" msgid "New forum" msgstr "Nouveau forum" -#: forum/templates/forum/forum.jinja:21 +#: forum/templates/forum/forum.jinja:21 forum/templates/forum/reply.jinja:8 +#: forum/templates/forum/reply.jinja:25 msgid "New topic" msgstr "Nouveau sujet" @@ -3575,7 +3600,7 @@ msgstr "Restaurer" msgid " the " msgstr " le " -#: forum/templates/forum/macros.jinja:137 +#: forum/templates/forum/macros.jinja:138 msgid "Deleted or unreadable message." msgstr "Message supprimé ou non-visible." @@ -3583,52 +3608,52 @@ msgstr "Message supprimé ou non-visible." msgid "View last unread messages" msgstr "Voir les derniers messages non lus" -#: forum/templates/forum/reply.jinja:5 forum/templates/forum/reply.jinja:18 +#: forum/templates/forum/reply.jinja:6 forum/templates/forum/reply.jinja:23 #: forum/templates/forum/topic.jinja:39 forum/templates/forum/topic.jinja:58 msgid "Reply" msgstr "Répondre" -#: forum/views.py:68 +#: forum/views.py:92 msgid "Apply rights and club owner recursively" msgstr "Appliquer les droits et le club propriétaire récursivement" -#: forum/views.py:206 +#: forum/views.py:230 #, python-format msgid "%(author)s said" msgstr "Citation de %(author)s" -#: launderette/models.py:17 +#: launderette/models.py:41 #: launderette/templates/launderette/launderette_book.jinja:5 #: launderette/templates/launderette/launderette_book_choose.jinja:4 #: launderette/templates/launderette/launderette_main.jinja:4 msgid "Launderette" msgstr "Laverie" -#: launderette/models.py:59 launderette/models.py:84 +#: launderette/models.py:83 launderette/models.py:108 msgid "launderette" msgstr "laverie" -#: launderette/models.py:61 +#: launderette/models.py:85 msgid "is working" msgstr "fonctionne" -#: launderette/models.py:64 +#: launderette/models.py:88 msgid "Machine" msgstr "Machine" -#: launderette/models.py:86 +#: launderette/models.py:110 msgid "borrow date" msgstr "date d'emprunt" -#: launderette/models.py:90 +#: launderette/models.py:114 msgid "Token" msgstr "Jeton" -#: launderette/models.py:96 +#: launderette/models.py:120 msgid "Token name can not be blank" msgstr "Le nom du jeton ne peut pas être vide" -#: launderette/models.py:122 +#: launderette/models.py:146 msgid "machine" msgstr "machine" @@ -3653,12 +3678,12 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -#: sith/settings.py:482 +#: sith/settings.py:507 msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -#: sith/settings.py:482 +#: sith/settings.py:507 msgid "Drying" msgstr "Séchage" @@ -3683,29 +3708,29 @@ msgstr "Éditer la page de présentation" msgid "Book launderette slot" msgstr "Réserver un créneau de laverie" -#: launderette/views.py:155 +#: launderette/views.py:179 msgid "Action" msgstr "Action" -#: launderette/views.py:158 +#: launderette/views.py:182 msgid "Tokens, separated by spaces" msgstr "Jetons, séparés par des espaces" -#: launderette/views.py:173 launderette/views.py:187 +#: launderette/views.py:197 launderette/views.py:211 #, python-format msgid "Token %(token_name)s does not exists" msgstr "Le jeton %(token_name)s n'existe pas" -#: launderette/views.py:181 +#: launderette/views.py:205 #, python-format msgid "Token %(token_name)s already exists" msgstr "Un jeton %(token_name)s existe déjà" -#: launderette/views.py:237 +#: launderette/views.py:261 msgid "User has booked no slot" msgstr "L'utilisateur n'a pas réservé de créneau" -#: launderette/views.py:327 +#: launderette/views.py:351 msgid "Token not found" msgstr "Jeton non trouvé" @@ -3717,15 +3742,15 @@ msgstr "Fusionner deux utilisateurs" msgid "Merge" msgstr "Fusion" -#: rootplace/views.py:65 +#: rootplace/views.py:89 msgid "User that will be kept" msgstr "Utilisateur qui sera conservé" -#: rootplace/views.py:66 +#: rootplace/views.py:90 msgid "User that will be deleted" msgstr "Utilisateur qui sera supprimé" -#: sas/models.py:133 +#: sas/models.py:157 msgid "picture" msgstr "photo" @@ -3783,277 +3808,472 @@ msgstr "Demander le retrait" msgid "Asked for removal" msgstr "Retrait demandé" -#: sas/views.py:27 +#: sas/views.py:51 msgid "Add a new album" msgstr "Ajouter un nouvel album" -#: sas/views.py:28 +#: sas/views.py:52 msgid "Upload images" msgstr "Envoyer les images" -#: sas/views.py:40 +#: sas/views.py:64 #, python-format msgid "Error creating album %(album)s: %(msg)s" msgstr "Erreur de création de l'album %(album)s : %(msg)s" -#: sas/views.py:64 +#: sas/views.py:88 msgid "Add user" msgstr "Ajouter une personne" -#: sith/settings.py:180 +#: sith/settings.py:205 msgid "English" msgstr "Anglais" -#: sith/settings.py:181 +#: sith/settings.py:206 msgid "French" msgstr "Français" -#: sith/settings.py:298 +#: sith/settings.py:323 msgid "TC" msgstr "TC" -#: sith/settings.py:299 +#: sith/settings.py:324 msgid "IMSI" msgstr "IMSI" -#: sith/settings.py:300 +#: sith/settings.py:325 msgid "IMAP" msgstr "IMAP" -#: sith/settings.py:301 +#: sith/settings.py:326 msgid "INFO" msgstr "INFO" -#: sith/settings.py:302 +#: sith/settings.py:327 msgid "GI" msgstr "GI" -#: sith/settings.py:303 +#: sith/settings.py:328 msgid "E" msgstr "E" -#: sith/settings.py:304 +#: sith/settings.py:329 msgid "EE" msgstr "EE" -#: sith/settings.py:305 +#: sith/settings.py:330 msgid "GESC" msgstr "GESC" -#: sith/settings.py:306 +#: sith/settings.py:331 msgid "GMC" msgstr "GMC" -#: sith/settings.py:307 +#: sith/settings.py:332 msgid "MC" msgstr "MC" -#: sith/settings.py:308 +#: sith/settings.py:333 msgid "EDIM" msgstr "EDIM" -#: sith/settings.py:309 +#: sith/settings.py:334 msgid "Humanities" msgstr "Humanités" -#: sith/settings.py:310 +#: sith/settings.py:335 msgid "N/A" msgstr "N/A" -#: sith/settings.py:314 sith/settings.py:321 sith/settings.py:342 +#: sith/settings.py:339 sith/settings.py:346 sith/settings.py:367 msgid "Check" msgstr "Chèque" -#: sith/settings.py:315 sith/settings.py:323 sith/settings.py:343 +#: sith/settings.py:340 sith/settings.py:348 sith/settings.py:368 msgid "Cash" msgstr "Espèces" -#: sith/settings.py:316 +#: sith/settings.py:341 msgid "Transfert" msgstr "Virement" -#: sith/settings.py:329 +#: sith/settings.py:354 msgid "Belfort" msgstr "Belfort" -#: sith/settings.py:330 +#: sith/settings.py:355 msgid "Sevenans" msgstr "Sevenans" -#: sith/settings.py:331 +#: sith/settings.py:356 msgid "Montbéliard" msgstr "Montbéliard" -#: sith/settings.py:375 +#: sith/settings.py:400 msgid "One semester" msgstr "Un semestre, 15 €" -#: sith/settings.py:380 +#: sith/settings.py:405 msgid "Two semesters" msgstr "Deux semestres, 28 €" -#: sith/settings.py:385 +#: sith/settings.py:410 msgid "Common core cursus" msgstr "Cursus tronc commun, 45 €" -#: sith/settings.py:390 +#: sith/settings.py:415 msgid "Branch cursus" msgstr "Cursus branche, 45 €" -#: sith/settings.py:395 +#: sith/settings.py:420 msgid "Alternating cursus" msgstr "Cursus alternant, 30 €" -#: sith/settings.py:400 +#: sith/settings.py:425 msgid "Honorary member" msgstr "Membre honoraire, 0 €" -#: sith/settings.py:405 +#: sith/settings.py:430 msgid "Assidu member" msgstr "Membre d'Assidu, 0 €" -#: sith/settings.py:410 +#: sith/settings.py:435 msgid "Amicale/DOCEO member" msgstr "Membre de l'Amicale/DOCEO, 0 €" -#: sith/settings.py:415 +#: sith/settings.py:440 msgid "UT network member" msgstr "Cotisant du réseau UT, 0 €" -#: sith/settings.py:420 +#: sith/settings.py:445 msgid "CROUS member" msgstr "Membres du CROUS, 0 €" -#: sith/settings.py:425 +#: sith/settings.py:450 msgid "Sbarro/ESTA member" msgstr "Membre de Sbarro ou de l'ESTA, 15 €" -#: sith/settings.py:447 +#: sith/settings.py:472 msgid "President" msgstr "Président" -#: sith/settings.py:448 +#: sith/settings.py:473 msgid "Vice-President" msgstr "Vice-Président" -#: sith/settings.py:449 +#: sith/settings.py:474 msgid "Treasurer" msgstr "Trésorier" -#: sith/settings.py:450 +#: sith/settings.py:475 msgid "Communication supervisor" msgstr "Responsable communication" -#: sith/settings.py:451 +#: sith/settings.py:476 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:452 +#: sith/settings.py:477 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:453 +#: sith/settings.py:478 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:454 +#: sith/settings.py:479 msgid "Active member" msgstr "Membre actif" -#: sith/settings.py:455 +#: sith/settings.py:480 msgid "Curious" msgstr "Curieux" -#: sith/settings.py:489 +#: sith/settings.py:514 msgid "A fresh new to be moderated" msgstr "Une nouvelle toute neuve à modérer" -#: sith/settings.py:490 +#: sith/settings.py:515 msgid "New files to be moderated" msgstr "Nouveaux fichiers à modérer" -#: sith/settings.py:491 +#: sith/settings.py:516 msgid "New pictures/album to be moderated in the SAS" msgstr "Nouvelles photos/albums à modérer dans le SAS" -#: sith/settings.py:492 +#: sith/settings.py:517 msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" -#: sith/settings.py:493 +#: sith/settings.py:518 #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s €" -#: sith/settings.py:494 +#: sith/settings.py:519 #, python-format msgid "You just bought %s" msgstr "Vous avez acheté %s" -#: sith/settings.py:495 +#: sith/settings.py:520 msgid "You have a notification" msgstr "Vous avez une notification" -#: sith/settings.py:499 +#: sith/settings.py:524 msgid "Success!" msgstr "Succès !" -#: sith/settings.py:500 +#: sith/settings.py:525 msgid "Fail!" msgstr "Échec !" -#: sith/settings.py:501 +#: sith/settings.py:526 msgid "You successfully posted an article in the Weekmail" msgstr "Article posté avec succès dans le Weekmail" -#: sith/settings.py:502 +#: sith/settings.py:527 msgid "You successfully edited an article in the Weekmail" msgstr "Article édité avec succès dans le Weekmail" -#: sith/settings.py:503 +#: sith/settings.py:528 msgid "You successfully sent the Weekmail" msgstr "Weekmail envoyé avec succès" -#: subscription/models.py:16 +#: stock/models.py:30 +msgid "unit quantity" +msgstr "quantité unitaire" + +#: stock/models.py:30 +msgid "number of element in one box" +msgstr "nombre d'éléments par boîte" + +#: stock/models.py:31 +msgid "effective quantity" +msgstr "quantité effective" + +#: stock/models.py:31 +msgid "number of box" +msgstr "nombre de boîtes" + +#: stock/models.py:32 +msgid "minimal quantity" +msgstr "quantité minimale" + +#: stock/models.py:33 +msgid "" +"if the effective quantity is less than the minimal, item is added to the " +"shopping list" +msgstr "" +"si la quantité effective est en dessous du minima, l'item est ajouté àla " +"liste de courses" + +#: stock/models.py:53 +msgid "todo" +msgstr "à faire" + +#: stock/models.py:70 +msgid "shopping lists" +msgstr "listes de courses" + +#: stock/models.py:75 +msgid "quantity to buy" +msgstr "quantité à acheter" + +#: stock/models.py:75 +msgid "quantity to buy during the next shopping session" +msgstr "quantité à acheter pendant les prochaines courses" + +#: stock/models.py:76 +msgid "quantity bought" +msgstr "quantité achetée" + +#: stock/models.py:76 +msgid "quantity bought during the last shopping session" +msgstr "quantité achetée pendant les dernières courses" + +#: stock/templates/stock/shopping_list_items.jinja:4 +#, python-format +msgid "%(shoppinglist)s's items" +msgstr "éléments de %(shoppinglist)s" + +#: stock/templates/stock/shopping_list_items.jinja:21 +msgid "Quantity asked" +msgstr "Quantité demandée" + +#: stock/templates/stock/shopping_list_items.jinja:22 +msgid "Quantity bought" +msgstr "Quantité achetée" + +#: stock/templates/stock/shopping_list_items.jinja:42 stock/views.py:181 +msgid "Comments" +msgstr "Commentaires" + +#: stock/templates/stock/shopping_list_quantity.jinja:4 +#: stock/templates/stock/shopping_list_quantity.jinja:8 +#, python-format +msgid "%(s)s's quantity to buy" +msgstr "quantité à acheter de %(s)s" + +#: stock/templates/stock/shopping_list_quantity.jinja:13 +#: stock/templates/stock/stock_shopping_list.jinja:9 +msgid "Create shopping list" +msgstr "Créer une liste de courses" + +#: stock/templates/stock/stock_item_list.jinja:10 +msgid "New item" +msgstr "Nouvel élément" + +#: stock/templates/stock/stock_item_list.jinja:19 +#: stock/templates/stock/stock_item_list.jinja:26 +msgid "left" +msgstr "restant" + +#: stock/templates/stock/stock_item_list.jinja:23 +msgid "Others" +msgstr "Autres" + +#: stock/templates/stock/stock_item_list.jinja:30 +msgid "There is no items in this stock." +msgstr "Il n'y a pas d'élements dans ce stock." + +#: stock/templates/stock/stock_list.jinja:4 +#: stock/templates/stock/stock_list.jinja:9 +msgid "Stock list" +msgstr "Liste des stocks" + +#: stock/templates/stock/stock_list.jinja:22 +msgid "There is no stocks in this website." +msgstr "Il n'y a pas de stocks sur ce site web." + +#: stock/templates/stock/stock_shopping_list.jinja:11 +#, python-format +msgid "Shopping lists history for %(s)s" +msgstr "Historique des listes de course pour %(s)s" + +#: stock/templates/stock/stock_shopping_list.jinja:14 +msgid "Information :" +msgstr "Information : " + +#: stock/templates/stock/stock_shopping_list.jinja:16 +msgid "" +"Use the \"update stock\" action when you get back from shopping to add the " +"effective quantity bought for each shopping list item." +msgstr "" +"Utilisez la fonction \"mettre à jour le stock\" quand vous revenez de " +"courses pour ajouter la quantité effectivement achetée pour chaque élément " +"de la liste" + +#: stock/templates/stock/stock_shopping_list.jinja:18 +msgid "" +"For example, 3 Cheeseburger (boxes) are aksing in the list, but there were " +"only 2 so, 2 have to be added in the stock quantity." +msgstr "" +"Par exemple, 3 Cheeseburger (boîtes) sont demandés dans la liste, mais il " +"n'y en avait que 2, donc il faut mettre 2 dans la quantité en stock." + +#: stock/templates/stock/stock_shopping_list.jinja:21 +msgid "To do" +msgstr "À faire" + +#: stock/templates/stock/stock_shopping_list.jinja:27 +#: stock/templates/stock/stock_shopping_list.jinja:56 +msgid "Number of items" +msgstr "Nombre d'éléments" + +#: stock/templates/stock/stock_shopping_list.jinja:37 +msgid "Update stock" +msgstr "Mettre à jour le stock" + +#: stock/templates/stock/stock_shopping_list.jinja:40 +msgid "Mark as done" +msgstr "Marquer comme fait" + +#: stock/templates/stock/stock_shopping_list.jinja:66 +msgid "Mark as to do" +msgstr "Marquer comme à faire" + +#: stock/templates/stock/stock_take_items.jinja:5 +#: stock/templates/stock/stock_take_items.jinja:9 +#, python-format +msgid "Take items from %(s)s" +msgstr "Prendre des éléments de %(s)s" + +#: stock/templates/stock/stock_take_items.jinja:14 +msgid "Take items" +msgstr "Prendre les éléments" + +#: stock/templates/stock/update_after_shopping.jinja:4 +#: stock/templates/stock/update_after_shopping.jinja:8 +#, python-format +msgid "Update %(s)s's quantity after shopping" +msgstr "Mettre à jour les quantités de %(s)s après les courses" + +#: stock/templates/stock/update_after_shopping.jinja:13 +msgid "Update stock quantities" +msgstr "Mettre à jour les quantités en stock" + +#: stock/views.py:173 +msgid "Shopping list name" +msgstr "Nom de la liste de courses" + +#: stock/views.py:179 +msgid " left" +msgstr " restant" + +#: stock/views.py:180 +msgid "" +"Add here, items to buy that are not reference as a stock item (example : " +"sponge, knife, mugs ...)" +msgstr "" +"Ajouter ici les éléments non référencé comme élément de stock (example : " +"éponge, couteau, mugs ...)" + +#: stock/views.py:309 +msgid " asked" +msgstr " demandé" + +#: stock/views.py:376 +#, python-format +msgid "%(effective_quantity)s left" +msgstr "%(effective_quantity)s restant" + +#: subscription/models.py:40 msgid "Bad subscription type" msgstr "Mauvais type de cotisation" -#: subscription/models.py:20 +#: subscription/models.py:44 msgid "Bad payment method" msgstr "Mauvais type de paiement" -#: subscription/models.py:24 +#: subscription/models.py:48 msgid "subscription type" msgstr "type d'inscription" -#: subscription/models.py:27 +#: subscription/models.py:51 msgid "subscription start" msgstr "début de la cotisation" -#: subscription/models.py:28 +#: subscription/models.py:52 msgid "subscription end" msgstr "fin de la cotisation" -#: subscription/models.py:31 +#: subscription/models.py:55 msgid "location" msgstr "lieu" -#: subscription/models.py:40 +#: subscription/models.py:64 msgid "You can not subscribe many time for the same period" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" -#: subscription/models.py:44 +#: subscription/models.py:68 msgid "Subscription error" msgstr "Erreur de cotisation" -#: subscription/views.py:50 +#: subscription/views.py:74 msgid "A user with that email address already exists" msgstr "Un utilisateur avec cette adresse email existe déjà" -#: subscription/views.py:66 +#: subscription/views.py:90 msgid "You must either choose an existing user or create a new one properly" msgstr "" "Vous devez soit choisir un utilisateur existant, soit en créer un proprement" - -#~ msgid "CB refillilngs" -#~ msgstr "Rechargements Carte Bancaire" diff --git a/sith/settings.py b/sith/settings.py index 5ebf4b0d..eccb36bc 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -85,6 +85,7 @@ INSTALLED_APPS = ( 'com', 'election', 'forum', + 'stock', ) MIDDLEWARE_CLASSES = ( diff --git a/stock/views.py b/stock/views.py index 5d242c25..64984661 100644 --- a/stock/views.py +++ b/stock/views.py @@ -373,7 +373,7 @@ class StockTakeItemsBaseFormView(CounterTabsMixin, CanEditMixin, DetailView, Bas for i in self.stock.items.filter(type=t).order_by('name').all(): field_name = "item-%s" % (str(i.id)) fields[field_name] = forms.IntegerField(required=False, label=str(i), initial=0, min_value=0, max_value=i.effective_quantity, - help_text=_("(%(effective_quantity)s left" % {"effective_quantity": str(i.effective_quantity)})) + help_text=_("%(effective_quantity)s left" % {"effective_quantity": str(i.effective_quantity)})) kwargs[field_name] = i.effective_quantity kwargs['stock_id'] = self.stock.id kwargs['counter_id'] = self.stock.counter.id From 116aa6b8b5f998daa481130c4d9b42b5baeb3ee0 Mon Sep 17 00:00:00 2001 From: Skia Date: Tue, 25 Apr 2017 09:45:13 +0200 Subject: [PATCH 25/27] Update stock URLs --- stock/urls.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/stock/urls.py b/stock/urls.py index cf5c4677..cbc96eab 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -10,21 +10,21 @@ urlpatterns = [ # StockItem urls url(r'^(?P[0-9]+)$', StockItemList.as_view(), name='items_list'), - url(r'^(?P[0-9]+)/stockItem/newItem$', StockItemCreateView.as_view(), name='new_item'), - url(r'^stockItem/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), - url(r'^(?P[0-9]+)/stockItem/takeItems$', StockTakeItemsBaseFormView.as_view(), name='take_items'), + url(r'^(?P[0-9]+)/stock_item/new_item$', StockItemCreateView.as_view(), name='new_item'), + url(r'^stock_item/(?P[0-9]+)/edit$', StockItemEditView.as_view(), name='edit_item'), + url(r'^(?P[0-9]+)/stock_item/take_items$', StockTakeItemsBaseFormView.as_view(), name='take_items'), # ShoppingList urls - url(r'^(?P[0-9]+)/shoppingList/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), - url(r'^(?P[0-9]+)/shoppingList/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), + url(r'^(?P[0-9]+)/shopping_list/list$', StockShoppingListView.as_view(), name='shoppinglist_list'), + url(r'^(?P[0-9]+)/shopping_list/create$', StockItemQuantityBaseFormView.as_view(), name='shoppinglist_create'), + url(r'^(?P[0-9]+)/shopping_list/(?P[0-9]+)/items$', StockShoppingListItemListView.as_view(), name='shoppinglist_items'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), + url(r'^(?P[0-9]+)/shopping_list/(?P[0-9]+)/delete$', StockShoppingListDeleteView.as_view(), name='shoppinglist_delete'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setDone$', StockShopppingListSetDone.as_view(), + url(r'^(?P[0-9]+)/shopping_list/(?P[0-9]+)/set_done$', StockShopppingListSetDone.as_view(), name='shoppinglist_set_done'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/setTodo$', StockShopppingListSetTodo.as_view(), + url(r'^(?P[0-9]+)/shopping_list/(?P[0-9]+)/set_todo$', StockShopppingListSetTodo.as_view(), name='shoppinglist_set_todo'), - url(r'^(?P[0-9]+)/shoppingList/(?P[0-9]+)/updateStock$', StockUpdateAfterShopppingBaseFormView.as_view(), + url(r'^(?P[0-9]+)/shopping_list/(?P[0-9]+)/update_stock$', StockUpdateAfterShopppingBaseFormView.as_view(), name='update_after_shopping'), ] From e26ad857290f789e5795e01c843fbaee0ed63217 Mon Sep 17 00:00:00 2001 From: Skia Date: Tue, 25 Apr 2017 09:49:05 +0200 Subject: [PATCH 26/27] Reset stock migrations --- stock/migrations/0001_initial.py | 41 +++++++++++----- stock/migrations/0002_auto_20170105_2017.py | 29 ----------- stock/migrations/0003_auto_20170105_2138.py | 32 ------------- stock/migrations/0004_auto_20170105_2145.py | 32 ------------- stock/migrations/0005_auto_20170107_0857.py | 46 ------------------ stock/migrations/0006_auto_20170107_0910.py | 48 ------------------- .../migrations/0007_shoppinglistitem_type.py | 21 -------- stock/migrations/0008_auto_20170107_1012.py | 19 -------- 8 files changed, 29 insertions(+), 239 deletions(-) delete mode 100644 stock/migrations/0002_auto_20170105_2017.py delete mode 100644 stock/migrations/0003_auto_20170105_2138.py delete mode 100644 stock/migrations/0004_auto_20170105_2145.py delete mode 100644 stock/migrations/0005_auto_20170107_0857.py delete mode 100644 stock/migrations/0006_auto_20170107_0910.py delete mode 100644 stock/migrations/0007_shoppinglistitem_type.py delete mode 100644 stock/migrations/0008_auto_20170107_1012.py diff --git a/stock/migrations/0001_initial.py b/stock/migrations/0001_initial.py index f9771e9a..9aa4170e 100644 --- a/stock/migrations/0001_initial.py +++ b/stock/migrations/0001_initial.py @@ -15,39 +15,56 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ShoppingList', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), ('date', models.DateTimeField(verbose_name='date')), ('name', models.CharField(max_length=64, verbose_name='name')), ('todo', models.BooleanField(verbose_name='todo')), + ('comment', models.TextField(verbose_name='comment', blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='ShoppingListItem', + fields=[ + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), + ('name', models.CharField(max_length=64, verbose_name='name')), + ('tobuy_quantity', models.IntegerField(verbose_name='quantity to buy', help_text='quantity to buy during the next shopping session', default=6)), + ('bought_quantity', models.IntegerField(verbose_name='quantity bought', help_text='quantity bought during the last shopping session', default=0)), + ('shopping_lists', models.ManyToManyField(verbose_name='shopping lists', related_name='shopping_items_to_buy', to='stock.ShoppingList')), ], ), migrations.CreateModel( name='Stock', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), ('name', models.CharField(max_length=64, verbose_name='name')), - ('counter', models.OneToOneField(to='counter.Counter', verbose_name='counter', related_name='stock')), + ('counter', models.OneToOneField(verbose_name='counter', related_name='stock', to='counter.Counter')), ], ), migrations.CreateModel( name='StockItem', fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), ('name', models.CharField(max_length=64, verbose_name='name')), - ('unit_quantity', models.IntegerField(default=0, help_text='number of element in one box', verbose_name='unit quantity')), - ('effective_quantity', models.IntegerField(default=0, help_text='number of box', verbose_name='effective quantity')), - ('stock_owner', models.ForeignKey(to='stock.Stock', related_name='items')), - ('type', models.ForeignKey(to='counter.ProductType', on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='type', blank=True, related_name='stock_items')), + ('unit_quantity', models.IntegerField(verbose_name='unit quantity', help_text='number of element in one box', default=0)), + ('effective_quantity', models.IntegerField(verbose_name='effective quantity', help_text='number of box', default=0)), + ('minimal_quantity', models.IntegerField(verbose_name='minimal quantity', help_text='if the effective quantity is less than the minimal, item is added to the shopping list', default=1)), + ('stock_owner', models.ForeignKey(related_name='items', to='stock.Stock')), + ('type', models.ForeignKey(blank=True, null=True, verbose_name='type', related_name='stock_items', on_delete=django.db.models.deletion.SET_NULL, to='counter.ProductType')), ], ), migrations.AddField( - model_name='shoppinglist', - name='items_to_buy', - field=models.ManyToManyField(to='stock.StockItem', related_name='shopping_lists', verbose_name='items to buy'), + model_name='shoppinglistitem', + name='stockitem_owner', + field=models.ForeignKey(null=True, related_name='shopping_item', to='stock.StockItem'), + ), + migrations.AddField( + model_name='shoppinglistitem', + name='type', + field=models.ForeignKey(blank=True, null=True, verbose_name='type', related_name='shoppinglist_items', on_delete=django.db.models.deletion.SET_NULL, to='counter.ProductType'), ), migrations.AddField( model_name='shoppinglist', name='stock_owner', - field=models.ForeignKey(to='stock.Stock', null=True, related_name='shopping_lists'), + field=models.ForeignKey(null=True, related_name='shopping_lists', to='stock.Stock'), ), ] diff --git a/stock/migrations/0002_auto_20170105_2017.py b/stock/migrations/0002_auto_20170105_2017.py deleted file mode 100644 index 326ef815..00000000 --- a/stock/migrations/0002_auto_20170105_2017.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='stockitem', - name='bought_quantity', - field=models.IntegerField(help_text='quantity bought during the last shopping session', default=6, verbose_name='quantity bought'), - ), - migrations.AddField( - model_name='stockitem', - name='minimal_quantity', - field=models.IntegerField(help_text='if the effective quantity is less than the minimal, item is added to the shopping list', default=1, verbose_name='minimal quantity'), - ), - migrations.AddField( - model_name='stockitem', - name='tobuy_quantity', - field=models.IntegerField(help_text='quantity to buy during the next shopping session', default=6, verbose_name='quantity to buy'), - ), - ] diff --git a/stock/migrations/0003_auto_20170105_2138.py b/stock/migrations/0003_auto_20170105_2138.py deleted file mode 100644 index a05ff305..00000000 --- a/stock/migrations/0003_auto_20170105_2138.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0002_auto_20170105_2017'), - ] - - operations = [ - migrations.RemoveField( - model_name='stockitem', - name='bought_quantity', - ), - migrations.RemoveField( - model_name='stockitem', - name='tobuy_quantity', - ), - migrations.AddField( - model_name='shoppinglist', - name='bought_quantity', - field=models.IntegerField(help_text='quantity bought during the last shopping session', default=6, verbose_name='quantity bought'), - ), - migrations.AddField( - model_name='shoppinglist', - name='tobuy_quantity', - field=models.IntegerField(help_text='quantity to buy during the next shopping session', default=6, verbose_name='quantity to buy'), - ), - ] diff --git a/stock/migrations/0004_auto_20170105_2145.py b/stock/migrations/0004_auto_20170105_2145.py deleted file mode 100644 index e8acdaea..00000000 --- a/stock/migrations/0004_auto_20170105_2145.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0003_auto_20170105_2138'), - ] - - operations = [ - migrations.RemoveField( - model_name='shoppinglist', - name='bought_quantity', - ), - migrations.RemoveField( - model_name='shoppinglist', - name='tobuy_quantity', - ), - migrations.AddField( - model_name='stockitem', - name='bought_quantity', - field=models.IntegerField(help_text='quantity bought during the last shopping session', verbose_name='quantity bought', default=6), - ), - migrations.AddField( - model_name='stockitem', - name='tobuy_quantity', - field=models.IntegerField(help_text='quantity to buy during the next shopping session', verbose_name='quantity to buy', default=6), - ), - ] diff --git a/stock/migrations/0005_auto_20170107_0857.py b/stock/migrations/0005_auto_20170107_0857.py deleted file mode 100644 index 4363bb47..00000000 --- a/stock/migrations/0005_auto_20170107_0857.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0004_auto_20170105_2145'), - ] - - operations = [ - migrations.CreateModel( - name='ShoppingListItems', - fields=[ - ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)), - ('name', models.CharField(max_length=64, verbose_name='name')), - ('tobuy_quantity', models.IntegerField(verbose_name='quantity to buy', default=6, help_text='quantity to buy during the next shopping session')), - ('bought_quantity', models.IntegerField(verbose_name='quantity bought', default=6, help_text='quantity bought during the last shopping session')), - ], - ), - migrations.RemoveField( - model_name='stockitem', - name='bought_quantity', - ), - migrations.RemoveField( - model_name='stockitem', - name='tobuy_quantity', - ), - migrations.AddField( - model_name='shoppinglist', - name='comment', - field=models.TextField(null=True, verbose_name='comment', blank=True), - ), - migrations.AddField( - model_name='shoppinglistitems', - name='shoppinglist_owner', - field=models.ForeignKey(related_name='item_quantity', to='stock.ShoppingList'), - ), - migrations.AddField( - model_name='shoppinglistitems', - name='stockitem_owner', - field=models.ForeignKey(related_name='item', null=True, to='stock.StockItem'), - ), - ] diff --git a/stock/migrations/0006_auto_20170107_0910.py b/stock/migrations/0006_auto_20170107_0910.py deleted file mode 100644 index c58cbdca..00000000 --- a/stock/migrations/0006_auto_20170107_0910.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0005_auto_20170107_0857'), - ] - - operations = [ - migrations.CreateModel( - name='ShoppingListItem', - fields=[ - ('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')), - ('name', models.CharField(max_length=64, verbose_name='name')), - ('tobuy_quantity', models.IntegerField(default=6, help_text='quantity to buy during the next shopping session', verbose_name='quantity to buy')), - ('bought_quantity', models.IntegerField(default=0, help_text='quantity bought during the last shopping session', verbose_name='quantity bought')), - ], - ), - migrations.RemoveField( - model_name='shoppinglistitems', - name='shoppinglist_owner', - ), - migrations.RemoveField( - model_name='shoppinglistitems', - name='stockitem_owner', - ), - migrations.RemoveField( - model_name='shoppinglist', - name='items_to_buy', - ), - migrations.DeleteModel( - name='ShoppingListItems', - ), - migrations.AddField( - model_name='shoppinglistitem', - name='shopping_lists', - field=models.ManyToManyField(related_name='shopping_items_to_buy', to='stock.ShoppingList', verbose_name='shopping lists'), - ), - migrations.AddField( - model_name='shoppinglistitem', - name='stockitem_owner', - field=models.ForeignKey(related_name='item', null=True, to='stock.StockItem'), - ), - ] diff --git a/stock/migrations/0007_shoppinglistitem_type.py b/stock/migrations/0007_shoppinglistitem_type.py deleted file mode 100644 index 4cf4c036..00000000 --- a/stock/migrations/0007_shoppinglistitem_type.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('counter', '0011_auto_20161004_2039'), - ('stock', '0006_auto_20170107_0910'), - ] - - operations = [ - migrations.AddField( - model_name='shoppinglistitem', - name='type', - field=models.ForeignKey(null=True, verbose_name='type', on_delete=django.db.models.deletion.SET_NULL, to='counter.ProductType', blank=True, related_name='shoppinglist_items'), - ), - ] diff --git a/stock/migrations/0008_auto_20170107_1012.py b/stock/migrations/0008_auto_20170107_1012.py deleted file mode 100644 index 2896537a..00000000 --- a/stock/migrations/0008_auto_20170107_1012.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0007_shoppinglistitem_type'), - ] - - operations = [ - migrations.AlterField( - model_name='shoppinglistitem', - name='stockitem_owner', - field=models.ForeignKey(related_name='shopping_item', to='stock.StockItem', null=True), - ), - ] From a99cb3e0db9f37a61d34f67c5c346f098f5c59a6 Mon Sep 17 00:00:00 2001 From: Skia Date: Tue, 25 Apr 2017 16:17:04 +0200 Subject: [PATCH 27/27] Add header to stock files --- stock/__init__.py | 25 +++++++++++++++++++++++++ stock/admin.py | 25 +++++++++++++++++++++++++ stock/models.py | 25 +++++++++++++++++++++++++ stock/tests.py | 25 +++++++++++++++++++++++++ stock/urls.py | 25 +++++++++++++++++++++++++ stock/views.py | 25 +++++++++++++++++++++++++ 6 files changed, 150 insertions(+) diff --git a/stock/__init__.py b/stock/__init__.py index e69de29b..6871e12c 100644 --- a/stock/__init__.py +++ b/stock/__init__.py @@ -0,0 +1,25 @@ +# -*- coding:utf-8 -* +# +# Copyright 2016,2017 +# - Guillaume "Lo-J" Renaud +# - Skia +# +# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, +# http://ae.utbm.fr. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License a published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA. +# +# + diff --git a/stock/admin.py b/stock/admin.py index 63054a75..6f55f86e 100644 --- a/stock/admin.py +++ b/stock/admin.py @@ -1,3 +1,28 @@ +# -*- coding:utf-8 -* +# +# Copyright 2016,2017 +# - Guillaume "Lo-J" Renaud +# - Skia +# +# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, +# http://ae.utbm.fr. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License a published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA. +# +# + from django.contrib import admin from stock.models import Stock, StockItem, ShoppingList, ShoppingListItem diff --git a/stock/models.py b/stock/models.py index edded142..b2e0c161 100644 --- a/stock/models.py +++ b/stock/models.py @@ -1,3 +1,28 @@ +# -*- coding:utf-8 -* +# +# Copyright 2016,2017 +# - Guillaume "Lo-J" Renaud +# - Skia +# +# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, +# http://ae.utbm.fr. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License a published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA. +# +# + from django.db import models from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse diff --git a/stock/tests.py b/stock/tests.py index 7ce503c2..ad602a5c 100644 --- a/stock/tests.py +++ b/stock/tests.py @@ -1,3 +1,28 @@ +# -*- coding:utf-8 -* +# +# Copyright 2016,2017 +# - Guillaume "Lo-J" Renaud +# - Skia +# +# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, +# http://ae.utbm.fr. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License a published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA. +# +# + from django.test import TestCase # Create your tests here. diff --git a/stock/urls.py b/stock/urls.py index cbc96eab..ea0ffb3c 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -1,3 +1,28 @@ +# -*- coding:utf-8 -* +# +# Copyright 2016,2017 +# - Guillaume "Lo-J" Renaud +# - Skia +# +# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, +# http://ae.utbm.fr. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License a published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA. +# +# + from django.conf.urls import include, url from stock.views import * diff --git a/stock/views.py b/stock/views.py index 64984661..5ce349d3 100644 --- a/stock/views.py +++ b/stock/views.py @@ -1,3 +1,28 @@ +# -*- coding:utf-8 -* +# +# Copyright 2016,2017 +# - Guillaume "Lo-J" Renaud +# - Skia +# +# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, +# http://ae.utbm.fr. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License a published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA. +# +# + from collections import OrderedDict from datetime import datetime, timedelta