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
def test_generating_slug(self): person = Person(name='Charles Babbage') person.save() self.assertEqual( person.slug, 'charles-babbage', )
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
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()
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))
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)
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]))
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())
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), )
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()
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)
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)
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)
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, )
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, )
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, )
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
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, )
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
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
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, )
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()
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', ))
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)
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
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)
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', ) )
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
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, )
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())
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
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)
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())
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, )
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
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)
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 > 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), ))
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 > 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. ' ), ), )
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. ' ), ), )
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, ), )
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)
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, ), )
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), ))
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()
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 > 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, ), )
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]))
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, ), )
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), ))
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), ))
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 > 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), ) )
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)
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 > 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), ), )
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, ), )
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 > 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), ) )
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 > 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), )
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)
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), ), )