diff --git a/dav_events/forms/events.py b/dav_events/forms/events.py index 0e991c6..0585648 100644 --- a/dav_events/forms/events.py +++ b/dav_events/forms/events.py @@ -648,25 +648,29 @@ class RegistrationForm(EventCreateForm): widget=forms.Textarea(attrs={'rows': 2}), ) + def get_initial_for_field(self, field, field_name): + value = super(RegistrationForm, self).get_initial_for_field(field, field_name) + if field_name == 'registration_howto': + trainer_fullname = u'%s %s' % (self._session_data.get('trainer_firstname'), + self._session_data.get('trainer_familyname')) + value = value % {'name': trainer_fullname, 'emailaddr': self._session_data.get('trainer_email')} + elif field_name in ('min_participants', 'max_participants'): + trainer_2 = bool(self._session_data.get('trainer_2_fullname', False)) + trainer_3 = bool(self._session_data.get('trainer_3_fullname', False)) + matrix_key, matrix_config = self._get_matrix_config(self._session_data) + n_trainer = 1 + if trainer_2: + n_trainer += 1 + if trainer_3: + n_trainer += 1 + value = n_trainer * matrix_config[field_name] + + return value + def _proceed_session_data(self, session_data): super(RegistrationForm, self)._proceed_session_data(session_data) first_day = session_data.get('first_day', None) - trainer_fullname = u'%s %s' % (session_data.get('trainer_firstname'), session_data.get('trainer_familyname')) - trainer_email = session_data.get('trainer_email') - trainer_2_fullname = session_data.get('trainer_2_fullname', None) - trainer_3_fullname = session_data.get('trainer_3_fullname', None) - - matrix_key, matrix_config = self._get_matrix_config(session_data) - - n_trainer = 1 - if trainer_2_fullname: - n_trainer += 1 - if trainer_3_fullname: - n_trainer += 1 - - self.fields['min_participants'].initial = matrix_config['min_participants'] * n_trainer - self.fields['max_participants'].initial = matrix_config['max_participants'] * n_trainer if first_day: new_choices = [] @@ -690,13 +694,6 @@ class RegistrationForm(EventCreateForm): new_choices.append((key, desc)) self.fields['deadline'].choices = new_choices - if self.fields['registration_howto'].initial: - initial = self.fields['registration_howto'].initial % {'name': trainer_fullname, - 'emailaddr': trainer_email} - self.fields['registration_howto'].initial = initial - else: - self.fields['registration_howto'].widget = forms.HiddenInput() - class ChargesForm(EventCreateForm): _form_title = _(u'Kosten') @@ -818,63 +815,59 @@ class ChargesForm(EventCreateForm): class SummaryForm(EventCreateForm): _form_title = _(u'Zusammenfassung') - publish_date = forms.CharField(disabled=True, - initial=_(u'Unverzüglich'), - label=_(u'Voraussichtliche Veröffentlichung'), - ) + planned_publish_date = forms.DateField(required=False, + label=_(u'Voraussichtliche Veröffentlichung'), + widget=forms.HiddenInput()) + planned_publish_issue = forms.CharField(required=False) - def get_initial_for_field(self, field, field_name): - value = super(SummaryForm, self).get_initial_for_field(field, field_name) - if field_name == 'publish_date': - max_participants = self._session_data.get('max_participants', 0) - if max_participants: - deadline = self._session_data.get('deadline', None) - if deadline == 'OTHER': - deadline = self._session_data.get('deadline_other', None) + internal_note = forms.CharField(required=False, + label=_(u'Bearbeitungshinweis'), + help_text=_(u'Hier kannst du einen Hinweis' + u' für Tourenreferenten und Redakteure eingeben.'), + widget=forms.Textarea(attrs={'rows': 5})) + + def _proceed_session_data(self, session_data): + max_participants = self._session_data.get('max_participants', 0) + if max_participants: + deadline = self._session_data.get('deadline', None) + if deadline == 'OTHER': + deadline = self._session_data.get('deadline_other', None) + else: + deadline_field_name = 'deadline_%s' % deadline + if deadline_field_name in self._session_data: + deadline = self._session_data.get(deadline_field_name) else: - deadline_field_name = 'deadline_%s' % deadline - if deadline_field_name in self._session_data: - deadline = self._session_data.get(deadline_field_name) - else: - raise Exception(deadline) + logger.error('SummaryForm._proceed_session_data(): invalid value for deadline.') + deadline = None - if deadline: - publish_deadline = deadline - datetime.timedelta(app_config.settings.publish_before_deadline_days) - else: - first_day = self._session_data.get('first_day') - publish_deadline = first_day - datetime.timedelta(app_config.settings.publish_before_begin_days) + if deadline: + publish_deadline = deadline - datetime.timedelta(app_config.settings.publish_before_deadline_days) + else: + first_day = self._session_data.get('first_day') + publish_deadline = first_day - datetime.timedelta(app_config.settings.publish_before_begin_days) - today = datetime.date.today() + today = datetime.date.today() - break_outer_loop = False - for year in (today.year, today.year + 1): - for issue in app_config.settings.publish_issues: - if not ('issue' in issue and 'release' in issue and 'deadline' in issue): - continue - issue_name = issue['issue'] - issue_release_day = issue['release'][0] - issue_release_month = issue['release'][1] - issue_deadline_day = issue['deadline'][0] - issue_deadline_month = issue['deadline'][1] + break_outer_loop = False + for year in (today.year, today.year + 1): + for issue in app_config.settings.publish_issues: + if not ('issue' in issue and 'release' in issue and 'deadline' in issue): + logger.error('SummaryForm._proceed_session_data(): invalid configured issue.') + continue - issue_release_date = datetime.date(year, issue_release_month, issue_release_day) - if issue_release_date < today: - continue + issue_release = datetime.date(year, issue['release'][1], issue['release'][0]) + if issue_release < today: + continue - issue_deadline_date = datetime.date(year, issue_deadline_month, issue_deadline_day) - if issue_deadline_date > issue_release_date: - issue_deadline_date = datetime.date(year - 1, issue_deadline_month, issue_deadline_day) + issue_deadline = datetime.date(year, issue['deadline'][1], issue['deadline'][0]) + if issue_deadline > issue_release: + issue_deadline = datetime.date(year - 1, issue['deadline'][1], issue['deadline'][0]) - if publish_deadline > issue_release_date and today < issue_deadline_date: - value = u'{issue} / {year} - {date}'.format(issue=issue_name, - year=year, - date=format_date(issue_release_date, - 'EEEE, d. MMMM yyyy', - locale=get_language()[0:2])) - break_outer_loop = True - break - - if break_outer_loop: + if publish_deadline > issue_release and today < issue_deadline: + self.fields['planned_publish_date'].initial = issue_release + self.fields['planned_publish_issue'].initial = u'%s/%s' % (issue['issue'], year) + break_outer_loop = True break - return value + if break_outer_loop: + break diff --git a/dav_events/migrations/0014_auto_20180225_1757.py b/dav_events/migrations/0014_auto_20180225_1757.py new file mode 100644 index 0000000..76dbb89 --- /dev/null +++ b/dav_events/migrations/0014_auto_20180225_1757.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.9 on 2018-02-25 17:57 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dav_events', '0013_auto_20180224_1401'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='internal_note', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='event', + name='planned_publish_date', + field=models.DateField(blank=True, null=True), + ), + migrations.AlterField( + model_name='oneclickaction', + name='command', + field=models.CharField(choices=[(b'EA', b'accept event'), (b'EP', b'report publishing of an event'), (b'EL', b'login and go to event list')], max_length=2), + ), + ] diff --git a/dav_events/models.py b/dav_events/models.py index cc8287a..5eddf4c 100644 --- a/dav_events/models.py +++ b/dav_events/models.py @@ -162,6 +162,11 @@ class Event(models.Model): additional_costs = models.CharField(max_length=config.ADDITIONAL_COSTS_MAX_LENGTH, blank=True) + # SummaryForm + planned_publish_date = models.DateField(blank=True, + null=True) + internal_note = models.TextField(blank=True) + class Meta: verbose_name = _(u'Veranstaltung') verbose_name_plural = _(u'Veranstaltungen') @@ -408,6 +413,8 @@ class Event(models.Model): 'trainer_3_email': self.trainer_3_email, 'trainer_3_phone': self.trainer_3_phone, 'registration_howto': self.registration_howto, + 'planned_publish_date': self.planned_publish_date, + 'internal_note': self.internal_note, } return context diff --git a/dav_events/templates/dav_events/event.html b/dav_events/templates/dav_events/event.html index ba33d1f..e0b085e 100644 --- a/dav_events/templates/dav_events/event.html +++ b/dav_events/templates/dav_events/event.html @@ -2,6 +2,17 @@
{{ form.planned_publish_date.value|date:'l, d. F Y' }} ({{ form.planned_publish_issue.value }})
+ {% else %} +{% trans 'In wenigen Tagen' %}
+ {% endif %} +