示例#1
0
def get_partners(student):
    companies = CompaniesFinder.get_chat_companies(
        {'partnership_tier': 'main_sponsor'})
    companies = companies + CompaniesFinder.get_chat_companies(
        {'partnership_tier': 'gold'})
    companies = companies + CompaniesFinder.get_chat_companies(
        {'partnership_tier': 'silver'})
    companies = companies + CompaniesFinder.get_chat_companies(
        {'partnership_tier': 'bronze'})

    return CompaniesValue(companies, False).json(200)
示例#2
0
def dashboard(company_user):
    if not company_user.user.accepted_terms:
        return render_template('companies/terms_conditions.html', user=company_user.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:
            cvs_enabled = False
        else:
            cvs_enabled = True
    else:
        cvs_enabled = False

    company_auctions = CompaniesFinder.get_company_auctions(company_user.company)

    company_logo = CompaniesHandler.find_image(company_user.company.name)

    job_fair = False
    activity_types = []
    for activity in ActivitiesFinder.get_current_company_activities(company_user.company):
        if (activity.activity_type not in activity_types) and (activity.activity_type.name not in ['Job Fair','Job Fair Booth']):
            activity_types.append(activity.activity_type)

        if (activity.activity_type.name in ['Job Fair','Job Fair Booth']):
            job_fair = True

    return render_template('companies/dashboard.html', auctions=company_auctions, job_fair=job_fair, company_logo=company_logo, activity_types=activity_types, user=company_user, cvs_enabled=cvs_enabled)
示例#3
0
def add_company_user_dashboard():
    companies = CompaniesFinder.get_all()

    return render_template('admin/users/add_company_user.html', \
        user = current_user, \
        companies=companies, \
        error=None)
示例#4
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)
示例#5
0
def get_companies(student):
    company_names = []
    companies = CompaniesFinder.get_companies_from_default_event()

    for company in companies:
        company_names.append(company.name)

    return jsonify(company_names), 200
示例#6
0
def get_company(company_external_id):
    company = CompaniesFinder.get_from_external_id(company_external_id)

    image_path = CompaniesHandler.find_image(company.name)

    return render_template('admin/companies/update_company.html',
                           company=company,
                           image=image_path,
                           error=None)
示例#7
0
def add_meal_dashboard():
    companies = CompaniesFinder.get_all()
    meal_types = GetMealTypesService.call()
    dish_types = GetDishTypesService.call()
    return render_template('admin/meals/add_meal.html', \
        meal_types = meal_types, \
        dish_types = dish_types, \
        companies=companies, \
        error=None)
示例#8
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)
示例#9
0
def get_activity(activity_external_id):
    activity = ActivitiesFinder.get_from_external_id(activity_external_id)
    companies = CompaniesFinder.get_all()
    speakers = SpeakersFinder.get_all()
    tags = TagsFinder.get_all()
    rewards = RewardsFinder.get_all_rewards()

    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
    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)

    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

    companies_zoom_url = {}
    for company in company_activities:
        companies_zoom_url[company.company_id] = company.zoom_link

    return render_template('admin/activities/update_activity.html', \
        activity=activity, \
        activity_types=activity_types, \
        companies=companies, \
        speakers=speakers, \
        tags=tags, \
        rewards=rewards, \
        company_activities=[company.company_id for company in company_activities], \
        speaker_activities=[speaker.speaker_id for speaker in speaker_activities], \
        companies_zoom_url=companies_zoom_url, \
        activity_tags=[tag.tag_id for tag in activity_tags], \
        minDate=minDate, \
        maxDate=maxDate, \
        error=None)
