1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-04-25 16:12:37 +00:00

permission, fixture, translation (fr), bug fixes

This commit is contained in:
quark 2025-04-24 20:50:32 +02:00
parent 6d6583bfe6
commit a2b42c5329
4 changed files with 585 additions and 698 deletions

View File

@ -0,0 +1,100 @@
[
{
"model": "food.allergen",
"pk": 1,
"fields": {
"name": "Lait"
}
},
{
"model": "food.allergen",
"pk": 2,
"fields": {
"name": "Oeufs"
}
},
{
"model": "food.allergen",
"pk": 3,
"fields": {
"name": "Gluten"
}
},
{
"model": "food.allergen",
"pk": 4,
"fields": {
"name": "Fruits à coques"
}
},
{
"model": "food.allergen",
"pk": 5,
"fields": {
"name": "Arachides"
}
},
{
"model": "food.allergen",
"pk": 6,
"fields": {
"name": "Sésame"
}
},
{
"model": "food.allergen",
"pk": 7,
"fields": {
"name": "Soja"
}
},
{
"model": "food.allergen",
"pk": 8,
"fields": {
"name": "Céléri"
}
},
{
"model": "food.allergen",
"pk": 9,
"fields": {
"name": "Lupin"
}
},
{
"model": "food.allergen",
"pk": 10,
"fields": {
"name": "Moutarde"
}
},
{
"model": "food.allergen",
"pk": 11,
"fields": {
"name": "Sulfites"
}
},
{
"model": "food.allergen",
"pk": 12,
"fields": {
"name": "Crustacés"
}
},
{
"model": "food.allergen",
"pk": 13,
"fields": {
"name": "Mollusques"
}
},
{
"model": "food.allergen",
"pk": 14,
"fields": {
"name": "Poissons"
}
}
]

View File

@ -73,7 +73,13 @@ class FoodListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin, Li
PermissionBackend.filter_queryset(self.request, Food, 'view'))
# table served
served_table = self.get_queryset().order_by('-pk').filter(
end_of_life='', is_ready=True)
end_of_life='', is_ready=True).filter(
Q(polymorphic_ctype__model='basicfood',
basicfood__date_type='DLC',
expiry_date__lte=timezone.now(),)
| Q(polymorphic_ctype__model='transformedfood',
expiry_date__lte=timezone.now(),
))
# tables club
bureau_role_pk = 4
clubs = Club.objects.filter(membership__in=Membership.objects.filter(
@ -354,7 +360,7 @@ class FoodDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView):
value) for field, value in fields.items()]
context["meals"] = self.object.transformed_ingredient_inv.all()
context["update"] = PermissionBackend.check_perm(self.request, "food.change_food")
context["add_ingredient"] = self.object.end_of_life = '' and PermissionBackend.check_perm(self.request, "food.change_transformedfood")
context["add_ingredient"] = (self.object.end_of_life == '' and PermissionBackend.check_perm(self.request, "food.change_transformedfood"))
return context
def get(self, *args, **kwargs):

View File

