diff options
Diffstat (limited to 'chimere/forms.py')
| -rw-r--r-- | chimere/forms.py | 60 | 
1 files changed, 43 insertions, 17 deletions
diff --git a/chimere/forms.py b/chimere/forms.py index 119047d..818fa6e 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -33,9 +33,9 @@ from django.core.mail import EmailMessage, BadHeaderError  from chimere.models import Marker, Route, PropertyModel, Property, Area,\       News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \ -     PictureFile, Importer +     PictureFile, Importer, PropertyModelChoice  from chimere.widgets import AreaField, PointField, TextareaWidget, \ -                            DatePickerWidget +                            DatePickerWidget, ButtonSelectWidget, NominatimWidget  from datetime import timedelta, datetime, tzinfo @@ -53,13 +53,18 @@ class UTC(tzinfo):      def dst(self, dt):          return ZERO +def getStaffEmails(): +    return [u.email for u in +          User.objects.filter(is_staff=True).exclude(email="").order_by('id')] +  def notifyStaff(subject, body, sender=None):      if not settings.EMAIL_HOST:          return +    user_list = getStaffEmails() +    if not user_list: +        return      if settings.PROJECT_NAME:          subject = u'[%s] %s' % (settings.PROJECT_NAME, subject) -    user_list = [u.email for u in -          User.objects.filter(is_staff=True).exclude(email="").order_by('id')]      headers = {}      if sender:          headers['Reply-To'] = sender @@ -113,7 +118,7 @@ class CategoryAdminForm(forms.ModelForm):      class Meta:          model = Category -class MarkerAdminFormBase(forms.ModelForm): +class MarkerAdminForm(forms.ModelForm):      """      Main form for marker      """ @@ -139,12 +144,27 @@ class MarkerAdminFormBase(forms.ModelForm):                  keys['initial'] = property_dct          subcategories = keys.pop('subcategories') \                          if 'subcategories' in keys else [] -        super(MarkerAdminFormBase, self).__init__(*args, **keys) +        super(MarkerAdminForm, self).__init__(*args, **keys)          if settings.CHIMERE_DAYS_BEFORE_EVENT:              self.fields['start_date'].widget = DatePickerWidget()              self.fields['end_date'].widget = DatePickerWidget()          if subcategories:              self.fields['categories'].choices = subcategories +        for prop in PropertyModel.objects.filter(available=True): +            key = "property_%d_%d" % (prop.order, prop.id) +            if prop.type == 'C': +                choices = PropertyModelChoice.objects.filter(propertymodel=prop, +                                                             available=True +                                                             ).order_by('value') +                self.fields[key] = forms.ChoiceField(label=prop.name, +                                           choices=[('', '--')] + \ +                                                   [(choice.pk, unicode(choice)) +                                                         for choice in choices], +                                           required=False) +            else: +                self.fields[key] = forms.CharField(label=prop.name, +                                    widget=PropertyModel.TYPE_WIDGET[prop.type], +                                    required=False)      def clean(self):          ''' @@ -176,7 +196,7 @@ class MarkerAdminFormBase(forms.ModelForm):          """          Custom save method in order to manage associated properties          """ -        new_marker = super(MarkerAdminFormBase, self).save(*args, **keys) +        new_marker = super(MarkerAdminForm, self).save(*args, **keys)          if 'status' not in self.cleaned_data:              new_marker.status = 'S'          if new_marker.status == 'A': @@ -190,16 +210,6 @@ class MarkerAdminFormBase(forms.ModelForm):          new_marker.saveProperties(properties)          return new_marker -# As we have dynamic fields, it's cleaner to make the class dynamic too -fields = {} -# declare properties -for prop in PropertyModel.objects.filter(available=True): -    key = "property_%d_%d" % (prop.order, prop.id) -    fields[key] = forms.CharField(label=prop.name, -                                 widget=PropertyModel.TYPE_WIDGET[prop.type], -                                 required=False) -MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,), fields) -  class MarkerForm(MarkerAdminForm):      """      Form for the edit page @@ -453,3 +463,19 @@ class AreaForm(AreaAdminForm):      class Meta:          model = Area +class RoutingForm(forms.Form): +    transport = forms.ChoiceField(label='', widget=ButtonSelectWidget, +                               choices=settings.CHIMERE_ROUTING_TRANSPORT, +                               initial=settings.CHIMERE_ROUTING_TRANSPORT[0][0]) +    start = forms.CharField(label=_(u"Start"), widget=NominatimWidget) +    end = forms.CharField(label=_(u"Finish"), widget=NominatimWidget) +    speed = forms.ChoiceField(label=_(u"Speed"), choices=[], required=False) + +    def __init__(self, *args, **kwargs): +        super(RoutingForm, self).__init__(*args, **kwargs) +        if not settings.CHIMERE_ROUTING_SPEEDS: +            self.fields.pop('speed') +        for transport in settings.CHIMERE_ROUTING_SPEEDS: +            for speed, lbl in settings.CHIMERE_ROUTING_SPEEDS[transport]: +                self.fields['speed'].widget.choices.append( +                                ("%s_%d" % (transport, speed), lbl))  | 
