def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not self.href: self.href = slugify(self.title) else: self.href = slugify(self.href) self.url = self.get_absolute_url() super(Page, self).save()
def tickets_admin_accommodation_view(request, vars, event, limit_group_id=None): if limit_group_id is not None: limit_group_id = int(limit_group_id) limit_group = get_object_or_404(LimitGroup, id=limit_group_id, event=event) query = Q( # Belongs to the selected night and school limit_groups=limit_group, ) & ( Q( # Accommodation information is manually added order_product__isnull=True ) | Q( # Order is confirmed order_product__order__confirm_time__isnull=False, # Order is paid order_product__order__payment_date__isnull=False, # Order is not cancelled order_product__order__cancellation_time__isnull=True, ) ) accommodees = AccommodationInformation.objects.filter(query).order_by('last_name', 'first_name') active_filter = limit_group else: accommodees = [] active_filter = None format = request.GET.get('format', 'screen') if format in CSV_EXPORT_FORMATS: filename = "{event.slug}-{active_filter}-{timestamp}.{format}".format( event=event, active_filter=slugify(limit_group.description), timestamp=now().strftime('%Y%m%d%H%M%S'), format=format, ) emit('core.person.exported', request=request, event=event) return csv_response(event, AccommodationInformation, accommodees, filename=filename, dialect=CSV_EXPORT_FORMATS[format]) elif format == 'screen': filters = [ (limit_group_id == lg.id, lg) for lg in LimitGroup.objects.filter( event=event, product__requires_accommodation_information=True, ).distinct() ] vars.update( accommodees=accommodees, active_filter=active_filter, filters=filters, ) return render(request, 'tickets_admin_accommodation_view.pug', vars) else: raise NotImplementedError(format)
def save(self, *args, **kwargs): if self.name and not self.slug: self.slug = slugify(self.name) if self.slug and not self.group_id: self.group, = self.event.intra_event_meta.get_or_create_groups(self.event, [self.slug]) return super(Team, self).save(*args, **kwargs)
def save(self, *args, **kwargs): if self.start_time and self.length: self.end_time = self.start_time + timedelta(minutes=self.length) if self.title and not self.slug: self.slug = slugify(self.title) return super(Programme, self).save(*args, **kwargs)
def clean_name(self): name = self.cleaned_data['name'] if name and not self.instance.pk: slug = slugify(name) if JobCategory.objects.filter(event=self.instance.event, slug=slug).exists(): raise forms.ValidationError(_('The slug that would be derived from this name is already taken. Please choose another name.')) return name
def get_dashboard_dictionary(self, document): title = document['title'] slug = slugify(title) permalink = reverse('dashboard_manager.action_view', urlconf='microsites.urls', kwargs={'id': document['dashboard_id'], 'slug': slug}) dashboard_dict = dict (id=document['dashboard_id'], title=title, description=document['description'], tags=[tag.strip() for tag in document['tags'].split(',')], user_nick=document['owner_nick'], permalink=permalink, type = document['type']) return dashboard_dict
def _set_guid(self, force_random=False): #if self._title: title_word_list = [ word for word in slugify(self._title).split('-') if word ][:5] # killing duplicates? if not force_random: self.guid = '-'.join(word[:5] for word in title_word_list).upper() else: import random if len(title_word_list) >= 5: self.guid = '-'.join(word[:5] for word in title_word_list[:-1] + [str(random.randint(10000, 99999))]).upper() else: self.guid = '-'.join(word[:5] for word in title_word_list + [str(random.randint(10000, 99999))]).upper()
def save(self, *args, **kwargs): if self.name and not self.slug: self.slug = slugify(self.name) created = not self.pk ret_val = super(JobCategory, self).save(*args, **kwargs) if not created and 'mailings' in settings.INSTALLED_APPS: from mailings.models import RecipientGroup RecipientGroup.update_for_job_category(self) return ret_val
def get_or_create_dummy(cls, app_label='labour', name='Smallfolk', priority=0): from core.models import Event event, unused = Event.get_or_create_dummy() return PersonnelClass.objects.get_or_create( event=event, slug=slugify(name), app_label=app_label, defaults=dict( name=app_label, priority=priority, ) )
def get_dashboard_dictionary(self, doc): id = doc['dashboard_id'] title = doc['title'] slug = slugify(title) permalink = reverse('dashboard_manager.view', kwargs={'id': id, 'slug': slug}) created_at = datetime.datetime.fromtimestamp(int(doc['timestamp'])) return dict(id=id , title = title , category = doc['category_name'] , created_at = created_at , permalink = permalink , type=doc['type'].upper() , account_id = int(doc['account_id']) )
def query_hot_n(self, limit, lang, hot = None): if not hot: hot = Setting.objects.get(pk = settings.HOT_DATASTREAMS).value sql = """SELECT `ao_datastream_revisions`.`id` as 'datastream_revision_id', `ao_datastream_revisions`.`datastream_id` as 'datastream_id', `ao_datastream_i18n`.`title`, `ao_datastream_i18n`.`description`, `ao_categories_i18n`.`name` AS `category_name`, `ao_users`.`nick` AS `user_nick`, `ao_users`.`email` AS `user_email`, `ao_users`.`account_id` FROM `ao_datastream_revisions` INNER JOIN `ao_datastream_i18n` ON (`ao_datastream_revisions`.`id` = `ao_datastream_i18n`.`datastream_revision_id`) INNER JOIN `ao_categories` ON (`ao_datastream_revisions`.`category_id` = `ao_categories`.`id`) INNER JOIN `ao_categories_i18n` ON (`ao_categories`.`id` = `ao_categories_i18n`.`category_id`) INNER JOIN `ao_datastreams` ON (`ao_datastream_revisions`.`datastream_id` = `ao_datastreams`.`id`) INNER JOIN `ao_users` ON (`ao_datastreams`.`user_id` = `ao_users`.`id`) WHERE `ao_datastream_revisions`.`id` IN ( SELECT MAX(`ao_datastream_revisions`.`id`) FROM `ao_datastream_revisions` WHERE `ao_datastream_revisions`.`datastream_id` IN (""" + hot + """) AND `ao_datastream_revisions`.`status` = 3 GROUP BY `datastream_id` ) -- AND `ao_categories_i18n`.`language` = %s""" cursor = connection.cursor() cursor.execute(sql, [lang]) row = cursor.fetchone() datastreams = [] while row: datastream_id = row[1] title = row[2] slug = slugify(title) permalink = reverse('datastreams-data', kwargs={'id': datastream_id, 'format': 'json'}, urlconf='microsites.urls') datastreams.append({'id' : row[0], 'title' : title, 'description' : row[3], 'category_name': row[4], 'user_nick' : row[5], 'user_email' : row[6], 'permalink' : permalink, 'account_id' : row[7] }) row = cursor.fetchone() return datastreams
def get_dataset_dictionary(self, doc): dataset_id = doc['dataset_id'] title = doc['title'] slug = slugify(title) permalink = reverse('manageDatasets.view', urlconf='microsites.urls', kwargs={'dataset_id': dataset_id, 'slug': slug}) created_at = datetime.datetime.fromtimestamp(int(doc['timestamp'])) return dict(id=dataset_id , title = title , category = doc['category_name'] , created_at = created_at , permalink = permalink , type=doc['type'].upper() , account_id = int(doc['account_id']) )
def get_dataset_dictionary(self, document): parameters = [] if document['parameters']: import json parameters = json.loads(document['parameters']) dataset_id = document['dataset_id'] title = document['title'] slug = slugify(title) permalink = reverse('manageDatasets.view', urlconf='microsites.urls', kwargs={'dataset_id': dataset_id,'slug': slug}) dataset = dict(id=dataset_id, revision_id=document['datasetrevision_id'], title=title, description=document['description'], parameters=parameters, tags=[ tag.strip() for tag in document['tags'].split(',') ], permalink=permalink, type=document['type'], category=document['category_id'], category_name=document['category_name'], guid=document['docid'].split("::")[1] ,end_point=document['end_point'], created_at=document['created_at'], owner_nick=document['owner_nick'], timestamp=document['timestamp']) return dataset
def dashboard_query_hot_n(self, lang, hot = None): sql = """SELECT `ao_dashboard_revisions`.`id` as 'dashboard_revision_id', `ao_dashboard_revisions`.`dashboard_id` as 'dashboard_id', `ao_dashboard_i18n`.`title`, `ao_dashboard_i18n`.`description`, `ao_categories_i18n`.`name` AS `category_name`, `ao_users`.`nick` AS `user_nick`, `ao_users`.`email` AS `user_email`, `ao_users`.`account_id` FROM `ao_dashboard_revisions` INNER JOIN `ao_dashboard_i18n` ON (`ao_dashboard_revisions`.`id` = `ao_dashboard_i18n`.`dashboard_revision_id`) INNER JOIN `ao_categories` ON (`ao_dashboard_revisions`.`category_id` = `ao_categories`.`id`) INNER JOIN `ao_categories_i18n` ON (`ao_categories`.`id` = `ao_categories_i18n`.`category_id`) INNER JOIN `ao_dashboards` ON (`ao_dashboard_revisions`.`dashboard_id` = `ao_dashboards`.`id`) INNER JOIN `ao_users` ON (`ao_dashboards`.`user_id` = `ao_users`.`id`) WHERE `ao_dashboard_revisions`.`id` IN ( SELECT MAX(`ao_dashboard_revisions`.`id`) FROM `ao_dashboard_revisions` WHERE `ao_dashboard_revisions`.`dashboard_id` IN (""" + hot + """) AND `ao_dashboard_revisions`.`status` = 3 GROUP BY `dashboard_id` ) AND `ao_categories_i18n`.`language` = %s""" cursor = connection.cursor() cursor.execute(sql, (lang)) row = cursor.fetchone() dashboards = [] while row: dashboard_id = row[1] title = row[2] slug = slugify(title) permalink = reverse('dashboard_manager.action_view', kwargs={'id': dashboard_id, 'slug': slug}) dashboards.append({'id' : row[0], 'title' : title, 'description' : row[3], 'category_name': row[4], 'user_nick' : row[5], 'user_email' : row[6], 'permalink' : permalink, 'account_id' : row[7] }) row = cursor.fetchone() return dashboards
def gen_user(ime, priimek): log() oun = '%s%s' % (priimek[:4], ime[:4]) username = slugify(oun, instance=User, slug_field='username') user = User.objects.create_user( username=username, email='', password='******', ) user.first_name = ime user.last_name = priimek user.save() return user
def get_or_create_dummy(cls, event=None, title="Dummy survey", **kwargs): if event is None: from core.models import Event event, unused = Event.get_or_create_dummy() slug = slugify(title) defaults = dict( event=event, title=title, model=dict(), ) defaults.update(kwargs) return cls.objects.get_or_create( slug=slug, defaults=defaults, )
def get_visualization_dictionary(self, document): try: if document['parameters']: import json parameters = json.loads(document['parameters']) else: parameters = [] except: parameters = [] title = document['title'] slug = slugify(title) permalink = reverse('chart_manager.view', urlconf='microsites.urls', kwargs={'id': document['visualization_id'], 'slug': slug}) visualization = dict(id=document['visualization_id'], revision_id=document['visualization_revision_id'], title=title, description=document['description'], parameters=parameters, tags=[tag.strip() for tag in document['tags'].split(',')], permalink=permalink, timestamp=document['timestamp'], type=document['type'], category=document['category_id'], category_name=document['category_name'], guid=document['docid'].split("::")[1], end_point=document.get('end_point', None), created_at=document['created_at'], owner_nick=document['owner_nick']) return visualization
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 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 get(self, user, visualization_id=None, visualization_revision_id=None, guid=None, published=False): """get all data of visualization :param user: mandatory :param visualization_id: :param visualization_revision_id: :param guid: :param published: boolean :return: JSON Object """ if settings.DEBUG: logger.info('Getting Visualization %s' % str(locals())) resource_language = Q(visualizationi18n__language=user.language) user_language = Q(user__language=user.language) if guid: condition = Q(visualization__guid=guid) elif visualization_id: condition = Q(visualization__id=int(visualization_id)) elif visualization_revision_id: condition = Q(pk=int(visualization_revision_id)) else: logger.error( '[ERROR] VisualizationDBDAO.get: no guid, resource id or revision id %s' % locals()) raise # controla si esta publicado por su STATUS y no por si el padre lo tiene en su last_published_revision if published: status_condition = Q(status=StatusChoices.PUBLISHED) last_revision_condition = Q( pk=F("visualization__last_published_revision")) else: status_condition = Q(status__in=StatusChoices.ALL) last_revision_condition = Q(pk=F("visualization__last_revision")) # aca la magia account_condition = Q(user__account=user.account) try: visualization_revision = VisualizationRevision.objects.select_related( ).get(condition & resource_language & user_language & status_condition & account_condition & last_revision_condition) except VisualizationRevision.DoesNotExist: logger.error( '[ERROR] Visualization Not exist Revision (query: %s\n\t%s\n\t %s\n\t %s\n\t %s\n\t %s)' % (condition, resource_language, user_language, status_condition, account_condition, last_revision_condition.children[0][1].__dict__['name'])) raise VisualizationRevision.DoesNotExist( "Visualization Not exist Revision") tags = visualization_revision.datastream.last_revision.tagdatastream_set.all( ).values('tag__name', 'tag__status', 'tag__id') sources = visualization_revision.datastream.last_revision.sourcedatastream_set.all( ).values('source__name', 'source__url', 'source__id') parameters = visualization_revision.get_full_parameters() # Get category name category = visualization_revision.datastream.last_revision.category.categoryi18n_set.get( language=user.language) visualizationi18n = VisualizationI18n.objects.get( visualization_revision=visualization_revision, language=user.language) visualization = dict( visualization=visualization_revision.visualization, resource_id=visualization_revision.visualization.id, revision_id=visualization_revision.id, visualization_id=visualization_revision.visualization.id, visualization_revision_id=visualization_revision.id, user_id=visualization_revision.user.id, author=visualization_revision.user.nick, account_id=visualization_revision.user.account.id, category_id=category.id, category_name=category.name, status=visualization_revision.status, meta_text=visualization_revision.meta_text, guid=visualization_revision.visualization.guid, impl_details=visualization_revision.impl_details, created_at=visualization_revision.created_at, modified_at=visualization_revision.modified_at, last_revision_id=visualization_revision.visualization. last_revision_id if visualization_revision.visualization.last_revision_id else '', last_published_revision_id=visualization_revision.visualization. last_published_revision_id if visualization_revision.visualization.last_published_revision_id else '', last_published_date=visualization_revision.visualization. last_published_revision_date if visualization_revision.visualization.last_published_revision_date else '', title=visualizationi18n.title, description=visualizationi18n.description, notes=visualizationi18n.notes, tags=tags, sources=sources, parameters=parameters, slug=slugify(visualizationi18n.title), lib=visualization_revision.lib, datastream_id=visualization_revision.visualization.datastream.id, datastream_revision_id=visualization_revision.datastream. last_revision_id, filename='', # nice to have cant=VisualizationRevision.objects.filter( visualization__id=visualization_revision.visualization.id ).count(), ) visualization.update(VisualizationImplBuilder().parse( visualization_revision.impl_details)) # para que el title del impl_details no pise el de la VZ visualization['title'] = visualizationi18n.title return visualization
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: 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, 3, 18, 8, 0, tzinfo=self.tz), work_ends=datetime(2016, 3, 20, 20, 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, ) self.afterparty_perk, unused = Perk.objects.get_or_create( event=self.event, slug='kaatajaiset', defaults=dict( name=u'Kaatajaiset', ), ) for pc_name, pc_slug, pc_app_label, pc_afterparty in [ (u'Kuplitea', 'kuplitea', 'labour', True), (u'Työvoima', 'tyovoima', 'labour', True), (u'Ohjelmanjärjestäjä', 'ohjelma', 'programme', True), (u'Guest of Honour', 'goh', 'programme', False), # tervetullut muttei kutsuta automaattiviestillä (u'Media', 'media', 'badges', False), (u'Myyjä', 'myyja', 'badges', False), (u'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() tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima') kuplitea = PersonnelClass.objects.get(event=self.event, slug='kuplitea') ohjelma = PersonnelClass.objects.get(event=self.event, slug='ohjelma') for name, description, pcs in [ (u'Kuplitea', u'Tapahtuman järjestelytoimikunnan eli kuplitean jäsen', [kuplitea]), (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'Järjestyksenvalvoja', u'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]), (u'Kasaus ja purku', u'Kalusteiden siirtelyä & opasteiden kiinnittämistä. Ei vaadi erikoisosaamista. Työvuoroja myös jo pe kello 14-18 sekä su kello 19 asti, kerro lisätiedoissa jos voit osallistua näihin.', [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'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'Salivänkäri', u'Salivänkäri vastaa ohjelmasalien toiminnasta. He pitävät huolen, että ohjelmat alkavat ja loppuvat ajallaan ja että ohjelmanjärjestäjillä on kaikki mitä he tarvitsevat salissa.', [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'Kuplitea']: JobCategory.objects.filter(event=self.event, name=name).update(public=False) for jc_name, qualification_name in [ (u'Järjestyksenvalvoja', u'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() for diet_name in [ u'Gluteeniton', u'Laktoositon', u'Maidoton', u'Vegaaninen', u'Lakto-ovo-vegetaristinen', ]: SpecialDiet.objects.get_or_create(name=diet_name) AlternativeSignupForm.objects.get_or_create( event=self.event, slug=u'kuplitea', defaults=dict( title=u'Kuplitean ilmoittautumislomake', signup_form_class_path='events.kuplii2016.forms:OrganizerSignupForm', signup_extra_form_class_path='events.kuplii2016.forms:OrganizerSignupExtraForm', active_from=datetime(2015, 10, 22, 20, 0, 0, tzinfo=self.tz), 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 room_pre_save(sender, instance, **kwargs): if instance.name and not instance.slug: instance.slug = slugify(instance.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 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, 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 - timedelta(days=1), work_ends=self.event.end_time + timedelta(hours=4), admin_group=labour_admin_group, contact_email='Finnconin työvoimavastaava <*****@*****.**>', ) 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'), ('Kunniavieras', 'goh', '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 jäsen eli coniitti', [conitea] ), ( 'Järjestyksenvalvoja', '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] ), ]: 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.finncon2018.forms:OrganizerSignupForm', signup_extra_form_class_path='events.finncon2018.forms:OrganizerSignupExtraForm', active_from=datetime(2018, 3, 6, 0, 0, 0, tzinfo=self.tz), active_until=self.event.start_time, ), ) # old, wrong info links for wiki_space, link_title, link_group in [ ('FINNCONWORK', 'Finnconin työvoimawiki', 'accepted'), ('FINNCON2018', 'Finnconin coniteawiki', 'conitea'), ]: InfoLink.objects.filter( event=self.event, title=link_title, group=labour_event_meta.get_group(link_group), ).delete() # new, correct info links for wiki_space, link_title, link_group in [ ('FINNCON2018', 'Finnconin 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 populate_category_slug(sender, instance, **kwargs): if instance.title and not instance.slug: instance.slug = slugify(instance.title)
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, created = LabourEventMeta.get_or_create_group(self.event, 'admins') if self.test and created: 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, 9, 4, 8, 0, tzinfo=self.tz), work_ends=datetime(2015, 9, 6, 22, 0, tzinfo=self.tz), admin_group=labour_admin_group, contact_email='Tracon Hitpoint 2015 -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, ) self.afterparty_perk, unused = Perk.objects.get_or_create( event=self.event, slug='kaatajaiset', defaults=dict( name=u'Kaatajaiset', ), ) for pc_name, pc_slug, pc_app_label, pc_afterparty in [ (u'Conitea', 'conitea', 'labour', True), (u'Ylivänkäri', 'ylivankari', 'labour', True), (u'Työvoima', 'tyovoima', 'labour', True), (u'Ohjelmanjärjestäjä', 'ohjelma', 'programme', True), (u'Guest of Honour', 'goh', 'programme', False), # tervetullut muttei kutsuta automaattiviestillä (u'Media', 'media', 'badges', False), (u'Myyjä', 'myyja', 'badges', False), (u'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() tyovoima = PersonnelClass.objects.get(event=self.event, slug='tyovoima') 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') for name, description, pcs in [ (u'Conitea', u'Tapahtuman järjestelytoimikunnan eli conitean jäsen', [conitea]), (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, ylivankari]), (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).', [tyovoima, ylivankari]), (u'Ensiapu', 'Toimit osana tapahtuman omaa ensiapuryhmää. Vuoroja päivisin ja öisin tapahtuman aukioloaikoina. Vaaditaan vähintään voimassa oleva EA1 -kortti ja osalta myös voimassa oleva EA2 -kortti. Kerro Työkokemus -kohdassa osaamisestasi, esim. oletko toiminut EA-tehtävissä tapahtumissa tai oletko sairaanhoitaja/lähihoitaja koulutuksestaltasi.', [tyovoima, ylivankari]), (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, ylivankari]), (u'Logistiikka', u'Autokuskina toimimista ja tavaroiden/ihmisten hakua ja noutamista. B-luokan ajokortti vaaditaan. Työvuoroja myös perjantaille.', [tyovoima, ylivankari]), (u'Majoitusvalvoja', u'Huolehtivat lattiamajoituspaikkojen pyörittämisestä yöaikaan. Työvuoroja myös molempina öinä.', [tyovoima, ylivankari]), (u'Myynti', u'Pääsylippujen ja Tracon-oheistuotteiden myyntiä sekä lippujen tarkastamista. Myyjiltä edellytetään täysi-ikäisyyttä, asiakaspalveluhenkeä ja huolellisuutta rahankäsittelyssä. Vuoroja myös perjantaina.', [tyovoima, ylivankari]), (u'Narikka', u'Narikassa ja isotavara- eli asenarikassa säilytetään tapahtuman aikana kävijöiden omaisuutta. Tehtävä ei vaadi erikoisosaamista.', [tyovoima, ylivankari]), (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, ylivankari]), (u'Green room', u'Työvoiman ruokahuolto green roomissa. Hygieniapassi suositeltava.', [tyovoima, ylivankari]), (u'Taltiointi', u'Taltioinnin keskeisiin tehtäviin kuuluvat mm. saleissa esitettävien ohjelmanumeroiden videointi tapahtumassa ja editointi tapahtuman jälkeen. Lisäksi videoidaan dokumentaarisella otteella myös yleisesti tapahtumaa. Kerro Työkokemus-kentässä aiemmasta videokuvauskokemuksestasi (esim. linkkejä videogallerioihisi) sekä mitä haluaisit taltioinnissa tehdä.', [tyovoima, ylivankari]), (u'Tekniikka', u'Salitekniikan (AV) ja tietotekniikan (tulostimet, lähiverkot, WLAN) nopeaa MacGyver-henkistä ongelmanratkaisua.', [tyovoima, ylivankari]), (u'Valokuvaus', u'Valokuvaus tapahtuu pääasiassa kuvaajien omilla järjestelmäkameroilla. Tehtäviä voivat olla studiokuvaus, salikuvaus sekä yleinen valokuvaus. Kerro Työkokemus-kentässä aiemmasta valokuvauskokemuksestasi (esim. linkkejä kuvagallerioihisi) sekä mitä/missä haluaisit tapahtumassa valokuvata.', [tyovoima, ylivankari]), (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, ylivankari]), (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, ylivankari]), (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'Logistiikka', u'Henkilöauton ajokortti (B)'), (u'Green room', u'Hygieniapassi'), ]: jc = JobCategory.objects.get(event=self.event, name=jc_name) qual = Qualification.objects.get(name=qualification_name) period_length = timedelta(hours=8) for period_description, period_start in [ ("Lauantain aamuvuoro (la klo 08-16)", None), ("Lauantain iltavuoro (la klo 16-24)", None), ("Lauantai-sunnuntai-yövuoro (su klo 00-08)", None), ("Sunnuntain aamuvuoro (su klo 08-16)", None), ("Sunnuntain iltavuoro (su klo 16-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-vegaaninen', ]: 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='hitpoint2015.forms:OrganizerSignupForm', signup_extra_form_class_path='hitpoint2015.forms:OrganizerSignupExtraForm', active_from=datetime(2014, 11, 15, 12, 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 [ ('HITPTWORK', 'Työvoimawiki', 'accepted'), ('HITPTINFO', '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 populate_room_slug(apps, schema_editor): Room = apps.get_model('programme', 'room') for room in Room.objects.all(): room.slug = slugify(room.name) room.save()
def query_hot_n(self, lang, hot=None): if not hot: hot = Setting.objects.get(pk=settings.HOT_VISUALIZATIONS).value sql = """SELECT `ao_datastream_revisions`.`id` AS `datastream_revision_id`, `ao_visualizations_revisions`.`id` AS `visualization_revision_id`, `ao_datastreams`.`id` AS `datastream_id`, `ao_visualizations`.`id` AS `visualization_id`, `ao_visualizations_revisions`.`impl_details`, `ao_datastream_i18n`.`title`, `ao_datastream_i18n`.`description`, `ao_categories_i18n`.`name` AS `category_name`, `ao_users`.`account_id` FROM `ao_visualizations_revisions` INNER JOIN `ao_visualizations` ON (`ao_visualizations_revisions`.`visualization_id` = `ao_visualizations`.`id`) INNER JOIN `ao_datastreams` ON (`ao_visualizations`.`datastream_id` = `ao_datastreams`.`id`) INNER JOIN `ao_datastream_revisions` ON (`ao_datastreams`.`id` = `ao_datastream_revisions`.`datastream_id` AND `ao_datastream_revisions`.`status` = 3) INNER JOIN `ao_datastream_i18n` ON (`ao_datastream_revisions`.`id` = `ao_datastream_i18n`.`datastream_revision_id`) INNER JOIN `ao_categories` ON (`ao_datastream_revisions`.`category_id` = `ao_categories`.`id`) INNER JOIN `ao_categories_i18n` ON (`ao_categories`.`id` = `ao_categories_i18n`.`category_id`) INNER JOIN `ao_users` ON (`ao_visualizations`.`user_id` = `ao_users`.`id`) WHERE `ao_visualizations_revisions`.`id` IN ( SELECT MAX(`ao_visualizations_revisions`.`id`) FROM `ao_visualizations_revisions` WHERE `ao_visualizations_revisions`.`visualization_id` IN (""" + hot + """) AND `ao_visualizations_revisions`.`status` = 3 GROUP BY `visualization_id` ) AND `ao_categories_i18n`.`language` = %s ORDER BY `ao_visualizations`.`id` DESC, `ao_datastreams`.`id` DESC, `ao_visualizations_revisions`.`id` DESC, `ao_datastream_revisions`.`id` DESC""" cursor = connection.cursor() cursor.execute(sql, (lang, )) rows = cursor.fetchall().__iter__() row = helpers.next(rows, None) visualizations = [] while row != None: datastream_id = row[2] visualization_id = row[3] title = row[5] permalink = reverse('chart_manager.view', kwargs={ 'id': visualization_id, 'slug': slugify(title) }) visualizations.append({ 'id': row[0], 'sov_id': row[1], 'impl_details': row[4], 'title': title, 'description': row[6], 'category': row[7], 'permalink': permalink, 'account_id': row[8] }) while row != None and datastream_id == row[ 2] and visualization_id == row[3]: row = helpers.next(rows, None) return visualizations
def save(self, *args, **kwargs): if self.title and not self.slug: self.slug = slugify(self.title) return super(Job, self).save(*args, **kwargs)
def setup_labour(self): from core.models import Person from labour.models import ( AlternativeSignupForm, Job, JobCategory, LabourEventMeta, PersonnelClass, Qualification, ) 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: 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 [ ('Järjestyksenvalvoja', 'jv', 'labour'), ]: 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(), ), ) jv = PersonnelClass.objects.get(event=self.event, slug='jv') for jc_data in [ ('Järjestyksenvalvoja', ('Worldcon 75 hakee Kompassin kautta ainoastaan järjestyksenvalvojia. ' 'Mikäli kortillisia järjestyksenvalvojia ei saada tarpeeksi, heitä voidaan myös kouluttaa. ' 'Mikäli sinulla on JV-kortti, muistathan täyttää sen numeron ' '<a href="/profile/qualifications" target="_blank">profiiliisi</a>. ' 'Ilmoita myös, jos sinulla on ensiapukortti.'), [jv]), ]: 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 jc_name, qualification_name in [ # ('Järjestyksenvalvoja', 'JV-kortti'), # no! ]: 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()
def populate_room_slug(sender, instance, **kwargs): if instance.name and not instance.slug: instance.slug = slugify(instance.name)
def save(self, *args, **kwargs): if self.name and not self.slug: self.slug = slugify(self.name) return super(Perk, self).save(*args, **kwargs)
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), ) )