diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2014-10-21 00:35:40 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2014-10-21 00:35:40 +0200 |
commit | 8a2d977a8a2dabb1513bb4f809fbf3ee5c641c72 (patch) | |
tree | a7fe5e03a2ca360c2e1e4af6e690d2d6e4bd4fcb /ishtar_common | |
parent | 57cdf8896f854de7ba573cfe8d5040155df1e656 (diff) | |
download | Ishtar-8a2d977a8a2dabb1513bb4f809fbf3ee5c641c72.tar.bz2 Ishtar-8a2d977a8a2dabb1513bb4f809fbf3ee5c641c72.zip |
Dashboard: work on graphs for operations (refs #2076)
* add a new creation date field for operations
* refactoring of management of dashboard forms
* dashboard form for operations
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 44 | ||||
-rw-r--r-- | ishtar_common/static/media/style.css | 1 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html | 10 | ||||
-rw-r--r-- | ishtar_common/views.py | 21 |
4 files changed, 62 insertions, 14 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index c59f38674..8d96e0894 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -560,6 +560,46 @@ class UserDashboard: self.types = types.annotate(number=Count('pk'))\ .order_by('person__person_types') +class DashboardFormItem(object): + @classmethod + def get_periods(cls, slice='month', fltr={}, date_source='creation'): + date_var = date_source + '_date' + q = cls.objects.filter(**{date_var+'__isnull':False}) + if fltr: + q = q.filter(**fltr) + if slice == 'year': + return [res[date_var].year for res in list(q.values(date_var + ).annotate(Count("id")).order_by())] + elif slice == 'month': + return [(res[date_var].year, res[date_var].month) + for res in list(q.values(date_var + ).annotate(Count("id")).order_by())] + return [] + + @classmethod + def get_by_year(cls, year, fltr={}, date_source='creation'): + date_var = date_source + '_date' + q = cls.objects.filter(**{date_var+'__isnull':False}) + if fltr: + q = q.filter(**fltr) + return q.filter(**{date_var+'__year':year}) + + @classmethod + def get_by_month(cls, year, month, fltr={}, date_source='creation'): + date_var = date_source + '_date' + q = cls.objects.filter(**{date_var+'__isnull':False}) + if fltr: + q = q.filter(**fltr) + q = q.filter(**{date_var+'__year':year, date_var+'__month':month}) + return q + + @classmethod + def get_total_number(cls, fltr={}): + q = cls.objects + if fltr: + q = q.filter(**fltr) + return q.count() + class Dashboard: def __init__(self, model, slice='year', date_source=None, show_detail=None, fltr={}): @@ -589,7 +629,7 @@ class Dashboard: obj.history_date = idx['hd'] last_lst.append(obj) # years - base_kwargs = {'fltr':fltr} + base_kwargs = {'fltr':fltr.copy()} if date_source: base_kwargs['date_source'] = date_source periods_kwargs = base_kwargs.copy() @@ -627,7 +667,7 @@ class Dashboard: self.values += [(idx, dpt, list(numbers))] # put "Total" at the end self.serie_labels.append(self.serie_labels.pop(0)) - kwargs_num['fltr'] = {} + kwargs_num = base_kwargs.copy() self.numbers = [model.get_by_month(*p.split('-')[:2], **kwargs_num).count() for p in self.periods] diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 54a97ca77..3c2c429b1 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -560,6 +560,7 @@ table.confirm tr.spacer td:last-child{ .ui-tabs .ui-tabs-nav li.ui-tabs-active a{ background-color:#fff; + color:#666; } .sheet{ diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html index 820c50136..87ce5c528 100644 --- a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html @@ -141,7 +141,7 @@ var plot_{{unique_id}} = $.jqplot('chart_{{unique_id}}', sizeAdjust: 7.5 }, series:[{% for label in dashboard.serie_labels %} - {%if forloop.counter0%}, {% endif %}{label:"{{label}}"}{% endfor %} + {%if forloop.counter0%}, {% endif %}{label:"{{label}}", showmarker:showmarker}{% endfor %} ], cursor:{ show: true, @@ -172,9 +172,9 @@ $('#search_{{unique_id}}').click(function (){ return false; }); -{% ifequal item_name 'files' %} -load_jquerydate_after(); -load_jquerydate_before(); -{% endifequal %} +{% if item_name == 'files' or item_name == "operations"%} +load_jquerydate_{{item_name}}_after(); +load_jquerydate_{{item_name}}_before(); +{% endif %} }); </script> diff --git a/ishtar_common/views.py b/ishtar_common/views.py index d15157eed..889bd3893 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -50,6 +50,8 @@ if settings.XHTML2ODT_PATH: from menus import menu +from archaeological_operations.forms import DashboardForm as DashboardFormOpe + from ishtar_common.forms import FinalForm, FinalDeleteForm from ishtar_common import forms_common as forms from ishtar_common import wizards @@ -720,6 +722,8 @@ if 'archaeological_files' in settings.INSTALLED_APPS: from archaeological_files.forms import DashboardForm as DashboardFormFile DASHBOARD_FORMS['files'] = DashboardFormFile +DASHBOARD_FORMS['operations'] = DashboardFormOpe + def dashboard_main_detail(request, item_name): """ Specific tab of the main dashboard @@ -732,8 +736,8 @@ def dashboard_main_detail(request, item_name): form = None slicing, date_source, fltr, show_detail = 'year', None, {}, False if (item_name == 'files' and \ - 'archaeological_files' in settings.INSTALLED_APPS):\ - #or item_name == 'operations': + 'archaeological_files' in settings.INSTALLED_APPS) \ + or item_name == 'operations': slicing = 'month' if item_name in DASHBOARD_FORMS: if request.method == 'POST': @@ -748,20 +752,23 @@ def dashboard_main_detail(request, item_name): else: form = DASHBOARD_FORMS[item_name]() lbl, dashboard = None, None - if item_name == 'files' and \ - 'archaeological_files' in settings.INSTALLED_APPS: - from archaeological_files.models import File + if (item_name == 'files' and \ + 'archaeological_files' in settings.INSTALLED_APPS) \ + or item_name == 'operations': dashboard_kwargs = {'slice':slicing, 'fltr':fltr, 'show_detail':show_detail} # date_source is only relevant when the form has set one if date_source: dashboard_kwargs['date_source'] = date_source + if item_name == 'files' and \ + 'archaeological_files' in settings.INSTALLED_APPS: + from archaeological_files.models import File lbl, dashboard = (_(u"Archaeological files"), models.Dashboard(File, **dashboard_kwargs)) if item_name == 'operations': from archaeological_operations.models import Operation - lbl, dashboard = (_(u"Operations"), models.Dashboard(Operation, - slice=slicing, fltr=fltr)) + lbl, dashboard = (_(u"Operations"), + models.Dashboard(Operation, **dashboard_kwargs)) if item_name == 'contextrecords' and \ 'archaeological_context_records' in settings.INSTALLED_APPS: from archaeological_context_records.models import ContextRecord |