def students_dashboard(): search = request.args.get('search') # handle search bar requests if search is not None: students_list = StudentsFinder.get_from_search(search) else: search = None students_list = StudentsFinder.get_all() if students_list is None or len(students_list) == 0: error = 'No students found' return render_template( 'admin/students_app/students/students_dashboard.html', students=None, error=error, search=search, current_user=current_user) return render_template( 'admin/students_app/students/students_dashboard.html', students=students_list, error=None, search=search, current_user=current_user)
def login_student(fenix_auth_code): if fenix_auth_code is not None: user = TecnicoClientHandler.get_user(fenix_client, fenix_auth_code) person = TecnicoClientHandler.get_person(fenix_client, user) banned_ids = StudentsFinder.get_banned_students_ist_id() if (person['username'] in banned_ids): return None, None student = StudentsFinder.get_from_ist_id(person['username']) if student is None: course = None for role in person['roles']: if role['type'] == "STUDENT": for registration in role['registrations']: if registration['acronym']: course = registration['acronym'] entry_year = get_year( registration['academicTerms']) break if role['type'] == 'ALUMNI': for registration in role['concludedRegistrations']: if registration['acronym']: course = registration['acronym'] entry_year = get_year( registration['academicTerms']) break if not course: return None, None if person['email']: email = person['email'] elif person['institutionalEmail']: email = person['institutionalEmail'] else: return None, None student = StudentsHandler.create_student( person['name'], person['username'], email, course, entry_year, person['photo']['data'], person['photo']['type']) if student is None: return None, None _jwt = jwt.encode({"user_id": person['username']}, Config.JWT_SECRET, algorithm="HS256") encrypted_jwt = EncryptTokenService(_jwt).call() return student, encrypted_jwt else: return None, None
def resumes_dashboard(company_user): if company_user.company.cvs_access: event = EventsFinder.get_default_event() today = datetime.now() cvs_access_start = datetime.strptime(event.cvs_access_start, '%d %b %Y, %a') cvs_access_end = datetime.strptime(event.cvs_access_end, '%d %b %Y, %a') if today < cvs_access_start or today > cvs_access_end: return render_template('companies/resumes/resumes_dashboard.html', cv_students=None, interested_students=None, error="Out of access date") else: return render_template('companies/resumes/resumes_dashboard.html', cv_students=None, interested_students=None, error="Not authorized") company_students = StudentsFinder.get_company_students( company_user.company) return render_template('companies/resumes/resumes_dashboard.html', company_students=company_students, error=None)
def get_students(student): search = request.args.get('search', None) students = StudentsFinder.get_from_search_without_student( search, student.external_id) return StudentsValue(students, details=False).json(200)
def unban_student(student_external_id): banned_student = StudentsFinder.get_banned_student_from_external_id( student_external_id) if banned_student is None: return APIErrorValue('Couldnt find student').json(500) StudentsHandler.delete_banned_student(banned_student) return redirect(url_for('admin_api.banned_students_dashboard'))
def download_resume(company_user, student_external_id): student = StudentsFinder.get_from_external_id(student_external_id) if (student is None): return render_template('companies/resumes/resumes_dashboard.html', error="Student not found") filename = 'cv-' + student.user.username + '.pdf' return send_from_directory(directory='storage', filename=filename)
def decorated(*args, **kwargs): user = current_user if (user.is_anonymous): return Response("No user found, access denied", status=401) student = StudentsFinder.get_from_user_id(user.id) if (student is None): return Response("No student found, access denied", status=401) return func(*args, student=student)
def reset_daily_points(): squads = SquadsFinder.get_all() for squad in squads: if not SquadsHandler.reset_daily_points(squad): return APIErrorValue("Reset failed").json(500) students = StudentsFinder.get_all() for student in students: if not StudentsHandler.reset_daily_points(student): return APIErrorValue("Reset failed").json(500) return jsonify("Success"), 200
def create_level(): value = request.form.get('value', None) points = request.form.get('points', None) reward_id = request.form.get('reward', None) if (reward_id == ""): reward_id = None if (value is None or points is None): return APIErrorValue('Invalid value or points').json(500) if (reward_id is not None): reward = RewardsFinder.get_reward_from_external_id(reward_id) if (reward is None): return APIErrorValue('Invalid reward Id') reward_id = reward.id levels = LevelsFinder.get_all_levels() if ((len(levels) > 0 and int(levels[-1].value + 1) != int(value)) or (len(levels) == 0 and int(value) != 1)): return APIErrorValue('Invalid level value').json(500) level = LevelsHandler.create_level(value=value, points=points, reward_id=reward_id) if (level is None): return APIErrorValue('Error creating level').json(500) if (len(levels) == 0 and level.value == 1): students = StudentsFinder.get_from_parameters({'level_id': None}) for student in students: StudentsHandler.update_student(student, level_id=level.id) levels = LevelsFinder.get_all_levels() rewards = RewardsFinder.get_all_rewards() if (levels is None): return render_template( 'admin/students_app/levels/levels_dashboard.html', levels=None, rewards=rewards, error='No levels found', current_user=current_user) return render_template('admin/students_app/levels/levels_dashboard.html', levels=levels, rewards=rewards, error=None, current_user=current_user)
def ban_student(student_external_id): student = StudentsFinder.get_from_external_id(student_external_id) if student is None: return APIErrorValue('Couldnt find student').json(500) if student.squad: SquadsHandler.delete_squad(student.squad) banned_student = StudentsHandler.create_banned_student(student) if banned_student is None: return APIErrorValue('Error banning student').json(500) UsersHandler.delete_user(student.user) return redirect(url_for('admin_api.students_dashboard'))
def redeem_referral(cls, redeemer, redeemed): redeemer_code = StudentsFinder.get_referral_redeemer(redeemer) if (redeemer_code): return "Already redeemed a personal code", None else: referral = CreateStudentReferralService({ 'redeemed_id': redeemed.id, 'redeemer_id': redeemer.id }).call() if not referral: return "Failed to redeem code", None cls.add_points(redeemed, int(Config.REWARD_REFERRAL)) redeemer = cls.add_points(redeemer, int(Config.REWARD_REFERRAL)) return None, redeemer
def kick_member(student): if (not student.is_captain()): return APIErrorValue('Student is not captain').json(401) try: member_ist_id = request.get_json()["ist_id"] except KeyError: return APIErrorValue('Invalid IST id').json(500) member = StudentsFinder.get_from_ist_id(member_ist_id) if (member is None): return APIErrorValue('Member not found').json(404) StudentsHandler.leave_squad(member) return SquadsValue(student.squad).json(200)
def banned_students_dashboard(): banned_students = StudentsFinder.get_all_banned() if banned_students is None or len(banned_students) == 0: error = 'No banned students found' return render_template( 'admin/students_app/students/banned_students_dashboard.html', students=None, error=error, current_user=current_user) return render_template( 'admin/students_app/students/banned_students_dashboard.html', students=banned_students, error=None, current_user=current_user)
def today_login(student): now = datetime.utcnow() date = now.strftime('%d %b %Y, %a') event = EventsFinder.get_default_event() dates = EventsHandler.get_event_dates(event) if date in dates: student_login = StudentsFinder.get_student_login(student, date) if student_login is None: StudentsHandler.add_student_login(student, date) StudentsHandler.add_points(student, int(Config.REWARD_LOGIN)) else: return APIErrorValue("Already loggedin today").json(409) else: return APIErrorValue("Date out of event").json(409) return StudentsValue(student, details=True).json(200)
def delete_company(student): try: company = request.get_json()["company"] except KeyError: return APIErrorValue('Invalid company').json(500) company = CompaniesFinder.get_from_name(company) if (company is None): return APIErrorValue('Company not found').json(404) student_company = StudentsFinder.get_student_company(student, company) if (student_company is None): return APIErrorValue('Student company not found').json(404) StudentsHandler.delete_student_company(student_company) return StudentsValue(student, details=True).json(200)
def invite_squad_members(cls, student, members_ist_id): invitations_sent = SquadsFinder.get_invitations_from_parameters( {"sender_id": student.id}) if (student.squad is None or (len(members_ist_id) + len(student.squad.members.all()) + len(invitations_sent) > 4)): return None for member_ist_id in members_ist_id: member = StudentsFinder.get_from_ist_id(member_ist_id) if (member is None or member in student.squad.members): continue if (SquadsHandler.create_squad_invitation( sender_id=student.id, receiver_id=member.id) is None): return False return True
def get_notifications(student): notifications = {} if (student.squad): notifications['squad_xp'] = student.squad.total_points notifications['invites'] = [] invitations = SquadsFinder.get_invitations_from_parameters( {"receiver_id": student.id}) for invitation in invitations: sender = StudentsFinder.get_from_id(invitation.sender_id) notifications['invites'].append(sender.user.name) notifications['activities'] = [] activities = ActivitiesFinder.get_next_activity() for activity in activities: notifications['activities'].append(activity.name) return jsonify(notifications), 200
def delete_level(level_external_id): level = LevelsFinder.get_level_from_external_id(level_external_id) if level is None: return APIErrorValue('Couldnt find level').json(500) levels = LevelsFinder.get_all_levels() if (len(levels) == 0 or (len(levels) > 0 and levels[-1] == level)): students = StudentsFinder.get_from_level_or_higher(level) previous_level = LevelsFinder.get_level_by_value(level.value - 1) if (previous_level is None): for student in students: StudentsHandler.update_student(student, level_id=None, total_points=0) else: for student in students: StudentsHandler.update_student( student, level_id=previous_level.id, total_points=previous_level.points) LevelsHandler.delete_level(level) levels = LevelsFinder.get_all_levels() rewards = RewardsFinder.get_all_rewards() if (levels is None): return render_template( 'admin/students_app/levels/levels_dashboard.html', levels=None, rewards=rewards, error='No levels found', current_user=current_user) return render_template('admin/students_app/levels/levels_dashboard.html', levels=levels, rewards=rewards, error=None, current_user=current_user)
def get_students_ranking(student): students = StudentsFinder.get_top(20) return StudentsValue(students, details=False).json(200)
def statistics_dashboard(company_user): event = EventsFinder.get_default_event() company_user = UsersFinder.get_company_user_from_user(current_user) interested_students = StudentsFinder.get_company_students( company_user.company) company_activities = ActivitiesFinder.get_activities_from_company_and_event( company_user.company, event) company = company_user.company interactions = db_session.query(Logs) \ .join(Activities, Logs.entrypoint.contains(Activities.name)) \ .join(Users, Users.username == Logs.user_id) \ .join(Students, Users.id == Students.user_id) \ .with_entities(Activities.name, Students.course, Students.entry_year, func.count(Activities.name)) \ .filter((Events.id == event.id) & (Events.id == Activities.event_id) & (CompanyActivities.activity_id == Activities.id) & (CompanyActivities.company_id == company.id)) \ .group_by(Activities.name, Students.course, Students.entry_year) \ .all() total_interactions = 0 total_interactions_by_activity = {} total_interactions_by_course = {} total_interactions_by_year = {} interactions_by_course = {} interactions_by_year = {} for interaction_type in interactions: total_interactions += interaction_type[3] if "Job Fair" in interaction_type[0]: interaction_type = list(interaction_type) interaction_type[0] = interaction_type[0].rsplit(" ", 1)[0] if interaction_type[0] not in total_interactions_by_activity: total_interactions_by_activity[ interaction_type[0]] = interaction_type[3] interactions_by_course[interaction_type[0]] = {} interactions_by_course[interaction_type[0]][ interaction_type[1]] = interaction_type[3] interactions_by_year[interaction_type[0]] = {} interactions_by_year[interaction_type[0]][ interaction_type[2]] = interaction_type[3] else: total_interactions_by_activity[ interaction_type[0]] += interaction_type[3] if interaction_type[1] not in interactions_by_course[ interaction_type[0]]: interactions_by_course[interaction_type[0]][ interaction_type[1]] = interaction_type[3] else: interactions_by_course[interaction_type[0]][ interaction_type[1]] += interaction_type[3] if interaction_type[2] not in interactions_by_year[ interaction_type[0]]: interactions_by_year[interaction_type[0]][ interaction_type[2]] = interaction_type[3] else: interactions_by_year[interaction_type[0]][ interaction_type[2]] += interaction_type[3] if interaction_type[1] not in total_interactions_by_course: total_interactions_by_course[ interaction_type[1]] = interaction_type[3] else: total_interactions_by_course[ interaction_type[1]] += interaction_type[3] if interaction_type[2] not in total_interactions_by_year: total_interactions_by_year[ interaction_type[2]] = interaction_type[3] else: total_interactions_by_year[ interaction_type[2]] += interaction_type[3] participations = StudentActivities \ .query \ .join(Activities, StudentActivities.activity_id == Activities.id) \ .join(Students, StudentActivities.student_id == Students.id) \ .with_entities(Activities.name, Students.course, Students.entry_year, func.count(Activities.name), Activities.day) \ .filter((Events.id == event.id) & (Events.id == Activities.event_id) & (CompanyActivities.activity_id == Activities.id) & (CompanyActivities.company_id == company.id)) \ .group_by(Activities.name, Students.course, Students.entry_year, Activities.day) \ .all() total_participations = 0 total_participations_by_activity = {} total_participations_by_course = {} total_participations_by_year = {} participations_by_course = {} participations_by_year = {} for participation_type in participations: total_participations += participation_type[3] if "Booth" in participation_type[0]: week_day = participation_type[4][-3:] participation_type = list(participation_type) if week_day == "Mon": participation_type[0] = "Job Fair Monday" elif week_day == "Tue": participation_type[0] = "Job Fair Tuesday" elif week_day == "Wed": participation_type[0] = "Job Fair Wednesday" elif week_day == "Thu": participation_type[0] = "Job Fair Thursday" elif week_day == "Fri": participation_type[0] = "Job Fair Friday" if participation_type[0] not in total_participations_by_activity: total_participations_by_activity[ participation_type[0]] = participation_type[3] participations_by_course[participation_type[0]] = {} participations_by_course[participation_type[0]][ participation_type[1]] = participation_type[3] participations_by_year[participation_type[0]] = {} participations_by_year[participation_type[0]][ participation_type[2]] = participation_type[3] else: total_participations_by_activity[ participation_type[0]] += participation_type[3] if participation_type[1] not in participations_by_course[ participation_type[0]]: participations_by_course[participation_type[0]][ participation_type[1]] = participation_type[3] else: participations_by_course[participation_type[0]][ participation_type[1]] += participation_type[3] if participation_type[2] not in participations_by_year[ participation_type[0]]: participations_by_year[participation_type[0]][ participation_type[2]] = participation_type[3] else: participations_by_year[participation_type[0]][ participation_type[2]] += participation_type[3] if participation_type[1] not in total_participations_by_course: total_participations_by_course[ participation_type[1]] = participation_type[3] else: total_participations_by_course[ participation_type[1]] += participation_type[3] if participation_type[2] not in total_participations_by_year: total_participations_by_year[ participation_type[2]] = participation_type[3] else: total_participations_by_year[ participation_type[2]] += participation_type[3] interactions_by_course["Total"] = total_interactions_by_course interactions_by_year["Total"] = total_interactions_by_year participations_by_course["Total"] = total_participations_by_course participations_by_year["Total"] = total_participations_by_year return render_template('companies/statistics/statistics_dashboard.html', \ participations_by_course=participations_by_course, \ participations_by_year=participations_by_year, \ interactions_by_course=interactions_by_course, \ interactions_by_year=interactions_by_year, \ total_participations_by_year=total_participations_by_year,\ total_participations=total_participations,\ total_participations_by_activity=total_participations_by_activity,\ total_participations_by_course=total_participations_by_course,\ total_interactions_by_year=total_interactions_by_year,\ total_interactions=total_interactions,\ total_interactions_by_course=total_interactions_by_course,\ total_interactions_by_activity=total_interactions_by_activity,\ activity="Total",\ company_activities=company_activities,\ interactions=interactions,\ participations=participations,\ error=None)