diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 44 |
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] |