Beispiel #1
0
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(AnnouncementForm, self).__init__(*args, **kwargs)
        # if the user can see/modify the status, not trainee, so make it easy for approved announcements to be created by non-trainees
        self.fields['announcement_end_date'].widget.attrs[
            'class'] += ' hide-if-in-class hide-if-popup show-if-on-tv-page'
        attrs = {'class': 'hide-if-in-class', 'id': 'id_trainees'}
        self.fields['trainees_show'].widget.attrs = attrs
        self.fields['is_popup'].widget.attrs[
            'class'] = 'hide-if-in-class hide-if-on-tv-page'
        self.fields['is_popup'].label = 'Show announcement as a popup.'
        self.fields['all_trainees'].widget.attrs[
            'class'] = 'hide-if-in-class hide-if-on-tv-page'
        self.fields[
            'all_trainees'].label = "Show announcement to all trainees."
        self.fields[
            'trainee_comments'].label = "Trainee's comments/description for why this announcement is necessary."
        self.fields['fellowshipped'].initial = False
        self.fields[
            'fellowshipped'].label = "Has this announcement been fellowshipped and approved by a TA?"

        if not is_TA(user):
            del self.fields['TA_comments']
            del self.fields['status']

        if is_TA(user):
            self.fields['status'].initial = 'A'
            self.fields['status'].widget = forms.HiddenInput()
            del self.fields['trainee_comments']
            del self.fields['fellowshipped']
Beispiel #2
0
 def get_context_data(self, **kwargs):
     context = super(QuestionList, self).get_context_data(**kwargs)
     trainee = trainee_from_user(self.request.user)
     if is_TA(self.request.user) or (trainee.firstname == 'Tobi'
                                     and trainee.lastname == 'Abosede') or (
                                         trainee.firstname == 'Sofia'
                                         and trainee.lastname == 'Hunter'):
         faqs = HouseInspectionFaq.objects.none()
         for status in ['U', 'A', 'An', 'D']:
             faqs = chain(
                 faqs,
                 HouseInspectionFaq.objects.filter(status=status).filter(
                     date_assigned__gte=Term.current_term().get_date(0, 0)).
                 order_by('date_assigned').order_by('status'))
         context['faqs'] = faqs
     if not is_TA(self.request.user) and (
             trainee.firstname != 'Tobi' or trainee.lastname != 'Abosede'
     ) and (trainee.firstname != 'Sofia' or trainee.lastname != 'Hunter'):
         faqs = HouseInspectionFaq.objects.none()
         for status in ['A']:
             faqs = chain(
                 faqs,
                 HouseInspectionFaq.objects.filter(status=status).filter(
                     date_assigned__gte=Term.current_term().get_date(
                         0, 0)).order_by('date_assigned'))
         context['faqs'] = faqs
     return context
Beispiel #3
0
 def form_valid(self, form):
     room_reservation = form.save(commit=False)
     room_reservation.requester = User.objects.get(id=self.request.user.id)
     if is_TA(self.request.user):
         room_reservation.status = 'A'
     room_reservation.save()
     return super(RoomReservationSubmit, self).form_valid(form)
Beispiel #4
0
 def get_queryset(self):
     if is_TA(self.request.user):
         return Announcement.objects.filter().order_by('status')
     else:
         trainee = self.request.user
         return Announcement.objects.filter(
             author=trainee).order_by('status')
Beispiel #5
0
 def get_queryset(self):
   if is_TA(self.request.user):
     qs = WebRequest.objects.filter(status='P') | WebRequest.objects.filter(status='F')
     return qs.order_by('date_assigned')
   else:
     trainee = trainee_from_user(self.request.user)
     qset = WebRequest.objects.filter(trainee=trainee).order_by('status')
   return qset
Beispiel #6
0
 def get_context_data(self, **kwargs):
     ctx = super(ExamTemplateListView, self).get_context_data(**kwargs)
     user = self.request.user
     is_manage = 'manage' in self.kwargs
     ctx['exam_service'] = is_manage and user.is_designated_grader(
     ) or is_TA(user)
     ctx['classes'] = Class.regularclasses.all()
     ctx['terms'] = reversed(Term.objects.all())
     return ctx
