summaryrefslogtreecommitdiff
path: root/ishtar/ishtar_base/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar/ishtar_base/models.py')
-rw-r--r--ishtar/ishtar_base/models.py61
1 files changed, 59 insertions, 2 deletions
diff --git a/ishtar/ishtar_base/models.py b/ishtar/ishtar_base/models.py
index 89cb8e605..6f29196ce 100644
--- a/ishtar/ishtar_base/models.py
+++ b/ishtar/ishtar_base/models.py
@@ -363,6 +363,46 @@ class UserDashboard:
self.types = types.annotate(number=Count('pk')).order_by(
'person__person_type')
+class FileDashboard:
+ def __init__(self):
+ main_dashboard = Dashboard(File)
+
+ self.total_number = main_dashboard.total_number
+
+ types = File.objects.values('file_type', 'file_type__label')
+ self.types = types.annotate(number=Count('pk')).order_by('file_type')
+
+ self.by_years = main_dashboard.values
+
+ now = datetime.date.today()
+ limit = datetime.date(now.year, now.month, 1) - datetime.timedelta(365)
+ by_month = File.objects.filter(creation_date__gt=limit).extra(
+ {'month':"date_trunc('month', creation_date)"})
+ self.by_month = by_month.values('month').annotate(number=Count('pk')
+ ).order_by('-month')
+
+ # programmed
+ self.prog = {}
+ prog_type = FileType.objects.get(txt_idx='prog')
+ progs = File.objects.filter(file_type=prog_type)
+ self.prog['total_number'] = progs.count()
+ by_year = progs.extra({'year':"date_trunc('year', creation_date)"})
+ self.prog['by_year'] = by_year.values('year').annotate(number=Count('pk')
+ ).order_by('-year')
+ by_month = progs.filter(creation_date__gt=limit).extra(
+ {'month':"date_trunc('month', creation_date)"})
+ self.prog['by_month'] = by_month.values('month').annotate(
+ number=Count('pk')).order_by('-month')
+
+ self.prog['by_dpts'] = FileByDepartment.objects.filter(
+ file__file_type=prog_type).values('department'
+ ).annotate(number=Count('file')).order_by('-number')
+ FileTown = File.towns.through
+ self.prog['towns'] = FileTown.objects.filter(
+ file__file_type=prog_type).values('town'
+ ).annotate(number=Count('file')).order_by('-number')
+
+
class Dashboard:
def __init__(self, model):
self.model = model
@@ -386,7 +426,6 @@ class Dashboard:
# deleted object are always referenced in history
continue
obj.history_date = idx['hd']
- print unicode(obj), obj.pk
last_lst.append(obj)
# years
self.years = model.get_years()
@@ -643,7 +682,8 @@ class File(BaseHistorizedItem, OwnPerms):
permit_reference = models.CharField(_(u"Permit reference"),
max_length=60, blank=True, null=True)
is_active = models.BooleanField(_(u"Is active?"), default=True)
- towns = models.ManyToManyField("Town", verbose_name=_(u"Towns"))
+ towns = models.ManyToManyField("Town", verbose_name=_(u"Towns"),
+ related_name='file')
creation_date = models.DateField(_(u"Creation date"),
default=datetime.date.today)
reception_date = models.DateField(_(u'Reception date'), blank=True,
@@ -732,6 +772,23 @@ class File(BaseHistorizedItem, OwnPerms):
def is_preventive(self):
return FileType.is_preventive(self.file_type.pk)
+class FileByDepartment(models.Model):
+ '''
+ Database view: don't forget to create it
+
+create view file_department (department_id, file_id) as
+ select town."departement_id", file_towns."file_id"
+ from ishtar_base_town town
+ inner join ishtar_base_file_towns file_towns on
+ file_towns."town_id"=town."id" order by town."departement_id";
+ '''
+ file = models.ForeignKey(File, verbose_name=_(u"File"))
+ department = models.ForeignKey(Departement, verbose_name=_(u"Department"),
+ blank=True, null=True)
+ class Meta:
+ managed = False
+ db_table = 'file_department'
+
class OperationType(GeneralType):
class Meta:
verbose_name = _(u"Operation type")