summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-10 18:02:50 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-10 18:02:50 +0200
commit05ed481007604079612aa4b0f1f3bb8d4d35a6e5 (patch)
treef84171501c3d98df394c94fcc6d32cc3dd5c6539 /archaeological_finds
parent1d5254416b11ef1010d5ac31f2a53677254c6497 (diff)
downloadIshtar-05ed481007604079612aa4b0f1f3bb8d4d35a6e5.tar.bz2
Ishtar-05ed481007604079612aa4b0f1f3bb8d4d35a6e5.zip
Locks: prevent edit actions
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/forms.py17
-rw-r--r--archaeological_finds/models_finds.py3
-rw-r--r--archaeological_finds/views.py10
3 files changed, 29 insertions, 1 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index f4b115492..4de4bdaf9 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -1239,6 +1239,7 @@ class FindFormSelection(CustomFormSearch):
form_label = _("Find search")
associated_models = {'pk': models.Find}
currents = {'pk': models.Find}
+ pk_key = 'pk'
pk = forms.IntegerField(
label="", required=False,
@@ -1249,6 +1250,22 @@ class FindFormSelection(CustomFormSearch):
source_full=reverse_lazy('get-find-full')),
validators=[valid_id(models.Find)])
+ def clean(self):
+ pk = self.cleaned_data[self.pk_key]
+ if "," in pk:
+ pks = [k.strip() for k in pk.split(',')]
+ else:
+ pks = [pk]
+ for pk in pks:
+ try:
+ find = models.Find.objects.get(pk=pk)
+ except models.Find.DoesNotExist:
+ raise forms.ValidationError(_("Invalid selection."))
+ if find.locked:
+ raise forms.ValidationError(
+ _("This find is locked for edition."))
+ return self.cleaned_data
+
class FindFormSelectionWarehouseModule(FindFormSelection):
pk = forms.IntegerField(
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 6914ff019..9b134bceb 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1742,8 +1742,9 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem,
# own basket
actions = super(Find, self).get_extra_actions(request)
+ is_locked = getattr(self, "locked", False)
can_edit_find = self.can_do(request, 'change_find')
- if can_edit_find:
+ if can_edit_find and not is_locked:
actions += [
(reverse("find-qa-duplicate", args=[self.pk]),
_("Duplicate"), "fa fa-clone", "", "", True),
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index 763733bd9..e5119b9f3 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -333,6 +333,8 @@ def find_modify(request, pk):
raise Http404()
step = 'find-find_modification'
find = q.all()[0]
+ if find.locked:
+ raise Http404()
if find.base_finds.count() > 1:
step = 'simplefind-find_modification'
@@ -973,6 +975,14 @@ class QAFindTreatmentFormView(QAItemForm):
page_name = _(u"Packaging")
base_url = "find-qa-packaging"
+ def dispatch(self, request, *args, **kwargs):
+ returned = super(QAFindTreatmentFormView, self).dispatch(
+ request, *args, **kwargs)
+ for item in self.items:
+ if item.locked:
+ return HttpResponseRedirect(reverse("qa-not-available"))
+ return returned
+
def get_form_kwargs(self):
kwargs = super(QAFindTreatmentFormView, self).get_form_kwargs()
kwargs['user'] = self.request.user