summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py45
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()