Example #1
0
def labour_api_set_job_requirements_view(request, vars, event, job_category_slug, job_slug):
    job_category = get_object_or_404(JobCategory, event=event, slug=job_category_slug)
    job = get_object_or_404(Job, job_category=job_category, slug=job_slug)

    body = SetJobRequirementsRequest.from_json(request.body)

    start_time = parse_datetime(body.startTime)
    end_time = start_time + timedelta(hours=body.hours - 1) # -1 due to end parameter being inclusive

    start_time = max(start_time, event.labour_event_meta.work_begins)
    end_time = min(end_time, event.labour_event_meta.work_ends)

    for hour in full_hours_between(start_time, end_time): # start/end inclusive
        requirement, created = JobRequirement.objects.get_or_create(
            job=job,
            start_time=hour,
            defaults=dict(
                count=body.required,
            ),
        )

        if not created:
            requirement.count = body.required
            requirement.save()

    # Successful result emulates that of /api/v1/events/tracon11/jobcategories/conitea
    return job_category.as_dict(include_jobs=True)
Example #2
0
def labour_api_set_job_requirements_view(request, vars, event,
                                         job_category_slug, job_slug):
    job_category = get_object_or_404(JobCategory,
                                     event=event,
                                     slug=job_category_slug)
    job = get_object_or_404(Job, job_category=job_category, slug=job_slug)

    body = SetJobRequirementsRequest.from_json(request.body)

    start_time = parse_datetime(body.startTime)
    end_time = start_time + timedelta(
        hours=body.hours - 1)  # -1 due to end parameter being inclusive

    start_time = max(start_time, event.labour_event_meta.work_begins)
    end_time = min(end_time, event.labour_event_meta.work_ends)

    for hour in full_hours_between(start_time,
                                   end_time):  # start/end inclusive
        requirement, created = JobRequirement.objects.get_or_create(
            job=job,
            start_time=hour,
            defaults=dict(count=body.required, ),
        )

        if not created:
            requirement.count = body.required
            requirement.save()

    # Successful result emulates that of /api/v1/events/tracon11/jobcategories/conitea
    return job_category.as_roster_api_dict()
Example #3
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 #4
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, 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(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 #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 (
            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 2020 -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')
        alternative_form, unused = 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.ropecon2020.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 / Call for Larps 2020',
                description=resource_string(
                    __name__, "texts/larpit.html").decode('UTF-8'),
                programme_form_code='events.ropecon2020.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 peliohjelmaa / Call for Game Programme 2020',
                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.ropecon2020.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=resource_string(
                    __name__, "texts/muuohjelma.html").decode('UTF-8'),
                programme_form_code='events.ropecon2020.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',
                'Kilpailu/Turnaus',
        ]:
            Tag.objects.get_or_create(event=self.event, title=tag_title)
Example #7
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()

        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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 7, 1, 23, 59, 59, tzinfo=self.tz),
                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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 7, 1, 23, 59, 59, tzinfo=self.tz),
                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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 5, 31, 23, 59, 59, tzinfo=self.tz),
                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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 5, 31, 23, 59, 59, tzinfo=self.tz),
                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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 5, 31, 23, 59, 59, tzinfo=self.tz),
                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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 5, 31, 23, 59, 59, tzinfo=self.tz),
                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',
                active_from=datetime(2018, 4, 1, 0, 0, tzinfo=self.tz),
                active_until=datetime(2018, 5, 31, 23, 59, 59, tzinfo=self.tz),
                num_extra_invites=0,
                order=10,
            )
        )

        if settings.DEBUG:
            AlternativeProgrammeForm.objects.filter(
                event=self.event,
            ).update(
                active_from=now(),
            )

        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 #8
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,
                )

        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ö / 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',
                'Kilpailu/Turnaus',
        ]:
            Tag.objects.get_or_create(event=self.event, title=tag_title)
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 [
            '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 #10
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,
            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='Aiconin ohjelmatiimi <*****@*****.**>',
            ))

        for room_name in [
                'Vanaja-sali',
                'Luentosali',
                'Kokoushuone',
                'Studio',
        ]:
            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 [
                ('Luento', 'color1'),
                ('Esittävä ohjelma', 'color2'),
                ('Miitti', 'color3'),
                ('Työpaja', 'color4'),
                ('Karaoke', 'color5'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               style=style,
                                               defaults=dict(title=title, ))

        for tag_name, tag_style in [
            ('Suositeltu', 'hilight'),
            ('Paikkaliput', 'label-danger'),
            ('International', 'label-primary'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_name,
                defaults=dict(style=tag_style, ),
            )

        if self.test:
            # create some test programme
            Programme.objects.get_or_create(
                category=Category.objects.get(title='Luento',
                                              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', [
                'Vanaja-sali',
                'Luentosali',
                'Kokoushuone',
                'Studio',
            ]),
        ]:
            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 #11
0
 def work_hours(self):
     return full_hours_between(self.work_begins, self.work_ends)
Example #12
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 #13
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 #14
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 #15
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 #16
0
 def work_hours(self):
     return full_hours_between(self.work_begins, self.work_ends)
Example #17
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))
Example #18
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 #19
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)
                )
Example #20
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 #21
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 #22
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 #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=
                '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 #24
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 #25
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 #26
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=
                'Tampere Kuplii -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),
        ]:
            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 [
                ('Ohjelma', 'muu'),
            ]:
                Category.objects.get_or_create(event=self.event,
                                               style=style,
                                               defaults=dict(title=title, ))

        saturday_start = (self.event.end_time - timedelta(days=1)).replace(
            hour=10, minute=0, tzinfo=self.tz)
        saturday_end = saturday_start.replace(hour=18,
                                              minute=0,
                                              tzinfo=self.tz)
        sunday_start = self.event.end_time.replace(hour=10,
                                                   minute=0,
                                                   tzinfo=self.tz)
        sunday_end = self.event.end_time.replace(hour=18,
                                                 minute=0,
                                                 tzinfo=self.tz)

        for start_time, end_time in [
            (saturday_start, saturday_end),
            (sunday_start, sunday_end),
        ]:
            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
                )

        for tag_title, tag_class in [
            ('Suositeltu', 'hilight'),
            ('In English', 'label-success'),
            ('Paikkaliput', 'label-warning'),
        ]:
            Tag.objects.get_or_create(
                event=self.event,
                title=tag_title,
                defaults=dict(style=tag_class, ),
            )
Example #27
0
    def setup_programme(self):
        from programme.models import Room, ProgrammeEventMeta, Category, TimeBlock, View, SpecialStartTime
        from core.utils import full_hours_between

        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, 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, ))

        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 [
                # (u'Luento', u'anime'),
                # (u'Non-stop', u'miitti'),
            ('Työpaja', 'rope'),
            ('Muu ohjelma', '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))

            # <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))
Example #28
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 #29
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)