mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 01:12:08 +01:00 
			
		
		
		
	Dynamic tabs on conso view
This commit is contained in:
		@@ -12,7 +12,6 @@ urlpatterns = [
 | 
				
			|||||||
    path('buttons/create/', views.TransactionTemplateCreateView.as_view(), name='template_create'),
 | 
					    path('buttons/create/', views.TransactionTemplateCreateView.as_view(), name='template_create'),
 | 
				
			||||||
    path('buttons/update/<int:pk>/', views.TransactionTemplateUpdateView.as_view(), name='template_update'),
 | 
					    path('buttons/update/<int:pk>/', views.TransactionTemplateUpdateView.as_view(), name='template_update'),
 | 
				
			||||||
    path('buttons/', views.TransactionTemplateListView.as_view(), name='template_list'),
 | 
					    path('buttons/', views.TransactionTemplateListView.as_view(), name='template_list'),
 | 
				
			||||||
    path('consos/<str:template_type>/', views.ConsoView.as_view(), name='consos'),
 | 
					 | 
				
			||||||
    path('consos/', views.ConsoView.as_view(), name='consos'),
 | 
					    path('consos/', views.ConsoView.as_view(), name='consos'),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # API for the note autocompleter
 | 
					    # API for the note autocompleter
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ from django.urls import reverse
 | 
				
			|||||||
from django.utils.translation import gettext_lazy as _
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
from django.views.generic import CreateView, ListView, UpdateView
 | 
					from django.views.generic import CreateView, ListView, UpdateView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .models import Transaction, TransactionCategory, TransactionTemplate, Alias
 | 
					from .models import Transaction, TransactionTemplate, Alias
 | 
				
			||||||
from .forms import TransactionForm, TransactionTemplateForm, ConsoForm
 | 
					from .forms import TransactionForm, TransactionTemplateForm, ConsoForm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -135,19 +135,13 @@ class ConsoView(LoginRequiredMixin, CreateView):
 | 
				
			|||||||
        Add some context variables in template such as page title
 | 
					        Add some context variables in template such as page title
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        context = super().get_context_data(**kwargs)
 | 
					        context = super().get_context_data(**kwargs)
 | 
				
			||||||
        context['template_types'] = TransactionCategory.objects.all()
 | 
					        context['transaction_templates'] = TransactionTemplate.objects.all() \
 | 
				
			||||||
 | 
					            .order_by('template_type')
 | 
				
			||||||
        if 'template_type' not in self.kwargs.keys():
 | 
					        context['title'] = _("Consommations")
 | 
				
			||||||
            return context
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        template_type = TransactionCategory.objects.filter(
 | 
					 | 
				
			||||||
            name=self.kwargs.get('template_type')).get()
 | 
					 | 
				
			||||||
        context['buttons'] = TransactionTemplate.objects.filter(
 | 
					 | 
				
			||||||
            template_type=template_type)
 | 
					 | 
				
			||||||
        context['title'] = template_type
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_success_url(self):
 | 
					    def get_success_url(self):
 | 
				
			||||||
        return reverse('note:consos',
 | 
					        """
 | 
				
			||||||
                       args=(self.kwargs.get('template_type'), ))
 | 
					        When clicking a button, reload the same page
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        return reverse('note:consos')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,18 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
{% load i18n static pretty_money %}
 | 
					{% load i18n static pretty_money %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{# Remove page title #}
 | 
				
			||||||
 | 
					{% block contenttitle %}{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
    <fieldset class="module aligned">
 | 
					    {# Regroup buttons under categories #}
 | 
				
			||||||
        {% for type in template_types %}
 | 
					    {% regroup transaction_templates by template_type as template_types %}
 | 
				
			||||||
            <a href="{% url 'note:consos' template_type=type %}"><button>{{ type }}</button></a>
 | 
					
 | 
				
			||||||
        {% endfor %}
 | 
					    <form method="post" onsubmit="window.onbeforeunload=null">
 | 
				
			||||||
    </fieldset>
 | 
					        {% csrf_token %}
 | 
				
			||||||
    <form method="post" onsubmit="window.onbeforeunload=null">{% csrf_token %}
 | 
					
 | 
				
			||||||
 | 
					        <div class="row">
 | 
				
			||||||
 | 
					            <div class="col-sm-5">
 | 
				
			||||||
                {% if form.non_field_errors %}
 | 
					                {% if form.non_field_errors %}
 | 
				
			||||||
                    <p class="errornote">
 | 
					                    <p class="errornote">
 | 
				
			||||||
                        {% for error in form.non_field_errors %}
 | 
					                        {% for error in form.non_field_errors %}
 | 
				
			||||||
@@ -16,7 +21,6 @@
 | 
				
			|||||||
                        {% endfor %}
 | 
					                        {% endfor %}
 | 
				
			||||||
                    </p>
 | 
					                    </p>
 | 
				
			||||||
                {% endif %}
 | 
					                {% endif %}
 | 
				
			||||||
        <fieldset class="module aligned">
 | 
					 | 
				
			||||||
                {% for field in form %}
 | 
					                {% for field in form %}
 | 
				
			||||||
                    <div class="form-row{% if field.errors %} errors{% endif %}">
 | 
					                    <div class="form-row{% if field.errors %} errors{% endif %}">
 | 
				
			||||||
                        {{ field.errors }}
 | 
					                        {{ field.errors }}
 | 
				
			||||||
@@ -33,9 +37,57 @@
 | 
				
			|||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                {% endfor %}
 | 
					                {% endfor %}
 | 
				
			||||||
            {% for button in buttons %}
 | 
					            </div>
 | 
				
			||||||
                <button name="button" value="{{ button.name }}">{{ button.name }} ({{ button.amount | pretty_money }})</button>
 | 
					
 | 
				
			||||||
 | 
					            <div class="col-sm-7">
 | 
				
			||||||
 | 
					                <div class="card text-center">
 | 
				
			||||||
 | 
					                    {# Tabs for button categories #}
 | 
				
			||||||
 | 
					                    <div class="card-header">
 | 
				
			||||||
 | 
					                        <ul class="nav nav-tabs nav-fill card-header-tabs">
 | 
				
			||||||
 | 
					                            {% for template_type in template_types %}
 | 
				
			||||||
 | 
					                                <li class="nav-item">
 | 
				
			||||||
 | 
					                                    <a class="nav-link" data-toggle="tab" href="#{{ template_type.grouper|slugify }}">
 | 
				
			||||||
 | 
					                                        {{ template_type.grouper }}
 | 
				
			||||||
 | 
					                                    </a>
 | 
				
			||||||
 | 
					                                </li>
 | 
				
			||||||
                            {% endfor %}
 | 
					                            {% endfor %}
 | 
				
			||||||
        </fieldset>
 | 
					                        </ul>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    {# Tabs content #}
 | 
				
			||||||
 | 
					                    <div class="card-body">
 | 
				
			||||||
 | 
					                        <div class="tab-content">
 | 
				
			||||||
 | 
					                            {% for template_type in template_types %}
 | 
				
			||||||
 | 
					                                <div class="tab-pane" id="{{ template_type.grouper|slugify }}">
 | 
				
			||||||
 | 
					                                    {% for button in template_type.list %}
 | 
				
			||||||
 | 
					                                        <button class="btn btn-outline-dark" name="button" value="{{ button.name }}">
 | 
				
			||||||
 | 
					                                            {{ button.name }} ({{ button.amount | pretty_money }})
 | 
				
			||||||
 | 
					                                        </button>
 | 
				
			||||||
 | 
					                                    {% endfor %}
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            {% endfor %}
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script type="text/javascript">
 | 
				
			||||||
 | 
					        $ = django.jQuery;
 | 
				
			||||||
 | 
					        $(document).ready(function() {
 | 
				
			||||||
 | 
					            // If hash of a category in the URL, then select this category
 | 
				
			||||||
 | 
					            // else select the first one
 | 
				
			||||||
 | 
					            if (location.hash) {
 | 
				
			||||||
 | 
					                $("a[href='" + location.hash + "']").tab("show");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $("a[data-toggle='tab']").first().tab("show");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // When selecting a category, change URL
 | 
				
			||||||
 | 
					            $(document.body).on("click", "a[data-toggle='tab']", function(event) {
 | 
				
			||||||
 | 
					                location.hash = this.getAttribute("href");
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user