diff --git a/polynum/base/models/request.py b/polynum/base/models/request.py index 3cdb2cb..0c8dcce 100644 --- a/polynum/base/models/request.py +++ b/polynum/base/models/request.py @@ -176,6 +176,9 @@ class Request(models.Model): u"soumise(s) au droit d'auteur")), ) + NUMBER_RE = re.compile(r'(\d\d\d\d)-(\d+)-(\d+)') + FINANCIAL_CODE_RE = re.compile(r'\d{6,}') + class Meta: app_label = 'base' verbose_name = _(u'Demande de reprographie'); diff --git a/polynum/request/views.py b/polynum/request/views.py index 2d4c71d..476e735 100644 --- a/polynum/request/views.py +++ b/polynum/request/views.py @@ -456,9 +456,9 @@ class ListRequest(ListView): self.qs(**{'search': None})])) def apply_filter_search(sefl, qs, value): - return qs.filter(Q(uploadfile__contains=value) - | Q(name__contains=value) - | Q(user__username__contains=value)) + q = Q(uploadfile__contains=value) | Q(name__contains=value) \ + | Q(user__username__contains=value) + return qs.filter(q) def handle_entity_filter(self, min_depth=app_settings.MIN_ENTITY_FILTER_DEPTH, @@ -619,6 +619,18 @@ class ListRequest(ListView): def apply_filter_free_text(self, qs, value): for elt in value.split(): + m = Request.NUMBER_RE.match(elt) + if m: + year, month, month_order = m.groups() + qs = qs.filter(creation_date__year=int(year), + creation_date__month=int(month), + month_order=int(month_order)) + continue + m = Request.FINANCIAL_CODE_RE.match(elt) + if m: + financial_code = m.group() + qs = qs.filter(financial_code=financial_code) + continue qs = qs.filter(Q(entity__description__icontains=elt) |Q(entity__description_override__icontains=elt) |Q(entity__code__icontains=elt)