summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
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
commit56ab75d6ee08ca3a83eac113b1459d0348a271cd (patch)
treea7fe5e03a2ca360c2e1e4af6e690d2d6e4bd4fcb /ishtar_common
parentf87fd09770ab0738855a5efbaff905a7c9f346ac (diff)
downloadIshtar-56ab75d6ee08ca3a83eac113b1459d0348a271cd.tar.bz2
Ishtar-56ab75d6ee08ca3a83eac113b1459d0348a271cd.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.py44
-rw-r--r--ishtar_common/static/media/style.css1
-rw-r--r--ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html10
-rw-r--r--ishtar_common/views.py21
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