diff options
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/models.py | 6 | ||||
-rw-r--r-- | archaeological_warehouse/templates/ishtar/sheet_container.html | 22 | ||||
-rw-r--r-- | archaeological_warehouse/templates/ishtar/sheet_warehouse.html | 19 | ||||
-rw-r--r-- | archaeological_warehouse/urls.py | 8 | ||||
-rw-r--r-- | archaeological_warehouse/views.py | 25 |
5 files changed, 73 insertions, 7 deletions
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"> <h3>{% trans "Statistics" %}</h3> - <small class="centered"><em>{% trans "These numbers are updated hourly" %}</em></small> + <div class="row mt-2 mb-2"> + <div class="col"> + <div class="btn-group btn-group-sm" role="group" + aria-label="{% trans 'Export' %}"> + <a class="btn btn-success" + onclick="long_wait();return true;" + href="{% url 'generate-stats-container' item.pk %}"> + + {% trans "Regenerate statistics" %} + </a> + </div> + {% with item.last_stats_update as last_stats_update%} + {% if last_stats_update %}<small class="ml-2"> + <em>{% trans "Last update:" %} {{last_stats_update}}</em> + </small>{% endif %}{% endwith %} + </div> + </div> {% if not item.number_containers and not item.number_divisions %} <div class="alert alert-info"> @@ -188,10 +204,8 @@ {% endif %} {% endfor %} - <h4>{% trans "Containers" %}</h4> - {% if item.number_of_containers_by_place %} - <h4>{% trans "Containers by location in the warehouse" %}</h4> + <h4>{% trans "Containers by location" %}</h4> {% for items in item.number_of_containers_by_place %} {% if items %} <table class='table table-striped datatables' diff --git a/archaeological_warehouse/templates/ishtar/sheet_warehouse.html b/archaeological_warehouse/templates/ishtar/sheet_warehouse.html index e6717f230..b4786de5b 100644 --- a/archaeological_warehouse/templates/ishtar/sheet_warehouse.html +++ b/archaeological_warehouse/templates/ishtar/sheet_warehouse.html @@ -136,7 +136,24 @@ <div class="tab-pane fade" id="{{window_id}}-stats" role="tabpanel" aria-labelledby="{{window_id}}-stats-tab"> <h3>{% trans "Statistics" %}</h3> - <small class="centered"><em>{% trans "These numbers are updated hourly" %}</em></small> + + <div class="row mt-2 mb-2"> + <div class="col"> + <div class="btn-group btn-group-sm" role="group" + aria-label="{% trans 'Export' %}"> + <a class="btn btn-success" + onclick="long_wait();return true;" + href="{% url 'generate-stats-warehouse' item.pk %}"> + + {% trans "Regenerate statistics" %} + </a> + </div> + {% with item.last_stats_update as last_stats_update%} + {% if last_stats_update %}<small class="ml-2"> + <em>{% trans "Last update:" %} {{last_stats_update}}</em> + </small>{% endif %}{% endwith %} + </div> + </div> {% if not item.number_containers and not item.number_divisions %} <div class="alert alert-info"> 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<pks>[0-9_]+?)/$', views.ContainerManualMergeItems.as_view(), name='container_manual_merge_items'), + + url(r'generate-stats-container/(?P<pk>.+)/', + views.GenerateStatsContainer.as_view(), + name='generate-stats-container'), + + url(r'generate-stats-warehouse/(?P<pk>.+)/', + 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 |