From b0b9cb123f9dfcc2584e80eef5fdfb77af24cacd Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 30 Sep 2020 19:05:12 +0200 Subject: Stats: generation on demand --- archaeological_warehouse/models.py | 6 ++++-- .../templates/ishtar/sheet_container.html | 22 +++++++++++++++---- .../templates/ishtar/sheet_warehouse.html | 19 +++++++++++++++- archaeological_warehouse/urls.py | 8 +++++++ archaeological_warehouse/views.py | 25 ++++++++++++++++++++++ 5 files changed, 73 insertions(+), 7 deletions(-) (limited to 'archaeological_warehouse') diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index ffc491ddc..f89092dba 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -118,7 +118,8 @@ class DivisionContainer(DashboardFormItem): @property def number_of_finds_by_place(self, update=False): - return self._get_or_set_stats('_number_of_finds_by_place', update) + return self._get_or_set_stats('_number_of_finds_by_place', update, + expected_type=list) def _number_of_containers_by_place(self): return self._number_of_items_by_place( @@ -126,7 +127,8 @@ class DivisionContainer(DashboardFormItem): @property def number_of_containers_by_place(self, update=False): - return self._get_or_set_stats('_number_of_containers_by_place', update) + return self._get_or_set_stats('_number_of_containers_by_place', update, + expected_type=list) def _get_divisions(self, current_path, remaining_division, depth=0): if not remaining_division: diff --git a/archaeological_warehouse/templates/ishtar/sheet_container.html b/archaeological_warehouse/templates/ishtar/sheet_container.html index 336684bc8..7ca39645d 100644 --- a/archaeological_warehouse/templates/ishtar/sheet_container.html +++ b/archaeological_warehouse/templates/ishtar/sheet_container.html @@ -154,7 +154,23 @@ role="tabpanel" aria-labelledby="{{window_id}}-stats-tab">

{% trans "Statistics" %}

- {% trans "These numbers are updated hourly" %} +
+
+ + {% with item.last_stats_update as last_stats_update%} + {% if last_stats_update %} + {% trans "Last update:" %} {{last_stats_update}} + {% endif %}{% endwith %} +
+
{% if not item.number_containers and not item.number_divisions %}
@@ -188,10 +204,8 @@ {% endif %} {% endfor %} -

{% trans "Containers" %}

- {% if item.number_of_containers_by_place %} -

{% trans "Containers by location in the warehouse" %}

+

{% trans "Containers by location" %}

{% for items in item.number_of_containers_by_place %} {% if items %}

{% trans "Statistics" %}

- {% trans "These numbers are updated hourly" %} + +
+
+ + {% with item.last_stats_update as last_stats_update%} + {% if last_stats_update %} + {% trans "Last update:" %} {{last_stats_update}} + {% endif %}{% endwith %} +
+
{% if not item.number_containers and not item.number_divisions %}
diff --git a/archaeological_warehouse/urls.py b/archaeological_warehouse/urls.py index 2f43d74a6..46d812def 100644 --- a/archaeological_warehouse/urls.py +++ b/archaeological_warehouse/urls.py @@ -128,4 +128,12 @@ urlpatterns = [ url(r'container-manual-merge-items/(?P[0-9_]+?)/$', views.ContainerManualMergeItems.as_view(), name='container_manual_merge_items'), + + url(r'generate-stats-container/(?P.+)/', + views.GenerateStatsContainer.as_view(), + name='generate-stats-container'), + + url(r'generate-stats-warehouse/(?P.+)/', + views.GenerateStatsWarehouse.as_view(), + name='generate-stats-warehouse'), ] diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index 34def58cf..de0c64d19 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -21,6 +21,7 @@ import json from django.core.urlresolvers import reverse from django.db.models import Q +from django.views.generic import RedirectView from django.views.generic.edit import FormView from django.http import HttpResponse, Http404, HttpResponseRedirect from django.shortcuts import redirect @@ -313,3 +314,27 @@ class QAContainerForm(QAItemEditForm): # item list is necessary to verify uniqueness rules kwargs['items'] = self.items return kwargs + + +class GenerateStats(IshtarMixin, LoginRequiredMixin, RedirectView): + model = None + + def get_redirect_url(self, *args, **kwargs): + return reverse('display-item', + args=[self.model.SLUG, self.item.pk]) + "#stats" + + def get(self, request, *args, **kwargs): + self.item = self.model.objects.get(pk=kwargs['pk']) + self.item._get_or_set_stats('_number_of_finds_by_place', update=True, + expected_type=list) + self.item._get_or_set_stats('_number_of_containers_by_place', + update=True, expected_type=list) + return super(GenerateStats, self).get(request, *args, **kwargs) + + +class GenerateStatsContainer(GenerateStats): + model = models.Container + + +class GenerateStatsWarehouse(GenerateStats): + model = models.Warehouse -- cgit v1.2.3