Beispiel #7
0
 def get_context_data(self, **kwargs):
     ctx = super(ExamTemplateListView, self).get_context_data(**kwargs)
     user = self.request.user
     is_manage = 'manage' in self.kwargs
     ctx['exam_service'] = is_manage and user.is_designated_grader(
     ) or is_TA(user)
     ctx['classes'] = Event.objects.filter(start=datetime.strptime('10:15', '%H:%M'), type='C').exclude(name="Session II")\
         | Event.objects.filter(start=datetime.strptime('08:25', '%H:%M')).exclude(name="Session I")
     ctx['terms'] = Term.objects.all()
     return ctx
Beispiel #8
0
 def __init__(self, user=None, *args, **kwargs):
     super(MaintenanceRequestForm, self).__init__(*args, **kwargs)
     if user.current_term > 2 and user.groups.filter(
             name='facility_maintenance').exists() or is_TA(user):
         self.fields['house'].queryset = House.objects.all()
     elif user and user.groups.filter(name='HC').exists():
         self.fields['house'].queryset = House.objects.filter(
             Q(pk=user.house.id) | Q(name__in=('MCC', 'TC')))
     else:
         self.fields['house'].queryset = House.objects.filter(
             name__in=('MCC', 'TC'))
Beispiel #9
0
def finalizeStatus(request):
    my_user = request.user
    if request.is_ajax():
        action = request.POST['action']
        week_id = request.POST['week_id']
        forced = request.POST.get('forced', False)

        current_term = Term.current_term()
        term_id = current_term.id
        term_week_code = str(term_id) + "_" + str(week_id)
        now = datetime.date.today()

        lastDayofWeek = Term.enddate_of_week(current_term, int(week_id))
        WedofNextWeek = lastDayofWeek + datetime.timedelta(days=3)

        # if not TA, cannot finalize till right time.
        if is_trainee(my_user):
            if forced:
                pass
            elif now >= WedofNextWeek or now < lastDayofWeek:
                return HttpResponse('Cannot finalize now', status=400)
        if is_TA(my_user):
            my_user = Trainee.objects.get(pk=request.POST['userId'])

        try:
            trainee_bible_reading = BibleReading.objects.get(trainee=my_user)

        except BibleReading.ObjectDoesNotExist:
            trainee_bible_reading = BibleReading(
                trainee=my_user,
                weekly_reading_status={term_week_code: EMPTY_WEEK_CODE_QUERY},
                books_read={})

        if term_week_code not in trainee_bible_reading.weekly_reading_status:
            trainee_bible_reading.weekly_reading_status[
                term_week_code] = EMPTY_WEEK_CODE_QUERY

        trainee_weekly_reading = trainee_bible_reading.weekly_reading_status[
            term_week_code]
        json_weekly_reading = json.loads(trainee_weekly_reading)
        if action == "finalize" and str(
                json_weekly_reading['finalized']) == FINALIZED_STR:
            return HttpResponse("Already finalized, so cannot finalize.",
                                status=400)
        if action == "finalize":
            json_weekly_reading['finalized'] = FINALIZED_STR
        if action == "unfinalize":
            json_weekly_reading['finalized'] = UNFINALIZED_STR
        hstore_weekly_reading = json.dumps(json_weekly_reading)
        trainee_bible_reading.weekly_reading_status[
            term_week_code] = hstore_weekly_reading
        trainee_bible_reading.save()

        return HttpResponse("Successfully saved")
Beispiel #10
0
 def get_context_data(self, **kwargs):
     context = super(WebRequestList, self).get_context_data(**kwargs)
     if is_TA(self.request.user):
         wars = WebRequest.objects.none()
         for status in ['P', 'F', 'A', 'D']:
             wars = chain(
                 wars,
                 WebRequest.objects.filter(
                     status=status).order_by('date_assigned'))
         context['wars'] = wars
     return context
Beispiel #11
0
 def get_queryset(self):
     user_has_service = self.request.user.groups.filter(
         name__in=['facility_maintenance', 'linens', 'frames']).exists()
     if is_TA(self.request.user) or user_has_service:
         qs = self.model.objects.filter(
             status='P') | self.model.objects.filter(status='F')
         return qs.order_by('date_requested')
     else:
         trainee = self.request.user
         return self.model.objects.filter(
             trainee_author=trainee).order_by('status')
Beispiel #12
0
 def get_context_data(self, **kwargs):
   context = super(WebRequestList, self).get_context_data(**kwargs)
   if is_TA(self.request.user):
     wars = WebRequest.objects.none()
     for status in ['P', 'F', 'A', 'D']:
       wars = chain(wars, WebRequest.objects.filter(status=status).filter(date_assigned__gte=Term.current_term().get_date(0, 0)).order_by('date_assigned'))
     context['wars'] = wars
   # if not is_TA(self.request.user):
   #   del context['source_url']
   #   del context['header']
   #   del context['targets_list']
   return context
