diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-03-31 21:23:08 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-03-31 21:23:08 +0200 |
commit | b740b53b92d5276f48449c333ee90001abfb2a48 (patch) | |
tree | 50b91944ce5eb8decd0c99cde239b0a2df5808d1 | |
parent | 49912bb27550ee4fa9861bf8e1bf75d149218b56 (diff) | |
download | Ishtar-b740b53b92d5276f48449c333ee90001abfb2a48.tar.bz2 Ishtar-b740b53b92d5276f48449c333ee90001abfb2a48.zip |
Create specific widget to manage surfaces (closes #60)
-rw-r--r-- | ishtar/furnitures/forms.py | 15 | ||||
-rw-r--r-- | ishtar/furnitures/widgets.py | 48 | ||||
-rw-r--r-- | ishtar/settings.py.example | 2 |
3 files changed, 60 insertions, 5 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index 30fcefa3d..4a7ef745f 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -923,7 +923,9 @@ class FileFormGeneralRO(FileFormGeneral): class FileFormAddress(forms.Form): form_label = _("Address") associated_models = {'town':models.Town} - total_surface = forms.IntegerField(label=_("Total surface"), + total_surface = forms.IntegerField(required=False, + widget=widgets.AreaWidget, + label=_(u"Total surface"), validators=[validators.MinValueValidator(0), validators.MaxValueValidator(999999999)]) address = forms.CharField(label=_(u"Main address"), widget=forms.Textarea) @@ -1035,9 +1037,9 @@ class FileFormPreventive(forms.Form): choices=models.PermitType.get_types()) permit_reference = forms.CharField(label=_(u"Permit reference"), required=False, validators=[validators.MaxLengthValidator(60)]) - total_developed_surface = forms.IntegerField( - label=_("Total developed surface"), - validators=[validators.MinValueValidator(0), + total_developed_surface = forms.IntegerField(widget=widgets.AreaWidget, + label=_(u"Total developed surface"), + required=False, validators=[validators.MinValueValidator(0), validators.MaxValueValidator(999999999)]) if settings.COUNTRY == 'fr': saisine_type = forms.ChoiceField(label=_("Saisine type"), @@ -1501,7 +1503,10 @@ class OperationFormGeneral(forms.Form): choices=models.OperationType.get_types()) start_date = forms.DateField(label=_(u"Start date"), required=False, widget=widgets.JQueryDate) - surface = forms.IntegerField(label=_(u"Surface (m²)"), required=False,) + surface = forms.IntegerField(required=False, widget=widgets.AreaWidget, + label=_(u"Total surface"), + validators=[validators.MinValueValidator(0), + validators.MaxValueValidator(999999999)]) year = forms.IntegerField(label=_("Year"), initial=lambda:datetime.datetime.now().year, validators=[validators.MinValueValidator(1900), diff --git a/ishtar/furnitures/widgets.py b/ishtar/furnitures/widgets.py index 4217d5194..1ef83dd6e 100644 --- a/ishtar/furnitures/widgets.py +++ b/ishtar/furnitures/widgets.py @@ -39,6 +39,54 @@ class DeleteWidget(forms.CheckboxInput): output.append('</td></tr>')
return mark_safe('\n'.join(output))
+class SquareMeterWidget(forms.TextInput):
+ def render(self, name, value, attrs=None):
+ final_attrs = flatatt(self.build_attrs(attrs, name=name, value=value))
+ output = u'<input class="area_widget" type="text"%s> %s '\
+ u'(<span id="ha_%s">0</span> ha)' % (final_attrs,
+ settings.SURFACE_UNIT_LABEL, attrs['id'])
+ output += """
+<script type="text/javascript"><!--//
+ function evaluate_%(safe_id)s(){
+ value = parseFloat($("#%(id)s").val());
+ if(!isNaN(value)){
+ value = value/10000;
+ } else {
+ value = 0;
+ }
+ $("#ha_%(id)s").html(value);
+ }
+ $("#%(id)s").keyup(evaluate_%(safe_id)s);
+ $(document).ready(evaluate_%(safe_id)s());
+//--></script>
+""" % {"id":attrs['id'], "safe_id":attrs['id'].replace('-', '_')}
+ return mark_safe(output)
+
+AreaWidget = forms.TextInput
+if settings.SURFACE_UNIT == 'square-metre':
+ global AreaWidget
+ AreaWidget = SquareMeterWidget
+
+class JQueryDate(forms.TextInput):
+ def render(self, name, value=None, attrs=None):
+ rendered = super(JQueryDate, self).render(name, value, attrs)
+ rendered += """
+<script type="text/javascript"><!--//
+ $(function() {
+ $("#id_%(name)s").datepicker($.datepicker.regional["%(country)s"]);
+ var val = $("#id_%(name)s").val();
+ if(val){
+ var dtp = $.datepicker.parseDate('yy-mm-dd', val);
+ val = $.datepicker.formatDate(
+ $.datepicker.regional["%(country)s"]['dateFormat'],
+ dtp);
+ $("#id_%(name)s").val(val);
+ }
+ });
+//--></script>
+""" % {"name":name, "country":settings.COUNTRY}
+ return rendered
+
class JQueryDate(forms.TextInput):
def render(self, name, value=None, attrs=None):
rendered = super(JQueryDate, self).render(name, value, attrs)
diff --git a/ishtar/settings.py.example b/ishtar/settings.py.example index 4b3388389..192f13108 100644 --- a/ishtar/settings.py.example +++ b/ishtar/settings.py.example @@ -6,6 +6,8 @@ # Ishtar custom SRID = 27572 ENCODING = '' # specific encoding for CSV export - default to utf-8 +SURFACE_UNIT = 'square-metre' +SURFACE_UNIT_LABEL = 'm²' ROOT_PATH = "/var/local/webapp/ishtar/ishtar/" URL_PATH = "" |