From 53c4e3877150bb3bc8796d20296e273155f78cad Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Mon, 7 Sep 2020 01:06:22 +0200 Subject: [PATCH 1/3] Add __str__ to models, remove null=True in CharField and TextField --- apps/activity/models.py | 6 ++++ .../migrations/0002_replace_null_by_blank.py | 17 +++++++++++ .../0003_remove_null_tag_on_charfields.py | 23 +++++++++++++++ apps/logs/models.py | 10 +++++-- apps/logs/signals.py | 4 +-- .../migrations/0004_replace_null_by_blank.py | 20 +++++++++++++ .../0005_remove_null_tag_on_charfields.py | 28 +++++++++++++++++++ apps/member/models.py | 9 +++--- .../migrations/0003_replace_null_by_blank.py | 17 +++++++++++ .../0004_remove_null_tag_on_charfields.py | 23 +++++++++++++++ apps/note/models/notes.py | 4 +-- apps/note/models/transactions.py | 8 ++++-- apps/scripts | 2 +- apps/treasury/models.py | 12 ++++++++ 14 files changed, 168 insertions(+), 15 deletions(-) create mode 100644 apps/logs/migrations/0002_replace_null_by_blank.py create mode 100644 apps/logs/migrations/0003_remove_null_tag_on_charfields.py create mode 100644 apps/member/migrations/0004_replace_null_by_blank.py create mode 100644 apps/member/migrations/0005_remove_null_tag_on_charfields.py create mode 100644 apps/note/migrations/0003_replace_null_by_blank.py create mode 100644 apps/note/migrations/0004_remove_null_tag_on_charfields.py diff --git a/apps/activity/models.py b/apps/activity/models.py index 9d3431be..fe2cfb20 100644 --- a/apps/activity/models.py +++ b/apps/activity/models.py @@ -188,6 +188,12 @@ class Entry(models.Model): verbose_name = _("entry") verbose_name_plural = _("entries") + def __str__(self): + return _("Entry for {guest}, invited by {note} to the activity {activity}").format( + guest=str(self.guest), note=str(self.note), activity=str(self.activity)) if self.guest \ + else _("Entry for {note} to the activity {activity}").format( + guest=str(self.guest), note=str(self.note), activity=str(self.activity)) + def save(self, *args, **kwargs): qs = Entry.objects.filter(~Q(pk=self.pk), activity=self.activity, note=self.note, guest=self.guest) diff --git a/apps/logs/migrations/0002_replace_null_by_blank.py b/apps/logs/migrations/0002_replace_null_by_blank.py new file mode 100644 index 00000000..65fc4b14 --- /dev/null +++ b/apps/logs/migrations/0002_replace_null_by_blank.py @@ -0,0 +1,17 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('logs', '0001_initial'), + ] + + operations = [ + migrations.RunSQL( + "UPDATE logs_changelog SET previous = '' WHERE previous IS NULL;" + ), + migrations.RunSQL( + "UPDATE logs_changelog SET data = '' WHERE data IS NULL;" + ), + ] diff --git a/apps/logs/migrations/0003_remove_null_tag_on_charfields.py b/apps/logs/migrations/0003_remove_null_tag_on_charfields.py new file mode 100644 index 00000000..a6e3a581 --- /dev/null +++ b/apps/logs/migrations/0003_remove_null_tag_on_charfields.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.16 on 2020-09-06 19:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('logs', '0002_replace_null_by_blank'), + ] + + operations = [ + migrations.AlterField( + model_name='changelog', + name='data', + field=models.TextField(blank=True, default='', verbose_name='new data'), + ), + migrations.AlterField( + model_name='changelog', + name='previous', + field=models.TextField(blank=True, default='', verbose_name='previous data'), + ), + ] diff --git a/apps/logs/models.py b/apps/logs/models.py index e558ea82..0077af72 100644 --- a/apps/logs/models.py +++ b/apps/logs/models.py @@ -44,12 +44,14 @@ class Changelog(models.Model): ) previous = models.TextField( - null=True, + blank=True, + default="", verbose_name=_('previous data'), ) data = models.TextField( - null=True, + blank=True, + default="", verbose_name=_('new data'), ) @@ -80,3 +82,7 @@ class Changelog(models.Model): class Meta: verbose_name = _("changelog") verbose_name_plural = _("changelogs") + + def __str__(self): + return _("Changelog of type \"{action}\" for model {model} at {timestamp}").format( + action=self.get_action_display(), model=str(self.model), timestamp=str(self.timestamp)) diff --git a/apps/logs/signals.py b/apps/logs/signals.py index e58ba7c1..f313cc5b 100644 --- a/apps/logs/signals.py +++ b/apps/logs/signals.py @@ -99,7 +99,7 @@ def save_object(sender, instance, **kwargs): model = instance.__class__ fields = changed_fields - previous_json = JSONRenderer().render(CustomSerializer(previous).data).decode("UTF-8") if previous else None + previous_json = JSONRenderer().render(CustomSerializer(previous).data).decode("UTF-8") if previous else "" instance_json = JSONRenderer().render(CustomSerializer(instance).data).decode("UTF-8") Changelog.objects.create(user=user, @@ -149,6 +149,6 @@ def delete_object(sender, instance, **kwargs): model=ContentType.objects.get_for_model(instance), instance_pk=instance.pk, previous=instance_json, - data=None, + data="", action="delete" ).save() diff --git a/apps/member/migrations/0004_replace_null_by_blank.py b/apps/member/migrations/0004_replace_null_by_blank.py new file mode 100644 index 00000000..a53e3801 --- /dev/null +++ b/apps/member/migrations/0004_replace_null_by_blank.py @@ -0,0 +1,20 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('member', '0003_create_bde_and_kfet'), + ] + + operations = [ + migrations.RunSQL( + "UPDATE member_profile SET address = '' WHERE address IS NULL;", + ), + migrations.RunSQL( + "UPDATE member_profile SET ml_events_registration = '' WHERE ml_events_registration IS NULL;", + ), + migrations.RunSQL( + "UPDATE member_profile SET section = '' WHERE section IS NULL;", + ), + ] diff --git a/apps/member/migrations/0005_remove_null_tag_on_charfields.py b/apps/member/migrations/0005_remove_null_tag_on_charfields.py new file mode 100644 index 00000000..11b9f37b --- /dev/null +++ b/apps/member/migrations/0005_remove_null_tag_on_charfields.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.16 on 2020-09-06 19:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('member', '0004_replace_null_by_blank'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='address', + field=models.CharField(blank=True, default='', max_length=255, verbose_name='address'), + ), + migrations.AlterField( + model_name='profile', + name='ml_events_registration', + field=models.CharField(blank=True, choices=[('', 'No'), ('fr', 'Yes (receive them in french)'), ('en', 'Yes (receive them in english)')], default='', max_length=2, verbose_name='Register on the mailing list to stay informed of the events of the campus (1 mail/week)'), + ), + migrations.AlterField( + model_name='profile', + name='section', + field=models.CharField(blank=True, default='', help_text='e.g. "1A0", "9A♥", "SAPHIRE"', max_length=255, verbose_name='section'), + ), + ] diff --git a/apps/member/models.py b/apps/member/models.py index bce525af..c7467120 100644 --- a/apps/member/models.py +++ b/apps/member/models.py @@ -46,7 +46,7 @@ class Profile(models.Model): help_text=_('e.g. "1A0", "9A♥", "SAPHIRE"'), max_length=255, blank=True, - null=True, + default="", ) department = models.CharField( @@ -83,7 +83,7 @@ class Profile(models.Model): verbose_name=_('address'), max_length=255, blank=True, - null=True, + default="", ) paid = models.BooleanField( @@ -94,11 +94,10 @@ class Profile(models.Model): ml_events_registration = models.CharField( blank=True, - null=True, - default=None, + default='', max_length=2, choices=[ - (None, _("No")), + ('', _("No")), ('fr', _("Yes (receive them in french)")), ('en', _("Yes (receive them in english)")), ], diff --git a/apps/note/migrations/0003_replace_null_by_blank.py b/apps/note/migrations/0003_replace_null_by_blank.py new file mode 100644 index 00000000..21da860d --- /dev/null +++ b/apps/note/migrations/0003_replace_null_by_blank.py @@ -0,0 +1,17 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('note', '0002_create_special_notes'), + ] + + operations = [ + migrations.RunSQL( + "UPDATE note_note SET inactivity_reason = '' WHERE inactivity_reason IS NULL;" + ), + migrations.RunSQL( + "UPDATE note_transaction SET invalidity_reason = '' WHERE invalidity_reason IS NULL;" + ), + ] diff --git a/apps/note/migrations/0004_remove_null_tag_on_charfields.py b/apps/note/migrations/0004_remove_null_tag_on_charfields.py new file mode 100644 index 00000000..012fc359 --- /dev/null +++ b/apps/note/migrations/0004_remove_null_tag_on_charfields.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.16 on 2020-09-06 19:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('note', '0003_replace_null_by_blank'), + ] + + operations = [ + migrations.AlterField( + model_name='note', + name='inactivity_reason', + field=models.CharField(blank=True, choices=[('manual', 'The user blocked his/her note manually, eg. when he/she left the school for holidays. It can be reactivated at any time.'), ('forced', "The note is blocked by the the BDE and can't be manually reactivated.")], default='', max_length=255), + ), + migrations.AlterField( + model_name='transaction', + name='invalidity_reason', + field=models.CharField(blank=True, default='', max_length=255, verbose_name='invalidity reason'), + ), + ] diff --git a/apps/note/models/notes.py b/apps/note/models/notes.py index 877247df..9efdd1d0 100644 --- a/apps/note/models/notes.py +++ b/apps/note/models/notes.py @@ -70,8 +70,8 @@ class Note(PolymorphicModel): "It can be reactivated at any time.")), ('forced', _("The note is blocked by the the BDE and can't be manually reactivated.")), ], - null=True, - default=None, + blank=True, + default="", ) class Meta: diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py index d10bf3a6..b89b405f 100644 --- a/apps/note/models/transactions.py +++ b/apps/note/models/transactions.py @@ -90,6 +90,9 @@ class TransactionTemplate(models.Model): def get_absolute_url(self): return reverse('note:template_update', args=(self.pk,)) + def __str__(self): + return self.name + class Transaction(PolymorphicModel): """ @@ -150,8 +153,7 @@ class Transaction(PolymorphicModel): invalidity_reason = models.CharField( verbose_name=_('invalidity reason'), max_length=255, - default=None, - null=True, + default='', blank=True, ) @@ -195,7 +197,7 @@ class Transaction(PolymorphicModel): # When a transaction is declared valid, we ensure that the invalidity reason is null, if it was # previously invalid - self.invalidity_reason = None + self.invalidity_reason = "" if source_balance > 9223372036854775807 or source_balance < -9223372036854775808\ or dest_balance > 9223372036854775807 or dest_balance < -9223372036854775808: diff --git a/apps/scripts b/apps/scripts index 4f5a7947..bac22dcb 160000 --- a/apps/scripts +++ b/apps/scripts @@ -1 +1 @@ -Subproject commit 4f5a794798a48cbbf10b42f0a519743fcbb96c33 +Subproject commit bac22dcbac9f3ddb981a5e63629a77ca2cb8f8ff diff --git a/apps/treasury/models.py b/apps/treasury/models.py index e57496ec..175829fe 100644 --- a/apps/treasury/models.py +++ b/apps/treasury/models.py @@ -109,6 +109,9 @@ class Invoice(models.Model): verbose_name = _("invoice") verbose_name_plural = _("invoices") + def __str__(self): + return _("Invoice #{id}").format(id=self.id) + class Product(models.Model): """ @@ -151,6 +154,9 @@ class Product(models.Model): verbose_name = _("product") verbose_name_plural = _("products") + def __str__(self): + return f"{self.designation} ({self.invoice})" + class RemittanceType(models.Model): """ @@ -256,6 +262,9 @@ class SpecialTransactionProxy(models.Model): verbose_name = _("special transaction proxy") verbose_name_plural = _("special transaction proxies") + def __str__(self): + return str(self.transaction) + class SogeCredit(models.Model): """ @@ -354,3 +363,6 @@ class SogeCredit(models.Model): class Meta: verbose_name = _("Credit from the Société générale") verbose_name_plural = _("Credits from the Société générale") + + def __str__(self): + return _("Soge credit for {user}").format(user=str(self.user)) From 0183ba193c30e53a58ec685d729d74cf876f5769 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Mon, 7 Sep 2020 11:07:31 +0200 Subject: [PATCH 2/3] Plain text mode in reports --- apps/scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/scripts b/apps/scripts index bac22dcb..4506dd4d 160000 --- a/apps/scripts +++ b/apps/scripts @@ -1 +1 @@ -Subproject commit bac22dcbac9f3ddb981a5e63629a77ca2cb8f8ff +Subproject commit 4506dd4dc09a1255e68043b2c13afff7b3b72fce From 7a32c30b8c9a131f0a9de4adc6abb65eb613796e Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Mon, 7 Sep 2020 11:23:05 +0200 Subject: [PATCH 3/3] Model names translations were missing --- locale/de/LC_MESSAGES/django.po | 267 ++++++++++++++++++-------------- locale/fr/LC_MESSAGES/django.po | 265 +++++++++++++++++-------------- 2 files changed, 292 insertions(+), 240 deletions(-) diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 674e5ce0..c3bed92d 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-06 20:16+0200\n" +"POT-Creation-Date: 2020-09-07 11:14+0200\n" "PO-Revision-Date: 2020-09-03 23:47+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -27,33 +27,33 @@ msgstr "Veranstaltung" msgid "The end date must be after the start date." msgstr "Das Abschlussdatum muss nach das Anfangsdatum sein." -#: apps/activity/forms.py:76 apps/activity/models.py:262 +#: apps/activity/forms.py:76 apps/activity/models.py:268 msgid "You can't invite someone once the activity is started." msgstr "" "Sie dürfen nicht jemandem einladen wenn die Veranstaltung angefangen hat." -#: apps/activity/forms.py:79 apps/activity/models.py:265 +#: apps/activity/forms.py:79 apps/activity/models.py:271 msgid "This activity is not validated yet." msgstr "Diese Veranstaltung ist noch nicht bestätigt." -#: apps/activity/forms.py:89 apps/activity/models.py:273 +#: apps/activity/forms.py:89 apps/activity/models.py:279 msgid "This person has been already invited 5 times this year." msgstr "Diese Person wurde schon 5 mal dieses Jahr eingeladen." -#: apps/activity/forms.py:93 apps/activity/models.py:277 +#: apps/activity/forms.py:93 apps/activity/models.py:283 msgid "This person is already invited." msgstr "Diese Person wurde schon eingeladen." -#: apps/activity/forms.py:97 apps/activity/models.py:281 +#: apps/activity/forms.py:97 apps/activity/models.py:287 msgid "You can't invite more than 3 people to this activity." msgstr "Sie dürfen höchstens 3 Leute zu dieser Veranstaltung einladen." #: apps/activity/models.py:28 apps/activity/models.py:63 -#: apps/member/models.py:200 +#: apps/member/models.py:199 #: apps/member/templates/member/includes/club_info.html:4 #: apps/member/templates/member/includes/profile_info.html:4 #: apps/note/models/notes.py:253 apps/note/models/transactions.py:26 -#: apps/note/models/transactions.py:46 apps/note/models/transactions.py:302 +#: apps/note/models/transactions.py:46 apps/note/models/transactions.py:296 #: apps/permission/models.py:329 #: apps/registration/templates/registration/future_profile_detail.html:16 #: apps/wei/models.py:66 apps/wei/models.py:118 @@ -110,8 +110,8 @@ msgstr "Wo findet die Veranstaltung statt ? (z.B Kfet)" msgid "type" msgstr "Type" -#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305 -#: apps/note/models/notes.py:144 apps/treasury/models.py:267 +#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:304 +#: apps/note/models/notes.py:144 apps/treasury/models.py:276 #: apps/treasury/templates/treasury/sogecredit_detail.html:14 #: apps/wei/models.py:160 apps/wei/templates/wei/survey.html:15 msgid "user" @@ -149,7 +149,7 @@ msgstr "Abschlussdatum" #: apps/activity/models.py:118 #: apps/activity/templates/activity/includes/activity_info.html:50 -#: apps/note/models/transactions.py:146 +#: apps/note/models/transactions.py:149 msgid "valid" msgstr "gültig" @@ -181,42 +181,53 @@ msgstr "Eintritt" msgid "entries" msgstr "Eintritte" -#: apps/activity/models.py:195 +#: apps/activity/models.py:192 +#, python-brace-format +msgid "Entry for {guest}, invited by {note} to the activity {activity}" +msgstr "Eintritt für {guest}, von {note} zur Vanstaltung {activity} eingeladen" + +#: apps/activity/models.py:194 +#, fuzzy, python-brace-format +#| msgid "Entry for activity \"{}\"" +msgid "Entry for {note} to the activity {activity}" +msgstr "Eintritt zur Veranstaltung \"{}\"" + +#: apps/activity/models.py:201 msgid "Already entered on " msgstr "Schon eingetretten " -#: apps/activity/models.py:195 apps/activity/tables.py:54 +#: apps/activity/models.py:201 apps/activity/tables.py:54 msgid "{:%Y-%m-%d %H:%M:%S}" msgstr "{:%Y-%m-%d %H:%M:%S}" -#: apps/activity/models.py:203 +#: apps/activity/models.py:209 msgid "The balance is negative." msgstr "Kontostand ist im Rot." -#: apps/activity/models.py:233 +#: apps/activity/models.py:239 msgid "last name" msgstr "Nachname" -#: apps/activity/models.py:238 +#: apps/activity/models.py:244 #: apps/member/templates/member/includes/profile_info.html:4 #: apps/registration/templates/registration/future_profile_detail.html:16 #: apps/wei/templates/wei/weimembership_form.html:14 msgid "first name" msgstr "Vorname" -#: apps/activity/models.py:245 +#: apps/activity/models.py:251 msgid "inviter" msgstr "Einlader" -#: apps/activity/models.py:289 +#: apps/activity/models.py:295 msgid "guest" msgstr "Gast" -#: apps/activity/models.py:290 +#: apps/activity/models.py:296 msgid "guests" msgstr "Gäste" -#: apps/activity/models.py:302 +#: apps/activity/models.py:308 msgid "Invitation" msgstr "Einladung" @@ -240,7 +251,7 @@ msgstr "Eingetreten um " msgid "remove" msgstr "entfernen" -#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:186 +#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:192 msgid "Type" msgstr "Type" @@ -270,7 +281,7 @@ msgid "Guests list" msgstr "Gastliste" #: apps/activity/templates/activity/activity_entry.html:14 -#: apps/note/models/transactions.py:259 +#: apps/note/models/transactions.py:253 #: apps/note/templates/note/transaction_form.html:16 #: apps/note/templates/note/transaction_form.html:148 #: note_kfet/templates/base.html:70 @@ -278,13 +289,13 @@ msgid "Transfer" msgstr "Überweisen" #: apps/activity/templates/activity/activity_entry.html:18 -#: apps/note/models/transactions.py:318 +#: apps/note/models/transactions.py:312 #: apps/note/templates/note/transaction_form.html:21 msgid "Credit" msgstr "Kredit" #: apps/activity/templates/activity/activity_entry.html:21 -#: apps/note/models/transactions.py:318 +#: apps/note/models/transactions.py:312 #: apps/note/templates/note/transaction_form.html:25 msgid "Debit" msgstr "Soll" @@ -356,7 +367,7 @@ msgid "validate" msgstr "validate" #: apps/activity/templates/activity/includes/activity_info.html:71 -#: apps/logs/models.py:62 apps/note/tables.py:195 +#: apps/logs/models.py:64 apps/note/tables.py:195 msgid "edit" msgstr "bearbeiten" @@ -420,59 +431,64 @@ msgstr "Model" msgid "identifier" msgstr "Kennzeichnung" -#: apps/logs/models.py:48 +#: apps/logs/models.py:49 msgid "previous data" msgstr "ehemalige Daten" -#: apps/logs/models.py:53 +#: apps/logs/models.py:55 msgid "new data" msgstr "neue Daten" -#: apps/logs/models.py:61 +#: apps/logs/models.py:63 msgid "create" msgstr "schaffen" -#: apps/logs/models.py:63 apps/note/tables.py:165 apps/note/tables.py:201 +#: apps/logs/models.py:65 apps/note/tables.py:165 apps/note/tables.py:201 #: apps/permission/models.py:127 apps/treasury/tables.py:38 #: apps/wei/tables.py:75 msgid "delete" msgstr "entfernen" -#: apps/logs/models.py:66 +#: apps/logs/models.py:68 msgid "action" msgstr "Aktion" -#: apps/logs/models.py:74 +#: apps/logs/models.py:76 msgid "timestamp" msgstr "Zeitstempel" -#: apps/logs/models.py:78 +#: apps/logs/models.py:80 msgid "Logs cannot be destroyed." msgstr "Logs können nicht entfernen sein." -#: apps/logs/models.py:81 +#: apps/logs/models.py:83 msgid "changelog" msgstr "Changelog" -#: apps/logs/models.py:82 +#: apps/logs/models.py:84 msgid "changelogs" msgstr "Changelogs" -#: apps/member/admin.py:50 apps/member/models.py:227 +#: apps/logs/models.py:87 +#, python-brace-format +msgid "Changelog of type \"{action}\" for model {model} at {timestamp}" +msgstr "Changelog \"{action}\" für Model {model} an {timestamp}" + +#: apps/member/admin.py:50 apps/member/models.py:226 #: apps/member/templates/member/includes/club_info.html:34 msgid "membership fee (paid students)" msgstr "Mitgliedschaftpreis (bezahlte Studenten)" -#: apps/member/admin.py:51 apps/member/models.py:232 +#: apps/member/admin.py:51 apps/member/models.py:231 #: apps/member/templates/member/includes/club_info.html:37 msgid "membership fee (unpaid students)" msgstr "Mitgliedschaftpreis (unbezahlte Studenten)" -#: apps/member/admin.py:65 apps/member/models.py:316 +#: apps/member/admin.py:65 apps/member/models.py:315 msgid "roles" msgstr "Rollen" -#: apps/member/admin.py:66 apps/member/models.py:330 +#: apps/member/admin.py:66 apps/member/models.py:329 msgid "fee" msgstr "Preis" @@ -666,19 +682,19 @@ msgstr "bezahlt" msgid "Tells if the user receive a salary." msgstr "User ist bezahlt." -#: apps/member/models.py:101 apps/treasury/tables.py:146 +#: apps/member/models.py:100 apps/treasury/tables.py:146 msgid "No" msgstr "Nein" -#: apps/member/models.py:102 +#: apps/member/models.py:101 msgid "Yes (receive them in french)" msgstr "Ja (auf Fränzosich)" -#: apps/member/models.py:103 +#: apps/member/models.py:102 msgid "Yes (receive them in english)" msgstr "Ja (auf English)" -#: apps/member/models.py:105 +#: apps/member/models.py:104 msgid "" "Register on the mailing list to stay informed of the events of the campus (1 " "mail/week)" @@ -686,7 +702,7 @@ msgstr "" "Melden Sie sich auf der Mailingliste an, um über die Ereignisse des Campus " "informiert zu bleiben (1 Mail / Woche)" -#: apps/member/models.py:110 +#: apps/member/models.py:109 msgid "" "Register on the mailing list to stay informed of the sport events of the " "campus (1 mail/week)" @@ -694,7 +710,7 @@ msgstr "" "Melden Sie sich auf der Mailingliste an, um über die Sportereignisse des " "Campus informiert zu bleiben (1 Mail / Woche)" -#: apps/member/models.py:115 +#: apps/member/models.py:114 msgid "" "Register on the mailing list to stay informed of the art events of the " "campus (1 mail/week)" @@ -702,31 +718,31 @@ msgstr "" "Melden Sie sich auf der Mailingliste an, um über die Kunstereignisse des " "Campus informiert zu bleiben (1 Mail / Woche)" -#: apps/member/models.py:119 +#: apps/member/models.py:118 msgid "report frequency (in days)" msgstr "Bericht Frequenz (Tagen)" -#: apps/member/models.py:124 +#: apps/member/models.py:123 msgid "last report date" msgstr "letzen Bericht Datum" -#: apps/member/models.py:129 +#: apps/member/models.py:128 msgid "email confirmed" msgstr "email bestätigt" -#: apps/member/models.py:134 +#: apps/member/models.py:133 msgid "registration valid" msgstr "Anmeldung gültig" -#: apps/member/models.py:163 apps/member/models.py:164 +#: apps/member/models.py:162 apps/member/models.py:163 msgid "user profile" msgstr "Userprofile" -#: apps/member/models.py:174 +#: apps/member/models.py:173 msgid "Activate your Note Kfet account" msgstr "Ihre Note Kfet Konto bestätigen" -#: apps/member/models.py:205 +#: apps/member/models.py:204 #: apps/member/templates/member/includes/club_info.html:55 #: apps/member/templates/member/includes/profile_info.html:31 #: apps/registration/templates/registration/future_profile_detail.html:22 @@ -735,88 +751,88 @@ msgstr "Ihre Note Kfet Konto bestätigen" msgid "email" msgstr "Email" -#: apps/member/models.py:212 +#: apps/member/models.py:211 msgid "parent club" msgstr "Urclub" -#: apps/member/models.py:221 +#: apps/member/models.py:220 msgid "require memberships" msgstr "erfordern Mitgliedschaft" -#: apps/member/models.py:222 +#: apps/member/models.py:221 msgid "Uncheck if this club don't require memberships." msgstr "" "Deaktivieren Sie diese Option, wenn für diesen Club keine Mitgliedschaft " "erforderlich ist." -#: apps/member/models.py:238 +#: apps/member/models.py:237 #: apps/member/templates/member/includes/club_info.html:26 msgid "membership duration" msgstr "Mitgliedscahftzeit" -#: apps/member/models.py:239 +#: apps/member/models.py:238 msgid "The longest time (in days) a membership can last (NULL = infinite)." msgstr "Wie lang am höchsten eine Mitgliedschaft dauern kann." -#: apps/member/models.py:246 +#: apps/member/models.py:245 #: apps/member/templates/member/includes/club_info.html:16 msgid "membership start" msgstr "Mitgliedschaftanfangsdatum" -#: apps/member/models.py:247 +#: apps/member/models.py:246 msgid "Date from which the members can renew their membership." msgstr "Ab wann kann man sein Mitgliedschaft erneuern." -#: apps/member/models.py:253 +#: apps/member/models.py:252 #: apps/member/templates/member/includes/club_info.html:21 msgid "membership end" msgstr "Mitgliedschaftenddatum" -#: apps/member/models.py:254 +#: apps/member/models.py:253 msgid "Maximal date of a membership, after which members must renew it." msgstr "" "Maximales Datum einer Mitgliedschaft, nach dem Mitglieder es erneuern müssen." -#: apps/member/models.py:286 apps/member/models.py:311 +#: apps/member/models.py:285 apps/member/models.py:310 #: apps/note/models/notes.py:185 msgid "club" msgstr "Club" -#: apps/member/models.py:287 +#: apps/member/models.py:286 msgid "clubs" msgstr "Clubs" -#: apps/member/models.py:321 +#: apps/member/models.py:320 msgid "membership starts on" msgstr "Mitgliedschaft fängt an" -#: apps/member/models.py:325 +#: apps/member/models.py:324 msgid "membership ends on" msgstr "Mitgliedschaft endet am" -#: apps/member/models.py:420 +#: apps/member/models.py:419 #, python-brace-format msgid "The role {role} does not apply to the club {club}." msgstr "Die Rolle {role} ist nicht erlaubt für das Club {club}." -#: apps/member/models.py:429 apps/member/views.py:628 +#: apps/member/models.py:428 apps/member/views.py:628 msgid "User is already a member of the club" msgstr "User ist schon ein Mitglied dieser club" -#: apps/member/models.py:441 +#: apps/member/models.py:440 msgid "User is not a member of the parent club" msgstr "User ist noch nicht Mitglied des Urclubs" -#: apps/member/models.py:489 +#: apps/member/models.py:488 #, python-brace-format msgid "Membership of {user} for the club {club}" msgstr "Mitgliedschaft von {user} für das Club {club}" -#: apps/member/models.py:492 apps/note/models/transactions.py:359 +#: apps/member/models.py:491 apps/note/models/transactions.py:353 msgid "membership" msgstr "Mitgliedschaft" -#: apps/member/models.py:493 +#: apps/member/models.py:492 msgid "memberships" msgstr "Mitgliedschaften" @@ -1116,22 +1132,22 @@ msgstr "Rollen in diesen Club bearbeiten" msgid "Members of the club" msgstr "Mitlglieder dieses Club" -#: apps/note/admin.py:129 apps/note/models/transactions.py:106 +#: apps/note/admin.py:129 apps/note/models/transactions.py:109 msgid "source" msgstr "Sender" #: apps/note/admin.py:137 apps/note/admin.py:205 -#: apps/note/models/transactions.py:56 apps/note/models/transactions.py:119 +#: apps/note/models/transactions.py:56 apps/note/models/transactions.py:122 msgid "destination" msgstr "Empfänger" #: apps/note/admin.py:210 apps/note/models/transactions.py:60 -#: apps/note/models/transactions.py:137 +#: apps/note/models/transactions.py:140 msgid "amount" msgstr "Anzahl" #: apps/note/api/serializers.py:183 apps/note/api/serializers.py:189 -#: apps/note/models/transactions.py:224 +#: apps/note/models/transactions.py:226 msgid "" "The transaction can't be saved since the source note or the destination note " "is not active." @@ -1191,7 +1207,7 @@ msgstr "letztes mal im Rot" msgid "display image" msgstr "Bild" -#: apps/note/models/notes.py:54 apps/note/models/transactions.py:129 +#: apps/note/models/notes.py:54 apps/note/models/transactions.py:132 msgid "created at" msgstr "erschafft am" @@ -1316,33 +1332,33 @@ msgstr "Transaktionsvorlage" msgid "transaction templates" msgstr "Transaktionsvorlagen" -#: apps/note/models/transactions.py:112 apps/note/models/transactions.py:125 +#: apps/note/models/transactions.py:115 apps/note/models/transactions.py:128 #: apps/note/tables.py:34 apps/note/tables.py:44 msgid "used alias" msgstr "benutzte Aliasen" -#: apps/note/models/transactions.py:133 +#: apps/note/models/transactions.py:136 msgid "quantity" msgstr "Anzahl" -#: apps/note/models/transactions.py:141 +#: apps/note/models/transactions.py:144 msgid "reason" msgstr "Grund" -#: apps/note/models/transactions.py:151 apps/note/tables.py:140 +#: apps/note/models/transactions.py:154 apps/note/tables.py:140 msgid "invalidity reason" msgstr "Ungültigkeit Grund" -#: apps/note/models/transactions.py:159 +#: apps/note/models/transactions.py:161 msgid "transaction" msgstr "Transaktion" -#: apps/note/models/transactions.py:160 +#: apps/note/models/transactions.py:162 #: apps/treasury/templates/treasury/sogecredit_detail.html:22 msgid "transactions" msgstr "Transaktionen" -#: apps/note/models/transactions.py:182 +#: apps/note/models/transactions.py:184 #, python-brace-format msgid "" "You can't update the {field} on a Transaction. Please invalidate it and " @@ -1351,7 +1367,7 @@ msgstr "" "Sie können das {field} einer Transaktion nicht aktualisieren. Bitte machen " "Sie es ungültig und erstellen Sie eine andere." -#: apps/note/models/transactions.py:202 +#: apps/note/models/transactions.py:204 msgid "" "The note balances must be between - 92 233 720 368 547 758.08 € and 92 233 " "720 368 547 758.07 €." @@ -1359,34 +1375,34 @@ msgstr "" "Die Notenguthaben müssen zwischen - 92 233 720 368 547 758,08 € und 92 233 " "720 368 547 758,07 € liegen." -#: apps/note/models/transactions.py:279 +#: apps/note/models/transactions.py:273 msgid "" "The destination of this transaction must equal to the destination of the " "template." msgstr "" "Der Empfänger dieser Transaktion muss dem Empfänger der Vorlage entsprechen." -#: apps/note/models/transactions.py:288 +#: apps/note/models/transactions.py:282 msgid "Template" msgstr "Vorlage" -#: apps/note/models/transactions.py:291 +#: apps/note/models/transactions.py:285 msgid "recurrent transaction" msgstr "wiederkehrende Transaktion" -#: apps/note/models/transactions.py:292 +#: apps/note/models/transactions.py:286 msgid "recurrent transactions" msgstr "wiederkehrende Transaktionen" -#: apps/note/models/transactions.py:307 +#: apps/note/models/transactions.py:301 msgid "first_name" msgstr "Vorname" -#: apps/note/models/transactions.py:312 +#: apps/note/models/transactions.py:306 msgid "bank" msgstr "Bank" -#: apps/note/models/transactions.py:329 +#: apps/note/models/transactions.py:323 msgid "" "A special transaction is only possible between a Note associated to a " "payment method and a User or a Club" @@ -1394,19 +1410,19 @@ msgstr "" "Eine Sondertransaktion ist nur zwischen einer Note, die einer " "Zahlungsmethode zugeordnet ist, und einem User oder einem Club möglich" -#: apps/note/models/transactions.py:337 +#: apps/note/models/transactions.py:331 msgid "Special transaction" msgstr "Sondertransaktion" -#: apps/note/models/transactions.py:338 +#: apps/note/models/transactions.py:332 msgid "Special transactions" msgstr "Sondertranskationen" -#: apps/note/models/transactions.py:354 +#: apps/note/models/transactions.py:348 msgid "membership transaction" msgstr "Mitgliedschafttransaktion" -#: apps/note/models/transactions.py:355 apps/treasury/models.py:273 +#: apps/note/models/transactions.py:349 apps/treasury/models.py:282 msgid "membership transactions" msgstr "Mitgliedschaftttransaktionen" @@ -1678,7 +1694,7 @@ msgstr "" "Sie haben nicht die Berechtigung, das Feld {field} in dieser Instanz von " "Modell {app_label} zu ändern. {model_name}" -#: apps/permission/signals.py:73 apps/permission/views.py:89 +#: apps/permission/signals.py:73 apps/permission/views.py:101 #, python-brace-format msgid "" "You don't have the permission to add an instance of model {app_label}." @@ -1736,7 +1752,7 @@ msgstr "Abfrage:" msgid "No associated permission" msgstr "Keine zugehörige Berechtigung" -#: apps/permission/views.py:56 +#: apps/permission/views.py:68 #, python-brace-format msgid "" "You don't have the permission to update this instance of the model " @@ -1746,7 +1762,7 @@ msgstr "" "diesen Parametern zu aktualisieren. Bitte korrigieren Sie Ihre Daten und " "versuchen Sie es erneut." -#: apps/permission/views.py:60 +#: apps/permission/views.py:72 #, python-brace-format msgid "" "You don't have the permission to create an instance of the model \"{model}\" " @@ -1756,11 +1772,11 @@ msgstr "" "diesen Parametern zu erstellen. Bitte korrigieren Sie Ihre Daten und " "versuchen Sie es erneut." -#: apps/permission/views.py:96 note_kfet/templates/base.html:106 +#: apps/permission/views.py:108 note_kfet/templates/base.html:106 msgid "Rights" msgstr "Rechten" -#: apps/permission/views.py:101 +#: apps/permission/views.py:113 msgid "All rights" msgstr "Alle Rechten" @@ -1967,7 +1983,7 @@ msgstr "Überweisung ist bereits geschlossen." msgid "You can't change the type of the remittance." msgstr "Sie können die Art der Überweisung nicht ändern." -#: apps/treasury/forms.py:123 apps/treasury/models.py:252 +#: apps/treasury/forms.py:123 apps/treasury/models.py:258 #: apps/treasury/tables.py:97 apps/treasury/tables.py:105 #: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16 @@ -1999,7 +2015,7 @@ msgstr "Beschreibung" msgid "Address" msgstr "Adresse" -#: apps/treasury/models.py:60 apps/treasury/models.py:180 +#: apps/treasury/models.py:60 apps/treasury/models.py:186 msgid "Date" msgstr "Datum" @@ -2019,7 +2035,7 @@ msgstr "Eine Rechnung kann nicht bearbeitet werden, wenn sie gesperrt ist." msgid "tex source" msgstr "Tex Quelle" -#: apps/treasury/models.py:109 apps/treasury/models.py:122 +#: apps/treasury/models.py:109 apps/treasury/models.py:125 msgid "invoice" msgstr "Rechnung" @@ -2027,67 +2043,73 @@ msgstr "Rechnung" msgid "invoices" msgstr "Rechnungen" -#: apps/treasury/models.py:127 +#: apps/treasury/models.py:113 +#, fuzzy, python-brace-format +#| msgid "Invoice #{:d}" +msgid "Invoice #{id}" +msgstr "Rechnung #{:d}" + +#: apps/treasury/models.py:130 msgid "Designation" msgstr "Bezeichnung" -#: apps/treasury/models.py:131 +#: apps/treasury/models.py:134 msgid "Quantity" msgstr "Qualität" -#: apps/treasury/models.py:135 +#: apps/treasury/models.py:138 msgid "Unit price" msgstr "Einzelpreis" -#: apps/treasury/models.py:151 +#: apps/treasury/models.py:154 msgid "product" msgstr "Produkt" -#: apps/treasury/models.py:152 +#: apps/treasury/models.py:155 msgid "products" msgstr "Produkten" -#: apps/treasury/models.py:169 +#: apps/treasury/models.py:175 msgid "remittance type" msgstr "Überweisungstyp" -#: apps/treasury/models.py:170 +#: apps/treasury/models.py:176 msgid "remittance types" msgstr "Überweisungstypen" -#: apps/treasury/models.py:191 +#: apps/treasury/models.py:197 msgid "Comment" msgstr "Kommentar" -#: apps/treasury/models.py:196 +#: apps/treasury/models.py:202 msgid "Closed" msgstr "Geschlossen" -#: apps/treasury/models.py:200 +#: apps/treasury/models.py:206 msgid "remittance" msgstr "Überweisung" -#: apps/treasury/models.py:201 +#: apps/treasury/models.py:207 msgid "remittances" msgstr "Überweisungen" -#: apps/treasury/models.py:233 +#: apps/treasury/models.py:239 msgid "Remittance #{:d}: {}" msgstr "Überweisung #{:d}:{}" -#: apps/treasury/models.py:256 +#: apps/treasury/models.py:262 msgid "special transaction proxy" msgstr "spezielle Transaktion Proxy" -#: apps/treasury/models.py:257 +#: apps/treasury/models.py:263 msgid "special transaction proxies" msgstr "spezielle Transaktion Proxies" -#: apps/treasury/models.py:279 +#: apps/treasury/models.py:288 msgid "credit transaction" msgstr "Kredit Transaktion" -#: apps/treasury/models.py:343 +#: apps/treasury/models.py:352 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." @@ -2095,15 +2117,20 @@ msgstr "" "Dieser Benutzer hat nicht genug Geld, um die Mitgliedschaften mit seiner " "Note zu bezahlen." -#: apps/treasury/models.py:355 +#: apps/treasury/models.py:364 #: apps/treasury/templates/treasury/sogecredit_detail.html:10 msgid "Credit from the Société générale" msgstr "Kredit von der Société générale" -#: apps/treasury/models.py:356 +#: apps/treasury/models.py:365 msgid "Credits from the Société générale" msgstr "Krediten von der Société générale" +#: apps/treasury/models.py:368 +#, python-brace-format +msgid "Soge credit for {user}" +msgstr "Kredit von der Société générale für {user}" + #: apps/treasury/tables.py:20 msgid "Invoice #{:d}" msgstr "Rechnung #{:d}" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 353e342a..7c2ee43b 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-06 20:16+0200\n" +"POT-Creation-Date: 2020-09-07 11:14+0200\n" "PO-Revision-Date: 2020-09-02 23:18+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -27,33 +27,33 @@ msgstr "activité" 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:76 apps/activity/models.py:262 +#: apps/activity/forms.py:76 apps/activity/models.py:268 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:79 apps/activity/models.py:265 +#: apps/activity/forms.py:79 apps/activity/models.py:271 msgid "This activity is not validated yet." msgstr "Cette activité n'est pas encore validée." -#: apps/activity/forms.py:89 apps/activity/models.py:273 +#: apps/activity/forms.py:89 apps/activity/models.py:279 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:93 apps/activity/models.py:277 +#: apps/activity/forms.py:93 apps/activity/models.py:283 msgid "This person is already invited." msgstr "Cette personne est déjà invitée." -#: apps/activity/forms.py:97 apps/activity/models.py:281 +#: apps/activity/forms.py:97 apps/activity/models.py:287 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/member/models.py:200 +#: apps/member/models.py:199 #: apps/member/templates/member/includes/club_info.html:4 #: apps/member/templates/member/includes/profile_info.html:4 #: apps/note/models/notes.py:253 apps/note/models/transactions.py:26 -#: apps/note/models/transactions.py:46 apps/note/models/transactions.py:302 +#: apps/note/models/transactions.py:46 apps/note/models/transactions.py:296 #: apps/permission/models.py:329 #: apps/registration/templates/registration/future_profile_detail.html:16 #: apps/wei/models.py:66 apps/wei/models.py:118 @@ -110,8 +110,8 @@ msgstr "Lieu où l'activité est organisée, par exemple la Kfet." msgid "type" msgstr "type" -#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305 -#: apps/note/models/notes.py:144 apps/treasury/models.py:267 +#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:304 +#: apps/note/models/notes.py:144 apps/treasury/models.py:276 #: apps/treasury/templates/treasury/sogecredit_detail.html:14 #: apps/wei/models.py:160 apps/wei/templates/wei/survey.html:15 msgid "user" @@ -149,7 +149,7 @@ msgstr "date de fin" #: apps/activity/models.py:118 #: apps/activity/templates/activity/includes/activity_info.html:50 -#: apps/note/models/transactions.py:146 +#: apps/note/models/transactions.py:149 msgid "valid" msgstr "valide" @@ -181,42 +181,52 @@ msgstr "entrée" msgid "entries" msgstr "entrées" -#: apps/activity/models.py:195 +#: apps/activity/models.py:192 +#, python-brace-format +msgid "Entry for {guest}, invited by {note} to the activity {activity}" +msgstr "Entrée pour {guest}, invité par {note} à l'activité {activity}" + +#: apps/activity/models.py:194 +#, python-brace-format +msgid "Entry for {note} to the activity {activity}" +msgstr "Entrée de la note {note} pour l'activité « {activity} »" + +#: apps/activity/models.py:201 msgid "Already entered on " msgstr "Déjà rentré le " -#: apps/activity/models.py:195 apps/activity/tables.py:54 +#: apps/activity/models.py:201 apps/activity/tables.py:54 msgid "{:%Y-%m-%d %H:%M:%S}" msgstr "{:%d/%m/%Y %H:%M:%S}" -#: apps/activity/models.py:203 +#: apps/activity/models.py:209 msgid "The balance is negative." msgstr "La note est en négatif." -#: apps/activity/models.py:233 +#: apps/activity/models.py:239 msgid "last name" msgstr "nom de famille" -#: apps/activity/models.py:238 +#: apps/activity/models.py:244 #: apps/member/templates/member/includes/profile_info.html:4 #: apps/registration/templates/registration/future_profile_detail.html:16 #: apps/wei/templates/wei/weimembership_form.html:14 msgid "first name" msgstr "prénom" -#: apps/activity/models.py:245 +#: apps/activity/models.py:251 msgid "inviter" msgstr "hôte" -#: apps/activity/models.py:289 +#: apps/activity/models.py:295 msgid "guest" msgstr "invité" -#: apps/activity/models.py:290 +#: apps/activity/models.py:296 msgid "guests" msgstr "invités" -#: apps/activity/models.py:302 +#: apps/activity/models.py:308 msgid "Invitation" msgstr "Invitation" @@ -240,7 +250,7 @@ msgstr "Entré le " msgid "remove" msgstr "supprimer" -#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:186 +#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:192 msgid "Type" msgstr "Type" @@ -270,7 +280,7 @@ msgid "Guests list" msgstr "Liste des invités" #: apps/activity/templates/activity/activity_entry.html:14 -#: apps/note/models/transactions.py:259 +#: apps/note/models/transactions.py:253 #: apps/note/templates/note/transaction_form.html:16 #: apps/note/templates/note/transaction_form.html:148 #: note_kfet/templates/base.html:70 @@ -278,13 +288,13 @@ msgid "Transfer" msgstr "Virement" #: apps/activity/templates/activity/activity_entry.html:18 -#: apps/note/models/transactions.py:318 +#: apps/note/models/transactions.py:312 #: apps/note/templates/note/transaction_form.html:21 msgid "Credit" msgstr "Crédit" #: apps/activity/templates/activity/activity_entry.html:21 -#: apps/note/models/transactions.py:318 +#: apps/note/models/transactions.py:312 #: apps/note/templates/note/transaction_form.html:25 msgid "Debit" msgstr "Débit" @@ -356,7 +366,7 @@ msgid "validate" msgstr "valider" #: apps/activity/templates/activity/includes/activity_info.html:71 -#: apps/logs/models.py:62 apps/note/tables.py:195 +#: apps/logs/models.py:64 apps/note/tables.py:195 msgid "edit" msgstr "modifier" @@ -422,59 +432,64 @@ msgstr "modèle" msgid "identifier" msgstr "identifiant" -#: apps/logs/models.py:48 +#: apps/logs/models.py:49 msgid "previous data" msgstr "données précédentes" -#: apps/logs/models.py:53 +#: apps/logs/models.py:55 msgid "new data" msgstr "ouvelles données" -#: apps/logs/models.py:61 +#: apps/logs/models.py:63 msgid "create" msgstr "créer" -#: apps/logs/models.py:63 apps/note/tables.py:165 apps/note/tables.py:201 +#: apps/logs/models.py:65 apps/note/tables.py:165 apps/note/tables.py:201 #: apps/permission/models.py:127 apps/treasury/tables.py:38 #: apps/wei/tables.py:75 msgid "delete" msgstr "supprimer" -#: apps/logs/models.py:66 +#: apps/logs/models.py:68 msgid "action" msgstr "action" -#: apps/logs/models.py:74 +#: apps/logs/models.py:76 msgid "timestamp" msgstr "date" -#: apps/logs/models.py:78 +#: apps/logs/models.py:80 msgid "Logs cannot be destroyed." msgstr "Les logs ne peuvent pas être détruits." -#: apps/logs/models.py:81 +#: apps/logs/models.py:83 msgid "changelog" msgstr "journal de modification" -#: apps/logs/models.py:82 +#: apps/logs/models.py:84 msgid "changelogs" msgstr "journaux de modifications" -#: apps/member/admin.py:50 apps/member/models.py:227 +#: apps/logs/models.py:87 +#, python-brace-format +msgid "Changelog of type \"{action}\" for model {model} at {timestamp}" +msgstr "Changelog de type « {action} » pour le modèle {model} à {timestamp}" + +#: apps/member/admin.py:50 apps/member/models.py:226 #: apps/member/templates/member/includes/club_info.html:34 msgid "membership fee (paid students)" msgstr "cotisation pour adhérer (normalien élève)" -#: apps/member/admin.py:51 apps/member/models.py:232 +#: apps/member/admin.py:51 apps/member/models.py:231 #: apps/member/templates/member/includes/club_info.html:37 msgid "membership fee (unpaid students)" msgstr "cotisation pour adhérer (normalien étudiant)" -#: apps/member/admin.py:65 apps/member/models.py:316 +#: apps/member/admin.py:65 apps/member/models.py:315 msgid "roles" msgstr "rôles" -#: apps/member/admin.py:66 apps/member/models.py:330 +#: apps/member/admin.py:66 apps/member/models.py:329 msgid "fee" msgstr "cotisation" @@ -668,19 +683,19 @@ msgstr "payé" msgid "Tells if the user receive a salary." msgstr "Indique si l'utilisateur perçoit un salaire." -#: apps/member/models.py:101 apps/treasury/tables.py:146 +#: apps/member/models.py:100 apps/treasury/tables.py:146 msgid "No" msgstr "Non" -#: apps/member/models.py:102 +#: apps/member/models.py:101 msgid "Yes (receive them in french)" msgstr "Oui (les recevoir en français)" -#: apps/member/models.py:103 +#: apps/member/models.py:102 msgid "Yes (receive them in english)" msgstr "Oui (les recevoir en anglais)" -#: apps/member/models.py:105 +#: apps/member/models.py:104 msgid "" "Register on the mailing list to stay informed of the events of the campus (1 " "mail/week)" @@ -688,7 +703,7 @@ msgstr "" "S'inscrire sur la liste de diffusion pour rester informé des événements sur " "le campus (1 mail par semaine)" -#: apps/member/models.py:110 +#: apps/member/models.py:109 msgid "" "Register on the mailing list to stay informed of the sport events of the " "campus (1 mail/week)" @@ -696,7 +711,7 @@ msgstr "" "S'inscrire sur la liste de diffusion pour rester informé des actualités " "sportives sur le campus (1 mail par semaine)" -#: apps/member/models.py:115 +#: apps/member/models.py:114 msgid "" "Register on the mailing list to stay informed of the art events of the " "campus (1 mail/week)" @@ -704,31 +719,31 @@ msgstr "" "S'inscrire sur la liste de diffusion pour rester informé des actualités " "artistiques sur le campus (1 mail par semaine)" -#: apps/member/models.py:119 +#: apps/member/models.py:118 msgid "report frequency (in days)" msgstr "fréquence des rapports (en jours)" -#: apps/member/models.py:124 +#: apps/member/models.py:123 msgid "last report date" msgstr "date de dernier rapport" -#: apps/member/models.py:129 +#: apps/member/models.py:128 msgid "email confirmed" msgstr "adresse email confirmée" -#: apps/member/models.py:134 +#: apps/member/models.py:133 msgid "registration valid" msgstr "inscription valide" -#: apps/member/models.py:163 apps/member/models.py:164 +#: apps/member/models.py:162 apps/member/models.py:163 msgid "user profile" msgstr "profil utilisateur" -#: apps/member/models.py:174 +#: apps/member/models.py:173 msgid "Activate your Note Kfet account" msgstr "Activez votre compte Note Kfet" -#: apps/member/models.py:205 +#: apps/member/models.py:204 #: apps/member/templates/member/includes/club_info.html:55 #: apps/member/templates/member/includes/profile_info.html:31 #: apps/registration/templates/registration/future_profile_detail.html:22 @@ -737,88 +752,88 @@ msgstr "Activez votre compte Note Kfet" msgid "email" msgstr "courriel" -#: apps/member/models.py:212 +#: apps/member/models.py:211 msgid "parent club" msgstr "club parent" -#: apps/member/models.py:221 +#: apps/member/models.py:220 msgid "require memberships" msgstr "nécessite des adhésions" -#: apps/member/models.py:222 +#: apps/member/models.py:221 msgid "Uncheck if this club don't require memberships." msgstr "Décochez si ce club n'utilise pas d'adhésions." -#: apps/member/models.py:238 +#: apps/member/models.py:237 #: apps/member/templates/member/includes/club_info.html:26 msgid "membership duration" msgstr "durée de l'adhésion" -#: apps/member/models.py:239 +#: apps/member/models.py:238 msgid "The longest time (in days) a membership can last (NULL = infinite)." msgstr "La durée maximale (en jours) d'une adhésion (NULL = infinie)." -#: apps/member/models.py:246 +#: apps/member/models.py:245 #: apps/member/templates/member/includes/club_info.html:16 msgid "membership start" msgstr "début de l'adhésion" -#: apps/member/models.py:247 +#: apps/member/models.py:246 msgid "Date from which the members can renew their membership." msgstr "" "Date à partir de laquelle les adhérents peuvent renouveler leur adhésion." -#: apps/member/models.py:253 +#: apps/member/models.py:252 #: apps/member/templates/member/includes/club_info.html:21 msgid "membership end" msgstr "fin de l'adhésion" -#: apps/member/models.py:254 +#: apps/member/models.py:253 msgid "Maximal date of a membership, after which members must renew it." msgstr "" "Date maximale d'une fin d'adhésion, après laquelle les adhérents doivent la " "renouveler." -#: apps/member/models.py:286 apps/member/models.py:311 +#: apps/member/models.py:285 apps/member/models.py:310 #: apps/note/models/notes.py:185 msgid "club" msgstr "club" -#: apps/member/models.py:287 +#: apps/member/models.py:286 msgid "clubs" msgstr "clubs" -#: apps/member/models.py:321 +#: apps/member/models.py:320 msgid "membership starts on" msgstr "l'adhésion commence le" -#: apps/member/models.py:325 +#: apps/member/models.py:324 msgid "membership ends on" msgstr "l'adhésion finit le" -#: apps/member/models.py:420 +#: apps/member/models.py:419 #, python-brace-format msgid "The role {role} does not apply to the club {club}." msgstr "Le rôle {role} ne s'applique pas au club {club}." -#: apps/member/models.py:429 apps/member/views.py:628 +#: apps/member/models.py:428 apps/member/views.py:628 msgid "User is already a member of the club" msgstr "L'utilisateur est déjà membre du club" -#: apps/member/models.py:441 +#: apps/member/models.py:440 msgid "User is not a member of the parent club" msgstr "L'utilisateur n'est pas membre du club parent" -#: apps/member/models.py:489 +#: apps/member/models.py:488 #, python-brace-format msgid "Membership of {user} for the club {club}" msgstr "Adhésion de {user} pour le club {club}" -#: apps/member/models.py:492 apps/note/models/transactions.py:359 +#: apps/member/models.py:491 apps/note/models/transactions.py:353 msgid "membership" msgstr "adhésion" -#: apps/member/models.py:493 +#: apps/member/models.py:492 msgid "memberships" msgstr "adhésions" @@ -1118,22 +1133,22 @@ msgstr "Gérer les rôles d'un utilisateur dans le club" msgid "Members of the club" msgstr "Membres du club" -#: apps/note/admin.py:129 apps/note/models/transactions.py:106 +#: apps/note/admin.py:129 apps/note/models/transactions.py:109 msgid "source" msgstr "source" #: apps/note/admin.py:137 apps/note/admin.py:205 -#: apps/note/models/transactions.py:56 apps/note/models/transactions.py:119 +#: apps/note/models/transactions.py:56 apps/note/models/transactions.py:122 msgid "destination" msgstr "destination" #: apps/note/admin.py:210 apps/note/models/transactions.py:60 -#: apps/note/models/transactions.py:137 +#: apps/note/models/transactions.py:140 msgid "amount" msgstr "montant" #: apps/note/api/serializers.py:183 apps/note/api/serializers.py:189 -#: apps/note/models/transactions.py:224 +#: apps/note/models/transactions.py:226 msgid "" "The transaction can't be saved since the source note or the destination note " "is not active." @@ -1193,7 +1208,7 @@ msgstr "dernier instant où la note était en négatif" msgid "display image" msgstr "image affichée" -#: apps/note/models/notes.py:54 apps/note/models/transactions.py:129 +#: apps/note/models/notes.py:54 apps/note/models/transactions.py:132 msgid "created at" msgstr "créée le" @@ -1319,33 +1334,33 @@ msgstr "modèle de transaction" msgid "transaction templates" msgstr "modèles de transaction" -#: apps/note/models/transactions.py:112 apps/note/models/transactions.py:125 +#: apps/note/models/transactions.py:115 apps/note/models/transactions.py:128 #: apps/note/tables.py:34 apps/note/tables.py:44 msgid "used alias" msgstr "alias utilisé" -#: apps/note/models/transactions.py:133 +#: apps/note/models/transactions.py:136 msgid "quantity" msgstr "quantité" -#: apps/note/models/transactions.py:141 +#: apps/note/models/transactions.py:144 msgid "reason" msgstr "raison" -#: apps/note/models/transactions.py:151 apps/note/tables.py:140 +#: apps/note/models/transactions.py:154 apps/note/tables.py:140 msgid "invalidity reason" msgstr "motif d'invalidité" -#: apps/note/models/transactions.py:159 +#: apps/note/models/transactions.py:161 msgid "transaction" msgstr "transaction" -#: apps/note/models/transactions.py:160 +#: apps/note/models/transactions.py:162 #: apps/treasury/templates/treasury/sogecredit_detail.html:22 msgid "transactions" msgstr "transactions" -#: apps/note/models/transactions.py:182 +#: apps/note/models/transactions.py:184 #, python-brace-format msgid "" "You can't update the {field} on a Transaction. Please invalidate it and " @@ -1354,7 +1369,7 @@ msgstr "" "Vous ne pouvez pas mettre à jour le champ {field} dans une transaction. " "Merci de l'invalider et d'en créer une autre." -#: apps/note/models/transactions.py:202 +#: apps/note/models/transactions.py:204 msgid "" "The note balances must be between - 92 233 720 368 547 758.08 € and 92 233 " "720 368 547 758.07 €." @@ -1363,7 +1378,7 @@ msgstr "" "€ et 92 233 720 368 547 758.07 €. Ne cherchez pas à capitaliser l'argent du " "BDE." -#: apps/note/models/transactions.py:279 +#: apps/note/models/transactions.py:273 msgid "" "The destination of this transaction must equal to the destination of the " "template." @@ -1371,27 +1386,27 @@ msgstr "" "Le destinataire de cette transaction doit être identique à celui du bouton " "utilisé." -#: apps/note/models/transactions.py:288 +#: apps/note/models/transactions.py:282 msgid "Template" msgstr "Bouton" -#: apps/note/models/transactions.py:291 +#: apps/note/models/transactions.py:285 msgid "recurrent transaction" msgstr "transaction issue de bouton" -#: apps/note/models/transactions.py:292 +#: apps/note/models/transactions.py:286 msgid "recurrent transactions" msgstr "transactions issues de boutons" -#: apps/note/models/transactions.py:307 +#: apps/note/models/transactions.py:301 msgid "first_name" msgstr "prénom" -#: apps/note/models/transactions.py:312 +#: apps/note/models/transactions.py:306 msgid "bank" msgstr "banque" -#: apps/note/models/transactions.py:329 +#: apps/note/models/transactions.py:323 msgid "" "A special transaction is only possible between a Note associated to a " "payment method and a User or a Club" @@ -1399,19 +1414,19 @@ msgstr "" "Une transaction spéciale n'est possible que entre une note associée à un " "mode de paiement et un utilisateur ou un club" -#: apps/note/models/transactions.py:337 +#: apps/note/models/transactions.py:331 msgid "Special transaction" msgstr "Transaction de crédit/retrait" -#: apps/note/models/transactions.py:338 +#: apps/note/models/transactions.py:332 msgid "Special transactions" msgstr "Transactions de crédit/retrait" -#: apps/note/models/transactions.py:354 +#: apps/note/models/transactions.py:348 msgid "membership transaction" msgstr "transaction d'adhésion" -#: apps/note/models/transactions.py:355 apps/treasury/models.py:273 +#: apps/note/models/transactions.py:349 apps/treasury/models.py:282 msgid "membership transactions" msgstr "transactions d'adhésion" @@ -1685,7 +1700,7 @@ msgstr "" "Vous n'avez pas la permission de modifier le champ {field} sur l'instance du " "modèle {app_label}.{model_name}." -#: apps/permission/signals.py:73 apps/permission/views.py:89 +#: apps/permission/signals.py:73 apps/permission/views.py:101 #, python-brace-format msgid "" "You don't have the permission to add an instance of model {app_label}." @@ -1744,7 +1759,7 @@ msgstr "Requête :" msgid "No associated permission" msgstr "Pas de permission associée" -#: apps/permission/views.py:56 +#: apps/permission/views.py:68 #, python-brace-format msgid "" "You don't have the permission to update this instance of the model " @@ -1753,7 +1768,7 @@ msgstr "" "Vous n'avez pas la permission de modifier cette instance du modèle « {model} " "» avec ces paramètres. Merci de les corriger et de réessayer." -#: apps/permission/views.py:60 +#: apps/permission/views.py:72 #, python-brace-format msgid "" "You don't have the permission to create an instance of the model \"{model}\" " @@ -1762,11 +1777,11 @@ msgstr "" "Vous n'avez pas la permission d'ajouter une instance du modèle « {model} » " "avec ces paramètres. Merci de les corriger et de réessayer." -#: apps/permission/views.py:96 note_kfet/templates/base.html:106 +#: apps/permission/views.py:108 note_kfet/templates/base.html:106 msgid "Rights" msgstr "Droits" -#: apps/permission/views.py:101 +#: apps/permission/views.py:113 msgid "All rights" msgstr "Tous les droits" @@ -1971,7 +1986,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:123 apps/treasury/models.py:252 +#: apps/treasury/forms.py:123 apps/treasury/models.py:258 #: apps/treasury/tables.py:97 apps/treasury/tables.py:105 #: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16 @@ -2003,7 +2018,7 @@ msgstr "Description" msgid "Address" msgstr "Adresse" -#: apps/treasury/models.py:60 apps/treasury/models.py:180 +#: apps/treasury/models.py:60 apps/treasury/models.py:186 msgid "Date" msgstr "Date" @@ -2023,7 +2038,7 @@ msgstr "Une facture ne peut plus être modifiée si elle est verrouillée." msgid "tex source" msgstr "fichier TeX source" -#: apps/treasury/models.py:109 apps/treasury/models.py:122 +#: apps/treasury/models.py:109 apps/treasury/models.py:125 msgid "invoice" msgstr "facture" @@ -2031,67 +2046,72 @@ msgstr "facture" msgid "invoices" msgstr "factures" -#: apps/treasury/models.py:127 +#: apps/treasury/models.py:113 +#, python-brace-format +msgid "Invoice #{id}" +msgstr "Facture n°{id}" + +#: apps/treasury/models.py:130 msgid "Designation" msgstr "Désignation" -#: apps/treasury/models.py:131 +#: apps/treasury/models.py:134 msgid "Quantity" msgstr "Quantité" -#: apps/treasury/models.py:135 +#: apps/treasury/models.py:138 msgid "Unit price" msgstr "Prix unitaire" -#: apps/treasury/models.py:151 +#: apps/treasury/models.py:154 msgid "product" msgstr "produit" -#: apps/treasury/models.py:152 +#: apps/treasury/models.py:155 msgid "products" msgstr "produits" -#: apps/treasury/models.py:169 +#: apps/treasury/models.py:175 msgid "remittance type" msgstr "type de remise" -#: apps/treasury/models.py:170 +#: apps/treasury/models.py:176 msgid "remittance types" msgstr "types de remises" -#: apps/treasury/models.py:191 +#: apps/treasury/models.py:197 msgid "Comment" msgstr "Commentaire" -#: apps/treasury/models.py:196 +#: apps/treasury/models.py:202 msgid "Closed" msgstr "Fermée" -#: apps/treasury/models.py:200 +#: apps/treasury/models.py:206 msgid "remittance" msgstr "remise" -#: apps/treasury/models.py:201 +#: apps/treasury/models.py:207 msgid "remittances" msgstr "remises" -#: apps/treasury/models.py:233 +#: apps/treasury/models.py:239 msgid "Remittance #{:d}: {}" msgstr "Remise n°{:d} : {}" -#: apps/treasury/models.py:256 +#: apps/treasury/models.py:262 msgid "special transaction proxy" msgstr "proxy de transaction spéciale" -#: apps/treasury/models.py:257 +#: apps/treasury/models.py:263 msgid "special transaction proxies" msgstr "proxys de transactions spéciales" -#: apps/treasury/models.py:279 +#: apps/treasury/models.py:288 msgid "credit transaction" msgstr "transaction de crédit" -#: apps/treasury/models.py:343 +#: apps/treasury/models.py:352 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." @@ -2099,15 +2119,20 @@ msgstr "" "Cet utilisateur n'a pas assez d'argent pour payer les adhésions avec sa " "note. Merci de lui demander de recharger sa note avant d'invalider ce crédit." -#: apps/treasury/models.py:355 +#: apps/treasury/models.py:364 #: 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:356 +#: apps/treasury/models.py:365 msgid "Credits from the Société générale" msgstr "Crédits de la Société générale" +#: apps/treasury/models.py:368 +#, python-brace-format +msgid "Soge credit for {user}" +msgstr "Crédit de la société générale pour l'utilisateur {user}" + #: apps/treasury/tables.py:20 msgid "Invoice #{:d}" msgstr "Facture n°{:d}"