Beispiel #13
0
 def __init__(self, *args, **kwargs):
     self.user = kwargs.pop('user')
     super(AudioRequestForm, self).__init__(*args, **kwargs)
     sorted_files = order_audio_files(
         AudioFile.objects.filter_term(Term.current_term()))
     choices = [(a.id, a.request_title) for a in sorted_files]
     self.fields['audio_requested'].widget.attrs['class'] = 'select-fk'
     self.fields['audio_requested'].choices = choices
     if not is_TA(self.user):
         self.fields['TA_comments'].disabled = True
         if self.instance.id and self.instance.status in ['A', 'D']:
             self.fields['trainee_comments'].disabled = True
             self.fields['audio_requested'].disabled = True
Beispiel #14
0
 def get_context_data(self, **kwargs):
     context = super(RequestList, self).get_context_data(**kwargs)
     user_has_service = self.request.user.groups.filter(
         name__in=['facility_maintenance', 'linens', 'frames']).exists()
     if is_TA(self.request.user) or user_has_service:
         reqs = self.model.objects.none()
         for status in ['P', 'F', 'C']:
             reqs = chain(
                 reqs,
                 self.model.objects.filter(
                     status=status).order_by('date_requested'))
         context['reqs'] = reqs
     return context
Beispiel #15
0
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(RoomReservationForm, self).__init__(*args, **kwargs)

        # These fields are required for clean to be called
        req_keys = [
            'group', 'date', 'start', 'end', 'room', 'frequency', 'reason'
        ]
        for key in req_keys:
            self.fields[key].required = True

        if is_TA(user):
            self.fields['reason'].required = False

        self.fields['group'].widget.attrs[
            'placeholder'] = 'Group making reservation (will be displayed on TV)'
Beispiel #16
0
    def get_context_data(self, **kwargs):
        ctx = super(RoomReservationSubmit, self).get_context_data(**kwargs)

        approved_reservations = RoomReservation.objects.filter(status='A')
        reservations = RoomReservation.objects.filter(
            requester=self.request.user)
        rooms = Room.objects.all()
        approved_reservations_json = serialize('json', approved_reservations)
        rooms_json = serialize('json', rooms)

        ctx['reservations'] = approved_reservations_json
        ctx['requested_reservations'] = reservations
        ctx['rooms_list'] = rooms_json
        ctx['times_list'] = TIMES
        ctx['page_title'] = 'Create Room Reservation' if is_TA(self.request.user) else \
                            'Request Room Reservation'
        ctx['button_label'] = 'Submit'
        return ctx
Beispiel #17
0
def changeWeek(request):
    my_user = request.user

    if request.is_ajax():
        if is_TA(my_user):
            my_user = Trainee.objects.get(pk=request.GET['userId'])
        week_id = request.GET.get('week', '')
        current_term = Term.current_term()
        term_id = current_term.id
        term_week_code = str(term_id) + "_" + str(week_id)
        try:
            trainee_weekly_reading = BibleReading.objects.get(
                trainee=my_user).weekly_reading_status[term_week_code]
            json_weekly_reading = json.dumps(trainee_weekly_reading)
        except (BibleReading.DoesNotExist, KeyError):
            trainee_weekly_reading = EMPTY_WEEK_CODE_QUERY
            json_weekly_reading = json.dumps(trainee_weekly_reading)
        return HttpResponse(json_weekly_reading,
                            content_type='application/json')
Beispiel #18
0
 def get_queryset(self):
     trainee = trainee_from_user(self.request.user)
     if is_TA(self.request.user) or (trainee.firstname == 'Tobi'
                                     and trainee.lastname == 'Abosede') or (
                                         trainee.firstname == 'Sofia'
                                         and trainee.lastname
                                         == 'Hunter'):  # or Tobi or Hunter
         # FAQ.objects.filter(status='')
         qs = HouseInspectionFaq.objects.filter(
             status='U') | HouseInspectionFaq.objects.filter(
                 status='A') | HouseInspectionFaq.objects.filter(
                     status='An')
         return qs.order_by('date_assigned').order_by('status')
     else:
         trainee = trainee_from_user(self.request.user)
         qset = HouseInspectionFaq.objects.filter(trainee=trainee).order_by(
             'status'
         )  #pretty sure this never works b/c trainee is an object while trainee_name is a string
     return qset
