Example #1
0
    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')