Пример #1
0
    def groundwork(self, request, args, kwargs):
        self.shows = []
        self.rehearsals = {}
        self.next_page = request.GET.get('next',
                                         reverse('home', urlconf='gbe.urls'))
        profile = validate_profile(request, require=False)
        if not profile:
            return HttpResponseRedirect(
                reverse('profile_update', urlconf='gbe.urls'))
        act_id = kwargs.get("act_id")
        self.act = get_object_or_404(Act, id=act_id)
        if self.act.performer.contact != profile:
            validate_perms(request, self.permissions)
        response = get_schedule(labels=[self.act.b_conference.conference_slug],
                                commitment=self.act)

        for item in response.schedule_items:
            # group acts will have multiple items for same show
            if item.event not in self.shows and Show.objects.filter(
                    eventitem_id=item.event.eventitem.eventitem_id).exists():
                self.shows += [item.event]
            elif GenericEvent.objects.filter(
                    eventitem_id=item.event.eventitem.eventitem_id,
                    type='Rehearsal Slot').exists():
                show_key = item.event.container_event.parent_event.pk
                self.rehearsals[show_key] = item
        if len(self.shows) == 0:
            raise Http404
Пример #2
0
    def get(self, request, *args, **kwargs):
        bid_id = kwargs.get("bid_id")
        self.bid = get_object_or_404(self.bid_type, id=bid_id)
        redirect = self.check_bid()
        if redirect:
            return HttpResponseRedirect(redirect)

        self.owner_profile = self.get_owner_profile()
        if self.owner_profile != request.user.profile:
            validate_perms(request, self.viewer_permissions, require=True)
        return render(request, 'gbe/bid_view.tmpl', self.make_context())
Пример #3
0
 def groundwork(self, request, args, kwargs):
     object_id = kwargs['object_id']
     self.get_object(request, object_id)
     self.reviewer = validate_perms(request, self.reviewer_permissions)
     if validate_perms(request, self.coordinator_permissions,
                       require=False):
         self.create_action_form(self.object)
     else:
         self.actionform = False
         self.actionURL = False
     self.b_conference, self.old_bid = get_conf(self.object)
     self.set_bid_eval()
    def get_queryset(self):
        validate_perms(self.request, 'any', require=True)

        qs = Profile.objects.filter(user_object__is_active=True).exclude(
            display_name='')

        if self.q:
            qs = qs.filter(
                Q(display_name__icontains=self.q)
                | Q(user_object__username__icontains=self.q)
                | Q(user_object__first_name__icontains=self.q)
                | Q(user_object__last_name__icontains=self.q))
        return qs
Пример #5
0
 def groundwork(self, request, args, kwargs):
     object_id = kwargs['object_id']
     self.get_object(request, object_id)
     self.reviewer = validate_perms(request, self.reviewer_permissions)
     if validate_perms(request,
                       self.coordinator_permissions,
                       require=False):
         self.create_action_form(self.object)
     else:
         self.actionform = False
         self.actionURL = False
     self.b_conference, self.old_bid = get_conf(self.object)
     self.set_bid_eval()
Пример #6
0
    def make_context(self, request, errorcontext=None):
        context = super(EditStaffAreaView,
                        self).make_context(request, errorcontext)
        context['edit_title'] = 'Edit Staff Area'
        context['staff_id'] = self.staff_area.pk

        # if there was an error in the edit form
        if 'event_form' not in context:
            context['event_form'] = StaffAreaForm(instance=self.staff_area)
        if validate_perms(request, ('Volunteer Coordinator', ), require=False):
            volunteer_initial_info = {
                'max_volunteer': self.staff_area.default_volunteers,
                'location': self.staff_area.default_location
            }
            context.update(
                self.get_manage_opportunity_forms(
                    volunteer_initial_info,
                    self.manage_vol_url,
                    self.conference,
                    request,
                    errorcontext=errorcontext,
                    labels=[
                        self.conference.conference_slug, self.staff_area.slug
                    ]))
        else:
            context['start_open'] = True

        return context
Пример #7
0
 def get(self, request, *args, **kwargs):
     self.profile = validate_perms(request, self.permissions)
     self.groundwork(request, args, kwargs)
     changed_id = None
     if self.style_version is None:
         if hasattr(request.user, 'userstylepreview'):
             changed_id = request.user.userstylepreview.version.pk
             msg = "Deactivating preview of version: " + str(
                 request.user.userstylepreview.version)
             request.user.userstylepreview.delete()
         else:
             msg = "No style was currently previewed."
     else:
         preview = None
         if hasattr(request.user, 'userstylepreview'):
             preview = request.user.userstylepreview
             preview.version = self.style_version
         else:
             preview = UserStylePreview(version=self.style_version,
                                        previewer=request.user)
         msg = "Setting preview version to: " + str(preview.version)
         preview.save()
         changed_id = preview.version.pk
     messages.success(request, msg)
     theme_list = reverse('themes_list', urlconf='gbe.themes.urls')
     if changed_id is not None:
         theme_list = "%s?changed_id=%d" % (theme_list, changed_id)
     return HttpResponseRedirect(theme_list)
Пример #8
0
def staff_area_view(request, area_id):
    '''
    Generates a staff area report: volunteer opportunities scheduled,
    volunteers scheduled, sorted by time/day
    See ticket #250
    '''
    show_style = False
    viewer_profile = validate_perms(request, 'any', require=True)
    if 'area' in request.GET.keys():
        show_style = (request.GET['area'] == "Show")

    opps_response = None
    area = None
    opps = None

    if show_style:
        parent_response = get_occurrences(foreign_event_ids=[area_id])
        if parent_response.occurrences:
            area = parent_response.occurrences[0]
            opps_response = get_occurrences(
                parent_event_id=parent_response.occurrences[0].pk)
    else:
        area = get_object_or_404(StaffArea, pk=area_id)
        opps_response = get_occurrences(labels=[
            area.conference.conference_slug,
            area.slug])
    if opps_response:
        show_general_status(request, opps_response, "staff_area")
        opps = opps_response.occurrences

    return render(request,
                  'gbe/report/staff_area_schedule.tmpl',
                  {'opps': opps,
                   'area': area})
