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']
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
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)
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')
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
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
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
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'))
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")
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
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')
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
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
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
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)'
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
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')
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
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)
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')
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)
def get_form_kwargs(self): kwargs = super(LocationUpdate, self).get_form_kwargs() kwargs['is_TA'] = is_TA(self.request.user) return kwargs
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)
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)
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')
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