# standard importspopulatedb import datetime from zoneinfo import ZoneInfo # third-party imports from django.utils.timezone import make_aware from django.core.management.base import BaseCommand # app imports from foldbank.models import User, Tag, Account, Bank, RecurringPayment, Transaction class Command(BaseCommand): help = "populate the database with mock data on a clean instance for easier testing" def handle(self, *args, **options): # users if User.objects.filter(username="admin").exists(): admin = User.objects.get(username="admin") else: admin = User.objects.create_superuser( "admin", password="password", ) nishant, _ = User.objects.get_or_create( username="nishant", defaults={ "name": "Nishant Verma", "password": "password", } ) # tags tags = [ { "title": "Rent", "sub_category": "", "icon_type": "rent", }, { "title": "Subscription", "sub_category": "YouTube", "icon_type": "youtube", }, { "title": "Tag", "sub_category": "", "icon_type": "", }, { "title": "Food & Drinks", "sub_category": "Swiggy", "icon_type": "swiggy", }, { "title": "Food & Drinks", "sub_category": "Food", "icon_type": "food", }, { "title": "Food & Drinks", "sub_category": "Drink", "icon_type": "drink", }, { "title": "Groceries", "sub_category": "", "icon_type": "groceries", }, { "title": "Transport", "sub_category": "", "icon_type": "transport", }, { "title": "Subscription", "sub_category": "Netflix", "icon_type": "netflix", }, ] for tag in tags: Tag.objects.get_or_create(**tag) # banks banks = [ { "name": "HDFC Bank", "defaults": { "logo": "images/bank_logos/hdfc.svg", }, }, { "name": "Axis Bank", "defaults": { "logo": "images/bank_logos/axis.svg", }, }, { "name": "State Bank of India", "defaults": { "logo": "images/bank_logos/sbi.svg", }, }, { "name": "ICICI Bank", "defaults": { "logo": "images/bank_logos/icici.svg", }, }, ] for bank in banks: Bank.objects.get_or_create(**bank) # accounts accounts = [ { "user": nishant, "bank": Bank.objects.get(name="Axis Bank"), "account_number": "34536896852", "account_type": "SA", "ifsc_code": "AXIS0006586", "swift_bic": "6895206BB", "holders_name": "Nishant Verma", "account_owner_type": "UA", "balance": "55410", }, { "user": nishant, "bank": Bank.objects.get(name="HDFC Bank"), "account_number": "92531805286", "account_type": "SA", "ifsc_code": "HDFC0002233", "swift_bic": "HDFCINBBBNG", "holders_name": "Nishant Verma", "account_owner_type": "UA", "balance": "258630", }, { "user": nishant, "bank": Bank.objects.get(name="State Bank of India"), "account_number": "34536896852", "account_type": "SA", "ifsc_code": "SBIN0006586", "swift_bic": "6895106BB", "holders_name": "Nishant Verma", "account_owner_type": "UA", "balance": "27932", }, { "user": nishant, "bank": Bank.objects.get(name="ICICI Bank"), "account_number": "34536896852", "account_type": "SA", "ifsc_code": "ICIC0006586", "swift_bic": "6895306BB", "holders_name": "Nishant Verma", "account_owner_type": "UA", "balance": "7932", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Swiggy", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "2586 Rent", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "YouTube Premium", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Fenny's Bangalore", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Sendhoor", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Reliance Fresh", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Chai Point", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Uber", "account_owner_type": "OA", }, { "user": admin, "bank": Bank.objects.get(name="ICICI Bank"), "account_type": "CA", "holders_name": "Netflix", "account_owner_type": "OA", }, ] for account in accounts: Account.objects.get_or_create(**account) # recurring payment ist = ZoneInfo("Asia/Kolkata") today = datetime.datetime.now(tz=ist) yesterday = datetime.datetime.now(tz=ist) - datetime.timedelta(days=1) recurring_payments = [ { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="2586 Rent"), "amount": "36031", "tag": Tag.objects.get(title="Rent"), "defaults": { "created_at": datetime.datetime(year=2023, month=1, day=23, tzinfo=ist), "frequency": datetime.timedelta(days=30), "due_on": datetime.datetime(year=2023, month=1, day=23, tzinfo=ist), }, }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="YouTube Premium"), "amount": "36031", "tag": Tag.objects.get(title="Rent"), "defaults": { "created_at": datetime.datetime(year=2023, month=1, day=20, tzinfo=ist), "frequency": datetime.timedelta(days=30), "due_on": datetime.datetime(year=2023, month=2, day=19, tzinfo=ist), } }, ] for rp in recurring_payments: RecurringPayment.objects.get_or_create(**rp) # transactions transactions = [ { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Fenny's Bangalore"), "amount": "3940", "tag": Tag.objects.get(title="Tag"), "defaults": { "created_at": datetime.datetime(year=today.year, month=today.month, day=today.day, hour=11, minute=17, tzinfo=ist), } }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Sendhoor"), "amount": "35", "tag": Tag.objects.get(title="Food & Drinks", sub_category="Drink"), "defaults": { "created_at": datetime.datetime(year=today.year, month=today.month, day=today.day, hour=23, minute=45, tzinfo=ist), } }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Reliance Fresh"), "amount": "2399", "tag": Tag.objects.get(title="Groceries"), "defaults": { "created_at": datetime.datetime(year=yesterday.year, month=yesterday.month, day=yesterday.day, hour=5, minute=37, tzinfo=ist), } }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Chai Point"), "amount": "312", "tag": Tag.objects.get(title="Food & Drinks", sub_category="Food"), "defaults": { "created_at": datetime.datetime(year=yesterday.year, month=yesterday.month, day=yesterday.day, hour=12, minute=17, tzinfo=ist), } }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Uber"), "amount": "75", "tag": Tag.objects.get(title="Transport"), "defaults": { "created_at": datetime.datetime(year=2023, month=1, day=2, hour=10, minute=32, tzinfo=ist), } }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Swiggy"), "amount": "249", "tag": Tag.objects.get(title="Food & Drinks", sub_category="Swiggy"), "defaults": { "created_at": datetime.datetime(year=2023, month=1, day=1, hour=11, minute=17, tzinfo=ist), } }, { "from_account": Account.objects.get(user=nishant, bank=Bank.objects.get(name="Axis Bank")), "to_account": Account.objects.get(user=admin, holders_name="Netflix"), "amount": "199", "tag": Tag.objects.get(title="Subscription", sub_category="Netflix"), "defaults": { "created_at": datetime.datetime(year=2022, month=12, day=31, hour=23, minute=45, tzinfo=ist), } }, ] # Transaction.objects.all().delete() for t in transactions: tnx, _ = Transaction.objects.get_or_create(**t) tnx.created_at = t["defaults"]["created_at"] tnx.save()