Пример #9
0
    def make_context(self, request, errorcontext=None):
        context = super(EditEventView,
                        self).make_context(request, errorcontext)
        context, initial_form_info = setup_event_management_form(
            self.item.e_conference,
            self.item,
            self.occurrence,
            context)
        context['edit_title'] = self.title
        context['scheduling_info'] = get_scheduling_info(self.item)

        if 'worker_formset' not in context:
            context['worker_formset'] = self.make_formset(
                event_settings[self.item.type.lower()]['roles'])

        if validate_perms(request,
                          ('Volunteer Coordinator',), require=False):
            volunteer_initial_info = initial_form_info.copy()
            volunteer_initial_info.pop('occurrence_id')
            context.update(self.get_manage_opportunity_forms(
                volunteer_initial_info,
                self.manage_vol_url,
                self.conference,
                request,
                errorcontext=errorcontext,
                occurrence_id=self.occurrence.pk))
        else:
            context['start_open'] = True

        return context
Пример #10
0
def ReviewProposalListView(request):
    '''
    Show the list of class bids, review results,
    and give a way to update the reviews
    '''
    reviewer = validate_perms(request, ('Class Coordinator',))
    if request.GET and request.GET.get('conf_slug'):
        conference = Conference.by_slug(request.GET['conf_slug'])
    else:
        conference = Conference.current_conf()

    header = ClassProposal().bid_review_header
    classes = ClassProposal.objects.filter(
        conference=conference).order_by('type', 'title')
    rows = []
    for aclass in classes:
        bid_row = {}
        bid_row['bidder_active'] = True
        bid_row['bid'] = aclass.bid_review_summary
        bid_row['id'] = aclass.id
        bid_row['review_url'] = reverse('proposal_publish',
                                        urlconf='gbe.urls',
                                        args=[aclass.id])
        rows.append(bid_row)
    conference_slugs = Conference.all_slugs()
    return render(request,
                  'gbe/bid_review_list.tmpl',
                  {'header': header,
                   'rows': rows,
                   'conference': conference,
                   'conference_slugs': conference_slugs})
Пример #11
0
def ViewTroupeView(request, troupe_id=None):
    '''
    Show troupes to troupe members, only contact should edit.
    '''
    profile = validate_profile(request, require=False)
    if not profile:
        return HttpResponseRedirect(reverse('profile_update',
                                            urlconf='gbe.urls') +
                                    '?next=' +
                                    reverse('troupe-add',
                                            urlconf='gbe.urls'))

    troupe = get_object_or_404(Troupe, resourceitem_id=troupe_id)
    if not (troupe.contact.profile == profile or troupe.membership.filter(
            performer_profile=profile).exists() or validate_perms(
            request, ('Registrar',
                      'Volunteer Coordinator',
                      'Act Coordinator',
                      'Conference Coordinator',
                      'Vendor Coordinator',
                      'Ticketing - Admin'), require=False)):
        raise Http404
    performer_form = TroupeForm(instance=troupe,
                                prefix="The Troupe")
    performer_form.fields['membership'] = ModelMultipleChoiceField(
        queryset=troupe.membership.all())
    owner = get_participant_form(
            troupe.contact,
            prefix='Troupe Contact')
    return render(request,
                  'gbe/bid_view.tmpl',
                  {'readonlyform': [performer_form, owner]})
Пример #12
0
 def get(self, request, *args, **kwargs):
     self.user = validate_perms(request, self.reviewer_permissions)
     self.groundwork(request, args, kwargs)
     return render(
         request,
         self.template,
         self.get_select_forms())
Пример #13
0
    def groundwork(self, request, args, kwargs):
        self.user = validate_perms(request, self.reviewer_permissions)

        self.template = None
        if "template_name" in kwargs:
            template_name = kwargs.get("template_name")
            # permission and syntax check
            match_template_info = None
            for template in get_user_email_templates(self.user):
                if template_name == template['name']:
                    match_template_info = template
            if not match_template_info:
                raise Http404
            try:
                self.template = EmailTemplate.objects.get(
                    name=template_name)
            except:
                textcontent, htmlcontent = get_mail_content(
                    match_template_info['default_base'])
                self.initial = {
                    'name': template_name,
                    'subject': match_template_info['default_subject'],
                    'html_content': htmlcontent,
                    'description': match_template_info['description'],
                    'sender': settings.DEFAULT_FROM_EMAIL}
Пример #14
0
    def groundwork(self, request, args, kwargs):
        self.profile = validate_perms(request, self.permissions)
        self.area = get_object_or_404(StaffArea,
                                      id=int(kwargs['staff_id']))
        if self.area.conference.conferenceday_set.count() > 0:
            self.start_day = self.area.conference.conferenceday_set.order_by(
                "day").first().day
        else:
            user_message = UserMessage.objects.get_or_create(
                view=self.__class__.__name__,
                code="NO_CONF_DAYS",
                defaults={
                    'summary': "No Conference Days in Conference",
                    'description': no_conf_day_msg})
            messages.error(
                request,
                user_message[0].description)
            return HttpResponseRedirect(reverse(
                'manage_event_list',
                urlconf='gbe.scheduling.urls',
                args=[self.area.conference.conference_slug]))

        response = get_occurrences(labels=[
            self.area.slug,
            self.area.conference.conference_slug])
        self.children = response.occurrences
        show_general_status(request, response, self.__class__.__name__)
Пример #15
0
def prep_act_tech_info(request, show_id=None):
    show = None
    acts = []
    scheduling_link = ''

    if show_id:
        try:
            show = Show.objects.get(eventitem_id=show_id)
            acts = show.scheduler_events.first().get_acts(status=3)
            acts = sorted(acts, key=lambda act: act.order)
            if validate_perms(request, ('Scheduling Mavens', ), require=False):
                scheduling_link = reverse('schedule_acts',
                                          urlconf='scheduler.urls',
                                          args=[show.pk])

        except:
            logger.error("review_act_techinfo: Invalid show id")
            pass
    if show:
        conference = show.e_conference
    else:
        conf_slug = request.GET.get('conf_slug', None)
        conference = get_conference_by_slug(conf_slug)

    return show, acts, conference, scheduling_link
