foldbank-mock/backend/foldbank/management/commands/populatedb.py
Ameya Shenoy 1ae3e0ce2b
feat: transactions api done
Signed-off-by: Ameya Shenoy <shenoy.ameya@gmail.com>
2023-03-22 16:48:37 +05:30

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()