Example #1
0
def add_user(req):
    user = req.user
    stub = user.username.split('@')[0]
    user.email = req.POST['email']
    user.first_name = req.POST['first_name']
    user.last_name = req.POST['last_name']
    user.save()
    org_group = OrgGroup(pk=req.POST['team'])
    office_location = OfficeLocation(pk=req.POST['office_location'])

    attributes = {
        'user': user,
        'stub': stub,
        'title': req.POST['title'],
        'office_location': office_location,
        'org_group': org_group,
        'office_phone': req.POST['office_phone'],
        'mobile_phone': req.POST['mobile_phone']
    }

    if req.FILES:
        attributes['photo_file'] = req.FILES['photo_file']

    person = Person(**attributes)
    person.save()
    return user
Example #2
0
    def test_generating_slug(self):
        person = Person(name='Charles Babbage')
        person.save()

        self.assertEqual(
            person.slug,
            'charles-babbage',
        )
Example #3
0
 def get_user(self, user, name, profile_picture):
     person = None
     try:
         person = Person.objects.get(login=user)
     except Person.DoesNotExist:
         person = Person(login=user, name=name, profile_picture=profile_picture)
         person.save()
     return person
Example #4
0
def create_superuser():
    user = get_user_model().objects.create_superuser('*****@*****.**', '*****@*****.**', '1')
    # If using collab, person objects needs to be created too
    if 'core' in settings.INSTALLED_APPS:
        from core.models import Person
        person = Person()
        person.user = user
        person.save()
Example #5
0
 def test_helper_no_profile(self):
     u = get_user_model()()
     u.first_name = "John"
     u.last_name = "Smith"
     u.save()
     self.assertEquals(False, helpers.user_has_profile(u))
     p = Person()
     p.user = u
     p.save()
     self.assertEquals(True, helpers.user_has_profile(u))