Пример #16
0
def ReviewProfilesView(request):
    admin_profile = validate_perms(request, ('Registrar',
                                             'Volunteer Coordinator',
                                             'Vendor Coordinator',
                                             'Scheduling Mavens',
                                             'Act Coordinator',
                                             'Class Coordinator',
                                             'Ticketing - Admin',
                                             'Staff Lead'))
    header = ['Name',
              'Username',
              'Last Login',
              'Contact Info',
              'Action']
    profiles = Profile.objects.filter(user_object__is_active=True)
    rows = []
    for aprofile in profiles:
        bid_row = {}
        bid_row['profile'] = (
            aprofile.display_name,
            aprofile.user_object.username,
            aprofile.user_object.last_login)
        bid_row['contact_info'] = {
            'contact_email': aprofile.user_object.email,
            'purchase_email': aprofile.purchase_email,
            'phone': aprofile.phone
        }
        bid_row['id'] = aprofile.resourceitem_id
        bid_row['actions'] = [
            {'url': reverse(
                'admin_landing_page',
                urlconf='gbe.urls',
                args=[aprofile.resourceitem_id]),
             'text': "View Landing Page"},
            {'url': reverse('welcome_letter',
                            urlconf='gbe.reporting.urls',
                            args=[aprofile.pk]),
             'text': "Welcome Letter"},
            {'url': reverse(
                'mail_to_individual',
                urlconf='gbe.email.urls',
                args=[aprofile.resourceitem_id]),
             'text': "Email"}
        ]
        if 'Registrar' in request.user.profile.privilege_groups:
            bid_row['actions'] += [
                {'url': reverse('admin_profile',
                                urlconf='gbe.urls',
                                args=[aprofile.resourceitem_id]),
                 'text': "Update"}]
            bid_row['actions'] += [
                {'url': reverse('delete_profile',
                                urlconf='gbe.urls',
                                args=[aprofile.resourceitem_id]),
                 'text': "Delete"}]

        rows.append(bid_row)

    return render(request, 'gbe/profile_review.tmpl',
                  {'header': header, 'rows': rows})
Пример #17
0
    def make_context(self, request, errorcontext=None):
        context = super(EditVolunteerView,
                        self).make_context(request, errorcontext)
        context, initial_form_info = setup_event_management_form(
            self.item.e_conference,
            self.item,
            self.occurrence,
            context,
            open_to_public=False)

        context['association_form'] = EventAssociationForm(
            initial={
                'staff_area': self.area,
                'parent_event': self.parent_id
            })
        context['edit_title'] = self.title
        context['scheduling_form'].fields['approval'].widget = CheckboxInput()

        if validate_perms(request, ('Volunteer Coordinator', ), require=False):
            context.update(
                self.get_worker_allocation_forms(errorcontext=errorcontext))
            if self.request.GET.get('changed_id', None):
                context['changed_id'] = int(
                    self.request.GET.get('changed_id', None))
        else:
            context['start_open'] = True

        return context
 def get(self, request, *args, **kwargs):
     context = self.groundwork(request, args, kwargs)
     if self.event_type == "show":
         context['second_form'] = ShowBookingForm(
             initial={'e_conference': self.conference})
     else:
         context['second_form'] = GenericBookingForm(
             initial={
                 'e_conference': self.conference,
                 'type': self.event_type.title()
             })
     context['scheduling_form'] = ScheduleOccurrenceForm(
         conference=self.conference,
         open_to_public=True,
         initial={
             'duration': 1,
             'max_volunteer':
             event_settings[self.event_type]['max_volunteer']
         })
     context['worker_formset'] = self.make_formset(
         event_settings[self.event_type]['roles'])
     if validate_perms(request, ('Ticketing - Admin', ), require=False):
         context['tickets'] = LinkBPTEventForm(
             initial={
                 'conference': self.conference,
             })
     return render(request, self.template, context)
    def groundwork(self, request, args, kwargs):
        self.user = validate_perms(request, self.reviewer_permissions)

        self.template = None
        if "template_name" in kwargs:
            template_name = kwargs.get("template_name")
            # permission and syntax check
            match_template_info = None
            for template in get_user_email_templates(self.user):
                if template_name == template['name']:
                    match_template_info = template
            if not match_template_info:
                raise Http404
            try:
                self.template = EmailTemplate.objects.get(name=template_name)
            except:
                textcontent, htmlcontent = get_mail_content(
                    match_template_info['default_base'])
                self.initial = {
                    'name': template_name,
                    'subject': match_template_info['default_subject'],
                    'html_content': htmlcontent,
                    'description': match_template_info['description'],
                    'sender': settings.DEFAULT_FROM_EMAIL
                }
Пример #20
0
def shared_groundwork(request, kwargs, permissions):
    conference = None
    occurrence_id = None
    occurrence = None
    item = None
    profile = validate_perms(request, permissions)
    if "conference" in kwargs:
        conference = get_object_or_404(
            Conference,
            conference_slug=kwargs['conference'])

    if "occurrence_id" in kwargs:
        occurrence_id = int(kwargs['occurrence_id'])
        result = get_occurrence(occurrence_id)
        if result.errors and len(result.errors) > 0:
            show_scheduling_occurrence_status(
                    request,
                    result,
                    "EditEventView")
            return None
        else:
            occurrence = result.occurrence
        item = get_object_or_404(
            Event,
            eventitem_id=occurrence.foreign_event_id).child()
    return (profile, occurrence, item)
Пример #21
0
 def groundwork(self, request):
     self.reviewer = validate_perms(request, self.reviewer_permissions)
     if request.GET.get('conf_slug'):
         self.conference = Conference.by_slug(request.GET['conf_slug'])
     else:
         self.conference = Conference.current_conf()
     self.conference_slugs = Conference.all_slugs()
 def groundwork(self, request, args, kwargs):
     self.user = validate_perms(request, self.email_permissions)
     user_profile = get_object_or_404(
         Profile,
         resourceitem_id=kwargs.get('profile_id'))
     return [(user_profile.user_object.email, "%s <%s>" % (
         user_profile.display_name,
         user_profile.user_object.email))]
Пример #23
0
 def groundwork(self, request, args, kwargs):
     self.user = validate_perms(request, self.email_permissions)
     user_profile = get_object_or_404(
         Profile,
         resourceitem_id=kwargs.get('profile_id'))
     return [(user_profile.user_object.email, "%s <%s>" % (
         user_profile.display_name,
         user_profile.user_object.email))]
