Ejemplo n.º 1
0
    def set_valid_form(self, request):
        if self.bid_edit:
            changed_windows = self.get_reduced_availability(
                self.bid_object,
                self.form)
            warnings = self.manage_schedule_problems(
                changed_windows, self.bid_object.profile)
            if warnings:
                warn_msg = "<br><ul>"
                user_message = UserMessage.objects.get_or_create(
                    view=self.__class__.__name__,
                    code="AVAILABILITY_CONFLICT",
                    defaults={
                        'summary': "Volunteer Edit Caused Conflict",
                        'description': default_window_schedule_conflict, })
                for warn in warnings:
                    warn_msg += "<li>%s working for %s - as %s" % (
                        warn['time'],
                        warn['event'],
                        warn['interest']
                    )
                    if 'lead' in warn:
                        warn_msg += ", Staff Lead is " + \
                            "<a href='email: %s'>%s</a>" % (
                                warn['email'],
                                warn['lead']
                            )
                    warn_msg += "</li>"
                warn_msg += "</ul>"
                messages.warning(
                    request,
                    user_message[0].description+warn_msg)
                send_schedule_update_mail(
                    self.bid_type,
                    self.bid_object.profile)
                send_warnings_to_staff(
                    self.bid_object.profile,
                    self.bid_type,
                    warnings)

        self.bid_object.b_conference = self.conference
        self.bid_object.profile = self.owner
        self.bid_object.save()

        self.bid_object.available_windows.clear()
        self.bid_object.unavailable_windows.clear()
        for window in self.form.cleaned_data['available_windows']:
            self.bid_object.available_windows.add(window)
        for window in self.form.cleaned_data['unavailable_windows']:
            self.bid_object.unavailable_windows.add(window)
        for interest_form in self.formset:
            vol_interest = interest_form.save(commit=False)
            vol_interest.volunteer = self.bid_object
            vol_interest.save()
Ejemplo n.º 2
0
    def bid_state_change(self, request):
        # Clear all commitments
        remove_response = remove_person(
            user=self.bidder.user_object,
            labels=[self.object.b_conference.conference_slug],
            roles=['Volunteer'])
        show_general_status(request, remove_response, self.__class__.__name__)

        # if the volunteer has been accepted, set the events.
        if request.POST['accepted'] == '3':
            person = Person(
                    user=self.bidder.user_object,
                    public_id=self.bidder.pk,
                    role='Volunteer')
            for assigned_event in request.POST.getlist('events'):
                set_response = set_person(
                    assigned_event,
                    person)
                show_general_status(request,
                                    set_response,
                                    self.__class__.__name__)

            email_status = send_schedule_update_mail('Volunteer', self.bidder)
            self.check_email_status(request, email_status)

        return super(VolunteerChangeStateView, self).bid_state_change(
            request)
Ejemplo n.º 3
0
    def bid_state_change(self, request):
        # Clear all commitments
        remove_response = remove_person(
            user=self.bidder.user_object,
            labels=[self.object.b_conference.conference_slug],
            roles=['Volunteer'])
        show_general_status(request, remove_response, self.__class__.__name__)

        # if the volunteer has been accepted, set the events.
        if request.POST['accepted'] == '3':
            person = Person(user=self.bidder.user_object,
                            public_id=self.bidder.pk,
                            role='Volunteer')
            for assigned_event in request.POST.getlist('events'):
                set_response = set_person(assigned_event, person)
                show_general_status(request, set_response,
                                    self.__class__.__name__)

            email_status = send_schedule_update_mail('Volunteer', self.bidder)
            self.check_email_status(request, email_status)

        return super(VolunteerChangeStateView, self).bid_state_change(request)
Ejemplo n.º 4
0
 def send_notifications(self, request, response, state, person):
     if state == 3:
         email_status = send_schedule_update_mail("Volunteer",
                                                  person.user.profile)
     else:
         email_status = send_bid_state_change_mail(
             "volunteer", person.user.profile.contact_email,
             person.user.profile.get_badge_name(), response.occurrence,
             state)
     staff_status = send_volunteer_update_to_staff(self.reviewer,
                                                   person.user.profile,
                                                   response.occurrence,
                                                   person.role, response)
     if email_status or staff_status:
         user_message = UserMessage.objects.get_or_create(
             view=self.__class__.__name__,
             code="EMAIL_FAILURE",
             defaults={
                 'summary': "Email Failed",
                 'description': volunteer_allocate_email_fail_msg
             })
         messages.error(request,
                        user_message[0].description + "status code: ")