Example #6
0
    def test_multiple_tags_multiple_users(self):
        user1 = UserF(username="******")
        person1 = Person(user=user1)
        person1.save()

        user2 = UserF(username="******")
        person2 = Person(user=user2)
        person2.save()

        user3 = UserF(username="******")
        person3 = Person(user=user3)
        person3.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person1, 'TagA',
                                'staff-directory-test-category', user1, 'person')
        tagged_item = add_tags(person2, 'TagA',
                                'staff-directory-test-category', user1, 'person')
        tags.append(tagged_item.tag.slug)

        tagged_item = add_tags(person2, 'TagB',
                                'staff-directory-test-category', user1, 'person')
        tagged_item = add_tags(person3, 'TagB',
                                'staff-directory-test-category', user2, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertTrue(len(emails) == 1)
        self.assertIn(user2.email, emails)
Example #7
0
    def handle(self, *args, **options):
        last_names = [
            'Sherman', 'Maddox', 'Montgomery', 'Small', 'Larsen', 'Marsh', 'Gardner', 'White', 'Gill', 'Pennington', 'Stein', 'Kirby', 'Jennings', 'French', 'Glass', 'Velasquez', 'Doyle', 'York', 'Fisher', 'Strong', 'Henson', 'Harmon', 'Higgins', 'James', 'Hancock', 'Drake', 'Eaton', 'Gordon', 'Harrington', 'Blevins', 'Avila', 'Solis', 'Richmond', 'Stark', 'Haynes', 'Durham', 'Montoya', 'Barrett', 'Chase', 'Mckay', 'Little', 'Perry', 'Howard', 'Caldwell', 'West', 'Fox', 'Long', 'Wright', 'Foster', 'Sloan', 'Frazier', 'Lowe', 'Cabrera', 'Barron', 'Ayala', 'Frank', 'Hammond', 'Orr', 'Holloway', 'King', 'Rush', 'Wiley', 'Neal', 'Davis', 'Fulton', 'Webb', 'Sanchez', 'Strickland', 'Clark', 'Middleton', 'Moody', 'Owens', 'Graham', 'Cotton', 'Shaffer', 'Hawkins',
            'Cooper', 'Justice', 'Clarke', 'Mcconnell', 'Mccarthy', 'Macdonald', 'Castillo', 'Gilbert', 'Horton', 'Finley', 'Beard', 'Sanders', 'Levy', 'Richard', 'Bowen', 'Grant', 'Wilkins', 'Ramsey', 'Lynch', 'Koch', 'Mercado', 'Roach', 'Bond', 'Lane', 'Tanner', 'Byers', 'Humphrey', 'Austin', 'Carney', 'Golden', 'Pope', 'Kramer', 'Ellison', 'Jefferson', 'Duffy', 'Gross', 'Mcmahon', 'Hudson', 'Mckee', 'Atkinson', 'Bush', 'Thompson', 'Faulkner', 'Christian', 'Ingram', 'Cannon', 'Gay', 'Nieves', 'Hodges', 'Langley', 'Watson', 'Woods', 'Gallagher', 'Delacruz', 'Stafford', 'Knight', 'Kerr', 'Chapman', 'Roman', 'Christensen', 'Robles', 'Mathews', 'Waller', 'Buckley', 'Myers', 'Powers', 'Lindsay', 'Gates', 'Miller', 'Johns', 'Morin', 'Fleming', 'Bishop', 'Clements']
        first_names = [
            'Sarah', 'Ian', 'Upton', 'Uriah', 'Hayden', 'Zia', 'Lila', 'Benjamin', 'Addison', 'Vivian', 'Kirby', 'Oscar', 'Demetrius', 'Hashim', 'Michelle', 'Odessa', 'Phillip', 'Michael', 'Dante', 'Omar', 'Dominic', 'Wing', 'Joshua', 'Charlotte', 'Thomas', 'Aquila', 'Rana', 'Jolene', 'Felix', 'Cailin', 'Tatiana', 'Oprah', 'Belle', 'Sydnee', 'Kuame', 'Fleur', 'Matthew', 'Sylvia', 'Mary', 'Deborah', 'Ross', 'Hyacinth', 'Jacqueline', 'Jessica', 'Callie', 'Ariana', 'Leo', 'Desiree', 'Lunea', 'Chava', 'Jorden', 'Rudyard', 'Cally', 'Knox', 'Arthur', 'Dana', 'Rebekah', 'Yen', 'Hadassah', 'Duncan', 'Ginger', 'Valentine', 'Ivana', 'Iona', 'Jemima', 'Dorothy', 'Joan', 'Timothy', 'Amity', 'Uriel', 'Skyler', 'Phelan', 'Alma', 'Hadley',
            'Quemby', 'Sonya', 'Axel', 'Slade', 'Riley', 'Rajah', 'Giselle', 'Selma', 'Nadine', 'Pascale', 'Carol', 'Steel', 'Lane', 'Emi', 'Trevor', 'Wyatt', 'Claire', 'Harlan', 'Liberty', 'Alexandra', 'Avram', 'Barbara', 'Rashad', 'Holmes', 'Kenneth', 'Preston', 'Patience', 'Adele', 'Alfonso', 'Harrison', 'Julian', 'Jena', 'Peter', 'Kessie', 'Katell', 'Denton', 'Piper', 'Jerry', 'Teegan', 'Chandler', 'Walter', 'Cheryl', 'Desirae', 'Tasha', 'Hunter', 'Logan', 'Tatyana', 'Gail', 'Galvin', 'Dara', 'Athena', 'Kay', 'Dustin', 'Faith', 'Mariam', 'Leroy', 'Edan', 'Alexis', 'Nissim', 'Octavia', 'Kareem', 'Heidi', 'Aspen', 'Gregory', 'Garrison', 'Jolie', 'Gloria', 'Alec', 'Asher', 'Julie', 'Ayanna', 'Gavin', 'Germane', 'Bertha', 'Quinn', 'Tarik']

        office_location = OfficeLocation.objects.get(pk='DC123')

        for x in xrange(int(args[0])):
            while True:
                first_name = first_names[int(random.random() *
                                             len(first_names))]
                last_name = last_names[int(random.random() * len(last_names))]
                username = last_name + first_name[0]
                email = username + '@exmaple.com'
                if not get_user_model().objects.filter(username=email).exists():
                    break

            user_attr = {
                'first_name': first_name,
                'last_name': last_name,
                'is_active': True,
                'is_superuser': False,
                'date_joined': '2012-03-01T16:03:14Z',
                'password': '******',
                'is_staff': True,
                'email': email,
                'username': email
            }

            userModel = get_user_model()
            user = userModel(**user_attr)
            user.save()

            person_attr = {
                'office_location': office_location,
                'allow_tagging': True,
                'photo_file': 'avatars/default.jpg',
                'stub': username.replace('.', ''),
                'office_phone': '5555555555',
                'user': user,
                'email_notifications': False,
                'org_group': OrgGroup.objects.order_by('?')[0]
            }

            person = Person(**person_attr)
            person.save()

        self.stdout.write(
            'Successfully created %d users and persons' % int(args[0]))
Example #8
0
    def test_create_tags_for_person(self):
        user = UserF(username="******")
        person = Person(user=user)
        person.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tagged_item = add_tags(person, 'TagA',
                                'staff-directory-test-category', user, 'person')

        self.assertEqual(1, person.tags.count())
Example #9
0
File: views.py Project: yrik/42cc
def add_person(request):

    """
    >>> from django.test import Client
    >>> from django.core.urlresolver import reverse
    >>> client = Client()

    >>> response = client.get('add_person')
    >>> response.status_code
    200

    >>> client.post('/add_person/', {'name': 'fred')
    200
    """

    items = Person.objects.all()

    if request.method == 'POST':  # If the form has been submitted...
        form = PersonForm(request.POST)  # A  form bound to the POST data
        if form.is_valid():  # All validation rules pass
            newPerson = Person(
                        name=form.cleaned_data['name'],
                        bio=form.cleaned_data['bio'],
                        contacts=form.cleaned_data['contacts'],
                        surname=form.cleaned_data['surname'],
                        birth_date=form.cleaned_data['birth_date']
                        )
            newPerson.save()

        if request.is_ajax():
            rdict = {'bad': 'false'}
            if not form.is_valid():
                rdict.update({'bad': 'true'})
                d = {}
                for e in form.errors.iteritems():
                    d.update({e[0]: unicode(e[1])})
                rdict.update({'errs': d})
            json = simplejson.dumps(rdict, ensure_ascii=False)
            return HttpResponse(json, mimetype='application/javascript')
        else:
            return HttpResponseRedirect('/')  # Redirect after POST

    else:
        form = PersonForm()  # An unbound form

    return render_to_response('add_person.html', {
        'form': form,
        'items': items,
    },
     context_instance=RequestContext(request),
    )
Example #10
0
    def setUp(self):
        self.meta, unused = BadgesEventMeta.get_or_create_dummy()
        LabourEventMeta.get_or_create_dummy()
        ProgrammeEventMeta.get_or_create_dummy()

        self.event = self.meta.event
        self.person, unused = Person.get_or_create_dummy()
Example #11
0
    def test_single_tag_single_user(self):
        user = UserF(username="******")
        person = Person(user=user)
        person.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person, 'TagA',
                                'staff-directory-test-category', user, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertTrue(len(emails) == 1)
        self.assertIn(user.email, emails)
Example #12
0
    def test_event_adminship(self):
        person, unused = Person.get_or_create_dummy(superuser=False)
        labour_event_meta, unused = LabourEventMeta.get_or_create_dummy()

        assert not labour_event_meta.is_user_admin(person.user)

        labour_event_meta.admin_group.user_set.add(person.user)

        assert labour_event_meta.is_user_admin(person.user)
Example #13
0
    def test_single_tag_user_profile(self):
        user = UserF(username="******")
        user.set_password("x")
        user.save()
        person = Person(user=user)
        person.stub = "jack"
        person.save()
        resp1 = self.client.login(username="******", password="******")
        self.assertTrue(resp1)

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        resp2 = self.client.post('/staff/add-person-to-tag/%s/hello!/' %
                                (person.stub), {'person_stub': person.stub,
                                                'tag_category': 'staff-directory-test-category'})

        self.assertContains(resp2, "redirect", status_code=200)
Example #14
0
    def get_or_create_dummy(cls):
        from .email_alias_type import EmailAliasType
        from core.models import Person
        alias_type, unused = EmailAliasType.get_or_create_dummy()
        person, unused = Person.get_or_create_dummy()

        return cls.objects.get_or_create(
            type=alias_type,
            person=person,
        )
Example #15
0
    def get_or_create_dummy(cls):
        from core.models import Person
        from .team import Team

        team, unused = Team.get_or_create_dummy()
        person, unused = Person.get_or_create_dummy()

        return cls.objects.get_or_create(
            team=team,
            person=person,
        )
Example #16
0
    def get_or_create_dummy(cls):
        from core.models import Person
        from labour.models import PersonnelClass

        person, unused = Person.get_or_create_dummy()
        personnel_class, unused = PersonnelClass.get_or_create_dummy()

        return cls.objects.get_or_create(
            person=person,
            personnel_class=personnel_class,
        )
Example #17
0
    def get_or_create_dummy(cls):
        from core.models import Person, Event

        person, unused = Person.get_or_create_dummy()
        event, unused = Event.get_or_create_dummy()

        signup, created = Signup.objects.get_or_create(person=person, event=event)
        extra = signup.signup_extra
        extra.save()

        return signup, created
Example #18
0
    def get_or_create_dummy(cls):
        from core.models import Person

        person, unused = Person.get_or_create_dummy()
        role, unused = Role.get_or_create_dummy()
        programme, unused = Programme.get_or_create_dummy()

        ProgrammeRole.objects.get_or_create(
            person=person,
            programme=programme,
            role=role,
        )
Example #19
0
    def get_facebook_user(cls, client, facebook_id):
        
        """
        method to retrieve facebook user, if it doesn't exist it'll be created

        """

        try:
            fbu = cls.objects.get(facebook_id__exact=facebook_id, deleted=False)
        except cls.DoesNotExist:
            try:
                user_data = client.obj_id(
                    facebook_id,
                    fields='id,name,first_name,middle_name,last_name,link,username,gender,locale,picture',
                    )
            except FacebookGenericError:
                user_data = client.obj_id(
                    facebook_id,
                    fields='id,name,link,picture',
                    )

                person = Person(
                    name=user_data[u'name'] if u'name' in user_data else None,
                    )
                person.save()

                fbu = cls(
                    person=person,
                    facebook_id=user_data[u'id'],
                    name=user_data[u'name'] if u'name' in user_data else None,
                    link=user_data[u'link'] if u'link' in user_data else None,
                    page=True,
                    )

                if u'picture' in user_data:
                    fbu.picture = user_data[u'picture'][u'data'][u'url']
            else:
                person = Person(
                    name=user_data[u'name'] if u'name' in user_data else None,
                    gender=user_data[u'gender'] if u'gender' in user_data else None,
                    )
                person.save()

                fbu = cls(
                    person=person,
                    facebook_id=user_data[u'id'],
                    name=user_data[u'name'] if u'name' in user_data else None,
                    first_name=user_data[u'first_name'] if u'first_name' in user_data else None,
                    middle_name=user_data[u'middle_name'] if u'middle_name' in user_data else None,
                    last_name=user_data[u'last_name'] if u'last_name' in user_data else None,
                    link=user_data[u'link'] if u'link' in user_data else None,
                    username=user_data[u'username'] if u'username' in user_data else None,
                    gender=user_data[u'gender'] if u'gender' in user_data else None,
                    locale=user_data[u'locale'] if u'locale' in user_data else None,
                    picture=user_data[u'picture'][u'data'][u'url'] if u'picture' in user_data else None,
                    page=False,
                    )

            fbu.save()
        return fbu
Example #20
0
    def resolve_employees(self, info, lookup='id', value=None, **kwargs):

        # Input validation
        if lookup not in ['id', 'name']:
            raise Exception('Invalid Value - \
                             lookup field - accepts[id, name]')
        if not value:
            raise Exception('Invalid Value - value field')

        # Route based on the lookup type
        # Company ID lookup
        if lookup == 'id':
            employees = Person.objects(company_id=value)
            # If no employees are returned check if the company id is valid
            if len(employees) < 1:
                try:
                    company = Company.objects.get(index=value)
                except Company.DoesNotExist:
                    raise Exception('Company index not found')
                raise Exception('No employees found')
            else:
                return employees

        # Company name lookup
        if lookup == 'name':
            # Find the index of the company first
            try:
                company = Company.objects.get(company=value)
            except Company.DoesNotExist:
                raise Exception('Company name not found')
            # Company found
            employees = Person.objects(company_id=company.index)
            if len(employees) < 1:
                raise Exception('No employees found')
            else:
                return employees
Example #21
0
    def get_or_create_dummy(cls, programme=None):
        from core.models import Person
        from .role import Role

        person, unused = Person.get_or_create_dummy()
        role, unused = Role.get_or_create_dummy()

        if programme is None:
            programme, unused = Programme.get_or_create_dummy()

        ProgrammeRole.objects.get_or_create(
            person=person,
            programme=programme,
            role=role,
        )
Example #22
0
 def handle(self, *args, **kwargs):
     for first_name in self.first_names:
         for last_name in self.last_names:
             person = Person(first_name=first_name, last_name=last_name)
             person.save()
     for producer_name in self.producer_names:
         prod = Producer(address=choice(self.street_names) + ' ' +
                         str(randint(1, 200)) + '-' + str(randint(1, 500)),
                         name=producer_name)
         prod.save()
     for taste in self.tastes:
         liquid = Liquid(producer=choice(Producer.objects.all()),
                         price=Decimal(randrange(10, 100) / 10),
                         taste=taste)
         liquid.save()
     for _ in range(100):
         tab = Tab(producer=choice(Producer.objects.all()),
                   price=Decimal(randrange(20, 300) / 10),
                   power=randint(50, 300))
         tab.save()
     for _ in range(70):
         evaporator = Evaporator(producer=choice(Producer.objects.all()),
                                 price=Decimal(randrange(50, 600) / 10))
         evaporator.save()
Example #23
0
    def handle(*args, **options):
        if settings.DEBUG:
            person, unused = Person.get_or_create_dummy()

            Application.objects.get_or_create(
                client_id='kompassi_insecure_test_client_id',
                defaults=dict(
                    user=person.user,
                    redirect_uris='\n'.join([
                        'http://ssoexample.dev:8001/oauth2/callback',
                        'http://infokala.dev:8001/oauth2/callback',
                        'http://tracontent.dev:8001/oauth2/callback',
                    ]),
                    client_type='confidential',  # hah
                    authorization_grant_type='authorization-code',
                    client_secret='kompassi_insecure_test_client_secret',
                    name='Insecure test application',
                ))
Example #24
0
    def get_or_create_dummy(cls, entry_type=None, **kwargs):
        from .entry_type_metadata import EntryTypeMetadata
        from core.models import Person

        if entry_type is None:
            entry_type, unused = EntryTypeMetadata.get_or_create_dummy()
            entry_type = entry_type.name

        person, unused = Person.get_or_create_dummy()

        attrs = dict(
            entry_type=entry_type,
            user=person.user,
        )

        attrs.update(kwargs)

        return cls.objects.get_or_create(**attrs)
Example #25
0
    def get_or_create_dummy(cls, entry_type=None, **kwargs):
        from .entry_type_metadata import EntryTypeMetadata
        from core.models import Person

        if entry_type is None:
            entry_type, unused = EntryTypeMetadata.get_or_create_dummy()
            entry_type = entry_type.name

        person, unused = Person.get_or_create_dummy()

        attrs = dict(
            entry_type=entry_type,
            user=person.user,
        )

        attrs.update(kwargs)

        return cls.objects.get_or_create(**attrs)
Example #26
0
    def get_or_create_dummy(cls, programme=None, role=None):
        from core.models import Person
        from .role import Role
        from .programme import Programme

        person, unused = Person.get_or_create_dummy()

        if role is None:
            role, unused = Role.get_or_create_dummy()

        if programme is None:
            programme, unused = Programme.get_or_create_dummy()

        programme_role, created = ProgrammeRole.objects.get_or_create(
            person=person, programme=programme, defaults=dict(role=role, ))

        programme.apply_state()

        return programme_role, created
Example #27
0
    def test_qualifications(self):
        person, unused = Person.get_or_create_dummy()
        qualification1, qualification2 = Qualification.get_or_create_dummies()
        jc1, jc2 = JobCategory.get_or_create_dummies()

        jc1.required_qualifications.add(qualification1)

        assert not jc1.is_person_qualified(person)
        assert jc2.is_person_qualified(person)

        person.personqualification_set.create(qualification=qualification2)

        assert not jc1.is_person_qualified(person)
        assert jc2.is_person_qualified(person)

        person.personqualification_set.create(qualification=qualification1)

        assert jc1.is_person_qualified(person)
        assert jc2.is_person_qualified(person)
Example #28
0
    def handle(*args, **options):
        if settings.DEBUG:
            person, unused = Person.get_or_create_dummy()

            Application.objects.get_or_create(
                client_id='kompassi_insecure_test_client_id',
                defaults=dict(
                    user=person.user,
                    redirect_uris='\n'.join([
                        'http://ssoexample.dev:8001/oauth2/callback',
                        'http://infokala.dev:8001/oauth2/callback',
                        'http://tracontent.dev:8001/oauth2/callback',
                    ]),
                    client_type='confidential', # hah
                    authorization_grant_type='authorization-code',
                    client_secret='kompassi_insecure_test_client_secret',
                    name='Insecure test application',
                )
            )
Example #29
0
    def get_or_create_dummy(cls, accepted=False):
        from core.models import Person, Event
        from .job_category import JobCategory

        person, unused = Person.get_or_create_dummy()
        event, unused = Event.get_or_create_dummy()
        job_category, unused = JobCategory.get_or_create_dummy()

        signup, created = Signup.objects.get_or_create(person=person, event=event)
        if created:
            signup.job_categories.set([job_category])

        if accepted:
            signup.job_categories_accepted.set(signup.job_categories.all())
            signup.personnel_classes.add(signup.job_categories.first().personnel_classes.first())
            signup.state = 'accepted'
            signup.save()
            signup.apply_state()

        return signup, created
Example #30
0
def membership_organization_box_context(request, organization):
    meta = organization.membership_organization_meta
    if not meta:
        return dict()

    if Person.is_user_person(request.user):
        membership = Membership.objects.filter(
            organization=organization,
            person=request.user.person,
        ).first()
        is_membership_admin = meta.is_user_admin(request.user)
    else:
        membership = None
        is_membership_admin = False

    return dict(
        can_apply=meta.receiving_applications and not membership,
        membership=membership,
        is_membership_admin=is_membership_admin,
    )
Example #31
0
def membership_organization_box_context(request, organization):
    meta = organization.membership_organization_meta
    if not meta:
        return dict()

    if Person.is_user_person(request.user):
        membership = Membership.objects.filter(
            organization=organization,
            person=request.user.person,
        ).first()
        is_membership_admin = meta.is_user_admin(request.user)
    else:
        membership = None
        is_membership_admin = False

    return dict(
        can_apply=meta.receiving_applications and not membership,
        membership=membership,
        is_membership_admin=is_membership_admin,
    )
Example #32
0
    def test_card_number(self):
        """
        Tests that only well-formed JV card numbers are accepted.
        """

        person, unused = Person.get_or_create_dummy()
        qualification = Qualification.create_dummy()
        personqualification = PersonQualification.objects.create(
            person=person,
            qualification=qualification,
        )

        today = date.today()

        valid_examples = [
            '8330/J1234/09',
            '8520/J0000/13',
        ]

        for valid_example in valid_examples:
            JVKortti(
                personqualification=personqualification,
                card_number=valid_example,
                expiration_date=today
            ).full_clean()

        invalid_examples = [
            'lol',
            # '8330/J1234/0', # need more lax validation due to new cards having a new format
            None,
            ''
        ]

        for invalid_example in invalid_examples:
            invalid = JVKortti(
                personqualification=personqualification,
                card_number=invalid_example,
                expiration_date=today
            )

            self.assertRaises(ValidationError, lambda: invalid.full_clean())
Example #33
0
    def get_or_create_dummy(cls, accepted=False):
        from core.models import Person, Event
        from .job_category import JobCategory

        person, unused = Person.get_or_create_dummy()
        event, unused = Event.get_or_create_dummy()
        job_category, unused = JobCategory.get_or_create_dummy()

        signup, created = Signup.objects.get_or_create(person=person,
                                                       event=event)
        if created:
            signup.job_categories.set([job_category])

        if accepted:
            signup.job_categories_accepted.set(signup.job_categories.all())
            signup.personnel_classes.add(
                signup.job_categories.first().personnel_classes.first())
            signup.state = 'accepted'
            signup.save()
            signup.apply_state()

        return signup, created
Example #34
0
    def setUp(self):

        # create a load of test people in the database
        names = [
            'Adam Ant',
            'Bobby Smith',
            'Fred Jones',
            'Joe Bloggs',
            'Joe Smith',
            'Josepth Smyth',
        ]
        for name in names:
            Person(
                slug=slugify(name),
                legal_name=name,
                gender='m',
            ).save()

        # Haystack indexes are not touched when fixtures are dumped. Run this
        # so that other changes cannot affect these tests. Have added a note to
        # a HayStack issue regarding this:
        #   https://github.com/toastdriven/django-haystack/issues/226
        call_command('rebuild_index', interactive=False)
Example #35
0
    def test_card_number(self):
        """
        Tests that only well-formed JV card numbers are accepted.
        """

        person, unused = Person.get_or_create_dummy()
        qualification = Qualification.create_dummy()
        personqualification = PersonQualification.objects.create(
            person=person,
            qualification=qualification,
        )

        today = date.today()

        valid_examples = [
            '8330/J1234/09',
            '8520/J0000/13',
        ]

        for valid_example in valid_examples:
            JVKortti(personqualification=personqualification,
                     card_number=valid_example,
                     expiration_date=today).full_clean()

        invalid_examples = [
            'lol',
            # '8330/J1234/0', # need more lax validation due to new cards having a new format
            None,
            ''
        ]

        for invalid_example in invalid_examples:
            invalid = JVKortti(personqualification=personqualification,
                               card_number=invalid_example,
                               expiration_date=today)

            self.assertRaises(ValidationError, lambda: invalid.full_clean())
Example #36
0
def membership_organization_box_context(request, organization):
    meta = organization.membership_organization_meta
    if not meta:
        return dict()

    if Person.is_user_person(request.user):
        membership = Membership.objects.filter(
            organization=organization,
            person=request.user.person,
        ).first()
        is_membership_admin = meta.is_user_admin(request.user)
        current_term_payment = membership.get_payment_for_term(
        ) if membership else None
    else:
        membership = None
        is_membership_admin = False
        current_term_payment = None

    return dict(
        can_apply=meta.receiving_applications and not membership,
        current_term_payment=current_term_payment,
        is_membership_admin=is_membership_admin,
        membership=membership,
    )
Example #37
0
    def get_or_create_dummy(cls, programme=None, role=None):
        from core.models import Person
        from .role import Role
        from .programme import Programme

        person, unused = Person.get_or_create_dummy()

        if role is None:
            role, unused = Role.get_or_create_dummy()

        if programme is None:
            programme, unused = Programme.get_or_create_dummy()

        programme_role, created = ProgrammeRole.objects.get_or_create(
            person=person,
            programme=programme,
            defaults=dict(
                role=role,
            )
        )

        programme.apply_state()

        return programme_role, created
Example #38
0
    def test_no_emails(self):
        user1 = UserF(username="******")
        person1 = Person(user=user1)
        person1.save()

        user2 = UserF(username="******")
        person2 = Person(user=user2)
        person2.save()

        tag_category = TagCategory(name='Test Category',
                                   slug='staff-directory-test-category')
        tag_category.save()

        tags = []
        tagged_item = add_tags(person1, 'TagA',
                                'staff-directory-test-category', user1, 'person')
        tags.append(tagged_item.tag.slug)

        tagged_item = add_tags(person2, 'TagB',
                                'staff-directory-test-category', user1, 'person')
        tags.append(tagged_item.tag.slug)

        emails = _get_emails_for_tag(tags)
        self.assertEqual(len(emails), 0)
Example #39
0
    def setup_labour(self):
        from core.models import Person
        from core.utils import slugify
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
        )
        from ...models import SignupExtra, Night
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2018, 9, 7, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2018, 9, 9, 22, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Traconin työvoimatiimi <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        self.afterparty_perk, unused = Perk.objects.get_or_create(
            event=self.event,
            slug='kaatajaiset',
            defaults=dict(name='Kaatajaiset', ),
        )

        fmh = PersonnelClass.objects.filter(event=self.event,
                                            slug='ylivankari')
        if fmh.exists():
            fmh.update(name='Vuorovastaava', slug='vuorovastaava')

        for pc_name, pc_slug, pc_app_label, pc_afterparty in [
            ('Coniitti', 'coniitti', 'labour', True),
            ('Duniitti', 'duniitti', 'labour', True),
            ('Vuorovastaava', 'vuorovastaava', 'labour', True),
            ('Työvoima', 'tyovoima', 'labour', True),
            ('Ohjelma', 'ohjelma', 'programme', True),
            ('Ohjelma 2. luokka', 'ohjelma-2lk', 'programme', False),
            ('Ohjelma 3. luokka', 'ohjelma-3lk', 'programme', False),
            ('Guest of Honour', 'goh', 'programme',
             False),  # tervetullut muttei kutsuta automaattiviestillä
            ('Media', 'media', 'badges', False),
            ('Myyjä', 'myyja', 'badges', False),
            ('Vieras', 'vieras', 'badges', False),
            ('Vapaalippu, viikonloppu', 'vapaalippu-vkl', 'tickets', False),
            ('Vapaalippu, lauantai', 'vapaalippu-la', 'tickets', False),
            ('Vapaalippu, sunnuntai', 'vapaalippu-su', 'tickets', False),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

            if pc_afterparty and created:
                personnel_class.perks = [self.afterparty_perk]
                personnel_class.save()

        # v33
        PersonnelClass.objects.filter(
            event=self.event,
            slug='coniitti',
            icon_css_class='fa-user',
        ).update(icon_css_class='fa-check-square')

        PersonnelClass.objects.filter(
            event=self.event,
            slug='duniitti',
            icon_css_class='fa-user',
        ).update(icon_css_class='fa-check-square-o')

        tyovoima = PersonnelClass.objects.get(event=self.event,
                                              slug='tyovoima')
        coniitti = PersonnelClass.objects.get(event=self.event,
                                              slug='coniitti')

        for name, description, pcs in [
            ('Conitea', 'Tapahtuman järjestelytoimikunnan jäsen eli coniitti',
             [coniitti]),
            ('Järjestyksenvalvoja',
             'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa '
             'JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole '
             'täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).',
             [tyovoima]),
            ('Info',
             'Infopisteen henkilökunta vastaa kävijöiden kysymyksiin ja ratkaisee heidän ongelmiaan tapahtuman '
             'aikana. Tehtävä edellyttää asiakaspalveluasennetta, tervettä järkeä ja ongelmanratkaisukykyä.',
             [tyovoima]),
        ]:
            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                slug=slugify(name),
                defaults=dict(
                    name=name,
                    description=description,
                ))

            if created:
                job_category.personnel_classes = pcs
                job_category.save()

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

            jc.required_qualifications = [qual]
            jc.save()

        labour_event_meta.create_groups()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.tracon2018.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.tracon2018.forms:OrganizerSignupExtraForm',
                active_from=datetime(2017, 9, 16, 23, 8, 0, tzinfo=self.tz),
                active_until=datetime(2018, 9, 9, 23, 59, 59, tzinfo=self.tz),
            ),
        )

        for wiki_space, link_title, link_group in [
            ('TERA', 'Työvoimawiki', 'accepted'),
            ('INFO', 'Infowiki', 'info'),
        ]:
            InfoLink.objects.get_or_create(
                event=self.event,
                title=link_title,
                defaults=dict(
                    url=
                    'https://atlasso.tracon.fi/crowd?next=https://confluence.tracon.fi/display/{wiki_space}'
                    .format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                ))