Beispiel #19
0
def updateStatus(request):
    my_user = request.user
    if request.is_ajax():
        if is_TA(my_user):
            my_user = Trainee.objects.get(pk=request.POST['userId'])

        week_id = request.POST['week_id']
        weekly_status = request.POST['weekly_status']

        current_term = Term.current_term()
        term_id = current_term.id
        term_week_code = str(term_id) + "_" + str(week_id)

        try:
            trainee_bible_reading = BibleReading.objects.get(trainee=my_user)

        except BibleReading.DoesNotExist:
            trainee_bible_reading = BibleReading(
                trainee=my_user,
                weekly_reading_status={term_week_code: EMPTY_WEEK_CODE_QUERY},
                books_read={})

        if term_week_code not in trainee_bible_reading.weekly_reading_status:
            trainee_bible_reading.weekly_reading_status[
                term_week_code] = EMPTY_WEEK_CODE_QUERY

        trainee_weekly_reading = trainee_bible_reading.weekly_reading_status[
            term_week_code]
        json_weekly_reading = json.loads(trainee_weekly_reading)

        if str(json_weekly_reading['finalized']) == FINALIZED_STR:
            return HttpResponse("Already finalized, so cannot save.",
                                status=400)
        json_weekly_reading['status'] = weekly_status
        hstore_weekly_reading = json.dumps(json_weekly_reading)
        trainee_bible_reading.weekly_reading_status[
            term_week_code] = hstore_weekly_reading
        trainee_bible_reading.save()

        return HttpResponse(weekly_status)
Beispiel #20
0
def updateBooks(request):
    my_user = request.user
    if request.method == 'GET':
        return HttpResponse(
            'Error: This is a private endpoint, only accept post')
    elif request.method == 'POST':
        try:
            if is_TA(my_user):
                my_user = Trainee.objects.get(pk=request.POST['userId'])
            # Setup
            isChecked = request.POST['checked']
            myYear = request.POST['year']

            trainee_bible_reading = BibleReading.objects.get(trainee=my_user)
            book_code = request.POST['year'] + "_" + request.POST['book']

            # If checked, adds book to the database
            if isChecked == "true":
                trainee_bible_reading.books_read[book_code] = FINALIZED_STR
                trainee_bible_reading.save()
            # If not checked, deletes book from the database
            else:
                del trainee_bible_reading.books_read[book_code]
                trainee_bible_reading.save()

            # Calculates how much the progress bar changes for both first-year and second-year bible reading
            user_checked_list = trainee_bible_reading.books_read

            if (myYear == "1"):
                first_year_checked_list, first_year_progress = calcFirstYearProgress(
                    user_checked_list)
                return HttpResponse(str(first_year_progress))
            else:
                second_year_checked_list, second_year_progress = calcSecondYearProgress(
                    user_checked_list)
                return HttpResponse(str(second_year_progress))
        except ObjectDoesNotExist:
            return HttpResponse('Error from ajax call')
