diff options
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 |
commit | 0c185f1abbe9abe0d977e1b7d1d3f0440b8d6371 (patch) | |
tree | f84171501c3d98df394c94fcc6d32cc3dd5c6539 /archaeological_warehouse | |
parent | 389f86b06d5f6129614cb312c7034cdc4bb1b684 (diff) | |
download | Ishtar-0c185f1abbe9abe0d977e1b7d1d3f0440b8d6371.tar.bz2 Ishtar-0c185f1abbe9abe0d977e1b7d1d3f0440b8d6371.zip |
Locks: prevent edit actions
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/forms.py | 15 | ||||
-rw-r--r-- | archaeological_warehouse/models.py | 5 | ||||
-rw-r--r-- | archaeological_warehouse/views.py | 38 |
3 files changed, 56 insertions, 2 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 94d37d092..ecf040a7e 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -121,6 +121,21 @@ class WarehouseFormSelection(forms.Form): WarehouseSelect, models.Warehouse, gallery=True, map=True), validators=[valid_id(models.Warehouse)]) + def clean(self): + cleaned_data = self.cleaned_data + if 'pk' not in cleaned_data or not cleaned_data['pk']: + raise forms.ValidationError(_(u"You should select an item.")) + pk = self.cleaned_data["pk"] + try: + item = models.Warehouse.objects.get(pk=pk) + except models.Warehouse.DoesNotExist: + raise forms.ValidationError(_("Invalid selection.")) + print(item) + if item.locked: + raise forms.ValidationError(_("This warehouse is locked for " + "edition.")) + return self.cleaned_data + class WarehouseForm(CustomForm, ManageOldType, forms.Form): HEADERS = {} diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 336046a86..a3cbf82e3 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -56,7 +56,8 @@ class Warehouse(Address, DocumentItem, GeoItem, QRCodeItem, DashboardFormItem, APP = "archaeological-warehouse" MODEL = "warehouse" SHOW_URL = 'show-warehouse' - TABLE_COLS = ['name', 'warehouse_type'] + TABLE_COLS = ['name', 'warehouse_type__label'] + NEW_QUERY_ENGINE = True BASE_SEARCH_VECTORS = [ SearchVectorConfig("name"), SearchVectorConfig("warehouse_type__label"), @@ -66,6 +67,7 @@ class Warehouse(Address, DocumentItem, GeoItem, QRCodeItem, DashboardFormItem, ] EXTRA_REQUEST_KEYS = { + "warehouse_type__label": "warehouse_type__label", # used by dynamic_table_documents "person_in_charge__pk": "person_in_charge__pk", } @@ -414,6 +416,7 @@ class Container(DocumentItem, LightHistorizedItem, QRCodeItem, GeoItem, APP = "archaeological-warehouse" MODEL = "container" SHOW_URL = 'show-container' + NEW_QUERY_ENGINE = True TABLE_COLS = ['reference', 'container_type__label', 'cached_location', 'cached_division', 'old_reference'] IMAGE_PREFIX = 'containers/' diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index 85b5511ae..ecbcc3175 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -21,7 +21,7 @@ import json from django.core.urlresolvers import reverse from django.db.models import Q -from django.http import HttpResponse, Http404 +from django.http import HttpResponse, Http404, HttpResponseRedirect from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ @@ -42,6 +42,8 @@ from archaeological_warehouse.wizards import PackagingWizard, WarehouseSearch, \ ContainerSearch, ContainerWizard, ContainerModificationWizard, \ ContainerDeletionWizard +from ishtar_common.utils import put_session_message + get_container = get_item(models.Container, 'get_container', 'container', search_form=ContainerSelect) show_container = show_item(models.Container, 'container') @@ -146,6 +148,23 @@ warehouse_modification_wizard = WarehouseModificationWizard.as_view([ def warehouse_modify(request, pk): + try: + warehouse_modification_wizard(request) + except IndexError: # no step available + put_session_message( + request.session.session_key, + _(u"You don't have sufficient permissions to do this action."), + 'warning' + ) + return HttpResponseRedirect("/") + + q = models.Warehouse.objects.filter(pk=pk) + if not q.count(): + raise Http404() + item = q.all()[0] + if item.locked: + raise Http404() + WarehouseModificationWizard.session_set_value( request, 'selec-warehouse_modification', 'pk', pk, reset=True) return redirect( @@ -187,6 +206,23 @@ container_modification_wizard = ContainerModificationWizard.as_view([ def container_modify(request, pk): + try: + container_modification_wizard(request) + except IndexError: # no step available + put_session_message( + request.session.session_key, + _(u"You don't have sufficient permissions to do this action."), + 'warning' + ) + return HttpResponseRedirect("/") + + q = models.Container.objects.filter(pk=pk) + if not q.count(): + raise Http404() + item = q.all()[0] + if item.locked: + raise Http404() + ContainerModificationWizard.session_set_value( request, 'selec-container_modification', 'pk', pk, reset=True) return redirect( |