Exemple #1
0
def get_chat_room(student):
    company_name = request.args.get('company', None)
    user_id = request.args.get('member', None)

    if company_name:
        company = CompaniesFinder.get_from_name(company_name)
        if company is None:
            return APIErrorValue("Company not found").json(404)

        result = UsersHandler.join_channel(student.user, company.chat_id,
                                           company.chat_code)
        if result:
            return jsonify({'result': True}), 200
        else:
            return APIErrorValue("Failed to join room").json(500)

    elif user_id:
        company_user = UsersFinder.get_from_external_id(user_id)
        if company_user is None and not company_user.role.name == 'company':
            return APIErrorValue("Invalid user").json(500)

        room_id = UsersHandler.create_direct_message(student.user,
                                                     company_user)
        if room_id is None:
            return APIErrorValue(
                "Failed to create direct message session").json(500)

        return jsonify({"room_id": room_id}), 200

    else:
        return APIErrorValue("No room found").json(404)
Exemple #2
0
def get_partner(student):
    name = request.args.get('name', None)
    if name is None:
        return APIErrorValue("Invalid name").json(500)

    company = CompaniesFinder.get_from_name(name)
    if company is None:
        return APIErrorValue('Company not found').json(404)

    return PartnersValue(company, student).json(200)
Exemple #3
0
def add_companies(student):
    try:
        companies = request.get_json()["companies"]
    except KeyError:
        return APIErrorValue('Invalid company').json(500)

    for company in companies:
        company = CompaniesFinder.get_from_name(company)
        if (company is None or company in student.companies):
            continue

        StudentsHandler.add_student_company(student, company)

    return StudentsValue(student, details=True).json(200)
Exemple #4
0
def auction_bid(company_user, auction_external_id):
    try:
        value = float(request.form.get('value'))
    except:
        return redirect(
            url_for('companies_api.auction_dashboard',
                    auction_external_id=auction_external_id))

    is_anonymous = request.form.get('is_anonymous')

    if is_anonymous == 'True':
        is_anonymous = True
    else:
        is_anonymous = False

    # get company
    company = CompaniesFinder.get_from_name(company_user.company.name)

    if company is None:
        return APIErrorValue('Couldnt find company').json(400)

    # get auction
    auction = AuctionsFinder.get_auction_by_external_id(auction_external_id)

    if auction is None:
        return APIErrorValue('Couldnt find auction').json(400)

    # get auction highest bid
    highest_bid = AuctionsFinder.get_auction_highest_bid(auction)

    if highest_bid is None:
        highest_bid_value = 0
    else:
        highest_bid_value = highest_bid.value

    # check if value is bigger than current highest bid
    if value <= highest_bid_value or value < auction.minimum_value:
        return redirect(
            url_for('companies_api.auction_dashboard',
                    auction_external_id=auction.external_id))

    AuctionsHandler.create_auction_bid(auction=auction,
                                       company=company,
                                       value=value,
                                       is_anonymous=is_anonymous)

    return redirect(
        url_for('companies_api.auction_dashboard',
                auction_external_id=auction.external_id))
