diff options
| -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 = ""  | 