Example #40
0
    def setup_labour(self):
        from core.models import Person
        from core.utils import slugify
        from labour.models import (
            AlternativeSignupForm,
            JobCategory,
            LabourEventMeta,
            PersonnelClass,
            Qualification,
        )
        from ...models import SignupExtra, SpecialDiet
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2018, 1, 26, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2018, 6, 28, 21, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Desuconin työvoimavastaava <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Vastaava', 'vastaava', 'labour'),
            ('Vuorovastaava', 'vuorovastaava', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Guest of Honour', 'goh', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima')
        vastaava = PersonnelClass.objects.get(event=self.event, slug='vastaava')

        for name, description, pcs in [
            (
                'Vastaava',
                'Tapahtuman järjestelytoimikunnan jäsen eli vastaava',
                [vastaava]
            ),
            (
                'Järjestyksenvalvoja',
                'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa '
                'JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole '
                'täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).',
                [tyovoima]
            ),
        ]:
            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                slug=slugify(name),
                defaults=dict(
                    name=name,
                    description=description,
                )
            )

            if created:
                job_category.personnel_classes.set(pcs)


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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

            jc.required_qualifications.set([qual])


        labour_event_meta.create_groups()

        organizer_form, unused = AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='vastaava',
            defaults=dict(
                title='Vastaavan ilmoittautumislomake',
                signup_form_class_path='events.frostbite2018.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.frostbite2018.forms:OrganizerSignupExtraForm',
                active_from=datetime(2017, 7, 23, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
            ),
        )

        if organizer_form.active_until is None:
            organizer_form.active_until = self.event.start_time
            organizer_form.save()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='xxlomake',
            defaults=dict(
                title='Erikoistehtävien ilmoittautumislomake',
                signup_form_class_path='events.frostbite2018.forms:SpecialistSignupForm',
                signup_extra_form_class_path='events.frostbite2018.forms:SpecialistSignupExtraForm',
                active_from=datetime(2017, 7, 23, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
                signup_message=(
                    'Täytä tämä lomake vain, '
                    'jos joku Desuconin vastaavista on ohjeistanut sinun ilmoittautua tällä lomakkeella. '
                ),
            ),
        )
Example #41
0
    def setup_labour(self):
        from core.models import Person, Event
        from core.utils import slugify
        from labour.models import (
            AlternativeSignupForm,
            JobCategory,
            LabourEventMeta,
            PersonnelClass,
            Qualification,
            Survey,
        )
        from ...models import SignupExtra, SpecialDiet
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2019, 2, 15, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2019, 2, 17, 21, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Desuconin työvoimavastaava <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Vastaava', 'vastaava', 'labour'),
            ('Vuorovastaava', 'vuorovastaava', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Guest of Honour', 'goh', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima')
        vastaava = PersonnelClass.objects.get(event=self.event, slug='vastaava')

        if not JobCategory.objects.filter(event=self.event).exists():
            JobCategory.copy_from_event(
                source_event=Event.objects.get(slug='desucon2018'),
                target_event=self.event,
            )

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

            jc.required_qualifications.set([qual])


        labour_event_meta.create_groups()

        organizer_form, unused = AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='vastaava',
            defaults=dict(
                title='Vastaavan ilmoittautumislomake',
                signup_form_class_path='events.frostbite2019.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.frostbite2019.forms:OrganizerSignupExtraForm',
                active_from=datetime(2018, 9, 16, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
            ),
        )

        if organizer_form.active_until is None:
            organizer_form.active_until = self.event.start_time
            organizer_form.save()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='xxlomake',
            defaults=dict(
                title='Erikoistehtävien ilmoittautumislomake',
                signup_form_class_path='events.frostbite2019.forms:SpecialistSignupForm',
                signup_extra_form_class_path='events.frostbite2019.forms:SpecialistSignupExtraForm',
                active_from=datetime(2018, 9, 16, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
                signup_message=(
                    'Täytä tämä lomake vain, '
                    'jos joku Desuconin vastaavista on ohjeistanut sinun ilmoittautua tällä lomakkeella. '
                ),
            ),
        )
