diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-14 12:06:49 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-14 12:06:49 +0200 |
commit | 53653e8d74e936a89515fbaae77bbbeea578e7f5 (patch) | |
tree | 711769ac53ca16b982eab7a5f98239fe748ee802 /archaeological_warehouse | |
parent | 184c6960f537d315155efeb620d526c0b2022630 (diff) | |
download | Ishtar-53653e8d74e936a89515fbaae77bbbeea578e7f5.tar.bz2 Ishtar-53653e8d74e936a89515fbaae77bbbeea578e7f5.zip |
Containers, Warehouse : multiple del - redirs
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/forms.py | 45 | ||||
-rw-r--r-- | archaeological_warehouse/views.py | 11 | ||||
-rw-r--r-- | archaeological_warehouse/wizards.py | 25 |
3 files changed, 48 insertions, 33 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index facc94467..88a355bad 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -27,7 +27,7 @@ from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ from ishtar_common.models import Person, valid_id, Town, \ - SpatialReferenceSystem, Organization, OrganizationType + SpatialReferenceSystem, Organization, valid_ids from archaeological_operations.models import ArchaeologicalSite from archaeological_context_records.models import ContextRecord from archaeological_finds.models import TreatmentType, FindBasket, \ @@ -43,7 +43,7 @@ from bootstrap_datepicker.widgets import DatePicker from ishtar_common.forms import name_validator, reverse_lazy, \ get_form_selection, ManageOldType, FinalForm, FormSet, \ CustomForm, FieldType, HistorySelect, FormHeader, TableSelect, \ - CustomFormSearch + CustomFormSearch, MultiSearchForm, LockForm from ishtar_common.forms_common import get_town_field from archaeological_finds.forms import FindMultipleFormSelection, \ SelectFindBasketForm @@ -110,7 +110,7 @@ class WarehouseSelect(CustomForm, TableSelect): models.WarehouseType.get_help() -class WarehouseFormSelection(CustomFormSearch): +class WarehouseFormSelection(LockForm, CustomFormSearch): SEARCH_AND_SELECT = True form_label = _("Warehouse search") associated_models = {'pk': models.Warehouse} @@ -122,20 +122,18 @@ class WarehouseFormSelection(CustomFormSearch): 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 WarehouseFormMultiSelection(LockForm, MultiSearchForm): + form_label = _("Warehouse search") + associated_models = {'pks': models.Warehouse} + pk = forms.CharField( + label="", required=False, + widget=widgets.DataTable( + reverse_lazy('get-warehouse'), + WarehouseSelect, models.Warehouse, gallery=True, map=True, + multiple_select=True + ), + validators=[valid_ids(models.Warehouse)]) class WarehouseForm(CustomForm, ManageOldType, forms.Form): @@ -452,14 +450,23 @@ ContainerFormSelection = get_form_selection( models.Container, ContainerSelect, 'get-container', _(u"You should select a container."), new=True, new_message=_(u"Add a new container"), - base_form_select=CustomFormSearch + base_form_select=(LockForm, CustomFormSearch) ) MainContainerFormSelection = get_form_selection( 'ContainerFormSelection', _(u"Container search"), 'pk', models.Container, ContainerSelect, 'get-container', _(u"You should select a container."), gallery=True, map=True, - base_form_select = CustomFormSearch + base_form_select=CustomFormSearch +) + + +MainContainerFormMultiSelection = get_form_selection( + 'ContainerFormSelection', _(u"Container search"), 'pks', + models.Container, ContainerSelect, 'get-container', + _(u"You should select a container."), gallery=True, map=True, + alt_pk_field="pk", + multi=True, base_form_select=(LockForm, MultiSearchForm) ) diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index f997be842..55d764ec7 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -31,7 +31,8 @@ from archaeological_warehouse.forms import WarehouseForm, ContainerForm, \ ContainerFormSelection, BasePackagingForm, WarehouseFormSelection, \ WarehouseModifyForm, SelectedDivisionFormset, WarehouseDeletionForm, \ MainContainerFormSelection, ContainerModifyForm, LocalisationForm, \ - ContainerDeletionForm, ContainerSelect, WarehouseSelect + ContainerDeletionForm, ContainerSelect, WarehouseSelect, \ + MainContainerFormMultiSelection, WarehouseFormMultiSelection from ishtar_common.forms import FinalForm from ishtar_common.views import QABaseLockView, wizard_is_available @@ -160,7 +161,7 @@ def warehouse_modify(request, pk): warehouse_deletion_wizard = WarehouseDeletionWizard.as_view([ - ('selec-warehouse_deletion', WarehouseFormSelection), + ('selec-warehouse_deletion', WarehouseFormMultiSelection), ('final-warehouse_deletion', WarehouseDeletionForm)], label=_(u"Warehouse deletion"), url_name='warehouse_deletion',) @@ -172,7 +173,7 @@ def warehouse_delete(request, pk): return HttpResponseRedirect("/") wizard_url = 'warehouse_deletion' WarehouseDeletionWizard.session_set_value( - request, 'selec-' + wizard_url, 'pk', pk, reset=True) + request, 'selec-' + wizard_url, 'pks', pk, reset=True) return redirect( reverse(wizard_url, kwargs={'step': 'final-' + wizard_url})) @@ -221,7 +222,7 @@ def container_modify(request, pk): container_deletion_wizard = ContainerDeletionWizard.as_view([ - ('selec-container_deletion', MainContainerFormSelection), + ('selec-container_deletion', MainContainerFormMultiSelection), ('final-container_deletion', ContainerDeletionForm)], label=_(u"Container deletion"), url_name='container_deletion',) @@ -233,7 +234,7 @@ def container_delete(request, pk): return HttpResponseRedirect("/") wizard_url = 'container_deletion' ContainerDeletionWizard.session_set_value( - request, 'selec-' + wizard_url, 'pk', pk, reset=True) + request, 'selec-' + wizard_url, 'pks', pk, reset=True) return redirect( reverse(wizard_url, kwargs={'step': 'final-' + wizard_url})) diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index 7476eb2b7..302045e2f 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -17,10 +17,11 @@ # See the file COPYING for details. -from django.shortcuts import render +from django.http import HttpResponseRedirect +from django.shortcuts import render, reverse from ishtar_common.forms import reverse_lazy -from ishtar_common.wizards import Wizard, DeletionWizard, SearchWizard +from ishtar_common.wizards import Wizard, SearchWizard, MultipleDeletionWizard from archaeological_finds.wizards import TreatmentWizard from archaeological_finds.models import Treatment, TreatmentType @@ -75,6 +76,7 @@ class PackagingWizard(TreatmentWizard): class WarehouseWizard(Wizard): model = models.Warehouse wizard_done_window = reverse_lazy('show-warehouse') + redirect_url = "warehouse_modification" def save_model(self, dct, m2m, whole_associated_models, form_list, return_object): @@ -98,6 +100,7 @@ class WarehouseModificationWizard(Wizard): 'divisions-warehouse_modification': 'ishtar/wizard/wizard_warehouse_divisions.html', } + redirect_url = "warehouse_modification" def get_form_kwargs(self, step=None): kwargs = super(WarehouseModificationWizard, self).get_form_kwargs(step) @@ -110,8 +113,9 @@ class WarehouseModificationWizard(Wizard): return kwargs -class WarehouseDeletionWizard(DeletionWizard): +class WarehouseDeletionWizard(MultipleDeletionWizard): model = models.Warehouse + redirect_url = "warehouse_deletion" class ContainerWizard(Wizard): @@ -124,6 +128,7 @@ class ContainerWizard(Wizard): } ignore_init_steps = ['localisation'] wizard_done_window = reverse_lazy('show-container') + redirect_url = "container_modification" def get_form_kwargs(self, step=None): kwargs = super(ContainerWizard, self).get_form_kwargs(step) @@ -145,7 +150,7 @@ class ContainerWizard(Wizard): Save the localisation """ super(ContainerWizard, self).done(form_list) - dct = {} + obj = None for idx, form in enumerate(form_list): if not form.is_valid(): return self.render(form) @@ -167,18 +172,20 @@ class ContainerWizard(Wizard): ) localisation.reference = form.cleaned_data[div_name] localisation.save() - dct = {'item': container} + obj = container self.current_object = container - # force evaluation of lazy urls - dct['wizard_done_window'] = str(self.wizard_done_window) - return render(self.request, self.wizard_done_template, dct) + url = reverse(self.redirect_url) + if obj: + url += "?open_item={}".format(obj.pk) + return HttpResponseRedirect(url) class ContainerModificationWizard(ContainerWizard): modification = True -class ContainerDeletionWizard(DeletionWizard): +class ContainerDeletionWizard(MultipleDeletionWizard): model = models.Container fields = ['container_type', 'reference', 'comment', 'location', 'index', 'cached_label'] + redirect_url = "container_deletion" |