Example #1
0
    def setUp(self):
        self.meta, unused = BadgesEventMeta.get_or_create_dummy()
        LabourEventMeta.get_or_create_dummy()
        ProgrammeEventMeta.get_or_create_dummy()

        self.event = self.meta.event
        self.person, unused = Person.get_or_create_dummy()
Example #2
0
    def handle(*args, **options):
        tz = tzlocal()

        venue, unused = Venue.objects.get_or_create(
            name="Peltolan ammattiopisto",
            defaults=dict(name_inessive="Peltolan ammattiopistolla"),  # XXX not really inessive
        )

        room_order = 0
        for room_name in [
            # u'Auditorio',
            # u'Pääsali',
            # u'E-rakennus, luokat',
            # u'Kawaplay, G-rakennus',
            # u'Elokuvateatteri Tapio',
        ]:
            room_order += 100
            Room.objects.get_or_create(venue=venue, name=room_name, defaults=dict(order=room_order))

        event, unused = Event.objects.get_or_create(
            slug="kawacon2014",
            defaults=dict(
                name="Kawacon 2014",
                name_genitive="Kawacon 2014 -tapahtuman",
                name_illative="Kawacon 2014 -tapahtumaan",
                name_inessive="Kawacon 2014 -tapahtumassa",
                homepage_url="http://kawacon.info",
                organization_name="Kawacon ry",
                organization_url="http://kawacon.info",
                start_time=datetime(2014, 6, 28, 10, 0, tzinfo=tz),
                end_time=datetime(2014, 6, 29, 18, 0, tzinfo=tz),
                venue=venue,
            ),
        )

        admin_group, = ProgrammeEventMeta.get_or_create_groups(event, ["admins"])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=event, defaults=dict(public=False, admin_group=admin_group)
        )

        view, unused = View.objects.get_or_create(event=event, name="Ohjelmakartta")

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=venue)
            view.save()

        for category_name, category_style in [
            (u"Luento", u"anime"),
            (u"Non-stop", u"miitti"),
            (u"Työpaja", u"rope"),
            (u"Muu ohjelma", u"muu"),
            (u"Show", u"cosplay"),
        ]:
            Category.objects.get_or_create(event=event, title=category_name, defaults=dict(style=category_style))

        for start_time, end_time in [
            (datetime(2014, 6, 28, 10, 0, 0, tzinfo=tz), datetime(2014, 6, 28, 18, 0, 0, tzinfo=tz)),
            (datetime(2014, 6, 29, 10, 0, 0, tzinfo=tz), datetime(2014, 6, 29, 16, 0, 0, tzinfo=tz)),
        ]:
            TimeBlock.objects.get_or_create(event=event, start_time=start_time, defaults=dict(end_time=end_time))
Example #3
0
    def setup_programme(self):
        from django.contrib.auth.models import Group
        from labour.models import PersonnelClass, LabourEventMeta
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
        )

        ProgrammeEventMeta.get_or_create_groups(self.event, ['hosts'])
        programme_admin_group = Group.objects.get(name=LabourEventMeta.make_group_name(self.event, 'vastaava'))
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Desuconin ohjelmavastaava <*****@*****.**>',
        ))

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role_priority = 0
        for role_title in [
            'Ohjelmanjärjestäjä',
            'Panelisti',
            'Työpajanpitäjä',
            'Keskustelupiirin vetäjä',
        ]:
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=True,
                    require_contact_info=True,
                    priority=role_priority,
                )
            )
            role_priority += 10
Example #4
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Animeconin ohjelmatiimi <*****@*****.**>',
        ))

        for room_name in [
            'Auditorio',
            'Kabinetti',
            'Alvar',
            'Anton',
            'Elsi',
            'Felix',
            # 'Minna',
        ]:
            Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=self.get_ordering_number()
                )
            )

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title='Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Anime ja manga', 'anime'),
                ('Cosplay', 'cosplay'),
                ('Paja', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Kunniavieras', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Anime ja manga', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    self.event.start_time.replace(hour=10, minute=0, tzinfo=self.tz),
                    self.event.start_time.replace(hour=20, minute=0, tzinfo=self.tz),
                ),
                (
                    self.event.end_time.replace(hour=10, minute=0, tzinfo=self.tz),
                    self.event.end_time,
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(
                        end_time=end_time
                    )
                )

                for hour_start_time in full_hours_between(start_time, end_time)[:-1]:
                    SpecialStartTime.objects.get_or_create(
                        event=self.event,
                        start_time=hour_start_time.replace(minute=30)
                    )

        for view_name, room_names in [
            ('Pääohjelmatilat', [
                'Auditorio',
                'Kabinetti',
                'Alvar',
                'Anton',
                'Elsi',
                'Felix',
                # 'Minna',
            ]),
        ]:
            rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                for room_name in room_names]

            view, created = View.objects.get_or_create(event=self.event, name=view_name)

            if created:
                view.rooms = rooms
                view.save()
Example #5
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        room_order = 0
        for room_name in [
            'Auditorio',
            'Yläkerran aula',
            'Piha',
            'Pokemonhuone',
            'Miittiluokka',
            'Työpajaluokka',
            'Karaokeluokka',
            'Artemisluokka',
        ]:
            room_order += 100
            Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=room_order,
                )
            )

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            admin_group=admin_group,
            schedule_layout='full_width',
            contact_email='Kawacon ohjelma <*****@*****.**>',
        ))

        view, unused = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=self.venue, active=True)
            view.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        for category_name, category_style in [
            ('Puheohjelma', 'color1'),
            ('Viihdeohjelma', 'color2'),
            ('Jatkuva ohjelma', 'color3'),
            ('Mitti', 'color4'),
            ('Muu ohjelma', 'color5'),
            ('Ulko-ohjelma', 'color6'),
            ('Peliohjelma', 'color7'),
            ('Työpaja', 'color4'),
            ('Pokemonohjelma', 'color7'),
            ('Cosplayohjelma', 'color5'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for start_time, end_time in [
            (
                self.event.start_time,
                self.event.start_time.replace(hour=18),
            ),
            (
                self.event.end_time.replace(hour=10),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

            # <Kharnis> Lisäksi, saapiko ohjelmakartan toimimaan 30 min tarkkuudella?
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(start_time, end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole pöytäroolipeli.',
                programme_form_code='events.kawacon2017.forms:ProgrammeOfferForm',
                active_from=datetime(2017, 4, 2, 0, 7, tzinfo=self.tz),
                num_extra_invites=3,
                order=30,
            )
        )
Example #6
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )
        from core.utils import full_hours_between

        for room_name in [
            '207',
            '208',
            '209',
            '205',
            'Iso sali',
        ]:
            Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=self.get_ordering_number(),
                )
            )

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            admin_group=admin_group,
        ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Yukiconin ohjelmavastaava <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        view, unused = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=self.venue, active=True)
            view.save()

        for category_name, category_style in [
            ('Pelit', 'rope'),
            ('Anime/manga', 'anime'),
            ('Cosplay', 'cosplay'),
            ('Muu', 'muu'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for tag_name, tag_style in [
            ('Luento', 'label-default'),
            ('Paneeli', 'label-success'),
            ('Keskustelupiiri', 'label-info'),
            ('Työpaja', 'label-warning'),
            ("Let's Play", 'label-danger'),
            ('Visa/leikki', 'label-primary'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(
                    style=tag_style,
                ),
            )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    self.event.start_time,
                    self.event.start_time.replace(hour=22, tzinfo=self.tz),
                ),
                (
                    self.event.end_time.replace(hour=9, tzinfo=self.tz),
                    self.event.end_time,
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(
                        end_time=end_time
                    )
                )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )
Example #7
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event,
            defaults=dict(
                public=False,
                admin_group=programme_admin_group,
                contact_email='Tracon -ohjelmatiimi <*****@*****.**>',
                schedule_layout='full_width',
            ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        for room_name in [
                # 'Aaria',
                # 'Iso sali',
                # 'Pieni sali',
                # # 'Sopraano', # Not in programme use
                # 'Rondo',
                # 'Studio',
                # 'Sonaatti 1',
                # 'Sonaatti 2',
                # # 'Basso', # No longer exists
                # # 'Opus 1', # No longer exists
                # 'Opus 2',
                # 'Opus 3',
                # 'Opus 4',
                # 'Talvipuutarha',
                # 'Puistolava',
                # 'Pieni ulkolava',
                # 'Puisto - Iso miittiteltta',
                # 'Puisto - Pieni miittiteltta',
                # 'Puisto - Bofferiteltta',
                # 'Muualla ulkona',
                # 'Duetto 2',
                # 'Riffi',
                # 'Maestro',
        ]:
            order = self.get_ordering_number() + 90000  # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue, name=room_name, defaults=dict(order=order))

            room.order = order
            room.save()

        for room_name in [
                # 'Sopraano',
                # 'Basso',
                # 'Opus 1',
        ]:
            room = Room.objects.get(venue=self.venue, name=room_name)
            room.active = False
            room.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(is_default=role_is_default, ))

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               style=style,
                                               defaults=dict(title=title, ))

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma',
                                              event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(description='Kika-kika tirsk', ))

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=10,
                                              minute=0,
                                              tzinfo=self.tz),
                self.event.end_time.replace(hour=1, minute=0, tzinfo=self.tz),
            ),
            (
                self.event.end_time.replace(hour=9, minute=0, tzinfo=self.tz),
                self.event.end_time.replace(hour=18, minute=0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(event=self.event,
                                            start_time=start_time,
                                            defaults=dict(end_time=end_time))

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time.replace(hour=10,
                                                     minute=30,
                                                     tzinfo=self.tz),
        )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Sonaatti 1',
                    'Sonaatti 2',
                    'Puisto - Iso miittiteltta',
                    'Puisto - Pieni miittiteltta',
                    'Duetto 2',
                    'Maestro',
                ]),
            ]:
                rooms = [
                    Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names
                ]

                view, created = View.objects.get_or_create(event=self.event,
                                                           name=view_name)
                view.rooms = rooms
                view.save()

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                programme_form_code='events.tracon2017.forms:RpgForm',
                active_from=datetime(2017, 2, 2, 22, 47, tzinfo=self.tz),
                active_until=None,
                num_extra_invites=0,
                order=10,
            ))

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description=
                'Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole pöytäroolipeli.',
                programme_form_code='programme.forms:ProgrammeOfferForm',
                active_from=datetime(2017, 2, 2, 22, 47, tzinfo=self.tz),
                num_extra_invites=3,
                order=30,
            ))
Example #8
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon Hitpoint -ohjelmatiimi <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            # ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            # ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Larp', 'larp', 'color1'),
                ('Lautapelit', 'lautapelit', 'color2'),
                ('Puheohjelma', 'puheohjelma', 'color3'),
                ('Roolipeli', 'roolipeli', 'color4'),
                ('Freeform', 'freeform', 'color1'),
                ('Korttipelit', 'korttipelit', 'color5'),
                ('Figupelit', 'figupelit', 'color6'),
                ('Muu ohjelma', 'muu-ohjelma', 'color7'),
                ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        title=title,
                        style=style,
                        public=style != 'sisainen',
                    )
                )

        for start_time, end_time in [
            (
                datetime(2019, 11, 23, 10, 0, tzinfo=self.tz),
                datetime(2019, 11, 24, 1, 0, tzinfo=self.tz),
            ),
            (
                datetime(2019, 11, 24, 9, 0, tzinfo=self.tz),
                datetime(2019, 11, 24, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                description='',
                programme_form_code='events.hitpoint2019.forms:RpgForm',
                num_extra_invites=0,
                order=10,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='freeform',
            defaults=dict(
                title='Tarjoa freeform-skenaariota',
                short_description='',
                programme_form_code='events.hitpoint2019.forms:FreeformForm',
                num_extra_invites=0,
                order=20,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole roolipeli tai freeform-skenaario.',
                programme_form_code='programme.forms:ProgrammeOfferForm',
                num_extra_invites=0,
                order=30,
            )
        )

        for time_slot_name in [
            'Lauantaina päivällä',
            'Lauantaina iltapäivällä',
            'Lauantaina illalla',
            'Lauantain ja sunnuntain välisenä yönä',
            'Sunnuntaina aamupäivällä',
            'Sunnuntaina päivällä',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)
Example #9
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )
        from core.utils import full_hours_between

        for room_name in [
            'Suuri sali',
            'Tarvehuone',
            'Tähtitorni',
            'Loitsuluokka',
        ]:
            Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=self.get_ordering_number(),
                )
            )

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            admin_group=admin_group,
        ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Tylyconin ohjelmavastaava <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        view, unused = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=self.venue, active=True)
            view.save()

        for category_name, category_style in [
            ('Puheohjelma', 'color1'),
            ('Keskusteluohjelma', 'color2'),
            ('Työpaja', 'color3'),
            ('Muu ohjelma', 'color4'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for tag_name, tag_style in [
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(
                    style=tag_style,
                ),
            )

        TimeBlock.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
            defaults=dict(
                end_time=self.event.end_time,
            ),
        )
Example #10
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon -ohjelmatiimi <*****@*****.**>',
            schedule_layout='full_width',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                datetime(2018, 9, 7, 16, 0, tzinfo=self.tz),
                datetime(2018, 9, 7, 21, 0, tzinfo=self.tz),
            ),
            (
                datetime(2018, 9, 8, 9, 0, tzinfo=self.tz),
                datetime(2018, 9, 9, 1, 0, tzinfo=self.tz),
            ),
            (
                datetime(2018, 9, 9, 9, 0, tzinfo=self.tz),
                datetime(2018, 9, 9, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Sonaatti 1',
                    'Sonaatti 2',
                    'Duetto 2',
                    'Maestro',
                    'Puisto - Iso miittiteltta',
                    'Puisto - Pieni miittiteltta',
                ]),
            ]:
                for room_name in room_names:
                    Room.objects.get_or_create(event=self.event, name=room_name)

                rooms = [Room.objects.get(name__iexact=room_name, event=self.event)
                    for room_name in room_names]

                view, created = View.objects.get_or_create(event=self.event, name=view_name)
                view.rooms = rooms
                view.save()

        for tag_title, tag_class in [
            ('Suositeltu', 'hilight'),
            ('Musiikki', 'label-info'),
            ('In English', 'label-success'),
            ('K-18', 'label-danger'),
            ('Paikkaliput', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_title,
                defaults=dict(
                    style=tag_class,
                ),
            )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                programme_form_code='events.tracon2018.forms:RpgForm',
                num_extra_invites=0,
                order=10,
            )
        )

        default_form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole pöytäroolipeli.',
                programme_form_code='events.tracon2018.forms:ProgrammeForm',
                num_extra_invites=3,
                order=30,
            )
        )
        if default_form.programme_form_code == 'programme.forms:ProgrammeOfferForm':
            default_form.programme_form_code = 'events.tracon2018.forms:ProgrammeForm'
            default_form.save()
Example #11
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon -ohjelmatiimi <*****@*****.**>',
            schedule_layout='full_width',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for room_name in [
            # 'Aaria',
            # 'Iso sali',
            # 'Pieni sali',
            # # 'Sopraano', # Not in programme use
            # 'Rondo',
            # 'Studio',
            # 'Sonaatti 1',
            # 'Sonaatti 2',
            # # 'Basso', # No longer exists
            # # 'Opus 1', # No longer exists
            # 'Opus 2',
            # 'Opus 3',
            # 'Opus 4',
            # 'Talvipuutarha',
            # 'Puistolava',
            # 'Pieni ulkolava',
            # 'Puisto - Iso miittiteltta',
            # 'Puisto - Pieni miittiteltta',
            # 'Puisto - Bofferiteltta',
            # 'Muualla ulkona',
            # 'Duetto 2',
            # 'Riffi',
            # 'Maestro',
        ]:
            order = self.get_ordering_number() + 90000 # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=order
                )
            )

            room.order = order
            room.save()

        for room_name in [
            # 'Sopraano',
            # 'Basso',
            # 'Opus 1',
        ]:
            room = Room.objects.get(venue=self.venue, name=room_name)
            room.active = False
            room.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=10, minute=0, tzinfo=self.tz),
                self.event.end_time.replace(hour=1, minute=0, tzinfo=self.tz),
            ),
            (
                self.event.end_time.replace(hour=9, minute=0, tzinfo=self.tz),
                self.event.end_time.replace(hour=18, minute=0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time.replace(hour=10, minute=30, tzinfo=self.tz),
        )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Sonaatti 1',
                    'Sonaatti 2',
                    'Puisto - Iso miittiteltta',
                    'Puisto - Pieni miittiteltta',
                    'Duetto 2',
                    'Maestro',
                ]),
            ]:
                rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names]

                view, created = View.objects.get_or_create(event=self.event, name=view_name)
                view.rooms = rooms
                view.save()

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                programme_form_code='events.tracon2017.forms:RpgForm',
                active_from=datetime(2017, 2, 2, 22, 47, tzinfo=self.tz),
                active_until=None,
                num_extra_invites=0,
                order=10,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole pöytäroolipeli.',
                programme_form_code='programme.forms:ProgrammeOfferForm',
                active_from=datetime(2017, 2, 2, 22, 47, tzinfo=self.tz),
                num_extra_invites=3,
                order=30,
            )
        )
