diff options
Diffstat (limited to 'ishtar_common/forms_common.py')
| -rw-r--r-- | ishtar_common/forms_common.py | 45 | 
1 files changed, 28 insertions, 17 deletions
| 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() | 