Beispiel #21
0
def home(request):
  user = request.user
  trainee = trainee_from_user(user)
  worker = None

  # Set default values
  current_week = 19
  weekly_status = EMPTY_WEEKLY_STATUS
  finalized_str = UNFINALIZED_STR
  designated_list = []
  assigned_list = []
  service_day = []

  # Default for Daily Bible Reading
  current_term = Term.current_term()
  term_id = current_term.id

  if is_trainee(user):
    worker = Worker.objects.get(trainee=user)

    if request.GET.get('week_schedule'):
      current_week = request.GET.get('week_schedule')
      current_week = int(current_week)
      current_week = current_week if current_week < LAST_WEEK else LAST_WEEK
      current_week = current_week if current_week > FIRST_WEEK else FIRST_WEEK
      cws = WeekSchedule.get_or_create_week_schedule(trainee, current_week)
    else:
      # Do not set as user input.
      current_week = Term.current_term().term_week_of_date(date.today())
      cws = WeekSchedule.get_or_create_week_schedule(trainee, current_week)

    # try:
    #   # Do not set as user input.
    #   current_week = Term.current_term().term_week_of_date(date.today())
    #   cws = WeekSchedule.get_or_create_week_schedule(trainee, current_week)

    # except ValueError:
    #   cws = WeekSchedule.get_or_create_current_week_schedule(trainee)

    term_week_code = str(term_id) + "_" + str(current_week)

    try:
      trainee_bible_reading = BibleReading.objects.get(trainee=user)
    except ObjectDoesNotExist:
      trainee_bible_reading = BibleReading(
        trainee=trainee_from_user(user),
        weekly_reading_status={term_week_code: EMPTY_WEEK_CODE_QUERY},
        books_read={})
      trainee_bible_reading.save()
    except MultipleObjectsReturned:
      return HttpResponse('Multiple bible reading records found for trainee!')

    if term_week_code in trainee_bible_reading.weekly_reading_status:
      weekly_reading = trainee_bible_reading.weekly_reading_status[term_week_code]
      json_weekly_reading = json.loads(weekly_reading)
      weekly_status = str(json_weekly_reading['status'])
      finalized_str = str(json_weekly_reading['finalized'])

    worker_assignments = worker.assignments.filter(week_schedule=cws)
    designated_list = list(service.encode("utf-8") for service in worker_assignments.filter(service__category__name="Designated Services").values_list('service__name', flat=True))
    assigned_list = list(service.encode("utf-8") for service in worker_assignments.exclude(service__category__name="Designated Services").values_list('service__name', flat=True))
    service_day = list(worker_assignments.exclude(service__category__name="Designated Services").values_list('service__weekday', flat=True))

  data = {
      'daily_nourishment': Portion.today(),
      'user': user,
      'worker': worker,
      'isTrainee': is_trainee(user),
      'trainee_info': BibleReading.weekly_statistics,
      'current_week': current_week,
      'weekly_status': weekly_status,
      'weeks': Term.all_weeks_choices(),
      'finalized': finalized_str,
      'weekday_codes': json.dumps(WEEKDAY_CODES),
      'service_day': json.dumps(service_day),
      'assigned_list': json.dumps(assigned_list),
      'designated_list': json.dumps(designated_list),
  }

  notifications = get_announcements(request)
  for notification in notifications:
    tag, content = notification
    messages.add_message(request, tag, content)
  data['popups'] = get_popups(request)

  if is_trainee(user):
    trainee = trainee_from_user(user)
    # Bible Reading progress bar
    trainee_bible_reading = BibleReading.objects.filter(trainee=trainee).first()
    if trainee_bible_reading is None:
      data['bible_reading_progress'] = 0
    else:
      _, year_progress = BibleReading.calcBibleReadingProgress(trainee_bible_reading, user)
      data['bible_reading_progress'] = year_progress

  # condition for maintenance brothers
  elif is_TA(user) and user.has_group(['facility_maintenance']) and user.groups.all().count() == 1:
    data['house_requests'] = MaintenanceRequest.objects.all()
    data['request_status'] = MaintenanceRequest.STATUS

  return render(request, 'index.html', context=data)
Beispiel #22
0
 def get_form_kwargs(self):
     kwargs = super(LocationUpdate, self).get_form_kwargs()
     kwargs['is_TA'] = is_TA(self.request.user)
     return kwargs
Beispiel #23
0
def index(request):
    my_user = request.user
    if is_TA(my_user):
        first = Trainee.objects.first().pk
        my_user = Trainee.objects.get(pk=request.GET.get('userId', first))

    # Default for Daily Bible Reading
    listJSONRenderer = JSONRenderer()
    l_render = listJSONRenderer.render
    trainees = Trainee.objects.all()
    trainees_bb = l_render(BasicUserSerializer(trainees, many=True).data)
    current_term = Term.current_term()
    term_id = current_term.id
    start_date = current_term.start.strftime('%Y%m%d')

    current_date = datetime.date.today()
    try:
        current_week = Term.reverse_date(current_term, current_date)[0]
    except ValueError:
        current_week = 19
    term_week_code = str(term_id) + "_" + str(current_week)

    try:
        trainee_bible_reading = BibleReading.objects.get(trainee=my_user)
        user_checked_list = trainee_bible_reading.books_read
    except ObjectDoesNotExist:
        user_checked_list = {}
        trainee_bible_reading = BibleReading(
            trainee=trainee_from_user(my_user),
            weekly_reading_status={term_week_code: EMPTY_WEEK_CODE_QUERY},
            books_read={})
        trainee_bible_reading.save()
    except MultipleObjectsReturned:
        return HttpResponse(
            'Multiple bible reading records found for trainee!')

    first_year_checked_list, first_year_progress = calcFirstYearProgress(
        user_checked_list)
    second_year_checked_list, second_year_progress = calcSecondYearProgress(
        user_checked_list)

    weekly_status = EMPTY_WEEKLY_STATUS
    finalized_str = UNFINALIZED_STR
    if term_week_code in trainee_bible_reading.weekly_reading_status:
        weekly_reading = trainee_bible_reading.weekly_reading_status[
            term_week_code]
        json_weekly_reading = json.loads(weekly_reading)
        weekly_status = str(json_weekly_reading['status'])
        finalized_str = str(json_weekly_reading['finalized'])

    # Send data to the template!!!
    context = {
        'bible_books_list': bible_books_list,
        'first_year_checked_list': first_year_checked_list,
        'second_year_checked_list': second_year_checked_list,
        'first_year_progress': first_year_progress,
        'second_year_progress': second_year_progress,
        'weekly_status': weekly_status,
        'current_week': current_week,
        'start_date': start_date,
        'finalized': finalized_str,
        'trainees_bb': trainees_bb,
        'trainee': my_user,
    }
    return render(request, 'bible_tracker/index.html', context=context)
