pluto/core/views/banks.py

95 lines
2.9 KiB
Python
Raw Normal View History

2023-03-09 16:44:16 +00:00
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse
2023-03-09 18:09:29 +00:00
from mixins.views import ObjectList
2023-03-09 16:44:16 +00:00
from two_factor.views.mixins import OTPRequiredMixin
2023-03-09 18:09:29 +00:00
from core.clients.aggregators.nordigen import NordigenClient
2023-03-09 16:44:16 +00:00
from core.models import Aggregator
from core.util import logs
2023-03-09 18:09:29 +00:00
from core.views.helpers import synchronize_async_helper
2023-03-09 16:44:16 +00:00
log = logs.get_logger(__name__)
class BanksCurrencies(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
"""
2023-03-09 18:09:29 +00:00
Get a list of bank accounts with their details.
2023-03-09 16:44:16 +00:00
"""
list_template = "partials/banks-currencies-list.html"
page_title = "Bank Currencies"
context_object_name_singular = "currency"
context_object_name = "currencies"
list_url_name = "currencies"
list_url_args = ["type"]
def get_context_data(self):
context = super().get_context_data()
self.extra_buttons = [
{
"url": reverse("bank_fetch"),
"action": "refresh",
"method": "get",
"label": "Fetch account details",
"icon": "fa-solid fa-refresh",
},
]
return context
2023-03-09 16:44:16 +00:00
def get_queryset(self, **kwargs):
aggregators = Aggregator.objects.filter(user=self.request.user, enabled=True)
account_info = {}
for agg in aggregators:
for bank, accounts in agg.account_info.items():
if bank not in account_info:
account_info[bank] = []
for account in accounts:
account_info[bank].append(account)
return account_info
2023-03-09 18:09:29 +00:00
class BanksBalances(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
2023-03-09 16:44:16 +00:00
"""
2023-03-09 18:09:29 +00:00
Get the bank balances.
2023-03-09 16:44:16 +00:00
"""
2023-03-09 18:09:29 +00:00
list_template = "partials/banks-balances-list.html"
page_title = "Bank Balances"
context_object_name_singular = "balance"
context_object_name = "balances"
list_url_name = "balances"
list_url_args = ["type"]
2023-03-09 18:55:39 +00:00
def get_context_data(self):
context = super().get_context_data()
self.extra_buttons = [
{
"url": reverse("bank_fetch"),
"action": "refresh",
"method": "get",
"label": "Fetch account details",
"icon": "fa-solid fa-refresh",
},
]
return context
2023-03-09 18:09:29 +00:00
def get_queryset(self, **kwargs):
aggregators = Aggregator.objects.filter(user=self.request.user, enabled=True)
account_balances = {}
for aggregator in aggregators:
run = synchronize_async_helper(NordigenClient(aggregator))
balance_map = synchronize_async_helper(run.get_all_balances())
for k, v in balance_map.items():
if k not in account_balances:
account_balances[k] = []
for item in v:
account_balances[k].append(item)
return account_balances