summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
diff options
context:
space:
mode:
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
commita287e2dc11534e8c66f1c6c992e2151648b00e51 (patch)
tree711769ac53ca16b982eab7a5f98239fe748ee802 /archaeological_warehouse
parent50c0e779c3670264f2966b4659c6a656001fcf31 (diff)
downloadIshtar-a287e2dc11534e8c66f1c6c992e2151648b00e51.tar.bz2
Ishtar-a287e2dc11534e8c66f1c6c992e2151648b00e51.zip
Containers, Warehouse : multiple del - redirs
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/forms.py45
-rw-r--r--archaeological_warehouse/views.py11
-rw-r--r--archaeological_warehouse/wizards.py25
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"