summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse/views.py')
-rw-r--r--archaeological_warehouse/views.py395
1 files changed, 229 insertions, 166 deletions
diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py
index 2702e71c3..4fa60ff89 100644
--- a/archaeological_warehouse/views.py
+++ b/archaeological_warehouse/views.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
@@ -32,72 +32,97 @@ from archaeological_warehouse import forms
from ishtar_common.forms import FinalForm
-from ishtar_common.views import QABaseLockView, wizard_is_available, \
- merge_action, ManualMergeMixin, ManualMergeItemsMixin, IshtarMixin, \
- LoginRequiredMixin, QAItemEditForm
-from ishtar_common.views_item import get_item, show_item, new_qa_item, \
- revert_item
+from ishtar_common.views import (
+ QABaseLockView,
+ wizard_is_available,
+ merge_action,
+ ManualMergeMixin,
+ ManualMergeItemsMixin,
+ IshtarMixin,
+ LoginRequiredMixin,
+ QAItemEditForm,
+)
+from ishtar_common.views_item import get_item, show_item, new_qa_item, revert_item
from archaeological_finds.views import treatment_add
-from archaeological_warehouse.wizards import PackagingWizard, WarehouseSearch, \
- WarehouseWizard, WarehouseModificationWizard, WarehouseDeletionWizard, \
- ContainerSearch, ContainerWizard, ContainerModificationWizard, \
- ContainerDeletionWizard
+from archaeological_warehouse.wizards import (
+ PackagingWizard,
+ WarehouseSearch,
+ WarehouseWizard,
+ WarehouseModificationWizard,
+ WarehouseDeletionWizard,
+ ContainerSearch,
+ ContainerWizard,
+ ContainerModificationWizard,
+ ContainerDeletionWizard,
+)
-get_container = get_item(models.Container, 'get_container', 'container',
- search_form=forms.ContainerSelect)
+get_container = get_item(
+ models.Container, "get_container", "container", search_form=forms.ContainerSelect
+)
get_divisions_container = get_item(
- models.Container, 'get_container', 'container',
+ models.Container,
+ "get_container",
+ "container",
search_form=forms.ContainerSelect,
- base_request={"container_type__stationary": 'True'})
+ base_request={"container_type__stationary": "True"},
+)
get_non_divisions_container = get_item(
- models.Container, 'get_container', 'container',
+ models.Container,
+ "get_container",
+ "container",
search_form=forms.ContainerSelect,
- base_request={"container_type__stationary": 'False'})
-show_container = show_item(models.Container, 'container')
+ base_request={"container_type__stationary": "False"},
+)
+show_container = show_item(models.Container, "container")
-get_warehouse = get_item(models.Warehouse, 'get_warehouse', 'warehouse',
- search_form=forms.WarehouseSelect)
-show_warehouse = show_item(models.Warehouse, 'warehouse')
+get_warehouse = get_item(
+ models.Warehouse, "get_warehouse", "warehouse", search_form=forms.WarehouseSelect
+)
+show_warehouse = show_item(models.Warehouse, "warehouse")
revert_warehouse = revert_item(models.Warehouse)
-new_warehouse = new_qa_item(models.Warehouse, forms.WarehouseForm,
- page_name=_("New warehouse"))
-new_container = new_qa_item(models.Container, forms.ContainerForm,
- page_name=_("New container"))
+new_warehouse = new_qa_item(
+ models.Warehouse, forms.WarehouseForm, page_name=_("New warehouse")
+)
+new_container = new_qa_item(
+ models.Container, forms.ContainerForm, page_name=_("New container")
+)
def autocomplete_warehouse(request):
- if not request.user.has_perm('ishtar_common.view_warehouse',
- models.Warehouse)\
- and not request.user.has_perm(
- 'ishtar_common.view_own_warehouse', models.Warehouse):
- return HttpResponse(content_type='text/plain')
- if not request.GET.get('term'):
- return HttpResponse(content_type='text/plain')
- q = request.GET.get('term')
+ if not request.user.has_perm(
+ "ishtar_common.view_warehouse", models.Warehouse
+ ) and not request.user.has_perm(
+ "ishtar_common.view_own_warehouse", models.Warehouse
+ ):
+ return HttpResponse(content_type="text/plain")
+ if not request.GET.get("term"):
+ return HttpResponse(content_type="text/plain")
+ q = request.GET.get("term")
query = Q()
- for q in q.split(' '):
- extra = Q(name__icontains=q) | \
- Q(warehouse_type__label__icontains=q)
+ for q in q.split(" "):
+ extra = Q(name__icontains=q) | Q(warehouse_type__label__icontains=q)
query = query & extra
limit = 15
warehouses = models.Warehouse.objects.filter(query)[:limit]
- data = json.dumps([{'id': warehouse.pk, 'value': str(warehouse)}
- for warehouse in warehouses])
- return HttpResponse(data, content_type='text/plain')
+ data = json.dumps(
+ [{"id": warehouse.pk, "value": str(warehouse)} for warehouse in warehouses]
+ )
+ return HttpResponse(data, content_type="text/plain")
def autocomplete_container(request, warehouse_id=None):
- if not request.user.has_perm('ishtar_common.view_warehouse',
- models.Warehouse)\
- and not request.user.has_perm(
- 'ishtar_common.view_own_warehouse', models.Warehouse):
- return HttpResponse(content_type='text/plain')
- if not request.GET.get('term'):
- return HttpResponse(content_type='text/plain')
- term = request.GET.get('term').strip()
+ if not request.user.has_perm(
+ "ishtar_common.view_warehouse", models.Warehouse
+ ) and not request.user.has_perm(
+ "ishtar_common.view_own_warehouse", models.Warehouse
+ ):
+ return HttpResponse(content_type="text/plain")
+ if not request.GET.get("term"):
+ return HttpResponse(content_type="text/plain")
+ term = request.GET.get("term").strip()
limit = 15
base_query = Q()
if warehouse_id:
@@ -106,16 +131,18 @@ def autocomplete_container(request, warehouse_id=None):
# exact index
try:
query = query & Q(index=int(term))
- containers = list(models.Container.objects.filter(
- query).values('id', 'cached_label')[:limit])
+ containers = list(
+ models.Container.objects.filter(query).values("id", "cached_label")[:limit]
+ )
except ValueError:
containers = []
# exact ref
query = query & Q(reference__unaccent__iexact=term)
- containers += list(models.Container.objects.filter(
- query).values('id', 'cached_label')[:limit])
+ containers += list(
+ models.Container.objects.filter(query).values("id", "cached_label")[:limit]
+ )
limit = 15 - len(containers)
- splitted = [s.lower() for s in term.split(' ') if s and s != '|']
+ splitted = [s.lower() for s in term.split(" ") if s and s != "|"]
if limit > 0 and len(splitted) > 1:
type_positions = [] # container_type ID, pos inf, pos sup
@@ -147,7 +174,8 @@ def autocomplete_container(request, warehouse_id=None):
index = None
if index_is_ok:
type_positions.append(
- (container_type_id, index, index + len(values)))
+ (container_type_id, index, index + len(values))
+ )
query = base_query
if not warehouse_id and type_positions and type_positions[0][1] > 0:
@@ -155,12 +183,11 @@ def autocomplete_container(request, warehouse_id=None):
query &= Q(location__name__icontains=splitted[idx])
# group by container type, ref tuple
groups = []
- for idx, (container_type_id, pos_inf, pos_sup) \
- in enumerate(type_positions):
+ for idx, (container_type_id, pos_inf, pos_sup) in enumerate(type_positions):
if len(type_positions) == idx + 1: # last
value = " ".join(splitted[pos_sup:])
else:
- value = " ".join(splitted[pos_sup:type_positions[idx + 1][1]])
+ value = " ".join(splitted[pos_sup : type_positions[idx + 1][1]])
if value:
groups.append((container_type_id, value))
if groups:
@@ -171,9 +198,11 @@ def autocomplete_container(request, warehouse_id=None):
key2 = base_key + "reference__unaccent__iexact"
query &= Q(**{key1: g[0], key2: g[1]})
ids = {c["id"] for c in containers}
- containers += list(models.Container.objects.filter(
- query).exclude(pk__in=ids).values('id', 'cached_label')[
- :limit])
+ containers += list(
+ models.Container.objects.filter(query)
+ .exclude(pk__in=ids)
+ .values("id", "cached_label")[:limit]
+ )
if len(splitted) > 1 and len(containers) < 15:
# group to do a "type" "reference" search
@@ -182,12 +211,15 @@ def autocomplete_container(request, warehouse_id=None):
group_2 = splitted[idx:]
extra = Q(
container_type__label__unaccent__iexact=" ".join(group_1),
- reference__unaccent__iexact=" ".join(group_2))
+ reference__unaccent__iexact=" ".join(group_2),
+ )
query = base_query & extra
ids = {c["id"] for c in containers}
- containers += list(models.Container.objects.filter(
- query).exclude(pk__in=ids).values('id', 'cached_label')[
- :limit])
+ containers += list(
+ models.Container.objects.filter(query)
+ .exclude(pk__in=ids)
+ .values("id", "cached_label")[:limit]
+ )
if len(containers) >= 15:
break
@@ -197,92 +229,114 @@ def autocomplete_container(request, warehouse_id=None):
extra = Q(reference__unaccent__iexact=q)
query = query & extra
ids = {c["id"] for c in containers}
- containers += list(models.Container.objects.filter(
- query).exclude(pk__in=ids).values('id', 'cached_label')[:limit])
+ containers += list(
+ models.Container.objects.filter(query)
+ .exclude(pk__in=ids)
+ .values("id", "cached_label")[:limit]
+ )
limit = 15 - len(containers)
if limit > 0:
query = base_query
for q in splitted:
- extra = Q(container_type__label__unaccent__icontains=q) | \
- Q(container_type__reference__unaccent__icontains=q) | \
- Q(reference__unaccent__icontains=q) | \
- Q(cached_label__unaccent__icontains=q)
+ extra = (
+ Q(container_type__label__unaccent__icontains=q)
+ | Q(container_type__reference__unaccent__icontains=q)
+ | Q(reference__unaccent__icontains=q)
+ | Q(cached_label__unaccent__icontains=q)
+ )
if not warehouse_id:
extra |= Q(location__name__unaccent=q) | Q(
- location__town__unaccent=q)
+ location__town__unaccent=q
+ )
query = query & extra
ids = {c["id"] for c in containers}
containers += list(
- models.Container.objects.filter(query).exclude(
- pk__in=ids
- ).values('id', 'cached_label')[:limit])
+ models.Container.objects.filter(query)
+ .exclude(pk__in=ids)
+ .values("id", "cached_label")[:limit]
+ )
data = json.dumps(
- [{'id': container['id'], 'value': container['cached_label']}
- for container in containers])
- return HttpResponse(data, content_type='text/plain')
-
-warehouse_packaging_wizard = PackagingWizard.as_view([ # AFAC
- ('seleccontainer-packaging', forms.ContainerFormSelection),
- ('base-packaging', forms.BasePackagingForm),
- ('final-packaging', FinalForm)],
+ [
+ {"id": container["id"], "value": container["cached_label"]}
+ for container in containers
+ ]
+ )
+ return HttpResponse(data, content_type="text/plain")
+
+
+warehouse_packaging_wizard = PackagingWizard.as_view(
+ [ # AFAC
+ ("seleccontainer-packaging", forms.ContainerFormSelection),
+ ("base-packaging", forms.BasePackagingForm),
+ ("final-packaging", FinalForm),
+ ],
label=_("Packaging"),
- url_name='warehouse_packaging',)
+ url_name="warehouse_packaging",
+)
-warehouse_search_wizard = WarehouseSearch.as_view([
- ('selec-warehouse_search', forms.WarehouseFormSelection)],
+warehouse_search_wizard = WarehouseSearch.as_view(
+ [("selec-warehouse_search", forms.WarehouseFormSelection)],
label=_("Warehouse search"),
- url_name='warehouse_search',
+ url_name="warehouse_search",
)
warehouse_creation_steps = [
("warehouse-warehouse_creation", forms.WarehouseForm),
- ('divisions-warehouse_creation', forms.SelectedDivisionFormset),
- ('final-warehouse_creation', FinalForm)]
+ ("divisions-warehouse_creation", forms.SelectedDivisionFormset),
+ ("final-warehouse_creation", FinalForm),
+]
warehouse_creation_wizard = WarehouseWizard.as_view(
warehouse_creation_steps,
label=_("Warehouse creation"),
- url_name='warehouse_creation',
+ url_name="warehouse_creation",
)
-warehouse_modification_wizard = WarehouseModificationWizard.as_view([
- ('selec-warehouse_modification', forms.WarehouseFormSelection),
- ("warehouse-warehouse_modification", forms.WarehouseModifyForm),
- ('divisions-warehouse_modification', forms.SelectedDivisionFormset),
- ('final-warehouse_modification', FinalForm)],
+warehouse_modification_wizard = WarehouseModificationWizard.as_view(
+ [
+ ("selec-warehouse_modification", forms.WarehouseFormSelection),
+ ("warehouse-warehouse_modification", forms.WarehouseModifyForm),
+ ("divisions-warehouse_modification", forms.SelectedDivisionFormset),
+ ("final-warehouse_modification", FinalForm),
+ ],
label=_("Warehouse modification"),
- url_name='warehouse_modification',
+ url_name="warehouse_modification",
)
def warehouse_modify(request, pk):
- if not wizard_is_available(warehouse_modification_wizard, request,
- models.Warehouse, pk):
+ if not wizard_is_available(
+ warehouse_modification_wizard, request, models.Warehouse, pk
+ ):
return HttpResponseRedirect("/")
- wizard_url = 'warehouse_modification'
+ wizard_url = "warehouse_modification"
WarehouseModificationWizard.session_set_value(
- request, 'selec-' + wizard_url, 'pk', pk, reset=True)
- return redirect(
- reverse(wizard_url, kwargs={'step': 'warehouse-' + wizard_url}))
+ request, "selec-" + wizard_url, "pk", pk, reset=True
+ )
+ return redirect(reverse(wizard_url, kwargs={"step": "warehouse-" + wizard_url}))
-warehouse_deletion_wizard = WarehouseDeletionWizard.as_view([
- ('selec-warehouse_deletion', forms.WarehouseFormMultiSelection),
- ('final-warehouse_deletion', forms.WarehouseDeletionForm)],
+warehouse_deletion_wizard = WarehouseDeletionWizard.as_view(
+ [
+ ("selec-warehouse_deletion", forms.WarehouseFormMultiSelection),
+ ("final-warehouse_deletion", forms.WarehouseDeletionForm),
+ ],
label=_("Warehouse deletion"),
- url_name='warehouse_deletion',)
+ url_name="warehouse_deletion",
+)
def warehouse_delete(request, pk):
- if not wizard_is_available(warehouse_deletion_wizard, request,
- models.Warehouse, pk):
+ if not wizard_is_available(
+ warehouse_deletion_wizard, request, models.Warehouse, pk
+ ):
return HttpResponseRedirect("/")
- wizard_url = 'warehouse_deletion'
+ wizard_url = "warehouse_deletion"
WarehouseDeletionWizard.session_set_value(
- request, 'selec-' + wizard_url, 'pks', pk, reset=True)
- return redirect(
- reverse(wizard_url, kwargs={'step': 'final-' + wizard_url}))
+ request, "selec-" + wizard_url, "pks", pk, reset=True
+ )
+ return redirect(reverse(wizard_url, kwargs={"step": "final-" + wizard_url}))
class QAWarehouseLockView(QABaseLockView):
@@ -290,58 +344,66 @@ class QAWarehouseLockView(QABaseLockView):
base_url = "warehouse-qa-lock"
-container_search_wizard = ContainerSearch.as_view([
- ('selec-container_search', forms.MainContainerFormSelection)],
+container_search_wizard = ContainerSearch.as_view(
+ [("selec-container_search", forms.MainContainerFormSelection)],
label=_("Container search"),
- url_name='container_search',
+ url_name="container_search",
)
container_creation_steps = [
- ('container-container_creation', forms.ContainerForm),
- ('final-container_creation', FinalForm)]
+ ("container-container_creation", forms.ContainerForm),
+ ("final-container_creation", FinalForm),
+]
container_creation_wizard = ContainerWizard.as_view(
container_creation_steps,
label=_("Container creation"),
- url_name='container_creation',
+ url_name="container_creation",
)
-container_modification_wizard = ContainerModificationWizard.as_view([
- ('selec-container_modification', forms.MainContainerFormSelection),
- ('container-container_modification', forms.ContainerModifyForm),
- ('final-container_modification', FinalForm)],
+container_modification_wizard = ContainerModificationWizard.as_view(
+ [
+ ("selec-container_modification", forms.MainContainerFormSelection),
+ ("container-container_modification", forms.ContainerModifyForm),
+ ("final-container_modification", FinalForm),
+ ],
label=_("Container modification"),
- url_name='container_modification',
+ url_name="container_modification",
)
def container_modify(request, pk):
- if not wizard_is_available(container_modification_wizard, request,
- models.Container, pk):
+ if not wizard_is_available(
+ container_modification_wizard, request, models.Container, pk
+ ):
return HttpResponseRedirect("/")
- wizard_url = 'container_modification'
+ wizard_url = "container_modification"
ContainerModificationWizard.session_set_value(
- request, 'selec-' + wizard_url, 'pk', pk, reset=True)
- return redirect(
- reverse(wizard_url, kwargs={'step': 'container-' + wizard_url}))
+ request, "selec-" + wizard_url, "pk", pk, reset=True
+ )
+ return redirect(reverse(wizard_url, kwargs={"step": "container-" + wizard_url}))
-container_deletion_wizard = ContainerDeletionWizard.as_view([
- ('selec-container_deletion', forms.MainContainerFormMultiSelection),
- ('final-container_deletion', forms.ContainerDeletionForm)],
+container_deletion_wizard = ContainerDeletionWizard.as_view(
+ [
+ ("selec-container_deletion", forms.MainContainerFormMultiSelection),
+ ("final-container_deletion", forms.ContainerDeletionForm),
+ ],
label=_("Container deletion"),
- url_name='container_deletion',)
+ url_name="container_deletion",
+)
def container_delete(request, pk):
- if not wizard_is_available(container_deletion_wizard, request,
- models.Container, pk):
+ if not wizard_is_available(
+ container_deletion_wizard, request, models.Container, pk
+ ):
return HttpResponseRedirect("/")
- wizard_url = 'container_deletion'
+ wizard_url = "container_deletion"
ContainerDeletionWizard.session_set_value(
- request, 'selec-' + wizard_url, 'pks', pk, reset=True)
- return redirect(
- reverse(wizard_url, kwargs={'step': 'final-' + wizard_url}))
+ request, "selec-" + wizard_url, "pks", pk, reset=True
+ )
+ return redirect(reverse(wizard_url, kwargs={"step": "final-" + wizard_url}))
def container_treatment_add(request, pk, current_right=None):
@@ -349,9 +411,8 @@ def container_treatment_add(request, pk, current_right=None):
container = models.Container.objects.get(pk=pk)
except models.Container.DoesNotExist:
raise Http404()
- return treatment_add(
- request, ",".join(str(f.pk) for f in container.finds.all())
- )
+ return treatment_add(request, ",".join(str(f.pk) for f in container.finds.all()))
+
"""
warehouse_packaging_wizard = ItemSourceWizard.as_view([
@@ -361,26 +422,27 @@ warehouse_packaging_wizard = ItemSourceWizard.as_view([
"""
-container_merge = merge_action(models.Container, forms.MergeContainerForm,
- 'container', name_key="reference")
+container_merge = merge_action(
+ models.Container, forms.MergeContainerForm, "container", name_key="reference"
+)
-class ContainerManualMerge(ManualMergeMixin, IshtarMixin, LoginRequiredMixin,
- FormView):
+class ContainerManualMerge(ManualMergeMixin, IshtarMixin, LoginRequiredMixin, FormView):
form_class = forms.ContainerMergeFormSelection
- template_name = 'ishtar/form.html'
+ template_name = "ishtar/form.html"
page_name = _("Merge containers")
- current_url = 'container-manual-merge'
- redir_url = 'container_manual_merge_items'
+ current_url = "container-manual-merge"
+ redir_url = "container_manual_merge_items"
-class ContainerManualMergeItems(ManualMergeItemsMixin, IshtarMixin,
- LoginRequiredMixin, FormView):
+class ContainerManualMergeItems(
+ ManualMergeItemsMixin, IshtarMixin, LoginRequiredMixin, FormView
+):
form_class = forms.ContainerMergeIntoForm
- template_name = 'ishtar/form.html'
+ template_name = "ishtar/form.html"
page_name = _("Select the main container")
- current_url = 'container-manual-merge-items'
- item_type = 'container'
+ current_url = "container-manual-merge-items"
+ item_type = "container"
class QAContainerLockView(QABaseLockView):
@@ -390,13 +452,13 @@ class QAContainerLockView(QABaseLockView):
def reset_wizards(request):
for wizard_class, url_name in (
- (PackagingWizard, 'warehouse_packaging'),
- (WarehouseWizard, 'warehouse_creation'),
- (WarehouseModificationWizard, 'warehouse_modification'),
- (WarehouseDeletionWizard, 'warehouse_deletion'),
- (ContainerWizard, 'container_creation'),
- (ContainerModificationWizard, 'container_modification'),
- (ContainerDeletionWizard, 'container_deletion'),
+ (PackagingWizard, "warehouse_packaging"),
+ (WarehouseWizard, "warehouse_creation"),
+ (WarehouseModificationWizard, "warehouse_modification"),
+ (WarehouseDeletionWizard, "warehouse_deletion"),
+ (ContainerWizard, "container_creation"),
+ (ContainerModificationWizard, "container_modification"),
+ (ContainerDeletionWizard, "container_deletion"),
):
wizard_class.session_reset(request, url_name)
@@ -408,7 +470,7 @@ class QAContainerForm(QAItemEditForm):
def get_form_kwargs(self):
kwargs = super(QAContainerForm, self).get_form_kwargs()
# item list is necessary to verify uniqueness rules
- kwargs['items'] = self.items
+ kwargs["items"] = self.items
return kwargs
@@ -416,15 +478,16 @@ class GenerateStats(IshtarMixin, LoginRequiredMixin, RedirectView):
model = None
def get_redirect_url(self, *args, **kwargs):
- return reverse('display-item',
- args=[self.model.SLUG, self.item.pk]) + "#stats"
+ return reverse("display-item", args=[self.model.SLUG, self.item.pk]) + "#stats"
def get(self, request, *args, **kwargs):
- self.item = self.model.objects.get(pk=kwargs['pk'])
- self.item._get_or_set_stats('_number_of_finds_by_place', update=True,
- expected_type=list)
- self.item._get_or_set_stats('_number_of_containers_by_place',
- update=True, expected_type=list)
+ self.item = self.model.objects.get(pk=kwargs["pk"])
+ self.item._get_or_set_stats(
+ "_number_of_finds_by_place", update=True, expected_type=list
+ )
+ self.item._get_or_set_stats(
+ "_number_of_containers_by_place", update=True, expected_type=list
+ )
return super(GenerateStats, self).get(request, *args, **kwargs)