Created Income model and view

This commit is contained in:
JKuijperM 2026-02-01 19:45:17 +01:00
parent 83fd40085f
commit 907323db7c
4 changed files with 97 additions and 5 deletions

View File

@ -1,5 +1,5 @@
from django import forms
from .models import Expense, Category, Tag, Account
from .models import Expense, Category, Income, Tag, Account
class ExpenseForm(forms.ModelForm):
@ -39,3 +39,17 @@ class AccountForm(forms.ModelForm):
class Meta:
model = Account
fields = ['name', 'initial_balance', 'active']
class IncomeForm(forms.ModelForm):
class Meta:
model = Income
fields = ['account', 'name', 'amount', 'date']
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super().__init__(*args, **kwargs)
self.fields['account'].queryset = Account.objects.filter(
owner=user,
active=True,
)

View File

@ -0,0 +1,31 @@
# Generated by Django 5.2.10 on 2026-02-01 18:27
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('expenses', '0003_alter_account_owner_alter_category_owner'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Income',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=150)),
('amount', models.DecimalField(decimal_places=2, max_digits=12)),
('date', models.DateField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='incomes', to='expenses.account')),
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['-date'],
},
),
]

View File

@ -52,7 +52,11 @@ class Account(models.Model):
self.expenses.aggregate(total=Sum('amount'))['total']
or Decimal('0')
)
return self.initial_balance - expenses_total
income_total = (
self.incomes.aggregate(total=Sum('income'))['total']
or Decimal('0')
)
return self.initial_balance + income_total - expenses_total
def __str__(self):
return self.name
@ -109,3 +113,28 @@ class Expense(models.Model):
def __str__(self):
return "{} - {}".format(self.date, self.amount)
class Income(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
account = models.ForeignKey(
Account,
on_delete=models.CASCADE,
related_name='incomes'
)
name = models.CharField(max_length=150)
amount = models.DecimalField(max_digits=12, decimal_places=2)
date = models.DateField()
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-date']
def __str__(self):
return f'{self.name} - {self.amount}'

View File

@ -1,6 +1,6 @@
from datetime import date
from operator import truediv
from .forms import ExpenseForm, TagForm
from .forms import ExpenseForm, IncomeForm, TagForm
from .models import Account, Category, Expense, Tag
# from dateutli.relativedelta import relativedelta
@ -610,5 +610,23 @@ def account_create(request):
)
@login_required
def income_create(request):
if request.method == 'POST':
form = IncomeForm(request.POST, user=request.user)
if form.is_valid():
income = form.save(commit=False)
income.owner = request.user
income.save()
return redirect('home')
else:
form = IncomeForm(user=request.user)
return render(
request,
'expenses/income_form.html',
{'form': form}
)