summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/forms.py56
1 files changed, 42 insertions, 14 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index 4bcc49324..e771fe595 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -150,6 +150,31 @@ class Wizard(NamedUrlSessionFormWizard):
step = self.determine_step(request, storage)
form = self.get_form_list(request, storage)[step]
if hasattr(form, 'management_form'):
+ # manage deletion
+ not_to_delete, to_delete = [], []
+ for key in data.keys():
+ items = key.split('-')
+ if len(items) == 3:
+ if items[1] not in to_delete and \
+ items[1] not in not_to_delete:
+ del_key = u"%s-%s-DELETE" % (items[0], items[1])
+ if del_key in data and data[del_key]:
+ to_delete.append(items[1])
+ else:
+ not_to_delete.append(items[1])
+ if items[1] in to_delete:
+ data.pop(key)
+ if to_delete:
+ # reorganize
+ for idx, number in enumerate(sorted(not_to_delete)):
+ if unicode(idx) == number:
+ continue
+ for key in data.keys():
+ items = key.split('-')
+ if len(items) == 3 and items[1] == number:
+ ck = '-'.join([items[0], unicode(idx),
+ items[2]])
+ data[ck] = data.pop(key)[0]
# get a form key
base_key = form.form.base_fields.keys()[0]
total_field = len([key for key in data.keys()
@@ -205,7 +230,7 @@ class TownForm(forms.Form):
'autocomplete-town', associated_model=models.Town),
validators=[models.Town.valid_id], required=False)
-TownFormSet = formset_factory(TownForm)
+TownFormSet = formset_factory(TownForm, can_delete=True)
TownFormSet.form_label = _("Towns")
class FileForm3(forms.Form):
@@ -224,20 +249,23 @@ class FileForm3(forms.Form):
choices=models.SaisineType.get_types())
reception_date = forms.DateField(label=_(u"Reception date"))
-def is_preventive(self, request, storage):
- if storage.prefix not in request.session or \
- 'step_data' not in request.session[storage.prefix] or \
- '0' not in request.session[storage.prefix]['step_data'] or\
- '0-file_type' not in request.session[storage.prefix]['step_data']['0']:
- return False
- try:
- file_type = int(request.session[storage.prefix]['step_data']['0']\
- ['0-file_type'])
- return models.FileType.is_preventive(file_type)
- except ValueError:
- return False
+def is_preventive(form_name, file_type_key='file_type'):
+ def func(self, request, storage):
+ if storage.prefix not in request.session or \
+ 'step_data' not in request.session[storage.prefix] or \
+ form_name not in request.session[storage.prefix]['step_data'] or\
+ form_name + '-' + file_type_key not in \
+ request.session[storage.prefix]['step_data'][form_name]:
+ return False
+ try:
+ file_type = int(request.session[storage.prefix]['step_data']\
+ [form_name][form_name+'-'+file_type_key])
+ return models.FileType.is_preventive(file_type)
+ except ValueError:
+ return False
+ return func
file_creation_wizard = FileWizard([FileForm1, FileForm2, TownFormSet, FileForm3,
FinalForm],
- url_name='file_creation', condition_list={'3':is_preventive})
+ url_name='file_creation', condition_list={'3':is_preventive('0')})