diff --git a/kfet/static/kfet/js/statistic.js b/kfet/static/kfet/js/statistic.js new file mode 100644 index 00000000..aa2b7842 --- /dev/null +++ b/kfet/static/kfet/js/statistic.js @@ -0,0 +1,16 @@ +jQuery(document).ready(function() { + // FONCTIONS + // Permet de raffraichir un champ, étant donné : + // thing_url : l'url contenant le contenu + // thing_div : le div où le mettre + // empty_... : le truc à dire si on a un contenu vide + function get_thing(thing_url, thing_div, empty_thing_message) { + $.get(thing_url, function(data) { + if(jQuery.trim(data).length==0) { + thing_div.html(empty_thing_message); + } else { + thing_div.html(data); + } + }); + } +}); diff --git a/kfet/templates/kfet/article_read.html b/kfet/templates/kfet/article_read.html index bb852706..250014b7 100644 --- a/kfet/templates/kfet/article_read.html +++ b/kfet/templates/kfet/article_read.html @@ -83,13 +83,7 @@

Ventes de {{ article.name }}

- -
-
-
-
-

Répartition des câlins

- +
@@ -103,43 +97,23 @@ {% endblock %} diff --git a/kfet/templates/kfet/article_stat_last.html b/kfet/templates/kfet/article_stat_last.html index b18e3e4c..f28637f7 100644 --- a/kfet/templates/kfet/article_stat_last.html +++ b/kfet/templates/kfet/article_stat_last.html @@ -1,14 +1,8 @@ -{% load staticfiles %} -{% comment %} -TODO : supprimer les fichiers script jQuery et Chart.js -{% endcomment %} - - - -
{% for k,stat in stats.items %} @@ -32,33 +15,33 @@ jQuery(document).ready(function() { // VARIABLES // défaut - content_id = $("#{{content_id}}"); + {{if_prefix}}_content_id = $("#{{content_id}}"); {% for k,stat in stats.items %} {% if k == default_stat %} - default_url_{{id_prefix}} = "{{ stat | get_item:'url' }}"; + {{id_prefix}}_default_url = "{{ stat | get_item:'url' }}"; {% endif %} {% endfor %} // INIT - get_thing(default_url_{{id_prefix}}, content_id, "Ouppss ?"); + get_thing({{id_prefix}}_default_url, {{if_prefix}}_content_id, "Ouppss ?"); {% for k,stat in stats.items %} $("#{{stat|get_item:'btn'}}").on('click', function() { - get_thing("{{stat|get_item:'url'}}", content_id, "Ouuups ?") + get_thing("{{stat|get_item:'url'}}", {{if_prefix}}_content_id, "Ouuups ?") }); {% endfor %} - // FONCTIONS - // Permet de raffraichir un champ, étant donné : - // thing_url : l'url contenant le contenu - // thing_div : le div où le mettre - // empty_... : le truc à dire si on a un contenu vide - function get_thing(thing_url, thing_div, empty_thing_message) { - $.get(thing_url, function(data) { - if(jQuery.trim(data).length==0) { - thing_div.html(empty_thing_message); - } else { - thing_div.html(data); - } - }); - } + // FONCTIONS + // Permet de raffraichir un champ, étant donné : + // thing_url : l'url contenant le contenu + // thing_div : le div où le mettre + // empty_... : le truc à dire si on a un contenu vide + function get_thing(thing_url, thing_div, empty_thing_message) { + $.get(thing_url, function(data) { + if(jQuery.trim(data).length==0) { + thing_div.html(empty_thing_message); + } else { + thing_div.html(data); + } + }); + } }); diff --git a/kfet/urls.py b/kfet/urls.py index 1904a896..09f16b17 100644 --- a/kfet/urls.py +++ b/kfet/urls.py @@ -122,13 +122,13 @@ urlpatterns = [ name = 'kfet.article.update'), # Article - Statistics - url('^articles/(?P\d+)/stat/last/$', + url('^articles/(?P\d+)/stat/last$', views.ArticleStatLastAll.as_view(), name = 'kfet.article.stat.last'), - url('^articles/(?P\d+)/stat/last/week/$', + url('^articles/(?P\d+)/stat/last/week$', views.ArticleStatLastWeek.as_view(), name = 'kfet.article.stat.last.week'), - url('^articles/(?P\d+)/stat/last/day/$', + url('^articles/(?P\d+)/stat/last/day$', views.ArticleStatLastDay.as_view(), name = 'kfet.article.stat.last.day'), diff --git a/kfet/views.py b/kfet/views.py index b8c47799..1614a27b 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -8,7 +8,7 @@ from django.shortcuts import render, get_object_or_404, redirect from django.core.exceptions import PermissionDenied, ValidationError from django.core.cache import cache from django.views.generic import ListView, DetailView -from django.views.generic.detail import BaseDetailView, SingleObjectTemplateResponseMixin +from django.views.generic.detail import BaseListView, BaseDetailView, SingleObjectTemplateResponseMixin, MultipleObjectTemplateResponseMixin from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView from django.core.urlresolvers import reverse_lazy from django.contrib import messages @@ -1993,6 +1993,19 @@ class HybridDetailView(JSONResponseMixin, return super(HybridDetailView, self).render_to_response(context) +# Rend un ListView en html sauf si on lui précise dans +# l'appel à get que l'on veut un json auquel cas il en rend un +class HybridListView(JSONResponseMixin, + MultipleObjectTemplateResponseMixin, + BaseListView): + def render_to_response(self, context): + # Look for a 'format=json' GET argument + if self.request.GET.get('format') == 'json': + return self.render_to_json_response(context) + else: + return super(HybridListView, self).render_to_response(context) + + # Un résume des toutes les vues de stat d'un objet # NE REND PAS DE JSON class ObjectResumeStat(DetailView): @@ -2157,3 +2170,44 @@ class ArticleStatLastWeek(ArticleStatLast): def get_labels(self, **kwargs): weeks = lastweeks(7) return weeksnames(weeks) + +# ------------------------------ +# Article Statistique Catégories +# ------------------------------ + +class DurationStat(HybridListView): + lookup_duration_type = 'day' # 'day' || 'week' || 'month' + lookup_duration_number = 3 # ie ici : 3 jours + + def get_end_date(self, **kwargs): + if self.lookup_duration_type == 'day': + return this_morning() + elif self.lookup_duration_type == 'week': + return this_monday_morning() + elif self.lookup_duration_type == 'month': + return this_first_month_day() + else raise ValueError('duration_type invalid') + + def get_begining_date(self, **kwargs): + end_date = self.get_end_date(self, **kwargs) + if self.lookup_duration_type == 'day': + days = self.lookup_nb_duration + elif self.lookup_duration_type == 'week': + days = 7*self.lookup_nb_duration + elif self.lookup_duration_type == 'month': + days = 30*self.lookup_nb_duration + else raise ValueError('this should not be happening.') + delta = timezone.timedelta(days=days) + return end_date - delta + + +#TODO +# class CategoryStatAll(DurationStat): +# model = ArticleCategory +# template_name = 'kfet/category_stat.html' +# +# def get_context_data(self, **kwargs): +# context = {} +# queryset = kwargs.pop('object_list', self.object_list) +# +# return context