Split ApproachForm, full featured display of transport/journey settings.
This commit is contained in:
2
TODO.txt
2
TODO.txt
@@ -1,5 +1,3 @@
|
||||
- Anzeige Bahnfahrt
|
||||
- ApproachForm aufteilen
|
||||
- Save as Draft
|
||||
- Copy Event
|
||||
- Tourenreferent managed Gruppen der Subreferenten
|
||||
|
||||
@@ -14,6 +14,7 @@ TRAINER_NAME_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
PHONE_NUMBER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
LOCATION_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
TRANSPORT_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
DEPARTURE_RIDE_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
MEETING_POINT_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
BASECAMP_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
ACCOMMODATION_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
|
||||
@@ -43,9 +44,10 @@ class FieldInitial(object):
|
||||
'mode': session_data.get('mode', None),
|
||||
'sport': session_data.get('sport', None),
|
||||
'level': session_data.get('level', None),
|
||||
'overnight': str(bool(session_data.get('last_day', None))),
|
||||
'country': session_data.get('country', None),
|
||||
'terrain': session_data.get('terrain', None),
|
||||
'overnight': str(bool(session_data.get('last_day', None))),
|
||||
'transport': session_data.get('transport', None),
|
||||
}
|
||||
for tuple in self._tuples:
|
||||
constraint, result = tuple
|
||||
|
||||
@@ -49,19 +49,13 @@ FORM_INITIALS = {
|
||||
'submountains',
|
||||
),
|
||||
},
|
||||
'ApproachForm': {
|
||||
'transport': FieldInitial(
|
||||
'sport==M,country==DE,terrain==submountains',
|
||||
'public',
|
||||
'sport==W,country==DE,terrain==submountains',
|
||||
'public',
|
||||
),
|
||||
'JourneyForm': {
|
||||
'meeting_point': FieldInitial(
|
||||
'sport==M,country==DE,terrain==submountains',
|
||||
'hbf',
|
||||
'sport==W,country==DE,terrain==submountains',
|
||||
'transport==public',
|
||||
'hbf',
|
||||
),
|
||||
},
|
||||
'AccommodationForm': {
|
||||
'accommodation': FieldInitial('terrain==alpine', 'hut'),
|
||||
'meals': FieldInitial('NONE'),
|
||||
},
|
||||
|
||||
@@ -217,12 +217,6 @@ class ModeForm(EventCreateForm):
|
||||
},
|
||||
bootstrap_version=3))
|
||||
|
||||
@property
|
||||
def next_form_name(self):
|
||||
if self.cleaned_data.get('mode') == 'training':
|
||||
return 'TrainingForm'
|
||||
return super(ModeForm, self).next_form_name
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super(ModeForm, self).clean()
|
||||
last_day = cleaned_data.get('last_day', None)
|
||||
@@ -234,52 +228,9 @@ class ModeForm(EventCreateForm):
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class TrainingForm(EventCreateForm):
|
||||
_form_title = _(u'Kursinhalte / Kursziele')
|
||||
_next_form_name = 'LocationForm'
|
||||
|
||||
course_topic_1 = forms.CharField(required=True,
|
||||
label=u'%s - %s 1' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.Textarea(attrs={'rows': 2}))
|
||||
course_topic_2 = forms.CharField(required=False,
|
||||
label=u'%s - %s 2' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_3 = forms.CharField(required=False,
|
||||
label=u'%s - %s 3' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_4 = forms.CharField(required=False,
|
||||
label=u'%s - %s 4' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_5 = forms.CharField(required=False,
|
||||
label=u'%s - %s 5' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_6 = forms.CharField(required=False,
|
||||
label=u'%s - %s 6' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
|
||||
course_goal_1 = forms.CharField(required=True,
|
||||
label=u'%s - %s 1' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.Textarea(attrs={'rows': 2}))
|
||||
course_goal_2 = forms.CharField(required=False,
|
||||
label=u'%s - %s 2' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_3 = forms.CharField(required=False,
|
||||
label=u'%s - %s 3' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_4 = forms.CharField(required=False,
|
||||
label=u'%s - %s 4' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_5 = forms.CharField(required=False,
|
||||
label=u'%s - %s 5' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_6 = forms.CharField(required=False,
|
||||
label=u'%s - %s 6' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
|
||||
|
||||
class LocationForm(EventCreateForm):
|
||||
_form_title = _(u'Ort')
|
||||
_next_form_name = 'ApproachForm'
|
||||
_next_form_name = 'JourneyForm'
|
||||
|
||||
country = LazyTypedChoiceField(choices=choices.COUNTRY_CHOICES,
|
||||
label=_(u'Land'))
|
||||
@@ -305,6 +256,14 @@ class LocationForm(EventCreateForm):
|
||||
attrs={'placeholder': _(u'Kann in Ausnahmefällen frei gelassen werden')}
|
||||
))
|
||||
|
||||
transport = forms.ChoiceField(choices=choices.TRANSPORT_CHOICES,
|
||||
label=_(u'Verkehrsmittel zur An- und Abreise'),
|
||||
)
|
||||
transport_other = forms.CharField(required=False,
|
||||
max_length=config.TRANSPORT_OTHER_MAX_LENGTH,
|
||||
label=_(u'Anderes Verkehrsmittel zur An- und Abreise'),
|
||||
)
|
||||
|
||||
def _proceed_session_data(self, session_data):
|
||||
super(LocationForm, self)._proceed_session_data(session_data)
|
||||
|
||||
@@ -325,19 +284,13 @@ class LocationForm(EventCreateForm):
|
||||
elif sport == 'W':
|
||||
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Maikammer, Pfalz'
|
||||
|
||||
self.fields['transport_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
|
||||
|
||||
class ApproachForm(EventCreateForm):
|
||||
_form_title = _(u'An- und Abreise / Unterkunft')
|
||||
|
||||
class JourneyForm(EventCreateForm):
|
||||
_form_title = _(u'An- und Abreise - Teil 2')
|
||||
_next_form_name = 'RequirementsForm'
|
||||
|
||||
transport = forms.ChoiceField(choices=choices.TRANSPORT_CHOICES,
|
||||
label=_(u'Verkehrsmittel'),
|
||||
)
|
||||
transport_other = forms.CharField(required=False,
|
||||
max_length=config.TRANSPORT_OTHER_MAX_LENGTH,
|
||||
label=_(u'Anderes Verkehrsmittel'),
|
||||
)
|
||||
|
||||
meeting_point = forms.ChoiceField(choices=choices.MEETING_POINT_CHOICES,
|
||||
label=_(u'Treffpunkt'),
|
||||
)
|
||||
@@ -362,6 +315,63 @@ class ApproachForm(EventCreateForm):
|
||||
},
|
||||
bootstrap_version=3))
|
||||
|
||||
departure_time = forms.TimeField(required=False,
|
||||
label=_(u'Uhrzeit Abfahrt'),
|
||||
help_text=u'%s - %s' % (
|
||||
_(u'Format: hh:mm'),
|
||||
_(u'Kann freigelassen werden'),
|
||||
),
|
||||
widget=TimeWidget(attrs={'id': 'id_departure_time_widget',
|
||||
'placeholder': _(u'Kann freigelassen werden'),
|
||||
},
|
||||
# usel10n=True,
|
||||
options={
|
||||
'format': 'hh:ii',
|
||||
'pickerPosition': 'bottom-left',
|
||||
},
|
||||
bootstrap_version=3))
|
||||
|
||||
departure_ride = forms.CharField(required=False,
|
||||
max_length=config.MEETING_POINT_OTHER_MAX_LENGTH,
|
||||
label=_(u'Bahn- / Bus-Linie / evtl. Haltestelle'),
|
||||
help_text=u'%s - %s' % (
|
||||
_(u'Wo sollen die Teilnehmer einsteigen, wenn kein Treffpunkt ausgemacht ist'
|
||||
u', oder jemand später zusteigen will'),
|
||||
_(u'Kann freigelassen werden'),),
|
||||
)
|
||||
|
||||
return_departure_time = forms.TimeField(required=False,
|
||||
label=_(u'Uhrzeit Rückfahrt (Abfahrt am Tourenort)'),
|
||||
help_text=u'%s - %s' % (
|
||||
_(u'Format: hh:mm'),
|
||||
_(u'Kann freigelassen werden'),
|
||||
),
|
||||
widget=TimeWidget(attrs={'id': 'id_return_departure_time_widget',
|
||||
'placeholder': _(u'Kann freigelassen werden'),
|
||||
},
|
||||
# usel10n=True,
|
||||
options={
|
||||
'format': 'hh:ii',
|
||||
'pickerPosition': 'bottom-left',
|
||||
},
|
||||
bootstrap_version=3))
|
||||
|
||||
return_arrival_time = forms.TimeField(required=False,
|
||||
label=_(u'oder: Uhrzeit Rückkunft (Ankunft in Karlsruhe)'),
|
||||
help_text=u'%s - %s' % (
|
||||
_(u'Format: hh:mm'),
|
||||
_(u'Kann freigelassen werden'),
|
||||
),
|
||||
widget=TimeWidget(attrs={'id': 'id_return_arrival_time_widget',
|
||||
'placeholder': _(u'Kann freigelassen werden'),
|
||||
},
|
||||
# usel10n=True,
|
||||
options={
|
||||
'format': 'hh:ii',
|
||||
'pickerPosition': 'bottom-left',
|
||||
},
|
||||
bootstrap_version=3))
|
||||
|
||||
arrival_previous_day = forms.BooleanField(required=False,
|
||||
label=_(u'Anreise des Kurs-/Tourenleiters am Vortag'),
|
||||
help_text=u'%s %s' % (
|
||||
@@ -370,21 +380,41 @@ class ApproachForm(EventCreateForm):
|
||||
),
|
||||
)
|
||||
|
||||
return_time = forms.TimeField(required=False,
|
||||
label=_(u'Uhrzeit Rückkunft'),
|
||||
help_text=u'%s - %s' % (
|
||||
_(u'Format: hh:mm'),
|
||||
_(u'Kann freigelassen werden'),
|
||||
),
|
||||
widget=TimeWidget(attrs={'id': 'id_back_time_widget',
|
||||
'placeholder': _(u'Kann freigelassen werden'),
|
||||
},
|
||||
# usel10n=True,
|
||||
options={
|
||||
'format': 'hh:ii',
|
||||
'pickerPosition': 'bottom-left',
|
||||
},
|
||||
bootstrap_version=3))
|
||||
@property
|
||||
def next_form_name(self):
|
||||
if bool(self._session_data.get('last_day', None)):
|
||||
return 'AccommodationForm'
|
||||
return super(JourneyForm, self).next_form_name
|
||||
|
||||
def _proceed_session_data(self, session_data):
|
||||
super(JourneyForm, self)._proceed_session_data(session_data)
|
||||
|
||||
first_day = session_data.get('first_day', None)
|
||||
last_day = session_data.get('last_day', None)
|
||||
transport = session_data.get('transport', None)
|
||||
|
||||
self.fields['meeting_point_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
|
||||
self.fields['departure_ride'].widget.attrs['placeholder'] = _(u'z.B. Linie S81 nach Freudenstadt, Gleis 9')
|
||||
|
||||
self.fields['meeting_time'].widget.options['startDate'] = first_day.strftime('%Y-%m-%d 00:00:00')
|
||||
self.fields['meeting_time'].widget.options['endDate'] = first_day.strftime('%Y-%m-%d 23:59:59')
|
||||
self.fields['departure_time'].widget.options['startDate'] = first_day.strftime('%Y-%m-%d 00:00:00')
|
||||
self.fields['departure_time'].widget.options['endDate'] = first_day.strftime('%Y-%m-%d 23:59:59')
|
||||
|
||||
return_day = last_day or first_day
|
||||
self.fields['return_departure_time'].widget.options['startDate'] = return_day.strftime('%Y-%m-%d 00:00:00')
|
||||
self.fields['return_departure_time'].widget.options['endDate'] = return_day.strftime('%Y-%m-%d 23:59:59')
|
||||
self.fields['return_arrival_time'].widget.options['startDate'] = return_day.strftime('%Y-%m-%d 00:00:00')
|
||||
self.fields['return_arrival_time'].widget.options['endDate'] = return_day.strftime('%Y-%m-%d 23:59:59')
|
||||
|
||||
if transport != 'public':
|
||||
self.fields['departure_time'].widget = forms.HiddenInput()
|
||||
self.fields['departure_ride'].widget = forms.HiddenInput()
|
||||
|
||||
|
||||
class AccommodationForm(EventCreateForm):
|
||||
_form_title = _(u'Unterkunft')
|
||||
_next_form_name = 'RequirementsForm'
|
||||
|
||||
basecamp = forms.CharField(required=False,
|
||||
max_length=config.BASECAMP_MAX_LENGTH,
|
||||
@@ -409,34 +439,15 @@ class ApproachForm(EventCreateForm):
|
||||
)
|
||||
|
||||
def _proceed_session_data(self, session_data):
|
||||
super(ApproachForm, self)._proceed_session_data(session_data)
|
||||
|
||||
first_day = session_data.get('first_day', None)
|
||||
last_day = session_data.get('last_day', None)
|
||||
|
||||
self.fields['transport_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
|
||||
self.fields['meeting_point_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
|
||||
super(AccommodationForm, self)._proceed_session_data(session_data)
|
||||
self.fields['basecamp'].widget.attrs['placeholder'] = _(u'Kann freigelassen werden')
|
||||
self.fields['accommodation_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
|
||||
self.fields['meals_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
|
||||
|
||||
self.fields['meeting_time'].widget.options['startDate'] = first_day.strftime('%Y-%m-%d 00:00:00')
|
||||
self.fields['meeting_time'].widget.options['endDate'] = first_day.strftime('%Y-%m-%d 23:59:59')
|
||||
|
||||
return_day = last_day or first_day
|
||||
self.fields['return_time'].widget.options['startDate'] = return_day.strftime('%Y-%m-%d 00:00:00')
|
||||
self.fields['return_time'].widget.options['endDate'] = return_day.strftime('%Y-%m-%d 23:59:59')
|
||||
|
||||
if not last_day:
|
||||
self.fields['basecamp'].widget = forms.HiddenInput()
|
||||
self.fields['accommodation'].widget = forms.HiddenInput()
|
||||
self.fields['accommodation'].initial = 'NONE'
|
||||
self.fields['accommodation_other'].widget = forms.HiddenInput()
|
||||
|
||||
|
||||
class RequirementsForm(EventCreateForm):
|
||||
_form_title = _(u'Voraussetzungen / Vorbedingungen')
|
||||
_next_form_name = 'DescriptionForm'
|
||||
_next_form_name = 'TrainerForm'
|
||||
|
||||
requirements = forms.CharField(required=False,
|
||||
label=_(u'Anforderungen / Voraussetzungen'),
|
||||
@@ -492,53 +503,6 @@ class RequirementsForm(EventCreateForm):
|
||||
bootstrap_version=3))
|
||||
|
||||
|
||||
class DescriptionForm(EventCreateForm):
|
||||
_form_title = _(u'Titel / Beschreibung')
|
||||
_next_form_name = 'TrainerForm'
|
||||
|
||||
title = forms.CharField(max_length=config.TITLE_MAX_LENGTH,
|
||||
label=_(u'Name bzw. Titel der Veranstaltung'),
|
||||
)
|
||||
description = forms.CharField(label=_(u'Beschreibung'),
|
||||
widget=forms.Textarea(attrs={'rows': 5}))
|
||||
|
||||
def get_initial_for_field(self, field, field_name):
|
||||
value = super(DescriptionForm, self).get_initial_for_field(field, field_name)
|
||||
if field_name == 'title' and value is None:
|
||||
mode = self._session_data.get('mode', None)
|
||||
sport = self._session_data.get('sport', None)
|
||||
level = self._session_data.get('level', None)
|
||||
terrain = self._session_data.get('terrain', None)
|
||||
last_day = self._session_data.get('last_day', None)
|
||||
|
||||
value = u''
|
||||
if mode == 'training':
|
||||
if level == 'beginner':
|
||||
value += u'%s ' % ugettext(u'Grundkurs')
|
||||
else:
|
||||
value += u'%s ' % ugettext(u'Aufbaukurs')
|
||||
|
||||
if sport == 'B':
|
||||
value += u'%s' % ugettext(u'Alpin')
|
||||
elif sport == 'K':
|
||||
if terrain == 'gym':
|
||||
value += ugettext(u'Indoorklettern')
|
||||
elif terrain == 'crag':
|
||||
value += ugettext(u'Fels')
|
||||
elif terrain == 'alpine':
|
||||
value += ugettext(u'Alpinklettern')
|
||||
|
||||
value += u': ...'
|
||||
elif sport == 'W' and not last_day:
|
||||
value += u'%s ...' % ugettext(u'Tageswanderung')
|
||||
|
||||
if app_config.settings.forms_development_init:
|
||||
if not value:
|
||||
value = u'%s' % choices.SPORT_CHOICES.get_label(sport)
|
||||
|
||||
return value
|
||||
|
||||
|
||||
class TrainerForm(EventCreateForm):
|
||||
_form_title = _(u'Tourenleitung')
|
||||
_next_form_name = 'RegistrationForm'
|
||||
@@ -701,7 +665,7 @@ class RegistrationForm(EventCreateForm):
|
||||
|
||||
class ChargesForm(EventCreateForm):
|
||||
_form_title = _(u'Kosten')
|
||||
_next_form_name = 'SummaryForm'
|
||||
_next_form_name = 'DescriptionForm'
|
||||
|
||||
charge_key = forms.CharField(disabled=True,
|
||||
label=_(u'Kostenschlüssel'),
|
||||
@@ -735,6 +699,12 @@ class ChargesForm(EventCreateForm):
|
||||
help_text=_(u'Kann freigelassen werden'),
|
||||
)
|
||||
|
||||
@property
|
||||
def next_form_name(self):
|
||||
if self._session_data.get('mode') == 'training':
|
||||
return 'TrainingForm'
|
||||
return super(ChargesForm, self).next_form_name
|
||||
|
||||
def _proceed_session_data(self, session_data):
|
||||
super(ChargesForm, self)._proceed_session_data(session_data)
|
||||
|
||||
@@ -816,6 +786,96 @@ class ChargesForm(EventCreateForm):
|
||||
self.fields['additional_costs'].initial = additional_costs_text
|
||||
|
||||
|
||||
class TrainingForm(EventCreateForm):
|
||||
_form_title = _(u'Kursinhalte / Kursziele')
|
||||
_next_form_name = 'DescriptionForm'
|
||||
|
||||
course_topic_1 = forms.CharField(required=True,
|
||||
label=u'%s - %s 1' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.Textarea(attrs={'rows': 2}))
|
||||
course_topic_2 = forms.CharField(required=False,
|
||||
label=u'%s - %s 2' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_3 = forms.CharField(required=False,
|
||||
label=u'%s - %s 3' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_4 = forms.CharField(required=False,
|
||||
label=u'%s - %s 4' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_5 = forms.CharField(required=False,
|
||||
label=u'%s - %s 5' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_topic_6 = forms.CharField(required=False,
|
||||
label=u'%s - %s 6' % (_(u'Kursinhalt'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
|
||||
course_goal_1 = forms.CharField(required=True,
|
||||
label=u'%s - %s 1' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.Textarea(attrs={'rows': 2}))
|
||||
course_goal_2 = forms.CharField(required=False,
|
||||
label=u'%s - %s 2' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_3 = forms.CharField(required=False,
|
||||
label=u'%s - %s 3' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_4 = forms.CharField(required=False,
|
||||
label=u'%s - %s 4' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_5 = forms.CharField(required=False,
|
||||
label=u'%s - %s 5' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
course_goal_6 = forms.CharField(required=False,
|
||||
label=u'%s - %s 6' % (_(u'Kursziel'), _(u'Absatz')),
|
||||
widget=forms.TextInput(attrs={'placeholder': _(u'Kann frei gelassen werden')}))
|
||||
|
||||
|
||||
class DescriptionForm(EventCreateForm):
|
||||
_form_title = _(u'Titel / Beschreibung')
|
||||
_next_form_name = 'SummaryForm'
|
||||
|
||||
title = forms.CharField(max_length=config.TITLE_MAX_LENGTH,
|
||||
label=_(u'Name bzw. Titel der Veranstaltung'),
|
||||
)
|
||||
description = forms.CharField(label=_(u'Beschreibung'),
|
||||
widget=forms.Textarea(attrs={'rows': 5}))
|
||||
|
||||
def get_initial_for_field(self, field, field_name):
|
||||
value = super(DescriptionForm, self).get_initial_for_field(field, field_name)
|
||||
if field_name == 'title' and value is None:
|
||||
mode = self._session_data.get('mode', None)
|
||||
sport = self._session_data.get('sport', None)
|
||||
level = self._session_data.get('level', None)
|
||||
terrain = self._session_data.get('terrain', None)
|
||||
last_day = self._session_data.get('last_day', None)
|
||||
|
||||
value = u''
|
||||
if mode == 'training':
|
||||
if level == 'beginner':
|
||||
value += u'%s ' % ugettext(u'Grundkurs')
|
||||
else:
|
||||
value += u'%s ' % ugettext(u'Aufbaukurs')
|
||||
|
||||
if sport == 'B':
|
||||
value += u'%s' % ugettext(u'Alpin')
|
||||
elif sport == 'K':
|
||||
if terrain == 'gym':
|
||||
value += ugettext(u'Indoorklettern')
|
||||
elif terrain == 'crag':
|
||||
value += ugettext(u'Fels')
|
||||
elif terrain == 'alpine':
|
||||
value += ugettext(u'Alpinklettern')
|
||||
|
||||
value += u': ...'
|
||||
elif sport == 'W' and not last_day:
|
||||
value += u'%s ...' % ugettext(u'Tageswanderung')
|
||||
|
||||
if app_config.settings.forms_development_init:
|
||||
if not value:
|
||||
value = u'%s' % choices.SPORT_CHOICES.get_label(sport)
|
||||
|
||||
return value
|
||||
|
||||
|
||||
class SummaryForm(EventCreateForm):
|
||||
_form_title = _(u'Zusammenfassung')
|
||||
|
||||
|
||||
30
dav_events/migrations/0017_auto_20180227_1408.py
Normal file
30
dav_events/migrations/0017_auto_20180227_1408.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.9 on 2018-02-27 14:08
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dav_events', '0016_event_registration_required'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='event',
|
||||
old_name='return_time',
|
||||
new_name='return_arrival_time',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='departure_time',
|
||||
field=models.TimeField(blank=True, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='return_departure_time',
|
||||
field=models.TimeField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
20
dav_events/migrations/0018_event_departure_ride.py
Normal file
20
dav_events/migrations/0018_event_departure_ride.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.9 on 2018-02-27 14:23
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dav_events', '0017_auto_20180227_1408'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='departure_ride',
|
||||
field=models.CharField(blank=True, max_length=250),
|
||||
),
|
||||
]
|
||||
@@ -75,42 +75,35 @@ class Event(models.Model):
|
||||
alt_last_day = models.DateField(blank=True,
|
||||
null=True)
|
||||
|
||||
# TrainingForm
|
||||
course_topic_1 = models.TextField(blank=True)
|
||||
course_topic_2 = models.TextField(blank=True)
|
||||
course_topic_3 = models.TextField(blank=True)
|
||||
course_topic_4 = models.TextField(blank=True)
|
||||
course_topic_5 = models.TextField(blank=True)
|
||||
course_topic_6 = models.TextField(blank=True)
|
||||
course_goal_1 = models.TextField(blank=True)
|
||||
course_goal_2 = models.TextField(blank=True)
|
||||
course_goal_3 = models.TextField(blank=True)
|
||||
course_goal_4 = models.TextField(blank=True)
|
||||
course_goal_5 = models.TextField(blank=True)
|
||||
course_goal_6 = models.TextField(blank=True)
|
||||
|
||||
# LocationForm
|
||||
country = CountryField(countries=choices.CountryChoiceSet)
|
||||
terrain = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||
choices=choices.TERRAIN_CHOICES)
|
||||
location = models.CharField(max_length=config.LOCATION_MAX_LENGTH,
|
||||
blank=True)
|
||||
|
||||
# ApproachForm
|
||||
transport = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||
choices=choices.TRANSPORT_CHOICES)
|
||||
transport_other = models.CharField(max_length=config.TRANSPORT_OTHER_MAX_LENGTH,
|
||||
blank=True)
|
||||
|
||||
# JourneyForm
|
||||
meeting_point = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||
choices=choices.MEETING_POINT_CHOICES)
|
||||
meeting_point_other = models.CharField(max_length=config.MEETING_POINT_OTHER_MAX_LENGTH,
|
||||
blank=True)
|
||||
meeting_time = models.TimeField(blank=True,
|
||||
null=True)
|
||||
departure_time = models.TimeField(blank=True,
|
||||
null=True)
|
||||
departure_ride = models.CharField(max_length=config.DEPARTURE_RIDE_MAX_LENGTH,
|
||||
blank=True)
|
||||
return_departure_time = models.TimeField(blank=True,
|
||||
null=True)
|
||||
return_arrival_time = models.TimeField(blank=True,
|
||||
null=True)
|
||||
arrival_previous_day = models.BooleanField(default=False)
|
||||
return_time = models.TimeField(blank=True,
|
||||
null=True)
|
||||
|
||||
# AccommodationForm
|
||||
basecamp = models.CharField(max_length=config.BASECAMP_MAX_LENGTH,
|
||||
blank=True)
|
||||
|
||||
@@ -163,6 +156,20 @@ class Event(models.Model):
|
||||
additional_costs = models.CharField(max_length=config.ADDITIONAL_COSTS_MAX_LENGTH,
|
||||
blank=True)
|
||||
|
||||
# TrainingForm
|
||||
course_topic_1 = models.TextField(blank=True)
|
||||
course_topic_2 = models.TextField(blank=True)
|
||||
course_topic_3 = models.TextField(blank=True)
|
||||
course_topic_4 = models.TextField(blank=True)
|
||||
course_topic_5 = models.TextField(blank=True)
|
||||
course_topic_6 = models.TextField(blank=True)
|
||||
course_goal_1 = models.TextField(blank=True)
|
||||
course_goal_2 = models.TextField(blank=True)
|
||||
course_goal_3 = models.TextField(blank=True)
|
||||
course_goal_4 = models.TextField(blank=True)
|
||||
course_goal_5 = models.TextField(blank=True)
|
||||
course_goal_6 = models.TextField(blank=True)
|
||||
|
||||
# SummaryForm
|
||||
planned_publication_date = models.DateField(blank=True,
|
||||
null=True)
|
||||
@@ -333,7 +340,7 @@ class Event(models.Model):
|
||||
year_fmt = ' yy'
|
||||
else:
|
||||
weekday_fmt = 'EEEE, '
|
||||
day_fmt = 'd.'
|
||||
day_fmt = 'dd.'
|
||||
month_fmt = ' MMMM'
|
||||
year_fmt = ' yyyy'
|
||||
|
||||
@@ -396,25 +403,17 @@ class Event(models.Model):
|
||||
'alt_normalized_date': self.get_alt_formated_date(format='normalized'),
|
||||
'alt_normalized_long_date': self.get_alt_formated_date(format='normalized_long'),
|
||||
'alt_normalized_short_date': self.get_alt_formated_date(format='normalized_short'),
|
||||
'course_topic_1': self.course_topic_1,
|
||||
'course_topic_2': self.course_topic_2,
|
||||
'course_topic_3': self.course_topic_3,
|
||||
'course_topic_4': self.course_topic_4,
|
||||
'course_topic_5': self.course_topic_5,
|
||||
'course_topic_6': self.course_topic_6,
|
||||
'course_goal_1': self.course_goal_1,
|
||||
'course_goal_2': self.course_goal_2,
|
||||
'course_goal_3': self.course_goal_3,
|
||||
'course_goal_4': self.course_goal_4,
|
||||
'course_goal_5': self.course_goal_5,
|
||||
'course_goal_6': self.course_goal_6,
|
||||
'country': self.country,
|
||||
'location': self.location,
|
||||
'transport': self.transport,
|
||||
'transport_other': self.transport_other,
|
||||
'meeting_time': self.meeting_time,
|
||||
'meeting_point': self.meeting_point,
|
||||
'meeting_point_other': self.meeting_point_other,
|
||||
'meeting_time': self.meeting_time,
|
||||
'departure_time': self.departure_time,
|
||||
'departure_ride': self.departure_ride,
|
||||
'return_departure_time': self.return_departure_time,
|
||||
'return_arrival_time': self.return_arrival_time,
|
||||
'basecamp': self.basecamp,
|
||||
'accommodation': self.accommodation,
|
||||
'accommodation_other': self.accommodation_other,
|
||||
@@ -441,6 +440,18 @@ class Event(models.Model):
|
||||
'registration_howto': self.registration_howto,
|
||||
'charge': self.charge,
|
||||
'additional_costs': self.additional_costs,
|
||||
'course_topic_1': self.course_topic_1,
|
||||
'course_topic_2': self.course_topic_2,
|
||||
'course_topic_3': self.course_topic_3,
|
||||
'course_topic_4': self.course_topic_4,
|
||||
'course_topic_5': self.course_topic_5,
|
||||
'course_topic_6': self.course_topic_6,
|
||||
'course_goal_1': self.course_goal_1,
|
||||
'course_goal_2': self.course_goal_2,
|
||||
'course_goal_3': self.course_goal_3,
|
||||
'course_goal_4': self.course_goal_4,
|
||||
'course_goal_5': self.course_goal_5,
|
||||
'course_goal_6': self.course_goal_6,
|
||||
'planned_publication_date': self.planned_publication_date,
|
||||
'internal_note': self.internal_note,
|
||||
}
|
||||
|
||||
@@ -48,8 +48,10 @@ Veröffentlichung: {% if planned_publication_date %}{{ planned_publication_date|
|
||||
{% endif %}{% if basecamp %}<strong>{% trans 'Stützpunkt' %}:</strong> {{ basecamp }}<br />
|
||||
{% endif %}{% if accommodation and accommodation != 'NONE' %}<strong>{% trans 'Unterkunft' %}:</strong> {% if accommodation == 'OTHER' %}{{ accommodation_other }}{% else %}{{ event.get_accommodation_display }}{% endif %}<br />
|
||||
{% endif %}{% if meals and meals != 'NONE' %}<strong>{% trans 'Verpflegung' %}:</strong> {% if meals == 'OTHER' %}{{ meals_other }}{% else %}{{ event.get_meals_display }}{% endif %}<br />
|
||||
{% endif %}{% if transport and transport != 'NONE' %}<strong>{% trans 'Anfahrt' %}:</strong> {% if transport == 'OTHER' %}{{ transport_other }}{% else %}{{ event.get_transport_display }}{% endif %}<br />
|
||||
{% endif %}{% if transport and transport != 'NONE' and transport != 'public' %}<strong>{% trans 'Hin- / Rückfahrt' %}:</strong> {% if transport == 'OTHER' %}{{ transport_other }}{% else %}{{ event.get_transport_display }}{% endif %}<br />
|
||||
{% endif %}{% if meeting_point and meeting_point != 'NONE' %}<strong>{% trans 'Treffpunkt' %}:</strong> {% if meeting_time %}{{ meeting_time|time:'G:i'|cut:':00' }} Uhr, {% endif %}{% if meeting_point == 'OTHER' %}{{ meeting_point_other }}{% else %}{{ event.get_meeting_point_display }}{% endif %}<br />
|
||||
{% endif %}{% if transport == 'public' %}{% if departure_time or departure_ride %}<strong>{% trans 'Abfahrt' %}:</strong> {% if departure_time %}{{ departure_time|time:'G:i'|cut:':00' }} Uhr{% endif %}{% if departure_time and departure_ride %}, {% endif %}{% if departure_ride %}{{ departure_ride }}{% endif %}<br />
|
||||
{% endif %}{% endif %}{% if return_departure_time or return_arrival_time %}<strong>{% trans 'Rückfahrt' %}:</strong> {% if return_arrival_time %}{{ return_arrival_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Ankunft in' %} Karlsruhe){% elif return_departure_time %}{{ return_departure_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Abfahrt am Tourenort' %}){% endif %}<br />
|
||||
{% endif %}{% if pre_meeting_1 %}{% if pre_meeting_2 %}<strong>{% trans 'Vortreffen' %} 1:</strong> {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
||||
<strong>{% trans 'Vortreffen' %} 2:</strong> {{ pre_meeting_2|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
||||
{% else %}<strong>{% trans 'Vortreffen' %}:</strong> {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />{% endif %}
|
||||
|
||||
@@ -104,8 +104,8 @@
|
||||
{% endif %}
|
||||
<br />
|
||||
{% endif %}
|
||||
{% if transport and transport != 'NONE' %}
|
||||
<strong>{% trans 'Anfahrt' %}:</strong>
|
||||
{% if transport and transport != 'NONE' and transport != 'public' %}
|
||||
<strong>{% trans 'Hin- / Rückfahrt' %}:</strong>
|
||||
{% if transport == 'OTHER' %}
|
||||
{{ transport_other }}
|
||||
{% else %}
|
||||
@@ -123,6 +123,20 @@
|
||||
{% endif %}
|
||||
<br />
|
||||
{% endif %}
|
||||
{% if transport == 'public' %}
|
||||
{% if departure_time or departure_ride %}
|
||||
<strong>{% trans 'Abfahrt' %}:</strong>
|
||||
{% if departure_time %}{{ departure_time|time:'G:i'|cut:':00' }} Uhr{% endif %}{% if departure_time and departure_ride %}, {% endif %}{%if departure_ride %}{{ departure_ride }}{% endif %}
|
||||
<br />
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if return_departure_time or return_arrival_time %}
|
||||
<strong>{% trans 'Rückfahrt' %}:</strong>
|
||||
{% if return_arrival_time %}{{ return_arrival_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Ankunft in' %} Karlsruhe)
|
||||
{% elif return_departure_time %}{{ return_departure_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Abfahrt am Tourenort' %})
|
||||
{% endif %}
|
||||
<br />
|
||||
{% endif %}
|
||||
{% if pre_meeting_1 %}
|
||||
{% if pre_meeting_2 %}
|
||||
<strong>{% trans 'Vortreffen' %} 1:</strong> {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
|
||||
|
||||
@@ -34,8 +34,10 @@
|
||||
{% endif %}{% if basecamp %}{% trans 'Stützpunkt' %}: {{ basecamp }}
|
||||
{% endif %}{% if accommodation and accommodation != 'NONE' %}{% trans 'Unterkunft' %}: {% if accommodation == 'OTHER' %}{{ accommodation_other }}{% else %}{{ event.get_accommodation_display }}{% endif %}
|
||||
{% endif %}{% if meals and meals != 'NONE' %}{% trans 'Verpflegung' %}: {% if meals == 'OTHER' %}{{ meals_other }}{% else %}{{ event.get_meals_display }}{% endif %}
|
||||
{% endif %}{% if transport and transport != 'NONE' %}{% trans 'Anfahrt' %}: {% if transport == 'OTHER' %}{{ transport_other }}{% else %}{{ event.get_transport_display }}{% endif %}
|
||||
{% endif %}{% if transport and transport != 'NONE' and transport != 'public' %}{% trans 'Hin- / Rückfahrt' %}: {% if transport == 'OTHER' %}{{ transport_other }}{% else %}{{ event.get_transport_display }}{% endif %}
|
||||
{% endif %}{% if meeting_point and meeting_point != 'NONE' %}{% trans 'Treffpunkt' %}: {% if meeting_time %}{{ meeting_time|time:'G:i'|cut:':00' }} Uhr, {% endif %}{% if meeting_point == 'OTHER' %}{{ meeting_point_other }}{% else %}{{ event.get_meeting_point_display }}{% endif %}
|
||||
{% endif %}{% if transport == 'public' %}{% if departure_time or departure_ride %}{% trans 'Abfahrt' %}: {% if departure_time %}{{ departure_time|time:'G:i'|cut:':00' }} Uhr{% endif %}{% if departure_time and departure_ride %}, {% endif %}{% if departure_ride %}{{ departure_ride }}{% endif %}
|
||||
{% endif %}{% endif %}{% if return_departure_time or return_arrival_time %}{% trans 'Rückfahrt' %}: {% if return_arrival_time %}{{ return_arrival_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Ankunft in' %} Karlsruhe){% elif return_departure_time %}{{ return_departure_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Abfahrt am Tourenort' %}){% endif %}
|
||||
{% endif %}{% if pre_meeting_1 %}{% if pre_meeting_2 %}{% trans 'Vortreffen' %} 1: {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}
|
||||
{% trans 'Vortreffen' %} 2: {{ pre_meeting_2|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}{% else %}{% trans 'Vortreffen' %}: {{ pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}{% endif %}
|
||||
{% endif %}{% if min_participants > 0 or max_participants > 0 %}{% trans 'Teilnehmerzahl' %}: {% if min_participants == max_participants %}{{ max_participants }} {% trans 'Teilnehmer' %}{% elif min_participants > 0 and max_participants > 0 %}{{ min_participants }} - {{ max_participants }} {% trans 'Teilnehmer' %}{% elif min_participants > 0 %}min. {{ min_participants }} {% trans 'Teilnehmer' %}{% else %}max. {{ max_participants }} {% trans 'Teilnehmer' %}{% endif %}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{% extends "dav_events/event_create/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block head-additional %}
|
||||
{% include 'dav_events/event_create/includes/select_other.html' %}
|
||||
{% endblock head-additional %}
|
||||
|
||||
{% block form-fields-visible %}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{% bootstrap_field form.basecamp %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.accommodation %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.accommodation_other %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.meals %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.meals_other %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row"> </div>
|
||||
{% endblock form-fields-visible %}
|
||||
@@ -7,14 +7,6 @@
|
||||
{% endblock head-additional %}
|
||||
|
||||
{% block form-fields-visible %}
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.transport %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.transport_other %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.meeting_point %}
|
||||
@@ -28,7 +20,20 @@
|
||||
{% bootstrap_field form.meeting_time %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.return_time %}
|
||||
{% bootstrap_field form.departure_time %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{% bootstrap_field form.departure_ride %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.return_departure_time %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.return_arrival_time %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -36,26 +41,5 @@
|
||||
{% bootstrap_field form.arrival_previous_day %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{% bootstrap_field form.basecamp %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.accommodation %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.accommodation_other %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.meals %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.meals_other %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row"> </div>
|
||||
{% endblock form-fields-visible %}
|
||||
@@ -0,0 +1,32 @@
|
||||
{% extends "dav_events/event_create/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block head-additional %}
|
||||
{% include 'dav_events/event_create/includes/select_other.html' %}
|
||||
{% endblock head-additional %}
|
||||
|
||||
{% block form-fields-visible %}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{% bootstrap_field form.country %}
|
||||
{% bootstrap_field form.terrain %}
|
||||
{% bootstrap_field form.location %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row"> </div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<h3>An- und Abreise - Teil 1</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.transport %}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{% bootstrap_field form.transport_other %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row"> </div>
|
||||
{% endblock form-fields-visible %}
|
||||
Reference in New Issue
Block a user