diff options
| -rw-r--r-- | ishtar/furnitures/forms.py | 56 |
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')}) |
