Modified the filter by tags
This commit is contained in:
parent
36e0cfaa44
commit
abd07919d4
@ -45,17 +45,15 @@
|
|||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label for="tag">Filtrar por tag:</label>
|
<label for="tag">Filtrar por tags:</label>
|
||||||
<select name="tag" id="tag" onchange="this.form.submit()">
|
<div class="active-tags">
|
||||||
<option value="">Todas</option>
|
{% for tag in tags_with_state %}
|
||||||
{% for tag in tags %}
|
<a href="?{{ tag.query }}"
|
||||||
<option value="{{ tag.id }}"
|
class="tag {% if tag.active %}active{% endif %}">
|
||||||
{% if selected_tag == tag.id %}selected{% endif %}
|
{{ tag.name }} {% if tag.active %} ✕{% endif %}
|
||||||
>
|
</a>
|
||||||
{{ tag.name }}
|
|
||||||
</option>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</div>>
|
||||||
|
|
||||||
<button type="submit">Filtrar</button>
|
<button type="submit">Filtrar</button>
|
||||||
<a href="{% url 'expense_list' %}">Limpiar</a>
|
<a href="{% url 'expense_list' %}">Limpiar</a>
|
||||||
@ -91,10 +89,11 @@
|
|||||||
<td>{{ expense.amount }}</td>
|
<td>{{ expense.amount }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% for tag in expense.tags.all %}
|
{% for tag in expense.tags.all %}
|
||||||
<!-- <span>{{ tag.name }}</span>{% if not forloop.last %}, {% endif %} -->
|
<span class="tag">
|
||||||
<a href="?tag={{ tag.id }}" class="tag">{{ tag.name }}</a>
|
{{ tag.name }}
|
||||||
|
</span>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
-
|
<span>-</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
|
from operator import truediv
|
||||||
from .forms import ExpenseForm, TagForm
|
from .forms import ExpenseForm, TagForm
|
||||||
from .models import Category, Expense, Tag
|
from .models import Category, Expense, Tag
|
||||||
# from dateutli.relativedelta import relativedelta
|
# from dateutli.relativedelta import relativedelta
|
||||||
@ -114,7 +115,9 @@ def expense_list(request):
|
|||||||
year = _get_int(request.GET.get('year'))
|
year = _get_int(request.GET.get('year'))
|
||||||
month = _get_int(request.GET.get('month'))
|
month = _get_int(request.GET.get('month'))
|
||||||
category = _get_int(request.GET.get('category'))
|
category = _get_int(request.GET.get('category'))
|
||||||
tag_id = _get_int(request.GET.get('tag'))
|
|
||||||
|
tag_ids = request.GET.getlist('tag')
|
||||||
|
tag_ids = [int(t) for t in tag_ids]
|
||||||
|
|
||||||
if year:
|
if year:
|
||||||
expenses = expenses.filter(date__year=year)
|
expenses = expenses.filter(date__year=year)
|
||||||
@ -125,8 +128,10 @@ def expense_list(request):
|
|||||||
if category:
|
if category:
|
||||||
expenses = expenses.filter(category_id=category)
|
expenses = expenses.filter(category_id=category)
|
||||||
|
|
||||||
if tag_id:
|
if tag_ids:
|
||||||
expenses = expenses.filter(tags__id=tag_id)
|
expenses = expenses.filter(tags__id__in=tag_ids).distinct()
|
||||||
|
|
||||||
|
selected_tags = tag_ids or []
|
||||||
|
|
||||||
expenses = expenses.order_by('-date')
|
expenses = expenses.order_by('-date')
|
||||||
|
|
||||||
@ -145,8 +150,28 @@ def expense_list(request):
|
|||||||
# Pagination
|
# Pagination
|
||||||
paginator = Paginator(expenses, 10)
|
paginator = Paginator(expenses, 10)
|
||||||
page_number = request.GET.get('page')
|
page_number = request.GET.get('page')
|
||||||
page_obj = paginator.get_page(page_number)
|
page_obj = paginator.get_page(page_number)
|
||||||
|
|
||||||
|
# tags with state
|
||||||
|
tags_with_state = []
|
||||||
|
|
||||||
|
for tag in Tag.objects.filter(owner=request.user):
|
||||||
|
if tag.id in selected_tags:
|
||||||
|
new_tags = [t for t in selected_tags if t != tag.id]
|
||||||
|
active = True
|
||||||
|
else:
|
||||||
|
new_tags = selected_tags + [tag.id]
|
||||||
|
active = False
|
||||||
|
|
||||||
|
query = '&'.join([f'tag={t}' for t in new_tags])
|
||||||
|
|
||||||
|
tags_with_state.append({
|
||||||
|
'id': tag.id,
|
||||||
|
'name': tag.name,
|
||||||
|
'active': active,
|
||||||
|
'query': query,
|
||||||
|
})
|
||||||
|
|
||||||
return render (
|
return render (
|
||||||
request,
|
request,
|
||||||
'expenses/expense_list.html',
|
'expenses/expense_list.html',
|
||||||
@ -162,8 +187,9 @@ def expense_list(request):
|
|||||||
'kpi_total': total_amount,
|
'kpi_total': total_amount,
|
||||||
'kpi_count': expense_count,
|
'kpi_count': expense_count,
|
||||||
'kpi_categories': category_count,
|
'kpi_categories': category_count,
|
||||||
'selected_tag': tag_id,
|
'selected_tags': selected_tags,
|
||||||
'tags': Tag.objects.filter(owner=request.user),
|
'tags': Tag.objects.filter(owner=request.user),
|
||||||
|
'tags_with_state': tags_with_state,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user