fisk/core/views/profit.py

81 lines
2.6 KiB
Python
Raw Normal View History

import uuid
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseBadRequest
from django.shortcuts import render
from django.urls import reverse
from django.views import View
from two_factor.views.mixins import OTPRequiredMixin
from core.exchanges import GenericAPIError
2022-11-29 07:20:39 +00:00
from core.models import Account
from core.util import logs
log = logs.get_logger(__name__)
2022-11-29 07:20:39 +00:00
def get_profit(user):
items = []
accounts = Account.objects.filter(user=user)
for account in accounts:
try:
details = account.client.get_account()
pl = details["pl"]
2022-11-29 07:20:39 +00:00
item = {
"account": account,
"pl": float(pl),
"balance": details["balance"],
"currency": details["currency"],
}
items.append(item)
except GenericAPIError:
continue
return items
2022-11-29 07:20:39 +00:00
class Profit(LoginRequiredMixin, OTPRequiredMixin, View):
allowed_types = ["modal", "widget", "window", "page"]
window_content = "window-content/objects.html"
list_template = "partials/profit-list.html"
page_title = "Profit by account"
page_subtitle = None
context_object_name_singular = "profit"
context_object_name = "profit"
def get(self, request, type):
if type not in self.allowed_types:
return HttpResponseBadRequest
self.template_name = f"wm/{type}.html"
unique = str(uuid.uuid4())[:8]
items = get_profit(request.user)
orig_type = type
if type == "page":
type = "modal"
cast = {
"type": orig_type,
}
list_url = reverse("profit", kwargs={**cast})
context = {
"title": f"Profit ({type})",
"unique": unique,
"window_content": self.window_content,
"list_template": self.list_template,
"object_list": items,
"type": type,
"page_title": self.page_title,
"page_subtitle": self.page_subtitle,
"list_url": list_url,
"context_object_name_singular": self.context_object_name_singular,
"context_object_name": self.context_object_name,
}
# Return partials for HTMX
if self.request.htmx:
2022-11-29 07:20:39 +00:00
if request.headers["HX-Target"] == self.context_object_name + "-table":
self.template_name = self.list_template
elif orig_type == "page":
self.template_name = self.list_template
else:
context["window_content"] = self.list_template
2022-11-29 07:20:39 +00:00
return render(request, self.template_name, context)