summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
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
commit0c185f1abbe9abe0d977e1b7d1d3f0440b8d6371 (patch)
treef84171501c3d98df394c94fcc6d32cc3dd5c6539 /archaeological_warehouse
parent389f86b06d5f6129614cb312c7034cdc4bb1b684 (diff)
downloadIshtar-0c185f1abbe9abe0d977e1b7d1d3f0440b8d6371.tar.bz2
Ishtar-0c185f1abbe9abe0d977e1b7d1d3f0440b8d6371.zip
Locks: prevent edit actions
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/forms.py15
-rw-r--r--archaeological_warehouse/models.py5
-rw-r--r--archaeological_warehouse/views.py38
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(