Пример #24
0
 def groundwork(self, request, args, kwargs):
     context = super(StaffAreaWizardView,
                     self).groundwork(request, args, kwargs)
     context['event_type'] = "Staff Area"
     context['second_title'] = "Create Staff Area"
     context['volunteer_scheduling'] = validate_perms(
         request, ('Volunteer Coordinator', ), require=False)
     return context
    def get(self, request, *args, **kwargs):
        admin_profile = validate_perms(request, self.reviewer_permissions)
        troupes = Troupe.objects.filter(contact__user_object__is_active=True)
        rows = []
        intro = UserMessage.objects.get_or_create(
            view=self.__class__.__name__,
            code="INTRODUCTION",
            defaults={
                'summary': "Top of Page Instructions",
                'description': troupe_intro_msg
            })
        for troupe in troupes:
            bid_row = {}
            members = ""
            for member in troupe.membership.filter(
                    contact__user_object__is_active=True):
                members += "%s,<br>" % member.name
            bid_row['profile'] = (
                troupe.name, "%s<br>(<a href='%s'>%s</a>)" %
                (troupe.contact.display_name,
                 reverse('mail_to_individual',
                         urlconf='gbe.email.urls',
                         args=[troupe.contact.resourceitem_id
                               ]), troupe.contact.user_object.email), members)
            bid_row['id'] = troupe.resourceitem_id
            bid_row['actions'] = [{
                'url':
                reverse('troupe_view',
                        urlconf='gbe.urls',
                        args=[troupe.resourceitem_id]),
                'text':
                "View Troupe"
            }, {
                'url':
                reverse('admin_landing_page',
                        urlconf='gbe.urls',
                        args=[troupe.contact.resourceitem_id]),
                'text':
                "View Contact Landing Page"
            }, {
                'url':
                reverse('mail_to_individual',
                        urlconf='gbe.email.urls',
                        args=[troupe.contact.resourceitem_id]),
                'text':
                "Email Contact"
            }]
            rows.append(bid_row)

        return render(
            request, 'gbe/profile_review.tmpl', {
                'title': "Manage Troupes",
                'intro': intro[0].description,
                'columns': self.header,
                'rows': rows,
                'order': 0,
                'title': self.title
            })
Пример #26
0
    def process_inputs(self, request, args, kwargs):
        context = {}
        self.calendar_type = None
        self.conference = None
        self.this_day = None
        self.can_edit_show = False
        if "calendar_type" in kwargs:
            self.calendar_type = kwargs['calendar_type']
            if self.calendar_type not in list(calendar_type_options.values()):
                raise Http404

        if "day" in self.request.GET:
            try:
                self.this_day = get_object_or_404(
                    ConferenceDay,
                    day=datetime.strptime(self.request.GET.get('day', None),
                                          URL_DATE))
            except ValueError:
                raise Http404
            self.conference = self.this_day.conference

        elif "conference" in self.request.GET:
            self.conference = get_conference_by_slug(
                self.request.GET.get('conference', None))
        else:
            self.conference = get_current_conference()

        if not self.this_day:
            self.this_day = get_conference_days(
                self.conference, open_to_public=True).order_by("day").first()

        context = {
            'calendar_type': self.calendar_type,
            'conference': self.conference,
            'conference_slugs': conference_slugs(),
            'this_day': self.this_day,
        }
        if self.calendar_type == "General" and validate_perms(
                request, self.show_editors, require=False):
            self.can_edit_show = True

        if self.this_day:
            open_to_public = [True]
            if self.calendar_type == "Volunteer":
                open_to_public = [True, False]
            if ConferenceDay.objects.filter(
                    day=self.this_day.day + timedelta(days=1),
                    open_to_public__in=open_to_public).exists():
                context['next_date'] = (self.this_day.day +
                                        timedelta(days=1)).strftime(URL_DATE)
            if ConferenceDay.objects.filter(
                    day=self.this_day.day - timedelta(days=1),
                    open_to_public__in=open_to_public).exists():
                context['prev_date'] = (self.this_day.day -
                                        timedelta(days=1)).strftime(URL_DATE)

        return context
Пример #27
0
 def groundwork(self, request, args, kwargs):
     self.profile = validate_perms(request, self.permissions)
     if "conference" in kwargs:
         self.conference = get_object_or_404(
             Conference, conference_slug=kwargs['conference'])
     context = {
         'selection_form': self.get_pick_event_form(request),
         'conference_slug': self.conference.conference_slug,
     }
     return context
Пример #28
0
    def setup(self, request, args, kwargs):
        validate_perms(request, ('Scheduling Mavens',))
        context = {}
        self.conference = None
        conference_set = conference_list().order_by('-conference_slug')

        if "conference_slug" in kwargs:
            self.conference = get_conference_by_slug(
                kwargs['conference_slug'])
        else:
            self.conference = get_current_conference()

        day_list = []
        for day in self.conference.conferenceday_set.all():
            day_list += [(day.pk, day.day.strftime(DATE_FORMAT))]
        select_form = SelectEventForm(request.GET,
                                      prefix=self.conference.conference_slug)
        select_form.fields['day'].choices = day_list
        select_form.fields['staff_area'].queryset = StaffArea.objects.filter(
            conference=self.conference
        ).order_by("slug")
        context = {
            'conference': self.conference,
            'conference_slugs': [
                conf.conference_slug for conf in conference_set],
            'selection_form': select_form,
            'other_forms': [],
        }
        if 'new' in request.GET.keys():
            context['success_occurrences'] = eval(request.GET['new'])
        if 'alt_id' in request.GET.keys():
            context['alt_id'] = long(request.GET['alt_id'])
        for conf in conference_set:
            if self.conference != conf:
                hidden_form = HiddenSelectEventForm(
                    request.GET,
                    prefix=conf.conference_slug)
                conf_day_list = []
                for day in conf.conferenceday_set.all():
                    conf_day_list += [(day.pk, day.day.strftime(DATE_FORMAT))]
                hidden_form.fields['day'].choices = conf_day_list
                context['other_forms'] += [hidden_form]
        return context
Пример #29
0
 def groundwork(self, request, args, kwargs):
     context = super(StaffAreaWizardView,
                     self).groundwork(request, args, kwargs)
     context['event_type'] = "Staff Area"
     context['second_title'] = "Create Staff Area"
     context['volunteer_scheduling'] = validate_perms(
         request,
         ('Volunteer Coordinator',),
         require=False)
     return context