Ejemplo n.º 5
0
 def post(self, request, *args, **kwargs):
     form = WorkerAllocationForm(request.POST)
     response = None
     email_status = None
     if not form.is_valid():
         context = None
         if request.POST['alloc_id'] == '-1':
             form.data['alloc_id'] = -1
             context = {'new_worker_alloc_form': form}
         else:
             is_present = test_booking(
                 int(request.POST['alloc_id']), self.occurrence.pk)
             if not is_present:
                 response = PersonResponse(errors=[Error(
                     code="BOOKING_NOT_FOUND",
                     details="Booking id %s for occurrence %d not found" % (
                         request.POST['alloc_id'], self.occurrence.pk)), ])
             context = {'worker_alloc_forms': form}
         return self.make_post_response(request,
                                        response=response,
                                        errorcontext=context)
     else:
         data = form.cleaned_data
         if 'delete' in request.POST.keys():
             if ('alloc_id' not in request.POST) or (len(
                     request.POST['alloc_id']) == 0):
                 return self.make_post_response(
                     request,
                     PersonResponse(errors=[Error(
                         code="NO_BOOKING",
                         details="No booking id for occurrence id %d." % (
                             self.occurrence.pk))]))
             response = remove_booking(
                 self.occurrence.pk,
                 booking_id=int(request.POST['alloc_id']))
             if response.booking_id:
                 email_status = send_schedule_update_mail(
                     "Volunteer", data['worker'].workeritem.as_subtype)
         elif data.get('worker', None):
             if data['role'] == "Volunteer":
                 data['worker'].workeritem.as_subtype.check_vol_bid(
                     self.item.e_conference)
             person = Person(
                 user=data['worker'].workeritem.as_subtype.user_object,
                 public_id=data['worker'].workeritem.as_subtype.pk,
                 role=data['role'],
                 label=data['label'],
                 worker=None)
             if int(data['alloc_id']) > -1:
                 person.booking_id = int(data['alloc_id'])
             response = set_person(
                 self.occurrence.pk,
                 person
             )
             email_status = send_schedule_update_mail("Volunteer",
                                                      data['worker'])
         if email_status:
             user_message = UserMessage.objects.get_or_create(
                 view=self.__class__.__name__,
                 code="EMAIL_FAILURE",
                 defaults={
                     'summary': "Email Failed",
                     'description': volunteer_allocate_email_fail_msg})
             messages.error(
                 request,
                 user_message[0].description)
         self.success_url = reverse('edit_event',
                                    urlconf='gbe.scheduling.urls',
                                    args=[self.conference.conference_slug,
                                          self.occurrence.pk])
     return self.make_post_response(request,
                                    response=response)
    def get(self, request, *args, **kwargs):
        if request.GET.get('next', None):
            redirect_to = request.GET['next']
        else:
            redirect_to = reverse('home', urlconf='gbe.urls')
        this_url = reverse('set_volunteer',
                           args=[kwargs['occurrence_id'], kwargs['state']],
                           urlconf='gbe.scheduling.urls')
        response = check_user_and_redirect(request, this_url,
                                           self.__class__.__name__)
        if response['error_url']:
            return HttpResponseRedirect(response['error_url'])
        self.owner = response['owner']
        occurrence_id = int(kwargs['occurrence_id'])
        occ_response = get_occurrence(occurrence_id)
        show_general_status(request, occ_response, self.__class__.__name__)
        if occ_response.errors:
            return HttpResponseRedirect(redirect_to)

        volunteers = get_bookings([occurrence_id],
                                  roles=["Volunteer", "Pending Volunteer"])
        bookings = []
        for person in volunteers.people:
            if person.user == self.owner.user_object:
                bookings += [person]
        schedule_response = None
        if kwargs['state'] == 'on' and len(bookings) == 0:
            # if this person hasn't volunteered yet, and wants to
            role = "Volunteer"
            default_summary = "User has volunteered"
            default_message = set_volunteer_msg
            if occ_response.occurrence.approval_needed:
                role = "Pending Volunteer"
                default_summary = "User is pending"
                default_message = set_pending_msg
            person = Person(user=self.owner.user_object, role=role)
            schedule_response = set_person(occurrence_id, person)
            show_general_status(request, schedule_response,
                                self.__class__.__name__, False)
            if len(schedule_response.errors) == 0 and (
                    schedule_response.booking_id):
                user_message = UserMessage.objects.get_or_create(
                    view=self.__class__.__name__,
                    code="SET_%s" % role.replace(" ", "_").upper(),
                    defaults={
                        'summary': default_summary,
                        'description': default_message
                    })
                messages.success(request, user_message[0].description)

        elif kwargs['state'] == 'off' and len(bookings) > 0:
            # if this person has volunteered, and is withdrawing
            success = True
            for booking in bookings:
                role = booking.role
                default_summary = "User withdrew"
                default_message = unset_volunteer_msg
                if role == "Pending Volunteer":
                    default_summary = "Pending user withdrew"
                    default_message = unset_pending_msg
                schedule_response = remove_booking(occurrence_id,
                                                   booking.booking_id)
                show_general_status(request, schedule_response,
                                    self.__class__.__name__)
                if schedule_response.booking_id:
                    user_message = UserMessage.objects.get_or_create(
                        view=self.__class__.__name__,
                        code="REMOVE_%s" % role.replace(" ", "_").upper(),
                        defaults={
                            'summary': default_summary,
                            'description': default_message
                        })
                    messages.success(request, user_message[0].description)
        if schedule_response and schedule_response.booking_id:
            email_status = send_schedule_update_mail("Volunteer", self.owner)
            staff_status = send_volunteer_update_to_staff(
                self.owner, self.owner, occ_response.occurrence,
                kwargs['state'], schedule_response)
            if (email_status or staff_status) and validate_perms(
                    request, 'any', require=False):
                user_message = UserMessage.objects.get_or_create(
                    view=self.__class__.__name__,
                    code="EMAIL_FAILURE",
                    defaults={
                        'summary': "Email Failed",
                        'description': volunteer_allocate_email_fail_msg
                    })
                messages.error(request,
                               user_message[0].description + "status code: ")
        return HttpResponseRedirect(redirect_to)