Example #42
0
    def setup_labour(self):
        from core.models import Event, Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time - timedelta(days=1),
            work_ends=self.event.end_time + timedelta(hours=4),
            admin_group=labour_admin_group,
            contact_email=
            'Popcult Helsingin työvoimavastaava <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Vastaava', 'vastaava', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        if not JobCategory.objects.filter(event=self.event).exists():
            JobCategory.copy_from_event(
                source_event=Event.objects.get(slug='popcultday2018'),
                target_event=self.event,
            )

        labour_event_meta.create_groups()

        JobCategory.objects.filter(event=self.event,
                                   slug='vastaava').update(public=False)

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)
            if not jc.required_qualifications.exists():
                jc.required_qualifications.set([qual])

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='vastaava',
            defaults=dict(
                title='Vastaavien ilmoittautumislomake',
                signup_form_class_path=
                'events.popcult2019.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.popcult2019.forms:OrganizerSignupExtraForm',
                active_from=datetime(2018, 11, 14, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
            ),
        )
Example #43
0
    def respond_with_new_user(self, request, next_url, desuprofile):
        """
        This implements the following case:

        2. No Kompassi account is linked to this Desuprofile, and no Kompassi account matches the
           Desuprofile by email address. A new Kompassi account is created and logged in.
        """

        User = get_user_model()
        password = create_temporary_password()

        # Kompassi has stricter rules for username validation than Desusite
        username = desuprofile.username.lower()
        try:
            valid_username(username)
        except DjangoValidationError:
            username = None
        else:
            try:
                User.objects.get(username=username)
            except User.DoesNotExist:
                # Username is free
                pass
            else:
                # Username clash with an existing account, use safe username
                username = None

        if username is None:
            username = "******".format(id=desuprofile.id)

        with transaction.atomic():
            user = User(
                username=username,
                is_active=True,
                is_staff=False,
                is_superuser=False,
            )

            user.set_password(password)
            user.save()

            person = Person(
                first_name=desuprofile.first_name.strip(),
                surname=desuprofile.last_name.strip(),
                nick=desuprofile.nickname.strip(),
                email=desuprofile.email.strip(),
                phone=desuprofile.phone.strip(),
                birth_date=(
                    datetime.strptime(desuprofile.birth_date.strip(), '%Y-%m-%d').date()
                    if desuprofile.birth_date
                    else None
                ),
                notes='Luotu Desuprofiilista',
                user=user,
            )

            person.save()

            connection = Connection(
                id=int(desuprofile.id),
                desuprofile_username=desuprofile.username,
                user=user,
            )
            connection.save()

        person.apply_state_new_user(request, password)
        messages.success(request, 'Sinulle on luotu Desuprofiiliisi liitetty Kompassi-tunnus. Tervetuloa Kompassiin!')

        return respond_with_connection(request, next_url, connection)
Example #44
0
    def setup_labour(self):
        from core.models import Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time - timedelta(days=1),
            work_ends=self.event.end_time + timedelta(hours=4),
            admin_group=labour_admin_group,
            contact_email='Popcult Helsingin työvoimavastaava <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Vastaava', 'vastaava', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima')
        vastaava = PersonnelClass.objects.get(event=self.event, slug='vastaava')

        for jc_data in [
            (
                'Vastaava',
                'Tapahtuman järjestelytoimikunnan jäsen eli vastaava',
                [vastaava]
            ),
            (
                'Järjestyksenvalvoja',
                'Järjestyksenvalvojan tehtäviin kuuluvat lippujen tarkistus, kulunvalvonta sekä ihmisten ohjaus. Tehtävään vaaditaan JV-kortti.',
                [tyovoima]
            ),
        ]:
            if len(jc_data) == 3:
                name, description, pcs = jc_data
                job_names = []
            elif len(jc_data) == 4:
                name, description, pcs, job_names = jc_data
            else:
                raise ValueError("Length of jc_data must be 3 or 4")

            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                slug=slugify(name),
                defaults=dict(
                    name=name,
                    description=description,
                )
            )

            if created:
                job_category.personnel_classes = pcs
                job_category.save()

            for job_name in job_names:
                job, created = Job.objects.get_or_create(
                    job_category=job_category,
                    slug=slugify(job_name),
                    defaults=dict(
                        title=job_name,
                    )
                )

        labour_event_meta.create_groups()

        JobCategory.objects.filter(event=self.event, slug='vastaava').update(public=False)

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)
            if not jc.required_qualifications.exists():
                jc.required_qualifications = [qual]
                jc.save()

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='vastaava',
            defaults=dict(
                title='Vastaavien ilmoittautumislomake',
                signup_form_class_path='events.popcult2017.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.popcult2017.forms:OrganizerSignupExtraForm',
                active_from=datetime(2017, 1, 12, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
            ),
        )
Example #45
0
    def setup_labour(self):
        from core.models import Event, Person
        from core.utils import slugify
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            Survey,
        )
        from ...models import SignupExtra, Night, Poison
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2019, 9, 6, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2019, 9, 8, 22, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Traconin työvoimatiimi <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        self.afterparty_perk, unused = Perk.objects.get_or_create(
            event=self.event,
            slug='kaatajaiset',
            defaults=dict(name='Kaatajaiset', ),
        )

        fmh = PersonnelClass.objects.filter(event=self.event,
                                            slug='ylivankari')
        if fmh.exists():
            fmh.update(name='Vuorovastaava', slug='vuorovastaava')

        for pc_name, pc_slug, pc_app_label, pc_afterparty in [
            ('Coniitti', 'coniitti', 'labour', True),
            ('Duniitti', 'duniitti', 'labour', True),
            ('Vuorovastaava', 'vuorovastaava', 'labour', True),
            ('Työvoima', 'tyovoima', 'labour', True),
            ('Ohjelma', 'ohjelma', 'programme', True),
            ('Ohjelma 2. luokka', 'ohjelma-2lk', 'programme', False),
            ('Ohjelma 3. luokka', 'ohjelma-3lk', 'programme', False),
            ('Guest of Honour', 'goh', 'programme',
             False),  # tervetullut muttei kutsuta automaattiviestillä
            ('Media', 'media', 'badges', False),
            ('Myyjä', 'myyja', 'badges', False),
            ('Vieras', 'vieras', 'badges', False),
            ('Vapaalippu, viikonloppu', 'vapaalippu-vkl', 'tickets', False),
            ('Vapaalippu, lauantai', 'vapaalippu-la', 'tickets', False),
            ('Vapaalippu, sunnuntai', 'vapaalippu-su', 'tickets', False),
            ('Cosplaykisaaja', 'cosplay', 'tickets', False),
            ('Taidekuja', 'taidekuja', 'tickets', False),
            ('Yhdistyspöydät', 'yhdistyspoydat', 'tickets', False),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

            if pc_afterparty and created:
                personnel_class.perks.set([self.afterparty_perk])
                personnel_class.save()

        # v33
        PersonnelClass.objects.filter(
            event=self.event,
            slug='coniitti',
            icon_css_class='fa-user',
        ).update(icon_css_class='fa-check-square')

        PersonnelClass.objects.filter(
            event=self.event,
            slug='duniitti',
            icon_css_class='fa-user',
        ).update(icon_css_class='fa-check-square-o')

        tyovoima = PersonnelClass.objects.get(event=self.event,
                                              slug='tyovoima')
        coniitti = PersonnelClass.objects.get(event=self.event,
                                              slug='coniitti')

        if not JobCategory.objects.filter(event=self.event).exists():
            JobCategory.copy_from_event(
                source_event=Event.objects.get(slug='tracon2018'),
                target_event=self.event,
            )

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

            jc.required_qualifications.set([qual])

        labour_event_meta.create_groups()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.tracon2019.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.tracon2019.forms:OrganizerSignupExtraForm',
                active_from=datetime(2018, 9, 26, 12, 32, 0, tzinfo=self.tz),
                active_until=datetime(2019, 9, 8, 23, 59, 59, tzinfo=self.tz),
            ),
        )

        for wiki_space, link_title, link_group in [
            ('TERA', 'Työvoimawiki', 'accepted'),
            ('INFO', 'Infowiki', 'info'),
        ]:
            InfoLink.objects.get_or_create(
                event=self.event,
                title=link_title,
                defaults=dict(
                    url=
                    'https://atlasso.tracon.fi/crowd?next=https://confluence.tracon.fi/display/{wiki_space}'
                    .format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                ))
Example #46
0
 def setUp(self):
     self.meta, unused = LabourEventMeta.get_or_create_dummy()
     self.group = self.meta.get_group('admins')
     self.person, unused = Person.get_or_create_dummy()