Пример #30
0
def staff_area_view(request, target):
    '''
    Generates a staff area report: volunteer opportunities scheduled,
    volunteers scheduled, sorted by time/day
    See ticket #250
    '''
    viewer_profile = validate_perms(request, (
        'Act Coordinator',
        'Class Coordinator',
        'Costume Coordinator',
        'Vendor Coordinator',
        'Volunteer Coordinator',
        'Tech Crew',
        'Scheduling Mavens',
        'Staff Lead',
        'Ticketing - Admin',
        'Registrar',
    ),
                                    require=True)
    other = "Potential"
    roles = []
    if 'filter' in list(request.GET.keys()) and (request.GET['filter']
                                                 == "Potential"):
        other = "Committed"
    for role, commit in list(role_commit_map.items()):
        if commit[0] == 1 or (commit[0] > 0 and commit[0] < 4
                              and other == "Committed"):
            roles += [role]
    opps_response = None
    area = None
    opps = None
    conference = None
    edit_link = None
    area = get_object_or_404(StaffArea, pk=target)
    opps_response = get_occurrences(
        labels=[area.conference.conference_slug, area.slug])
    conference = area.conference
    if area.conference.status != 'completed':
        edit_link = reverse("edit_staff",
                            urlconf='gbe.scheduling.urls',
                            args=[area.pk])
    if opps_response:
        show_general_status(request, opps_response, "staff_area")
        opps = opps_response.occurrences

    return render(
        request, 'gbe/report/staff_area_schedule.tmpl', {
            'opps': opps,
            'area': area,
            'conference': conference,
            'role_commit_map': role_commit_map,
            'visible_roles': roles,
            'other_option': other,
            'edit_link': edit_link,
        })
Пример #31
0
 def groundwork(self, request, args, kwargs):
     self.profile = validate_perms(request, ('Admins', ))
     if not self.profile.user_object.is_superuser:
         raise PermissionDenied
     message = UserMessage.objects.get_or_create(
         view=self.__class__.__name__,
         code="CHANGE_CONF_DAY_INTRO",
         defaults={
             'summary': "Change Conference Day Instructions",
             'description': change_day_note})
     return message[0].description
Пример #32
0
    def groundwork(self, request, args, kwargs):
        self.historical = "historical" in list(request.GET.keys())
        self.is_staff_lead = False
        self.admin_message = None

        if "profile_id" in kwargs:
            profile_id = kwargs.get("profile_id")
            self.admin_profile = validate_perms(
                request, ('Registrar', 'Volunteer Coordinator',
                          'Act Coordinator', 'Class Coordinator',
                          'Vendor Coordinator', 'Ticketing - Admin'))
            self.viewer_profile = get_object_or_404(Profile, pk=profile_id)
            self.admin_message = "You are viewing a user's profile, " + \
                "not your own."
        else:
            self.viewer_profile = validate_profile(request, require=False)
        self.is_staff_lead = validate_perms(request, [
            'Staff Lead',
        ],
                                            require=False)
Пример #33
0
 def groundwork(self, request, args, kwargs):
     self.profile = validate_perms(request, self.permissions)
     if "conference" in kwargs:
         self.conference = get_object_or_404(
             Conference,
             conference_slug=kwargs['conference'])
     context = {
         'selection_form':  self.get_pick_event_form(request),
         'conference_slug': self.conference.conference_slug,
     }
     return context
Пример #34
0
    def groundwork(self, request, args, kwargs):
        validate_perms(request, ('Scheduling Mavens', 'Admins'))
        context = {}
        self.conference = None
        conference_set = conference_list().order_by('-conference_slug')

        if "conference_slug" in kwargs:
            self.conference = get_conference_by_slug(kwargs['conference_slug'])
        else:
            self.conference = get_current_conference()

        day_list = []
        for day in self.conference.conferenceday_set.all():
            day_list += [(day.pk, day.day.strftime(GBE_DATE_FORMAT))]
        select_form = SelectEventForm(request.GET,
                                      prefix=self.conference.conference_slug)
        select_form.fields['day'].choices = day_list
        select_form.fields['staff_area'].queryset = StaffArea.objects.filter(
            conference=self.conference).order_by("slug")
        context = {
            'conference': self.conference,
            'conference_slugs':
            [conf.conference_slug for conf in conference_set],
            'selection_form': select_form,
            'other_forms': [],
        }
        if 'new' in list(request.GET.keys()):
            context['success_occurrences'] = eval(request.GET['new'])
        if 'alt_id' in list(request.GET.keys()):
            context['alt_id'] = int(request.GET['alt_id'])
        for conf in conference_set:
            if self.conference != conf:
                hidden_form = HiddenSelectEventForm(
                    request.GET, prefix=conf.conference_slug)
                conf_day_list = []
                for day in conf.conferenceday_set.all():
                    conf_day_list += [(day.pk,
                                       day.day.strftime(GBE_DATE_FORMAT))]
                hidden_form.fields['day'].choices = conf_day_list
                context['other_forms'] += [hidden_form]
        return context
Пример #35
0
def view_techinfo(request):
    '''
    Show the list of act tech info for all acts in a given show for a given
    tech area.
    export specifies the type of export, csv or view.  area is the tech area
    of the information being exported, audio, lighting, stage_mgmt, or all.
    '''

    validate_perms(request, ('Tech Crew', ))
    area = request.GET.get('area', 'all')
    show_id = request.GET.get('show_id', None)
    area = request.GET.get('area', 'all')
    show, acts, conference, scheduling_link = prep_act_tech_info(
        request, show_id)

    if show_id:
        logger.info(area + ', ' + show_id)
        header, techinfo = build_techinfo(show_id, area=area)
        logger.info(techinfo)
        logger.info(header)
    else:
        logger.info(area)
        header = None
        techinfo = None

    return render(
        request, 'gbe/report/view_techinfo.tmpl', {
            'this_show': show,
            'area': area,
            'area_options': ['all', 'audio', 'stage_mgmt', 'lighting'],
            'all_shows': Show.objects.filter(e_conference=conference),
            'techinfo': techinfo,
            'header': header,
            'conference_slugs': conference_slugs(),
            'conference': conference,
            'scheduling_link': scheduling_link,
            'return_link': reverse(
                'view_techinfo',
                urlconf='gbe.reporting.urls',
            )
        })
