From 640f0f9a312dc0d3c2ebcfb8d8b903fe701e8758 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Wed, 22 Apr 2020 03:57:19 +0200 Subject: [PATCH] =?UTF-8?q?Don't=20delete=20Sog=C3=A9=20credits=20if=20the?= =?UTF-8?q?=20user=20don't=20have=20enough=20money=20on=20its=20note,=20st?= =?UTF-8?q?ay=20positive=20:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/treasury/models.py | 13 +- locale/de/LC_MESSAGES/django.po | 161 +++++++++++---------- locale/fr/LC_MESSAGES/django.po | 167 ++++++++++++---------- templates/treasury/sogecredit_detail.html | 17 ++- 4 files changed, 212 insertions(+), 146 deletions(-) diff --git a/apps/treasury/models.py b/apps/treasury/models.py index 42a8c8cf..5628504b 100644 --- a/apps/treasury/models.py +++ b/apps/treasury/models.py @@ -240,7 +240,7 @@ class SogeCredit(models.Model): @property def amount(self): - return sum(transaction.quantity * transaction.amount for transaction in self.transactions.all()) + return sum(transaction.total for transaction in self.transactions.all()) def invalidate(self): """ @@ -249,11 +249,14 @@ class SogeCredit(models.Model): """ if self.valid: self.credit_transaction.valid = False + self.credit_transaction._force_save = True self.credit_transaction.save() + self.credit_transaction._force_delete = True self.credit_transaction.delete() self.credit_transaction = None for transaction in self.transactions.all(): transaction.valid = False + transaction._force_save = True transaction.save() def validate(self, force=False): @@ -277,6 +280,7 @@ class SogeCredit(models.Model): for transaction in self.transactions.all(): transaction.valid = True + transaction._force_save = True transaction.created_at = datetime.now() transaction.save() @@ -286,8 +290,15 @@ class SogeCredit(models.Model): Treasurers must know what they do, this is difficult to undo this operation. With Great Power Comes Great Responsibility... """ + + total_fee = sum(transaction.total for transaction in self.transactions.all() if not transaction.valid) + if self.user.note.balance < total_fee: + raise ValidationError(_("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.")) + self.invalidate() for transaction in self.transactions.all(): + transaction._force_save = True transaction.valid = True transaction.created_at = datetime.now() transaction.save() diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 6d76b2e2..6eae8aaf 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-22 03:07+0200\n" +"POT-Creation-Date: 2020-04-22 03:51+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -83,8 +83,8 @@ msgid "type" msgstr "" #: apps/activity/models.py:66 apps/logs/models.py:21 apps/member/models.py:225 -#: apps/note/models/notes.py:117 apps/treasury/models.py:220 -#: apps/wei/models.py:155 templates/treasury/sogecredit_detail.html:13 +#: apps/note/models/notes.py:117 apps/treasury/models.py:221 +#: apps/wei/models.py:155 templates/treasury/sogecredit_detail.html:14 #: templates/wei/survey.html:16 msgid "user" msgstr "" @@ -181,7 +181,7 @@ msgstr "" msgid "remove" msgstr "" -#: apps/activity/tables.py:75 apps/treasury/models.py:139 +#: apps/activity/tables.py:75 apps/treasury/models.py:140 msgid "Type" msgstr "" @@ -351,7 +351,7 @@ msgstr "" msgid "user profile" msgstr "" -#: apps/member/models.py:105 templates/member/club_info.html:51 +#: apps/member/models.py:105 templates/member/club_info.html:57 #: templates/registration/future_profile_detail.html:22 #: templates/wei/weiclub_info.html:52 templates/wei/weimembership_form.html:24 msgid "email" @@ -369,15 +369,15 @@ msgstr "" msgid "Uncheck if this club don't require memberships." msgstr "" -#: apps/member/models.py:127 templates/member/club_info.html:35 +#: apps/member/models.py:127 templates/member/club_info.html:41 msgid "membership fee (paid students)" msgstr "" -#: apps/member/models.py:132 templates/member/club_info.html:38 +#: apps/member/models.py:132 templates/member/club_info.html:44 msgid "membership fee (unpaid students)" msgstr "" -#: apps/member/models.py:138 templates/member/club_info.html:28 +#: apps/member/models.py:138 templates/member/club_info.html:33 msgid "membership duration" msgstr "" @@ -385,7 +385,7 @@ msgstr "" msgid "The longest time (in days) a membership can last (NULL = infinite)." msgstr "" -#: apps/member/models.py:146 templates/member/club_info.html:22 +#: apps/member/models.py:146 templates/member/club_info.html:23 msgid "membership start" msgstr "" @@ -393,7 +393,7 @@ msgstr "" msgid "How long after January 1st the members can renew their membership." msgstr "" -#: apps/member/models.py:154 templates/member/club_info.html:25 +#: apps/member/models.py:154 templates/member/club_info.html:28 msgid "membership end" msgstr "" @@ -432,11 +432,11 @@ msgstr "" msgid "fee" msgstr "" -#: apps/member/models.py:268 apps/member/views.py:494 apps/wei/views.py:726 +#: apps/member/models.py:268 apps/member/views.py:505 apps/wei/views.py:727 msgid "User is not a member of the parent club" msgstr "" -#: apps/member/models.py:278 apps/member/views.py:503 +#: apps/member/models.py:278 apps/member/views.py:514 msgid "User is already a member of the club" msgstr "" @@ -471,25 +471,25 @@ msgstr "" msgid "An alias with a similar name already exists." msgstr "" -#: apps/member/views.py:180 +#: apps/member/views.py:181 msgid "Search user" msgstr "" -#: apps/member/views.py:489 apps/wei/views.py:717 +#: apps/member/views.py:500 apps/wei/views.py:718 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." msgstr "" -#: apps/member/views.py:507 +#: apps/member/views.py:518 msgid "The membership must start after {:%m-%d-%Y}." msgstr "" -#: apps/member/views.py:512 +#: apps/member/views.py:523 msgid "The membership must begin before {:%m-%d-%Y}." msgstr "" -#: apps/member/views.py:522 apps/member/views.py:524 apps/member/views.py:526 +#: apps/member/views.py:533 apps/member/views.py:535 apps/member/views.py:537 #: apps/registration/views.py:288 apps/registration/views.py:290 #: apps/registration/views.py:292 msgid "This field is required." @@ -596,7 +596,7 @@ msgstr "" msgid "alias" msgstr "" -#: apps/note/models/notes.py:211 templates/member/club_info.html:48 +#: apps/note/models/notes.py:211 templates/member/club_info.html:54 #: templates/member/profile_info.html:36 templates/wei/weiclub_info.html:48 msgid "aliases" msgstr "" @@ -667,7 +667,7 @@ msgid "transaction" msgstr "" #: apps/note/models/transactions.py:154 -#: templates/treasury/sogecredit_detail.html:16 +#: templates/treasury/sogecredit_detail.html:22 msgid "transactions" msgstr "" @@ -704,7 +704,7 @@ msgstr "" msgid "membership transaction" msgstr "" -#: apps/note/models/transactions.py:283 apps/treasury/models.py:226 +#: apps/note/models/transactions.py:283 apps/treasury/models.py:227 msgid "membership transactions" msgstr "" @@ -721,13 +721,13 @@ msgid "No reason specified" msgstr "" #: apps/note/tables.py:122 apps/note/tables.py:151 apps/wei/tables.py:66 -#: templates/treasury/sogecredit_detail.html:45 +#: templates/treasury/sogecredit_detail.html:59 #: templates/wei/weiregistration_confirm_delete.html:32 msgid "Delete" msgstr "" #: apps/note/tables.py:146 apps/wei/tables.py:42 apps/wei/tables.py:43 -#: templates/member/club_info.html:60 templates/note/conso_form.html:121 +#: templates/member/club_info.html:67 templates/note/conso_form.html:121 #: templates/wei/bus_tables.html:15 templates/wei/busteam_tables.html:15 #: templates/wei/busteam_tables.html:33 templates/wei/weiclub_info.html:66 msgid "Edit" @@ -863,122 +863,128 @@ msgstr "" msgid "Amount" msgstr "" -#: apps/treasury/models.py:19 +#: apps/treasury/models.py:20 msgid "Invoice identifier" msgstr "" -#: apps/treasury/models.py:33 +#: apps/treasury/models.py:34 msgid "BDE" msgstr "" -#: apps/treasury/models.py:38 +#: apps/treasury/models.py:39 msgid "Object" msgstr "" -#: apps/treasury/models.py:42 +#: apps/treasury/models.py:43 msgid "Description" msgstr "" -#: apps/treasury/models.py:47 templates/note/transaction_form.html:91 +#: apps/treasury/models.py:48 templates/note/transaction_form.html:91 msgid "Name" msgstr "" -#: apps/treasury/models.py:51 +#: apps/treasury/models.py:52 msgid "Address" msgstr "" -#: apps/treasury/models.py:56 +#: apps/treasury/models.py:57 msgid "Place" msgstr "" -#: apps/treasury/models.py:60 +#: apps/treasury/models.py:61 msgid "Acquitted" msgstr "" -#: apps/treasury/models.py:64 +#: apps/treasury/models.py:65 msgid "invoice" msgstr "" -#: apps/treasury/models.py:65 +#: apps/treasury/models.py:66 msgid "invoices" msgstr "" -#: apps/treasury/models.py:80 +#: apps/treasury/models.py:81 msgid "Designation" msgstr "" -#: apps/treasury/models.py:84 +#: apps/treasury/models.py:85 msgid "Quantity" msgstr "" -#: apps/treasury/models.py:88 +#: apps/treasury/models.py:89 msgid "Unit price" msgstr "" -#: apps/treasury/models.py:104 +#: apps/treasury/models.py:105 msgid "product" msgstr "" -#: apps/treasury/models.py:105 +#: apps/treasury/models.py:106 msgid "products" msgstr "" -#: apps/treasury/models.py:122 +#: apps/treasury/models.py:123 msgid "remittance type" msgstr "" -#: apps/treasury/models.py:123 +#: apps/treasury/models.py:124 msgid "remittance types" msgstr "" -#: apps/treasury/models.py:133 +#: apps/treasury/models.py:134 msgid "Date" msgstr "" -#: apps/treasury/models.py:144 +#: apps/treasury/models.py:145 msgid "Comment" msgstr "" -#: apps/treasury/models.py:149 +#: apps/treasury/models.py:150 msgid "Closed" msgstr "" -#: apps/treasury/models.py:153 +#: apps/treasury/models.py:154 msgid "remittance" msgstr "" -#: apps/treasury/models.py:154 +#: apps/treasury/models.py:155 msgid "remittances" msgstr "" -#: apps/treasury/models.py:186 +#: apps/treasury/models.py:187 msgid "Remittance #{:d}: {}" msgstr "" -#: apps/treasury/models.py:205 apps/treasury/tables.py:76 +#: apps/treasury/models.py:206 apps/treasury/tables.py:76 #: apps/treasury/tables.py:84 templates/treasury/invoice_list.html:13 #: templates/treasury/remittance_list.html:13 #: templates/treasury/sogecredit_list.html:13 msgid "Remittance" msgstr "" -#: apps/treasury/models.py:209 +#: apps/treasury/models.py:210 msgid "special transaction proxy" msgstr "" -#: apps/treasury/models.py:210 +#: apps/treasury/models.py:211 msgid "special transaction proxies" msgstr "" -#: apps/treasury/models.py:232 +#: apps/treasury/models.py:233 msgid "credit transaction" msgstr "" -#: apps/treasury/models.py:294 templates/treasury/sogecredit_detail.html:9 +#: apps/treasury/models.py:292 +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." +msgstr "" + +#: apps/treasury/models.py:303 templates/treasury/sogecredit_detail.html:10 msgid "Credit from the Société générale" msgstr "" -#: apps/treasury/models.py:295 +#: apps/treasury/models.py:304 msgid "Credits from the Société générale" msgstr "" @@ -1212,7 +1218,7 @@ msgid "WEI memberships" msgstr "" #: apps/wei/tables.py:53 apps/wei/tables.py:54 -#: templates/treasury/sogecredit_detail.html:44 +#: templates/treasury/sogecredit_detail.html:57 msgid "Validate" msgstr "" @@ -1221,41 +1227,41 @@ msgstr "" msgid "Teams" msgstr "" -#: apps/wei/views.py:165 +#: apps/wei/views.py:166 msgid "Find WEI Membership" msgstr "" -#: apps/wei/views.py:200 +#: apps/wei/views.py:201 msgid "Find WEI Registration" msgstr "" -#: apps/wei/views.py:409 templates/wei/weiclub_info.html:62 +#: apps/wei/views.py:410 templates/wei/weiclub_info.html:62 msgid "Register 1A" msgstr "" -#: apps/wei/views.py:430 apps/wei/views.py:498 +#: apps/wei/views.py:431 apps/wei/views.py:499 msgid "This user is already registered to this WEI." msgstr "" -#: apps/wei/views.py:435 +#: apps/wei/views.py:436 msgid "" "This user can't be in her/his first year since he/she has already participed " "to a WEI." msgstr "" -#: apps/wei/views.py:463 templates/wei/weiclub_info.html:63 +#: apps/wei/views.py:464 templates/wei/weiclub_info.html:63 msgid "Register 2A+" msgstr "" -#: apps/wei/views.py:481 apps/wei/views.py:564 +#: apps/wei/views.py:482 apps/wei/views.py:565 msgid "You already opened an account in the Société générale." msgstr "" -#: apps/wei/views.py:721 +#: apps/wei/views.py:722 msgid "This user didn't give her/his caution check." msgstr "" -#: apps/wei/views.py:790 apps/wei/views.py:810 apps/wei/views.py:820 +#: apps/wei/views.py:791 apps/wei/views.py:811 apps/wei/views.py:821 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey_end.html:12 msgid "Survey WEI" @@ -1422,24 +1428,25 @@ msgstr "" msgid "Club Parent" msgstr "" -#: templates/member/club_info.html:29 +#: templates/member/club_info.html:34 msgid "days" msgstr "" -#: templates/member/club_info.html:32 templates/wei/weiclub_info.html:27 +#: templates/member/club_info.html:38 templates/wei/weiclub_info.html:27 msgid "membership fee" msgstr "" -#: templates/member/club_info.html:44 templates/member/profile_info.html:33 +#: templates/member/club_info.html:50 templates/member/profile_info.html:33 +#: templates/treasury/sogecredit_detail.html:18 #: templates/wei/weiclub_info.html:43 msgid "balance" msgstr "" -#: templates/member/club_info.html:57 +#: templates/member/club_info.html:64 msgid "Add member" msgstr "" -#: templates/member/club_info.html:64 templates/member/profile_info.html:48 +#: templates/member/club_info.html:71 templates/member/profile_info.html:48 msgid "View Profile" msgstr "" @@ -1854,37 +1861,47 @@ msgstr "" msgid "Closed remittances" msgstr "" -#: templates/treasury/sogecredit_detail.html:23 +#: templates/treasury/sogecredit_detail.html:29 msgid "total amount" msgstr "" -#: templates/treasury/sogecredit_detail.html:29 +#: templates/treasury/sogecredit_detail.html:35 msgid "" "Warning: Validating this credit implies that all membership transactions " "will be validated." msgstr "" -#: templates/treasury/sogecredit_detail.html:30 +#: templates/treasury/sogecredit_detail.html:36 msgid "" "If you delete this credit, there all membership transactions will be also " "validated, but no credit will be operated." msgstr "" -#: templates/treasury/sogecredit_detail.html:31 +#: templates/treasury/sogecredit_detail.html:37 msgid "" "If this credit is validated, then the user won't be able to ask for a credit " "from the Société générale." msgstr "" -#: templates/treasury/sogecredit_detail.html:32 +#: templates/treasury/sogecredit_detail.html:38 msgid "If you think there is an error, please contact the \"respos info\"." msgstr "" -#: templates/treasury/sogecredit_detail.html:38 +#: templates/treasury/sogecredit_detail.html:44 msgid "This credit is already validated." msgstr "" #: templates/treasury/sogecredit_detail.html:49 +msgid "" +"Warning: if you don't validate this credit, the note of the user doesn't " +"have enough money to pay its memberships." +msgstr "" + +#: templates/treasury/sogecredit_detail.html:50 +msgid "Please ask the user to credit its note before deleting this credit." +msgstr "" + +#: templates/treasury/sogecredit_detail.html:64 msgid "Return to credit list" msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 0d81f423..a4c61342 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-22 03:07+0200\n" +"POT-Creation-Date: 2020-04-22 03:51+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -79,8 +79,8 @@ msgid "type" msgstr "type" #: apps/activity/models.py:66 apps/logs/models.py:21 apps/member/models.py:225 -#: apps/note/models/notes.py:117 apps/treasury/models.py:220 -#: apps/wei/models.py:155 templates/treasury/sogecredit_detail.html:13 +#: apps/note/models/notes.py:117 apps/treasury/models.py:221 +#: apps/wei/models.py:155 templates/treasury/sogecredit_detail.html:14 #: templates/wei/survey.html:16 msgid "user" msgstr "utilisateur" @@ -177,7 +177,7 @@ msgstr "Entré le " msgid "remove" msgstr "supprimer" -#: apps/activity/tables.py:75 apps/treasury/models.py:139 +#: apps/activity/tables.py:75 apps/treasury/models.py:140 msgid "Type" msgstr "Type" @@ -347,7 +347,7 @@ msgstr "inscription valid" msgid "user profile" msgstr "profil utilisateur" -#: apps/member/models.py:105 templates/member/club_info.html:51 +#: apps/member/models.py:105 templates/member/club_info.html:57 #: templates/registration/future_profile_detail.html:22 #: templates/wei/weiclub_info.html:52 templates/wei/weimembership_form.html:24 msgid "email" @@ -365,15 +365,15 @@ msgstr "nécessite des adhésions" 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:127 templates/member/club_info.html:35 +#: apps/member/models.py:127 templates/member/club_info.html:41 msgid "membership fee (paid students)" msgstr "cotisation pour adhérer (normalien élève)" -#: apps/member/models.py:132 templates/member/club_info.html:38 +#: apps/member/models.py:132 templates/member/club_info.html:44 msgid "membership fee (unpaid students)" msgstr "cotisation pour adhérer (normalien étudiant)" -#: apps/member/models.py:138 templates/member/club_info.html:28 +#: apps/member/models.py:138 templates/member/club_info.html:33 msgid "membership duration" msgstr "durée de l'adhésion" @@ -381,7 +381,7 @@ msgstr "durée de l'adhésion" 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:146 templates/member/club_info.html:22 +#: apps/member/models.py:146 templates/member/club_info.html:23 msgid "membership start" msgstr "début de l'adhésion" @@ -391,7 +391,7 @@ msgstr "" "Combien de temps après le 1er Janvier les adhérents peuvent renouveler leur " "adhésion." -#: apps/member/models.py:154 templates/member/club_info.html:25 +#: apps/member/models.py:154 templates/member/club_info.html:28 msgid "membership end" msgstr "fin de l'adhésion" @@ -432,11 +432,11 @@ msgstr "l'adhésion finit le" msgid "fee" msgstr "cotisation" -#: apps/member/models.py:268 apps/member/views.py:494 apps/wei/views.py:726 +#: apps/member/models.py:268 apps/member/views.py:505 apps/wei/views.py:727 msgid "User is not a member of the parent club" msgstr "L'utilisateur n'est pas membre du club parent" -#: apps/member/models.py:278 apps/member/views.py:503 +#: apps/member/models.py:278 apps/member/views.py:514 msgid "User is already a member of the club" msgstr "L'utilisateur est déjà membre du club" @@ -471,11 +471,11 @@ msgstr "Modifier le profil" msgid "An alias with a similar name already exists." msgstr "Un alias avec un nom similaire existe déjà." -#: apps/member/views.py:180 +#: apps/member/views.py:181 msgid "Search user" msgstr "Chercher un utilisateur" -#: apps/member/views.py:489 apps/wei/views.py:717 +#: apps/member/views.py:500 apps/wei/views.py:718 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." @@ -483,15 +483,15 @@ msgstr "" "Cet utilisateur n'a pas assez d'argent pour rejoindre ce club et ne peut pas " "avoir un solde négatif." -#: apps/member/views.py:507 +#: apps/member/views.py:518 msgid "The membership must start after {:%m-%d-%Y}." msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}." -#: apps/member/views.py:512 +#: apps/member/views.py:523 msgid "The membership must begin before {:%m-%d-%Y}." msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}." -#: apps/member/views.py:522 apps/member/views.py:524 apps/member/views.py:526 +#: apps/member/views.py:533 apps/member/views.py:535 apps/member/views.py:537 #: apps/registration/views.py:288 apps/registration/views.py:290 #: apps/registration/views.py:292 msgid "This field is required." @@ -599,7 +599,7 @@ msgstr "Alias invalide" msgid "alias" msgstr "alias" -#: apps/note/models/notes.py:211 templates/member/club_info.html:48 +#: apps/note/models/notes.py:211 templates/member/club_info.html:54 #: templates/member/profile_info.html:36 templates/wei/weiclub_info.html:48 msgid "aliases" msgstr "alias" @@ -670,7 +670,7 @@ msgid "transaction" msgstr "transaction" #: apps/note/models/transactions.py:154 -#: templates/treasury/sogecredit_detail.html:16 +#: templates/treasury/sogecredit_detail.html:22 msgid "transactions" msgstr "transactions" @@ -707,7 +707,7 @@ msgstr "Débit" msgid "membership transaction" msgstr "Transaction d'adhésion" -#: apps/note/models/transactions.py:283 apps/treasury/models.py:226 +#: apps/note/models/transactions.py:283 apps/treasury/models.py:227 msgid "membership transactions" msgstr "Transactions d'adhésion" @@ -724,13 +724,13 @@ msgid "No reason specified" msgstr "Pas de motif spécifié" #: apps/note/tables.py:122 apps/note/tables.py:151 apps/wei/tables.py:66 -#: templates/treasury/sogecredit_detail.html:45 +#: templates/treasury/sogecredit_detail.html:59 #: templates/wei/weiregistration_confirm_delete.html:32 msgid "Delete" msgstr "Supprimer" #: apps/note/tables.py:146 apps/wei/tables.py:42 apps/wei/tables.py:43 -#: templates/member/club_info.html:60 templates/note/conso_form.html:121 +#: templates/member/club_info.html:67 templates/note/conso_form.html:121 #: templates/wei/bus_tables.html:15 templates/wei/busteam_tables.html:15 #: templates/wei/busteam_tables.html:33 templates/wei/weiclub_info.html:66 msgid "Edit" @@ -871,122 +871,130 @@ msgstr "Vous ne pouvez pas changer le type de la remise." msgid "Amount" msgstr "Montant" -#: apps/treasury/models.py:19 +#: apps/treasury/models.py:20 msgid "Invoice identifier" msgstr "Numéro de facture" -#: apps/treasury/models.py:33 +#: apps/treasury/models.py:34 msgid "BDE" msgstr "BDE" -#: apps/treasury/models.py:38 +#: apps/treasury/models.py:39 msgid "Object" msgstr "Objet" -#: apps/treasury/models.py:42 +#: apps/treasury/models.py:43 msgid "Description" msgstr "Description" -#: apps/treasury/models.py:47 templates/note/transaction_form.html:91 +#: apps/treasury/models.py:48 templates/note/transaction_form.html:91 msgid "Name" msgstr "Nom" -#: apps/treasury/models.py:51 +#: apps/treasury/models.py:52 msgid "Address" msgstr "Adresse" -#: apps/treasury/models.py:56 +#: apps/treasury/models.py:57 msgid "Place" msgstr "Lieu" -#: apps/treasury/models.py:60 +#: apps/treasury/models.py:61 msgid "Acquitted" msgstr "Acquittée" -#: apps/treasury/models.py:64 +#: apps/treasury/models.py:65 msgid "invoice" msgstr "facture" -#: apps/treasury/models.py:65 +#: apps/treasury/models.py:66 msgid "invoices" msgstr "factures" -#: apps/treasury/models.py:80 +#: apps/treasury/models.py:81 msgid "Designation" msgstr "Désignation" -#: apps/treasury/models.py:84 +#: apps/treasury/models.py:85 msgid "Quantity" msgstr "Quantité" -#: apps/treasury/models.py:88 +#: apps/treasury/models.py:89 msgid "Unit price" msgstr "Prix unitaire" -#: apps/treasury/models.py:104 +#: apps/treasury/models.py:105 msgid "product" msgstr "produit" -#: apps/treasury/models.py:105 +#: apps/treasury/models.py:106 msgid "products" msgstr "produits" -#: apps/treasury/models.py:122 +#: apps/treasury/models.py:123 msgid "remittance type" msgstr "type de remise" -#: apps/treasury/models.py:123 +#: apps/treasury/models.py:124 msgid "remittance types" msgstr "types de remises" -#: apps/treasury/models.py:133 +#: apps/treasury/models.py:134 msgid "Date" msgstr "Date" -#: apps/treasury/models.py:144 +#: apps/treasury/models.py:145 msgid "Comment" msgstr "Commentaire" -#: apps/treasury/models.py:149 +#: apps/treasury/models.py:150 msgid "Closed" msgstr "Fermée" -#: apps/treasury/models.py:153 +#: apps/treasury/models.py:154 msgid "remittance" msgstr "remise" -#: apps/treasury/models.py:154 +#: apps/treasury/models.py:155 msgid "remittances" msgstr "remises" -#: apps/treasury/models.py:186 +#: apps/treasury/models.py:187 msgid "Remittance #{:d}: {}" msgstr "Remise n°{:d} : {}" -#: apps/treasury/models.py:205 apps/treasury/tables.py:76 +#: apps/treasury/models.py:206 apps/treasury/tables.py:76 #: apps/treasury/tables.py:84 templates/treasury/invoice_list.html:13 #: templates/treasury/remittance_list.html:13 #: templates/treasury/sogecredit_list.html:13 msgid "Remittance" msgstr "Remise" -#: apps/treasury/models.py:209 +#: apps/treasury/models.py:210 msgid "special transaction proxy" msgstr "Proxy de transaction spéciale" -#: apps/treasury/models.py:210 +#: apps/treasury/models.py:211 msgid "special transaction proxies" msgstr "Proxys de transactions spéciales" -#: apps/treasury/models.py:232 +#: apps/treasury/models.py:233 msgid "credit transaction" msgstr "transaction de crédit" -#: apps/treasury/models.py:294 templates/treasury/sogecredit_detail.html:9 +#: apps/treasury/models.py:292 +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." +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:303 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:295 +#: apps/treasury/models.py:304 msgid "Credits from the Société générale" msgstr "Crédits de la Société générale" @@ -1235,7 +1243,7 @@ msgid "WEI memberships" msgstr "adhésions au WEI" #: apps/wei/tables.py:53 apps/wei/tables.py:54 -#: templates/treasury/sogecredit_detail.html:44 +#: templates/treasury/sogecredit_detail.html:57 msgid "Validate" msgstr "Valider" @@ -1244,23 +1252,23 @@ msgstr "Valider" msgid "Teams" msgstr "Équipes" -#: apps/wei/views.py:165 +#: apps/wei/views.py:166 msgid "Find WEI Membership" msgstr "Trouver une adhésion au WEI" -#: apps/wei/views.py:200 +#: apps/wei/views.py:201 msgid "Find WEI Registration" msgstr "Trouver une inscription au WEI" -#: apps/wei/views.py:409 templates/wei/weiclub_info.html:62 +#: apps/wei/views.py:410 templates/wei/weiclub_info.html:62 msgid "Register 1A" msgstr "Inscrire un 1A" -#: apps/wei/views.py:430 apps/wei/views.py:498 +#: apps/wei/views.py:431 apps/wei/views.py:499 msgid "This user is already registered to this WEI." msgstr "Cette personne est déjà inscrite au WEI." -#: apps/wei/views.py:435 +#: apps/wei/views.py:436 msgid "" "This user can't be in her/his first year since he/she has already participed " "to a WEI." @@ -1268,19 +1276,19 @@ msgstr "" "Cet utilisateur ne peut pas être en première année puisqu'iel a déjà " "participé à un WEI." -#: apps/wei/views.py:463 templates/wei/weiclub_info.html:63 +#: apps/wei/views.py:464 templates/wei/weiclub_info.html:63 msgid "Register 2A+" msgstr "Inscrire un 2A+" -#: apps/wei/views.py:481 apps/wei/views.py:564 +#: apps/wei/views.py:482 apps/wei/views.py:565 msgid "You already opened an account in the Société générale." msgstr "Vous avez déjà ouvert un compte auprès de la société générale." -#: apps/wei/views.py:721 +#: apps/wei/views.py:722 msgid "This user didn't give her/his caution check." msgstr "Cet utilisateur n'a pas donné son chèque de caution." -#: apps/wei/views.py:790 apps/wei/views.py:810 apps/wei/views.py:820 +#: apps/wei/views.py:791 apps/wei/views.py:811 apps/wei/views.py:821 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey_end.html:12 msgid "Survey WEI" @@ -1451,24 +1459,25 @@ msgstr "Ajouter un alias" msgid "Club Parent" msgstr "Club parent" -#: templates/member/club_info.html:29 +#: templates/member/club_info.html:34 msgid "days" msgstr "jours" -#: templates/member/club_info.html:32 templates/wei/weiclub_info.html:27 +#: templates/member/club_info.html:38 templates/wei/weiclub_info.html:27 msgid "membership fee" msgstr "cotisation pour adhérer" -#: templates/member/club_info.html:44 templates/member/profile_info.html:33 +#: templates/member/club_info.html:50 templates/member/profile_info.html:33 +#: templates/treasury/sogecredit_detail.html:18 #: templates/wei/weiclub_info.html:43 msgid "balance" msgstr "solde du compte" -#: templates/member/club_info.html:57 +#: templates/member/club_info.html:64 msgid "Add member" msgstr "Ajouter un membre" -#: templates/member/club_info.html:64 templates/member/profile_info.html:48 +#: templates/member/club_info.html:71 templates/member/profile_info.html:48 msgid "View Profile" msgstr "Voir le profil" @@ -1898,11 +1907,11 @@ msgstr "Il n'y a pas de transaction associée à une remise ouverte." msgid "Closed remittances" msgstr "Remises fermées" -#: templates/treasury/sogecredit_detail.html:23 +#: templates/treasury/sogecredit_detail.html:29 msgid "total amount" msgstr "montant total" -#: templates/treasury/sogecredit_detail.html:29 +#: templates/treasury/sogecredit_detail.html:35 msgid "" "Warning: Validating this credit implies that all membership transactions " "will be validated." @@ -1910,7 +1919,7 @@ msgstr "" "Attention : Valider ce crédit implique que les transactions d'adhésion " "seront validées." -#: templates/treasury/sogecredit_detail.html:30 +#: templates/treasury/sogecredit_detail.html:36 msgid "" "If you delete this credit, there all membership transactions will be also " "validated, but no credit will be operated." @@ -1919,7 +1928,7 @@ msgstr "" "d'adhésion seront aussi validées, but il n'y aura pas de transaction de " "crédit créée." -#: templates/treasury/sogecredit_detail.html:31 +#: templates/treasury/sogecredit_detail.html:37 msgid "" "If this credit is validated, then the user won't be able to ask for a credit " "from the Société générale." @@ -1927,15 +1936,29 @@ msgstr "" "Si ce crédit est validé, alors l'utilisateur ne pourra plus demander d'être " "crédité par la Société générale à l'avenir." -#: templates/treasury/sogecredit_detail.html:32 +#: templates/treasury/sogecredit_detail.html:38 msgid "If you think there is an error, please contact the \"respos info\"." msgstr "Si vous pensez qu'il y a une erreur, merci de contacter un respo info." -#: templates/treasury/sogecredit_detail.html:38 +#: templates/treasury/sogecredit_detail.html:44 msgid "This credit is already validated." msgstr "Ce crédit a déjà été validé." #: templates/treasury/sogecredit_detail.html:49 +msgid "" +"Warning: if you don't validate this credit, the note of the user doesn't " +"have enough money to pay its memberships." +msgstr "" +"Attention : si vous ne validez pas ce crédit, la note de l'utilisateur n'a " +"pas assez d'argent pour payer les adhésions." + +#: templates/treasury/sogecredit_detail.html:50 +msgid "Please ask the user to credit its note before deleting this credit." +msgstr "" +"Merci de demander à l'utilisateur de recharger sa note avant de " +"supprimer la demande de crédit." + +#: templates/treasury/sogecredit_detail.html:64 msgid "Return to credit list" msgstr "Retour à la liste des crédits" diff --git a/templates/treasury/sogecredit_detail.html b/templates/treasury/sogecredit_detail.html index 144b829f..eafece53 100644 --- a/templates/treasury/sogecredit_detail.html +++ b/templates/treasury/sogecredit_detail.html @@ -2,6 +2,7 @@ {% load static %} {% load i18n %} {% load pretty_money %} +{% load perms %} {% block content %}
@@ -13,6 +14,11 @@
{% trans 'user'|capfirst %}
{{ object.user }}
+ {% if "note.view_note_balance"|has_perm:object.user.note %} +
{% trans 'balance'|capfirst %}
+
{{ object.user.note.balance|pretty_money }}
+ {% endif %} +
{% trans 'transactions'|capfirst %}
{% for transaction in object.transactions.all %} @@ -38,11 +44,20 @@ {% trans "This credit is already validated." %}
{% else %} + {% if object.user.note.balance < object.amount %} +
+ {% trans "Warning: if you don't validate this credit, the note of the user doesn't have enough money to pay its memberships." %} + {% trans "Please ask the user to credit its note before deleting this credit." %} +
+ {% endif %} +
{% csrf_token %}
- + {% if object.user.note.balance >= object.amount %} + + {% endif %}
{% endif %}