Exemple #5
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)
Exemple #6
0
def update_activity(activity_external_id):
    activity = ActivitiesFinder.get_from_external_id(activity_external_id)
    company_activities = ActivitiesFinder.get_company_activities_from_activity_id(
        activity_external_id)
    speaker_activities = ActivitiesFinder.get_speaker_activities_from_activity_id(
        activity_external_id)
    activity_tags = TagsFinder.get_activity_tags_from_activity_id(
        activity_external_id)

    if activity is None:
        return APIErrorValue('Couldnt find activity').json(500)

    name = request.form.get('name')
    description = request.form.get('description')
    location = request.form.get('location')
    day = request.form.get('day')
    time = request.form.get('time')
    end_time = request.form.get('end_time')
    registration_link = request.form.get('registration_link')
    registration_open = request.form.get('registration_open')
    points = request.form.get('points') or None
    quest = request.form.get('quest')
    chat = request.form.get('chat')
    zoom_link = request.form.get('zoom_url')
    reward_id = request.form.get('reward') or None
    moderator = request.form.get('moderator') or None

    if time > end_time is None:
        return APIErrorValue('Activity starting time after ending time').json(
            500)

    if registration_open == 'True':
        registration_open = True
    else:
        registration_open = False

    if quest == 'True':
        quest = True
    else:
        quest = False

    chat_type = ActivityChatEnum[chat] if chat else None

    activity_type_external_id = request.form.get('type')
    activity_type = ActivityTypesFinder.get_from_external_id(
        uuid.UUID(activity_type_external_id))

    updated_activity = ActivitiesHandler.update_activity(
        activity=activity,
        activity_type=activity_type,
        name=name,
        description=description,
        location=location,
        day=day,
        time=time,
        end_time=end_time,
        registration_link=registration_link,
        registration_open=registration_open,
        points=points,
        quest=quest,
        zoom_link=zoom_link,
        chat_type=chat_type,
        chat=(chat == 'general'),
        reward_id=reward_id)

    if company_activities:
        for company_activity in company_activities:
            ActivitiesHandler.delete_company_activities(company_activity)

    if speaker_activities:
        for speaker_activity in speaker_activities:
            ActivitiesHandler.delete_speaker_activities(speaker_activity)

    if activity_tags:
        for activity_tag in activity_tags:
            TagsHandler.delete_activity_tag(activity_tag)

    # extract company names and speaker names from parameters
    companies = request.form.getlist('company')
    zoom_urls = request.form.getlist('url')
    speakers = request.form.getlist('speaker')
    tags = request.form.getlist('tag')

    # if company names where provided
    if companies:
        for index, name in enumerate(companies):
            company = CompaniesFinder.get_from_name(name)
            if company is None:
                return APIErrorValue('Couldnt find company').json(500)

            company_activity = ActivitiesHandler.add_company_activity(
                company, activity, zoom_urls[index])
            if company_activity is None:
                return APIErrorValue('Failed to create company activity').json(
                    500)

            if activity_type.name == 'Job Fair':
                job_fair_booth = ActivityTypesFinder.get_from_name(
                    'Job Fair Booth')
                if not ActivitiesFinder.get_from_parameters(
                    {
                        'name': company.name + " Booth",
                        'day': day
                    }):
                    job_fair_booth_activity = ActivitiesHandler.create_activity(
                        name=company.name + " Booth",
                        description="Visit " + company.name +
                        " booth to earn extra points",
                        activity_type=job_fair_booth,
                        event=activity.event,
                        location="Job Fair",
                        day=day,
                        time='10:30',
                        end_time='16:30',
                        points=40,
                        quest=False)
                    ActivitiesHandler.add_company_activity(
                        company, job_fair_booth_activity)

    if speakers:
        for name in speakers:
            speaker = SpeakersFinder.get_from_name(name)
            if speaker is None:
                return APIErrorValue('Couldnt find speaker').json(500)

            speaker_activity = ActivitiesHandler.add_speaker_activity(
                speaker, activity)
            if speaker_activity is None:
                return APIErrorValue('Failed to create speaker activity').json(
                    500)

        if (moderator and moderator in speakers):
            moderator = SpeakersFinder.get_from_name(moderator)
            if moderator is None:
                return APIErrorValue('Couldnt find moderator').json(500)

            ActivitiesHandler.update_activity(activity,
                                              activity_type,
                                              moderator_id=moderator.id)

        elif (not moderator):
            ActivitiesHandler.update_activity(activity,
                                              activity_type,
                                              moderator_id=None)

    if tags:
        for name in tags:
            tag = TagsFinder.get_by_name(name)
            if tag is None:
                return APIErrorValue('Couldnt find tag').json(500)

            activity_tag = TagsHandler.add_activity_tag(activity, tag)
            if activity_tag is None:
                return APIErrorValue('Failed to create activity tag').json(500)

    if updated_activity is None:
        event = EventsFinder.get_from_parameters({"default": True})

        if event is None or len(event) == 0:
            error = 'No default event found! Please set a default event in the menu "Events"'
            return render_template(
                'admin/activities/activities_dashboard.html',
                event=None,
                error=error,
                role=current_user.role.name)

        activity_types = event[0].activity_types

        try:
            minDate = datetime.strptime(event[0].start_date,
                                        '%d %b %Y, %a').strftime("%Y,%m,%d")
            maxDate = datetime.strptime(event[0].end_date,
                                        '%d %b %Y, %a').strftime("%Y,%m,%d")
        except:
            minDate = None
            maxDate = None

        return render_template('admin/activities/update_activity.html', \
            activity=activity, \
            types=activity_types, \
            companies=CompaniesFinder.get_all(), \
            speakers=SpeakersFinder.get_all(), \
            tags=TagsFinder.get_all(), \
            rewards=RewardsFinder.get_all_rewards(), \
            minDate=minDate, \
            maxDate=maxDate, \
            error="Failed to update activity!")

    return redirect(url_for('admin_api.activities_dashboard'))
