summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-01-07 02:20:09 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-01-07 02:20:09 +0100
commit67d9315db7656319322f38e31bc7bd44d0dbe9b9 (patch)
treed2ae727ef94647ca502cb61e3032ab5bd7f53c7b
parentac07856860b811d27e5cd4265cf85a2523f87a41 (diff)
downloadIshtar-67d9315db7656319322f38e31bc7bd44d0dbe9b9.tar.bz2
Ishtar-67d9315db7656319322f38e31bc7bd44d0dbe9b9.zip
Save of parcels (refs #14)
-rw-r--r--ishtar/furnitures/forms.py70
-rw-r--r--ishtar/furnitures/models.py7
2 files changed, 58 insertions, 19 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index 1dc06fb32..a65c44611 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -50,6 +50,7 @@ class FormSet(BaseFormSet):
pass
class Wizard(NamedUrlSessionFormWizard):
+ model = None
def get_template(self, request, storage):
templates = ['default_wizard.html']
current_step = storage.get_current_step() or '0'
@@ -114,37 +115,42 @@ class Wizard(NamedUrlSessionFormWizard):
datas.append((lbl, value))
return datas
- def done(self, request, storage, form_list, **kwargs):
+ def done(self, request, storage, form_list, return_object=False, **kwargs):
"""
Save to the model
"""
dct, m2m = {}, []
for form in form_list:
+ if not form.is_valid():
+ return self.render(request, storage, form)
base_form = hasattr(form, 'forms') and form.forms[0] or form
associated_models = hasattr(base_form, 'associated_models') and \
base_form.associated_models or {}
- if type(form.cleaned_data) == dict:
- for key in form.cleaned_data:
- value = form.cleaned_data[key]
- if key in associated_models:
- value = associated_models[key].objects.get(pk=value)
- dct[key] = value
- elif type(form.cleaned_data) == list:
- for item in form.cleaned_data:
- for key in item:
+ if hasattr(form, 'forms'):
+ for frm in form.forms:
+ if not frm.is_valid():
+ continue
+ for key in frm:
if key not in associated_models:
# datas not managed
continue
- value = item[key]
+ value = frm[key]
value = associated_models[key].objects.get(pk=value)
m2m.append((key, value))
+ elif type(form.cleaned_data) == dict:
+ for key in form.cleaned_data:
+ value = form.cleaned_data[key]
+ if key in associated_models:
+ value = associated_models[key].objects.get(pk=value)
+ dct[key] = value
dct['history_modifier'] = request.user
- fle = models.File(**dct)
- fle.save()
+ obj = self.model(**dct)
+ obj.save()
for key, value in m2m:
- getattr(fle, key+'s').add(value)
- return render_to_response('wizard_done.html', {},
+ getattr(obj, key+'s').add(value)
+ res = render_to_response('wizard_done.html', {},
context_instance=RequestContext(request))
+ return return_object and (obj, res) or res
def get_form(self, request, storage, step=None, data=None, files=None):
"""
@@ -187,6 +193,7 @@ class Wizard(NamedUrlSessionFormWizard):
if base_key in key.split('-') and data[key]])
data[step + u'-INITIAL_FORMS'] = unicode(total_field)
data[step + u'-TOTAL_FORMS'] = unicode(total_field + 1)
+ data = data or None
form = super(Wizard, self).get_form(request, storage, step, data, files)
return form
@@ -201,6 +208,7 @@ class Wizard(NamedUrlSessionFormWizard):
**kwargs)
class FileWizard(Wizard):
+ model = models.File
def get_form(self, request, storage, step=None, data=None, files=None):
"""
Manage formset
@@ -231,6 +239,35 @@ class FileWizard(Wizard):
files)
return form
+ def done(self, request, storage, form_list, **kwargs):
+ '''
+ Save parcels
+ '''
+ r = super(FileWizard, self).done(request, storage, form_list,
+ return_object=True, **kwargs)
+ if type(r) not in (list, tuple) or len(r) != 2:
+ return r
+ obj, res = r
+ for form in form_list:
+ if not hasattr(form, 'prefix') or form.prefix != '3' \
+ or not hasattr(form, 'forms'):
+ continue
+ for frm in form.forms:
+ if not frm.is_valid():
+ continue
+ dct = frm.cleaned_data.copy()
+ try:
+ dct['town'] = models.Town.objects.get(pk=int(dct['town']))
+ except (ValueError, ObjectDoesNotExist):
+ continue
+ dct['associated_file'] = obj
+ dct['operation'] = None
+ if 'DELETE' in dct:
+ dct.pop('DELETE')
+ parcel = models.Parcel(**dct)
+ parcel.save()
+ return res
+
class FileForm1(forms.Form):
form_label = _("General")
associated_models = {'in_charge':models.Person,
@@ -284,6 +321,7 @@ TownFormSet.form_label = _("Towns")
class ParcelForm(forms.Form):
form_label = _("Parcels")
+ associated_models = {'parcel':models.Parcel}
town = forms.ChoiceField(label=_("Town"), choices=(),
validators=[models.Town.valid_id])
section = forms.CharField(label=_(u"Section"),
@@ -300,7 +338,7 @@ class ParcelForm(forms.Form):
prefix_value = kwargs['prefix'] + '-town'
if not [k for k in kwargs['data'].keys()
if k.startswith(prefix_value) and kwargs['data'][k]]:
- kwargs.pop('data')
+ kwargs['data'] = None
if 'files' in kwargs:
kwargs.pop('files')
super(ParcelForm, self).__init__(*args, **kwargs)
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 6e623d321..65307e15a 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -301,9 +301,9 @@ class Operation(BaseHistorizedItem, OwnPerms):
class Parcel(LightHistorizedItem) :
- associated_file = models.ForeignKey(File, related_name='+', blank=True,
+ associated_file = models.ForeignKey(File, related_name='parcel', blank=True,
null=True, verbose_name=_(u"File"))
- operation = models.ForeignKey(Operation, related_name='+', blank=True,
+ operation = models.ForeignKey(Operation, related_name='parcel', blank=True,
null=True, verbose_name=_(u"Operation"))
year = models.IntegerField(_(u"Year"),
default=lambda:datetime.datetime.now().year)
@@ -317,7 +317,8 @@ class Parcel(LightHistorizedItem) :
def __unicode__(self):
return u" - ".join([unicode(item) for item in \
- [self.operation, self.section, self.parcel_number]])
+ [self.associated_file, self.operation, self.section, self.parcel_number]
+ if item])
class Period(GeneralType) :
order = models.IntegerField(_(u"Order"))