Example #47
0
    def setup_labour(self):
        from core.models import Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SpecialDiet, SignupExtra, Night
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2016, 7, 1, 7, 0, tzinfo=self.tz),
            work_ends=datetime(2016, 7, 4, 16, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Kawacon <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        for pc_name, pc_slug, pc_app_label in [
            ('Conitea', 'conitea', 'labour'),
            ('Vänkäri', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

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

        for jc_data in [
            ('Conitea', 'Tapahtuman järjestelytoimikunnan eli conitean jäsen',
             [conitea]),
            ('Siisteys & Somistus',
             'Conin siistinä pitäminen, vesipisteiden täyttäminen ja conipaikan koristelu. Tehtävä ei vaadi erityisosaamista. Tämä tehtävä sopii hyvin ensikertalaisvänkäreille.',
             [tyovoima]),
            ('Logistiikka',
             'Autokuskina toimimista ja tavaroiden/ihmisten hakua ja noutamista. Tehtäviä on perjantaina ja sunnuntai-iltana. Edellyttää B-ajokorttia. Jos sinulla on oma auto ja olet valmis käyttämään sitä conissa, mainitse siitä Vapaa alue-kentässä.',
             [tyovoima]),
            ('Majoitus',
             'Majoitusvänkärit huolehtivat lattiamajoituspaikkojen pyörittämisestä yöaikaan.',
             [tyovoima]),
            ('Järjestyksenvalvonta',
             'Kävijöiden turvallisuuden valvominen conipaikalla. Edellyttää voimassa olevaa JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).',
             [tyovoima]),
            ('Ensiapu',
             'Ensiapupäivystys tapahtumapaikalla. Edellyttää voimassa olevaa ensiapukorttia (vähintään EA1).',
             [tyovoima]),
            ('Green room',
             'Työvoiman taukohuoneen hoitaminen ja kahvin keitto green roomissa. Hygieniapassin omistaminen on suositeltavaa, mutta ei välttämätöntä.',
             [tyovoima]),
            ('Keittiö & kahvio',
             'Ruuan valmistus keittiössä, sekä asiakaspalvelu kahviossa. Hygieniapassin omistaminen on suositeltavaa, mutta voit ilmoittautua kahvioon ilmankin.',
             [tyovoima]),
            ('Info ja narikka',
             'Infopisteen henkilökunta vastaa kävijöiden kysymyksiin ja ratkaisee heidän ongelmiaan tapahtuman aikana. Narikka toimii infon yhteydessä. Tehtävä edellyttää asiakaspalveluasennetta, tervettä järkeä ja ongelmanratkaisukykyä.',
             [tyovoima]),
            ('Lipunmyynti',
             'Pääsylippujen myyntiä. Myyjiltä edellytetään asiakaspalveluhenkeä, päässälaskutaitoa ja huolellisuutta rahankäsittelyssä.',
             [tyovoima]),
            ('Meido',
             'Meidokahvilassa työskentely. Asiakkaille tarjoileminen, sekä asiakkaille seuran pitäminen. Ilmoittaudu tähän tehtävään vain jos meidovastaava on hyväksynyt sinuterillishaussa. Meidohaku löytyy <a href="http://www.kawacon.info" target="_blank">Kawaconin kotisivuilta</a>.',
             [tyovoima]),
            ('Ohjelmavänkäri',
             'Tähän vänkäriryhmään tulevat salivänkärit, ohjelma-avustajat ja Kawaplayn lautapelivuokraamon vänkärit. Tehtävät eivät edellytä erikoisosaamista. Jos sinulla on kokemusta salitekniikasta, voit mainita tästä Vapaa alue-kentässä.',
             [tyovoima]),
            ('Erikoistehtävä',
             'Mikäli olet sopinut erikseen työtehtävistä ja/tai sinut on ohjeistettu täyttämään lomake, valitse tämä ja kerro tarkemmin Vapaa alue -kentässä mihin tehtävään ja kenen toimesta sinut on valittu.',
             [tyovoima]),
            ('Rakennus ja purku',
             'Conipaikan rakennus, pöytien järjestely ja raskaiden esineiden kantaminen. Tehtävät ajoittuvat perjantaille ja sunnuntai-illalle.',
             [tyovoima]),
            ('Kuvaus',
             'Valokuvaus ja coniviikonlopun ikuistaminen. Tehtävä edellyttää kameraa ja mahdollisuutta kuvien jälkikäsittelyyn. Kerro Vapaa alue-kentässä millaisen kameran omistat ja aiemmasta kuvauskokemuksestasi.',
             [tyovoima]),

                # (u'Ohjelmanpitäjä', u'Luennon tai muun vaativan ohjelmanumeron pitäjä', [ohjelma]),
        ]:
            if len(jc_data) == 3:
                name, description, pcs = jc_data
                job_names = []
            elif len(jc_data) == 4:
                name, description, pcs, job_names = jc_data
            else:
                raise ValueError("Length of jc_data must be 3 or 4")

            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                slug=slugify(name),
                defaults=dict(
                    name=name,
                    description=description,
                ))

            if created:
                job_category.personnel_classes = pcs
                job_category.save()

            for job_name in job_names:
                job, created = Job.objects.get_or_create(
                    job_category=job_category,
                    slug=slugify(job_name),
                    defaults=dict(title=job_name, ))

        labour_event_meta.create_groups()

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvonta', 'JV-kortti'),
                # (u'Green room', u'Hygieniapassi'),
            ('Ensiapu', 'Ensiapukoulutus EA1'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)
            if not jc.required_qualifications.exists():
                jc.required_qualifications = [qual]
                jc.save()

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

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.kawacon2016.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.kawacon2016.forms:OrganizerSignupExtraForm',
                active_from=datetime(2015, 12, 3, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.end_time,
            ),
        )
Example #48
0
    def handle(self, *args, **options):
        last_names = [
            'Sherman', 'Maddox', 'Montgomery', 'Small', 'Larsen', 'Marsh',
            'Gardner', 'White', 'Gill', 'Pennington', 'Stein', 'Kirby',
            'Jennings', 'French', 'Glass', 'Velasquez', 'Doyle', 'York',
            'Fisher', 'Strong', 'Henson', 'Harmon', 'Higgins', 'James',
            'Hancock', 'Drake', 'Eaton', 'Gordon', 'Harrington', 'Blevins',
            'Avila', 'Solis', 'Richmond', 'Stark', 'Haynes', 'Durham',
            'Montoya', 'Barrett', 'Chase', 'Mckay', 'Little', 'Perry',
            'Howard', 'Caldwell', 'West', 'Fox', 'Long', 'Wright', 'Foster',
            'Sloan', 'Frazier', 'Lowe', 'Cabrera', 'Barron', 'Ayala', 'Frank',
            'Hammond', 'Orr', 'Holloway', 'King', 'Rush', 'Wiley', 'Neal',
            'Davis', 'Fulton', 'Webb', 'Sanchez', 'Strickland', 'Clark',
            'Middleton', 'Moody', 'Owens', 'Graham', 'Cotton', 'Shaffer',
            'Hawkins', 'Cooper', 'Justice', 'Clarke', 'Mcconnell', 'Mccarthy',
            'Macdonald', 'Castillo', 'Gilbert', 'Horton', 'Finley', 'Beard',
            'Sanders', 'Levy', 'Richard', 'Bowen', 'Grant', 'Wilkins',
            'Ramsey', 'Lynch', 'Koch', 'Mercado', 'Roach', 'Bond', 'Lane',
            'Tanner', 'Byers', 'Humphrey', 'Austin', 'Carney', 'Golden',
            'Pope', 'Kramer', 'Ellison', 'Jefferson', 'Duffy', 'Gross',
            'Mcmahon', 'Hudson', 'Mckee', 'Atkinson', 'Bush', 'Thompson',
            'Faulkner', 'Christian', 'Ingram', 'Cannon', 'Gay', 'Nieves',
            'Hodges', 'Langley', 'Watson', 'Woods', 'Gallagher', 'Delacruz',
            'Stafford', 'Knight', 'Kerr', 'Chapman', 'Roman', 'Christensen',
            'Robles', 'Mathews', 'Waller', 'Buckley', 'Myers', 'Powers',
            'Lindsay', 'Gates', 'Miller', 'Johns', 'Morin', 'Fleming',
            'Bishop', 'Clements'
        ]
        first_names = [
            'Sarah', 'Ian', 'Upton', 'Uriah', 'Hayden', 'Zia', 'Lila',
            'Benjamin', 'Addison', 'Vivian', 'Kirby', 'Oscar', 'Demetrius',
            'Hashim', 'Michelle', 'Odessa', 'Phillip', 'Michael', 'Dante',
            'Omar', 'Dominic', 'Wing', 'Joshua', 'Charlotte', 'Thomas',
            'Aquila', 'Rana', 'Jolene', 'Felix', 'Cailin', 'Tatiana', 'Oprah',
            'Belle', 'Sydnee', 'Kuame', 'Fleur', 'Matthew', 'Sylvia', 'Mary',
            'Deborah', 'Ross', 'Hyacinth', 'Jacqueline', 'Jessica', 'Callie',
            'Ariana', 'Leo', 'Desiree', 'Lunea', 'Chava', 'Jorden', 'Rudyard',
            'Cally', 'Knox', 'Arthur', 'Dana', 'Rebekah', 'Yen', 'Hadassah',
            'Duncan', 'Ginger', 'Valentine', 'Ivana', 'Iona', 'Jemima',
            'Dorothy', 'Joan', 'Timothy', 'Amity', 'Uriel', 'Skyler', 'Phelan',
            'Alma', 'Hadley', 'Quemby', 'Sonya', 'Axel', 'Slade', 'Riley',
            'Rajah', 'Giselle', 'Selma', 'Nadine', 'Pascale', 'Carol', 'Steel',
            'Lane', 'Emi', 'Trevor', 'Wyatt', 'Claire', 'Harlan', 'Liberty',
            'Alexandra', 'Avram', 'Barbara', 'Rashad', 'Holmes', 'Kenneth',
            'Preston', 'Patience', 'Adele', 'Alfonso', 'Harrison', 'Julian',
            'Jena', 'Peter', 'Kessie', 'Katell', 'Denton', 'Piper', 'Jerry',
            'Teegan', 'Chandler', 'Walter', 'Cheryl', 'Desirae', 'Tasha',
            'Hunter', 'Logan', 'Tatyana', 'Gail', 'Galvin', 'Dara', 'Athena',
            'Kay', 'Dustin', 'Faith', 'Mariam', 'Leroy', 'Edan', 'Alexis',
            'Nissim', 'Octavia', 'Kareem', 'Heidi', 'Aspen', 'Gregory',
            'Garrison', 'Jolie', 'Gloria', 'Alec', 'Asher', 'Julie', 'Ayanna',
            'Gavin', 'Germane', 'Bertha', 'Quinn', 'Tarik'
        ]

        office_location = OfficeLocation.objects.get(pk='DC123')

        for x in xrange(int(args[0])):
            while True:
                first_name = first_names[int(random.random() *
                                             len(first_names))]
                last_name = last_names[int(random.random() * len(last_names))]
                username = last_name + first_name[0]
                email = username + '@exmaple.com'
                if not get_user_model().objects.filter(
                        username=email).exists():
                    break

            user_attr = {
                'first_name': first_name,
                'last_name': last_name,
                'is_active': True,
                'is_superuser': False,
                'date_joined': '2012-03-01T16:03:14Z',
                'password':
                '******',
                'is_staff': True,
                'email': email,
                'username': email
            }

            user = get_user_model(**user_attr)
            user.save()

            person_attr = {
                'office_location': office_location,
                'allow_tagging': True,
                'photo_file': 'avatars/default1.jpg',
                'stub': username.replace('.', ''),
                'office_phone': '5555555555',
                'user': user,
                'email_notifications': False,
                'org_group': OrgGroup.objects.order_by('?')[0]
            }

            person = Person(**person_attr)
            person.save()

        self.stdout.write('Successfully created %d users and persons' %
                          int(args[0]))
Example #49
0
    def setup_labour(self):
        from core.models import Event, Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra  # , SpecialDiet
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time.replace(hour=8,
                                                      minute=0,
                                                      tzinfo=self.tz),
            work_ends=self.event.end_time.replace(hour=23,
                                                  minute=0,
                                                  tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Ropecon 2020 -työvoimatiimi <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Conitea', 'conitea', 'labour'),
            ('Vuorovastaava', 'ylivankari', 'labour'),
            ('Ylityöntekijä', 'ylityovoima', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Guest of Honour', 'goh', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
            ('Vapaalippu', 'vapaalippu', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        if not JobCategory.objects.filter(event=self.event).exists():
            # JobCategory.copy_from_event(
            #     source_event=Event.objects.get(slug='ropecon2019'),
            #     target_event=self.event,
            # )
            for name in [
                    "Tekniikka",
                    "Studiohost",
                    "Moderaattori",
                    "Digituutori",
                    "Tekstittäjä",
                    "Paitojen paketoija",
            ]:
                job_category, created = JobCategory.objects.get_or_create(
                    event=self.event,
                    slug=slugify(name),
                    defaults=dict(
                        name=name,
                        description="",
                    ))

        labour_event_meta.create_groups()

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

        # for jc_name, qualification_name in [
        #     ('Järjestyksenvalvoja', 'JV-kortti'),
        # ]:
        #     jc = JobCategory.objects.get(event=self.event, name=jc_name)
        #     qual = Qualification.objects.get(name=qualification_name)

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.ropecon2020vd.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.ropecon2020vd.forms:OrganizerSignupExtraForm',
                active_from=now(),
                active_until=self.event.end_time,
            ),
        )
Example #50
0
    def setup_labour(self):
        from core.models import Person, Event
        from core.utils import slugify
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            JobCategory,
            LabourEventMeta,
            PersonnelClass,
            Qualification,
        )
        from ...models import SignupExtra, SpecialDiet
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time.replace(hour=8,
                                                      minute=0,
                                                      tzinfo=self.tz),
            work_ends=self.event.end_time.replace(hour=20,
                                                  minute=0,
                                                  tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email=
            'Tampere Kupliin työvoimatiimi <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        for pc_name, pc_slug, pc_app_label in [
            ('Kuplitea', 'kuplitea', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Guest of Honour', 'goh', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event,
                                              slug='tyovoima')
        kuplitea = PersonnelClass.objects.get(event=self.event,
                                              slug='kuplitea')

        if not JobCategory.objects.filter(event=self.event).exists():
            JobCategory.copy_from_event(
                source_event=Event.objects.get(slug='kuplii2019'),
                target_event=self.event,
            )

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

            jc.required_qualifications.set([qual])

        labour_event_meta.create_groups()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='kuplitea',
            defaults=dict(
                title='Kuplitean ilmoittautumislomake',
                signup_form_class_path=
                'events.kuplii2021.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.kuplii2021.forms:OrganizerSignupExtraForm',
                active_from=now(),
                active_until=self.event.end_time,
            ),
        )

        for wiki_space, link_title, link_group in [
            ('KUPLIIWORK', 'Työvoimawiki', 'accepted'),
        ]:
            InfoLink.objects.get_or_create(
                event=self.event,
                title=link_title,
                defaults=dict(
                    url='https://confluence.tracon.fi/display/{wiki_space}'.
                    format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                ))
Example #51
0
    def setup_labour(self):
        from core.models import Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra, SpecialDiet, Night
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time - timedelta(days=1),
            work_ends=self.event.end_time + timedelta(hours=4),
            admin_group=labour_admin_group,
            contact_email='Mimiconin työvoimavastaava <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Conitea', 'conitea', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event,
                                              slug='tyovoima')
        conitea = PersonnelClass.objects.get(event=self.event, slug='conitea')

        if not JobCategory.objects.filter(event=self.event).exists():
            for jc_data in [
                ("Conitea",
                 "Tapahtuman conitean eli järjestelytoimikunnan jäsen.",
                 [conitea]),
                ("Erikoistehtävä",
                 "Mikäli olet sopinut erikseen työtehtävistä ja/tai sinut on ohjeistettu täyttämään lomake, valitse tämä ja kerro tarkemmin Vapaa alue -kentässä mihin tehtävään ja kenen toimesta sinut on valittu.",
                 [tyovoima]),
                ("Järjestyksenvalvoja",
                 "Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi > Pätevyydet).",
                 [tyovoima]),
                ("Ensiapu",
                 "Tapahtuman ensiapupisteellä avustaminen. Edellyttää voimassa olevaa EA1-korttia. EA2-kortti luonnollisesti plussaa. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole täyttänyt tietoihisi EA1-korttisi numeroa (oikealta ylhäältä oma nimesi > Pätevyydet)",
                 [tyovoima]),
                ("Info",
                 "Infopisteen henkilökunta vastaa kävijöiden kysymyksiin ja ratkaisee heidän ongelmiaan tapahtuman aikana. Tehtävä edellyttää asiakaspalveluasennetta, tervettä järkeä ja ongelmanratkaisukykyä. Mimiconissa infon tehtäviin kuuluu hiljaisina hetkinä myös kevyttä yleisvänkäröintiä, joihin saat tapahtumapaikalla lisäohjeita.",
                 [tyovoima]),
                ("Lipunmyynti",
                 "Lipuntarkastajana hoidat e-lippujen vaihtoa rannekkeiksi, sekä mahdollisesti lippujen myyntiä ovelta. Tehtävä edellyttää asiakaspalveluasennetta ja rahankäsittelytaitoja.",
                 [tyovoima]),
                ("Narikka",
                 "Narikassa säilytetään tapahtuman aikana kävijöiden omaisuutta. Tehtävä ei vaadi erikoisosaamista.",
                 [tyovoima]),
                ("Ohjelma-avustaja",
                 "Luennoitsijoiden ja muiden ohjelmanpitäjien avustamista ohjelmanumeroiden yhteydessä. He pitävät huolen, että ohjelmat alkavat ja loppuvat ajallaan ja että ohjelmanjärjestäjillä on kaikki mitä he tarvitsevat salissa.",
                 [tyovoima]),
                ("Siivous",
                 "Siivousvänkärit ovat vastuussa tapahtuman yleisestä siisteydestä. He kulkevat ympäriinsä tehtävänään roskakorien tyhjennys, vesipisteiden täyttö, vessoihin papereiden lisääminen ja monet muut pienet askareet.",
                 [tyovoima]),
                ("Majoitusvalvoja",
                 "Majoitusvalvojat vahtivat väsyneiden kävijöiden ja vänkäreiden unta majoituskoululla. Tehtävässä työskennellään yöllä, joten se edellyttää 18-vuoden ikää.",
                 [tyovoima]),
                ("Kirpputori",
                 "Kirpputorilla vastaanotat kävijöiden myyntiin tuomia tuotteita, ja myyt ne eteenpäin uusille omistajille. Kaikista myynneistä pidetään kirjanpitoa. Tehtävä edellyttää asiakaspalveluasennetta, tarkkuutta ja rahankäsittelytaitoja.",
                 [tyovoima]),
                ("Pelihuone",
                 "Pelihuoneella avustat ja valvot kävijöitä. Tehtävä ei vaadi erikoisosaamista.",
                 [tyovoima]),
                ("Green room",
                 "Green roomissa valmistetaan nälkäisille vänkäreille sekä kevyttä välipalaa että ruokaa. Green roomissa työskentelevät huolehtivat myös tilan siisteydestä. Tehtävä edellyttää hygieniapassia.",
                 [tyovoima]),
                ("Kasaus ja purku",
                 "Mimiconia kasataan tapahtumaa edeltävänä perjantaina, ja puretaan sunnuntaina ovien sulkeuduttua. Jos siis olet paikalla, tervetuloa mukaan! Tehtävä ei vaadi erikoisosaamista.",
                 [tyovoima]),
            ]:
                if len(jc_data) == 3:
                    name, description, pcs = jc_data
                    job_names = []
                elif len(jc_data) == 4:
                    name, description, pcs, job_names = jc_data
                else:
                    raise ValueError("Length of jc_data must be 3 or 4")

                job_category, created = JobCategory.objects.get_or_create(
                    event=self.event,
                    slug=slugify(name),
                    defaults=dict(
                        name=name,
                        description=description,
                    ))

                if created:
                    job_category.personnel_classes = pcs
                    job_category.save()

                for job_name in job_names:
                    job, created = Job.objects.get_or_create(
                        job_category=job_category,
                        slug=slugify(job_name),
                        defaults=dict(title=job_name, ))

        labour_event_meta.create_groups()

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
            ('Ensiapu', 'Ensiapukoulutus EA1'),
                # ('Logistiikka', u'Henkilöauton ajokortti (B)'),
            ('Green room', 'Hygieniapassi'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)
            if not jc.required_qualifications.exists():
                jc.required_qualifications = [qual]
                jc.save()

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

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.mimicon2018.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.mimicon2018.forms:OrganizerSignupExtraForm',
                active_from=datetime(2018, 4, 2, 12, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
            ),
        )

        for wiki_space, link_title, link_group in [
                # ('MIMIWORK', 'Työvoimawiki', 'accepted'),
                # ('MIMINFO', 'Infowiki', 'info'),
        ]:
            InfoLink.objects.get_or_create(
                event=self.event,
                title=link_title,
                defaults=dict(
                    url='https://confluence.tracon.fi/display/{wiki_space}'.
                    format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                ))