Exemple #7
0
def get_activities():
    search_parameters = request.args
    name = request.args.get('name')
    speaker = request.args.get('speaker')
    company = request.args.get('company')

    event = request.args.get('event')
    if event is None:
        event = EventsFinder.get_default_event()
    else:
        event = EventsFinder.get_from_name(event)

    if event is None:
        return APIErrorValue("Event no found!").json(404)

    activities_list = []

    # handle search bar requests
    if name is not None:
        search = name
        activities_list = ActivitiesFinder.search_by_name_and_event(
            search, event)

    # handle parameter requests
    elif speaker is not None:
        search = speaker
        speaker = SpeakersFinder.get_from_name(search)

        if speaker:
            activities_list = ActivitiesFinder.get_activities_from_speaker_and_event(
                speaker, event)

    elif company is not None:
        search = company
        company = CompaniesFinder.get_from_name(search)

        if company:
            activities_list = ActivitiesFinder.get_activities_from_company_and_event(
                company, event)

    elif len(search_parameters) != 0:
        search = 'search name'

        try:
            search_parameters = request.args.to_dict()
            search_parameters['type'] = ActivityTypesFinder.get_from_name(
                search_parameters['type']).id
            search_parameters['activity_type_id'] = search_parameters.pop(
                'type')
        except:
            pass

        activities_list = ActivitiesFinder.get_from_parameters(
            search_parameters)

    # request endpoint with no parameters should return all activities
    else:
        search = None
        activities_list = ActivitiesFinder.get_activities_from_event(event)

    if activities_list is None:
        return APIErrorValue('No results found').json(400)

    return ActivitiesValue(activities_list).json(200)
Exemple #8
0
def create_meal():
    # extract form parameters
    meal_type = request.form.get('type')
    location = request.form.get('location')
    day = request.form.get('day')
    time = request.form.get('time')
    registration_day = request.form.get('registration_day')
    registration_time = request.form.get('registration_time')

    if meal_type not in GetMealTypesService.call():
        return 'Wrong meal type provided', 404
    else:
        meal_type = MealTypeEnum[meal_type]

    # create new meal
    meal = MealsHandler.create_meal(type=meal_type,
                                    location=location,
                                    day=day,
                                    time=time,
                                    registration_day=registration_day,
                                    registration_time=registration_time)

    if meal is None:
        return render_template('admin/meals/add_meal.html', \
            type=meal_type, \
            companies=CompaniesFinder.get_all(), \
            error="Failed to create meal!")

    # extract company names and max dish quantities from parameters
    companies = request.form.getlist('company')
    max_dish_quantities = request.form.getlist('max_dish_quantity')

    # if company names where provided
    if companies:
        for index, name in enumerate(companies):
            company = CompaniesFinder.get_from_name(name)
            if company is None:
                return APIErrorValue('Couldnt find company').json(500)

            try:
                max_dish_quantity = int(max_dish_quantities[index])
            except:
                max_dish_quantity = None

            company_meal = MealsHandler.add_company_meal(
                company, meal, max_dish_quantity)
            if company_meal is None:
                return APIErrorValue('Failed to create company meal').json(500)

    # extract dish names and descriptions from parameters
    dish_names = request.form.getlist('dish_name')
    dish_descriptions = request.form.getlist('dish_description')
    dish_types = request.form.getlist('dish_type')

    # if dishes names where provided
    if dish_names:
        for index, name in enumerate(dish_names):
            if not name:
                continue

            try:
                dish_description = dish_descriptions[index]
            except:
                dish_description = None

            try:
                dish_type = dish_types[index]
            except:
                dish_type = None

            if dish_type not in GetDishTypesService.call():
                return 'Wrong dish type provided', 404
            else:
                dish_type = DishTypeEnum[dish_type]

            meal_dish = MealsHandler.create_dish(name=name,
                                                 description=dish_description,
                                                 meal_id=meal.id,
                                                 type=dish_type)
            if meal_dish is None:
                return APIErrorValue('Failed to create dish').json(500)

    return redirect(url_for('admin_api.meals_dashboard'))
