diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-03-19 11:23:36 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-03-19 11:23:36 +0100 |
commit | 6790c38e3f0d2a9e95f7d33892971863a224bf76 (patch) | |
tree | cc628849cc6a15d19d68f8d0f0d953b1e2e833c0 /archaeological_warehouse/views.py | |
parent | f416ff91109b3a0d06ea84fdcff1e133ea8ca5ae (diff) | |
download | Ishtar-6790c38e3f0d2a9e95f7d33892971863a224bf76.tar.bz2 Ishtar-6790c38e3f0d2a9e95f7d33892971863a224bf76.zip |
Format - black: warehouse
Diffstat (limited to 'archaeological_warehouse/views.py')
-rw-r--r-- | archaeological_warehouse/views.py | 395 |
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) |