Example #12
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )
        from core.utils import full_hours_between

        for room_name in [
                '207',
                '208',
                '209',
                '205',
                'Iso sali',
        ]:
            Room.objects.get_or_create(event=self.event, name=room_name)

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event, defaults=dict(admin_group=admin_group, ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Yukiconin ohjelmavastaava <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(is_default=role_is_default, ))

        view, unused = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(event=self.event)
            view.save()

        for category_name, category_style in [
            ('Pelit', 'rope'),
            ('Anime/manga', 'anime'),
            ('Cosplay', 'cosplay'),
            ('Muu', 'muu'),
        ]:
            Category.objects.get_or_create(event=self.event,
                                           title=category_name,
                                           defaults=dict(
                                               style=category_style, ))

        for tag_name, tag_style in [
            ('Luento', 'label-default'),
            ('Paneeli', 'label-success'),
            ('Keskustelupiiri', 'label-info'),
            ('Työpaja', 'label-warning'),
            ("Let's Play", 'label-danger'),
            ('Visa/leikki', 'label-primary'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(style=tag_style, ),
            )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    self.event.start_time,
                    self.event.start_time.replace(hour=22, tzinfo=self.tz),
                ),
                (
                    self.event.end_time.replace(hour=9, tzinfo=self.tz),
                    self.event.end_time,
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(end_time=end_time))

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(
                    time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30))
Example #13
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event,
            defaults=dict(
                public=False,
                admin_group=programme_admin_group,
                contact_email='Tracon -ohjelmatiimi <*****@*****.**>',
                schedule_layout='full_width',
            ))

        # v48
        programme_event_meta.schedule_layout = 'full_width'
        programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        for room_name in [
                'Aaria',
                'Iso sali',
                'Pieni sali',
                # 'Sopraano', # Not in programme use
                'Rondo',
                'Studio',
                'Sonaatti 1',
                'Sonaatti 2',
                # 'Basso', # No longer exists
                # 'Opus 1', # No longer exists
                'Opus 2',
                'Opus 3',
                'Opus 4',
                'Talvipuutarha',
                'Puistolava',
                'Pieni ulkolava',
                'Puisto - Iso miittiteltta',
                'Puisto - Pieni miittiteltta',
                'Puisto - Bofferiteltta',
                'Muualla ulkona',
                'Duetto 2',
                'Riffi',
                'Maestro',
        ]:
            order = self.get_ordering_number() + 90000  # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue, name=room_name, defaults=dict(order=order))

            room.order = order
            room.save()

        for room_name in [
                # 'Sopraano',
                # 'Basso',
                # 'Opus 1',
        ]:
            room = Room.objects.get(venue=self.venue, name=room_name)
            room.active = False
            room.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(is_default=role_is_default, ))

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               style=style,
                                               defaults=dict(title=title, ))

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma',
                                              event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(description='Kika-kika tirsk', ))

        for start_time, end_time in [
            (
                datetime(2016, 9, 3, 11, 0, 0, tzinfo=self.tz),
                datetime(2016, 9, 4, 1, 0, 0, tzinfo=self.tz),
            ),
            (
                datetime(2016, 9, 4, 9, 0, 0, tzinfo=self.tz),
                datetime(2016, 9, 4, 17, 0, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(event=self.event,
                                            start_time=start_time,
                                            defaults=dict(end_time=end_time))

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2016, 9, 3, 10, 30, 0, tzinfo=self.tz),
        )

        # XXX
        # have_views = False
        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Sonaatti 1',
                    'Sonaatti 2',
                    'Duetto 2',
                    'Maestro',
                ]),
            ]:
                rooms = [
                    Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names
                ]

                view, created = View.objects.get_or_create(event=self.event,
                                                           name=view_name)
                view.rooms = rooms
                view.save()
Example #14
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
            Tag,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event,
            defaults=dict(
                public=False,
                admin_group=programme_admin_group,
                contact_email='Ropecon 2021 -ohjelmatiimi <*****@*****.**>',
                schedule_layout='reasonable',
            ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        if not Room.objects.filter(event=self.event).exists():
            for room_name in [
                    'Halli 3',
                    'Halli 3 Bofferialue',
                    'Halli 1 Myyntialue',
                    'Halli 3 Näyttelyalue',
                    'Halli 3 Korttipelialue',
                    'Halli 3 Figupelialue',
                    'Halli 3 Pukukilpailutiski',
                    'Halli 3 Ohjelmalava',
                    'Halli 3 Puhesali',
                    'Halli 3 Ohjelmasali',
                    'Ylä-Galleria',
                    'Ala-Galleria',
                    'Larp-tiski',
                    'Messuaukio',
                    'Klubiravintola',
                    'Sali 103',
                    'Sali 201',
                    'Sali 202',
                    'Sali 203a',
                    'Sali 203b',
                    'Sali 204',
                    'Sali 205',
                    'Sali 206',
                    'Sali 207',
                    'Sali 211',
                    'Sali 212',
                    'Sali 213',
                    'Sali 214',
                    'Sali 215',
                    'Sali 216',
                    'Sali 216a',
                    'Sali 217',
                    'Sali 218',
                    'Sali 301',
                    'Sali 302',
                    'Sali 303',
                    'Sali 304',
                    'Sali 305',
                    'Sali 306',
                    'Sali 307',
                    'Salin 203 aula',
            ]:
                room, created = Room.objects.get_or_create(
                    event=self.event,
                    name=room_name,
                )

        priority = 0
        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma', 'Näkymätön ohjelmanjärjestäjä', False),
            ('ohjelma', 'Peliohjelmanjärjestäjä', False),
            ('ohjelma', 'Larp-pelinjohtaja', False),
            ('ohjelma', 'Roolipelinjohtaja', False),
            ('ohjelma', 'Ohjelmanjärjestäjä, päivälippu', False),
            ('ohjelma', 'Peliohjelmanjärjestäjä, päivälippu', False),
            ('ohjelma', 'Larp-pelinjohtaja, päivälippu', False),
            ('ohjelma', 'Roolipelinjohtaja, päivälippu', False),
            ('ohjelma', 'Ohjelmanjärjestäjä, työvoimaedut', False),
            ('ohjelma', 'Peliohjelmanjärjestäjä, työvoimaedut', False),
            ('ohjelma', 'Larp-pelinjohtaja, työvoimaedut', False),
            ('ohjelma', 'Roolipelinjohtaja, työvoimaedut', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            role, created = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                    priority=priority,
                ))

            if not created:
                role.priority = priority
                role.save()

            priority += 10

        Role.objects.get_or_create(
            personnel_class=personnel_class,
            title=f'Näkymätön ohjelmanjärjestäjä',
            defaults=dict(
                override_public_title='Ohjelmanjärjestäjä',
                is_default=False,
                is_public=False,
            ))

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Puheohjelma: esitelmä / Presentation', 'pres', 'color1'),
                ('Puheohjelma: paneeli / Panel discussion', 'panel', 'color1'),
                ('Puheohjelma: keskustelu / Discussion group', 'disc',
                 'color1'),
                ('Työpaja: käsityö / Workshop: crafts', 'craft', 'color2'),
                ('Työpaja: figut / Workshop: miniature figurines', 'mini',
                 'color2'),
                ('Työpaja: musiikki / Workshop: music', 'music', 'color2'),
                ('Työpaja: muu / Other workshop', 'workshop', 'color2'),
                ('Tanssiohjelma / Dance programme', 'dance', 'color2'),
                ('Pelitiski: Figupeli / Miniature wargame', 'miniwar',
                 'color3'),
                ('Pelitiski: Korttipeli / Card game', 'card', 'color3'),
                ('Pelitiski: Lautapeli / Board game', 'board', 'color3'),
                ('Pelitiski: Muu / Other', 'exp', 'color3'),
                ('Roolipeli / Pen & Paper RPG', 'rpg', 'color4'),
                ('LARP', 'larp', 'color5'),
                ('Muu ohjelma / None of the above', 'other', 'color6'),
                ('Sisäinen ohjelma', 'internal', 'sisainen'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               slug=slug,
                                               defaults=dict(
                                                   title=title,
                                                   style=style,
                                                   public=style != 'sisainen',
                                               ))

        TimeBlock.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
            defaults=dict(end_time=self.event.end_time, ),
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(
                    time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30))

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Halli 3 Ohjelmalava',
                    'Halli 3 Korttipelialue',
                    'Halli 3 Figupelialue',
                ]),
            ]:
                view, created = View.objects.get_or_create(event=self.event,
                                                           name=view_name)

                if created:
                    rooms = [
                        Room.objects.get(name__iexact=room_name,
                                         event=self.event)
                        for room_name in room_names
                    ]

                    view.rooms = rooms
                    view.save()

        role = Role.objects.get(personnel_class__event=self.event,
                                title='Roolipelinjohtaja')
        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='roolipeli',
            defaults=dict(
                title=
                'Tarjoa pöytäroolipeliä / Call for GMs (tabletop role-playing games)',
                description=resource_string(
                    __name__, "texts/roolipelit.html").decode('UTF-8'),
                programme_form_code='events.ropecon2021.forms:RpgForm',
                num_extra_invites=0,
                order=20,
                role=role,
            ))

        role = Role.objects.get(personnel_class__event=self.event,
                                title='Larp-pelinjohtaja')
        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='larp',
            defaults=dict(
                title='Tarjoa larppia / Call for Larps 2021',
                description=resource_string(
                    __name__, "texts/larpit.html").decode('UTF-8'),
                programme_form_code='events.ropecon2021.forms:LarpForm',
                num_extra_invites=0,
                order=30,
                role=role,
            ))

        role = Role.objects.get(personnel_class__event=self.event,
                                title='Peliohjelmanjärjestäjä')
        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='pelitiski',
            defaults=dict(
                title='Tarjoa peliohjelmaa / Call for Game Programme 2021',
                short_description=
                'Figupelit, korttipelit, lautapelit, Kokemuspiste ym. / Miniature wargames, card games, board games, Experience Point etc.',
                description=resource_string(
                    __name__, "texts/pelitiski.html").decode('UTF-8'),
                programme_form_code='events.ropecon2021.forms:GamingDeskForm',
                num_extra_invites=0,
                order=60,
            ))

        role = Role.objects.get(personnel_class__event=self.event,
                                title='Ohjelmanjärjestäjä')
        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa muuta ohjelmaa / Offer any other program',
                short_description=
                'Puheohjelmat, työpajat, esitykset ym. / Lecture program, workshops, show program etc.',
                description=resource_string(
                    __name__, "texts/muuohjelma.html").decode('UTF-8'),
                programme_form_code='events.ropecon2021.forms:ProgrammeForm',
                num_extra_invites=0,
                order=300,
                role=role,
            ))

        for time_slot_name in [
                'Perjantaina iltapäivällä / Friday afternoon',
                'Perjantaina illalla / Friday evening',
                'Perjantain ja lauantain välisenä yönä / Friday night',
                'Lauantaina aamupäivällä / Saturday morning',
                'Lauantaina päivällä / Saturday noon',
                'Lauantaina iltapäivällä / Saturday afternoon',
                'Lauantaina illalla / Saturday evening',
                'Lauantain ja sunnuntain välisenä yönä / Saturday night',
                'Sunnuntaina aamupäivällä / Sunday morning',
                'Sunnuntaina päivällä / Sunday noon',
                'Kaikki käy / Any time is fine',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)

        for tag_title in [
                'Aloittelijaystävällinen',
                'Demo',
                'Ei sovellu lapsille',
                'Figupelaaminen',
                'In English',
                'Korttipelaaminen',
                'Kunniavieras',
                'Kutsuvieras',
                'Sopii lapsille',
                'Larppaaminen',
                'Lautapelaaminen',
                'Perheohjelma',
                'Pöytäroolipelaaminen',
                'Vain täysi-ikäisille',
                'Kovaääninen',
                'Teema',
                'Kilpailu/Turnaus',
        ]:
            Tag.objects.get_or_create(event=self.event, title=tag_title)
Example #15
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        ProgrammeEventMeta.get_or_create_groups(self.event, ['hosts'])
        programme_admin_group, = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event,
            defaults=dict(
                public=False,
                admin_group=programme_admin_group,
                contact_email='Desuconin ohjelmavastaava <*****@*****.**>',
            ))

        personnel_class = PersonnelClass.objects.get(event=self.event,
                                                     slug='ohjelma')

        role_priority = 0
        for role_title in [
                'Ohjelmanjärjestäjä',
                'Näkymätön ohjelmanjärjestäjä',
                'Panelisti',
                'Työpajanpitäjä',
                'Keskustelupiirin vetäjä',
                'Tuomari',
        ]:
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_title == 'Ohjelmanjärjestäjä',
                    is_public=role_title
                    not in ['Näkymätön ohjelmanjärjestäjä', 'Tuomari'],
                    require_contact_info=True,
                    priority=role_priority,
                ))
            role_priority += 10

        Role.objects.filter(
            personnel_class__event=self.event,
            title='Näkymätön ohjelmanjärjestäjä',
            override_public_title='',
        ).update(override_public_title='Ohjelmanjärjestäjä', )

        for title, slug, style in [
            ('Muu ohjelma', 'other', 'color1'),
            ('Paneeli', 'paneeli', 'color2'),
            ('Luento', 'luento', 'color3'),
            ('Keskustelupiiri', 'keskustelupiiri', 'color4'),
            ('Paja', 'paja', 'color5'),
            ('Pienluento', 'pienluento', 'color6'),
            ('Esitys', 'esit', 'color7'),
            ('Visa', 'visa', 'color7'),
            ('Erikoisohjelma', 'erik', 'color7'),
            ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
        ]:
            Category.objects.get_or_create(event=self.event,
                                           slug=slug,
                                           defaults=dict(
                                               title=title,
                                               style=style,
                                               public=style != 'sisainen',
                                           ))

        form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Ohjelmalomake',
                short_description='',
                programme_form_code='events.frostbite2020.forms:ProgrammeForm',
                num_extra_invites=0,
            ))

        if not TimeBlock.objects.filter(event=self.event).exists():
            saturday = self.event.start_time + timedelta(days=1)
            for start_time, end_time in [
                (
                    self.event.start_time.replace(hour=17,
                                                  minute=0,
                                                  tzinfo=self.tz),
                    saturday.replace(hour=1, minute=0, tzinfo=self.tz),
                ),
                (
                    saturday.replace(hour=9, minute=0, tzinfo=self.tz),
                    self.event.end_time.replace(hour=1,
                                                minute=0,
                                                tzinfo=self.tz),
                ),
                (
                    self.event.end_time.replace(hour=9,
                                                minute=0,
                                                tzinfo=self.tz),
                    self.event.end_time.replace(hour=18,
                                                minute=0,
                                                tzinfo=self.tz),
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(end_time=end_time))

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(
                    time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(
                        minute=30)  # look, no tz
                )

        view, created = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )
        if created:
            view.rooms = [
                Room.objects.get_or_create(
                    event=self.event,
                    name=room_name,
                )[0] for room_name in [
                    'Pääsali',
                    'Kuusi',
                    'Puuseppä',
                    'Koivu',
                    'Honka',
                ]
            ]
            view.save()

        tag_order = 0
        for tag_title, tag_slug, tag_style in [
            ('Cosplaypainotteinen ohjelma', 'cosplay', 'label-danger'),
            ('Mangapainotteinen ohjelma', 'manga', 'label-success'),
            ('Ohjelman tarkoitus on viihdyttää', 'viihde', 'label-primary'),
            ('Ohjelma sisältää juonipaljastuksia', 'spoilers',
             'label-warning'),
            ('Ohjelma keskittyy analysoivampaan lähestymistapaan', 'analyysi',
             'label-default'),
            ('Animepainotteinen ohjelma', 'anime', 'label-info'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                slug=tag_slug,
                defaults=dict(
                    title=tag_title,
                    order=tag_order,
                    style=tag_style,
                ),
            )
            tag_order += 10
Example #16
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon -ohjelmatiimi <*****@*****.**>',
            schedule_layout='full_width',
        ))

        # v48
        programme_event_meta.schedule_layout = 'full_width'
        programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for room_name in [
            'Aaria',
            'Iso sali',
            'Pieni sali',
            # 'Sopraano', # Not in programme use
            'Rondo',
            'Studio',
            'Sonaatti 1',
            'Sonaatti 2',
            # 'Basso', # No longer exists
            # 'Opus 1', # No longer exists
            'Opus 2',
            'Opus 3',
            'Opus 4',
            'Talvipuutarha',
            'Puistolava',
            'Pieni ulkolava',
            'Puisto - Iso miittiteltta',
            'Puisto - Pieni miittiteltta',
            'Puisto - Bofferiteltta',
            'Muualla ulkona',
            'Duetto 2',
            'Riffi',
            'Maestro',
        ]:
            order = self.get_ordering_number() + 90000 # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=order
                )
            )

            room.order = order
            room.save()

        for room_name in [
            # 'Sopraano',
            # 'Basso',
            # 'Opus 1',
        ]:
            room = Room.objects.get(venue=self.venue, name=room_name)
            room.active = False
            room.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                datetime(2016, 9, 3, 11, 0, 0, tzinfo=self.tz),
                datetime(2016, 9, 4, 1 , 0, 0, tzinfo=self.tz),
            ),
            (
                datetime(2016, 9, 4, 9 , 0, 0, tzinfo=self.tz),
                datetime(2016, 9, 4, 17, 0, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2016, 9, 3, 10, 30, 0, tzinfo=self.tz),
        )

        # XXX
        # have_views = False
        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Sonaatti 1',
                    'Sonaatti 2',
                    'Duetto 2',
                    'Maestro',
                ]),
            ]:
                rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names]

                view, created = View.objects.get_or_create(event=self.event, name=view_name)
                view.rooms = rooms
                view.save()