Exemple #9
0
def update_meal(meal_external_id):
    meal = MealsFinder.get_meal_from_external_id(meal_external_id)
    company_meals = MealsFinder.get_company_meals_from_meal_id(
        meal_external_id)
    dishes = MealsFinder.get_dishes_from_meal_id(meal_external_id)

    if meal is None:
        return APIErrorValue('Couldnt find meal').json(500)

    # extract form parameters
    meal_type = request.form.get('type')
    location = request.form.get('location')
    day = request.form.get('day')
    time = request.form.get('time')
    registration_day = request.form.get('registration_day')
    registration_time = request.form.get('registration_time')

    if meal_type not in GetMealTypesService.call():
        return 'Wrong meal type provided', 404
    else:
        meal_type = MealTypeEnum[meal_type]

    updated_meal = MealsHandler.update_meal(
        meal=meal,
        type=meal_type,
        location=location,
        day=day,
        time=time,
        registration_day=registration_day,
        registration_time=registration_time)

    previous_companies = [
        company_meal.company_id for company_meal in company_meals
    ]

    if company_meals:
        for company_meal in company_meals:
            MealsHandler.delete_company_meal(company_meal)

    # extract company names and max dish quantities from parameters
    companies = request.form.getlist('company')
    max_dish_quantities = request.form.getlist('max_dish_quantity')

    updated_companies = []

    # if company names where provided
    if companies:
        for index, name in enumerate(companies):
            company = CompaniesFinder.get_from_name(name)
            if company is None:
                return APIErrorValue('Couldnt find company').json(500)

            updated_companies.append(company.id)

            try:
                max_dish_quantity = max_dish_quantities[index]
            except:
                max_dish_quantity = None

            company_meal = MealsHandler.add_company_meal(
                company, meal, max_dish_quantity)
            if company_meal is None:
                return APIErrorValue('Failed to create company meal').json(500)

    # delete dishes from deleted companies
    for company_id in previous_companies:
        if company_id not in updated_companies:
            company_dishes = MealsFinder.get_company_dishes_from_meal_id_and_company_id(
                meal.id, company_id)

            if company_dishes:
                for company_dish in company_dishes:
                    MealsHandler.delete_company_dish(company_dish)

    # extract dish names and descriptions from parameters
    dish_names = request.form.getlist('dish_name')
    dish_descriptions = request.form.getlist('dish_description')
    dish_types = request.form.getlist('dish_type')

    previous_dish_names = [dish.name for dish in dishes]
    previous_dish_descriptions = [dish.description for dish in dishes]
    previous_dish_types = [dish.type for dish in dishes]

    updated_dishes = []

    # if dishes names where provided
    if dish_names:
        for index, name in enumerate(dish_names):
            if not name:
                continue

            try:
                dish_description = dish_descriptions[index]
            except:
                pass

            try:
                dish_type = dish_types[index]
            except:
                dish_type = None

            if dish_type not in GetDishTypesService.call():
                return 'Wrong dish type provided', 404
            else:
                dish_type = DishTypeEnum[dish_type]

            #if dish name already exists
            if name in previous_dish_names:
                #if dish already exists do nothing
                if dish_description == previous_dish_descriptions[
                        previous_dish_names.index(
                            name)] and dish_type == previous_dish_types[
                                previous_dish_names.index(name)]:
                    updated_dishes.append(
                        dishes[previous_dish_names.index(name)])
                    continue

                #if descrition or type is changed, update it
                updated_dish = MealsHandler.update_dish(
                    dish=dishes[previous_dish_names.index(name)],
                    name=name,
                    description=dish_description,
                    meal_id=meal.id,
                    type=dish_type)
                if updated_dish is None:
                    return APIErrorValue('Failed to update dish').json(500)

                updated_dishes.append(updated_dish)
                continue

            #if dish doesnt exist, create it
            created_dish = MealsHandler.create_dish(
                name=name,
                description=dish_description,
                meal_id=meal.id,
                type=dish_type)

            if created_dish is None:
                return APIErrorValue('Failed to create dish').json(500)

    #delete non updated dishes
    if dishes:
        for dish in dishes:
            if (dish in updated_dishes):
                continue

            company_dishes = MealsFinder.get_company_dishes_from_dish_id(
                dish.id)

            if company_dishes:
                for company_dish in company_dishes:
                    MealsHandler.delete_company_dish(company_dish)

            MealsHandler.delete_dish(dish)

    if updated_meal is None:
        return render_template('admin/meals/update_meal.html', \
            meal=meal, \
            types=GetMealTypesService.call(), \
            companies=CompaniesFinder.get_all(), \
            error="Failed to update meal!")

    return redirect(url_for('admin_api.meals_dashboard'))