def access_profile_aliases_view(request): person = request.user.person if request.method == 'POST': domain = get_object_or_404( EmailAliasDomain.objects.all().distinct(), domain_name=request.POST.get('create_new_password_for_domain'), emailaliastype__email_aliases__person=request.user.person, ) newly_created_password, unused = SMTPPassword.create_for_domain_and_person( domain, request.user.person) else: newly_created_password = None aliases_by_domain = [( domain, SMTPServer.objects.filter(domains=domain).exists(), SMTPPassword.objects.filter(person=request.user.person, smtp_server__domains=domain), aliases, ) for (domain, aliases) in groupby_strict( person.email_aliases.all().order_by('domain__domain_name'), lambda alias: alias.domain)] vars = dict( aliases_by_domain=aliases_by_domain, newly_created_password=newly_created_password, person=person, ) return render(request, 'access_profile_aliases_view.jade', vars)
def core_frontpage_view(request, template='core_frontpage_view.jade', include_past_events=False): t = now() if include_past_events: past_events = events(public=True, end_time__lte=t) else: past_events = Event.objects.none() current_events = events(public=True, start_time__lte=t, end_time__gt=t) future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True)) & Q(public=True)).order_by('start_time') past_events_rows_by_year = [ (year, list(groups_of_n(year_events, 4))) for (year, year_events) in groupby_strict(past_events, get_year) ] vars = dict( carousel_slides=CarouselSlide.get_active_slides(), current_events_rows=list(groups_of_n(current_events, 4)), future_events_rows=list(groups_of_n(future_events, 4)), past_events_rows_by_year=past_events_rows_by_year, ) return render(request, template, vars)
def listings_listing_view(request, listing_hostname, include_past_events=False): listing = get_object_or_404(Listing, hostname=listing_hostname) t = now() if include_past_events: past_events = listing.get_events(public=True, end_time__lte=t) else: past_events = [] current_events = listing.get_events(public=True, start_time__lte=t, end_time__gt=t) future_events = listing.get_events(public=True, start_time__gt=t) past_events_by_year = groupby_strict(past_events, lambda event: event.start_time.year) vars = dict( listing=listing, current_events=current_events, future_events=future_events, past_events_by_year=past_events_by_year, show_future_events_heading=future_events and (current_events or past_events), login_page=True, ) return render(request, 'listings_listing_view.pug', vars)
def access_profile_aliases_view(request): person = request.user.person if request.method == 'POST': domain = get_object_or_404(EmailAliasDomain.objects.all().distinct(), domain_name=request.POST.get('create_new_password_for_domain'), emailaliastype__email_aliases__person=request.user.person, ) newly_created_password, unused = SMTPPassword.create_for_domain_and_person(domain, request.user.person) else: newly_created_password = None aliases_by_domain = [ ( domain, SMTPServer.objects.filter(domains=domain).exists(), SMTPPassword.objects.filter(person=request.user.person, smtp_server__domains=domain), aliases, ) for (domain, aliases) in groupby_strict(person.email_aliases.all().order_by('domain__domain_name'), lambda alias: alias.domain) ] vars = dict( aliases_by_domain=aliases_by_domain, newly_created_password=newly_created_password, person=person, ) return render(request, 'access_profile_aliases_view.jade', vars)
def programme_admin_organizers_view(request, vars, event, format='screen'): programme_roles = ( ProgrammeRole.objects.filter(programme__category__event=event) .select_related('person') .select_related('programme') .select_related('role') .order_by('person__surname', 'person__first_name', 'programme__title') ) personnel_classes = PersonnelClass.objects.filter( event=event, role__personnel_class__event=event, ) personnel_class_filters = Filter(request, 'personnel_class').add_objects('role__personnel_class__slug', personnel_classes) programme_roles = personnel_class_filters.filter_queryset(programme_roles) active_filters = Filter(request, 'active').add_booleans('is_active') programme_roles = active_filters.filter_queryset(programme_roles) organizers = [] prs_by_organizer = groupby_strict(programme_roles, lambda pr: pr.person) for organizer, prs in prs_by_organizer: organizer.current_event_programme_roles = prs organizers.append(organizer) vars.update( active_filters=active_filters, export_formats=EXPORT_FORMATS, num_organizers=len(organizers), num_total_organizers=Person.objects.filter(programme__category__event=event).distinct().count(), organizers=organizers, personnel_class_filters=personnel_class_filters, ) if format == 'screen': return render(request, 'programme_admin_organizers_view.jade', vars) elif format == 'txt': emails = '\n'.join(programme_roles.order_by('person__email').values_list('person__email', flat=True).distinct()) return HttpResponse(emails, content_type='text/plain') elif format in CSV_EXPORT_FORMATS: filename = "{event.slug}_programme_organizers_{timestamp}.{format}".format( event=event, timestamp=now().strftime('%Y%m%d%H%M%S'), format=format, ) return csv_response(event, ProgrammeRole, programme_roles, dialect=CSV_EXPORT_FORMATS[format], filename=filename, m2m_mode='separate_columns', ) else: raise NotImplementedError(format)
def core_frontpage_view(request): t = now() past_events = events(public=True, end_time__lte=t) current_events = events(public=True, start_time__lte=t, end_time__gt=t) future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True)) & Q(public=True)).order_by('start_time') organizations = Organization.objects.filter(public=True) past_events_rows_by_year = [ (year, list(groups_of_n(year_events, 4))) for (year, year_events) in groupby_strict(past_events, get_year) ] vars = dict( future_events_rows=list(groups_of_n(future_events, 4)), current_events_rows=list(groups_of_n(current_events, 4)), past_events_rows_by_year=past_events_rows_by_year, organizations_rows=list(groups_of_n(organizations, 4)), ) return render(request, 'core_frontpage_view.jade', vars)
def _get_sizes(self, event, **kwargs): return groupby_strict( ShirtSize.objects.filter(type__event=event).order_by("id"), lambda ss: ss.type)
def core_frontpage_view(request, template='core_frontpage_view.pug', include_past_events=False): t = now() if include_past_events: past_events = events(public=True, end_time__lte=t) else: past_events = Event.objects.none() current_events = events(public=True, start_time__lte=t, end_time__gt=t) future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True)) & Q(public=True)).order_by('start_time') past_events_rows_by_year = [(year, list(groups_of_n(year_events, 4))) for (year, year_events) in groupby_strict(past_events, get_year)] vars = dict( carousel_slides=CarouselSlide.get_active_slides(), current_events_rows=list(groups_of_n(current_events, 4)), future_events_rows=list(groups_of_n(future_events, 4)), past_events_rows_by_year=past_events_rows_by_year, ) return render(request, template, vars)
def badges_admin_badges_view(request, vars, event, personnel_class_slug=None): if request.method == 'POST': form = initialize_form(HiddenBadgeCrouchingForm, request) if form.is_valid(): badge = get_object_or_404(BadgeManagementProxy, pk=form.cleaned_data['badge_id']) if 'revoke-badge' in request.POST: if not badge.can_revoke: messages.error( request, _('This badge cannot be revoked here because it is managed ' 'by either the labour or the programme management system.' )) elif badge.is_revoked: messages.warning(request, _('The badge had already been revoked.')) else: badge.revoke(user=request.user) messages.success(request, _('The badge has now been revoked.')) elif 'clear-revoked' in request.POST: if not badge.can_unrevoke: messages.error( request, _('This revoked badge cannot be un-revoked here because it is managed ' 'by either the labour or the programme management system.' )) if not badge.is_revoked: message.warning(request, _('The badge was already valid.')) else: badge.unrevoke() messages.success(request, _('The badge has been restored.')) elif 'mark-printed' in request.POST: badge.is_printed_separately = True badge.save() messages.success(request, 'Badge on merkitty erikseen tulostetuksi.') elif 'clear-printed' in request.POST: badge.is_printed_separately = False badge.save() messages.success( request, 'Badgesta on pyyhitty erikseen tulostettu -merkintä.') else: messages.error(request, 'Kelvoton pyyntö.') return redirect(request.path) else: format = request.GET.get('format', 'screen') badge_criteria = dict(personnel_class__event=event) active_filter = None viewing_yoink_list = False template_subtype = 'normal' if personnel_class_slug is not None: if personnel_class_slug == 'yoink': viewing_yoink_list = True active_filter = badges_to_yoink_fake_personnel_class badge_criteria.update(revoked_at__isnull=False) template_subtype = 'yoink' else: active_filter = get_object_or_404(PersonnelClass, event=event, slug=personnel_class_slug) badge_criteria.update(personnel_class=active_filter) # Non-yoink paper lists only show non-revoked badges. # Yoink list only shows revoked badges. if format != 'screen' and personnel_class_slug != 'yoink': badge_criteria.update(revoked_at__isnull=True) badges = BadgeManagementProxy.objects.filter( **badge_criteria).order_by(*BADGE_ORDER) if format in CSV_EXPORT_FORMATS: filename = "{event.slug}-badges-{badge_filter}{timestamp}.{format}".format( event=event, badge_filter="{personnel_class_slug}-".format( personnel_class_slug=personnel_class_slug) if personnel_class_slug is not None else '', timestamp=timezone.now().strftime('%Y%m%d%H%M%S'), format=format, ) return csv_response(event, Badge, badges, filename=filename, dialect=CSV_EXPORT_FORMATS[format]) elif format in BADGE_LIST_TEMPLATES: page_template = BADGE_LIST_TEMPLATES[format][template_subtype] title = "{event.name} – {qualifier}".format( event=event, qualifier=active_filter.name if active_filter else 'Nimilista', ) filters = [(personnel_class_slug == personnel_class.slug, personnel_class) for personnel_class in PersonnelClass.objects.filter( event=event)] filters.append( (viewing_yoink_list, badges_to_yoink_fake_personnel_class)) vars.update( active_filter=active_filter, filters=filters, now=timezone.now(), title=title, should_display_personnel_class=not active_filter or personnel_class_slug == 'yoink', can_manually_add_badge=personnel_class_slug != 'yoink', ) if personnel_class_slug == 'yoink' and format == 'print': badges_by_personnel_class = groupby_strict( badges, lambda badge: badge.personnel_class) vars.update( badges_by_personnel_class=badges_by_personnel_class) else: vars.update(badges=badges) return render(request, page_template, vars) else: raise NotImplementedError(format)
def group_programmes_by_start_time(programmes): programmes_by_start_time = groupby_strict(programmes, lambda p: p.start_time) return [ (start_time, None, programmes) for (start_time, programmes) in programmes_by_start_time ]
def group_programmes_by_start_time(programmes): programmes_by_start_time = groupby_strict(programmes, lambda p: p.start_time) return [(start_time, None, [(programme, None) for programme in programmes]) for (start_time, programmes) in programmes_by_start_time]
def _get_sizes(self, event, **kwargs): return groupby_strict( ShirtSize.objects.filter(type__event=event).order_by("id"), lambda ss: ss.type )
def badges_admin_badges_view(request, vars, event, personnel_class_slug=None): if request.method == 'POST': form = initialize_form(HiddenBadgeCrouchingForm, request) if form.is_valid(): badge = get_object_or_404(BadgeManagementProxy, pk=form.cleaned_data['badge_id']) if 'revoke-badge' in request.POST: if not badge.can_revoke: messages.error(request, _('This badge cannot be revoked here because it is managed ' 'by either the labour or the programme management system.')) elif badge.is_revoked: messages.warning(request, _('The badge had already been revoked.')) else: badge.revoke(user=request.user) messages.success(request, _('The badge has now been revoked.')) elif 'clear-revoked' in request.POST: if not badge.can_unrevoke: messages.error(request, _('This revoked badge cannot be un-revoked here because it is managed ' 'by either the labour or the programme management system.')) if not badge.is_revoked: message.warning(request, _('The badge was already valid.')) else: badge.unrevoke() messages.success(request, _('The badge has been restored.')) elif 'mark-printed' in request.POST: badge.is_printed_separately = True badge.save() messages.success(request, 'Badge on merkitty erikseen tulostetuksi.') elif 'clear-printed' in request.POST: badge.is_printed_separately = False badge.save() messages.success(request, 'Badgesta on pyyhitty erikseen tulostettu -merkintä.') else: messages.error(request, 'Kelvoton pyyntö.') return redirect(request.path) else: format = request.GET.get('format', 'screen') badge_criteria = dict(personnel_class__event=event) active_filter = None viewing_yoink_list = False template_subtype = 'normal' if personnel_class_slug is not None: if personnel_class_slug == 'yoink': viewing_yoink_list = True active_filter = badges_to_yoink_fake_personnel_class badge_criteria.update(revoked_at__isnull=False) template_subtype = 'yoink' else: active_filter = get_object_or_404(PersonnelClass, event=event, slug=personnel_class_slug) badge_criteria.update(personnel_class=active_filter) # Non-yoink paper lists only show non-revoked badges. # Yoink list only shows revoked badges. if format != 'screen' and personnel_class_slug != 'yoink': badge_criteria.update(revoked_at__isnull=True) badges = BadgeManagementProxy.objects.filter(**badge_criteria).order_by(*BADGE_ORDER) if format in CSV_EXPORT_FORMATS: filename = "{event.slug}-badges-{badge_filter}{timestamp}.{format}".format( event=event, badge_filter="{personnel_class_slug}-".format(personnel_class_slug=personnel_class_slug) if personnel_class_slug is not None else '', timestamp=timezone.now().strftime('%Y%m%d%H%M%S'), format=format, ) return csv_response(event, Badge, badges, filename=filename, dialect=CSV_EXPORT_FORMATS[format]) elif format in BADGE_LIST_TEMPLATES: page_template = BADGE_LIST_TEMPLATES[format][template_subtype] title = "{event.name} – {qualifier}".format( event=event, qualifier=active_filter.name if active_filter else 'Nimilista', ) filters = [ (personnel_class_slug == personnel_class.slug, personnel_class) for personnel_class in PersonnelClass.objects.filter(event=event) ] filters.append( (viewing_yoink_list, badges_to_yoink_fake_personnel_class) ) vars.update( active_filter=active_filter, filters=filters, now=timezone.now(), title=title, should_display_personnel_class=not active_filter or personnel_class_slug == 'yoink', can_manually_add_badge=personnel_class_slug != 'yoink', ) if personnel_class_slug == 'yoink' and format == 'print': badges_by_personnel_class = groupby_strict(badges, lambda badge: badge.personnel_class) vars.update(badges_by_personnel_class=badges_by_personnel_class) else: vars.update(badges=badges) return render(request, page_template, vars) else: raise NotImplementedError(format)
def core_frontpage_view(request): t = now() past_events = events(public=True, end_time__lte=t) current_events = events(public=True, start_time__lte=t, end_time__gt=t) future_events = events((Q(start_time__gt=t) | Q(start_time__isnull=True)) & Q(public=True)).order_by('start_time') organizations = Organization.objects.filter(public=True) past_events_rows_by_year = [(year, list(groups_of_n(year_events, 4))) for (year, year_events) in groupby_strict(past_events, get_year)] vars = dict( future_events_rows=list(groups_of_n(future_events, 4)), current_events_rows=list(groups_of_n(current_events, 4)), past_events_rows_by_year=past_events_rows_by_year, organizations_rows = list(groups_of_n(organizations, 4)), ) return render(request, 'core_frontpage_view.jade', vars)