Added new functionalities to tags
This commit is contained in:
parent
a073bdb142
commit
8cc364879a
@ -25,4 +25,9 @@ class ExpenseForm(forms.ModelForm):
|
|||||||
]
|
]
|
||||||
widgets = {
|
widgets = {
|
||||||
'date': forms.DateInput(attrs={'type': 'date'}),
|
'date': forms.DateInput(attrs={'type': 'date'}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TagForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Tag
|
||||||
|
fields = ['name']
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Eliminar etiqueta</h1>
|
||||||
|
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<button type="submit">Eliminar</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<a href="{% url 'tag_list' %}">Cancelar</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
16
expenses_manager/expenses/templates/expenses/tag_form.html
Normal file
16
expenses_manager/expenses/templates/expenses/tag_form.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Etiqueta</h1>
|
||||||
|
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<button type="submit">Guardar</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<a href="{% url 'tag_list' %}">Volver</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
20
expenses_manager/expenses/templates/expenses/tag_list.html
Normal file
20
expenses_manager/expenses/templates/expenses/tag_list.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Etiquetas</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{% for tag in tags %}
|
||||||
|
<li>
|
||||||
|
{{ tag.name }}
|
||||||
|
<a href="{% url 'tag_edit' tag.id %}">Editar</a>
|
||||||
|
<a href="{% url 'tag_delete' tag.id %}">Eliminar</a>
|
||||||
|
</li>
|
||||||
|
{% empty %}
|
||||||
|
<li>No hay etiquetas</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -22,4 +22,17 @@ def test_expense_can_have_tags(client, django_user_model):
|
|||||||
expense.tags.add(tag)
|
expense.tags.add(tag)
|
||||||
|
|
||||||
assert expense.tags.count() == 1
|
assert expense.tags.count() == 1
|
||||||
assert tag in expense.tags.all()
|
assert tag in expense.tags.all()
|
||||||
|
|
||||||
|
def test_user_can_create_tag(client, django_user_model):
|
||||||
|
user = django_user_model.objects.create_user(
|
||||||
|
username='test', password='1234'
|
||||||
|
)
|
||||||
|
client.login(username='test', password='1234')
|
||||||
|
|
||||||
|
response = client.post(
|
||||||
|
reverse('tag_create'),
|
||||||
|
{'name': 'Food'}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert Tag.objects.filter(owner=user, name='Food').exists()
|
||||||
|
|||||||
@ -8,4 +8,8 @@ urlpatterns = [
|
|||||||
path('<int:pk>/edit/', views.expense_edit, name='expense_edit'),
|
path('<int:pk>/edit/', views.expense_edit, name='expense_edit'),
|
||||||
path('<int:pk>/delete/', views.expense_delete, name='expense_delete'),
|
path('<int:pk>/delete/', views.expense_delete, name='expense_delete'),
|
||||||
path('dashboard/', views.dashboard, name='dashboard'),
|
path('dashboard/', views.dashboard, name='dashboard'),
|
||||||
|
path('tags/', views.tag_list, name='tag_list'),
|
||||||
|
path('tags/new/', views.tag_create, name='tag_create'),
|
||||||
|
path('tags/<int:pk>/edit/', views.tag_edit, name='tag_edit'),
|
||||||
|
path('tags/<int:pk>/delete/', views.tag_delete, name='tag_delete'),
|
||||||
]
|
]
|
||||||
@ -1,6 +1,6 @@
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from .models import Category, Expense
|
from .forms import ExpenseForm, TagForm
|
||||||
from .forms import ExpenseForm
|
from .models import Category, Expense, Tag
|
||||||
# from dateutli.relativedelta import relativedelta
|
# from dateutli.relativedelta import relativedelta
|
||||||
|
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
@ -444,4 +444,76 @@ def dashboard(request):
|
|||||||
'kpi_percentage': percentage,
|
'kpi_percentage': percentage,
|
||||||
'category_comparison': category_comparison,
|
'category_comparison': category_comparison,
|
||||||
'kpi_trend': kpi_trend,
|
'kpi_trend': kpi_trend,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def tag_list(request):
|
||||||
|
tags = Tag.objects.filter(owner=request.user)
|
||||||
|
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
'expenses/tag_list.html',
|
||||||
|
{'tags':tags}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def tag_create(request):
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = TagForm(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
tag = form.save(commit=False)
|
||||||
|
tag.owner = request.user
|
||||||
|
tag.save()
|
||||||
|
return redirect('tag_list')
|
||||||
|
else:
|
||||||
|
form = TagForm()
|
||||||
|
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
'expenses/tag_form.html',
|
||||||
|
{'form': form}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def tag_edit(request, pk):
|
||||||
|
tag = get_object_or_404(
|
||||||
|
Tag,
|
||||||
|
pk=pk,
|
||||||
|
owner=request.user
|
||||||
|
)
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = TagForm(request.POST, instance=tag)
|
||||||
|
if form.is_valid():
|
||||||
|
form.save()
|
||||||
|
return redirect('tag_list')
|
||||||
|
else:
|
||||||
|
form = TagForm(instance=tag)
|
||||||
|
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
'expenses/tag_form.html',
|
||||||
|
{'form': form}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def tag_delete(request, pk):
|
||||||
|
tag = get_object_or_404(
|
||||||
|
Tag,
|
||||||
|
pk=pk,
|
||||||
|
owner=request.user
|
||||||
|
)
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
tag.delete()
|
||||||
|
return redirect('tag_list')
|
||||||
|
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
'expenses/tag_confirm_delete.html',
|
||||||
|
{'tag': tag}
|
||||||
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user