Пример #1
0
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)
Пример #2
0
    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
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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'))
Пример #6
0
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)
Пример #7
0
    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)
Пример #8
0
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
Пример #9
0
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)
Пример #10
0
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'))
Пример #11
0
    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
Пример #12
0
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)
Пример #13
0
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)
Пример #14
0
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)
Пример #15
0
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)
Пример #16
0
    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
Пример #17
0
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
Пример #18
0
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)
Пример #19
0
def get_students_ranking(student):
    students = StudentsFinder.get_top(20)

    return StudentsValue(students, details=False).json(200)
Пример #20
0
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)