From fc3f77b2db29391ce1340c535a02b7a32583caa7 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 30 Nov 2020 17:22:14 +0100 Subject: Documents: add pages fields to related source --- ishtar_common/forms_common.py | 45 +++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 17 deletions(-) (limited to 'ishtar_common/forms_common.py') diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index c191a2e6e..697abd1cc 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -21,6 +21,7 @@ from collections import OrderedDict import datetime import os import pyqrcode +import re import requests import shutil import tempfile @@ -115,10 +116,12 @@ class NewItemForm(forms.Form): def limit_fields(self): for key in self.limits: if key in self.fields and hasattr(self.fields[key], 'choices'): - new_choices = [] - for value, lbl in self.fields[key].choices: - if str(value) in self.limits[key]: - new_choices.append((value, lbl)) + new_choices = [ + (value, lbl) + for value, lbl in self.fields[key].choices + if str(value) in self.limits[key] + ] + self.fields[key].choices = new_choices if len(new_choices) == 1: self.fields[key].initial = [new_choices[0][0]] @@ -1338,6 +1341,13 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): source_free_input = forms.CharField( label=_("Source - free input"), validators=[validators.MaxLengthValidator(500)], required=False) + source_page_range = forms.CharField( + label=_("Source - page range"), + validators=[validators.MaxLengthValidator(500)], required=False, + help_text=_("Unique page: \"242\", page range: \"242-245\", multiple " + "pages: \"242;245;249\", multiples pages and multiple " + "pages ranges: \"242-245;249;262-265\".") + ) associated_url = forms.URLField( max_length=1000, required=False, label=_("Numerical ressource (web address)")) @@ -1392,7 +1402,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): 'authors', 'receipt_date', 'receipt_date_in_documentation', 'creation_date', 'publisher', 'language', 'isbn', 'issn', 'licenses', - 'source', 'source_free_input', + 'source', 'source_free_input', 'source_page_range', 'container_id', "container_ref_id", 'comment', 'description', 'additional_information', 'duplicate' ] @@ -1448,6 +1458,14 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): fields[k] = self.fields[k] self.fields = fields + def clean_source_page_range(self): + value = self.cleaned_data.get( + 'source_page_range', None).replace(" ", "") + if value and not re.match(r"^(\d+[-;]*\d)+$", value): + raise forms.ValidationError( + _("Incorrect page range.")) + return value + def get_headers(self): headers = self.HEADERS.copy() if self.is_instancied: @@ -1488,9 +1506,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): for k in lst: if k not in excluded_fields['format_type']: excluded_fields['format_type'].append(k) - conditional_fields[key][sub_key] = [] - conditional_fields[key][sub_key].append( - ('format_type', ",".join(lst))) + conditional_fields[key][sub_key] = [('format_type', ",".join(lst))] for doc_type in models.SourceType.objects.filter( available=True, supports__pk__isnull=False).all(): if key not in conditional_fields: @@ -1548,10 +1564,10 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): initial = dict([(rel.pk, rel) for rel in related.all()]) new = [int(pk) for pk in sorted(self.cleaned_data.get(related_key, []))] - for pk in initial.keys(): + for pk, value in initial.items(): if pk in new: continue - related.remove(initial[pk]) + related.remove(value) for new_pk in new: related_item = related.model.objects.get(pk=new_pk) if new_pk not in initial.keys(): @@ -1799,9 +1815,7 @@ class QADocumentDuplicateForm(IshtarForm): if not related.count(): continue model = models.Document._meta.get_field(related_key).related_model - initial = [] - for item in related.all(): - initial.append(item.pk) + initial = [item.pk for item in related.all()] self.fields["qa_" + related_key] = widgets.Select2MultipleField( model=model, remote=True, label=model._meta.verbose_name_plural, required=False, long_widget=True, initial=initial @@ -1892,10 +1906,7 @@ class QALockForm(forms.Form): locked = self.cleaned_data["action"] == "lock" for item in items: item.locked = locked - if locked: - item.lock_user = user - else: - item.lock_user = None + item.lock_user = user if locked else None item.skip_history_when_saving = True item.save() -- cgit v1.2.3