diff --git a/expenses_manager/expenses/models.py b/expenses_manager/expenses/models.py index 3449ffa..7316932 100644 --- a/expenses_manager/expenses/models.py +++ b/expenses_manager/expenses/models.py @@ -53,7 +53,7 @@ class Account(models.Model): or Decimal('0') ) income_total = ( - self.incomes.aggregate(total=Sum('income'))['total'] + self.incomes.aggregate(total=Sum('amount'))['total'] or Decimal('0') ) return self.initial_balance + income_total - expenses_total @@ -136,5 +136,3 @@ class Income(models.Model): def __str__(self): return f'{self.name} - {self.amount}' - - \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/account_confirm_delete.html b/expenses_manager/expenses/templates/expenses/account_confirm_delete.html new file mode 100644 index 0000000..9632630 --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/account_confirm_delete.html @@ -0,0 +1,24 @@ +{% load static %} + + + + Eliminar + + + + +

Eliminar cuenta

+ +

+ ¿Seguro que quieres eliminar la cuenta + {{ account.name }} +

+ +
+ {% csrf_token %} + + Cancelar +
+ + + \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/account_form.html b/expenses_manager/expenses/templates/expenses/account_form.html new file mode 100644 index 0000000..a602c4d --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/account_form.html @@ -0,0 +1,27 @@ +{% load static %} + + + + Cuenta + + + + +

+ {% if form.instance.pk %} + Editar cuenta + {% else %} + Nueva cuenta + {% endif %} +

+ +
+ {% csrf_token %} + {{ form.as_p }} + + + Cancelar +
+ + + \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/account_list.html b/expenses_manager/expenses/templates/expenses/account_list.html new file mode 100644 index 0000000..f90259a --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/account_list.html @@ -0,0 +1,44 @@ +{% load static %} + + + + Cuentas + + + + +

Mis cuentas

+ + ➕ Nueva cuenta + + + + + + + + + + + + + {% for account in accounts %} + + + + + + + + {% empty %} + + + + {% endfor %} + +
NombreSaldo inicialSaldo actualActiva
{{ account.name }}{{ account.initial_balance }}{{ account.current_balance|floatformat:2 }}{{ account.active }} + Editar + Eliminar +
No hay cuentas
+ + \ No newline at end of file diff --git a/expenses_manager/expenses/urls.py b/expenses_manager/expenses/urls.py index 72700b1..26ded12 100644 --- a/expenses_manager/expenses/urls.py +++ b/expenses_manager/expenses/urls.py @@ -12,4 +12,8 @@ urlpatterns = [ path('tags/new/', views.tag_create, name='tag_create'), path('tags//edit/', views.tag_edit, name='tag_edit'), path('tags//delete/', views.tag_delete, name='tag_delete'), + path('accounts/', views.account_list, name='account_list'), + path('accounts/new/', views.account_create, name='account_create'), + path('accounts//edit/', views.account_edit, name='account_edit'), + path('accounts//delete/', views.account_delete, name='account_delete'), ] \ No newline at end of file diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index aef8d4a..fedb97d 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -1,7 +1,7 @@ from datetime import date from operator import truediv -from .forms import ExpenseForm, IncomeForm, TagForm from .models import Account, Category, Expense, Tag +from .forms import ExpenseForm, IncomeForm, TagForm, AccountForm # from dateutli.relativedelta import relativedelta from django.db.models import Sum @@ -296,7 +296,7 @@ def dashboard(request): kpi_balance = selected_account_obj.current_balance() else: kpi_balance = ( - Accounts.objects.filter(owner.request.user, active=True) + Account.objects.filter(owner=request.user, active=True) .aggregate(total=Sum('initial_balance'))['total'] or 0 ) - ( expenses.aggregate(total=Sum('amount'))['total'] or 0 @@ -587,7 +587,7 @@ def account_list(request): return render( request, 'expenses/account_list.html', - {'account': accounts} + {'accounts': accounts} ) @@ -608,7 +608,43 @@ def account_create(request): 'expenses/account_form.html', {'form': form} ) - + +@login_required +def account_edit(request, pk): + account = get_object_or_404( + Account, + pk=pk, + owner=request.user + ) + + if request.method == 'POST': + form = AccountForm(request.POST, instance=account) + if form.is_valid(): + form.save() + return redirect('account_list') + else: + form = AccountForm(instance=account) + + return render( + request, + 'expenses/account_form.html', + {'form': form} + ) + +@login_required +def account_delete(request, pk): + account = get_object_or_404(Account, pk=pk, owner=request.user) + + if request.method == 'POST': + account.active = False + account.save() + return redirect('account_list') + + return render( + request, + 'expenses/account_confirm_delete.html', + {'account':account} + ) @login_required def income_create(request):