示例#10
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)
示例#11
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))
示例#12
0
def auction_dashboard(company_user, auction_external_id):
    # get auction
    auction = AuctionsFinder.get_auction_by_external_id(auction_external_id)

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

    # check if company is allowed in auction
    if company_user.company not in auction.participants:
        return APIErrorValue('Company not allowed in this auction').json(400)

    # get auction highest bid
    highest_bid = AuctionsFinder.get_auction_highest_bid(auction)
    if highest_bid is None:
        highest_bid = None
        highest_bidder_logo = None
        highest_bidder_name = None
    else:
        # if highest bid is anonymous retrieve anonymous logo
        if highest_bid.is_anonymous is True:
            highest_bidder_logo = '/static/jeec_logo_mobile.svg'
            highest_bidder_name = 'Anonymous bidder'
        else:
            highest_bidder = CompaniesFinder.get_from_id(
                highest_bid.company_id)
            company_logo = CompaniesHandler.find_image(highest_bidder.name)
            highest_bidder_logo = company_logo
            highest_bidder_name = highest_bidder.name

    # get all company bids
    company_bids = AuctionsFinder.get_company_bids(auction,
                                                   company_user.company)

    # get all logos of companies in the auction
    participant_logos = []
    for participant in auction.participants:
        participant_logo = CompaniesHandler.find_image(participant.name)
        participant_logos.append(participant_logo)

    return render_template('companies/auction/auction_dashboard.html', \
        auction=auction, \
        highest_bid=highest_bid, \
        highest_bidder_name=highest_bidder_name, \
        highest_bidder_logo=highest_bidder_logo, \
        company_bids=company_bids, \
        participant_logos=participant_logos, \
        error=None, \
        user=company_user,
        search=None)
示例#13
0
def companies_dashboard():
    companies_list = CompaniesFinder.get_all()

    if len(companies_list) == 0:
        error = 'No results found'
        return render_template('admin/companies/companies_dashboard.html',
                               companies=None,
                               error=error,
                               search=None,
                               role=current_user.role.name)

    return render_template('admin/companies/companies_dashboard.html',
                           companies=companies_list,
                           error=None,
                           search=None,
                           role=current_user.role.name)
示例#14
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)
示例#15
0
def search_company():
    name = request.form.get('name')
    companies_list = CompaniesFinder.search_by_name(name)

    if len(companies_list) == 0:
        error = 'No results found'
        return render_template('admin/companies/companies_dashboard.html',
                               companies=None,
                               error=error,
                               search=name,
                               role=current_user.role.name)

    return render_template('admin/companies/companies_dashboard.html',
                           companies=companies_list,
                           error=None,
                           search=name,
                           role=current_user.role.name)
示例#16
0
def get_meal(meal_external_id):
    meal = MealsFinder.get_meal_from_external_id(meal_external_id)
    companies = CompaniesFinder.get_all()
    meal_types = GetMealTypesService.call()
    dish_types = GetDishTypesService.call()
    company_meals = MealsFinder.get_company_meals_from_meal_id(
        meal_external_id)
    dishes = MealsFinder.get_dishes_from_meal_id(meal_external_id)

    return render_template('admin/meals/update_meal.html', \
        meal=meal, \
        meal_types=meal_types, \
        dish_types=dish_types, \
        companies=companies, \
        company_meals=[company.company_id for company in company_meals], \
        dishes=dishes, \
        error=None)
示例#17
0
def add_auction_participant(auction_external_id):
    auction = AuctionsFinder.get_auction_by_external_id(auction_external_id)

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

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

    if company_external_id is None:
        return redirect(url_for('admin_api.auction_participants_dashboard', auction_external_id=auction_external_id))

    company = CompaniesFinder.get_from_external_id(company_external_id)

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

    AuctionsHandler.add_auction_participant(auction, company)
    
    return redirect(url_for('admin_api.auction_participants_dashboard', auction_external_id=auction_external_id))
示例#18
0
def delete_company(company_external_id):
    company = CompaniesFinder.get_from_external_id(company_external_id)

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

    name = company.name

    for company_user in company.users:
        CompanyUsersHandler.delete_company_user(company_user)

    if CompaniesHandler.delete_company(company):
        return redirect(url_for('admin_api.companies_dashboard'))

    else:
        image_path = CompaniesHandler.find_image(name)
        return render_template('admin/companies/update_company.html',
                               company=company,
                               image=image_path,
                               error="Failed to delete company!")
示例#19
0
def get_companies():
    search_parameters = request.args.to_dict()
    search_parameters.pop('event', None)
    event_name = request.args.get('event', None)

    if event_name is None:
        event = EventsFinder.get_default_event()
    else:
        event = EventsFinder.get_from_name(event_name)

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

    companies_list = CompaniesFinder.get_website_companies(
        event, search_parameters)

    if companies_list is None:
        return APIErrorValue('No results found').json(404)

    return CompaniesValue(companies_list, True).json(200)
示例#20
0
def add_activity_dashboard():
    companies = CompaniesFinder.get_all()
    speakers = SpeakersFinder.get_all()
    tags = TagsFinder.get_all()
    rewards = RewardsFinder.get_all_rewards()

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

    if event is None:
        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)

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

    return render_template('admin/activities/add_activity.html', \
        companies=companies, \
        speakers=speakers, \
        tags=tags, \
        minDate=minDate, \
        maxDate=maxDate, \
        event=event, \
        rewards=rewards, \
        error=None)
