From 54b30f6f024d24bb2ab4de6b7846e392c4165f90 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Sun, 1 Feb 2026 13:33:43 +0100 Subject: [PATCH] Created demo --- .../expenses/management/commands/seed_demo.py | 114 ++++++++++++++++++ ...lter_account_owner_alter_category_owner.py | 26 ++++ 2 files changed, 140 insertions(+) create mode 100644 expenses_manager/expenses/management/commands/seed_demo.py create mode 100644 expenses_manager/expenses/migrations/0003_alter_account_owner_alter_category_owner.py diff --git a/expenses_manager/expenses/management/commands/seed_demo.py b/expenses_manager/expenses/management/commands/seed_demo.py new file mode 100644 index 0000000..876ced3 --- /dev/null +++ b/expenses_manager/expenses/management/commands/seed_demo.py @@ -0,0 +1,114 @@ +from datetime import date +from decimal import Decimal +from django.utils import timezone +from django.contrib.auth import get_user_model +from django.core.management.base import BaseCommand + +from expenses.models import Account, Category, Tag, Expense + + +class Command(BaseCommand): + help = 'Seed demo data for development' + + def handle(self, *args, **options): + User = get_user_model() + + user, created = User.objects.get_or_create( + username='demo', + defaults={'email':'demo@example.com'} + ) + + if created: + user.set_password('demo1234') + user.save() + user.is_staff = True + user.is_superuser = True + self.stdout.write(self.style.SUCCESS("Demo user created")) + else: + user.is_staff = True + user.is_superuser = True + self.stdout.write('Demo user exists!!') + + # ------------------ + # Accounts + # ------------------ + account, _ = Account.objects.get_or_create( + owner=user, + name="General", + defaults={ + 'initial_balance': Decimal('1500.00'), + 'active': True, + }, + ) + + # ------------------ + # Categories + # ------------------ + food, _ = Category.objects.get_or_create( + owner=user, + name='Food' + ) + + rent, _ = Category.objects.get_or_create( + owner=user, + name='Rent' + ) + + leisure, _ = Category.objects.get_or_create( + owner=user, + name='Leisure' + ) + + # ------------------ + # Tags + # ------------------ + supermarket, _ = Tag.objects.get_or_create( + owner=user, + name='Supermarket', + ) + + recurring, _ = Tag.objects.get_or_create( + owner=user, + name='Recurring', + ) + + # ------------------ + # Expenses + # ------------------ + expenses_data = [ + { + 'category': food, + 'amount': Decimal('45.50'), + 'tags': [supermarket], + }, + { + 'category': rent, + 'amount': Decimal('750.50'), + 'tags': [recurring], + }, + { + 'category': leisure, + 'amount': Decimal('60.00'), + 'tags': [], + }, + ] + + for idx, data in enumerate(expenses_data): + expense, created = Expense.objects.get_or_create( + owner=user, + account=account, + date=date.today().replace(day=min(10 + idx, 28)), + category=data['category'], + amount=data['amount'] + ) + + if created: + expense.tags.set(data['tags']) + self.stdout.write(f'Created expense: {expense.amount} €') + else: + self.stdout.write('Expense exist') + + self.stdout.write( + self.style.SUCCESS('Seed demos executed successfuly ✅') + ) + \ No newline at end of file diff --git a/expenses_manager/expenses/migrations/0003_alter_account_owner_alter_category_owner.py b/expenses_manager/expenses/migrations/0003_alter_account_owner_alter_category_owner.py new file mode 100644 index 0000000..d2edd58 --- /dev/null +++ b/expenses_manager/expenses/migrations/0003_alter_account_owner_alter_category_owner.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.10 on 2026-02-01 12:25 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('expenses', '0002_alter_account_options_alter_category_unique_together_and_more'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='account', + name='owner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='accounts', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='category', + name='owner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='categories', to=settings.AUTH_USER_MODEL), + ), + ]