Example #52
0
    def setup_labour(self):
        from core.models import Event, Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            JobCategory,
            LabourEventMeta,
            PersonnelClass,
            Qualification,
        )
        from ...models import SignupExtra, SpecialDiet
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time.replace(hour=9, tzinfo=self.tz),
            work_ends=self.event.end_time,
            admin_group=labour_admin_group,
            contact_email='Hypecon <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        for pc_name, pc_slug, pc_app_label in [
            ('Conitea', 'conitea', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            # ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            # ('Media', 'media', 'badges'),
            # ('Myyjä', 'myyja', 'badges'),
            # ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima')
        conitea = PersonnelClass.objects.get(event=self.event, slug='conitea')

        for name, description, pcs in [
            (
                'Conitea',
                'Tapahtuman järjestelytoimikunnan eli conitean jäsen',
                [conitea]
            ),
            (
                'Järjestyksenvalvoja',
                'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa '
                'JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole '
                'täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).',
                [tyovoima]
            ),
        ]:
            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                slug=slugify(name),
                defaults=dict(
                    name=name,
                    description=description,
                )
            )

            if created:
                job_category.personnel_classes.set(pcs)

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

            jc.required_qualifications.set([qual])

        labour_event_meta.create_groups()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path='events.hypecon2020.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.hypecon2020.forms:OrganizerSignupExtraForm',
                active_from=now(),
                active_until=self.event.start_time,
            ),
        )

        for wiki_space, link_title, link_group in [
            # ('HYPEWORK', 'Työvoimawiki', 'accepted'),
            # ('HYPEINFO', 'Infowiki', 'info'),
        ]:
            InfoLink.objects.get_or_create(
                event=self.event,
                title=link_title,
                defaults=dict(
                    url='https://confluence.tracon.fi/display/{wiki_space}'.format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                )
            )