Пример #36
0
 def groundwork(self, request, args, kwargs):
     self.occurrence_id = int(kwargs['occurrence_id'])
     self.profile = validate_perms(request, self.permissions)
     response = get_occurrence(self.occurrence_id)
     show_general_status(request, response, self.__class__.__name__)
     if not response.occurrence:
         raise Http404
     self.occurrence = response.occurrence
     self.start_day = self.occurrence.starttime.date()
     response = get_occurrences(parent_event_id=self.occurrence_id)
     self.children = response.occurrences
     show_general_status(request, response, self.__class__.__name__)
 def groundwork(self, request, args, kwargs):
     context = super(TicketedEventWizardView,
                     self).groundwork(request, args, kwargs)
     self.event_type = kwargs['event_type']
     context['event_type'] = event_settings[self.event_type]['event_type']
     context['second_title'] = event_settings[
         self.event_type]['second_title']
     context['tickets'] = None
     context['volunteer_scheduling'] = event_settings[
         self.event_type]['volunteer_scheduling'] and validate_perms(
             request, ('Volunteer Coordinator', ), require=False)
     return context
Пример #38
0
 def groundwork(self, request, args, kwargs):
     self.profile = validate_perms(request, self.permissions)
     if "staff_id" in kwargs:
         self.staff_area = get_object_or_404(StaffArea,
                                             id=int(kwargs['staff_id']))
     self.conference = self.staff_area.conference
     self.manage_vol_url = reverse('manage_vol',
                                   urlconf='gbe.scheduling.urls',
                                   args=[self.staff_area.id])
     self.labels = [self.staff_area.slug]
     self.success_url = reverse('edit_staff',
                                urlconf='gbe.scheduling.urls',
                                args=[self.staff_area.id])
Пример #39
0
def review_act_techinfo(request, show_id=None):
    '''
    Show the list of act tech info for all acts in a given show
    '''
    validate_perms(request, ('Tech Crew',))
    # using try not get_or_404 to cover the case where the show is there
    # but does not have any scheduled events.
    # I can still show a list of shows this way.

    show, acts, conference, scheduling_link = prep_act_tech_info(
        request, show_id)
    return render(request,
                  'gbe/report/act_tech_review.tmpl',
                  {'this_show': show,
                   'acts': acts,
                   'all_shows': conf.Show.objects.filter(
                       e_conference=conference),
                   'conference_slugs': conference_slugs(),
                   'conference': conference,
                   'scheduling_link': scheduling_link,
                   'return_link': reverse('act_techinfo_review',
                                          urlconf='gbe.reporting.urls',)})
Пример #40
0
def view_techinfo(request):
    '''
    Show the list of act tech info for all acts in a given show for a given
    tech area.
    export specifies the type of export, csv or view.  area is the tech area
    of the information being exported, audio, lighting, stage_mgmt, or all.
    '''

    validate_perms(request, ('Tech Crew',))
    area = request.GET.get('area', 'all')
    show_id = request.GET.get('show_id', None)
    area = request.GET.get('area', 'all')
    show, acts, conference, scheduling_link = prep_act_tech_info(
        request, show_id)

    if show_id:
        logger.info(area+', '+show_id)
        header, techinfo = build_techinfo(show_id, area=area)
        logger.info(techinfo)
        logger.info(header)
    else:
        logger.info(area)
        header = None
        techinfo = None

    return render(request,
                  'gbe/report/view_techinfo.tmpl',
                  {'this_show': show,
                   'area': area,
                   'area_options': ['all', 'audio', 'stage_mgmt', 'lighting'],
                   'all_shows': Show.objects.filter(
                       e_conference=conference),
                   'techinfo': techinfo,
                   'header': header,
                   'conference_slugs': conference_slugs(),
                   'conference': conference,
                   'scheduling_link': scheduling_link,
                   'return_link': reverse('view_techinfo',
                                          urlconf='gbe.reporting.urls',)})
Пример #41
0
def room_schedule(request, room_id=None):
    viewer_profile = validate_perms(request,
                                    'any',
                                    require=True)

    conference_slugs = conf.Conference.all_slugs()
    if request.GET and request.GET.get('conf_slug'):
        conference = conf.Conference.by_slug(request.GET['conf_slug'])
    else:
        conference = conf.Conference.current_conf()

    if room_id:
        rooms = [get_object_or_404(sched.LocationItem,
                                   resourceitem_id=room_id)]
    else:
        rooms = sched.LocationItem.objects.all()

    conf_days = conference.conferenceday_set.all()
    tmp_days = []
    for position in range(0, len(conf_days)):
        tmp_days.append(conf_days[position].day)
    conf_days = tmp_days

    # rearrange the data into the format of:
    #  - room & date of booking
    #       - list of bookings
    # this lets us have 1 table per day per room
    room_set = []
    for room in rooms:
        day_events = []
        current_day = None
        for booking in room.get_bookings:
            if not current_day:
                current_day = booking.start_time.date()
            if current_day != booking.start_time.date():

                if current_day in conf_days:
                    room_set += [{'room': room,
                                  'date': current_day,
                                  'bookings': day_events}]
                current_day = booking.start_time.date()
                day_events = []
            day_events += [booking]
        if current_day in conf_days:
            room_set += [{'room': room,
                          'date': current_day,
                          'bookings': day_events}]
    return render(request, 'gbe/report/room_schedule.tmpl',
                  {'room_date': room_set,
                   'conference_slugs': conference_slugs,
                   'conference': conference})
Пример #42
0
def room_setup(request):

    conference_slugs = conf.Conference.all_slugs()
    if request.GET and request.GET.get('conf_slug'):
        conference = conf.Conference.by_slug(request.GET['conf_slug'])
    else:
        conference = conf.Conference.current_conf()

    conf_days = conference.conferenceday_set.all()
    tmp_days = []
    for position in range(0, len(conf_days)):
        tmp_days.append(conf_days[position].day)
    conf_days = tmp_days

    viewer_profile = validate_perms(request, 'any', require=True)
    rooms = sched.LocationItem.objects.all()

    # rearrange the data into the format of:
    #  - room & date of booking
    #       - list of bookings
    # this lets us have 1 table per day per room
    room_set = []
    for room in rooms:
        day_events = []
        current_day = None
        for booking in room.get_bookings:
            booking_class = sched.EventItem.objects.get_subclass(
                eventitem_id=booking.eventitem.eventitem_id)

            if not current_day:
                current_day = booking.start_time.date()
            if current_day != booking.start_time.date():
                if (current_day in conf_days and len(day_events) > 0):
                    room_set += [{'room': room,
                                  'date': current_day,
                                  'bookings': day_events}]
                current_day = booking.start_time.date()
                day_events = []
            if booking_class.__class__.__name__ == 'Class':
                day_events += [{'event': booking,
                                'class': booking_class}]
        if (current_day in conf_days and len(day_events) > 0):
            room_set += [{'room': room,
                          'date': current_day,
                          'bookings': day_events}]

    return render(request,
                  'gbe/report/room_setup.tmpl',
                  {'room_date': room_set,
                   'conference_slugs': conference_slugs,
                   'conference': conference})