Beispiel #24
0
def home(request):
    user = request.user

    # Default for Daily Bible Reading
    current_term = Term.current_term()
    term_id = current_term.id

    try:
        # Do not set as user input.
        current_week = Term.current_term().term_week_of_date(date.today())
    except ValueError:
        current_week = 19
    term_week_code = str(term_id) + "_" + str(current_week)

    try:
        trainee_bible_reading = BibleReading.objects.get(trainee=user)
    except ObjectDoesNotExist:
        trainee_bible_reading = BibleReading(
            trainee=trainee_from_user(user),
            weekly_reading_status={term_week_code: EMPTY_WEEK_CODE_QUERY},
            books_read={})
        trainee_bible_reading.save()
    except MultipleObjectsReturned:
        return HttpResponse(
            'Multiple bible reading records found for trainee!')

    weekly_status = EMPTY_WEEKLY_STATUS
    finalized_str = UNFINALIZED_STR
    if term_week_code in trainee_bible_reading.weekly_reading_status:
        weekly_reading = trainee_bible_reading.weekly_reading_status[
            term_week_code]
        json_weekly_reading = json.loads(weekly_reading)
        weekly_status = str(json_weekly_reading['status'])
        finalized_str = str(json_weekly_reading['finalized'])

    data = {
        'daily_nourishment': Portion.today(),
        'user': user,
        'isTrainee': is_trainee(user),
        'trainee_info': BibleReading.weekly_statistics,
        'current_week': current_week,
        'weekly_status': weekly_status,
        'weeks': Term.all_weeks_choices(),
        'finalized': finalized_str,
        'weekday_codes': json.dumps(WEEKDAY_CODES)
    }
    notifications = get_announcements(request)
    for notification in notifications:
        tag, content = notification
        messages.add_message(request, tag, content)
    data['popups'] = get_popups(request)

    if is_trainee(user):
        trainee = trainee_from_user(user)
        # Bible Reading progress bar
        trainee_bible_reading = BibleReading.objects.filter(
            trainee=trainee).first()
        if trainee_bible_reading is None:
            data['bible_reading_progress'] = 0
        else:
            _, year_progress = BibleReading.calcBibleReadingProgress(
                trainee_bible_reading, user)
            data['bible_reading_progress'] = year_progress

    # condition for maintenance brothers
    elif is_TA(user) and user.has_group(['facility_maintenance'
                                         ]) and user.groups.all().count() == 1:
        data['house_requests'] = MaintenanceRequest.objects.all()
        data['request_status'] = MaintenanceRequest.STATUS

    return render(request, 'index.html', context=data)
Beispiel #25
0
 def get_success_url(self, **kwargs):
     if is_TA(self.request.user):
         return reverse_lazy('room_reservations:room-reservation-schedule')
     else:
         return reverse_lazy('room_reservations:room-reservation-submit')