@ -3307,436 +3307,184 @@
}
},
{
"model": "permission.permission",
"pk": 211,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir tout les plats"
}
"model": "permission.permission",
"pk": 211,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{}",
"type": "view",
"mask": 2,
"permanent": false,
"description": "Voir n'importe quel QR-code"
}
},
{
"model": "permission.permission",
"pk": 212,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"owner\": [\"club\"]}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir tout les plats de son club"
}
"model": "permission.permission",
"pk": 212,
"fields": {
"model": [
"food",
"allergen"
],
"query": "{}",
"type": "view",
"mask": 1,
"permanent": false,
"description": "Voir n'importe quel allergène"
}
},
{
"model": "permission.permission",
"pk": 213,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"is_ready\": true}",
"type": "view",
"mask": 1,
"field": "",
"permanent": false,
"description": "Voir les plats préparés actifs servis"
}
"model": "permission.permission",
"pk": 213,
"fields": {
"model": [
"food",
"food"
],
"query": "{}",
"type": "view",
"mask": 2,
"permanent": false,
"description": "Voir n'importe quelle bouffe"
}
},
{
"model": "permission.permission",
"pk": 214,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{}",
"type": "add",
"mask": 3,
"field": "",
"permanent": false,
"description": "Initialiser un QR code de traçabilité"
}
"model": "permission.permission",
"pk": 214,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{}",
"type": "add",
"mask": 2,
"permanent": false,
"description": "Ajouter n'importe quel QR-code"
}
},
{
"model": "permission.permission",
"pk": 215,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{\"owner\": [\"club\"]}",
"type": "add",
"mask": 3,
"field": "",
"permanent": false,
"description": "Créer un nouvel ingrédient pour son club"
}
"model": "permission.permission",
"pk": 215,
"fields": {
"model": [
"food",
"food"
],
"query": "{}",
"type": "add",
"mask": 2,
"permanent": false,
"description": "Ajouter n'importe quelle bouffe"
}
},
{
"model": "permission.permission",
"pk": 216,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{}",
"type": "add",
"mask": 3,
"field": "",
"permanent": false,
"description": "Créer un nouvel ingrédient"
}
"model": "permission.permission",
"pk": 216,
"fields": {
"model": [
"food",
"food"
],
"query": "{}",
"type": "change",
"mask": 2,
"permanent": false,
"description": "Modifier n'importe quelle bouffe"
}
},
{
"model": "permission.permission",
"pk": 217,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir toute la bouffe"
}
"model": "permission.permission",
"pk": 217,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{\"food_container__owner\": [\"club\"]}",
"type": "view",
"mask": 2,
"permanent": false,
"description": "Voir un QR-code lié à son club"
}
},
{
"model": "permission.permission",
"pk": 218,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{\"is_ready\": true}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir toute la bouffe active"
}
"model": "permission.permission",
"pk": 218,
"fields": {
"model": [
"food",
"food"
],
"query": "{\"owner\": [\"club\"]}",
"type": "view",
"mask": 2,
"permanent": false,
"description": "Voir la bouffe de son club"
}
},
{
"model": "permission.permission",
"pk": 219,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{\"is_ready\": true, \"owner\": [\"club\"]}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir la bouffe active de son club"
}
"model": "permission.permission",
"pk": 219,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{\"food_container__owner\": [\"club\"]}",
"type": "add",
"mask": 2,
"permanent": false,
"description": "Ajouter un QR-code pour son club"
}
},
{
"model": "permission.permission",
"pk": 220,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{}",
"type": "change",
"mask": 3,
"field": "",
"permanent": false,
"description": "Modifier de la bouffe"
}
"model": "permission.permission",
"pk": 220,
"fields": {
"model": [
"food",
"food"
],
"query": "{\"owner\": [\"club\"]}",
"type": "add",
"mask": 2,
"permanent": false,
"description": "Ajouter de la bouffe appartenant à son club"
}
},
{
"model": "permission.permission",
"pk": 221,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{\"is_ready\": true}",
"type": "change",
"mask": 3,
"field": "allergens",
"permanent": false,
"description": "Modifier les allergènes de la bouffe existante"
}
"model": "permission.permission",
"pk": 221,
"fields": {
"model": [
"food",
"food"
],
"query": "{\"owner\": [\"club\"]}",
"type": "change",
"mask": 2,
"permanent": false,
"description": "Modifier la bouffe appartenant à son club"
}
},
{
"model": "permission.permission",
"pk": 222,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{\"is_ready\": true, \"owner\": [\"club\"]}",
"type": "change",
"mask": 3,
"field": "allergens",
"permanent": false,
"description": "Modifier les allergènes de la bouffe appartenant à son club"
}
},
{
"model": "permission.permission",
"pk": 223,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{}",
"type": "add",
"mask": 3,
"field": "",
"permanent": false,
"description": "Créer un plat"
}
},
{
"model": "permission.permission",
"pk": 224,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"owner\": [\"club\"]}",
"type": "add",
"mask": 3,
"field": "",
"permanent": false,
"description": "Créer un plat pour son club"
}
},
{
"model": "permission.permission",
"pk": 225,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{}",
"type": "change",
"mask": 3,
"field": "",
"permanent": false,
"description": "Modifier tout les plats"
}
},
{
"model": "permission.permission",
"pk": 226,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"is_ready\": true}",
"type": "change",
"mask": 3,
"field": "end_of_life",
"permanent": false,
"description": "Indiquer si un plat a été mangé"
}
},
{
"model": "permission.permission",
"pk": 227,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"is_ready\": true, \"owner\": [\"club\"]}",
"type": "change",
"mask": 3,
"field": "is_ready",
"permanent": false,
"description": "Indiquer si un plat de son club est prêt"
}
},
{
"model": "permission.permission",
"pk": 228,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"is_ready\": true}",
"type": "change",
"mask": 3,
"field": "is_ready",
"permanent": false,
"description": "Archiver un plat"
}
},
{
"model": "permission.permission",
"pk": 229,
"fields": {
"model": [
"food",
"basicfood"
],
"query": "{\"is_ready\": true}",
"type": "change",
"mask": 3,
"field": "is_ready",
"permanent": false,
"description": "Archiver de la bouffe"
}
},
{
"model": "permission.permission",
"pk": 231,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir tous les QR codes"
}
},
{
"model": "permission.permission",
"pk": 232,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{\"food_container__is_ready\": true}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir tous les QR codes actifs"
}
},
{
"model": "permission.permission",
"pk": 233,
"fields": {
"model": [
"food",
"qrcode"
],
"query": "{\"food_container__owner\": [\"club\"], \"food_container__is_ready\": true}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir tous les QR codes actifs de son club"
}
},
{
"model": "permission.permission",
"pk" : 234,
"fields": {
"model": [
"food",
"transformedfood"
],
"query": "{\"owner\": [\"club\"]}",
"type": "change",
"mask": 3,
"field": "ingredients",
"permanent": false,
"description": "Changer les ingrédients d'un plat actif de son club"
}
},
{
"model": "permission.permission",
"pk": 235,
"fields": {
"model": [
"food",
"food"
],
"query": "{}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir bouffe"
}
},
{
"model": "permission.permission",
"pk": 236,
"fields": {
"model": [
"food",
"food"
],
"query": "[]",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir bouffe active"
}
},
{
"model": "permission.permission",
"pk": 237,
"fields": {
"model": [
"food",
"food"
],
"query": "{\"owner\": [\"club\"]}",
"type": "view",
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir bouffe active de son club"
}
},
{
"model": "permission.permission",
"pk": 238,
"fields": {
"model": [
"food",
"food"
],
"query": "{}",
"type": "change",
"mask": 3,
"field": "",
"permanent": false,
"description": "Modifier bouffe"
}
"model": "permission.permission",
"pk": 222,
"fields": {
"model": [
"food",
"food"
],
"query": "{\"end_of_life\": \"\"}",
"type": "view",
"mask": 1,
"permanent": false,
"description": "Voir la bouffe servie"
}
},
{
"model": "permission.permission",
@ -4343,7 +4091,8 @@
158,
159,
160,
213
212,
222
]
}
},
@ -4384,16 +4133,11 @@
50,
141,
169,
212,
214,
215,
219,
222,
224,
227,
233,
234,
237,
217,
218,
219,
220,
221,
247,
258,
259
@ -4574,20 +4318,7 @@
166,
167,
168,
182,
212,
214,
215,
218,
221,
224,
226,
227,
228,
229,
232,
234,
236
182
]
}
},
@ -4795,8 +4526,7 @@
168,
176,
177,
197,
211
197
]
}
},
@ -4824,15 +4554,11 @@
"permissions": [
137,
211,
214,
216,
217,
220,
223,
225,
231,
235,
238
212,
213,
214,
215,
216
]
}
},

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-03-25 11:16+0100\n"
"POT-Creation-Date: 2025-04-24 18:22+0200\n"
"PO-Revision-Date: 2022-04-11 22:05+0200\n"
"Last-Translator: bleizi <bleizi@crans.org>\n"
"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
@ -25,7 +25,7 @@ msgid "This opener already exists"
msgstr "Cette amitié existe déjà"
#: apps/activity/apps.py:10 apps/activity/models.py:129
#: apps/activity/models.py:169 apps/activity/models.py:328
#: apps/activity/models.py:169 apps/activity/models.py:329
msgid "activity"
msgstr "activité"
@ -37,29 +37,29 @@ msgstr "La note du club est inactive."
msgid "The end date must be after the start date."
msgstr "La date de fin doit être après celle de début."
#: apps/activity/forms.py:83 apps/activity/models.py:276
#: apps/activity/forms.py:83 apps/activity/models.py:277
msgid "You can't invite someone once the activity is started."
msgstr ""
"Vous ne pouvez pas inviter quelqu'un une fois que l'activité a démarré."
#: apps/activity/forms.py:86 apps/activity/models.py:279
#: apps/activity/forms.py:86 apps/activity/models.py:280
msgid "This activity is not validated yet."
msgstr "Cette activité n'est pas encore validée."
#: apps/activity/forms.py:96 apps/activity/models.py:287
#: apps/activity/forms.py:96 apps/activity/models.py:288
msgid "This person has been already invited 5 times this year."
msgstr "Cette personne a déjà été invitée 5 fois cette année."
#: apps/activity/forms.py:100 apps/activity/models.py:291
#: apps/activity/forms.py:100 apps/activity/models.py:292
msgid "This person is already invited."
msgstr "Cette personne est déjà invitée."
#: apps/activity/forms.py:104 apps/activity/models.py:295
#: apps/activity/forms.py:104 apps/activity/models.py:296
msgid "You can't invite more than 3 people to this activity."
msgstr "Vous ne pouvez pas inviter plus de 3 personnes à cette activité."
#: apps/activity/models.py:28 apps/activity/models.py:63 apps/food/models.py:42
#: apps/food/models.py:56 apps/member/models.py:203
#: apps/activity/models.py:28 apps/activity/models.py:63 apps/food/models.py:18
#: apps/food/models.py:35 apps/member/models.py:203
#: apps/member/templates/member/includes/club_info.html:4
#: apps/member/templates/member/includes/profile_info.html:4
#: apps/note/models/notes.py:263 apps/note/models/transactions.py:26
@ -121,7 +121,7 @@ msgid "type"
msgstr "type"
#: apps/activity/models.py:91 apps/logs/models.py:22 apps/member/models.py:325
#: apps/note/models/notes.py:148 apps/treasury/models.py:293
#: apps/note/models/notes.py:148 apps/treasury/models.py:294
#: apps/wei/models.py:171 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15
msgid "user"
@ -205,21 +205,21 @@ msgstr "Entrée de la note {note} pour l'activité « {activity} »"
msgid "Already entered on "
msgstr "Déjà rentré·e le "
#: apps/activity/models.py:204 apps/activity/tables.py:58
#: apps/activity/models.py:205 apps/activity/tables.py:58
msgid "{:%Y-%m-%d %H:%M:%S}"
msgstr "{:%d/%m/%Y %H:%M:%S}"
#: apps/activity/models.py:212
#: apps/activity/models.py:213
msgid "The balance is negative."
msgstr "La note est en négatif."
#: apps/activity/models.py:242
#: apps/activity/models.py:243
#: apps/treasury/templates/treasury/sogecredit_detail.html:14
#: apps/wei/templates/wei/attribute_bus_1A.html:16
msgid "last name"
msgstr "nom de famille"
#: apps/activity/models.py:247
#: apps/activity/models.py:248
#: apps/member/templates/member/includes/profile_info.html:4
#: apps/registration/templates/registration/future_profile_detail.html:16
#: apps/treasury/templates/treasury/sogecredit_detail.html:17
@ -228,36 +228,36 @@ msgstr "nom de famille"
msgid "first name"
msgstr "prénom"
#: apps/activity/models.py:252
#: apps/activity/models.py:253
msgid "school"
msgstr "école"
#: apps/activity/models.py:259
#: apps/activity/models.py:260
msgid "inviter"
msgstr "hôte"
#: apps/activity/models.py:263
#: apps/activity/models.py:264
msgid "guest"
msgstr "invité·e"
#: apps/activity/models.py:264
#: apps/activity/models.py:265
msgid "guests"
msgstr "invité·e·s"
#: apps/activity/models.py:317
#: apps/activity/models.py:318
msgid "Invitation"
msgstr "Invitation"
#: apps/activity/models.py:335 apps/activity/models.py:339
#: apps/activity/models.py:336 apps/activity/models.py:340
msgid "Opener"
msgstr "Ouvreur⋅se"
#: apps/activity/models.py:340
#: apps/activity/models.py:341
#: apps/activity/templates/activity/activity_detail.html:16
msgid "Openers"
msgstr "Ouvreur⋅ses"
#: apps/activity/models.py:344
#: apps/activity/models.py:345
#, fuzzy, python-brace-format
#| msgid "Entry for {note} to the activity {activity}"
msgid "{opener} is opener of activity {acivity}"
@ -285,7 +285,7 @@ msgstr "Entré·e le "
msgid "remove"
msgstr "supprimer"
#: apps/activity/tables.py:84 apps/note/forms.py:69 apps/treasury/models.py:208
#: apps/activity/tables.py:84 apps/note/forms.py:69 apps/treasury/models.py:209
msgid "Type"
msgstr "Type"
@ -382,10 +382,8 @@ msgid "Entry done!"
msgstr "Entrée effectuée !"
#: apps/activity/templates/activity/activity_form.html:16
#: apps/food/templates/food/add_ingredient_form.html:16
#: apps/food/templates/food/basicfood_form.html:16
#: apps/food/templates/food/create_qrcode_form.html:20
#: apps/food/templates/food/transformedfood_form.html:16
#: apps/food/templates/food/food_update.html:17
#: apps/food/templates/food/qrcode.html:18
#: apps/member/templates/member/add_members.html:46
#: apps/member/templates/member/club_form.html:16
#: apps/note/templates/note/transactiontemplate_form.html:18
@ -493,257 +491,277 @@ msgstr "Entrées pour l'activité « {} »"
msgid "API"
msgstr "API"
#: apps/food/apps.py:11 apps/food/models.py:105
#: apps/food/apps.py:11
msgid "food"
msgstr "bouffe"
#: apps/food/forms.py:32
msgid "Fully used"
msgstr "Entièrement utilisé"
#: apps/food/forms.py:50
msgid "Pasta METRO 5kg"
msgstr "Pâtes METRO 5kg"
#: apps/food/forms.py:100
#: apps/food/forms.py:54 apps/food/forms.py:82
msgid "Specific order given to GCKs"
msgstr ""
#: apps/food/forms.py:78
msgid "Lasagna"
msgstr "Lasagnes"
#: apps/food/models.py:18
msgid "QR-code number"
msgstr "numéro de QR-code"
#: apps/food/forms.py:117
msgid "Shelf life (in hours)"
msgstr "Durée de vie (en heure)"
#: apps/food/models.py:26
msgid "food container"
msgstr "récipient"
#: apps/food/forms.py:139
msgid "Fully used"
msgstr "Entièrement utilisé"
#: apps/food/models.py:30
msgid "QR-code"
msgstr "QR-code"
#: apps/food/models.py:31
msgid "QR-codes"
msgstr "QR-codes"
#: apps/food/models.py:34
#, python-brace-format
msgid "QR-code number {qr_code_number}"
msgstr "numéro du QR-code {qr_code_number}"
#: apps/food/models.py:47
#: apps/food/models.py:23
msgid "Allergen"
msgstr "Allergène"
#: apps/food/models.py:48 apps/food/templates/food/basicfood_detail.html:17
#: apps/food/templates/food/transformedfood_detail.html:20
#: apps/food/models.py:24
msgid "Allergens"
msgstr "Allergènes"
#: apps/food/models.py:64
#: apps/food/models.py:43
msgid "owner"
msgstr "propriétaire"
#: apps/food/models.py:70
msgid "allergen"
msgstr "allergène"
#: apps/food/models.py:49
msgid "allergens"
msgstr "allergènes"
#: apps/food/models.py:74
#: apps/food/models.py:53
msgid "expiry date"
msgstr "date de péremption"
#: apps/food/models.py:80
msgid "was eaten"
msgstr "a été mangé"
#: apps/food/models.py:59
msgid "end of life"
msgstr "fin de vie"
#: apps/food/models.py:89
#: apps/food/models.py:64
msgid "is ready"
msgstr "est prêt"
#: apps/food/models.py:94
msgid "is active"
msgstr "est en cours"
#: apps/food/models.py:70
msgid "order"
msgstr "consigne"
#: apps/food/models.py:106
msgid "foods"
msgstr "bouffes"
#: apps/food/models.py:107 apps/food/views.py:32
#: note_kfet/templates/base.html:72
msgid "Food"
msgstr "Bouffe"
#: apps/food/models.py:122
#: apps/food/models.py:108
msgid "Foods"
msgstr "Bouffes"
#: apps/food/models.py:117
msgid "arrival date"
msgstr "date d'arrivée"
#: apps/food/models.py:152
#: apps/food/models.py:169
msgid "Basic food"
msgstr "Aliment basique"
#: apps/food/models.py:153
#: apps/food/models.py:170
msgid "Basic foods"
msgstr "Aliments basiques"
#: apps/food/models.py:161
#: apps/food/models.py:182
msgid "creation date"
msgstr "date de création"
#: apps/food/models.py:169
msgid "transformed ingredient"
msgstr "ingrédients tranformées"
#: apps/food/models.py:174
#: apps/food/models.py:188
msgid "shelf life"
msgstr "durée de vie"
#: apps/food/models.py:225 apps/food/views.py:375
#: apps/food/models.py:196
msgid "transformed ingredient"
msgstr "ingrédients tranformées"
#: apps/food/models.py:258
msgid "Transformed food"
msgstr "Aliment transformé"
#: apps/food/models.py:226
#: apps/food/models.py:259
msgid "Transformed foods"
msgstr "Aliments transformés"
#: apps/food/templates/food/basicfood_detail.html:14
#: apps/food/templates/food/create_qrcode_form.html:31
#: apps/food/templates/food/qrcode_detail.html:15
#: apps/food/templates/food/transformedfood_detail.html:14
msgid "Owner"
msgstr "Propriétaire"
#: apps/food/models.py:271
msgid "qr code number"
msgstr "numéro de QR-code"
#: apps/food/templates/food/basicfood_detail.html:15
#: apps/food/templates/food/create_qrcode_form.html:34
msgid "Arrival date"
msgstr "Date d'arrivée"
#: apps/food/models.py:278
msgid "food container"
msgstr "récipient"
#: apps/food/templates/food/basicfood_detail.html:16
#: apps/food/templates/food/create_qrcode_form.html:37
#: apps/food/templates/food/qrcode_detail.html:16
#: apps/food/templates/food/transformedfood_detail.html:19
msgid "Expiry date"
msgstr "Date de péremption"
#: apps/food/models.py:282
msgid "QR-code"
msgstr "QR-code"
#: apps/food/templates/food/basicfood_detail.html:24
#: apps/food/templates/food/transformedfood_detail.html:36
msgid "Active"
msgstr "Actif"
#: apps/food/models.py:283
msgid "QR-codes"
msgstr "QR-codes"
#: apps/food/templates/food/basicfood_detail.html:25
#: apps/food/templates/food/transformedfood_detail.html:37
msgid "Eaten"
msgstr "Mangé"
#: apps/food/models.py:286
msgid "QR-code number"
msgstr "numéro de QR-code"
#: apps/food/templates/food/basicfood_detail.html:28
#: apps/food/templates/food/qrcode_detail.html:20
#: apps/food/templates/food/qrcode_detail.html:24
#: apps/food/templates/food/transformedfood_detail.html:41
#: apps/food/templates/food/food_detail.html:19
msgid "Contained in"
msgstr "Contenu dans"
#: apps/food/templates/food/food_detail.html:26
msgid "Contain"
msgstr "Contient"
#: apps/food/templates/food/food_detail.html:35
msgid "Update"
msgstr "Modifier"
#: apps/food/templates/food/basicfood_detail.html:32
#: apps/food/templates/food/qrcode_detail.html:34
#: apps/food/templates/food/transformedfood_detail.html:46
#: apps/food/templates/food/food_detail.html:40
msgid "Add to a meal"
msgstr "Ajouter à un plat"
#: apps/food/templates/food/create_qrcode_form.html:15
msgid "New basic food"
msgstr "Nouvel aliment basique"
#: apps/food/templates/food/food_detail.html:44
msgid "Return to the food list"
msgstr "Retour à la liste de nourriture"
#: apps/food/templates/food/create_qrcode_form.html:23
msgid "Copy constructor"
msgstr "Constructeur de copie"
#: apps/food/templates/food/create_qrcode_form.html:28
#: apps/food/templates/food/qrcode_detail.html:14
#: apps/note/templates/note/transaction_form.html:132
#: apps/treasury/models.py:60
msgid "Name"
msgstr "Nom"
#: apps/food/templates/food/qrcode_detail.html:10
msgid "number"
msgstr "numéro"
#: apps/food/templates/food/qrcode_detail.html:29
msgid "View details"
msgstr "Voir plus"
#: apps/food/templates/food/transformedfood_detail.html:16
#: apps/food/templates/food/transformedfood_detail.html:35
msgid "Ready"
msgstr "Prêt"
#: apps/food/templates/food/transformedfood_detail.html:18
msgid "Creation date"
msgstr "Date de création"
#: apps/food/templates/food/transformedfood_detail.html:27
msgid "Ingredients"
msgstr "Ingrédients"
#: apps/food/templates/food/transformedfood_detail.html:34
msgid "Shelf life"
msgstr "Durée de vie"
#: apps/food/templates/food/transformedfood_list.html:11
#: apps/food/templates/food/food_list.html:14
msgid "Meal served"
msgstr "Plat servis"
#: apps/food/templates/food/transformedfood_list.html:16
#: apps/food/templates/food/food_list.html:19
msgid "New meal"
msgstr "Nouveau plat"
#: apps/food/templates/food/transformedfood_list.html:25
#: apps/food/templates/food/food_list.html:28
msgid "There is no meal served."
msgstr "Il n'y a pas de plat servi."
#: apps/food/templates/food/transformedfood_list.html:33
msgid "Open"
#: apps/food/templates/food/food_list.html:35
msgid "Free food"
msgstr "Open"
#: apps/food/templates/food/transformedfood_list.html:40
msgid "There is no free meal."
msgstr "Il n'y a pas de plat en open"
#: apps/food/templates/food/food_list.html:42
msgid "There is no free food."
msgstr "Il n'y a pas de bouffe en open"
#: apps/food/templates/food/transformedfood_list.html:48
msgid "All meals"
msgstr "Tout les plats"
#: apps/food/templates/food/food_list.html:50
msgid "Food of your clubs"
msgstr "Bouffe de tes clubs"
#: apps/food/templates/food/transformedfood_list.html:55
msgid "There is no meal."
msgstr "Il n'y a pas de plat"
#: apps/food/templates/food/food_list.html:56
msgid "Food of club"
msgstr "Bouffe du club"
#: apps/food/views.py:28
msgid "Add the ingredient"
msgstr "Ajouter un ingrédient"
#: apps/food/templates/food/food_list.html:63
msgid "Yours club has not food yet."
msgstr "Ton club n'a pas de bouffe pour l'instant"
#: apps/food/views.py:42
msgid "The product is already prepared"
msgstr "Le produit est déjà prêt"
#: apps/food/templates/food/qrcode.html:22
msgid "Copy constructor"
msgstr "Constructeur de copie"
#: apps/food/views.py:70
msgid "Update an aliment"
msgstr "Modifier un aliment"
#: apps/food/templates/food/qrcode.html:23
msgid "New food"
msgstr "Nouvel aliment"
#: apps/food/views.py:97
msgid "Details of:"
msgstr "Détails de:"
#: apps/food/templates/food/qrcode.html:29
#: apps/note/templates/note/transaction_form.html:132
#: apps/treasury/models.py:61
msgid "Name"
msgstr "Nom"
#: apps/food/views.py:121
msgid "Add a new basic food with QRCode"
msgstr "Ajouter un nouvel ingrédient avec un QR-code"
#: apps/food/templates/food/qrcode.html:32
msgid "Owner"
msgstr "Propriétaire"
#: apps/food/views.py:194
#: apps/food/templates/food/qrcode.html:35
msgid "Expiry date"
msgstr "Date de péremption"
#: apps/food/utils.py:6
msgid "second"
msgstr "seconde"
#: apps/food/utils.py:6
msgid "seconds"
msgstr "secondes"
#: apps/food/utils.py:7
msgid "minute"
msgstr "minute"
#: apps/food/utils.py:7
msgid "minutes"
msgstr "minutes"
#: apps/food/utils.py:8
msgid "hour"
msgstr "heure"
#: apps/food/utils.py:8
msgid "hours"
msgstr "heures"
#: apps/food/utils.py:9
msgid "day"
msgstr "jour"
#: apps/food/utils.py:9 apps/member/templates/member/includes/club_info.html:27
msgid "days"
msgstr "jours"
#: apps/food/utils.py:10
msgid "week"
msgstr "semaine"
#: apps/food/utils.py:10
msgid "weeks"
msgstr "semaines"
#: apps/food/utils.py:53
msgid "and"
msgstr "et"
#: apps/food/views.py:116
msgid "Add a new QRCode"
msgstr "Ajouter un nouveau QR-code"
#: apps/food/views.py:245
msgid "QRCode"
msgstr "QR-code"
#: apps/food/views.py:165
msgid "Add an aliment"
msgstr "Ajouter un nouvel aliment"
#: apps/food/views.py:281
msgid "Add a new meal"
msgstr "Ajouter un nouveau plat"
#: apps/food/views.py:224
msgid "Add a meal"
msgstr "Ajouter un plat"
#: apps/food/views.py:347
msgid "Update a meal"
msgstr "Modifier le plat"
#: apps/food/views.py:251
msgid "Add the ingredient:"
msgstr "Ajouter l'ingrédient"
#: apps/food/views.py:275
#, python-brace-format
msgid "Food fully used in : {meal.name}"
msgstr "Aliment entièrement utilisé dans : {meal.name}"
#: apps/food/views.py:294
msgid "Update an aliment"
msgstr "Modifier un aliment"
#: apps/food/views.py:342
msgid "Details of:"
msgstr "Détails de :"
#: apps/food/views.py:352 apps/treasury/tables.py:149
msgid "Yes"
msgstr "Oui"
#: apps/food/views.py:354 apps/member/models.py:99 apps/treasury/tables.py:149
msgid "No"
msgstr "Non"
#: apps/logs/apps.py:11
msgid "Logs"
@ -1044,10 +1062,6 @@ msgstr "payé⋅e"
msgid "Tells if the user receive a salary."
msgstr "Indique si l'utilisateur⋅rice perçoit un salaire."
#: apps/member/models.py:99 apps/treasury/tables.py:149
msgid "No"
msgstr "Non"
#: apps/member/models.py:100
msgid "Yes (receive them in french)"
msgstr "Oui (les recevoir en français)"
@ -1357,10 +1371,6 @@ msgstr "Il n'y a pas d'adhésion trouvée avec cette entrée."
msgid "Club Parent"
msgstr "Club parent"
#: apps/member/templates/member/includes/club_info.html:27
msgid "days"
msgstr "jours"
#: apps/member/templates/member/includes/club_info.html:31
#: apps/wei/templates/wei/base.html:40
msgid "membership fee"
@ -1456,11 +1466,11 @@ msgstr "Introspection :"
msgid "Show my applications"
msgstr "Voir mes applications"
#: apps/member/templates/member/picture_update.html:38
#: apps/member/templates/member/picture_update.html:40
msgid "Nevermind"
msgstr "Annuler"
#: apps/member/templates/member/picture_update.html:39
#: apps/member/templates/member/picture_update.html:41
msgid "Crop and upload"
msgstr "Recadrer et envoyer"
@ -1899,7 +1909,7 @@ msgstr "Ce champ est requis."
msgid "membership transaction"
msgstr "transaction d'adhésion"
#: apps/note/models/transactions.py:381 apps/treasury/models.py:300
#: apps/note/models/transactions.py:381 apps/treasury/models.py:301
msgid "membership transactions"
msgstr "transactions d'adhésion"
@ -2512,7 +2522,7 @@ msgstr "Invalider l'inscription"
msgid "Treasury"
msgstr "Trésorerie"
#: apps/treasury/forms.py:26 apps/treasury/models.py:112
#: apps/treasury/forms.py:26 apps/treasury/models.py:113
#: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited."
msgstr "Cette facture est verrouillée et ne peut plus être éditée."
@ -2525,7 +2535,7 @@ msgstr "La remise est déjà fermée."
msgid "You can't change the type of the remittance."
msgstr "Vous ne pouvez pas changer le type de la remise."
#: apps/treasury/forms.py:125 apps/treasury/models.py:275
#: apps/treasury/forms.py:125 apps/treasury/models.py:276
#: apps/treasury/tables.py:99 apps/treasury/tables.py:108
#: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16
@ -2541,139 +2551,139 @@ msgstr "Pas de remise associée"
msgid "Invoice identifier"
msgstr "Numéro de facture"
#: apps/treasury/models.py:42 apps/wrapped/models.py:28
#: apps/treasury/models.py:43 apps/wrapped/models.py:28
#: apps/wrapped/models.py:29
msgid "BDE"
msgstr "BDE"
#: apps/treasury/models.py:46
#: apps/treasury/models.py:47
msgid "Quotation"
msgstr "Devis"
#: apps/treasury/models.py:51
#: apps/treasury/models.py:52
msgid "Object"
msgstr "Objet"
#: apps/treasury/models.py:55
#: apps/treasury/models.py:56
msgid "Description"
msgstr "Description"
#: apps/treasury/models.py:64
#: apps/treasury/models.py:65
msgid "Address"
msgstr "Adresse"
#: apps/treasury/models.py:69 apps/treasury/models.py:202
#: apps/treasury/models.py:70 apps/treasury/models.py:203
msgid "Date"
msgstr "Date"
#: apps/treasury/models.py:75
#: apps/treasury/models.py:76
msgid "Payment date"
msgstr "Date de paiement"
#: apps/treasury/models.py:79
#: apps/treasury/models.py:80
msgid "Acquitted"
msgstr "Acquittée"
#: apps/treasury/models.py:84
#: apps/treasury/models.py:85
msgid "Locked"
msgstr "Verrouillée"
#: apps/treasury/models.py:85
#: apps/treasury/models.py:86
msgid "An invoice can't be edited when it is locked."
msgstr "Une facture ne peut plus être modifiée si elle est verrouillée."
#: apps/treasury/models.py:91
#: apps/treasury/models.py:92
msgid "tex source"
msgstr "fichier TeX source"
#: apps/treasury/models.py:95 apps/treasury/models.py:140
#: apps/treasury/models.py:96 apps/treasury/models.py:141
msgid "invoice"
msgstr "facture"
#: apps/treasury/models.py:96
#: apps/treasury/models.py:97
msgid "invoices"
msgstr "factures"
#: apps/treasury/models.py:99
#: apps/treasury/models.py:100
#, python-brace-format
msgid "Invoice #{id}"
msgstr "Facture n°{id}"
#: apps/treasury/models.py:145
#: apps/treasury/models.py:146
msgid "Designation"
msgstr "Désignation"
#: apps/treasury/models.py:151
#: apps/treasury/models.py:152
msgid "Quantity"
msgstr "Quantité"
#: apps/treasury/models.py:156
#: apps/treasury/models.py:157
msgid "Unit price"
msgstr "Prix unitaire"
#: apps/treasury/models.py:160
#: apps/treasury/models.py:161
msgid "product"
msgstr "produit"
#: apps/treasury/models.py:161
#: apps/treasury/models.py:162
msgid "products"
msgstr "produits"
#: apps/treasury/models.py:189
#: apps/treasury/models.py:190
msgid "remittance type"
msgstr "type de remise"
#: apps/treasury/models.py:190
#: apps/treasury/models.py:191
msgid "remittance types"
msgstr "types de remises"
#: apps/treasury/models.py:213
#: apps/treasury/models.py:214
msgid "Comment"
msgstr "Commentaire"
#: apps/treasury/models.py:218
#: apps/treasury/models.py:219
msgid "Closed"
msgstr "Fermée"
#: apps/treasury/models.py:222
#: apps/treasury/models.py:223
msgid "remittance"
msgstr "remise"
#: apps/treasury/models.py:223
#: apps/treasury/models.py:224
msgid "remittances"
msgstr "remises"
#: apps/treasury/models.py:226
#: apps/treasury/models.py:227
msgid "Remittance #{:d}: {}"
msgstr "Remise n°{:d} : {}"
#: apps/treasury/models.py:279
#: apps/treasury/models.py:280
msgid "special transaction proxy"
msgstr "proxy de transaction spéciale"
#: apps/treasury/models.py:280
#: apps/treasury/models.py:281
msgid "special transaction proxies"
msgstr "proxys de transactions spéciales"
#: apps/treasury/models.py:306
#: apps/treasury/models.py:307
msgid "credit transaction"
msgstr "transaction de crédit"
#: apps/treasury/models.py:311
#: apps/treasury/models.py:312
#: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale"
msgstr "Crédit de la Société générale"
#: apps/treasury/models.py:312
#: apps/treasury/models.py:313
msgid "Credits from the Société générale"
msgstr "Crédits de la Société générale"
#: apps/treasury/models.py:315
#: apps/treasury/models.py:316
#, python-brace-format
msgid "Soge credit for {user}"
msgstr "Crédit de la société générale pour l'utilisateur·rice {user}"
#: apps/treasury/models.py:445
#: apps/treasury/models.py:446
msgid ""
"This user doesn't have enough money to pay the memberships with its note. "
"Please ask her/him to credit the note before invalidating this credit."
@ -2702,10 +2712,6 @@ msgstr "Nombre de transactions"
msgid "View"
msgstr "Voir"
#: apps/treasury/tables.py:149
msgid "Yes"
msgstr "Oui"
#: apps/treasury/templates/treasury/invoice_confirm_delete.html:10
#: apps/treasury/views.py:174
msgid "Delete invoice"
@ -3812,10 +3818,6 @@ msgstr ""
msgid "Reset"
msgstr "Réinitialiser"
#: note_kfet/templates/base.html:72
msgid "Food"
msgstr "Bouffe"
#: note_kfet/templates/base.html:84
msgid "Users"
msgstr "Utilisateur·rices"
@ -4125,6 +4127,67 @@ msgstr ""
"d'adhésion. Vous devez également valider votre adresse email en suivant le "
"lien que vous avez reçu."
#, python-brace-format
#~ msgid "QR-code number {qr_code_number}"
#~ msgstr "numéro du QR-code {qr_code_number}"
#~ msgid "was eaten"
#~ msgstr "a été mangé"
#~ msgid "is active"
#~ msgstr "est en cours"
#~ msgid "foods"
#~ msgstr "bouffes"
#~ msgid "Arrival date"
#~ msgstr "Date d'arrivée"
#~ msgid "Active"
#~ msgstr "Actif"
#~ msgid "Eaten"
#~ msgstr "Mangé"
#~ msgid "number"
#~ msgstr "numéro"
#~ msgid "View details"
#~ msgstr "Voir plus"
#~ msgid "Ready"
#~ msgstr "Prêt"
#~ msgid "Creation date"
#~ msgstr "Date de création"
#~ msgid "Ingredients"
#~ msgstr "Ingrédients"
#~ msgid "Open"
#~ msgstr "Open"
#~ msgid "All meals"
#~ msgstr "Tout les plats"
#~ msgid "There is no meal."
#~ msgstr "Il n'y a pas de plat"
#~ msgid "The product is already prepared"
#~ msgstr "Le produit est déjà prêt"
#~ msgid "Add a new basic food with QRCode"
#~ msgstr "Ajouter un nouvel ingrédient avec un QR-code"
#~ msgid "QRCode"
#~ msgstr "QR-code"
#~ msgid "Add a new meal"
#~ msgstr "Ajouter un nouveau plat"
#~ msgid "Update a meal"
#~ msgstr "Modifier le plat"
#, fuzzy
#~| msgid "invalidate"
#~ msgid "Enter a valid color."
@ -4180,11 +4243,6 @@ msgstr ""
#~ msgid "Enter a number."
#~ msgstr "numéro de téléphone"
#, fuzzy
#~| msgid "add"
#~ msgid "and"
#~ msgstr "ajouter"
#, fuzzy, python-format
#~| msgid "A template with this name already exist"
#~ msgid "%(model_name)s with this %(field_labels)s already exists."
@ -4446,9 +4504,6 @@ msgstr ""
#~ msgid "Free"
#~ msgstr "Open"
#~ msgid "Add a new aliment"
#~ msgstr "Ajouter un nouvel aliment"
#, fuzzy
#~| msgid "Transformed food"
#~ msgid "New transformed food"