diff --git a/apps/note/tables.py b/apps/note/tables.py index d26ffedc8840ccfd89942e53c027572818c68192..08a4d2d94e01877f4306df627f89f4adde9ba527 100644 --- a/apps/note/tables.py +++ b/apps/note/tables.py @@ -18,6 +18,7 @@ class HistoryTable(tables.Table): } model = Transaction exclude = ("polymorphic_ctype", ) + order_by = ('-created_at', ) template_name = 'django_tables2/bootstrap4.html' sequence = ('...', 'total', 'valid') diff --git a/apps/note/views.py b/apps/note/views.py index 16e2e39b9ea04b21894dc30bd8431902cd38a459..8bb4165ed80af09936f3906a01767aad172e8362 100644 --- a/apps/note/views.py +++ b/apps/note/views.py @@ -3,6 +3,7 @@ from dal import autocomplete from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -10,7 +11,7 @@ from django.views.generic import CreateView, ListView, UpdateView from django_tables2 import SingleTableView from .forms import TransactionForm, TransactionTemplateForm -from .models import Transaction, TransactionTemplate, Alias +from .models import Transaction, TransactionTemplate, Alias, TemplateTransaction from .tables import HistoryTable @@ -142,6 +143,7 @@ class ConsoView(LoginRequiredMixin, SingleTableView): context['transaction_templates'] = TransactionTemplate.objects.filter(display=True) \ .order_by('category') context['title'] = _("Consumptions") + context['polymorphic_ctype'] = ContentType.objects.get_for_model(TemplateTransaction).pk # select2 compatibility context['no_cache'] = True diff --git a/templates/note/conso_form.html b/templates/note/conso_form.html index 8945a91907dab27c0b509fd39e07c89c7842375a..89adb264594198d5b4df1cbd0d0b1528a7601c4b 100644 --- a/templates/note/conso_form.html +++ b/templates/note/conso_form.html @@ -15,7 +15,9 @@ <img src="https://perso.crans.org/erdnaxe/site-crans/img/logo.svg" alt="" class="img-fluid rounded mx-auto d-block"> <div class="card-body text-center"> - Paquito (aka. PAC) : -230 € + <span id="user_note"> + Paquito (aka. PAC) : -230 € + </span> </div> </div> </div> @@ -82,7 +84,7 @@ <div class="d-inline-flex flex-wrap justify-content-center"> {% for button in category.list %} <button class="btn btn-outline-dark rounded-0 flex-fill" - name="button" value="{{ button.name }}"> + id="button{{ button.id }}" name="button" value="{{ button.name }}"> {{ button.name }} ({{ button.amount | pretty_money }}) </button> {% endfor %} @@ -146,6 +148,46 @@ $(document.body).on("click", "a[data-toggle='tab']", function(event) { location.hash = this.getAttribute("href"); }); + + {% for button in transaction_templates %} + $("#button{{ button.id }}").click(function() { + $.post("/api/note/transaction/transaction/", + { + "csrfmiddlewaretoken": "{{ csrf_token }}", + "quantity": 1, + "amount": {{ button.amount }}, + "reason": "{{ button.name }} ({{ button.category.name }})", + "valid": true, + "polymorphic_ctype": {{ polymorphic_ctype }}, + "resourcetype": "TemplateTransaction", + "source": 6, + "destination": 7, + "category": {{ button.category.id }}, + "template": {{ button.id }} + }, + function(data, status) { + reloadWithTurbolinks(); + }); + }); + {% endfor %} }); + + var reloadWithTurbolinks = (function () { + var scrollPosition; + + function reload () { + scrollPosition = [window.scrollX, window.scrollY]; + Turbolinks.visit(window.location.toString(), { action: 'replace' }) + } + + document.addEventListener('turbolinks:load', function () { + if (scrollPosition) { + window.scrollTo.apply(window, scrollPosition); + scrollPosition = null; + } + }); + + return reload; + })(); </script> {% endblock %}