Example #17
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Nekoconin ohjelmatiimi <*****@*****.**>',
        ))

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title='Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Anime ja manga', 'anime'),
                ('Cosplay', 'cosplay'),
                ('Paja', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Kunniavieras', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=10, minute=0),
                self.event.start_time.replace(hour=20, minute=0),
            ),
            (
                self.event.end_time.replace(hour=10, minute=0),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Ohjelmalomake',
                short_description='',
                programme_form_code='events.nekocon2020.forms:ProgrammeForm',
                num_extra_invites=0,
            )
        )
Example #18
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )
        from core.utils import full_hours_between

        for room_name in [
                'Suuri sali',
                'Tarvehuone',
                'Tähtitorni',
                'Loitsuluokka',
        ]:
            Room.objects.get_or_create(venue=self.venue,
                                       name=room_name,
                                       defaults=dict(
                                           order=self.get_ordering_number(), ))

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event, defaults=dict(admin_group=admin_group, ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Tylyconin ohjelmavastaava <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(is_default=role_is_default, ))

        view, unused = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=self.venue, active=True)
            view.save()

        for category_name, category_style in [
            ('Puheohjelma', 'color1'),
            ('Keskusteluohjelma', 'color2'),
            ('Työpaja', 'color3'),
            ('Muu ohjelma', 'color4'),
        ]:
            Category.objects.get_or_create(event=self.event,
                                           title=category_name,
                                           defaults=dict(
                                               style=category_style, ))

        for tag_name, tag_style in []:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(style=tag_style, ),
            )

        TimeBlock.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
            defaults=dict(end_time=self.event.end_time, ),
        )
Example #19
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )
        from core.utils import full_hours_between

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            admin_group=admin_group,
        ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Finnconin ohjelmavastaava <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        for category_name, category_style in [
            ('Luento', 'color1'),
            ('Paneeli', 'color2'),
            ('Muu', 'color3'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for tag_name, tag_style in [
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(
                    style=tag_style,
                ),
            )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    self.event.start_time,
                    self.event.start_time.replace(hour=22, tzinfo=self.tz),
                ),
                (
                    self.event.end_time.replace(hour=9, tzinfo=self.tz),
                    self.event.end_time,
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(
                        end_time=end_time
                    )
                )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        default_form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa ohjelmaa',
                programme_form_code='events.finncon2018.forms:ProgrammeForm',
                num_extra_invites=3,
            ),
        )
