331 lines
12 KiB
Python
331 lines
12 KiB
Python
# 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()
|
|
|