114 lines
3.2 KiB
Python
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 ✅')
|
|
)
|
|
|