summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
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/models.py
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/models.py')
-rw-r--r--ishtar_common/models.py44
1 files changed, 42 insertions, 2 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]