Example #20
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon Hitpoint -ohjelmatiimi <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            # ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            # ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Larp', 'larp', 'color1'),
                ('Lautapelit', 'lautapelit', 'color2'),
                ('Puheohjelma', 'puheohjelma', 'color3'),
                ('Roolipeli', 'roolipeli', 'color4'),
                ('Freeform', 'freeform', 'color1'),
                ('Korttipelit', 'korttipelit', 'color5'),
                ('Figupelit', 'figupelit', 'color6'),
                ('Muu ohjelma', 'muu-ohjelma', 'color7'),
                ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        title=title,
                        style=style,
                        public=style != 'sisainen',
                    )
                )

        for start_time, end_time in [
            (
                datetime(2019, 11, 23, 10, 0, tzinfo=self.tz),
                datetime(2019, 11, 24, 1, 0, tzinfo=self.tz),
            ),
            (
                datetime(2019, 11, 24, 9, 0, tzinfo=self.tz),
                datetime(2019, 11, 24, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                description='',
                programme_form_code='events.hitpoint2019.forms:RpgForm',
                num_extra_invites=0,
                order=10,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='freeform',
            defaults=dict(
                title='Tarjoa freeform-skenaariota',
                short_description='',
                programme_form_code='events.hitpoint2019.forms:FreeformForm',
                num_extra_invites=0,
                order=20,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole roolipeli tai freeform-skenaario.',
                programme_form_code='programme.forms:ProgrammeOfferForm',
                num_extra_invites=0,
                order=30,
            )
        )

        for time_slot_name in [
            'Lauantaina päivällä',
            'Lauantaina iltapäivällä',
            'Lauantaina illalla',
            'Lauantain ja sunnuntain välisenä yönä',
            'Sunnuntaina aamupäivällä',
            'Sunnuntaina päivällä',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)
Example #21
0
    def handle(*args, **options):
        if options['test']:
            print 'Setting up concon9 in test mode'
        else:
            print 'Setting up concon9 in production mode'

        tz = tzlocal()

        venue, unused = Venue.objects.get_or_create(
            name=u'Metropolia AMK Hämeentie',
            defaults=dict(
                name_inessive=u'Metropolia AMK:n Hämeentien toimipisteessä'
            )
        )

        room_order = 0
        for room_name in [
            u'Zeus',
            u'Athene',
        ]:
            room_order += 100
            Room.objects.get_or_create(
                venue=venue,
                name=room_name,
                defaults=dict(
                    order=room_order,
                )
            )

        event, unused = Event.objects.get_or_create(slug='concon9', defaults=dict(
            name='Concon 9',
            name_genitive='Concon 9 -seminaarin',
            name_illative='Concon 9 -seminaariin',
            name_inessive='Concon 9 -seminaarissa',
            homepage_url='http://concon.nakkikone.org',
            organization_name='Yliopiston anime ja manga ry',
            organization_url='http://yama.animeunioni.org',
            start_time=datetime(2014, 5, 24, 10, 0, tzinfo=tz),
            end_time=datetime(2014, 5, 24, 18, 0, tzinfo=tz),
            venue=venue,
        ))

        admin_group, unused = ProgrammeEventMeta.get_or_create_group(event=event, suffix='admins')
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=event, defaults=dict(
            public=False,
            admin_group=admin_group,
        ))

        view, unused = View.objects.get_or_create(
            event=event,
            name='Ohjelmakartta',
        )

        view.rooms = Room.objects.filter(venue=venue, public=True)
        view.save()

        for category_name, category_style in [
            (u'Ohjelma', u'anime'),
            (u'Tauko', u'muu'),
        ]:
            Category.objects.get_or_create(
                event=event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for start_time, end_time in [
            (
                event.start_time,
                event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        # half_hour = event.start_time + timedelta(minutes=30)
        # while half_hour < end_time:
        #     SpecialStartTime.objects.create(
        #         event=event,
        #         start_time=half_hour,
        #     )

        #     half_hour += timedelta(minutes=60)
Example #22
0
    def setUp(self):
        self.meta, unused = BadgesEventMeta.get_or_create_dummy()
        ProgrammeEventMeta.get_or_create_dummy()

        self.event = self.meta.event
        self.person, unused = Person.get_or_create_dummy()
Example #23
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Ropecon 2018 -ohjelmatiimi <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        if not Room.objects.filter(event=self.event).exists():
            for room_name in [
                'Halli 3',
                'Halli 3 Bofferialue',
                'Halli 1 Myyntialue',
                'Halli 3 Näyttelyalue',
                'Halli 3 Korttipelialue',
                'Halli 3 Figupelialue',
                'Halli 3 Pukukilpailutiski',
                'Halli 3 Ohjelmalava',
                'Halli 3 Puhesali',
                'Halli 3 Ohjelmasali',
                'Ylä-Galleria',
                'Ala-Galleria',
                'Larp-tiski',
                'Messuaukio',
                'Klubiravintola',
                'Sali 103',
                'Sali 201',
                'Sali 202',
                'Sali 203a',
                'Sali 203b',
                'Sali 204',
                'Sali 205',
                'Sali 206',
                'Sali 207',
                'Sali 211',
                'Sali 212',
                'Sali 213',
                'Sali 214',
                'Sali 215',
                'Sali 216',
                'Sali 216a',
                'Sali 217',
                'Sali 218',
                'Sali 301',
                'Sali 302',
                'Sali 303',
                'Sali 304',
                'Sali 305',
                'Sali 306',
                'Sali 307',
                'Salin 203 aula',
            ]:
                room, created = Room.objects.get_or_create(
                    event=self.event,
                    name=room_name,
                )

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma', 'Pelinjohtaja', False),
            ('ohjelma', 'Pelinjärjestäjä', False),
            ('ohjelma', 'Peliesittelijä', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Larp', 'larp', 'color1'),
                ('Lautapelit', 'lautapeli', 'color2'),
                ('Puheohjelma', 'puheohjelma', 'color3'),
                ('Roolipeli', 'roolipeli', 'color4'),
                ('Korttipelit', 'korttipeli', 'color5'),
                ('Figupelit', 'figupeli', 'color6'),
                ('Kokemuspiste', 'kokemuspiste', 'color8'),
                ('Panel', 'puhe-paneeli', 'color3'),
                ('Workshop', 'puhe-tyopaja', 'color3'),
                ('Dance program', 'puhe-tanssi', 'color3'),
                ('Presentation', 'puhe-esitelma', 'color3'),
                ('Experience point', 'puhe-kp', 'color3'),
                ('Larps', 'puhe-larpit', 'color3'),
                ('Freeform', 'puhe-freeform', 'color3'),
                ('Other program', 'puhe-muu', 'color3'),
                ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        title=title,
                        style=style,
                        public=style != 'sisainen',
                    )
                )

        for start_time, end_time in [
            (
                datetime(2018, 7, 27, 15, 0, tzinfo=self.tz),
                datetime(2018, 7, 29, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2018, 7, 27, 12, 0, tzinfo=self.tz),
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Halli 3 Ohjelmalava',
                    'Halli 3 Korttipelialue',
                    'Halli 3 Figupelialue',
                ]),
            ]:
                view, created = View.objects.get_or_create(event=self.event, name=view_name)

                if created:
                    rooms = [
                        Room.objects.get(name__iexact=room_name, event=self.event)
                        for room_name in room_names
                    ]

                    view.rooms = rooms
                    view.save()

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='roolipeli',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                description='''
Tule pöytäpelinjohtajaksi Ropeconiin! Voit testata kehittämiäsi seikkailuja uusilla pelaajilla ja saada näkökulmia muilta harrastajilta. Pelauttamalla onnistuneita skenaariota pääset jakamaan tietotaitoa ja ideoita muille pelinjohtajille ja pelaajille. Voit myös esitellä uusia pelijärjestelmiä ja -maailmoja tai vain nauttia pelauttamisen riemusta.

Pelinjohtajat saavat Ropeconin viikonloppurannekkeen kahdeksan tunnin pelautuksella tai päivärannekkeen neljän tunnin pelautuksella. Lisäksi pelinjohtajat palkitaan sunnuntaina jaettavalla lootilla, eli ilmaisella roolipelitavaralla. Mitä useamman pelin pidät, sitä korkeammalle kohoat loottiasteikossa!
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:RpgForm',
                num_extra_invites=0,
                order=20,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='larp',
            defaults=dict(
                title='Tarjoa larppia',
                short_description='Larpit eli liveroolipelit',
                description='''
Ropecon etsii innokkaita larpinjärjestäjiä! Nyt on tilaisuutesi tulla mukaan järjestämään huvia ja viihdettä koko kansalle pienen tai isonkin conipelin muodossa. Pelipaikkoja on rajoitetusti, joten kerää ideasi, kimpsusi ja kampsusi ja laita näppäimistö sauhuamaan saman tien. Tarjolla on ikuista kunniaa ja viikonloppurannekkeita. Ekstra-plussaa saat, jos pelisi heijastelee klassikot-teemaa. Larppien käyttöön on suunniteltu saleja 216, 216a, 217 ja 218. Voit tutustua tiloihin etukäteen virtuaaliesittelyn avulla.

Kiinnostaako freeform? Freeform-pelit ovat larpin kaltaisia pelejä, jotka pelataan yhdessä huoneessa vähäisellä proppauksella. Pelit ovat yleensä vahvasti tarinankerronnallisia. Freeform-pelien järjestäjäksi ilmoittaudutaan pöytäroolipelien lomakkeella. Lue lisää pöytäroolipelien kuvauksesta!
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:LarpForm',
                num_extra_invites=0,
                order=30,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='lautapeli',
            defaults=dict(
                title='Tarjoa lautapeliohjelmaa',
                short_description='Lautapelit',
                description='''
Muhiiko mielessäsi hullu tai tuiki tavallinen lautapeleihin liittyvä idea? Kerro se meille! Ropeconissa käsitellään lautapelaamista niin pelisuunnittelutyöpajojen, omituisia teemoja käsittelevien luentojen kuin erikoisten turnausformaattienkin muodossa. Jos vielä epäröit, lautapelivastaava vastaa mielellään kysymyksiisi.

Ohjelman lisäksi haemme työvoimaa lautapelitiskille, joka huolehtii pelien lainaamisesta ja kunnossa pysymisestä. Ilmoittaudu lautapelitiskin työntekijäksi täyttämällä työvoimalomake.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:LautapeliForm',
                num_extra_invites=0,
                order=60,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='korttipeli',
            defaults=dict(
                title='Tarjoa korttipeliturnausta',
                short_description='Korttipeliturnaukset',
                description='''
Ropecon hakee järjestäjiä korttipeliturnauksille ja korttipeliaiheiselle ohjelmalle. Tarvitsemme myös työntekijöitä korttipelitiskille vastaanottamaan turnausilmoittautumisia ja pitämään huolta siitä, että ohjelma etenee suunnitelmien mukaisesti. Kaikkea ei tarvitse tietää etukäteen, sillä neuvoja ja ohjeita työskentelyyn sekä ohjelman suunnitteluun saat korttipelivastaavalta ja kokeneemmilta turnausten järjestäjiltä. Myös korttipelitiskin työntekijät perehdytetään tehtävään.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:KorttipeliForm',
                num_extra_invites=0,
                order=40,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='figupeli',
            defaults=dict(
                title='Tarjoa figupeliturnausta',
                short_description='Figut eli miniatyyripelit',
                description='''
Heilutatko sivellintä kuin säilää? Pyöritätkö noppaa kuin puolijumala? Taipuuko foamboard käsissäsi upeiksi palatseiksi? Haluaisitko jakaa erikoistaitosi conikansan syville riveille?

Figuohjelma hakee puhujia miniatyyriaiheiseen puheohjelmaan, innostuneita keskustelijoita paneelikeskusteluihin, vetäjiä työpajoihin sekä peluuttajia eri pelimuotoihin. Ideoilla – olivat ne sitten viimeisen päälle hiottua timanttia tai vasta aihioita – voit lähestyä figuvastaavaa sähköpostitse.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:FigupeliForm',
                num_extra_invites=0,
                order=50,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='kokemuspiste',
            defaults=dict(
                title='Tarjoa kokemuspisteohjelmaa',
                short_description='Kokemuspiste eli tutustu peleihin',
                description='''
Vuoden klassikot-teeman mukaisesti nyt on oikea hetki kaivaa kaapista se vanha perintökalleutena sukupolvelta toiselle siirtynyt klassikko ja tulla esittelemään sitä koko kansalle!

Kokemuspisteellä kävijä pääsee tutustumaan uusiin peleihin peliesittelijän opastuksella. Haemme esittelijöitä niin vakiintuneisiin peruspeleihin (esim. Settlers of Catan, Magic: the Gathering, Warhammer, Go) kuin vielä tuntemattomiin peleihin. Peliesittelijänä pääset pelauttamaan lempipeliäsi uudelle yleisölle. Myös pelintekijät ovat tervetulleita esittelemään sekä valmiita että melkein valmiita pelejä kiinnostuneelle yleisölle. Peliesittelyiden tulee olla kestoltaan lyhyitä, alle tunnin mittaisia. Tervetulleita ovat niin figut, lautapelit, korttipelit, pöytäropet kuin larpitkin.

Huomaathan, että Kokemuspiste on vain peliesittelyä varten. Tuotteiden myyntiä varten tulee varata osasto Ropeconin myyntialueelta.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:KokemuspisteForm',
                num_extra_invites=0,
                order=70,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='puheohjelma',
            defaults=dict(
                title='Tarjoa puheohjelmaa tai työpajoja',
                short_description='Puheohjelmat eli esitelmät, paneelit, jne',
                description='''
Vuoden 2018 Ropeconiin etsitään kiinnostavia ja mukaansatempaavia esitelmiä, työpajoja sekä paneelikeskusteluja erityisesti teemalla elämä ja yhteisö. Toivomme tänä vuonna lisää englanninkielistä ohjelmaa. Mainitsethan, jos pystyt vetämään ohjelmanumerosi sekä suomeksi että englanniksi.

Puheohjelma voi olla esitelmä, keskustelu, paneeli tai työpaja, ja se voi olla aloittelijaystävällinen tai kokeneille konkareille.

Etsimme taiteisiin, käsitöihin ja muuhun roolipelaamisen ympärillä tapahtuvaan luovaan harrastamiseen liittyvää ohjelmaa. Haemme myös lauta-, figu- ja pöytäroolipeliaiheista puheohjelmaa ja työpajoja.

Puheohjelman pituus on 45 minuuttia tai 105 minuuttia. Jos ilmoitat ohjelmaan työpajan, toivomme että se järjestetään kahdesti tapahtuman aikana.

Tänä vuonna Ropeconissa on myös akateemista ohjelmaa. Akateemiseen ohjelmaan on erillinen haku.

Puheohjelman käytössä ovat osittain samat tilat kuin edellisvuonna. Samoista tiloista ovat käytössä ainakin salit 201 sekä 204 - 207. Uutena puheohjelman käyttöön tulee ainakin sali 103. Voit tutustua tiloihin etukäteen virtuaaliesittelyn avulla.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:PuheohjelmaForm',
                num_extra_invites=0,
                order=10,
            )
        )

        for time_slot_name in [
            'Perjantaina iltapäivällä',
            'Perjantaina illalla',
            'Perjantain ja lauantain välisenä yönä',
            'Lauantaina aamupäivällä',
            'Lauantaina päivällä',
            'Lauantaina iltapäivällä',
            'Lauantaina illalla',
            'Lauantain ja sunnuntain välisenä yönä',
            'Sunnuntaina aamupäivällä',
            'Sunnuntaina päivällä',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)
Example #24
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Mimiconin ohjelmavastaava <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Luento', 'color1'),
                ('Paneeli', 'color2'),
                ('Esitys', 'color3'),
                ('Työpaja', 'color4'),
                ('Muu ohjelma', 'color5'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        for start_time, end_time in [
            (
                self.event.start_time,
                self.event.start_time.replace(hour=18, tzinfo=self.tz),
            ),
            (
                self.event.end_time.replace(hour=9, tzinfo=self.tz),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time.replace(hour=10, minute=30, tzinfo=self.tz),
        )

        for tag_title, tag_class in [
            # ('Suositeltu', 'hilight'),
            # ('Musiikki', 'label-info'),
            # ('In English', 'label-success'),
            # ('K-18', 'label-danger'),
            # ('Paikkaliput', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_title,
                defaults=dict(
                    style=tag_class,
                ),
            )
Example #25
0
    def handle(*args, **options):
        if settings.DEBUG:
            print 'Setting up tracon9 in test mode'
        else:
            print 'Setting up tracon9 in production mode'

        tz = tzlocal()


        #
        # Core
        #

        venue, unused = Venue.objects.get_or_create(name='Tampere-talo')
        content_type = ContentType.objects.get_for_model(SignupExtra)
        event, unused = Event.objects.get_or_create(slug='tracon9', defaults=dict(
            name='Tracon 9',
            name_genitive='Tracon 9 -tapahtuman',
            name_illative='Tracon 9 -tapahtumaan',
            name_inessive='Tracon 9 -tapahtumassa',
            homepage_url='http://2014.tracon.fi',
            organization_name='Tracon ry',
            organization_url='http://ry.tracon.fi',
            start_time=datetime(2014, 9, 13, 10, 0, tzinfo=tz),
            end_time=datetime(2014, 9, 14, 18, 0, tzinfo=tz),
            venue=venue,
        ))

        #
        # Labour
        #

        labour_admin_group, = LabourEventMeta.get_or_create_groups(event, ['admins'])

        if settings.DEBUG:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2014, 9, 12, 8, 0, tzinfo=tz),
            work_ends=datetime(2014, 9, 14, 22, 0, tzinfo=tz),
            admin_group=labour_admin_group,
        )

        if settings.DEBUG:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),

            )
        else:
            labour_event_meta_defaults.update(
                registration_opens=datetime(2014, 3, 1, 0, 0, tzinfo=tz),
                registration_closes=datetime(2014, 8, 1, 0, 0, tzinfo=tz),
            )

        labour_event_meta, unused = LabourEventMeta.objects.get_or_create(event=event, defaults=labour_event_meta_defaults)

        # labour v7
        if not labour_event_meta.contact_email:
            labour_event_meta.contact_email = 'Tracon 9 -työvoimatiimi <*****@*****.**>'
            labour_event_meta.save()

        for name, description in [
            (u'Conitea', u'Tapahtuman järjestelytoimikunnan eli conitean jäsen'),
            (u'Erikoistehtävä', u'Mikäli olet sopinut erikseen työtehtävistä ja/tai sinut on ohjeistettu täyttämään lomake, valitse tämä ja kerro tarkemmin Vapaa alue -kentässä mihin tehtävään ja kenen toimesta sinut on valittu.'),
            (u'Järjestyksenvalvoja', u'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).'),
            (u'Ensiapu', 'Toimit osana tapahtuman omaa ensiapuryhmää. Vuoroja päivisin ja öisin tapahtuman aukioloaikoina. Vaaditaan vähintään voimassa oleva EA1 -kortti ja osalta myös voimassa oleva EA2 -kortti. Kerro Työkokemus -kohdassa osaamisestasi, esim. oletko toiminut EA-tehtävissä tapahtumissa tai oletko sairaanhoitaja/lähihoitaja koulutuksestaltasi.'),
            (u'Kasaus ja purku', u'Kalusteiden siirtelyä & opasteiden kiinnittämistä. Ei vaadi erikoisosaamista. Työvuoroja myös jo pe sekä su conin sulkeuduttua, kerro lisätiedoissa jos voit osallistua näihin.'),
            (u'Logistiikka', u'Autokuskina toimimista ja tavaroiden/ihmisten hakua ja noutamista. B-luokan ajokortti vaaditaan. Työvuoroja myös perjantaille.'),
            (u'Majoitusvalvoja', u'Huolehtivat lattiamajoituspaikkojen pyörittämisestä yöaikaan. Työvuoroja myös molempina öinä.'),
            (u'Myynti', u'Pääsylippujen ja Tracon-oheistuotteiden myyntiä sekä lippujen tarkastamista. Myyjiltä edellytetään täysi-ikäisyyttä, asiakaspalveluhenkeä ja huolellisuutta rahankäsittelyssä. Vuoroja myös perjantaina.'),
            (u'Narikka', u'Narikassa ja isotavara- eli asenarikassa säilytetään tapahtuman aikana kävijöiden omaisuutta. Tehtävä ei vaadi erikoisosaamista.'),
            (u'Ohjelma-avustaja', u'Lautapelien pyörittämistä, karaoken valvontaa, cosplay-kisaajien avustamista. Kerro Vapaa alue -kohdassa tarkemmin, mitä haluaisit tehdä. Huom! Puheohjelmasalien vänkäreiltä toivotaan AV-tekniikan osaamista.'),
            (u'Green room', u'Työvoiman ruokahuolto green roomissa. Hygieniapassi suositeltava.'),
            (u'Taltiointi', u'Taltioinnin keskeisiin tehtäviin kuuluvat mm. saleissa esitettävien ohjelmanumeroiden videointi tapahtumassa ja editointi tapahtuman jälkeen. Lisäksi videoidaan dokumentaarisella otteella myös yleisesti tapahtumaa. Kerro Työkokemus-kentässä aiemmasta videokuvauskokemuksestasi (esim. linkkejä videogallerioihisi) sekä mitä haluaisit taltioinnissa tehdä.'),
            (u'Tekniikka', u'Salitekniikan (AV) ja tietotekniikan (tulostimet, lähiverkot, WLAN) nopeaa MacGyver-henkistä ongelmanratkaisua.'),
            (u'Valokuvaus', u'Valokuvaus tapahtuu pääasiassa kuvaajien omilla järjestelmäkameroilla. Tehtäviä voivat olla studiokuvaus, salikuvaus sekä yleinen valokuvaus. Kerro Työkokemus-kentässä aiemmasta valokuvauskokemuksestasi (esim. linkkejä kuvagallerioihisi) sekä mitä/missä haluaisit tapahtumassa valokuvata.'),
            (u'Yleisvänkäri', u'Sekalaisia tehtäviä laidasta laitaan, jotka eivät vaadi erikoisosaamista. Voit halutessasi kirjata lisätietoihin, mitä osaat ja haluaisit tehdä.'),
            (u'Info', u'Infopisteen henkilökunta vastaa kävijöiden kysymyksiin ja ratkaisee heidän ongelmiaan tapahtuman paikana. Tehtävä edellyttää asiakaspalveluasennetta, tervettä järkeä ja ongelmanratkaisukykyä.'),
        ]:
            JobCategory.objects.get_or_create(
                event=event,
                name=name,
                defaults=dict(
                    description=description,
                    slug=slugify(name),
                )
            )

        labour_event_meta.create_groups()

        for name in [u'Conitea']:
            JobCategory.objects.filter(event=event, name=name).update(public=False)

        jvkortti = Qualification.objects.get(name='JV-kortti')
        jv = JobCategory.objects.get(
            event=event,
            name=u'Järjestyksenvalvoja'
        )
        if not jv.required_qualifications.exists():
            jv.required_qualifications = [jvkortti]
            jv.save()

        b_ajokortti = Qualification.objects.get(slug='b-ajokortti')
        logistiikka = JobCategory.objects.get(
            event=event,
            name=u'Logistiikka',
        )
        if not logistiikka.required_qualifications.exists():
            logistiikka.required_qualifications = [b_ajokortti]
            logistiikka.save()

        period_length = timedelta(hours=8)
        for period_description, period_start in [
            ("Lauantain aamuvuoro (la klo 08-16)", event.start_time.replace(hour=8)),
            ("Lauantain iltavuoro (la klo 16-24)", event.start_time.replace(hour=16)),
            ("Lauantai-sunnuntai-yövuoro (su klo 00-08)", event.end_time.replace(hour=0)),
            ("Sunnuntain aamuvuoro (su klo 08-16)", event.end_time.replace(hour=8)),
            ("Sunnuntain iltavuoro (su klo 16-20)", event.end_time.replace(hour=16)),
        ]:
            WorkPeriod.objects.get_or_create(
                event=event,
                description=period_description,
                defaults=dict(
                    start_time=period_start,
                    end_time=period_start + period_length
                )
            )

        for diet_name in [
            u'Gluteeniton',
            u'Laktoositon',
            u'Maidoton',
            u'Vegaaninen',
            u'Lakto-ovo-vegetaristinen',
        ]:
            SpecialDiet.objects.get_or_create(name=diet_name)

        for night in [
            u'Perjantain ja lauantain välinen yö',
            u'Lauantain ja sunnuntain välinen yö',
        ]:
            Night.objects.get_or_create(name=night)

        AlternativeSignupForm.objects.get_or_create(
            event=event,
            slug=u'conitea',
            defaults=dict(
                title=u'Conitean ilmoittautumislomake',
                signup_form_class_path='events.tracon9.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.tracon9.forms:OrganizerSignupExtraForm',
                active_from=datetime(2014, 7, 7, 12, 0, 0, tzinfo=tz),
                active_until=datetime(2014, 8, 31, 23, 59, 59, tzinfo=tz),
            ),
        )

        for wiki_space, link_title, link_group in [
            ('TERA', 'Työvoimawiki', 'accepted'),
            ('INFO', 'Infowiki', 'info'),
        ]:
            InfoLink.objects.get_or_create(
                event=event,
                title=link_title,
                defaults=dict(
                    url='https://confluence.tracon.fi/display/{wiki_space}'.format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                )
            )


        #
        # Programme
        #

        programme_admin_group, = ProgrammeEventMeta.get_or_create_groups(event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon 9 -ohjelmatiimi <*****@*****.**>',
        ))

        room_order = 0
        for room_name in [
            u'Iso sali',
            u'Pieni sali',
            u'Sopraano',
            u'Rondo',
            u'Studio',
            u'Sonaatti 1',
            u'Sonaatti 2',
            u'Basso',
            u'Opus 1',
            u'Opus 2',
            u'Opus 3',
            u'Opus 4',
            u'Puistolava',
            u'Puisto - Iso miittiteltta',
            u'Puisto - Pieni miittiteltta',
            u'Puisto - Bofferiteltta',
        ]:
            room_order += 100
            Room.objects.get_or_create(
                venue=venue,
                slug=slugify(room_name),
                defaults=dict(
                    name=room_name,
                    order=room_order
                )
            )

        # programme v5
        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = '*****@*****.**'
            programme_event_meta.save()

        role, unused = Role.objects.get_or_create(
            title=u'Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        # programme v8
        role.is_default = True
        role.save()

        for title, style in [
            (u'Animeohjelma', u'anime'),
            (u'Cosplayohjelma', u'cosplay'),
            (u'Miitti', u'miitti'),
            (u'Muu ohjelma', u'muu'),
            (u'Roolipeliohjelma', u'rope'),
        ]:
            Category.objects.get_or_create(
                event=event,
                style=style,
                defaults=dict(
                    title=title,
                )
            )

        if settings.DEBUG:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        # programme v6
        for start_time, end_time in [
            (
                datetime(2014, 9, 13, 11, 0, 0, tzinfo=tz),
                datetime(2014, 9, 14, 1 , 0, 0, tzinfo=tz)
            ),
            (
                datetime(2014, 9, 14, 9 , 0, 0, tzinfo=tz),
                datetime(2014, 9, 14, 17, 0, 0, tzinfo=tz)
            )
        ]:
            TimeBlock.objects.get_or_create(
                event=event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=event,
            start_time=datetime(2014, 9, 13, 10, 30, 0, tzinfo=tz),
        )

        for view_name, room_names in [
            (u'Pääohjelmatilat', [
                u'Iso sali',
                u'Pieni sali',
                u'Studio',
                u'Sonaatti 1',
                u'Sonaatti 2',
                u'Sopraano',
            ]),
            (u'Toissijaiset ohjelmatilat', [
                u'Opus 1',
                u'Puistolava',
                u'Puisto - Iso miittiteltta',
                u'Puisto - Pieni miittiteltta',
            ]),
        ]:
            rooms = [Room.objects.get(name__iexact=room_name, venue=venue)
                for room_name in room_names]

            view, created = View.objects.get_or_create(event=event, name=view_name)

            if created:
                view.rooms = rooms
                view.save()


        #
        # Tickets
        #

        tickets_admin_group, = TicketsEventMeta.get_or_create_groups(event, ['admins'])
        give_all_app_perms_to_group('tickets', tickets_admin_group)

        tickets_event_meta_defaults = dict(
            admin_group=tickets_admin_group,
            due_days=14,
            shipping_and_handling_cents=100,
            reference_number_template='9{:05d}',
            contact_email='Tracon 9 -lipunmyynti <*****@*****.**>',
            plain_contact_email='*****@*****.**',
            ticket_spam_email='*****@*****.**',
            ticket_free_text=u"Tämä on sähköinen lippusi Tracon 9 -tapahtumaan. Sähköinen lippu vaihdetaan rannekkeeseen\n"
                u"lipunvaihtopisteessä saapuessasi tapahtumaan. Voit tulostaa tämän lipun tai näyttää sen\n"
                u"älypuhelimen tai tablettitietokoneen näytöltä. Mikäli kumpikaan näistä ei ole mahdollista, ota ylös\n"
                u"kunkin viivakoodin alla oleva neljästä tai viidestä sanasta koostuva sanakoodi ja ilmoita se\n"
                u"lipunvaihtopisteessä.\n\n"
                u"Tervetuloa Traconiin!"
        )

        if settings.DEBUG:
            t = now()
            tickets_event_meta_defaults.update(
                ticket_sales_starts=t - timedelta(days=60),
                ticket_sales_ends=t + timedelta(days=60),
            )
        else:
            tickets_event_meta_defaults.update(
                ticket_sales_starts=datetime(2014, 3, 1, 0, 0, tzinfo=tz),
                ticket_sales_ends=datetime(2014, 8, 31, 0, 0, tzinfo=tz),
            )

        tickets_meta, unused = TicketsEventMeta.objects.get_or_create(
            event=event,
            defaults=tickets_event_meta_defaults,
        )

        def limit_group(description, limit):
            limit_group, unused = LimitGroup.objects.get_or_create(
                event=event,
                description=description,
                defaults=dict(limit=limit),
            )

            return limit_group

        def ordering():
            ordering.counter += 10
            return ordering.counter
        ordering.counter = 0

        for product_info in [
            dict(
                name=u'Koko viikonlopun lippu (e-lippu)',
                description=u'Voimassa koko viikonlopun ajan la klo 10 - su klo 18. Toimitetaan sähköpostitse PDF-tiedostona. Ei toimituskuluja.',
                limit_groups=[
                    limit_group('Lauantain liput', 5000),
                    limit_group('Sunnuntain liput', 5000),
                ],
                price_cents=1800,
                requires_shipping=False,
                electronic_ticket=True,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Koko viikonlopun lippu (postitse)',
                description=u'Voimassa koko viikonlopun ajan la klo 10 - su klo 18. Toimitetaan kirjeenä kotiisi. Toimituskulut 1,00 €/tilaus.',
                limit_groups=[
                    limit_group('Lauantain liput', 5000),
                    limit_group('Sunnuntain liput', 5000),
                ],
                price_cents=1800,
                requires_shipping=True,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Lauantailippu (e-lippu)',
                description=u'Voimassa koko lauantaipäivän ajan la klo 10 - su klo 08. Toimitetaan sähköpostitse PDF-tiedostona. Ei toimituskuluja.',
                limit_groups=[
                    limit_group('Lauantain liput', 5000),
                ],
                price_cents=1200,
                requires_shipping=False,
                electronic_ticket=True,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Lauantailippu (postitse)',
                description=u'Voimassa koko lauantaipäivän ajan la klo 10 - su klo 08. Toimitetaan kirjeenä kotiisi. Toimituskulut 1,00 €/tilaus.',
                limit_groups=[
                    limit_group('Lauantain liput', 5000),
                ],
                price_cents=1200,
                requires_shipping=True,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Sunnuntailippu (e-lippu)',
                description=u'Voimassa koko sunnuntai ajan su klo 00 - su klo 18. Toimitetaan sähköpostitse PDF-tiedostona. Ei toimituskuluja.',
                limit_groups=[
                    limit_group('Sunnuntain liput', 5000),
                ],
                price_cents=1000,
                requires_shipping=False,
                electronic_ticket=True,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Sunnuntailippu (postitse)',
                description=u'Voimassa koko sunnuntai ajan su klo 00 - su klo 18. Toimitetaan kirjeenä kotiisi. Toimituskulut 1,00 €/tilaus.',
                limit_groups=[
                    limit_group('Sunnuntain liput', 5000),
                ],
                price_cents=1000,
                requires_shipping=True,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Lattiamajoitus 2 yötä pe-su (Aleksanterin koulu)',
                description=u'Lattiamajoituspaikka pe-la ja la-su välisiksi öiksi Aleksanterin koululta. Majoituspaikasta ei tule erillistä lippua, vaan majoitus toimii nimilistaperiaatteella. Majoituspaikoista ei aiheudu toimituskuluja. Saat lisäohjeita majoituksesta sähköpostiisi ennen tapahtumaa.',
                limit_groups=[
                    limit_group('Lattiamajoitus pe-la, Aleksanterin koulu', 80),
                    limit_group('Lattiamajoitus la-su, Aleksanterin koulu', 130),
                ],
                price_cents=2000,
                requires_shipping=False,
                available=True,
                ordering=ordering()
            ),

            dict(
                name=u'Lattiamajoitus 1 yö la-su (Amurin koulu)',
                description=u'Lattiamajoituspaikka lauantain ja sunnuntain väliseksi yöksi Amurin koululta. Majoituspaikasta ei tule erillistä lippua, vaan majoitus toimii nimilistaperiaatteella. Majoituspaikoista ei aiheudu toimituskuluja. Saat lisäohjeita majoituksesta sähköpostiisi ennen tapahtumaa.',
                limit_groups=[
                    limit_group('Lattiamajoitus la-su, Amurin koulu', 250),
                ],
                price_cents=1000,
                requires_shipping=False,
                available=True,
                ordering=ordering()
            ),
        ]:
            name = product_info.pop('name')
            limit_groups = product_info.pop('limit_groups')
            product, unused = Product.objects.get_or_create(event=event, name=name, defaults=product_info)
            if not product.limit_groups.exists():
                product.limit_groups = limit_groups
                product.save()

        for tag_title, tag_class in [
            ('Suositeltu', 'hilight'),
            ('In English', 'label-success'),
            ('K-18', 'label-danger'),
            ('K-16', 'label-warning'),
            ('K-15', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=event,
                title=tag_title,
                defaults=dict(
                    style=tag_class,
                ),
            )



        #
        # Badges
        #
        badge_admin_group, = BadgesEventMeta.get_or_create_groups(event, ['admins'])

        BadgesEventMeta.objects.get_or_create(
            event=event,
            defaults=dict(
                badge_factory_code='tracon9.badges:badge_factory',
                admin_group=badge_admin_group,
            )
        )

        if False:  # Disabled -- where has "Template" gone?
            for template_name in [
                u'Conitea',
                u'Ylivänkäri',
                u'Työvoima',
                u'Ohjelmanjärjestäjä',
                u'Media',
                u'Myyjä',
                u'Vieras',
                u'Guest of Honour',
                u'Viikonloppulippu',
                u'Lauantailippu',
                u'Sunnuntailippu',
            ]:
                Template.objects.get_or_create(
                    event=event,
                    slug=slugify(template_name),
                    defaults=dict(
                        name=template_name
                    ),
                )
Example #26
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Nekoconin ohjelmatiimi <*****@*****.**>',
        ))

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title='Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Anime ja manga', 'anime'),
                ('Cosplay', 'cosplay'),
                ('Paja', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Kunniavieras', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=10, minute=0),
                self.event.start_time.replace(hour=20, minute=0),
            ),
            (
                self.event.end_time.replace(hour=10, minute=0),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )
def create_event_with_programme(context):
    context.meta, unused = ProgrammeEventMeta.get_or_create_dummy()
    context.event = context.meta.event
Example #28
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon Hitpoint -ohjelmatiimi <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for room_name in [
            # 'Aaria',
            # 'Iso sali',
            # 'Pieni sali',
            # # 'Sopraano', # Not in programme use
            # 'Rondo',
            # 'Studio',
            # 'Sonaatti 1',
            # 'Sonaatti 2',
            # # 'Basso', # No longer exists
            # # 'Opus 1', # No longer exists
            # 'Opus 2',
            # 'Opus 3',
            # 'Opus 4',
            # 'Talvipuutarha',
            # 'Puistolava',
            # 'Pieni ulkolava',
            # 'Puisto - Iso miittiteltta',
            # 'Puisto - Pieni miittiteltta',
            # 'Puisto - Bofferiteltta',
            # 'Muualla ulkona',
            # 'Duetto 2',
            # 'Riffi',
            # 'Maestro',
        ]:
            order = self.get_ordering_number() + 90000 # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=order
                )
            )

            room.order = order
            room.save()

        for room_name in [
            # 'Sopraano',
            # 'Basso',
            # 'Opus 1',
        ]:
            room = Room.objects.get(venue=self.venue, name=room_name)
            room.active = False
            room.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            # ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            # ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Larp', 'larp', 'color1'),
                ('Lautapelit', 'lautapelit', 'color2'),
                ('Puheohjelma', 'puheohjelma', 'color3'),
                ('Roolipeli', 'roolipeli', 'color4'),
                ('Freeform', 'freeform', 'color1'),
                ('Korttipelit', 'korttipelit', 'color5'),
                ('Figupelit', 'figupelit', 'color6'),
                ('Muu ohjelma', 'muu-ohjelma', 'color7'),
                ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        title=title,
                        style=style,
                        public=style != 'sisainen',
                    )
                )

        for start_time, end_time in [
            (
                datetime(2017, 3, 4, 11, 0, tzinfo=self.tz),
                datetime(2017, 3, 5, 1, 0, tzinfo=self.tz),
            ),
            (
                datetime(2017, 3, 5, 9, 0, tzinfo=self.tz),
                datetime(2017, 3, 5, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2017, 3, 4, 10, 30, tzinfo=self.tz),
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        # XXX
        have_views = True
        # have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Sonaatti 1',
                    'Sonaatti 2',
                    'Duetto 2',
                    'Maestro',
                ]),
            ]:
                rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names]

                view, created = View.objects.get_or_create(event=self.event, name=view_name)
                view.rooms = rooms
                view.save()

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                description='''
Rooli- ja korttipelitapahtumana itseään mainostava Tracon Hitpoint 2017 on luonnollisesti etsimässä halukkaita pelinjohtajia vetämään pelejään 4.–5. maaliskuuta 2017 pidettävään tapahtumaan Tampereen Tampere-talolla. Tapahtumassa ei ole erityistä teemaa, joten pelitarjonta voi olla mitä tahansa avaruuslänkkäristä transhumanistiseen politiikkakähmäilyyn.

Vedettävä roolipeli voi olla joku suurista ja kuuluisista tai jokin tuntemattomampi, lyhyt pikkupeli tai eeppinen tarina. Mikäli olet pitämässä vähintään neljän (4) tunnin edestä pelejä, olet oikeutettu ilmaiseen sisäänpääsyyn koko tapahtuman ajaksi.
                '''.strip(),
                programme_form_code='events.hitpoint2017.forms:RpgForm',
                active_from=datetime(2016, 11, 13, 15, 47, tzinfo=self.tz),
                active_until=datetime(2017, 1, 31, 23, 59, 59, tzinfo=self.tz),
                num_extra_invites=0,
                order=10,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='freeform',
            defaults=dict(
                title='Tarjoa freeform-skenaariota',
                short_description='Freeformit ovat liveroolipelien kaltaisia pelejä, joissa pelaajat pelaavat koko keholla ja näyttelevät hahmoja.',
                description='''
Freeformit ovat liveroolipelien kaltaisia pelejä, joissa pelaajat pelaavat koko keholla ja näyttelevät hahmoja. Freeform pelataan yhdessä huoneessa vähäisellä rekvisiitalla tai kokonaan ilman rekvisiittaa. Pelit ovat usein vahvasti tarinankerronnallisia, ja juoni voi rakentua ennalta määrätyistä kohtauksista. Pelissä on yleensä mukana 3-8 pelaajaa ja peli kestää 2-4 tuntia. Freeform voi tarkoittaa esimerkiksi jotain seuraavista:

<ul><li>Semi-live</li><li>Chamber Larp</li><li>Mini Larp</li><li>Fastaval-skenaario</li><li>Black Box</li><li>Jeepform</li></ul>

Freeformit täyttävät yleensä yhden tai useamman seuraavista:

<ul><li>Selkeä lähtökohta ja tiukka tarinankerronta</li><li>Emotionaalinen kokemus pelaajille</li><li>Elementtejä, jotka työntävät roolipelien rajoja osallistavan tarinankerronnan välineenä</li></ul>

Pelinjohtajille tarjotaan ilmainen viikonloppulippu peluuttamalla neljän tunnin verran pelejä. Freeform-pelinjohtajien ilmoittautuminen on auki 31.1. asti. Lisätietoja voi kysyä sähköpostitse: <a href="mailto:[email protected]">[email protected]</a>.
                '''.strip(),
                programme_form_code='events.hitpoint2017.forms:FreeformForm',
                active_from=datetime(2016, 11, 13, 15, 47, tzinfo=self.tz),
                active_until=datetime(2017, 1, 31, 23, 59, 59, tzinfo=self.tz),
                num_extra_invites=0,
                order=20,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole roolipeli tai freeform-skenaario.',
                programme_form_code='programme.forms:ProgrammeOfferForm',
                active_from=datetime(2016, 11, 13, 15, 47, tzinfo=self.tz),
                num_extra_invites=0,
                order=30,
            )
        )

        for time_slot_name in [
            'Lauantaina päivällä',
            'Lauantaina iltapäivällä',
            'Lauantaina illalla',
            'Lauantain ja sunnuntain välisenä yönä',
            'Sunnuntaina aamupäivällä',
            'Sunnuntaina päivällä',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)
Example #29
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Traconin ohjelmatiimi <*****@*****.**>',
            schedule_layout='full_width',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

            Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=f'Näkymätön {role_title.lower()}',
                defaults=dict(
                    override_public_title=role_title,
                    is_default=False,
                    is_public=False,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                datetime(2019, 9, 6, 16, 0, tzinfo=self.tz),
                datetime(2019, 9, 6, 21, 0, tzinfo=self.tz),
            ),
            (
                datetime(2019, 9, 7, 9, 0, tzinfo=self.tz),
                datetime(2019, 9, 8, 1, 0, tzinfo=self.tz),
            ),
            (
                datetime(2019, 9, 8, 9, 0, tzinfo=self.tz),
                datetime(2019, 9, 8, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        for tag_title, tag_class in [
            ('Suositeltu', 'hilight'),
            ('Musiikki', 'label-info'),
            ('In English', 'label-success'),
            ('K-18', 'label-danger'),
            ('Paikkaliput', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_title,
                defaults=dict(
                    style=tag_class,
                ),
            )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                programme_form_code='events.tracon2019.forms:RpgForm',
                num_extra_invites=0,
                order=10,
            )
        )

        default_form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description='Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole pöytäroolipeli.',
                programme_form_code='events.tracon2019.forms:ProgrammeForm',
                num_extra_invites=3,
                order=30,
            )
        )
        if default_form.programme_form_code == 'programme.forms:ProgrammeOfferForm':
            default_form.programme_form_code = 'events.tracon2019.forms:ProgrammeForm'
            default_form.save()
Example #30
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon X -ohjelmatiimi <*****@*****.**>',
        ))

        for room_name in [
            'Aaria',
            'Iso sali',
            'Pieni sali',
            # u'Sopraano', # Ei luento-ohjelmakäytössä
            'Rondo',
            'Studio',
            'Sonaatti 1',
            'Sonaatti 2',
            'Basso',
            #u'Opus 1', # No longer in use
            'Opus 2',
            'Opus 3',
            'Opus 4',
            'Talvipuutarha',
            'Puistolava',
            'Pieni ulkolava',
            'Puisto - Iso miittiteltta',
            'Puisto - Pieni miittiteltta',
            'Puisto - Bofferiteltta',
            'Muualla ulkona',
        ]:
            order = self.get_ordering_number() + 80000 # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=order
                )
            )

            room.order = order
            room.save()

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')
        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title='Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                datetime(2015, 9, 5, 11, 0, 0, tzinfo=self.tz),
                datetime(2015, 9, 6, 1 , 0, 0, tzinfo=self.tz),
            ),
            (
                datetime(2015, 9, 6, 9 , 0, 0, tzinfo=self.tz),
                datetime(2015, 9, 6, 17, 0, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2015, 9, 5, 10, 30, 0, tzinfo=self.tz),
        )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Iso sali',
                    'Pieni sali',
                    'Studio',
                    'Sonaatti 1',
                    'Sonaatti 2',
                ]),
                ('Toissijaiset ohjelmatilat', [
                    'Aaria',
                    'Rondo',
                    'Opus 2',
                    'Opus 3',
                    'Opus 4',
                    'Talvipuutarha',
                ]),
                ('Ulko-ohjelma', [
                    'Puistolava',
                    'Puisto - Iso miittiteltta',
                    'Puisto - Pieni miittiteltta',
                    'Muualla ulkona',
                ]),
            ]:
                rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names]

                view, created = View.objects.get_or_create(event=self.event, name=view_name)
                view.rooms = rooms
                view.save()
Example #31
0
    def setup_programme(self):
        from programme.models import Room, ProgrammeEventMeta, Category, TimeBlock, View

        room_order = 0
        for room_name in [
            # u'Auditorio',
            # u'Pääsali',
            # u'E-rakennus, luokat',
            # u'Kawaplay, G-rakennus',
            # u'Elokuvateatteri Tapio',
        ]:
            room_order += 100
            Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=room_order,
                )
            )

        admin_group, = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            admin_group=admin_group,
        ))

        view, unused = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=self.venue)
            view.save()

        for category_name, category_style in [
            (u'Luento', u'anime'),
            (u'Non-stop', u'miitti'),
            (u'Työpaja', u'rope'),
            (u'Muu ohjelma', u'muu'),
            (u'Show', u'cosplay'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for start_time, end_time in [
            (
                self.event.start_time,
                self.event.start_time.replace(hour=18),
            ),
            (
                self.event.end_time.replace(hour=10),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )
Example #32
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event,
            defaults=dict(
                public=False,
                admin_group=programme_admin_group,
                contact_email=
                'Popcult Helsinki -ohjelmatiimi <*****@*****.**>',
                schedule_layout='reasonable',
            ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        personnel_class = PersonnelClass.objects.get(event=self.event,
                                                     slug='ohjelma')

        role_priority = 0
        for role_title in [
                'Ohjelmanjärjestäjä',
                'Näkymätön ohjelmanjärjestäjä',
        ]:
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_title == 'Ohjelmanjärjestäjä',
                    is_public=role_title != 'Näkymätön ohjelmanjärjestäjä',
                    require_contact_info=True,
                    priority=role_priority,
                ))
            role_priority += 10

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Puheohjelma', 'color1'),
                ('Esitysohjelma', 'color2'),
                ('Pajaohjelma', 'color3'),
                ('Miitti', 'color4'),
                ('Muu ohjelma', 'color5'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               style=style,
                                               defaults=dict(title=title, ))

        for start_time, end_time in [
            (
                self.event.start_time,
                self.event.start_time.replace(hour=21,
                                              minute=0,
                                              tzinfo=self.tz),
            ),
            (
                self.event.end_time.replace(hour=9, minute=0, tzinfo=self.tz),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(event=self.event,
                                            start_time=start_time,
                                            defaults=dict(end_time=end_time))

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(
                    time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30))

        for tag_title, tag_class in [
            ('In English', 'label-success'),
            ('Ikärajasuositus K-15', 'label-danger'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_title,
                defaults=dict(style=tag_class, ),
            )
Example #33
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            ProgrammeEventMeta,
            Role,
            SpecialStartTime,
            Tag,
            TimeBlock,
        )
        from core.utils import full_hours_between

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            admin_group=admin_group,
        ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Hypecon <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        for category_name, category_style in [
            ('Pelit', 'rope'),
            ('Anime/manga', 'anime'),
            ('Cosplay', 'cosplay'),
            ('Muu', 'muu'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for tag_name, tag_style in [
            ('Luento', 'label-default'),
            ('Paneeli', 'label-success'),
            ('Keskustelupiiri', 'label-info'),
            ('Työpaja', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(
                    style=tag_style,
                ),
            )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    self.event.start_time,
                    self.event.end_time,
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(
                        end_time=end_time
                    )
                )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 22:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )
Example #34
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Finncon 2016 -ohjelmatiimi <*****@*****.**>',
        ))

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')
        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title='Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Puheohjelma', 'anime'),
                ('Akateeminen ohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Työpaja', 'rope'),
                ('Muu ohjelma', 'muu'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        for start_time, end_time in [
            (
                datetime(2016, 7, 1, 12, 0, 0, tzinfo=self.tz),
                datetime(2016, 7, 1, 18, 0, 0, tzinfo=self.tz),
            ),
            (
                datetime(2016, 7, 2, 10, 0, 0, tzinfo=self.tz),
                datetime(2016, 7, 2, 18, 0, 0, tzinfo=self.tz),
            ),
            (
                datetime(2016, 7, 3, 10, 0, 0, tzinfo=self.tz),
                datetime(2016, 7, 3, 18, 0, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        # SpecialStartTime.objects.get_or_create(
        #     event=self.event,
        #     start_time=datetime(2016, 9, 5, 10, 30, 0, tzinfo=self.tz),
        # )

        for view_name, room_names in [
            ('Pääohjelmatilat', [
                'Juhlasali',
                'Auditorio A1',
                'Luentosali A3',
                'Luentosali A4',
            ]),
            ('Toissijaiset ohjelmatilat', [
                'Auditorio D10a',
                'Auditorio D10b',
                'Auditorio D11',
                'Luentosali A05',
            ]),
        ]:
            rooms = [
                Room.objects.get_or_create(
                    venue=self.venue,
                    name=room_name,
                    defaults=dict(
                        order=self.get_ordering_number(),
                    )
                )[0]

                for room_name in room_names
            ]

            view, created = View.objects.get_or_create(event=self.event, name=view_name)
            if created:
                view.rooms = rooms
                view.save()
Example #35
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
            Tag,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Ropecon 2019 -ohjelmatiimi <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        if not Room.objects.filter(event=self.event).exists():
            for room_name in [
                'Halli 3',
                'Halli 3 Bofferialue',
                'Halli 1 Myyntialue',
                'Halli 3 Näyttelyalue',
                'Halli 3 Korttipelialue',
                'Halli 3 Figupelialue',
                'Halli 3 Pukukilpailutiski',
                'Halli 3 Ohjelmalava',
                'Halli 3 Puhesali',
                'Halli 3 Ohjelmasali',
                'Ylä-Galleria',
                'Ala-Galleria',
                'Larp-tiski',
                'Messuaukio',
                'Klubiravintola',
                'Sali 103',
                'Sali 201',
                'Sali 202',
                'Sali 203a',
                'Sali 203b',
                'Sali 204',
                'Sali 205',
                'Sali 206',
                'Sali 207',
                'Sali 211',
                'Sali 212',
                'Sali 213',
                'Sali 214',
                'Sali 215',
                'Sali 216',
                'Sali 216a',
                'Sali 217',
                'Sali 218',
                'Sali 301',
                'Sali 302',
                'Sali 303',
                'Sali 304',
                'Sali 305',
                'Sali 306',
                'Sali 307',
                'Salin 203 aula',
            ]:
                room, created = Room.objects.get_or_create(
                    event=self.event,
                    name=room_name,
                )

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma', 'Peliohjelmanjärjestäjä', False),
            ('ohjelma', 'Larp-pelinjohtaja', False),
            ('ohjelma', 'Roolipelinjohtaja', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        Role.objects.get_or_create(
            personnel_class=personnel_class,
            title=f'Näkymätön ohjelmanjärjestäjä',
            defaults=dict(
                override_public_title='Ohjelmanjärjestäjä',
                is_default=False,
                is_public=False,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Puheohjelma: esitelmä / Presentation', 'pres', 'color1'),
                ('Puheohjelma: paneeli / Panel discussion', 'panel', 'color1'),
                ('Puheohjelma: keskustelu / Discussion group', 'disc', 'color1'),
                ('Työpaja: käsityö / Crafts', 'craft', 'color2'),
                ('Työpaja: figut / Miniature figurines', 'mini', 'color2'),
                ('Työpaja: musiikki / Music', 'music', 'color2'),
                ('Työpaja: muu / Other workshop', 'workshop', 'color2'),
                ('Pelitiski: Figupeli / Miniature wargame', 'miniwar', 'color3'),
                ('Pelitiski: Korttipeli / Card game', 'card', 'color3'),
                ('Pelitiski: Lautapeli / Board game', 'board', 'color3'),
                ('Pelitiski: Kokemuspiste / Experience Point', 'exp', 'color3'),
                ('Roolipeli / Pen & Paper RPG', 'rpg', 'color4'),
                ('LARP', 'larp', 'color5'),
                ('Muu ohjelma / None of the above', 'other', 'color6'),
                ('Sisäinen ohjelma', 'internal', 'sisainen'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        title=title,
                        style=style,
                        public=style != 'sisainen',
                    )
                )

        TimeBlock.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
            defaults=dict(
                end_time=self.event.end_time,
            ),
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Halli 3 Ohjelmalava',
                    'Halli 3 Korttipelialue',
                    'Halli 3 Figupelialue',
                ]),
            ]:
                view, created = View.objects.get_or_create(event=self.event, name=view_name)

                if created:
                    rooms = [
                        Room.objects.get(name__iexact=room_name, event=self.event)
                        for room_name in room_names
                    ]

                    view.rooms = rooms
                    view.save()

        role = Role.objects.get(personnel_class__event=self.event, title='Roolipelinjohtaja')
        alternative_form, unused = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='roolipeli',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä / Offer an RPG',
                description='''
Tule pöytäpelinjohtajaksi Ropeconiin! Voit testata kehittämiäsi seikkailuja uusilla pelaajilla ja saada näkökulmia muilta harrastajilta. Pelauttamalla onnistuneita skenaariota pääset jakamaan tietotaitoa ja ideoita muille pelinjohtajille ja pelaajille. Voit myös esitellä uusia pelijärjestelmiä ja -maailmoja tai vain nauttia pelauttamisen riemusta.

Pelinjohtajat saavat Ropeconin viikonloppurannekkeen kahdeksan tunnin pelautuksella tai päivärannekkeen neljän tunnin pelautuksella. Lisäksi pelinjohtajat palkitaan sunnuntaina jaettavalla lootilla, eli ilmaisella roolipelitavaralla. Mitä useamman pelin pidät, sitä korkeammalle kohoat loottiasteikossa!
                '''.strip(),
                programme_form_code='events.ropecon2019.forms:RpgForm',
                num_extra_invites=0,
                order=20,
                role=role,
            )
        )

        # v90
        if alternative_form.role is None:
            alternative_form.role = role
            alternative_form.save()

        role = Role.objects.get(personnel_class__event=self.event, title='Larp-pelinjohtaja')
        alternative_form, unused = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='larp',
            defaults=dict(
                title='Tarjoa larppia / Offer a LARP',
                description='''
<strong>Please see this introduction in English <a href="https://drive.google.com/file/d/1EBaRw9Yo25I88dcrzBQ9Lu_QLzIRvv6r/view?usp=sharing" target="_blank">here</a>. The form below will be in English if you have chosen English from the upper right.</strong>

Tervetuloa tarjoamaan Ropeconin kävijöille larp-elämyksiä!

Voit tarjota tällä lomakkeella sekä itse kirjoittamiasi pelejä että valmiita skenaarioita. Toivomme saavamme coniin hienon kattauksen sekä kotimaisia ensipelautuksia että kansainvälisiä klassikoita. Yhdellä oman pelisi pelautuksella (n. 3-4 tuntia) tai kahdella valmiin skenaarion pelautuksella (n. 6-8 tuntia) saat yhden viikonloppulipun Ropeconiin.

Suosittelemme keskittymään pelisuunnittelussa/valinnassa olennaiseen: conikävijöillä ei välttämättä ole mahdollisuuksia tuoda mukanaan tarkasti määriteltyjä proppeja tai opetella kymmenien sivujen taustamateriaaleja. Parhaiten toimivat lyhyehköt pelit, joihin pelaajat voivat saapua mukanaan vain oma mielikuvituksensa ja halu pelata toistensa kanssa. Toivomme myös, että mahdollisimman moni peli olisi mahdollisimman monen kävijän pelattavissa, eivätkä pelaajan tiedot, taidot tai ominaisuudet estä peliin osallistumista.

Kävijät toivoivat viime vuonna etenkin lyhyitä pelejä sekä lapsille sopivia larppeja, joten toivomme ehdotuksia lyhyistä, toistettavissa olevista pelautuksista sekä lapsille suunnitelluista larpeista.

Larpit järjestetään tänäkin vuonna Siiven huoneissa 215-217, joihin voit tutustua <a href="https://messukeskus.visualizer360.com/tilat#20250,20307,0,0" target="_blank">Messukeskuksen sivuilla</a>. Pyrimme rakentamaan yhteen huoneista black boxin (black box -larpeista voit lukea <a href="https://nordiclarp.org/wiki/Black_Box_Larp" target="_blank">Nordic Larp Wikissä</a>) ja varustamaan muut huoneista tunnelmaa luovilla valospoteilla. Kerrothan tilatoiveissa, mikäli suunnitelmissasi on black box -larppi! Valitettavasti emme voi tarjota suurempia lavasteita tai proppeja, joten otathan tämän peliäsi suunnitellessa huomioon.

Jos sinulla kuitenkin sattuu olemaan omasta takaa mahdollisuus esimerkiksi lavastaa jokin tila peliisi sopivaksi tai haluat tarjota koko Ropeconin ajan kestävän, Messukeskuksen alueelle levittyvän immersiivisen kokemuksen, emme missään tapauksessa kiellä tällaisten spektaakkelien suunnittelua. Kerro siinä tapauksessa meille lisää suunnitelmistasi, ja pohditaan yhdessä, kuinka sen voisi toteuttaa!

Kaikkien Ropeconissa pelautettavien larppien tulee soveltaa <a href="https://turvallisempaa.wordpress.com/" target="_blank">häirinnän vastaista materiaalipakettia</a>, eikä niissä hyväksytä ahdistelua ja häirintää (paitsi hahmojen toimintana pelissä, kaikkien osapuolten rajoja kunnioittaen). Tavoitteena on luoda yhdessä turvallinen peliympäristö jokaiselle peliin osallistujalle. Odotamme pelinjohtajien tuntevan materiaalin ja sitoutuvan omalla toiminnallaan edistämään turvallista peliympäristöä ja torjumaan häirintää.

Otathan huomioon myös inklusiivisuuskysymykset, eli pelisi esteettömyyden esimerkiksi liikuntarajoitteisille tai näkövammaisille pelaajille. Toivomme, että mahdollisimman moni kävijä voisi osallistua Ropeconin larppeihin. Ole meihin rohkeasti yhteydessä osoitteeseen <a href="mailto:[email protected]">[email protected]</a>, jos nämä kysymykset askarruttavat.
                '''.strip(),
                programme_form_code='events.ropecon2019.forms:LarpForm',
                num_extra_invites=0,
                order=30,
                role=role,
            )
        )

        # v90
        if alternative_form.role is None:
            alternative_form.role = role
            alternative_form.save()

        role = Role.objects.get(personnel_class__event=self.event, title='Peliohjelmanjärjestäjä')
        alternative_form, unused = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='pelitiski',
            defaults=dict(
                title='Tarjoa pelitiskiohjelmaa / Offer Gaming Desk program',
                short_description='Figupelit, korttipelit, lautapelit, Kokemuspiste ym. / Miniature wargames, card games, board games, Experience Point etc.',
                description='''
<strong>Please see this introduction in English <a href="https://drive.google.com/file/d/1GBlTBsIbsiN05aZQT7h02o6Hba7L3suv/view?usp=sharing" target="_blank">here</a>. The form below will be in English if you have chosen English from the upper right.</strong>

Voit tarjota tällä lomakkeella ohjelmaa pelitiskin eri osa-alueille:

figupelit
korttipelit
lautapelit
Kokemuspisteelle demotuksia
erilaiset peliturnaukset

Saat päivärannekkeen Ropeconiin n. 3-4 tunnin ohjelmalla tai viikonloppurannekkeen n. 6-8 tunnin ohjelmalla.

Suosittelemme keskittymään pelin valinnassa olennaiseen: Kokemuspisteellä parhaiten toimivat lyhyehköt pelit, joihin pelaajat voivat saapua mukanaan vain oma mielikuvituksensa ja halu pelata toistensa kanssa. Toivomme myös, että mahdollisimman moni peli olisi mahdollisimman monen kävijän pelattavissa, eivätkä pelaajan tiedot, taidot tai ominaisuudet estä peliin osallistumista.

Tutustu myös Ropeconin <a href="https://2019.ropecon.fi/kavijalle/hairinta/" target="_blank">häirinnän vastaiseen linjaukseen</a>.

Kävijät toivoivat viime vuonna etenkin lyhyitä pelejä sekä lapsille sopivia pelejä, joten toivomme ehdotuksia lyhyistä, toistettavissa olevista peluutuksista sekä lapsille suunnitelluista demotuksista.

Pelit järjestetään tänäkin vuonna Halli 3:ssa. Alueella tulee olemaan yksi pelitiski ja pelikirjasto. Pelitiskillä pystyy myös ilmoittautumaan turnauksiin ja kisoihin.

Jos sinulla kuitenkin sattuu olemaan omasta takaa mahdollisuus esimerkiksi lavastaa jokin tila peliisi sopivaksi tai haluat tarjota koko Ropeconin ajan kestävän, Messukeskuksen alueelle levittyvän immersiivisen kokemuksen, emme missään tapauksessa kiellä tällaisten spektaakkelien suunnittelua. Kerro siinä tapauksessa meille lisää suunnitelmistasi, ja pohditaan yhdessä, kuinka sen voisi toteuttaa!

Otathan huomioon myös inklusiivisuuskysymykset, eli pelisi esteettömyyden esimerkiksi liikuntarajoitteisille tai näkövammaisille pelaajille. Toivomme, että mahdollisimman moni kävijä voisi osallistua Ropeconin peleihin. Ole meihin rohkeasti yhteydessä osoitteeseen [email protected], jos nämä kysymykset askarruttavat.
                '''.strip(),
                programme_form_code='events.ropecon2019.forms:GamingDeskForm',
                num_extra_invites=0,
                order=60,
            )
        )

        # v90
        if alternative_form.role is None:
            alternative_form.role = role
            alternative_form.save()

        role = Role.objects.get(personnel_class__event=self.event, title='Ohjelmanjärjestäjä')
        alternative_form, unused = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa muuta ohjelmaa / Offer any other program',
                short_description='Puheohjelmat, työpajat, esitykset ym. / Lecture program, workshops, show program etc.',
                description='''
<strong>Please see this introduction in English <a href="https://drive.google.com/file/d/1GBlTBsIbsiN05aZQT7h02o6Hba7L3suv/view?usp=sharing" target="_blank">here</a>. The form below will be in English if you have chosen English from the upper right.</strong>

Tervetuloa tarjoamaan ohjelmaa Ropecon-kävijöille!

Tällä lomakkeella voit tarjota kaikkea ei-pelillistä ohjelmaa: puheohjelmaa, työpajoja tai muuta ohjelmaa, joka ei sovi pelien kategorioihin.

Vuoden 2019 Ropeconiin etsitään kiinnostavia ja mukaansatempaavia esitelmiä, työpajoja sekä paneelikeskusteluja erityisesti teemalla mytologia. Toivomme lisää englanninkielistä ohjelmaa, joten mainitsethan, jos pystyt vetämään ohjelmanumerosi sekä suomeksi että englanniksi. Toivomme myös lapsille ja perheille soveltuvaa ohjelmaa.

Etsimme taiteisiin, käsitöihin ja muuhun roolipelaamisen ympärillä tapahtuvaan luovaan harrastamiseen liittyvää ohjelmaa. Haemme myös lauta-, figu- ja pöytäroolipeliaiheista puheohjelmaa ja työpajoja.

Puheohjelman pituus on 45 minuuttia tai 105 minuuttia; työpaja voi olla pidempikin, 165 minuuttia. Jos ilmoitat ohjelmaan työpajan, toivomme että se järjestetään kahdesti tapahtuman aikana.

Tällä lomakkeella voi ilmoittaa myös muuta ohjelmaa, kuten taistelunäytöksen tai tanssiesityksen.

Kaiken ohjelman on noudatettava <a href="https://2019.ropecon.fi/kavijalle/hairinta/" target="_blank">Ropeconin häirinnänvastaista linjausta</a>.

Ropeconissa on myös akateeminen seminaari. Akateemiseen seminaariin on erillinen haku.
                '''.strip(),
                programme_form_code='events.ropecon2019.forms:ProgrammeForm',
                num_extra_invites=0,
                order=300,
                role=role,
            )
        )

        # v90
        if alternative_form.role is None:
            alternative_form.role = role
            alternative_form.save()

        for time_slot_name in [
            'Perjantaina iltapäivällä / Friday afternoon',
            'Perjantaina illalla / Friday evening',
            'Perjantain ja lauantain välisenä yönä / Friday night',
            'Lauantaina aamupäivällä / Saturday morning',
            'Lauantaina päivällä / Saturday noon',
            'Lauantaina iltapäivällä / Saturday afternoon',
            'Lauantaina illalla / Saturday evening',
            'Lauantain ja sunnuntain välisenä yönä / Saturday night',
            'Sunnuntaina aamupäivällä / Sunday morning',
            'Sunnuntaina päivällä / Sunday noon',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)

        for tag_title in [
            'Aloittelijaystävällinen',
            'Demo',
            'Ei sovellu lapsille',
            'Figupelaaminen',
            'In English',
            'Korttipelaaminen',
            'Kunniavieras',
            'Kutsuvieras',
            'Sopii lapsille',
            'Larppaaminen',
            'Lautapelaaminen',
            'Perheohjelma',
            'Pöytäroolipelaaminen',
            'Vain täysi-ikäisille',
            'Kovaääninen',
            'Teema',
        ]:
            Tag.objects.get_or_create(event=self.event, title=tag_title)
Example #36
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )
        from ...models import TimeSlot

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Ropecon 2018 -ohjelmatiimi <*****@*****.**>',
            schedule_layout='reasonable',
        ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now() - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now() + timedelta(days=60)
            programme_event_meta.save()

        if not Room.objects.filter(event=self.event).exists():
            for room_name in [
                'Halli 3',
                'Halli 3 Bofferialue',
                'Halli 1 Myyntialue',
                'Halli 3 Näyttelyalue',
                'Halli 3 Korttipelialue',
                'Halli 3 Figupelialue',
                'Halli 3 Pukukilpailutiski',
                'Halli 3 Ohjelmalava',
                'Halli 3 Puhesali',
                'Halli 3 Ohjelmasali',
                'Ylä-Galleria',
                'Ala-Galleria',
                'Larp-tiski',
                'Messuaukio',
                'Klubiravintola',
                'Sali 103',
                'Sali 201',
                'Sali 202',
                'Sali 203a',
                'Sali 203b',
                'Sali 204',
                'Sali 205',
                'Sali 206',
                'Sali 207',
                'Sali 211',
                'Sali 212',
                'Sali 213',
                'Sali 214',
                'Sali 215',
                'Sali 216',
                'Sali 216a',
                'Sali 217',
                'Sali 218',
                'Sali 301',
                'Sali 302',
                'Sali 303',
                'Sali 304',
                'Sali 305',
                'Sali 306',
                'Sali 307',
                'Salin 203 aula',
            ]:
                room, created = Room.objects.get_or_create(
                    event=self.event,
                    name=room_name,
                )

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma', 'Pelinjohtaja', False),
            ('ohjelma', 'Pelinjärjestäjä', False),
            ('ohjelma', 'Peliesittelijä', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event, slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=role_is_default,
                )
            )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, slug, style in [
                ('Larp', 'larp', 'color1'),
                ('Lautapelit', 'lautapeli', 'color2'),
                ('Puheohjelma', 'puheohjelma', 'color3'),
                ('Roolipeli', 'roolipeli', 'color4'),
                ('Korttipelit', 'korttipeli', 'color5'),
                ('Figupelit', 'figupeli', 'color6'),
                ('Kokemuspiste', 'kokemuspiste', 'color8'),
                ('Panel', 'puhe-paneeli', 'color3'),
                ('Workshop', 'puhe-tyopaja', 'color3'),
                ('Dance program', 'puhe-tanssi', 'color3'),
                ('Presentation', 'puhe-esitelma', 'color3'),
                ('Experience point', 'puhe-kp', 'color3'),
                ('Larps', 'puhe-larpit', 'color3'),
                ('Freeform', 'puhe-freeform', 'color3'),
                ('Other program', 'puhe-muu', 'color3'),
                ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        title=title,
                        style=style,
                        public=style != 'sisainen',
                    )
                )

        for start_time, end_time in [
            (
                datetime(2018, 7, 27, 15, 0, tzinfo=self.tz),
                datetime(2018, 7, 29, 18, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2018, 7, 27, 12, 0, tzinfo=self.tz),
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                ('Pääohjelmatilat', [
                    'Halli 3 Ohjelmalava',
                    'Halli 3 Korttipelialue',
                    'Halli 3 Figupelialue',
                ]),
            ]:
                view, created = View.objects.get_or_create(event=self.event, name=view_name)

                if created:
                    rooms = [
                        Room.objects.get(name__iexact=room_name, event=self.event)
                        for room_name in room_names
                    ]

                    view.rooms = rooms
                    view.save()

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='roolipeli',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                description='''
Tule pöytäpelinjohtajaksi Ropeconiin! Voit testata kehittämiäsi seikkailuja uusilla pelaajilla ja saada näkökulmia muilta harrastajilta. Pelauttamalla onnistuneita skenaariota pääset jakamaan tietotaitoa ja ideoita muille pelinjohtajille ja pelaajille. Voit myös esitellä uusia pelijärjestelmiä ja -maailmoja tai vain nauttia pelauttamisen riemusta.

Pelinjohtajat saavat Ropeconin viikonloppurannekkeen kahdeksan tunnin pelautuksella tai päivärannekkeen neljän tunnin pelautuksella. Lisäksi pelinjohtajat palkitaan sunnuntaina jaettavalla lootilla, eli ilmaisella roolipelitavaralla. Mitä useamman pelin pidät, sitä korkeammalle kohoat loottiasteikossa!
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:RpgForm',
                num_extra_invites=0,
                order=20,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='larp',
            defaults=dict(
                title='Tarjoa larppia',
                short_description='Larpit eli liveroolipelit',
                description='''
Ropecon etsii innokkaita larpinjärjestäjiä! Nyt on tilaisuutesi tulla mukaan järjestämään huvia ja viihdettä koko kansalle pienen tai isonkin conipelin muodossa. Pelipaikkoja on rajoitetusti, joten kerää ideasi, kimpsusi ja kampsusi ja laita näppäimistö sauhuamaan saman tien. Tarjolla on ikuista kunniaa ja viikonloppurannekkeita. Ekstra-plussaa saat, jos pelisi heijastelee klassikot-teemaa. Larppien käyttöön on suunniteltu saleja 216, 216a, 217 ja 218. Voit tutustua tiloihin etukäteen virtuaaliesittelyn avulla.

Kiinnostaako freeform? Freeform-pelit ovat larpin kaltaisia pelejä, jotka pelataan yhdessä huoneessa vähäisellä proppauksella. Pelit ovat yleensä vahvasti tarinankerronnallisia. Freeform-pelien järjestäjäksi ilmoittaudutaan pöytäroolipelien lomakkeella. Lue lisää pöytäroolipelien kuvauksesta!
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:LarpForm',
                num_extra_invites=0,
                order=30,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='lautapeli',
            defaults=dict(
                title='Tarjoa lautapeliohjelmaa',
                short_description='Lautapelit',
                description='''
Muhiiko mielessäsi hullu tai tuiki tavallinen lautapeleihin liittyvä idea? Kerro se meille! Ropeconissa käsitellään lautapelaamista niin pelisuunnittelutyöpajojen, omituisia teemoja käsittelevien luentojen kuin erikoisten turnausformaattienkin muodossa. Jos vielä epäröit, lautapelivastaava vastaa mielellään kysymyksiisi.

Ohjelman lisäksi haemme työvoimaa lautapelitiskille, joka huolehtii pelien lainaamisesta ja kunnossa pysymisestä. Ilmoittaudu lautapelitiskin työntekijäksi täyttämällä työvoimalomake.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:LautapeliForm',
                num_extra_invites=0,
                order=60,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='korttipeli',
            defaults=dict(
                title='Tarjoa korttipeliturnausta',
                short_description='Korttipeliturnaukset',
                description='''
Ropecon hakee järjestäjiä korttipeliturnauksille ja korttipeliaiheiselle ohjelmalle. Tarvitsemme myös työntekijöitä korttipelitiskille vastaanottamaan turnausilmoittautumisia ja pitämään huolta siitä, että ohjelma etenee suunnitelmien mukaisesti. Kaikkea ei tarvitse tietää etukäteen, sillä neuvoja ja ohjeita työskentelyyn sekä ohjelman suunnitteluun saat korttipelivastaavalta ja kokeneemmilta turnausten järjestäjiltä. Myös korttipelitiskin työntekijät perehdytetään tehtävään.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:KorttipeliForm',
                num_extra_invites=0,
                order=40,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='figupeli',
            defaults=dict(
                title='Tarjoa figupeliturnausta',
                short_description='Figut eli miniatyyripelit',
                description='''
Heilutatko sivellintä kuin säilää? Pyöritätkö noppaa kuin puolijumala? Taipuuko foamboard käsissäsi upeiksi palatseiksi? Haluaisitko jakaa erikoistaitosi conikansan syville riveille?

Figuohjelma hakee puhujia miniatyyriaiheiseen puheohjelmaan, innostuneita keskustelijoita paneelikeskusteluihin, vetäjiä työpajoihin sekä peluuttajia eri pelimuotoihin. Ideoilla – olivat ne sitten viimeisen päälle hiottua timanttia tai vasta aihioita – voit lähestyä figuvastaavaa sähköpostitse.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:FigupeliForm',
                num_extra_invites=0,
                order=50,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='kokemuspiste',
            defaults=dict(
                title='Tarjoa kokemuspisteohjelmaa',
                short_description='Kokemuspiste eli tutustu peleihin',
                description='''
Vuoden klassikot-teeman mukaisesti nyt on oikea hetki kaivaa kaapista se vanha perintökalleutena sukupolvelta toiselle siirtynyt klassikko ja tulla esittelemään sitä koko kansalle!

Kokemuspisteellä kävijä pääsee tutustumaan uusiin peleihin peliesittelijän opastuksella. Haemme esittelijöitä niin vakiintuneisiin peruspeleihin (esim. Settlers of Catan, Magic: the Gathering, Warhammer, Go) kuin vielä tuntemattomiin peleihin. Peliesittelijänä pääset pelauttamaan lempipeliäsi uudelle yleisölle. Myös pelintekijät ovat tervetulleita esittelemään sekä valmiita että melkein valmiita pelejä kiinnostuneelle yleisölle. Peliesittelyiden tulee olla kestoltaan lyhyitä, alle tunnin mittaisia. Tervetulleita ovat niin figut, lautapelit, korttipelit, pöytäropet kuin larpitkin.

Huomaathan, että Kokemuspiste on vain peliesittelyä varten. Tuotteiden myyntiä varten tulee varata osasto Ropeconin myyntialueelta.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:KokemuspisteForm',
                num_extra_invites=0,
                order=70,
            )
        )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='puheohjelma',
            defaults=dict(
                title='Tarjoa puheohjelmaa tai työpajoja',
                short_description='Puheohjelmat eli esitelmät, paneelit, jne',
                description='''
Vuoden 2018 Ropeconiin etsitään kiinnostavia ja mukaansatempaavia esitelmiä, työpajoja sekä paneelikeskusteluja erityisesti teemalla elämä ja yhteisö. Toivomme tänä vuonna lisää englanninkielistä ohjelmaa. Mainitsethan, jos pystyt vetämään ohjelmanumerosi sekä suomeksi että englanniksi.

Puheohjelma voi olla esitelmä, keskustelu, paneeli tai työpaja, ja se voi olla aloittelijaystävällinen tai kokeneille konkareille.

Etsimme taiteisiin, käsitöihin ja muuhun roolipelaamisen ympärillä tapahtuvaan luovaan harrastamiseen liittyvää ohjelmaa. Haemme myös lauta-, figu- ja pöytäroolipeliaiheista puheohjelmaa ja työpajoja.

Puheohjelman pituus on 45 minuuttia tai 105 minuuttia. Jos ilmoitat ohjelmaan työpajan, toivomme että se järjestetään kahdesti tapahtuman aikana.

Tänä vuonna Ropeconissa on myös akateemista ohjelmaa. Akateemiseen ohjelmaan on erillinen haku.

Puheohjelman käytössä ovat osittain samat tilat kuin edellisvuonna. Samoista tiloista ovat käytössä ainakin salit 201 sekä 204 - 207. Uutena puheohjelman käyttöön tulee ainakin sali 103. Voit tutustua tiloihin etukäteen virtuaaliesittelyn avulla.
                '''.strip(),
                programme_form_code='events.ropecon2018.forms:PuheohjelmaForm',
                num_extra_invites=0,
                order=10,
            )
        )

        for time_slot_name in [
            'Perjantaina iltapäivällä',
            'Perjantaina illalla',
            'Perjantain ja lauantain välisenä yönä',
            'Lauantaina aamupäivällä',
            'Lauantaina päivällä',
            'Lauantaina iltapäivällä',
            'Lauantaina illalla',
            'Lauantain ja sunnuntain välisenä yönä',
            'Sunnuntaina aamupäivällä',
            'Sunnuntaina päivällä',
        ]:
            TimeSlot.objects.get_or_create(name=time_slot_name)
Example #37
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        ProgrammeEventMeta.get_or_create_groups(self.event, ['hosts'])
        programme_admin_group, = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Desuconin ohjelmavastaava <*****@*****.**>',
        ))

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role_priority = 0
        for role_title in [
            'Ohjelmanjärjestäjä',
            'Panelisti',
            'Työpajanpitäjä',
            'Keskustelupiirin vetäjä',
        ]:
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(
                    is_default=True,
                    require_contact_info=True,
                    priority=role_priority,
                )
            )
            role_priority += 10

        for title, slug, style in [
            ('Muu ohjelma', 'other', 'color1'),
            ('Paneeli', 'paneeli', 'color2'),
            ('Luento', 'luento', 'color3'),
            ('Keskustelupiiri', 'keskustelupiiri', 'color4'),
            ('Paja', 'paja', 'color5'),
            ('Pienluento', 'pienluento', 'color6'),
            ('Esitys', 'esit', 'color7'),
            ('Visa', 'visa', 'color7'),
            ('Erikoisohjelma', 'erik', 'color7'),
            ('Sisäinen ohjelma', 'sisainen-ohjelma', 'sisainen'),
        ]:
            Category.objects.get_or_create(
                event=self.event,
                slug=slug,
                defaults=dict(
                    title=title,
                    style=style,
                    public=style != 'sisainen',
                )
            )

        form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Ohjelmalomake',
                short_description='',
                programme_form_code='events.frostbite2018.forms:ProgrammeForm',
                num_extra_invites=0,
            )
        )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    datetime(2018, 1, 26, 17, 0, 0, tzinfo=self.tz),
                    datetime(2018, 1, 27, 1, 0, 0, tzinfo=self.tz),
                ),
                (
                    datetime(2018, 1, 27, 9, 0, 0, tzinfo=self.tz),
                    datetime(2018, 1, 28, 1, 0, 0, tzinfo=self.tz),
                ),
                (
                    datetime(2018, 1, 28, 9, 0, 0, tzinfo=self.tz),
                    datetime(2018, 1, 28, 18, 0, 0, tzinfo=self.tz),
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(
                        end_time=end_time
                    )
                )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 18:30
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)  # look, no tz
                )

        view, created = View.objects.get_or_create(
            event=self.event,
            name='Ohjelmakartta',
        )
        if created:
            view.rooms = [Room.objects.get_or_create(
                event=self.event,
                name=room_name,
            )[0] for room_name in [
                'Pääsali',
                'Kuusi',
                'Puuseppä',
                'Koivu',
                'Honka',
            ]]
            view.save()

        tag_order = 0
        for tag_title, tag_slug, tag_style in [
            ('Cosplaypainotteinen ohjelma', 'cosplay', 'label-danger'),
            ('Mangapainotteinen ohjelma', 'manga', 'label-success'),
            ('Ohjelman tarkoitus on viihdyttää', 'viihde', 'label-primary'),
            ('Ohjelma sisältää juonipaljastuksia', 'spoilers', 'label-warning'),
            ('Ohjelma keskittyy analysoivampaan lähestymistapaan', 'analyysi', 'label-default'),
            ('Animepainotteinen ohjelma', 'anime', 'label-info'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                slug=tag_slug,
                defaults=dict(
                    title=tag_title,
                    order=tag_order,
                    style=tag_style,
                ),
            )
            tag_order += 10
Example #38
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            ProgrammeEventMeta,
            Role,
            SpecialStartTime,
            Tag,
            TimeBlock,
        )
        from core.utils import full_hours_between

        admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event, defaults=dict(admin_group=admin_group, ))

        if not programme_event_meta.contact_email:
            programme_event_meta.contact_email = 'Hypecon <*****@*****.**>'
            programme_event_meta.save()

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            role, unused = Role.objects.get_or_create(
                personnel_class=personnel_class,
                title=role_title,
                defaults=dict(is_default=role_is_default, ))

        for category_name, category_style in [
            ('Pelit', 'rope'),
            ('Anime/manga', 'anime'),
            ('Cosplay', 'cosplay'),
            ('Muu', 'muu'),
        ]:
            Category.objects.get_or_create(event=self.event,
                                           title=category_name,
                                           defaults=dict(
                                               style=category_style, ))

        for tag_name, tag_style in [
            ('Luento', 'label-default'),
            ('Paneeli', 'label-success'),
            ('Keskustelupiiri', 'label-info'),
            ('Työpaja', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(style=tag_style, ),
            )

        if not TimeBlock.objects.filter(event=self.event).exists():
            for start_time, end_time in [
                (
                    self.event.start_time,
                    self.event.end_time,
                ),
            ]:
                TimeBlock.objects.get_or_create(
                    event=self.event,
                    start_time=start_time,
                    defaults=dict(end_time=end_time))

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            # [:-1] – discard 22:30
            for hour_start_time in full_hours_between(
                    time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30))
Example #39
0
    def setup_programme(self):
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Tracon X -ohjelmatiimi <*****@*****.**>',
        ))

        for room_name in [
            u'Aaria',
            u'Iso sali',
            u'Pieni sali',
            # u'Sopraano', # Ei luento-ohjelmakäytössä
            u'Rondo',
            u'Studio',
            u'Sonaatti 1',
            u'Sonaatti 2',
            u'Basso',
            #u'Opus 1', # No longer in use
            u'Opus 2',
            u'Opus 3',
            u'Opus 4',
            u'Talvipuutarha',
            u'Puistolava',
            u'Pieni ulkolava',
            u'Puisto - Iso miittiteltta',
            u'Puisto - Pieni miittiteltta',
            u'Puisto - Bofferiteltta',
            u'Muualla ulkona',
        ]:
            order = self.get_ordering_number() + 80000 # XXX

            room, created = Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=order
                )
            )

            room.order = order
            room.save()

        role, unused = Role.objects.get_or_create(
            title=u'Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                (u'Animeohjelma', u'anime'),
                (u'Cosplayohjelma', u'cosplay'),
                (u'Miitti', u'miitti'),
                (u'Muu ohjelma', u'muu'),
                (u'Roolipeliohjelma', u'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Animeohjelma', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                datetime(2015, 9, 5, 11, 0, 0, tzinfo=self.tz),
                datetime(2015, 9, 6, 1 , 0, 0, tzinfo=self.tz),
            ),
            (
                datetime(2015, 9, 6, 9 , 0, 0, tzinfo=self.tz),
                datetime(2015, 9, 6, 17, 0, 0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=datetime(2015, 9, 5, 10, 30, 0, tzinfo=self.tz),
        )

        have_views = View.objects.filter(event=self.event).exists()
        if not have_views:
            for view_name, room_names in [
                (u'Pääohjelmatilat', [
                    u'Iso sali',
                    u'Pieni sali',
                    u'Studio',
                    u'Sonaatti 1',
                    u'Sonaatti 2',
                ]),
                (u'Toissijaiset ohjelmatilat', [
                    u'Aaria',
                    u'Rondo',
                    u'Opus 2',
                    u'Opus 3',
                    u'Opus 4',
                    u'Talvipuutarha',
                ]),
                (u'Ulko-ohjelma', [
                    u'Puistolava',
                    u'Puisto - Iso miittiteltta',
                    u'Puisto - Pieni miittiteltta',
                    u'Muualla ulkona',
                ]),
            ]:
                rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                    for room_name in room_names]

                view, created = View.objects.get_or_create(event=self.event, name=view_name)
                view.rooms = rooms
                view.save()
Example #40
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Matsuconin ohjelmavastaava <*****@*****.**>',
        ))

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title='Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Anime ja manga', 'color1'),
                ('Cosplay', 'color2'),
                ('Pelit', 'color3'),
                ('Japani', 'color4'),
                ('Show', 'color5'),
                ('Työpaja', 'color6'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=10, minute=0, tzinfo=self.tz),
                self.event.start_time.replace(hour=20, minute=0, tzinfo=self.tz),
            ),
            (
                self.event.end_time.replace(hour=10, minute=0, tzinfo=self.tz),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
        )

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Half hours
            for hour_start_time in full_hours_between(time_block.start_time, time_block.end_time)[:-1]:
                SpecialStartTime.objects.get_or_create(
                    event=self.event,
                    start_time=hour_start_time.replace(minute=30)
                )
Example #41
0
    def handle(*args, **options):
        tz = tzlocal()

        venue, unused = Venue.objects.get_or_create(
            name=u'Metropolia AMK Hämeentie',
            defaults=dict(
                name_inessive=u'Metropolia AMK:n Hämeentien toimipisteessä'
            )
        )

        room_order = 0
        for room_name in [
            u'Zeus',
            u'Athene',
        ]:
            room_order += 100
            Room.objects.get_or_create(
                venue=venue,
                name=room_name,
                defaults=dict(
                    order=room_order,
                )
            )

        event, unused = Event.objects.get_or_create(slug='concon9', defaults=dict(
            name='Concon 9',
            name_genitive='Concon 9 -seminaarin',
            name_illative='Concon 9 -seminaariin',
            name_inessive='Concon 9 -seminaarissa',
            homepage_url='http://concon.nakkikone.org',
            organization_name='Yliopiston anime ja manga ry',
            organization_url='http://yama.animeunioni.org',
            start_time=datetime(2014, 5, 24, 10, 0, tzinfo=tz),
            end_time=datetime(2014, 5, 24, 18, 0, tzinfo=tz),
            venue=venue,
        ))

        admin_group, = ProgrammeEventMeta.get_or_create_groups(event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=event, defaults=dict(
            public=False,
            admin_group=admin_group,
        ))

        view, unused = View.objects.get_or_create(
            event=event,
            name='Ohjelmakartta',
        )

        if not view.rooms.exists():
            view.rooms = Room.objects.filter(venue=venue)
            view.save()

        for category_name, category_style in [
            (u'Ohjelma', u'anime'),
            (u'Tauko', u'muu'),
        ]:
            Category.objects.get_or_create(
                event=event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for start_time, end_time in [
            (
                event.start_time,
                event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )
Example #42
0
    def setup_programme(self):
        from core.utils import full_hours_between
        from labour.models import PersonnelClass
        from programme.models import (
            AlternativeProgrammeForm,
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            Tag,
            TimeBlock,
            View,
        )

        programme_admin_group, hosts_group = ProgrammeEventMeta.get_or_create_groups(
            self.event, ['admins', 'hosts'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(
            event=self.event,
            defaults=dict(
                public=False,
                admin_group=programme_admin_group,
                contact_email='Traconin ohjelmatiimi <*****@*****.**>',
                schedule_layout='full_width',
            ))

        if settings.DEBUG:
            programme_event_meta.accepting_cold_offers_from = now(
            ) - timedelta(days=60)
            programme_event_meta.accepting_cold_offers_until = now(
            ) + timedelta(days=60)
            programme_event_meta.save()

        for pc_slug, role_title, role_is_default in [
            ('ohjelma', 'Ohjelmanjärjestäjä', True),
            ('ohjelma-2lk', 'Ohjelmanjärjestäjä (2. luokka)', False),
            ('ohjelma-3lk', 'Ohjelmanjärjestäjä (3. luokka)', False),
        ]:
            personnel_class = PersonnelClass.objects.get(event=self.event,
                                                         slug=pc_slug)
            Role.objects.get_or_create(personnel_class=personnel_class,
                                       title=role_title,
                                       defaults=dict(
                                           is_default=role_is_default, ))

            Role.objects.get_or_create(personnel_class=personnel_class,
                                       title=f'Näkymätön {role_title.lower()}',
                                       defaults=dict(
                                           override_public_title=role_title,
                                           is_default=False,
                                           is_public=False,
                                       ))

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                ('Animeohjelma', 'anime'),
                ('Cosplayohjelma', 'cosplay'),
                ('Miitti', 'miitti'),
                ('Muu ohjelma', 'muu'),
                ('Roolipeliohjelma', 'rope'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               style=style,
                                               defaults=dict(title=title, ))

        saturday = self.event.start_time + timedelta(days=1)

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=16,
                                              minute=0,
                                              tzinfo=self.tz),
                self.event.start_time.replace(hour=21,
                                              minute=0,
                                              tzinfo=self.tz),
            ),
            (
                saturday.replace(hour=9, minute=0, tzinfo=self.tz),
                self.event.end_time.replace(hour=1, minute=0, tzinfo=self.tz),
            ),
            (
                self.event.end_time.replace(hour=9, minute=0, tzinfo=self.tz),
                self.event.end_time.replace(hour=18, minute=0, tzinfo=self.tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(event=self.event,
                                            start_time=start_time,
                                            defaults=dict(end_time=end_time))

        for time_block in TimeBlock.objects.filter(event=self.event):
            # Quarter hours
            # [:-1] – discard 18:00 to 19:00
            for hour_start_time in full_hours_between(
                    time_block.start_time, time_block.end_time)[:-1]:
                for minute in [15, 30, 45]:
                    SpecialStartTime.objects.get_or_create(
                        event=self.event,
                        start_time=hour_start_time.replace(minute=minute))

        for tag_title, tag_class in [
            ('Suositeltu', 'hilight'),
            ('Musiikki', 'label-info'),
            ('In English', 'label-success'),
            ('K-18', 'label-danger'),
            ('Paikkaliput', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_title,
                defaults=dict(style=tag_class, ),
            )

        AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='rpg',
            defaults=dict(
                title='Tarjoa pöytäroolipeliä',
                programme_form_code='events.tracon2021.forms:RpgForm',
                num_extra_invites=0,
                order=10,
            ))

        default_form, created = AlternativeProgrammeForm.objects.get_or_create(
            event=self.event,
            slug='default',
            defaults=dict(
                title='Tarjoa puhe- tai muuta ohjelmaa',
                short_description=
                'Valitse tämä vaihtoehto, mikäli ohjelmanumerosi ei ole pöytäroolipeli.',
                programme_form_code='events.tracon2021.forms:ProgrammeForm',
                num_extra_invites=3,
                order=30,
            ))
        if default_form.programme_form_code == 'programme.forms:ProgrammeOfferForm':
            default_form.programme_form_code = 'events.tracon2021.forms:ProgrammeForm'
            default_form.save()
Example #43
0
    def setup_programme(self):
        from labour.models import PersonnelClass
        from programme.models import (
            Category,
            Programme,
            ProgrammeEventMeta,
            Role,
            Room,
            SpecialStartTime,
            TimeBlock,
            View,
        )

        programme_admin_group, = ProgrammeEventMeta.get_or_create_groups(self.event, ['admins'])
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=self.event, defaults=dict(
            public=False,
            admin_group=programme_admin_group,
            contact_email='Animeconin ohjelmatiimi <*****@*****.**>',
        ))

        for room_name in [
            u'Konserttisali',
            u'Kamarimusiikkisali',
            u'Auditorio',
            u'Jousisto',
            u'Luokka 210',
        ]:
            Room.objects.get_or_create(
                venue=self.venue,
                name=room_name,
                defaults=dict(
                    order=self.get_ordering_number()
                )
            )

        personnel_class = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        role, unused = Role.objects.get_or_create(
            personnel_class=personnel_class,
            title=u'Ohjelmanjärjestäjä',
            defaults=dict(
                is_default=True,
                require_contact_info=True,
            )
        )

        have_categories = Category.objects.filter(event=self.event).exists()
        if not have_categories:
            for title, style in [
                (u'Anime ja manga', u'anime'),
                (u'Cosplay', u'cosplay'),
                (u'Paja', u'miitti'),
                (u'Muu ohjelma', u'muu'),
                (u'Kunniavieras', u'rope'),
            ]:
                Category.objects.get_or_create(
                    event=self.event,
                    style=style,
                    defaults=dict(
                        title=title,
                    )
                )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Anime ja manga', event=self.event),
                title='Yaoi-paneeli',
                defaults=dict(
                    description='Kika-kika tirsk',
                )
            )

        for start_time, end_time in [
            (
                self.event.start_time.replace(hour=10, minute=0),
                self.event.start_time.replace(hour=20, minute=0),
            ),
            (
                self.event.end_time.replace(hour=10, minute=0),
                self.event.end_time,
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=self.event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )

        SpecialStartTime.objects.get_or_create(
            event=self.event,
            start_time=self.event.start_time,
        )

        for view_name, room_names in [
            (u'Pääohjelmatilat', [
                u'Konserttisali',
                u'Kamarimusiikkisali',
                u'Auditorio',
                u'Jousisto',
                u'Luokka 210',
            ]),
        ]:
            rooms = [Room.objects.get(name__iexact=room_name, venue=self.venue)
                for room_name in room_names]

            view, created = View.objects.get_or_create(event=self.event, name=view_name)

            if created:
                view.rooms = rooms
                view.save()
Example #44
0
    def handle(*args, **options):
        if options['test']:
            print 'Setting up kawacon2014 in test mode'
        else:
            print 'Setting up kawacon2014 in production mode'

        tz = tzlocal()

        venue, unused = Venue.objects.get_or_create(name='Peltolan ammattiopisto', defaults=dict(
            name_inessive='Peltolan ammattiopistolla' # XXX not really inessive
        ))

        room_order = 0
        for room_name in [
            u'Auditorio',
            u'Pääsali',
            u'E-rakennus, luokat',
            u'Kawaplay, G-rakennus',
            u'Elokuvateatteri Tapio',
        ]:
            room_order += 100
            Room.objects.get_or_create(
                venue=venue,
                name=room_name,
                defaults=dict(
                    order=room_order,
                )
            )

        event, unused = Event.objects.get_or_create(slug='kawacon2014', defaults=dict(
            name='Kawacon 2014',
            name_genitive='Kawacon 2014 -tapahtuman',
            name_illative='Kawacon 2014 -tapahtumaan',
            name_inessive='Kawacon 2014 -tapahtumassa',
            homepage_url='http://kawacon.info',
            organization_name='Kawacon ry',
            organization_url='http://kawacon.info',
            start_time=datetime(2014, 6, 28, 10, 0, tzinfo=tz),
            end_time=datetime(2014, 6, 29, 18, 0, tzinfo=tz),
            venue=venue,
        ))

        admin_group, unused = ProgrammeEventMeta.get_or_create_group(event=event, suffix='admins')
        programme_event_meta, unused = ProgrammeEventMeta.objects.get_or_create(event=event, defaults=dict(
            public=False,
            admin_group=admin_group,
        ))

        view, unused = View.objects.get_or_create(
            event=event,
            name='Ohjelmakartta',
        )

        view.rooms = Room.objects.filter(venue=venue, public=True)
        view.save()

        for category_name, category_style in [
            (u'Luento', u'anime'),
            (u'Non-stop', u'miitti'),
            (u'Työpaja', u'rope'),
            (u'Muu ohjelma', u'muu'),
            (u'Show', u'cosplay'),
        ]:
            Category.objects.get_or_create(
                event=event,
                title=category_name,
                defaults=dict(
                    style=category_style,
                )
            )

        for start_time, end_time in [
            (
                datetime(2014, 6, 28, 10, 0, 0, tzinfo=tz),
                datetime(2014, 6, 28, 18, 0, 0, tzinfo=tz),
            ),
            (
                datetime(2014, 6, 29, 10, 0, 0, tzinfo=tz),
                datetime(2014, 6, 29, 16, 0, 0, tzinfo=tz),
            ),
        ]:
            TimeBlock.objects.get_or_create(
                event=event,
                start_time=start_time,
                defaults=dict(
                    end_time=end_time
                )
            )