示例#21
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)
示例#22
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'))
示例#23
0
def update_company(company_external_id):

    company = CompaniesFinder.get_from_external_id(company_external_id)

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

    name = request.form.get('name')
    link = request.form.get('link')
    email = request.form.get('email')
    business_area = request.form.get('business_area')
    show_in_website = request.form.get('show_in_website')
    partnership_tier = request.form.get('partnership_tier')
    evf_username = request.form.get('evf_username')
    evf_password = request.form.get('evf_password')
    cvs_access = request.form.get('cvs_access')

    if partnership_tier == "":
        partnership_tier = None

    if show_in_website == 'True':
        show_in_website = True
    else:
        show_in_website = False

    if cvs_access == 'True':
        cvs_access = True
    else:
        cvs_access = False

    image_path = CompaniesHandler.find_image(name)
    old_company_name = company.name

    updated_company = CompaniesHandler.update_company(
        company=company,
        name=name,
        email=email,
        business_area=business_area,
        link=link,
        show_in_website=show_in_website,
        partnership_tier=partnership_tier,
        evf_username=evf_username,
        evf_password=evf_password,
        cvs_access=cvs_access)

    if updated_company is None:
        return render_template('admin/companies/update_company.html',
                               company=company,
                               image=image_path,
                               error="Failed to update company!")

    if old_company_name != name:
        RenameImageService('static/companies', old_company_name, name).call()

    if 'file' in request.files:
        file = request.files['file']

        result, msg = CompaniesHandler.upload_image(file, name)

        if result == False:
            return render_template('admin/companies/update_company.html',
                                   company=updated_company,
                                   image=image_path,
                                   error=msg)

    return redirect(url_for('admin_api.companies_dashboard'))
示例#24
0
def create_user():
    # extract form parameters
    name = request.form.get('name')
    username = request.form.get('username')
    email = request.form.get('email', None)
    role = request.form.get('role', None)
    post = request.form.get('post', None)
    evf_username = request.form.get('evf_username', None)
    evf_password = request.form.get('evf_password', None)

    # check if is creating company user
    company_external_id = request.form.get('company_external_id')
    if company_external_id is not None:
        company = CompaniesFinder.get_from_external_id(company_external_id)
        company_id = company.id

        if company is None:
            return 'No company found', 404

    # extract food_manager from parameters
    food_manager = request.form.get('food_manager', None)

    if food_manager == 'True':
        food_manager = True
    elif food_manager == 'False':
        food_manager = False
    else:
        food_manager = None

    # create new company user
    if company_external_id:
        company_user = CompanyUsersHandler.create_company_user(
            name, username, email, company_id, post, food_manager,
            evf_username, evf_password)
        if not company_user:
            return render_template('admin/users/add_company_user.html', \
                    user=current_user, \
                    companies=CompaniesFinder.get_all(), \
                    roles=GetRolesService.call(), \
                    error="Failed to create user!")

        if not UsersHandler.join_channel(company_user.user, company.chat_id,
                                         company.chat_code):
            CompanyUsersHandler.delete_company_user(company_user)
            return render_template('admin/users/add_company_user.html', \
                    user=current_user, \
                    companies=CompaniesFinder.get_all(), \
                    roles=GetRolesService.call(), \
                    error="Failed to create user!")

        for activity in company_user.company.activities:
            if activity.chat_id:
                if not ActivitiesHandler.join_channel(company_user.user,
                                                      activity):
                    CompanyUsersHandler.delete_company_user(company_user)
                    return render_template('admin/users/add_company_user.html', \
                        user=current_user, \
                        companies=CompaniesFinder.get_all(), \
                        roles=GetRolesService.call(), \
                        error="Failed to create user!")

    else:
        if role not in GetRolesService.call():
            return 'Wrong role type provided', 404
        else:
            role = RolesEnum[role]

        user = UsersHandler.create_user(
            name=name,
            username=username,
            email=email,
            role=role,
            password=GenerateCredentialsService().call())

        if user is None:
            return render_template('admin/users/add_user.html', \
                roles=GetRolesService.call(), \
                error="Failed to create user!")

    return redirect(url_for('admin_api.users_dashboard'))
示例#25
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'))
示例#26
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'))