diff options
Diffstat (limited to 'archaeological_files')
| -rw-r--r-- | archaeological_files/forms.py | 33 | ||||
| -rw-r--r-- | archaeological_files/models.py | 36 | 
2 files changed, 62 insertions, 7 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py index 4ff483a75..e3b480a57 100644 --- a/archaeological_files/forms.py +++ b/archaeological_files/forms.py @@ -122,6 +122,39 @@ class FileFormSelection(forms.Form):              raise forms.ValidationError(_(u"You should select a file."))          return cleaned_data +SLICING = (('year',_(u"years")), ("month",_(u"months"))) + +class DashboardForm(forms.Form): +    slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING, +                              required=False) +    file_type = forms.ChoiceField(label=_("File type"), choices=[], +                                  required=False) +    saisine_type = forms.ChoiceField(label=_("Saisine type"), choices=[], +                                  required=False) +    after = forms.DateField(label=_(u"Creation date after"), +                            widget=widgets.JQueryDate, required=False) +    before = forms.DateField(label=_(u"Creation date before"), +                            widget=widgets.JQueryDate, required=False) + +    def __init__(self, *args, **kwargs): +        super(DashboardForm, self).__init__(*args, **kwargs) +        self.fields['saisine_type'].choices = models.SaisineType.get_types() +        self.fields['file_type'].choices = models.FileType.get_types() + +    def get_filter(self): +        if not hasattr(self, 'cleaned_data') or not self.cleaned_data: +            return {} +        fltr = {} +        if self.cleaned_data.get('saisine_type'): +            fltr['saisine_type_id'] = self.cleaned_data['saisine_type'] +        if self.cleaned_data.get('file_type'): +            fltr['file_type_id'] = self.cleaned_data['file_type'] +        if self.cleaned_data.get('after'): +            fltr['creation_date__gte'] = self.cleaned_data['after'] +        if self.cleaned_data.get('before'): +            fltr['creation_date__lte'] = self.cleaned_data['before'] +        return fltr +  class FileFormGeneral(forms.Form):      form_label = _("General")      associated_models = {'in_charge':Person, diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 6d5390737..a1e8912f4 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -230,17 +230,39 @@ class File(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem):          return sorted(owns.all(), key=lambda x:x.cached_label)      @classmethod -    def get_years(cls): -        return [res['year'] for res in list(cls.objects.values('year').annotate( -                                             Count("id")).order_by())] +    def get_periods(cls, slice='year', fltr={}): +        q = cls.objects +        if fltr: +            q = q.filter(**fltr) +        if slice == 'year': +            return [res['year'] for res in list(q.values('year' +                                ).annotate(Count("id")).order_by())] +        elif slice == 'month': +            return [(res['creation_date'].year, res['creation_date'].month) +                               for res in list(q.values('creation_date' +                                ).annotate(Count("id")).order_by())] +        return []      @classmethod -    def get_by_year(cls, year): -        return cls.objects.filter(year=year) +    def get_by_year(cls, year, fltr={}): +        q = cls.objects +        if fltr: +            q = q.filter(**fltr) +        return q.filter(year=year)      @classmethod -    def get_total_number(cls): -        return cls.objects.count() +    def get_by_month(cls, year, month, fltr={}): +        q = cls.objects +        if fltr: +            q = q.filter(**fltr) +        return q.filter(creation_date__year=year, creation_date__month=month) + +    @classmethod +    def get_total_number(cls, fltr={}): +        q = cls.objects +        if fltr: +            q = q.filter(**fltr) +        return q.count()      def get_values(self, prefix=''):          values = super(File, self).get_values(prefix=prefix)  | 