Beispiel #26
0
def generate_menu(context):

    user = context['user']
    if user.is_anonymous():
        return ""
    menu = ""

    # The sidebar menu items, with their permissions and conditions required, should be input here
    attendance_menu = MenuItem(
        name='Attendance',
        ta_only=[
            SubMenuItem(name='View Leave Slips',
                        url='leaveslips:ta-leaveslip-list'),
            SubMenuItem(name='View Service Attendance',
                        url='services:service_hours_ta_view'),
            SubMenuItem(name='View Trainee Attendance',
                        url='attendance:attendance-submit'),
        ],
        trainee_only=[
            SubMenuItem(name='Absent Trainee Roster',
                        permission='absent_trainee_roster.add_roster',
                        url='absent_trainee_roster:absent_trainee_form',
                        condition=user.has_group(
                            ['HC', 'absent_trainee_roster'])),
            SubMenuItem(name='Personal Attendance',
                        url='attendance:attendance-submit',
                        condition=True),
            SubMenuItem(name='Semi Annual Study Attendance',
                        url='semi:attendance-base',
                        condition=attendance_form_available()),
            SubMenuItem(name='Semi Annual Study Location',
                        url='semi:location-base',
                        condition=location_form_available()),
            SubMenuItem(name='Roll Entry Seating Chart',
                        permission='attendance.add_roll',
                        url='attendance:class-rolls',
                        condition=user.has_group(['attendance_monitors'])),
            SubMenuItem(name='Audit',
                        permission='attendance.add_roll',
                        url='attendance:audit-rolls',
                        condition=user.has_group(['attendance_monitors'])),
            SubMenuItem(name='Designated Service Hours',
                        permission='services.add_designated_service_hours',
                        url='services:designated_service_hours',
                        condition=user.has_group(['designated_service'])),
        ],
        common=[
            SubMenuItem(name='Roll Entry Table',
                        permission='attendance.add_roll',
                        url='attendance:house-rolls',
                        condition=user.has_group(
                            ['attendance_monitors', 'training_assistant'])),
            SubMenuItem(name='House Roll',
                        permission='attendance.add_roll',
                        url='attendance:house-rolls',
                        condition=user.has_group(['HC'])),
            SubMenuItem(name='Team Roll',
                        permission='attendance.add_roll',
                        url='attendance:team-rolls',
                        condition=user.has_group(['team_monitors'])),
        ])

    discipline_menu = MenuItem(
        name='Discipline',
        common=[
            SubMenuItem(name='Life Studies',
                        url='lifestudies:discipline_list'),
            SubMenuItem(name='Class Notes', url='classnotes:classnotes_list')
        ])

    exam_menu = MenuItem(name='Exams',
                         ta_only=[
                             SubMenuItem(name='Create Exam',
                                         permission='exams.add_exam',
                                         url='exams:new',
                                         condition=user.has_group([
                                             'exam_graders',
                                             'training_assistant'
                                         ])),
                             SubMenuItem(name='Manage Exams',
                                         permission='exams.add_exam',
                                         url='exams:manage',
                                         condition=user.has_group([
                                             'exam_graders',
                                             'training_assistant'
                                         ])),
                         ],
                         trainee_only=[
                             SubMenuItem(name="Take Exam",
                                         url='exams:list',
                                         condition=context['exams_available']),
                             SubMenuItem(name="View Graded Exams",
                                         url='exams:taken',
                                         condition=context['exams_taken']),
                         ])

    requests_menu = MenuItem(
        name='Requests',
        ta_only=[
            SubMenuItem(name='Room Reservation',
                        url='room_reservations:ta-room-reservation-list'),
            SubMenuItem(name='Audio', url='audio:ta-audio-home'),
        ],
        trainee_only=[
            SubMenuItem(name='Room Reservation',
                        url='room_reservations:room-reservation-submit'),
            SubMenuItem(name='Audio', url='audio:audio-home'),
        ],
        common=[
            SubMenuItem(name='Announcements',
                        url='announcements:announcement-request-list'),
            SubMenuItem(name='Web Access', url='web_access:web_access-list'),
            SubMenuItem(name='Maintenance',
                        url='house_requests:maintenance-list'),
            SubMenuItem(name='Linens',
                        url='house_requests:linens-list',
                        condition=user.has_group(
                            ['training_assistant', 'HC', 'linens'])),
            SubMenuItem(name='Framing', url='house_requests:framing-list'),
        ])

    misc_menu = MenuItem(
        name="Misc",
        common=[
            SubMenuItem(name='Bible Reading Tracker',
                        url='bible_tracker:index'),
            SubMenuItem(name='Class Files', url='classes:index'),
        ],
        ta_only=[
            SubMenuItem(name='Daily Announcements',
                        url='announcements:announcement-list'),
            SubMenuItem(name='Designated Services Trainees',
                        url='services:designated_services_viewer'),
            SubMenuItem(name='Designated Services Hours',
                        url='services:service_hours_ta_view'),
            # SubMenuItem(name='HC Forms Admin', url='hc:hc-admin'),
            # SubMenuItem(name='Manage Custom Forms', url='fobi.dashboard')
        ],
        trainee_only=[
            SubMenuItem(name='View Read Announcements',
                        url='announcements:announcements-read'),
        ],
        specific=[
            SubMenuItem(name='Service Scheduling',
                        permission='services.add_service',
                        url='services:services_view',
                        condition=user.has_group(['service_schedulers'])),
            SubMenuItem(name='Badges',
                        permission='badges.add_badge',
                        url='badges:badges_list',
                        condition=user.has_group(['badges'])),
            SubMenuItem(name='Meal Seating',
                        permission='meal_seating.add_table',
                        url='meal_seating:new-seats',
                        condition=user.has_group(['kitchen'])),
            SubMenuItem(name='Seating Chart',
                        permission='seating.add_chart',
                        url='seating:chart_list',
                        condition=user.has_group(['attendance_monitors'])),
            SubMenuItem(name='Audio Upload',
                        permission='audio.add_audiofile',
                        url='audio:audio-upload',
                        condition=user.has_group(['av'])),
        ])

    hc_forms = []
    if hc_surveys(user):
        hc_forms.append(
            SubMenuItem(name='HC Surveys',
                        permission='hc.add_survey',
                        url='hc:hc-survey',
                        condition=user.has_group(['HC'])))
    if hc_recommendations(user):
        hc_forms.append(
            SubMenuItem(name='HC Recommendations',
                        permission='hc.add_recommendation',
                        url='hc:hc-recommendation',
                        condition=user.has_group(['HC'])))

    HC_menu = MenuItem(name="HC", trainee_only=hc_forms, common=[])

    grad_menu = MenuItem(name="Grad",
                         specific=[
                             SubMenuItem(name='Grad Admin',
                                         permission='graduation.add_gradadmin',
                                         url='graduation:grad-admin',
                                         condition=user.has_group(
                                             ['training_assistant'])),
                         ],
                         trainee_only=[
                             SubMenuItem(name=f.menu_title(),
                                         url=f.get_absolute_url())
                             for f in grad_forms(user)
                         ])

    # For every 'current' item that needs to appear in the side-bar, ie exams to be taken, iterim intentions form, exit interview, etc, the context variable needs to be added to the context, and the menu item can be added here as follows
    current_menu = MenuItem(
        name='Current',
        trainee_only=[
            SubMenuItem(name='Interim Intentions',
                        url='interim:interim_intentions',
                        condition=context['interim_intentions_available']),
        ] + [
            SubMenuItem(name=pf.name, url='/forms/view/' + pf.slug)
            for pf in user_forms(user)
        ],
    )

    user_menu = [
        attendance_menu, discipline_menu, requests_menu, exam_menu, misc_menu,
        HC_menu, current_menu, grad_menu
    ]

    # check for usertype TA and only in one group, maintenance or kitchen
    if user.type == 'T' and user.has_group(
        ['facility_maintenance']) and user.groups.all().count() == 1:
        user_menu = []

    for menu_item in user_menu:
        items = []
        if menu_item.common:
            for sub_item in menu_item.common:
                if sub_item.condition:
                    items += smart_add(sub_item.url, sub_item.name)
        if menu_item.ta_only:
            if is_TA(user):
                for sub_item in menu_item.ta_only:
                    if sub_item.condition:
                        items += smart_add(sub_item.url, sub_item.name)
        if menu_item.trainee_only:
            if is_trainee(user):
                for sub_item in menu_item.trainee_only:
                    if sub_item.condition:
                        items += smart_add(sub_item.url, sub_item.name)
        if menu_item.specific:
            for specific_perm_item in menu_item.specific:
                if specific_perm_item.condition:
                    items += smart_add(specific_perm_item.url,
                                       specific_perm_item.name)
        if items:
            menu += """<li class="dropdown">
        <span class="triangle-up"></span>
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
          {0}
        </a><ul class="dropdown-menu"><li class="spacer"></li>""".format(
                menu_item.name)
            for (path, name) in sorted(items, key=lambda i: i[1]):
                if name == '|':
                    menu += "<li role=\"separator\" class=\"divider\"></li>"
                else:
                    menu += "<li><a href=\"" + path + "\">" + name + "</a></li>"
            menu += "</ul>"
    return menu