diff --git a/backend/foldbank/management/commands/populatedb.py b/backend/foldbank/management/commands/populatedb.py
new file mode 100644
index 0000000..6bd83aa
--- /dev/null
+++ b/backend/foldbank/management/commands/populatedb.py
@@ -0,0 +1,324 @@
+# standard imports
+import datetime
+
+# 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
+ 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": make_aware(datetime.datetime(year=2023, month=1, day=23)),
+ "frequency": datetime.timedelta(days=30),
+ "due_on": make_aware(datetime.datetime(year=2023, month=1, day=23)),
+ },
+ },
+ {
+ "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": make_aware(datetime.datetime(year=2023, month=1, day=20)),
+ "frequency": datetime.timedelta(days=30),
+ "due_on": make_aware(datetime.datetime(year=2023, month=2, day=19)),
+ }
+ },
+ ]
+ 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": make_aware(datetime.datetime(year=2023, month=1, day=23, hour=11, minute=17)),
+ }
+ },
+ {
+ "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": make_aware(datetime.datetime(year=2023, month=1, day=23, hour=23, minute=45)),
+ }
+ },
+ {
+ "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": make_aware(datetime.datetime(year=2023, month=1, day=23, hour=5, minute=37)),
+ }
+ },
+ {
+ "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": make_aware(datetime.datetime(year=2023, month=1, day=23, hour=12, minute=17)),
+ }
+ },
+ {
+ "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": make_aware(datetime.datetime(year=2023, month=1, day=2, hour=10, minute=32)),
+ }
+ },
+ {
+ "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": "35",
+ "tag": Tag.objects.get(title="Food & Drinks", sub_category="Swiggy"),
+ "defaults": {
+ "created_at": make_aware(datetime.datetime(year=2023, month=1, day=1, hour=11, minute=17)),
+ }
+ },
+ {
+ "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": "35",
+ "tag": Tag.objects.get(title="Subscription", sub_category="Netflix"),
+ "defaults": {
+ "created_at": make_aware(datetime.datetime(year=2023, month=1, day=23, hour=23, minute=45)),
+ }
+ },
+ ]
+ for t in transactions:
+ Transaction.objects.get_or_create(**t)
+
diff --git a/backend/foldbank/models.py b/backend/foldbank/models.py
index 3ec0229..d106963 100644
--- a/backend/foldbank/models.py
+++ b/backend/foldbank/models.py
@@ -77,8 +77,10 @@ class Tag(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
- return f"{self.title} - {self.sub_category}"
-
+ ret = self.title
+ if self.sub_category:
+ ret += f" - {self.sub_category}"
+ return ret
class Bank(models.Model):
diff --git a/backend/media_cdn/images/bank_logos/axis.svg b/backend/media_cdn/images/bank_logos/axis.svg
new file mode 100644
index 0000000..af1d07a
--- /dev/null
+++ b/backend/media_cdn/images/bank_logos/axis.svg
@@ -0,0 +1,20 @@
+
\ No newline at end of file
diff --git a/backend/media_cdn/images/bank_logos/foldlogo.svg b/backend/media_cdn/images/bank_logos/foldlogo.svg
new file mode 100644
index 0000000..e7d35ff
--- /dev/null
+++ b/backend/media_cdn/images/bank_logos/foldlogo.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/backend/media_cdn/images/bank_logos/hdfc.svg b/backend/media_cdn/images/bank_logos/hdfc.svg
new file mode 100644
index 0000000..f5f850f
--- /dev/null
+++ b/backend/media_cdn/images/bank_logos/hdfc.svg
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/backend/media_cdn/images/bank_logos/icici.svg b/backend/media_cdn/images/bank_logos/icici.svg
new file mode 100644
index 0000000..dedadf5
--- /dev/null
+++ b/backend/media_cdn/images/bank_logos/icici.svg
@@ -0,0 +1,15 @@
+
\ No newline at end of file
diff --git a/backend/media_cdn/images/bank_logos/sbi.svg b/backend/media_cdn/images/bank_logos/sbi.svg
new file mode 100644
index 0000000..ceb49ac
--- /dev/null
+++ b/backend/media_cdn/images/bank_logos/sbi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file