diff options
Diffstat (limited to 'ishtar/ishtar_base/models.py')
| -rw-r--r-- | ishtar/ishtar_base/models.py | 61 | 
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") | 