Пример #43
0
 def groundwork(self, request, args, kwargs):
     context = super(TicketedEventWizardView,
                     self).groundwork(request, args, kwargs)
     self.event_type = kwargs['event_type']
     context['event_type'] = event_settings[
         self.event_type]['event_type']
     context['second_title'] = event_settings[
         self.event_type]['second_title']
     context['tickets'] = None
     context['volunteer_scheduling'] = event_settings[
         self.event_type]['volunteer_scheduling'] and validate_perms(
         request,
         ('Volunteer Coordinator',),
         require=False)
     return context
Пример #44
0
def list_reports(request):
    '''
      Shows listing of all reports in this area
    '''
    viewer_profile = validate_perms(request, 'any', require=True)
    if request.GET and request.GET.get('conf_slug'):
        conference = get_conference_by_slug(request.GET['conf_slug'])
    else:
        conference = get_current_conference()
    return render(request,
                  'gbe/report/report_list.tmpl', {
                      'conference_slugs': conference_slugs(),
                      'conference': conference,
                      'return_link': reverse('report_list',
                                             urlconf='gbe.reporting.urls')})
Пример #45
0
    def groundwork(self, request, args, kwargs):
        viewer_profile = validate_perms(request, 'any', require=True)

        if request.GET and request.GET.get('conf_slug'):
            self.conference = get_conference_by_slug(request.GET['conf_slug'])
        else:
            self.conference = get_current_conference()

        if "profile_id" in kwargs:
            self.profiles = [get_object_or_404(
                Profile,
                pk=kwargs['profile_id'])]
        else:
            self.profiles = Profile.objects.filter(
                user_object__is_active=True).select_related()
Пример #46
0
 def post(self, request, *args, **kwargs):
     more_view = "edit_event"
     context = self.groundwork(request, args, kwargs)
     if self.event_type == "show":
         context['second_form'] = ShowBookingForm(request.POST)
         more_view = "edit_show"
     else:
         context['second_form'] = GenericBookingForm(request.POST)
     context['scheduling_form'] = ScheduleOccurrenceForm(
         request.POST,
         conference=self.conference)
     context['worker_formset'] = self.make_formset(
         event_settings[self.event_type]['roles'],
         post=request.POST)
     if validate_perms(request, ('Ticketing - Admin',), require=False):
         context['tickets'] = LinkBPTEventForm(request.POST, initial={
             'conference': self.conference, })
     if context['second_form'].is_valid(
             ) and context['scheduling_form'].is_valid(
             ) and self.is_formset_valid(context['worker_formset']) and (
             not context['tickets'] or context['tickets'].is_valid()):
         new_event = context['second_form'].save(commit=False)
         new_event.duration = Duration(
             minutes=context['scheduling_form'].cleaned_data[
                 'duration']*60)
         new_event.save()
         response = self.book_event(context['scheduling_form'],
                                    context['worker_formset'],
                                    new_event)
         if context['tickets']:
             self.setup_ticket_links(request, new_event, context['tickets'])
         success = self.finish_booking(
             request,
             response,
             context['scheduling_form'].cleaned_data['day'].pk)
         if success:
             if request.POST.get(
                     'set_event') == 'More...':
                 return HttpResponseRedirect(
                     "%s?volunteer_open=True&rehearsal_open=True" %
                     reverse(more_view,
                             urlconf='gbe.scheduling.urls',
                             args=[self.conference.conference_slug,
                                   response.occurrence.pk]))
             else:
                 return success
     return render(request, self.template, context)
Пример #47
0
    def post(self, request, *args, **kwargs):
        self.user = validate_perms(request, self.reviewer_permissions)
        self.groundwork(request, args, kwargs)
        if 'send' in request.POST.keys():
            everyone = False
            recipient_info = None
            to_list = []
            if 'everyone' in request.POST.keys():
                to_list = self.get_everyone(request)
                everyone = True
            elif self.select_form_is_valid():
                to_list, recipient_info = self.prep_email_form(request)
            if len(to_list) > 0:
                mail_form = self.send_mail(request, to_list)
                if mail_form.is_valid():
                    return HttpResponseRedirect(self.url)
                else:
                    context = {
                        "email_form": mail_form,
                        "recipient_info": [recipient_info],
                        "everyone": everyone}
                    context.update(self.get_select_forms())
                    return render(
                        request,
                        self.template,
                        context)
        elif 'everyone' in request.POST.keys():
            return self.filter_everyone(request)
        elif ('filter' in request.POST.keys() or 'refine' in request.POST.keys(
                )) and self.select_form_is_valid():
            return self.filter_emails(request)

        user_message = UserMessage.objects.get_or_create(
            view=self.__class__.__name__,
            code="UNKNOWN_ACTION",
            defaults={
                'summary': "Unknown Request",
                'description': unknown_request})
        messages.error(
                request,
                user_message[0].description)
        return render(
            request,
            self.template,
            self.get_select_forms())
