expenses_manager/expenses_manager/expenses/management/commands/seed_demo.py
2026-02-01 13:33:43 +01:00

114 lines
3.2 KiB
Python

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 ✅')
)