mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-10-31 07:49:57 +01:00 
			
		
		
		
	Add transaction type field
This commit is contained in:
		
				
					committed by
					
						 Bombar Maxime
						Bombar Maxime
					
				
			
			
				
	
			
			
			
						parent
						
							a1f37f0eea
						
					
				
				
					commit
					7b98244360
				
			| @@ -107,7 +107,24 @@ class Transaction(PolymorphicModel): | ||||
|         verbose_name=_('quantity'), | ||||
|         default=1, | ||||
|     ) | ||||
|     amount = models.PositiveIntegerField(verbose_name=_('amount'), ) | ||||
|     amount = models.PositiveIntegerField( | ||||
|         verbose_name=_('amount'), | ||||
|     ) | ||||
|  | ||||
|     type = models.CharField( | ||||
|         verbose_name=_('type'), | ||||
|         choices=( | ||||
|             ('gift', _('Gift')), | ||||
|             ('transfer', _('Transfer')), | ||||
|             ('template', _('Template')), | ||||
|             ('credit', _('Credit')), | ||||
|             ('debit', _('Debit')), | ||||
|             ('membership', _('membership transaction')), | ||||
|         ), | ||||
|         default='transfer', | ||||
|         max_length=10, | ||||
|     ) | ||||
|  | ||||
|     reason = models.CharField( | ||||
|         verbose_name=_('reason'), | ||||
|         max_length=255, | ||||
| @@ -158,10 +175,6 @@ class Transaction(PolymorphicModel): | ||||
|     def total(self): | ||||
|         return self.amount * self.quantity | ||||
|  | ||||
|     @property | ||||
|     def type(self): | ||||
|         return _('transfer') | ||||
|  | ||||
|  | ||||
| class TemplateTransaction(Transaction): | ||||
|     """ | ||||
| @@ -178,10 +191,6 @@ class TemplateTransaction(Transaction): | ||||
|         on_delete=models.PROTECT, | ||||
|     ) | ||||
|  | ||||
|     @property | ||||
|     def type(self): | ||||
|         return _('template') | ||||
|  | ||||
|  | ||||
| class SpecialTransaction(Transaction): | ||||
|     """ | ||||
| @@ -200,7 +209,8 @@ class SpecialTransaction(Transaction): | ||||
|  | ||||
|     bank = models.CharField( | ||||
|         max_length=255, | ||||
|         verbose_name=_("bank") | ||||
|         verbose_name=_("bank"), | ||||
|         blank=True, | ||||
|     ) | ||||
|  | ||||
|  | ||||
| @@ -219,7 +229,3 @@ class MembershipTransaction(Transaction): | ||||
|     class Meta: | ||||
|         verbose_name = _("membership transaction") | ||||
|         verbose_name_plural = _("membership transactions") | ||||
|  | ||||
|     @property | ||||
|     def type(self): | ||||
|         return _('membership') | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import html | ||||
| import django_tables2 as tables | ||||
| from django.db.models import F | ||||
| from django_tables2.utils import A | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| from .models.notes import Alias | ||||
| from .models.transactions import Transaction | ||||
| @@ -21,9 +22,11 @@ class HistoryTable(tables.Table): | ||||
|         model = Transaction | ||||
|         exclude = ("id", "polymorphic_ctype", ) | ||||
|         template_name = 'django_tables2/bootstrap4.html' | ||||
|         sequence = ('...', 'total', 'valid', ) | ||||
|         sequence = ('...', 'type', 'total', 'valid', ) | ||||
|         orderable = False | ||||
|  | ||||
|     type = tables.Column() | ||||
|  | ||||
|     total = tables.Column()  # will use Transaction.total() !! | ||||
|  | ||||
|     valid = tables.Column(attrs={"td": {"id": lambda record: "validate_" + str(record.id), | ||||
| @@ -43,6 +46,9 @@ class HistoryTable(tables.Table): | ||||
|     def render_total(self, value): | ||||
|         return pretty_money(value) | ||||
|  | ||||
|     def render_type(self, value): | ||||
|         return _(value) | ||||
|  | ||||
|     # Django-tables escape strings. That's a wrong thing. | ||||
|     def render_reason(self, value): | ||||
|         return html.unescape(value) | ||||
|   | ||||
| @@ -6,7 +6,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin | ||||
| from django.contrib.contenttypes.models import ContentType | ||||
| from django.db.models import Q | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
| from django.views.generic import CreateView, ListView, UpdateView, TemplateView | ||||
| from django.views.generic import CreateView, ListView, UpdateView | ||||
| from django_tables2 import SingleTableView | ||||
|  | ||||
| from .forms import TransactionTemplateForm | ||||
| @@ -15,14 +15,19 @@ from .models.transactions import SpecialTransaction | ||||
| from .tables import HistoryTable | ||||
|  | ||||
|  | ||||
| class TransactionCreate(LoginRequiredMixin, TemplateView): | ||||
| class TransactionCreate(LoginRequiredMixin, SingleTableView): | ||||
|     """ | ||||
|     Show transfer page | ||||
|  | ||||
|     TODO: If user have sufficient rights, they can transfer from an other note | ||||
|     """ | ||||
|     queryset = Transaction.objects.order_by("-id").all()[:50] | ||||
|     template_name = "note/transaction_form.html" | ||||
|  | ||||
|     # Transaction history table | ||||
|     table_class = HistoryTable | ||||
|     table_pagination = {"per_page": 50} | ||||
|  | ||||
|     def get_context_data(self, **kwargs): | ||||
|         """ | ||||
|         Add some context variables in template such as page title | ||||
|   | ||||
| @@ -8,7 +8,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-03-14 17:20+0100\n" | ||||
| "POT-Creation-Date: 2020-03-16 11:53+0100\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| @@ -25,7 +25,7 @@ msgstr "" | ||||
| #: apps/activity/models.py:19 apps/activity/models.py:44 | ||||
| #: apps/member/models.py:61 apps/member/models.py:112 | ||||
| #: apps/note/models/notes.py:188 apps/note/models/transactions.py:24 | ||||
| #: apps/note/models/transactions.py:44 apps/note/models/transactions.py:184 | ||||
| #: apps/note/models/transactions.py:44 apps/note/models/transactions.py:202 | ||||
| #: templates/member/profile_detail.html:15 | ||||
| msgid "name" | ||||
| msgstr "" | ||||
| @@ -51,7 +51,7 @@ msgid "description" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/activity/models.py:54 apps/note/models/notes.py:164 | ||||
| #: apps/note/models/transactions.py:62 | ||||
| #: apps/note/models/transactions.py:62 apps/note/models/transactions.py:115 | ||||
| msgid "type" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -254,12 +254,12 @@ msgstr "" | ||||
| msgid "Alias successfully deleted" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/admin.py:120 apps/note/models/transactions.py:93 | ||||
| #: apps/note/admin.py:120 apps/note/models/transactions.py:94 | ||||
| msgid "source" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/admin.py:128 apps/note/admin.py:156 | ||||
| #: apps/note/models/transactions.py:53 apps/note/models/transactions.py:99 | ||||
| #: apps/note/models/transactions.py:53 apps/note/models/transactions.py:100 | ||||
| msgid "destination" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -309,7 +309,7 @@ msgstr "" | ||||
| msgid "display image" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/notes.py:53 apps/note/models/transactions.py:102 | ||||
| #: apps/note/models/notes.py:53 apps/note/models/transactions.py:103 | ||||
| msgid "created at" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -395,7 +395,7 @@ msgstr "" | ||||
| msgid "A template with this name already exist" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:56 apps/note/models/transactions.py:109 | ||||
| #: apps/note/models/transactions.py:56 apps/note/models/transactions.py:111 | ||||
| msgid "amount" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -403,47 +403,69 @@ msgstr "" | ||||
| msgid "in centimes" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:74 | ||||
| #: apps/note/models/transactions.py:75 | ||||
| msgid "transaction template" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:75 | ||||
| #: apps/note/models/transactions.py:76 | ||||
| msgid "transaction templates" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:106 | ||||
| #: apps/note/models/transactions.py:107 | ||||
| msgid "quantity" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:111 | ||||
| msgid "reason" | ||||
| #: apps/note/models/transactions.py:117 templates/note/transaction_form.html:15 | ||||
| msgid "Gift" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:115 | ||||
| msgid "valid" | ||||
| #: apps/note/models/transactions.py:118 templates/base.html:90 | ||||
| #: templates/note/transaction_form.html:19 | ||||
| #: templates/note/transaction_form.html:126 | ||||
| msgid "Transfer" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:120 | ||||
| msgid "transaction" | ||||
| #: apps/note/models/transactions.py:119 | ||||
| msgid "Template" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:121 | ||||
| msgid "transactions" | ||||
| #: apps/note/models/transactions.py:120 templates/note/transaction_form.html:23 | ||||
| msgid "Credit" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:189 | ||||
| msgid "first_name" | ||||
| #: apps/note/models/transactions.py:121 templates/note/transaction_form.html:27 | ||||
| msgid "Debit" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:194 | ||||
| msgid "bank" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:211 | ||||
| #: apps/note/models/transactions.py:122 apps/note/models/transactions.py:230 | ||||
| msgid "membership transaction" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:129 | ||||
| msgid "reason" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:133 | ||||
| msgid "valid" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:138 | ||||
| msgid "transaction" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:139 | ||||
| msgid "transactions" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:207 | ||||
| msgid "first_name" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:212 | ||||
| msgid "bank" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:231 | ||||
| msgid "membership transactions" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -451,7 +473,7 @@ msgstr "" | ||||
| msgid "Transfer money" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/views.py:129 templates/base.html:71 | ||||
| #: apps/note/views.py:132 templates/base.html:78 | ||||
| msgid "Consumptions" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -478,23 +500,18 @@ msgstr "" | ||||
| msgid "The ENS Paris-Saclay BDE note." | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/base.html:74 | ||||
| #: templates/base.html:81 | ||||
| msgid "Clubs" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/base.html:77 | ||||
| #: templates/base.html:84 | ||||
| msgid "Activities" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/base.html:80 | ||||
| #: templates/base.html:87 | ||||
| msgid "Buttons" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/base.html:83 templates/note/transaction_form.html:19 | ||||
| #: templates/note/transaction_form.html:126 | ||||
| msgid "Transfer" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/cas_server/base.html:7 | ||||
| msgid "Central Authentication Service" | ||||
| msgstr "" | ||||
| @@ -644,42 +661,30 @@ msgstr "" | ||||
| msgid "Select consumptions" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/conso_form.html:50 | ||||
| #: templates/note/conso_form.html:51 | ||||
| msgid "Consume!" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/conso_form.html:62 | ||||
| msgid "The most used buttons will display here." | ||||
| #: templates/note/conso_form.html:64 | ||||
| msgid "Most used buttons" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/conso_form.html:107 | ||||
| #: templates/note/conso_form.html:121 | ||||
| msgid "Edit" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/conso_form.html:112 | ||||
| #: templates/note/conso_form.html:126 | ||||
| msgid "Single consumptions" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/conso_form.html:116 | ||||
| #: templates/note/conso_form.html:130 | ||||
| msgid "Double consumptions" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/conso_form.html:127 | ||||
| #: templates/note/conso_form.html:141 | ||||
| msgid "Recent transactions history" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/transaction_form.html:15 | ||||
| msgid "Gift" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/transaction_form.html:23 | ||||
| msgid "Credit" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/transaction_form.html:27 | ||||
| msgid "Debit" | ||||
| msgstr "" | ||||
|  | ||||
| #: templates/note/transaction_form.html:55 | ||||
| msgid "External payment" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-03-14 17:20+0100\n" | ||||
| "POT-Creation-Date: 2020-03-16 11:53+0100\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| @@ -20,7 +20,7 @@ msgstr "activité" | ||||
| #: apps/activity/models.py:19 apps/activity/models.py:44 | ||||
| #: apps/member/models.py:61 apps/member/models.py:112 | ||||
| #: apps/note/models/notes.py:188 apps/note/models/transactions.py:24 | ||||
| #: apps/note/models/transactions.py:44 apps/note/models/transactions.py:184 | ||||
| #: apps/note/models/transactions.py:44 apps/note/models/transactions.py:202 | ||||
| #: templates/member/profile_detail.html:15 | ||||
| msgid "name" | ||||
| msgstr "nom" | ||||
| @@ -46,7 +46,7 @@ msgid "description" | ||||
| msgstr "description" | ||||
|  | ||||
| #: apps/activity/models.py:54 apps/note/models/notes.py:164 | ||||
| #: apps/note/models/transactions.py:62 | ||||
| #: apps/note/models/transactions.py:62 apps/note/models/transactions.py:115 | ||||
| msgid "type" | ||||
| msgstr "type" | ||||
|  | ||||
| @@ -253,12 +253,12 @@ msgstr "Compte n°%(id)s : %(username)s" | ||||
| msgid "Alias successfully deleted" | ||||
| msgstr "L'alias a bien été supprimé" | ||||
|  | ||||
| #: apps/note/admin.py:120 apps/note/models/transactions.py:93 | ||||
| #: apps/note/admin.py:120 apps/note/models/transactions.py:94 | ||||
| msgid "source" | ||||
| msgstr "source" | ||||
|  | ||||
| #: apps/note/admin.py:128 apps/note/admin.py:156 | ||||
| #: apps/note/models/transactions.py:53 apps/note/models/transactions.py:99 | ||||
| #: apps/note/models/transactions.py:53 apps/note/models/transactions.py:100 | ||||
| msgid "destination" | ||||
| msgstr "destination" | ||||
|  | ||||
| @@ -309,7 +309,7 @@ msgstr "" | ||||
| msgid "display image" | ||||
| msgstr "image affichée" | ||||
|  | ||||
| #: apps/note/models/notes.py:53 apps/note/models/transactions.py:102 | ||||
| #: apps/note/models/notes.py:53 apps/note/models/transactions.py:103 | ||||
| msgid "created at" | ||||
| msgstr "créée le" | ||||
|  | ||||
| @@ -395,7 +395,7 @@ msgstr "catégories de transaction" | ||||
| msgid "A template with this name already exist" | ||||
| msgstr "Un modèle de transaction avec un nom similaire existe déjà." | ||||
|  | ||||
| #: apps/note/models/transactions.py:56 apps/note/models/transactions.py:109 | ||||
| #: apps/note/models/transactions.py:56 apps/note/models/transactions.py:111 | ||||
| msgid "amount" | ||||
| msgstr "montant" | ||||
|  | ||||
| @@ -403,47 +403,69 @@ msgstr "montant" | ||||
| msgid "in centimes" | ||||
| msgstr "en centimes" | ||||
|  | ||||
| #: apps/note/models/transactions.py:74 | ||||
| #: apps/note/models/transactions.py:75 | ||||
| msgid "transaction template" | ||||
| msgstr "modèle de transaction" | ||||
|  | ||||
| #: apps/note/models/transactions.py:75 | ||||
| #: apps/note/models/transactions.py:76 | ||||
| msgid "transaction templates" | ||||
| msgstr "modèles de transaction" | ||||
|  | ||||
| #: apps/note/models/transactions.py:106 | ||||
| #: apps/note/models/transactions.py:107 | ||||
| msgid "quantity" | ||||
| msgstr "quantité" | ||||
|  | ||||
| #: apps/note/models/transactions.py:111 | ||||
| msgid "reason" | ||||
| msgstr "raison" | ||||
| #: apps/note/models/transactions.py:117 templates/note/transaction_form.html:15 | ||||
| msgid "Gift" | ||||
| msgstr "Don" | ||||
|  | ||||
| #: apps/note/models/transactions.py:115 | ||||
| msgid "valid" | ||||
| msgstr "valide" | ||||
| #: apps/note/models/transactions.py:118 templates/base.html:90 | ||||
| #: templates/note/transaction_form.html:19 | ||||
| #: templates/note/transaction_form.html:126 | ||||
| msgid "Transfer" | ||||
| msgstr "Virement" | ||||
|  | ||||
| #: apps/note/models/transactions.py:120 | ||||
| msgid "transaction" | ||||
| msgstr "transaction" | ||||
| #: apps/note/models/transactions.py:119 | ||||
| msgid "Template" | ||||
| msgstr "Bouton" | ||||
|  | ||||
| #: apps/note/models/transactions.py:121 | ||||
| msgid "transactions" | ||||
| msgstr "transactions" | ||||
| #: apps/note/models/transactions.py:120 templates/note/transaction_form.html:23 | ||||
| msgid "Credit" | ||||
| msgstr "Crédit" | ||||
|  | ||||
| #: apps/note/models/transactions.py:189 | ||||
| msgid "first_name" | ||||
| msgstr "" | ||||
| #: apps/note/models/transactions.py:121 templates/note/transaction_form.html:27 | ||||
| msgid "Debit" | ||||
| msgstr "Retrait" | ||||
|  | ||||
| #: apps/note/models/transactions.py:194 | ||||
| msgid "bank" | ||||
| msgstr "" | ||||
|  | ||||
| #: apps/note/models/transactions.py:211 | ||||
| #: apps/note/models/transactions.py:122 apps/note/models/transactions.py:230 | ||||
| msgid "membership transaction" | ||||
| msgstr "transaction d'adhésion" | ||||
|  | ||||
| #: apps/note/models/transactions.py:129 | ||||
| msgid "reason" | ||||
| msgstr "raison" | ||||
|  | ||||
| #: apps/note/models/transactions.py:133 | ||||
| msgid "valid" | ||||
| msgstr "valide" | ||||
|  | ||||
| #: apps/note/models/transactions.py:138 | ||||
| msgid "transaction" | ||||
| msgstr "transaction" | ||||
|  | ||||
| #: apps/note/models/transactions.py:139 | ||||
| msgid "transactions" | ||||
| msgstr "transactions" | ||||
|  | ||||
| #: apps/note/models/transactions.py:207 | ||||
| msgid "first_name" | ||||
| msgstr "Prénom" | ||||
|  | ||||
| #: apps/note/models/transactions.py:212 | ||||
| msgid "bank" | ||||
| msgstr "Banque" | ||||
|  | ||||
| #: apps/note/models/transactions.py:231 | ||||
| msgid "membership transactions" | ||||
| msgstr "transactions d'adhésion" | ||||
|  | ||||
| @@ -451,7 +473,7 @@ msgstr "transactions d'adhésion" | ||||
| msgid "Transfer money" | ||||
| msgstr "Transferts d'argent" | ||||
|  | ||||
| #: apps/note/views.py:129 templates/base.html:71 | ||||
| #: apps/note/views.py:132 templates/base.html:78 | ||||
| msgid "Consumptions" | ||||
| msgstr "Consommations" | ||||
|  | ||||
| @@ -478,23 +500,18 @@ msgstr "" | ||||
| msgid "The ENS Paris-Saclay BDE note." | ||||
| msgstr "La note du BDE de l'ENS Paris-Saclay." | ||||
|  | ||||
| #: templates/base.html:74 | ||||
| #: templates/base.html:81 | ||||
| msgid "Clubs" | ||||
| msgstr "Clubs" | ||||
|  | ||||
| #: templates/base.html:77 | ||||
| #: templates/base.html:84 | ||||
| msgid "Activities" | ||||
| msgstr "Activités" | ||||
|  | ||||
| #: templates/base.html:80 | ||||
| #: templates/base.html:87 | ||||
| msgid "Buttons" | ||||
| msgstr "Boutons" | ||||
|  | ||||
| #: templates/base.html:83 templates/note/transaction_form.html:19 | ||||
| #: templates/note/transaction_form.html:126 | ||||
| msgid "Transfer" | ||||
| msgstr "Virement" | ||||
|  | ||||
| #: templates/cas_server/base.html:7 | ||||
| msgid "Central Authentication Service" | ||||
| msgstr "" | ||||
| @@ -555,7 +572,7 @@ msgstr "" | ||||
| #: templates/django_filters/rest_framework/form.html:5 | ||||
| #: templates/member/club_form.html:10 | ||||
| msgid "Submit" | ||||
| msgstr "" | ||||
| msgstr "Envoyer" | ||||
|  | ||||
| #: templates/member/club_detail.html:10 | ||||
| msgid "Membership starts on" | ||||
| @@ -646,43 +663,30 @@ msgstr "Sélection des émetteurs" | ||||
| msgid "Select consumptions" | ||||
| msgstr "Consommations" | ||||
|  | ||||
| #: templates/note/conso_form.html:50 | ||||
| #: templates/note/conso_form.html:51 | ||||
| msgid "Consume!" | ||||
| msgstr "Consommer !" | ||||
|  | ||||
| #: templates/note/conso_form.html:62 | ||||
| #: templates/note/conso_form.html:64 | ||||
| msgid "Most used buttons" | ||||
| msgstr "Boutons les plus utilisés" | ||||
|  | ||||
| #: templates/note/conso_form.html:107 | ||||
| #: templates/note/conso_form.html:121 | ||||
| msgid "Edit" | ||||
| msgstr "Éditer" | ||||
|  | ||||
| #: templates/note/conso_form.html:112 | ||||
| #| msgid "Consumptions" | ||||
| #: templates/note/conso_form.html:126 | ||||
| msgid "Single consumptions" | ||||
| msgstr "Consos simples" | ||||
|  | ||||
| #: templates/note/conso_form.html:116 | ||||
| #: templates/note/conso_form.html:130 | ||||
| msgid "Double consumptions" | ||||
| msgstr "Consos doubles" | ||||
|  | ||||
| #: templates/note/conso_form.html:127 | ||||
| #: templates/note/conso_form.html:141 | ||||
| msgid "Recent transactions history" | ||||
| msgstr "Historique des transactions récentes" | ||||
|  | ||||
| #: templates/note/transaction_form.html:15 | ||||
| msgid "Gift" | ||||
| msgstr "Don" | ||||
|  | ||||
| #: templates/note/transaction_form.html:23 | ||||
| msgid "Credit" | ||||
| msgstr "Crédit" | ||||
|  | ||||
| #: templates/note/transaction_form.html:27 | ||||
| msgid "Debit" | ||||
| msgstr "Retrait" | ||||
|  | ||||
| #: templates/note/transaction_form.html:55 | ||||
| msgid "External payment" | ||||
| msgstr "Paiement extérieur" | ||||
|   | ||||
| @@ -15,6 +15,18 @@ function pretty_money(value) { | ||||
|             + (Math.abs(value) % 100 < 10 ? "0" : "") + (Math.abs(value) % 100) + " €"; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Add a message on the top of the page. | ||||
|  * @param msg The message to display | ||||
|  * @param alert_type The type of the alert. Choices: info, success, warning, danger | ||||
|  */ | ||||
| function addMsg(msg, alert_type) { | ||||
|     let msgDiv = $("#messages"); | ||||
|     let html = msgDiv.html(); | ||||
|     html += "<div class=\"alert alert-" + alert_type + "\">" + msg + "</div>\n"; | ||||
|     msgDiv.html(html); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Reload the balance of the user on the right top corner | ||||
|  */ | ||||
| @@ -256,11 +268,8 @@ function de_validate(id, validated) { | ||||
|             refreshHistory(); | ||||
|         }, | ||||
|         error: function(err) { | ||||
|             let msgDiv = $("#messages"); | ||||
|             let html = msgDiv.html(); | ||||
|             html += "<div class='alert alert-danger'>Une erreur est survenue lors de la validation/dévalidation " + | ||||
|                 "de cette transaction : " + err.responseText + "</div>"; | ||||
|             msgDiv.html(html); | ||||
|             addMsg("Une erreur est survenue lors de la validation/dévalidation " + | ||||
|                 "de cette transaction : " + err.responseText, "danger"); | ||||
|  | ||||
|             refreshBalance(); | ||||
|             // error if this method doesn't exist. Please define it. | ||||
|   | ||||
| @@ -128,6 +128,22 @@ function addConso(dest, amount, type, category_id, category_name, template_id, t | ||||
|         consumeAll(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Reset the page as its initial state. | ||||
|  */ | ||||
| function reset() { | ||||
|     notes_display.length = 0; | ||||
|     notes.length = 0; | ||||
|     buttons.length = 0; | ||||
|     $("#note_list").html(""); | ||||
|     $("#alias_matched").html(""); | ||||
|     $("#consos_list").html(""); | ||||
|     displayNote(null, ""); | ||||
|     refreshHistory(); | ||||
|     refreshBalance(); | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Apply all transactions: all notes in `notes` buy each item in `buttons` | ||||
|  */ | ||||
| @@ -161,19 +177,14 @@ function consume(source, dest, quantity, amount, reason, type, category, templat | ||||
|             "valid": true, | ||||
|             "polymorphic_ctype": type, | ||||
|             "resourcetype": "TemplateTransaction", | ||||
|             "type": "template", | ||||
|             "source": source, | ||||
|             "destination": dest, | ||||
|             "category": category, | ||||
|             "template": template | ||||
|         }, function() { | ||||
|             notes_display.length = 0; | ||||
|             notes.length = 0; | ||||
|             buttons.length = 0; | ||||
|             $("#note_list").html(""); | ||||
|             $("#alias_matched").html(""); | ||||
|             $("#consos_list").html(""); | ||||
|             displayNote(null, ""); | ||||
|             refreshHistory(); | ||||
|             refreshBalance(); | ||||
|         }); | ||||
|         }, reset).fail(function (e) { | ||||
|             reset(); | ||||
|  | ||||
|             addMsg("Une erreur est survenue lors de la transaction : " + e.responseText, "danger"); | ||||
|     }); | ||||
| } | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
| SPDX-License-Identifier: GPL-2.0-or-later | ||||
| {% endcomment %} | ||||
|  | ||||
| {% load i18n static %} | ||||
| {% load i18n static django_tables2 %} | ||||
|  | ||||
| {% block content %} | ||||
|  | ||||
| @@ -126,6 +126,15 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|             <button id="transfer" class="form-control btn btn-primary">{% trans 'Transfer' %}</button> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="card shadow mb-4" id="history"> | ||||
|         <div class="card-header"> | ||||
|             <p class="card-text font-weight-bold"> | ||||
|                 {% trans "Recent transactions history" %} | ||||
|             </p> | ||||
|         </div> | ||||
|         {% render_table table %} | ||||
|     </div> | ||||
| {% endblock %} | ||||
|  | ||||
| {% block extrajavascript %} | ||||
| @@ -135,6 +144,10 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|         dests = []; | ||||
|         dests_notes_display = []; | ||||
|  | ||||
|         function refreshHistory() { | ||||
|             $("#history").load("/note/transfer/ #history"); | ||||
|         } | ||||
|  | ||||
|         function reset() { | ||||
|             sources_notes_display.length = 0; | ||||
|             sources.length = 0; | ||||
| @@ -150,6 +163,7 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|             $("#first_name").val(""); | ||||
|             $("#bank").val(""); | ||||
|             refreshBalance(); | ||||
|             refreshHistory(); | ||||
|         } | ||||
|  | ||||
|         $(document).ready(function() { | ||||
| @@ -161,9 +175,9 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|                     dests_notes_display.length = 0; | ||||
|                     dests_notes_display.push(last); | ||||
|  | ||||
|                     last[3] = 1; | ||||
|                     last.quantity = 1; | ||||
|  | ||||
|                     $.getJSON("/api/user/" + last[2].user + "/", function(user) { | ||||
|                     $.getJSON("/api/user/" + last.note.user + "/", function(user) { | ||||
|                         $("#last_name").val(user.last_name); | ||||
|                         $("#first_name").val(user.first_name); | ||||
|                     }); | ||||
| @@ -206,30 +220,25 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|                     $.post("/api/note/transaction/transaction/", | ||||
|                         { | ||||
|                             "csrfmiddlewaretoken": CSRF_TOKEN, | ||||
|                             "quantity": dest[3], | ||||
|                             "quantity": dest.quantity, | ||||
|                             "amount": $("#amount").val(), | ||||
|                             "reason": $("#reason").val() + " (Don)", | ||||
|                             "reason": $("#reason").val(), | ||||
|                             "valid": true, | ||||
|                             "polymorphic_ctype": {{ polymorphic_ctype }}, | ||||
|                             "resourcetype": "Transaction", | ||||
|                             "type": "gift", | ||||
|                             "source": {{ user.note.id }}, | ||||
|                             "destination": dest[1] | ||||
|                             "destination": dest.id | ||||
|                         }, function () { | ||||
|                             let msgDiv = $("#messages"); | ||||
|                             let html = msgDiv.html(); | ||||
|                             html += "<div class=\"alert alert-success\">Le transfert de " | ||||
|                                 + pretty_money(dest[3] * $("#amount").val()) + " de votre note " | ||||
|                                 + " vers la note " + dest[0] + " a été fait avec succès !</div>\n"; | ||||
|                             msgDiv.html(html); | ||||
|                             addMsg("Le transfert de " | ||||
|                                 + pretty_money(dest.quantity * $("#amount").val()) + " de votre note " | ||||
|                                 + " vers la note " + dest.name + " a été fait avec succès !", "success"); | ||||
|  | ||||
|                             reset(); | ||||
|                         }).fail(function (err) { | ||||
|                         let msgDiv = $("#messages"); | ||||
|                         let html = msgDiv.html(); | ||||
|                         html += "<div class=\"alert alert-danger\">Le transfert de " | ||||
|                             + pretty_money(dest[3] * $("#amount").val()) + " de votre note " | ||||
|                             + " vers la note " + dest[0] + " a échoué : " + err.responseText + "</div>\n"; | ||||
|                         msgDiv.html(html); | ||||
|                             addMsg("Le transfert de " | ||||
|                                 + pretty_money(dest.quantity * $("#amount").val()) + " de votre note " | ||||
|                                 + " vers la note " + dest.name + " a échoué : " + err.responseText, "danger"); | ||||
|  | ||||
|                         reset(); | ||||
|                     }); | ||||
| @@ -241,30 +250,25 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|                         $.post("/api/note/transaction/transaction/", | ||||
|                             { | ||||
|                                 "csrfmiddlewaretoken": CSRF_TOKEN, | ||||
|                                 "quantity": source[3] * dest[3], | ||||
|                                 "quantity": source.quantity * dest.quantity, | ||||
|                                 "amount": $("#amount").val(), | ||||
|                                 "reason": $("#reason").val() + " (Transfert)", | ||||
|                                 "reason": $("#reason").val(), | ||||
|                                 "valid": true, | ||||
|                                 "polymorphic_ctype": {{ polymorphic_ctype }}, | ||||
|                                 "resourcetype": "Transaction", | ||||
|                                 "source": source[1], | ||||
|                                 "destination": dest[1] | ||||
|                                 "type": "transfer", | ||||
|                                 "source": source.id, | ||||
|                                 "destination": dest.id | ||||
|                             }, function () { | ||||
|                                 let msgDiv = $("#messages"); | ||||
|                                 let html = msgDiv.html(); | ||||
|                                 html += "<div class=\"alert alert-success\">Le transfert de " | ||||
|                                     + pretty_money(source[3] * dest[3] * $("#amount").val()) + " de la note " + source[0] | ||||
|                                     + " vers la note " + dest[0] + " a été fait avec succès !</div>\n"; | ||||
|                                 msgDiv.html(html); | ||||
|                                 addMsg("Le transfert de " | ||||
|                                     + pretty_money(source.quantity * dest.quantity * $("#amount").val()) + " de la note " + source.name | ||||
|                                     + " vers la note " + dest.name + " a été fait avec succès !", "success"); | ||||
|  | ||||
|                                 reset(); | ||||
|                             }).fail(function (err) { | ||||
|                                 let msgDiv = $("#messages"); | ||||
|                                 let html = msgDiv.html(); | ||||
|                                 html += "<div class=\"alert alert-danger\">Le transfert de " | ||||
|                                     + pretty_money(source[3] * dest[3] * $("#amount").val()) + " de la note " + source[0] | ||||
|                                     + " vers la note " + dest[0] + " a échoué : " + err.responseText + "</div>\n"; | ||||
|                                 msgDiv.html(html); | ||||
|                                 addMsg("Le transfert de " | ||||
|                                     + pretty_money(source.quantity * dest.quantity * $("#amount").val()) + " de la note " + source.name | ||||
|                                     + " vers la note " + dest.name + " a échoué : " + err.responseText, "danger"); | ||||
|  | ||||
|                                 reset(); | ||||
|                         }); | ||||
| @@ -272,46 +276,46 @@ SPDX-License-Identifier: GPL-2.0-or-later | ||||
|                 }); | ||||
|             } else if ($("#type_credit").is(':checked') || $("#type_debit").is(':checked')) { | ||||
|                 let special_note = $("#credit_type").val(); | ||||
|                 let user_note = dests_notes_display[0][1]; | ||||
|                 let source, dest, reason; | ||||
|                 let user_note = dests_notes_display[0].id; | ||||
|                 let given_reason = $("#reason").val(); | ||||
|                 let source, dest, reason, type; | ||||
|                 if ($("#type_credit").is(':checked')) { | ||||
|                     source = special_note; | ||||
|                     dest = user_note; | ||||
|                     reason = $("#reason").val() + " (Crédit " + $("#credit_type option:selected").text().toLowerCase() + ")"; | ||||
|                     type = "credit"; | ||||
|                     reason = "Crédit " + $("#credit_type option:selected").text().toLowerCase(); | ||||
|                     if (given_reason.length > 0) | ||||
|                         reason += " (" + given_reason + ")"; | ||||
|                 } | ||||
|                 else { | ||||
|                     source = user_note; | ||||
|                     dest = special_note; | ||||
|                     reason = $("#reason").val() + " (Retrait " + $("#credit_type option:selected").text().toLowerCase() + ")"; | ||||
|                     type = "debit"; | ||||
|                     reason = "Retrait " + $("#credit_type option:selected").text().toLowerCase(); | ||||
|                     if (given_reason.length > 0) | ||||
|                         reason += " (" + given_reason + ")"; | ||||
|                 } | ||||
|                 $.post("/api/note/transaction/transaction/", | ||||
|                     { | ||||
|                         "csrfmiddlewaretoken": CSRF_TOKEN, | ||||
|                         "quantity": dest[3], | ||||
|                         "quantity": 1, | ||||
|                         "amount": $("#amount").val(), | ||||
|                         "reason": reason, | ||||
|                         "valid": true, | ||||
|                         "polymorphic_ctype": {{ special_polymorphic_ctype }}, | ||||
|                         "resourcetype": "SpecialTransaction", | ||||
|                         "type": type, | ||||
|                         "source": source, | ||||
|                         "destination": dest, | ||||
|                         "last_name": $("#last_name").val(), | ||||
|                         "first_name": $("#first_name").val(), | ||||
|                         "bank": $("#bank").val() | ||||
|                     }, function () { | ||||
|                         let msgDiv = $("#messages"); | ||||
|                         let html = msgDiv.html(); | ||||
|                         html += "<div class=\"alert alert-success\">Le crédit/retrait a bien été effectué !</div>\n"; | ||||
|                         msgDiv.html(html); | ||||
|  | ||||
|                         addMsg("Le crédit/retrait a bien été effectué !", "success"); | ||||
|                         reset(); | ||||
|                     }).fail(function (err) { | ||||
|                     let msgDiv = $("#messages"); | ||||
|                     let html = msgDiv.html(); | ||||
|                     html += "<div class=\"alert alert-danger\">Le crédit/transfert a échoué : " + err.responseText + "</div>\n"; | ||||
|                     msgDiv.html(html); | ||||
|  | ||||
|                     reset(); | ||||
|                         addMsg("Le crédit/transfert a échoué : " + err.responseText, "danger"); | ||||
|                         reset(); | ||||
|                 }); | ||||
|             } | ||||
|         }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user