Пример #48
0
def DeleteProfileView(request, profile_id):
    admin_profile = validate_perms(request, ('Registrar',))
    if profile_id:
        user_profile = get_object_or_404(Profile, resourceitem_id=profile_id)
    return_page = HttpResponseRedirect(reverse('manage_users',
                                               urlconf='gbe.urls'))

    bookings = ResourceAllocation.objects.filter(
        resource__worker___item=user_profile).count()
    if (bookings >= 1) or (
            user_profile.personae.count() >= 1) or (
            user_profile.contact.count() >= 1) or (
            user_profile.volunteering.count() >= 1) or (
            user_profile.costumes.count() >= 1) or (
            user_profile.vendor_set.count() >= 1) or (
            user_profile.bidevaluation_set.count() >= 1) or (
            user_profile.actbidevaluation_set.count() >= 1) or (
            user_profile.user_object.purchaser_set.count() >= 1):
        user_profile.user_object.is_active = False
        user_profile.user_object.save()
        admin_page = "<a href='/admin/auth/user/%d/'>User Page</a>" % (
            user_profile.user_object.pk
        )
        user_message = UserMessage.objects.get_or_create(
            view='DeleteProfileView',
            code="DEACTIVATE_PROFILE_ADMIN",
            defaults={
                'summary': "Update Profile Success",
                'description':
                    default_deactivate_profile_admin_msg + admin_page
                })
    else:
        user_profile.user_object.delete()
        user_message = UserMessage.objects.get_or_create(
            view='DeleteProfileView',
            code="DELETE_PROFILE_ADMIN",
            defaults={
                'summary': "Update Profile Success",
                'description': default_delete_profile_admin_msg})
    deletion_summary = "Removed %s<br><br>\n%s" % (
        user_profile.user_object.username,
        user_message[0].description)
    messages.success(request, deletion_summary)
    return return_page
Пример #49
0
def volunteer_type_view(request, conference_choice, volunteer_type_id):
    '''
    Generates a staff area report: volunteer opportunities scheduled,
    volunteers scheduled, sorted by time/day
    See ticket #250
    '''
    viewer_profile = validate_perms(request, 'any', require=True)
    vol_type = get_object_or_404(AvailableInterest, pk=volunteer_type_id)
    eventitem_id_list = GenericEvent.objects.filter(
        e_conference__conference_slug=conference_choice,
        volunteer_type=vol_type).values_list('eventitem_id', flat=True)
    collection = get_occurrences(
        labels=[conference_choice, 'Volunteer'],
        foreign_event_ids=eventitem_id_list)
    show_general_status(request, collection, "volunteer_type")

    return render(request,
                  'gbe/report/staff_area_schedule.tmpl',
                  {'opps': collection.occurrences,
                   'vol_type': vol_type})
Пример #50
0
    def groundwork(self, request, args, kwargs):
        redirect = super(
            MakeVolunteerView,
            self).groundwork(request, args, kwargs)
        if redirect:
            return redirect

        if self.bid_object and (self.bid_object.profile != self.owner):
            self.coordinator = validate_perms(
                request,
                ('Volunteer Coordinator',))
            self.owner = self.bid_object.profile

        try:
            self.windows = self.conference.windows()
            self.available_interests = AvailableInterest.objects.filter(
                visible=True).order_by('interest')
        except:
            return self.no_vol_bidding(request)

        if len(self.windows) == 0 or len(self.available_interests) == 0:
            return self.no_vol_bidding(request)

        if not self.bid_object:
            self.action = "Submission"
            try:
                existing_bid = self.owner.volunteering.get(
                    b_conference=self.conference)
                user_message = UserMessage.objects.get_or_create(
                    view=self.__class__.__name__,
                    code="FOUND_EXISTING_BID",
                    defaults={
                        'summary': "Existing Volunteer Offer Found",
                        'description': existing_volunteer_msg})
                messages.success(request, user_message[0].description)
                return reverse(
                    'volunteer_edit',
                    urlconf='gbe.urls',
                    args=[existing_bid.id])
            except:
                pass
Пример #51
0
 def get(self, request, *args, **kwargs):
     context = self.groundwork(request, args, kwargs)
     if self.event_type == "show":
         context['second_form'] = ShowBookingForm(
             initial={'e_conference':  self.conference})
     else:
         context['second_form'] = GenericBookingForm(
             initial={'e_conference':  self.conference,
                      'type': self.event_type.title()})
     context['scheduling_form'] = ScheduleOccurrenceForm(
         conference=self.conference,
         open_to_public=True,
         initial={'duration': 1,
                  'max_volunteer': event_settings[
                     self.event_type]['max_volunteer']})
     context['worker_formset'] = self.make_formset(
         event_settings[self.event_type]['roles'])
     if validate_perms(request, ('Ticketing - Admin',), require=False):
         context['tickets'] = LinkBPTEventForm(initial={
             'conference': self.conference, })
     return render(request, self.template, context)
Пример #52
0
    def get(self, request, *args, **kwargs):
        self.reviewer = validate_perms(request, self.reviewer_permissions)
        self.user = request.user
        if request.GET.get('conf_slug'):
            self.conference = Conference.by_slug(request.GET['conf_slug'])
        else:
            self.conference = Conference.current_conf()

        if request.GET.get('changed_id'):
            self.changed_id = int(request.GET['changed_id'])
        else:
            self.changed_id = -1

        try:
            self.get_bid_list()
        except IndexError:
            return HttpResponseRedirect(reverse('home', urlconf='gbe.urls'))

        self.conference_slugs = Conference.all_slugs()
        return render(request, self.template,
                      self.get_context_dict())
Пример #53
0
def review_staff_area_view(request):
    '''
      Shows listing of staff area stuff for drill down
    '''
    viewer_profile = validate_perms(request, 'any', require=True)
    if request.GET and request.GET.get('conf_slug'):
        conference = Conference.by_slug(request.GET['conf_slug'])
    else:
        conference = Conference.current_conf()

    header = ['Area', 'Leaders', 'Check Staffing']

    return render(
        request,
        'gbe/report/staff_areas.tmpl',
        {'header': header,
         'areas': StaffArea.objects.filter(conference=conference),
         'shows': Show.objects.filter(e_conference=conference),
         'volunteer_types': AvailableInterest.objects.filter(visible=True),
         'conference_slugs': conference_slugs(),
         'conference': conference})
Пример #54
0
 def get_nodes(self, request):
     """
     populate for users based on profile.
     Users must have special privileges to use this
     """
     nodes = []
     profile = validate_perms(request, 'any', require=False)
     if profile:
         privileges = set(request.user.profile.privilege_groups)
         roles = profile.get_roles()
         for role in ['Technical Director', 'Producer', 'Staff Lead']:
             if role in roles:
                 privileges.add(role)
         nodes.append(NavigationNode(_("Special"), "", 1))
         for node in special_menu_tree:
             if not privileges.isdisjoint(node['groups']):
                 nodes.append(NavigationNode(
                     title=node['title'],
                     url=node['url'],
                     id=node['id'],
                     parent_id=node['parent_id']))
     return nodes