Rework stats_manifest
On change la façon dont les vues gèrent l'interface avec `Scale`. Side effect : on peut avoir l'historique sur tout le temps
This commit is contained in:
parent
c66fb7eb6f
commit
97cb9d1f3b
3 changed files with 44 additions and 51 deletions
|
@ -145,7 +145,7 @@
|
||||||
.on("click", showStats);
|
.on("click", showStats);
|
||||||
|
|
||||||
// saves the default option to select
|
// saves the default option to select
|
||||||
if (i == data.default_stat || i == 0)
|
if (stat.default)
|
||||||
to_click = btn;
|
to_click = btn;
|
||||||
|
|
||||||
// append the elements to the parent
|
// append the elements to the parent
|
||||||
|
|
|
@ -144,43 +144,7 @@ class MonthScale(Scale):
|
||||||
return to_kfet_day(dt).replace(day=1)
|
return to_kfet_day(dt).replace(day=1)
|
||||||
|
|
||||||
|
|
||||||
def stat_manifest(
|
def scale_url_params(scales_def, **other_url_params):
|
||||||
scales_def=None, scale_args=None, scale_prefix=None, **other_url_params
|
|
||||||
):
|
|
||||||
if scale_prefix is None:
|
|
||||||
scale_prefix = "scale_"
|
|
||||||
if scales_def is None:
|
|
||||||
scales_def = []
|
|
||||||
if scale_args is None:
|
|
||||||
scale_args = {}
|
|
||||||
manifest = []
|
|
||||||
for label, cls in scales_def:
|
|
||||||
url_params = {scale_prefix + "name": cls.name}
|
|
||||||
url_params.update(
|
|
||||||
{scale_prefix + key: value for key, value in scale_args.items()}
|
|
||||||
)
|
|
||||||
url_params.update(other_url_params)
|
|
||||||
manifest.append(dict(label=label, url_params=url_params))
|
|
||||||
return manifest
|
|
||||||
|
|
||||||
|
|
||||||
def last_stats_manifest(
|
|
||||||
scales_def=None, scale_args=None, scale_prefix=None, **url_params
|
|
||||||
):
|
|
||||||
scales_def = [
|
|
||||||
("Derniers mois", MonthScale),
|
|
||||||
("Dernières semaines", WeekScale),
|
|
||||||
("Derniers jours", DayScale),
|
|
||||||
]
|
|
||||||
if scale_args is None:
|
|
||||||
scale_args = {}
|
|
||||||
scale_args.update(dict(last=True, n_steps=7))
|
|
||||||
return stat_manifest(
|
|
||||||
scales_def=scales_def,
|
|
||||||
scale_args=scale_args,
|
|
||||||
scale_prefix=scale_prefix,
|
|
||||||
**url_params
|
|
||||||
)
|
|
||||||
"""
|
"""
|
||||||
Convertit une spécification de scales en arguments GET utilisables par ScaleMixin.
|
Convertit une spécification de scales en arguments GET utilisables par ScaleMixin.
|
||||||
La spécification est de la forme suivante :
|
La spécification est de la forme suivante :
|
||||||
|
@ -189,7 +153,14 @@ def last_stats_manifest(
|
||||||
- other_url_params : paramètres GET supplémentaires
|
- other_url_params : paramètres GET supplémentaires
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
params_list = []
|
||||||
|
for label, cls, params, default in scales_def:
|
||||||
|
url_params = {"scale_name": cls.name}
|
||||||
|
url_params.update({"scale_" + key: value for key, value in params.items()})
|
||||||
|
url_params.update(other_url_params)
|
||||||
|
params_list.append(dict(label=label, url_params=url_params, default=default))
|
||||||
|
|
||||||
|
return params_list
|
||||||
|
|
||||||
|
|
||||||
class ScaleMixin(object):
|
class ScaleMixin(object):
|
||||||
|
|
|
@ -76,7 +76,7 @@ from kfet.models import (
|
||||||
Transfer,
|
Transfer,
|
||||||
TransferGroup,
|
TransferGroup,
|
||||||
)
|
)
|
||||||
from kfet.statistic import ScaleMixin, WeekScale, last_stats_manifest
|
from kfet.statistic import DayScale, MonthScale, ScaleMixin, WeekScale, scale_url_params
|
||||||
|
|
||||||
from .auth import KFET_GENERIC_TRIGRAMME
|
from .auth import KFET_GENERIC_TRIGRAMME
|
||||||
from .auth.views import ( # noqa
|
from .auth.views import ( # noqa
|
||||||
|
@ -2244,10 +2244,11 @@ class SingleResumeStat(JSONDetailView):
|
||||||
On peut aussi définir `stats` dynamiquement, via la fonction `get_stats`.
|
On peut aussi définir `stats` dynamiquement, via la fonction `get_stats`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
nb_default = 0
|
|
||||||
|
|
||||||
stats = []
|
|
||||||
url_stat = None
|
url_stat = None
|
||||||
|
stats = []
|
||||||
|
|
||||||
|
def get_stats(self):
|
||||||
|
return self.stats
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
# On n'hérite pas
|
# On n'hérite pas
|
||||||
|
@ -2271,10 +2272,10 @@ class SingleResumeStat(JSONDetailView):
|
||||||
"url": "{url}{params}".format(
|
"url": "{url}{params}".format(
|
||||||
url=reverse(self.url_stat, args=[url_pk]), params=url_params
|
url=reverse(self.url_stat, args=[url_pk]), params=url_params
|
||||||
),
|
),
|
||||||
|
"default": stat_def.get("default", False),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
context["stats"] = stats
|
context["stats"] = stats
|
||||||
context["default_stat"] = self.nb_default
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
@ -2310,12 +2311,9 @@ class AccountStatBalanceList(UserAccountMixin, SingleResumeStat):
|
||||||
{"label": "Tout le temps"},
|
{"label": "Tout le temps"},
|
||||||
{"label": "1 an", "url_params": {"last_days": 365}},
|
{"label": "1 an", "url_params": {"last_days": 365}},
|
||||||
{"label": "6 mois", "url_params": {"last_days": 183}},
|
{"label": "6 mois", "url_params": {"last_days": 183}},
|
||||||
{"label": "3 mois", "url_params": {"last_days": 90}},
|
{"label": "3 mois", "url_params": {"last_days": 90}, "default": True},
|
||||||
{"label": "30 jours", "url_params": {"last_days": 30}},
|
{"label": "30 jours", "url_params": {"last_days": 30}},
|
||||||
]
|
]
|
||||||
nb_default = 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(login_required, name="dispatch")
|
@method_decorator(login_required, name="dispatch")
|
||||||
|
@ -2427,7 +2425,6 @@ class AccountStatBalance(UserAccountMixin, JSONDetailView):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------
|
# ------------------------
|
||||||
# Consommation personnelle
|
# Consommation personnelle
|
||||||
# ------------------------
|
# ------------------------
|
||||||
|
@ -2442,11 +2439,22 @@ class AccountStatOperationList(UserAccountMixin, SingleResumeStat):
|
||||||
model = Account
|
model = Account
|
||||||
slug_url_kwarg = "trigramme"
|
slug_url_kwarg = "trigramme"
|
||||||
slug_field = "trigramme"
|
slug_field = "trigramme"
|
||||||
nb_default = 2
|
|
||||||
stats = last_stats_manifest(types=[Operation.PURCHASE])
|
|
||||||
url_stat = "kfet.account.stat.operation"
|
url_stat = "kfet.account.stat.operation"
|
||||||
|
|
||||||
|
def get_stats(self):
|
||||||
|
scales_def = [
|
||||||
|
(
|
||||||
|
"Tout le temps",
|
||||||
|
MonthScale,
|
||||||
|
{"last": True, "begin": self.object.created_at},
|
||||||
|
False,
|
||||||
|
),
|
||||||
|
("1 an", MonthScale, {"last": True, "n_steps": 12}, False),
|
||||||
|
("3 mois", WeekScale, {"last": True, "n_steps": 13}, True),
|
||||||
|
("2 semaines", DayScale, {"last": True, "n_steps": 14}, False),
|
||||||
|
]
|
||||||
|
|
||||||
|
return scale_url_params(scales_def, types=[Operation.PURCHASE])
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(login_required, name="dispatch")
|
@method_decorator(login_required, name="dispatch")
|
||||||
|
@ -2510,8 +2518,22 @@ class ArticleStatSalesList(SingleResumeStat):
|
||||||
model = Article
|
model = Article
|
||||||
nb_default = 2
|
nb_default = 2
|
||||||
url_stat = "kfet.article.stat.sales"
|
url_stat = "kfet.article.stat.sales"
|
||||||
stats = last_stats_manifest()
|
|
||||||
|
|
||||||
|
def get_stats(self):
|
||||||
|
first_conso = (
|
||||||
|
Operation.objects.filter(article=self.object)
|
||||||
|
.order_by("group__at")
|
||||||
|
.first()
|
||||||
|
.group.at
|
||||||
|
)
|
||||||
|
scales_def = [
|
||||||
|
("Tout le temps", MonthScale, {"last": True, "begin": first_conso}, False),
|
||||||
|
("1 an", MonthScale, {"last": True, "n_steps": 12}, False),
|
||||||
|
("3 mois", WeekScale, {"last": True, "n_steps": 13}, True),
|
||||||
|
("2 semaines", DayScale, {"last": True, "n_steps": 14}, False),
|
||||||
|
]
|
||||||
|
|
||||||
|
return scale_url_params(scales_def)
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(teamkfet_required, name="dispatch")
|
@method_decorator(teamkfet_required, name="dispatch")
|
||||||
|
|
Loading…
Reference in a new issue