def finalize(self, request): parent_id = self.session_store['parent']['form']['parent'] parent = CourseInformationPage.objects.get(pk=parent_id) dates = self.session_store['dates']['form'] title = dates.get('start') if dates.get('end', None): title += '--' + dates.get('end') settings = self.session_store['settings']['form'] # find a unique slug, just in case... suffix = 1 candidate = title while not Page._slug_is_available(candidate, parent): suffix += 1 candidate = "%s-%d" % (title, suffix) instance = Course( start=self.session_store['dates']['form']['start'], end=self.session_store['dates']['form']['end'], title=title, title_de=title, slug=candidate, overrule_parent=True, register_via_website=settings.get('register_via_website', False), share_data_via_website=settings.get('share_data_via_website', False), max_attendees=settings.get('max_attendees', None), ) schedule_publishing = dates.get('go_live_at', None) is not None if schedule_publishing: instance.go_live_at = dt_parse(dates.get('go_live_at', None)) instance.live = False instance = parent.add_child(instance=instance) # update slug to be unique fs = self.session_store['settings']['formsets'] attendee_types = fs.get('attendee_types', []) for at in attendee_types: if not at.get('DELETE'): rel = Course2AttendeeRelation( attendee=at['attendee'].replace('[', '').replace( ']', '').replace("'", ''), price=at.get('price', 0), max_attendees=at.get('max_attendees', None), waitlist=at.get('waitlist', False), course=instance) rel.save() if schedule_publishing: dt = dt_parse(dates.get('go_live_at', None)) rev = instance.save_revision(user=request.user, approved_go_live_at=dt) self.success_message( 'Veranstaltung vom {} angelegt und für Publikation am {} vorgesehen.' .format(title, dt.strftime('%d. %m. %Y'))) else: self.success_message( 'Veranstaltung vom {} angelegt.'.format(title)) return redirect('rai_courses_course_list')