diff options
Diffstat (limited to 'ishtar/furnitures/forms.py')
| -rw-r--r-- | ishtar/furnitures/forms.py | 91 |
1 files changed, 80 insertions, 11 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index abf76d781..db440081c 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -289,7 +289,7 @@ class Wizard(NamedUrlSessionFormWizard): return super(Wizard, self).process_post_request(request, storage, *args, **kwargs) @classmethod - def session_has_key(cls, request, storage, form_key, key=None): + def session_has_key(cls, request, storage, form_key, key=None, multi=None): """ Check if the session has value of a specific form and (if provided) of a key @@ -299,18 +299,28 @@ class Wizard(NamedUrlSessionFormWizard): and form_key in request.session[storage.prefix]['step_data'] if not key or not test: return test - key = key.startswith(form_key) and key or form_key + '-' + key + key = key.startswith(form_key) and key or \ + not multi and form_key + '-' + key or \ + form_key + '-0-' + key #only check if the first field is available return key in request.session[storage.prefix]['step_data'][form_key] @classmethod - def session_get_value(cls, request, storage, form_key, key): + def session_get_value(cls, request, storage, form_key, key, multi=False): """ Get the value of a specific form """ - if not cls.session_has_key(request, storage, form_key, key): + if not cls.session_has_key(request, storage, form_key, key, multi): return - key = key.startswith(form_key) and key or form_key + '-' + key - return request.session[storage.prefix]['step_data'][form_key][key] + if not multi: + key = key.startswith(form_key) and key or form_key + '-' + key + return request.session[storage.prefix]['step_data'][form_key][key] + vals = [] + for k in request.session[storage.prefix]['step_data'][form_key]: + if k.startswith(form_key) and k.endswith(key) and \ + request.session[storage.prefix]['step_data'][form_key][k]: + vals.append(request.session[storage.prefix]['step_data']\ + [form_key][k]) + return vals def get_current_object(self, request, storage): """ @@ -1046,16 +1056,21 @@ class OperationWizard(Wizard): def process_post_request(self, request, storage, *args, **kwargs): """ - Change the town form to a free selection town's form if no archaelogical - file is provided + Change the town (and parcel) form to a free selection town's (parcel's) + form if no archaelogical file is provided """ file_key = 'general-' + self.url_name + '-associated_file' if file_key in request.POST.keys(): - form_key = 'towns-' + self.url_name + town_form_key = 'towns-' + self.url_name + parcel_form_key = 'parcels-' + self.url_name if request.POST[file_key]: - self.form_list[unicode(form_key)] = SelectedTownFormSet + self.form_list[unicode(town_form_key)] = SelectedTownFormSet + self.form_list[unicode(parcel_form_key)] = SelectedParcelFormSet else: - self.form_list[unicode(form_key)] = SelectedTownGeneralFormSet + self.form_list[unicode(town_form_key)] = \ + SelectedTownGeneralFormSet + self.form_list[unicode(parcel_form_key)] = \ + SelectedParcelGeneralFormSet return super(OperationWizard, self).process_post_request(request, storage, *args, **kwargs) @@ -1096,6 +1111,30 @@ class OperationWizard(Wizard): except (ValueError, ObjectDoesNotExist): pass data['TOWNS'] = sorted(towns, key=lambda x:x[1]) + elif step.startswith('parcels-') and hasattr(form, 'management_form'): + file_id = self.session_get_value(request, storage, general_form_key, + "associated_file") + if file_id: + parcels = [] + try: + for parcel in models.File.objects.get(pk=int(file_id) + ).parcels.all(): + parcels.append((parcel.pk, unicode(parcel))) + except (ValueError, ObjectDoesNotExist): + pass + data['PARCELS'] = sorted(parcels, key=lambda x:x[1]) + else: + towns = [] + town_form_key = 'towns-' + self.url_name + town_ids = self.session_get_value(request, storage, + town_form_key, 'town', multi=True) + for town_id in town_ids: + try: + town = models.Town.objects.get(pk=int(town_id)) + towns.append((town.pk, unicode(town))) + except (ValueError, ObjectDoesNotExist): + pass + data['TOWNS'] = sorted(towns, key=lambda x:x[1]) data = data or None form = super(OperationWizard, self).get_form(request, storage, step, data, files) @@ -1229,6 +1268,34 @@ SelectedTownGeneralFormSet = formset_factory(TownForm, can_delete=True, formset=TownFormSet) SelectedTownGeneralFormSet.form_label = _("Towns") +class SelectedParcelForm(forms.Form): + form_label = _("Parcels") + associated_models = {'parcel':models.Parcel} + parcel = forms.ChoiceField(label=_("Parcel"), choices=(), + validators=[models.valid_id(models.Parcel)]) + def __init__(self, *args, **kwargs): + parcels = None + if 'data' in kwargs and 'PARCELS' in kwargs['data']: + parcels = kwargs['data']['PARCELS'] + # clean data if not "real" data + prefix_value = kwargs['prefix'] + '-parcel' + if not [k for k in kwargs['data'].keys() + if k.startswith(prefix_value) and kwargs['data'][k]]: + kwargs['data'] = None + if 'files' in kwargs: + kwargs.pop('files') + super(SelectedParcelForm, self).__init__(*args, **kwargs) + if parcels: + self.fields['parcel'].choices = [('', '--')] + parcels + +SelectedParcelFormSet = formset_factory(SelectedParcelForm, can_delete=True, + formset=ParcelFormSet) +SelectedParcelFormSet.form_label = _("Parcels") + +SelectedParcelGeneralFormSet = formset_factory(ParcelForm, can_delete=True, + formset=ParcelFormSet) +SelectedParcelGeneralFormSet.form_label = _("Parcels") + class RemainForm(forms.Form): form_label = _("Remain types") associated_models = {'remain':models.RemainType} @@ -1261,6 +1328,7 @@ operation_creation_wizard = OperationWizard([ ('general-operation_creation', OperationFormGeneral), ('refs-operation_creation', OperationFormReference), ('towns-operation_creation', SelectedTownFormSet), + ('parcels-operation_creation', SelectedParcelFormSet), ('remains-operation_creation', RemainFormSet), ('final-operation_creation', FinalForm)], url_name='operation_creation',) @@ -1270,6 +1338,7 @@ operation_modification_wizard = OperationWizard([ ('general-operation_modification', OperationFormGeneral), ('refs-operation_modification', OperationFormReference), ('towns-operation_modification', SelectedTownFormSet), + ('parcels-operation_modification', SelectedParcelFormSet), ('remains-operation_modification', RemainFormSet), ('final-operation_modification', FinalForm)], url_name='operation_modification',) |
