diff --git a/apps/note/tables.py b/apps/note/tables.py index d26ffedc..08a4d2d9 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 16e2e39b..8bb4165e 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 8945a919..89adb264 100644 --- a/templates/note/conso_form.html +++ b/templates/note/conso_form.html @@ -15,7 +15,9 @@
- Paquito (aka. PAC) : -230 € + + Paquito (aka. PAC) : -230 € +
@@ -82,7 +84,7 @@
{% for button in category.list %} {% 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; + })(); {% endblock %}