diff --git a/apps/note/urls.py b/apps/note/urls.py index e1cc5216212fbdddd8738c97170bdd637a00ef1e..fea911f6ac5ebdeaa871240fe56c764d024db675 100644 --- a/apps/note/urls.py +++ b/apps/note/urls.py @@ -12,7 +12,6 @@ urlpatterns = [ path('buttons/create/', views.TransactionTemplateCreateView.as_view(), name='template_create'), path('buttons/update/<int:pk>/', views.TransactionTemplateUpdateView.as_view(), name='template_update'), 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'), # API for the note autocompleter diff --git a/apps/note/views.py b/apps/note/views.py index 9a23a2318e4f92d46b23795847d544249d0d35a7..167ef4f0d4c4c8a45c251e7e60af2ebb622b98b1 100644 --- a/apps/note/views.py +++ b/apps/note/views.py @@ -8,7 +8,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ 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 @@ -138,21 +138,17 @@ class ConsoView(LoginRequiredMixin, CreateView): Add some context variables in template such as page title """ context = super().get_context_data(**kwargs) - context['template_types'] = TransactionCategory.objects.all() + context['transaction_templates'] = TransactionTemplate.objects.all() \ + .order_by('template_type') + context['title'] = _("Consommations") + # select2 compatibility context['no_cache'] = True - if 'template_type' not in self.kwargs.keys(): - 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 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') diff --git a/templates/member/profile_detail.html b/templates/member/profile_detail.html index f68dc278e84e88dbc358ee03c6ffbc118240b2c5..655f9893271d4c582a087d701b0ad53ae0c1ff62 100644 --- a/templates/member/profile_detail.html +++ b/templates/member/profile_detail.html @@ -54,7 +54,7 @@ <i class="fa fa-users"></i> {% trans "View my memberships" %} </a> </div> - <div id="clubListCollapse" class="collapse overflow-auto show" aria-labelledby="clubListHeading" data-parent="#accordionProfile"> + <div id="clubListCollapse" class="collapse show" style="overflow:auto hidden" aria-labelledby="clubListHeading" data-parent="#accordionProfile"> {% render_table club_list %} </div> </div> @@ -67,7 +67,7 @@ <i class="fa fa-euro"></i> Historique des transactions </a> </div> - <div id="historyListCollapse" class="collapse overflow-auto" aria-labelledby="historyListHeading" data-parent="#accordionProfile"> + <div id="historyListCollapse" class="collapse" style="overflow:auto hidden" aria-labelledby="historyListHeading" data-parent="#accordionProfile"> {% render_table history_list %} </div> </div> diff --git a/templates/note/conso_form.html b/templates/note/conso_form.html index e2106f1794c41d65c42c438df6fa4771c73057b2..b121ad54d12f970a66f9572194d3b45d8a3376c8 100644 --- a/templates/note/conso_form.html +++ b/templates/note/conso_form.html @@ -2,40 +2,96 @@ {% load i18n static pretty_money %} +{# Remove page title #} +{% block contenttitle %}{% endblock %} + {% block content %} - <fieldset class="module aligned"> - {% for type in template_types %} - <a href="{% url 'note:consos' template_type=type %}"><button>{{ type }}</button></a> - {% endfor %} - </fieldset> - <form method="post" onsubmit="window.onbeforeunload=null">{% csrf_token %} - {% if form.non_field_errors %} - <p class="errornote"> - {% for error in form.non_field_errors %} - {{ error }} + {# Regroup buttons under categories #} + {% regroup transaction_templates by template_type as template_types %} + + <form method="post" onsubmit="window.onbeforeunload=null"> + {% csrf_token %} + + <div class="row"> + <div class="col-sm-5 mb-4"> + {% if form.non_field_errors %} + <p class="errornote"> + {% for error in form.non_field_errors %} + {{ error }} + {% endfor %} + </p> + {% endif %} + {% for field in form %} + <div class="form-row{% if field.errors %} errors{% endif %}"> + {{ field.errors }} + <div> + {{ field.label_tag }} + {% if field.is_readonly %} + <div class="readonly">{{ field.contents }}</div> + {% else %} + {{ field }} + {% endif %} + {% if field.field.help_text %} + <div class="help">{{ field.field.help_text|safe }}</div> + {% endif %} + </div> + </div> {% endfor %} - </p> - {% endif %} - <fieldset class="module aligned"> - {% for field in form %} - <div class="form-row{% if field.errors %} errors{% endif %}"> - {{ field.errors }} - <div> - {{ field.label_tag }} - {% if field.is_readonly %} - <div class="readonly">{{ field.contents }}</div> - {% else %} - {{ field }} - {% endif %} - {% if field.field.help_text %} - <div class="help">{{ field.field.help_text|safe }}</div> - {% endif %} + </div> + + <div class="col-sm-7"> + <div class="card text-center shadow"> + {# 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 %} + </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 }}"> + <div class="d-inline-flex flex-wrap justify-content-center"> + {% for button in template_type.list %} + <button class="btn btn-outline-dark rounded-0 flex-fill" + name="button" value="{{ button.name }}"> + {{ button.name }} ({{ button.amount | pretty_money }}) + </button> + {% endfor %} + </div> + </div> + {% endfor %} + </div> </div> </div> - {% endfor %} - {% for button in buttons %} - <button name="button" value="{{ button.name }}">{{ button.name }} ({{ button.amount | pretty_money }})</button> - {% endfor %} - </fieldset> + </div> + </div> </form> {% endblock %} + +{% block extrajavascript %} + <script type="text/javascript"> + $(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 %}