Example #53
0
    def setup_labour(self):
        from core.models import Person, Event
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SpecialDiet, SignupExtra, Night, Shift
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2017, 6, 30, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2017, 7, 3, 16, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Kawacon <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        for pc_name, pc_slug, pc_app_label in [
            ('Conitea', 'conitea', 'labour'),
            ('Vänkäri', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        if not JobCategory.objects.filter(event=self.event).exists():
            JobCategory.copy_from_event(
                source_event=Event.objects.get(slug='kawacon2016'),
                target_event=self.event
            )

        labour_event_meta.create_groups()

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

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path='events.kawacon2017.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.kawacon2017.forms:OrganizerSignupExtraForm',
                active_from=datetime(2017, 3, 15, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.end_time,
            ),
        )

        for shift_name in [
            'Perjantaina',
            'Lauantaina',
            'Sunnuntaina',
            'Sunnuntai-iltana ja maanantaina',
        ]:
            Shift.objects.get_or_create(name=shift_name)
Example #54
0
    def setup_labour(self):
        from core.models import Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra, SpecialDiet
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2019, 7, 26, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2019, 7, 28, 23, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Ropecon 2019 -työvoimatiimi <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Conitea', 'conitea', 'labour'),
            ('Vuorovastaava', 'ylivankari', 'labour'),
            ('Ylityöntekijä', 'ylityovoima', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Guest of Honour', 'goh', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
            ('Vapaalippu', 'vapaalippu', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event,
                                              slug='tyovoima')
        ylityovoima = PersonnelClass.objects.get(event=self.event,
                                                 slug='ylityovoima')
        conitea = PersonnelClass.objects.get(event=self.event, slug='conitea')
        ylivankari = PersonnelClass.objects.get(event=self.event,
                                                slug='ylivankari')
        ohjelma = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        if not JobCategory.objects.filter(event=self.event).exists():
            for jc_data in [
                ('Conitea',
                 'Tapahtuman järjestelytoimikunnan eli conitean jäsen',
                 [conitea]),
                ('Erikoistehtävä',
                 'Mikäli olet sopinut erikseen työtehtävistä ja/tai sinut on ohjeistettu täyttämään lomake, valitse tämä ja kerro tarkemmin Vapaa alue -kentässä mihin tehtävään ja kenen toimesta sinut on valittu.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('jv', 'Järjestyksenvalvoja',
                 'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).',
                 [tyovoima, ylityovoima, ylivankari]),
                ('kasaus', 'Kasaus ja purku',
                 'Kalusteiden siirtelyä & opasteiden kiinnittämistä. Ei vaadi erikoisosaamista. Työvuoroja vain perjantaina 8-16 ja sunnuntaina 15-22.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('logistiikka', 'Logistiikka',
                 'Tavaroiden roudaamista ja pakettiauton ajamista. Pääosa työvuoroista ajoittuu pe 8-16 ja su 15-22 väliselle ajalle.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('majoitus', 'Majoitusvalvoja',
                 'Huolehtivat lattiamajoituspaikkojen pyörittämisestä.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('lastenhoito', 'Lastenhoitohuone',
                 'Valvovat lastenhoitohuoneen toimintaa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('takahuone', 'Takahuone', 'Pyörittävät takahuonetta.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('kaato', 'Kaato',
                 'Hoitavat kaadon. Tämän työpisteen toiminta tapahtuu kokonaisuudessaan conin jälkeisenä maanantaina ja osin tiistaiaamuna.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('lipunmyynti', 'Lipunmyynti',
                 'Pääsylippujen myyntiä sekä lippujen tarkastamista. Myyjiltä edellytetään täysi-ikäisyyttä, asiakaspalveluhenkeä ja huolellisuutta rahankäsittelyssä.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('myyntituote', 'Myyntitiski',
                 'Ropecon-oheistuotteiden myyntiä. Myyjiltä edellytetään täysi-ikäisyyttä, asiakaspalveluhenkeä ja huolellisuutta rahankäsittelyssä.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('kirpputori', 'Kirpputori',
                 'Kävijöiden tuomien kirppistuotteiden myyntiä. Myyjiltä edellytetään täysi-ikäisyyttä, asiakaspalveluhenkeä ja huolellisuutta rahankäsittelyssä.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('narikka', 'Narikka', 'Narikka, duh.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('ohjelmajuoksija', 'Ohjelmajuoksija',
                 'Avustaa ohjelmanjärjestäjiä salitekniikan ja ohjelmanumeron käynnistämisessä.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('info', 'Info',
                 'Infopisteen henkilökunta vastaa kävijöiden kysymyksiin ja ratkaisee heidän ongelmiaan tapahtuman paikana. Tehtävä edellyttää asiakaspalveluasennetta, tervettä järkeä ja ongelmanratkaisukykyä.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('figutiski', 'Figutiski',
                 'Figupelien infotiski opastaa kävijöitä ja turnausjärjestäjiä erityisesti figuturnauksiin liittyvissä asioissa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('korttitiski', 'Korttitiski',
                 'Korttipelien infotiski opastaa kävijöitä ja turnausjärjestäjiä erityisesti korttiturnauksiin liittyvissä asioissa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('larptiski', 'Larppitiski',
                 'Larppien infotiski opastaa kävijöitä ja larppien järjestäjiä larppeihin liittyvissä asioissa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('ropetiski', 'Ropetiski',
                 'Roolipelien infotiski opastaa kävijöitä ja GM:iä roolipeleihin liittyvissä asioissa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('kp', 'Kokemuspiste',
                 'Kokemuspisteen infotiski opastaa kävijöitä kokemuspisteeseen liittyvissä asioissa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('kpharraste', 'Kokemuspisteen harraste-esittelijä',
                 'Kokemuspisteen harraste-esittelijät esittelevät jotain tiettyä peliä ja auttavat sen pelaamisessa.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('imp', 'International Meeting Point',
                 'Ulkomaalaisten kävijöiden auttamista International Meeting Pointilla. Vähintään yhden vieraan kielen sujuva taito vaatimuksena.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('tekniikka', 'Tekniikka',
                 'Tieto- ja/tai AV-tekniikan rakentamista, ylläpitoa ja purkamista.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('taltiointi', 'Taltiointi', 'Ohjelmanumeroiden taltiointia.',
                 [tyovoima, ylityovoima, ylivankari]),
                ('ohjelma', 'Ohjelmanjärjestäjä',
                 'Luennon tai muun vaativan ohjelmanumeron pitäjä', [ohjelma]),
                ('pj', 'Pelinjohtaja', 'Roolipelien tai larppien järjestäjä',
                 [ohjelma]),
                ('peli', 'Pelinjärjestäjä',
                 'Muiden kuin roolipelien tai larppien järjestäjä', [ohjelma]),
            ]:
                if len(jc_data) == 3:
                    name, description, pcs = jc_data
                    slug = slugify(name)
                elif len(jc_data) == 4:
                    slug, name, description, pcs = jc_data

                job_category, created = JobCategory.objects.get_or_create(
                    event=self.event,
                    slug=slug,
                    defaults=dict(
                        name=name,
                        description=description,
                    ))

                if created:
                    job_category.personnel_classes.set(pcs)

        labour_event_meta.create_groups()

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

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.ropecon2019.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.ropecon2019.forms:OrganizerSignupExtraForm',
                active_from=datetime(2019, 2, 24, 12, 0, 0, tzinfo=self.tz),
                active_until=datetime(2019, 7, 19, 23, 59, 59, tzinfo=self.tz),
            ),
        )
Example #55
0
    def setup_labour(self):
        from core.models import Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=self.event.start_time - timedelta(days=1),
            work_ends=self.event.end_time + timedelta(hours=4),
            admin_group=labour_admin_group,
            contact_email=
            'Popcult Helsingin työvoimavastaava <*****@*****.**>',
        )

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

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

        for pc_name, pc_slug, pc_app_label in [
            ('Vastaava', 'vastaava', 'labour'),
            ('Työvoima', 'tyovoima', 'labour'),
            ('Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            ('Media', 'media', 'badges'),
            ('Myyjä', 'myyja', 'badges'),
            ('Vieras', 'vieras', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event,
                                              slug='tyovoima')
        vastaava = PersonnelClass.objects.get(event=self.event,
                                              slug='vastaava')

        for jc_data in [
            ('Vastaava', 'Tapahtuman järjestelytoimikunnan jäsen eli vastaava',
             [vastaava]),
            ('Järjestyksenvalvoja',
             'Järjestyksenvalvojan tehtäviin kuuluvat lippujen tarkistus, kulunvalvonta sekä ihmisten ohjaus. Tehtävään vaaditaan JV-kortti.',
             [tyovoima]),
        ]:
            if len(jc_data) == 3:
                name, description, pcs = jc_data
                job_names = []
            elif len(jc_data) == 4:
                name, description, pcs, job_names = jc_data
            else:
                raise ValueError("Length of jc_data must be 3 or 4")

            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                slug=slugify(name),
                defaults=dict(
                    name=name,
                    description=description,
                ))

            if created:
                job_category.personnel_classes = pcs
                job_category.save()

            for job_name in job_names:
                job, created = Job.objects.get_or_create(
                    job_category=job_category,
                    slug=slugify(job_name),
                    defaults=dict(title=job_name, ))

        labour_event_meta.create_groups()

        JobCategory.objects.filter(event=self.event,
                                   slug='vastaava').update(public=False)

        for jc_name, qualification_name in [
            ('Järjestyksenvalvoja', 'JV-kortti'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)
            if not jc.required_qualifications.exists():
                jc.required_qualifications = [qual]
                jc.save()

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='vastaava',
            defaults=dict(
                title='Vastaavien ilmoittautumislomake',
                signup_form_class_path=
                'events.popcult2017.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.popcult2017.forms:OrganizerSignupExtraForm',
                active_from=datetime(2017, 1, 12, 0, 0, 0, tzinfo=self.tz),
                active_until=self.event.start_time,
            ),
        )
Example #56
0
    def setup_labour(self):
        from core.models import Person
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            Job,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Qualification,
            WorkPeriod,
        )
        from ...models import SignupExtra, SpecialDiet, Night
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            from core.models import Person
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2015, 7, 10, 12, 0, tzinfo=self.tz),
            work_ends=datetime(2015, 7, 12, 22, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Animeconin työvoimatiimi <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            # TODO once we know when the registration opens
            # labour_event_meta_defaults.update(
            #     registration_opens=datetime(2014, 3, 1, 0, 0, tzinfo=self.tz),
            #     registration_closes=datetime(2014, 8, 1, 0, 0, tzinfo=self.tz),
            # )
            pass

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

        for pc_name, pc_slug, pc_app_label in [
            (u'Conitea', 'conitea', 'labour'),
            (u'Työvoima', 'tyovoima', 'labour'),
            (u'Järjestyksenvalvoja', 'jv', 'labour'),
            (u'Ohjelmanjärjestäjä', 'ohjelma', 'programme'),
            (u'Kunniavieras', 'goh', 'programme'), # tervetullut muttei kutsuta automaattiviestillä
            (u'Tulkki', 'tulkki', 'labour'),
            (u'Media', 'media', 'badges'),
            (u'Myyjä', 'myyja', 'badges'),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

        tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima')
        jv = PersonnelClass.objects.get(event=self.event, slug='jv')
        conitea = PersonnelClass.objects.get(event=self.event, slug='conitea')
        ohjelma = PersonnelClass.objects.get(event=self.event, slug='ohjelma')

        for name, description, pcs in [
            (u'Conitea', u'Tapahtuman järjestelytoimikunnan eli conitean jäsen', [conitea]),

            (u'Narikka', u'Narikassa ja isotavara- eli asenarikassa säilytetään tapahtuman aikana kävijöiden omaisuutta. Tehtävä ei vaadi erikoisosaamista.', [tyovoima]),
            (u'Info', u'Infopisteen henkilökunta vastaa kävijöiden kysymyksiin ja ratkaisee heidän ongelmiaan tapahtuman paikana. Tehtävä edellyttää asiakaspalveluasennetta, tervettä järkeä ja ongelmanratkaisukykyä.', [tyovoima]),
            (u'Siivous', u'Tapahtumapaikan siistinä pitäminen tapahtuman aikana.', [tyovoima]),
            (u'Yleisvänkäri', u'Sekalaisia tehtäviä laidasta laitaan, jotka eivät vaadi erikoisosaamista. Voit halutessasi kirjata lisätietoihin, mitä osaat ja haluaisit tehdä.', [tyovoima]),
            (u'Majoitusvalvoja', u'Huolehtivat lattiamajoituspaikkojen pyörittämisestä yöaikaan. Työvuoroja myös molempina öinä.', [tyovoima]),
            (u'Myynti', u'Pääsylippujen myyntiä sekä lippujen tarkastamista. Myyjiltä edellytetään täysi-ikäisyyttä, asiakaspalveluhenkeä ja huolellisuutta rahankäsittelyssä. Vuoroja myös perjantaina.', [tyovoima]),
            (u'Green room', u'Työvoiman ruokahuolto green roomissa. Hygieniapassi suositeltava.', [tyovoima]),
            (u'Kirjasto', u'Mangakirjaston virkailijana toimimista.', [tyovoima]),
            (u'Ohjelma-avustaja', u'Lautapelien pyörittämistä, karaoken valvontaa, cosplay-kisaajien avustamista. Kerro Vapaa alue -kohdassa tarkemmin, mitä haluaisit tehdä. Huom! Puheohjelmasalien vänkäreiltä toivotaan AV-tekniikan osaamista.', [tyovoima]),
            (u'Kasaus ja purku', u'Kalusteiden siirtelyä & opasteiden kiinnittämistä. Ei vaadi erikoisosaamista. Työvuoroja myös jo pe sekä su conin sulkeuduttua, kerro lisätiedoissa jos voit osallistua näihin.', [tyovoima]),
            (u'Järjestyksenvalvoja', u'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. Edellyttää voimassa olevaa JV-korttia ja asiakaspalveluasennetta. HUOM! Et voi valita tätä tehtävää hakemukseesi, ellet ole täyttänyt tietoihisi JV-kortin numeroa (oikealta ylhäältä oma nimesi &gt; Pätevyydet).', [jv]),
            (u'Kortiton järjestyksenvalvoja', u'Kävijöiden turvallisuuden valvominen conipaikalla ja yömajoituksessa. HUOM! Tähän tehtävään hakeminen edellyttää henkilötunnuksen syöttämistä sille varattuun kenttään.', [jv]),

            (u'Erikoistehtävä', u'Mikäli olet sopinut erikseen työtehtävistä ja/tai sinut on ohjeistettu täyttämään lomake, valitse tämä ja kerro tarkemmin Vapaa alue -kentässä mihin tehtävään ja kenen toimesta sinut on valittu.', [tyovoima]),

            (u'Ohjelmanpitäjä', u'Luennon tai muun vaativan ohjelmanumeron pitäjä', [ohjelma]),
        ]:
            job_category, created = JobCategory.objects.get_or_create(
                event=self.event,
                name=name,
                defaults=dict(
                    description=description,
                    slug=slugify(name),
                )
            )

            if created:
                job_category.personnel_classes = pcs
                job_category.save()

        labour_event_meta.create_groups()

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

        for jc_name, qualification_name in [
            (u'Järjestyksenvalvoja', u'JV-kortti'),
            # (u'Green room', u'Hygieniapassi'),
        ]:
            jc = JobCategory.objects.get(event=self.event, name=jc_name)
            qual = Qualification.objects.get(name=qualification_name)

        # TODO
        period_length = timedelta(hours=8)
        for period_description, period_start in [
            ("Perjantain kasaus (pe klo 12–21)", None),
            ("Lauantain aamuvuoro (la klo 08–14)", None),
            ("Lauantain iltapäivävuoro (la klo 14–20)", None),
            ("Lauantain iltavuoro (la klo 20–02)", None),
            ("Lauantai–sunnuntai-yövuoro (su klo 02–08)", None),
            ("Sunnuntain aamuvuoro (su klo 08–14)", None),
            ("Sunnuntain iltapäivävuoro ja purku (su klo 14–20)", None),
        ]:
            WorkPeriod.objects.get_or_create(
                event=self.event,
                description=period_description,
                defaults=dict(
                    start_time=period_start,
                    end_time=(period_start + period_length) if period_start else None,
                )
            )

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

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug=u'conitea',
            defaults=dict(
                title=u'Conitean ilmoittautumislomake',
                signup_form_class_path='events.animecon2015.forms:OrganizerSignupForm',
                signup_extra_form_class_path='events.animecon2015.forms:OrganizerSignupExtraForm',
                active_from=datetime(2015, 3, 3, 18, 0, 0, tzinfo=self.tz),
                active_until=datetime(2015, 11, 22, 23, 59, 59, tzinfo=self.tz),
            ),
        )

        for wiki_space, link_title, link_group in [
            ('ACONWORK', 'Työvoimawiki', 'accepted'),
        ]:
            InfoLink.objects.get_or_create(
                event=self.event,
                title=link_title,
                defaults=dict(
                    url='https://confluence.tracon.fi/display/{wiki_space}'.format(wiki_space=wiki_space),
                    group=labour_event_meta.get_group(link_group),
                )
            )
Example #57
0
    def handle(self, *args, **options):
        if settings.DEBUG:
            print('Setting up tracon9 in test mode')
        else:
            print('Setting up tracon9 in production mode')

        tz = tzlocal()

        #
        # Core
        #

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

        #
        # Labour
        #

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

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

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

        if settings.DEBUG:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            labour_event_meta_defaults.update(
                registration_opens=datetime(2014, 3, 1, 0, 0, tzinfo=tz),
                registration_closes=datetime(2014, 8, 1, 0, 0, tzinfo=tz),
            )

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

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

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

        labour_event_meta.create_groups()

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

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

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

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

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

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

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

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

        #
        # Programme
        #

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

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

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

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

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

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

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

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

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

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

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

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

        #
        # Tickets
        #

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

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

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

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

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

            return limit_group

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

        ordering.counter = 0

        for product_info in [
                dict(
                    name='Koko viikonlopun lippu (e-lippu)',
                    description=
                    'Voimassa koko viikonlopun ajan la klo 10 - su klo 18. Toimitetaan sähköpostitse PDF-tiedostona. Ei toimituskuluja.',
                    limit_groups=[
                        limit_group('Lauantain liput', 5000),
                        limit_group('Sunnuntain liput', 5000),
                    ],
                    price_cents=1800,
                    requires_shipping=False,
                    electronic_ticket=True,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Koko viikonlopun lippu (postitse)',
                    description=
                    'Voimassa koko viikonlopun ajan la klo 10 - su klo 18. Toimitetaan kirjeenä kotiisi. Toimituskulut 1,00 €/tilaus.',
                    limit_groups=[
                        limit_group('Lauantain liput', 5000),
                        limit_group('Sunnuntain liput', 5000),
                    ],
                    price_cents=1800,
                    requires_shipping=True,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Lauantailippu (e-lippu)',
                    description=
                    'Voimassa koko lauantaipäivän ajan la klo 10 - su klo 08. Toimitetaan sähköpostitse PDF-tiedostona. Ei toimituskuluja.',
                    limit_groups=[
                        limit_group('Lauantain liput', 5000),
                    ],
                    price_cents=1200,
                    requires_shipping=False,
                    electronic_ticket=True,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Lauantailippu (postitse)',
                    description=
                    'Voimassa koko lauantaipäivän ajan la klo 10 - su klo 08. Toimitetaan kirjeenä kotiisi. Toimituskulut 1,00 €/tilaus.',
                    limit_groups=[
                        limit_group('Lauantain liput', 5000),
                    ],
                    price_cents=1200,
                    requires_shipping=True,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Sunnuntailippu (e-lippu)',
                    description=
                    'Voimassa koko sunnuntai ajan su klo 00 - su klo 18. Toimitetaan sähköpostitse PDF-tiedostona. Ei toimituskuluja.',
                    limit_groups=[
                        limit_group('Sunnuntain liput', 5000),
                    ],
                    price_cents=1000,
                    requires_shipping=False,
                    electronic_ticket=True,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Sunnuntailippu (postitse)',
                    description=
                    'Voimassa koko sunnuntai ajan su klo 00 - su klo 18. Toimitetaan kirjeenä kotiisi. Toimituskulut 1,00 €/tilaus.',
                    limit_groups=[
                        limit_group('Sunnuntain liput', 5000),
                    ],
                    price_cents=1000,
                    requires_shipping=True,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Lattiamajoitus 2 yötä pe-su (Aleksanterin koulu)',
                    description=
                    'Lattiamajoituspaikka pe-la ja la-su välisiksi öiksi Aleksanterin koululta. Majoituspaikasta ei tule erillistä lippua, vaan majoitus toimii nimilistaperiaatteella. Majoituspaikoista ei aiheudu toimituskuluja. Saat lisäohjeita majoituksesta sähköpostiisi ennen tapahtumaa.',
                    limit_groups=[
                        limit_group('Lattiamajoitus pe-la, Aleksanterin koulu',
                                    80),
                        limit_group('Lattiamajoitus la-su, Aleksanterin koulu',
                                    130),
                    ],
                    price_cents=2000,
                    requires_shipping=False,
                    available=True,
                    ordering=ordering()),
                dict(
                    name='Lattiamajoitus 1 yö la-su (Amurin koulu)',
                    description=
                    'Lattiamajoituspaikka lauantain ja sunnuntain väliseksi yöksi Amurin koululta. Majoituspaikasta ei tule erillistä lippua, vaan majoitus toimii nimilistaperiaatteella. Majoituspaikoista ei aiheudu toimituskuluja. Saat lisäohjeita majoituksesta sähköpostiisi ennen tapahtumaa.',
                    limit_groups=[
                        limit_group('Lattiamajoitus la-su, Amurin koulu', 250),
                    ],
                    price_cents=1000,
                    requires_shipping=False,
                    available=True,
                    ordering=ordering()),
        ]:
            name = product_info.pop('name')
            limit_groups = product_info.pop('limit_groups')
            product, unused = Product.objects.get_or_create(
                event=event, name=name, defaults=product_info)
            if not product.limit_groups.exists():
                product.limit_groups = limit_groups
                product.save()

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

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

        BadgesEventMeta.objects.get_or_create(
            event=event, defaults=dict(admin_group=badge_admin_group, ))

        if False:  # Disabled -- where has "Template" gone?
            for template_name in [
                    'Conitea',
                    'Ylivänkäri',
                    'Työvoima',
                    'Ohjelmanjärjestäjä',
                    'Media',
                    'Myyjä',
                    'Vieras',
                    'Guest of Honour',
                    'Viikonloppulippu',
                    'Lauantailippu',
                    'Sunnuntailippu',
            ]:
                Template.objects.get_or_create(
                    event=event,
                    slug=slugify(template_name),
                    defaults=dict(name=template_name),
                )
Example #58
0
    def test_event_adminship_superuser(self):
        person, unused = Person.get_or_create_dummy(superuser=True)
        labour_event_meta, unused = LabourEventMeta.get_or_create_dummy()

        assert labour_event_meta.is_user_admin(person.user)
Example #59
0
    def setup_labour(self):
        from core.models import Person, Event
        from labour.models import (
            AlternativeSignupForm,
            InfoLink,
            JobCategory,
            LabourEventMeta,
            Perk,
            PersonnelClass,
            Survey,
        )
        from ...models import SignupExtra, Night, GODWorkshopChoice
        from django.contrib.contenttypes.models import ContentType

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

        if self.test:
            person, unused = Person.get_or_create_dummy()
            labour_admin_group.user_set.add(person.user)

        content_type = ContentType.objects.get_for_model(SignupExtra)

        labour_event_meta_defaults = dict(
            signup_extra_content_type=content_type,
            work_begins=datetime(2017, 9, 8, 8, 0, tzinfo=self.tz),
            work_ends=datetime(2017, 9, 10, 22, 0, tzinfo=self.tz),
            admin_group=labour_admin_group,
            contact_email='Traconin työvoimatiimi <*****@*****.**>',
        )

        if self.test:
            t = now()
            labour_event_meta_defaults.update(
                registration_opens=t - timedelta(days=60),
                registration_closes=t + timedelta(days=60),
            )
        else:
            pass

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

        self.afterparty_perk, unused = Perk.objects.get_or_create(
            event=self.event,
            slug='kaatajaiset',
            defaults=dict(name='Kaatajaiset', ),
        )

        fmh = PersonnelClass.objects.filter(event=self.event,
                                            slug='ylivankari')
        if fmh.exists():
            fmh.update(name='Vuorovastaava', slug='vuorovastaava')

        for pc_name, pc_slug, pc_app_label, pc_afterparty in [
            ('Coniitti', 'coniitti', 'labour', True),
            ('Duniitti', 'duniitti', 'labour', True),
            ('Vuorovastaava', 'vuorovastaava', 'labour', True),
            ('Työvoima', 'tyovoima', 'labour', True),
            ('Ohjelma', 'ohjelma', 'programme', True),
            ('Ohjelma 2. luokka', 'ohjelma-2lk', 'programme', False),
            ('Ohjelma 3. luokka', 'ohjelma-3lk', 'programme', False),
            ('Guest of Honour', 'goh', 'programme',
             False),  # tervetullut muttei kutsuta automaattiviestillä
            ('Media', 'media', 'badges', False),
            ('Myyjä', 'myyja', 'badges', False),
            ('Vieras', 'vieras', 'badges', False),
        ]:
            personnel_class, created = PersonnelClass.objects.get_or_create(
                event=self.event,
                slug=pc_slug,
                defaults=dict(
                    name=pc_name,
                    app_label=pc_app_label,
                    priority=self.get_ordering_number(),
                ),
            )

            if pc_afterparty and created:
                personnel_class.perks = [self.afterparty_perk]
                personnel_class.save()

        if not JobCategory.objects.filter(event=self.event).exists():
            JobCategory.copy_from_event(
                source_event=Event.objects.get(slug='tracon11'),
                target_event=self.event,
                remap_personnel_classes=dict(conitea='coniitti'))

        god_jc, created = JobCategory.objects.get_or_create(
            event=self.event,
            slug='god',
            defaults=dict(
                name='Peliä pyynnöstä',
                description=
                'Peliä pyynnöstä -pisteen pelauttaja ja/tai sisäänheittäjä',
            ),
        )
        if created:
            god_jc.personnel_classes = PersonnelClass.objects.filter(
                event=self.event, slug='tyovoima')
            god_jc.save()

        labour_event_meta.create_groups()

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

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='conitea',
            defaults=dict(
                title='Conitean ilmoittautumislomake',
                signup_form_class_path=
                'events.tracon2017.forms:OrganizerSignupForm',
                signup_extra_form_class_path=
                'events.tracon2017.forms:OrganizerSignupExtraForm',
                active_from=datetime(2016, 10, 18, 15, 5, 0, tzinfo=self.tz),
                active_until=datetime(2017, 9, 10, 23, 59, 59, tzinfo=self.tz),
            ),
        )

        AlternativeSignupForm.objects.get_or_create(
            event=self.event,
            slug='god',
            defaults=dict(
                title='Ilmoittautuminen Peliä pyynnöstä -pelinjohtajaksi',
                signup_form_class_path='events.tracon2017.forms:GODSignupForm',
                signup_extra_form_class_path=
                'events.tracon2017.forms:GODSignupExtraForm',
                active_from=datetime(2017, 7, 18, 15, 5, 0, tzinfo=self.tz),
                active_until=datetime(2017, 9, 10, 23, 59, 59, tzinfo=self.tz),
            ),
        )

        for god_choice_name in [
                'Livenä Tampereella',
                'Internetissä',
        ]:
            GODWorkshopChoice.objects.get_or_create(name=god_choice_name)

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

        Survey.objects.get_or_create(
            event=self.event,
            slug='tyovuorotoiveet',
            defaults=dict(
                title='Työvuorotoiveet',
                description=
                ('Tässä vaiheessa voit vaikuttaa työvuoroihisi. Jos saavut tapahtumaan vasta sen alkamisen '
                 'jälkeen tai sinun täytyy lähteä ennen tapahtuman loppumista, kerro se tässä. Lisäksi jos '
                 'tiedät ettet ole käytettävissä tiettyihin aikoihin tapahtuman aikana tai haluat esimerkiksi '
                 'nähdä jonkun ohjelmanumeron, kerro siitäkin. Työvuorotoiveiden toteutumista täysin ei voida '
                 'taata.'),
                form_class_path='events.tracon2017.forms:ShiftWishesSurvey',
                active_from=datetime(2017, 7, 3, 18, 50, 0, tzinfo=self.tz),
                active_until=datetime(2017, 8, 4, 23, 59, 59, tzinfo=self.tz),
            ),
        )