def show_courses_selected_for_comparison(courses_list, request, language):
    courses_array = []
    if courses_list:
        # Ignore anything more than 7 (avoid malicious activity)
        for course in courses_list[0:7]:
            if course:
                course = course.split('/')
                course, error = Course.find(institution_id=course[0], course_id=course[1], mode=course[2],
                                            language=language)

                if error:
                    logger.warning(f"Failed to fetch course, Error fetching course: {error} for {course}")
                    redirect_page = get_new_landing_page_for_language(language)
                    # TODO: Update how errors ar handled as simply redirecting to the home page in this content is not the right answer at all
                    # return redirect(redirect_page + '?load_error=true&error_type=0')

                courses_array.append(course)

    courses = renderer.dataset_for_comparison_view(courses_array, language)

    context = dict(
        courses=courses_array,
        courses_data=courses,
    )

    return render_with_language_context(request, 'courses/comparison/comparison_has_courses.html', context, language)
Example #2
0
def courses_detail(request, institution_id, course_id, kis_mode, language=enums.languages.ENGLISH):
    course, error = Course.find(institution_id, course_id, kis_mode, language)

    if error:
        return render(request, '500.html')

    page = get_page_for_language(language, CourseDetailPage.objects.all())

    page.uni_site_links_header = page.uni_site_links_header.replace('{{institution_name}}',
                                                                    course.institution.pub_ukprn_name)

    comparison_page = get_page_for_language(language, CourseComparisonPage.objects.all())
    bookmark_page = get_page_for_language(language, CourseManagePage.objects.all())

    if not page:
        return render(request, '404.html')

    full_path = '%s?%s' % (request.path, request.environ.get('QUERY_STRING'))
    welsh_url = '/cy' + full_path if language == enums.languages.ENGLISH else full_path
    english_url = full_path.replace('/cy/', '/')

    context = {
        'page': page,
        'course': course,
        'comparison_link': comparison_page.url if comparison_page else '#',
        'manage_link': bookmark_page.url if bookmark_page else '#',
        'english_url': english_url,
        'welsh_url': welsh_url,
        'cookies_accepted': request.COOKIES.get('discoverUniCookies')
    }

    return render(request, 'courses/course_detail_page.html', context)
Example #3
0
def compare_courses(request, language=enums.languages.ENGLISH):
    get_params = request.GET
    error1 = None
    error2 = None
    course1 = None
    course2 = None

    course1_params = get_params.get('course1').split(',') if 'course1' in get_params else None
    course2_params = get_params.get('course2').split(',') if 'course2' in get_params else None

    page = get_page_for_language(language, CourseComparisonPage.objects.all())

    if course1_params:
        course1, error1 = Course.find(course1_params[0], course1_params[1], course1_params[2], language)
    if course2_params:
        course2, error2 = Course.find(course2_params[0], course2_params[1], course2_params[2], language)

    if error1 or error2:
        return render(request, '500.html')

    if not page:
        return render(request, '404.html')

    full_path = '%s?%s' % (request.path, request.environ.get('QUERY_STRING'))
    welsh_url = '/cy' + full_path if language == enums.languages.ENGLISH else full_path
    english_url = full_path.replace('/cy/', '/')

    context = {
        'page': page,
        'course1': course1,
        'course2': course2,
        'english_url': english_url,
        'welsh_url': welsh_url,
        'cookies_accepted': request.COOKIES.get('discoverUniCookies')
    }

    return render(request, 'courses/course_comparison_page.html', context)
Example #4
0
def courses_detail(request,
                   institution_id,
                   course_id,
                   kis_mode,
                   language=enums.languages.ENGLISH):
    course, error = Course.find(institution_id, course_id, kis_mode, language)
    if error:
        redirect_page = get_new_landing_page_for_language(language)
        # redirect_page = get_page_for_language(language, SearchLandingPage.objects.all()).url
        return redirect(redirect_page + '?load_error=true&error_type=0')

    page = get_page_for_language(language, CourseDetailPage.objects.all())
    page.uni_site_links_header = page.uni_site_links_header.replace(
        '{{institution_name}}', course.institution.pub_ukprn_name)

    comparison_page = get_page_for_language(language,
                                            CourseComparisonPage.objects.all())
    bookmark_page = get_page_for_language(language,
                                          CourseManagePage.objects.all())

    if not page:
        return render(request, '404.html')

    if language == enums.languages.ENGLISH:
        translated_url = '/cy' + request.path if language == enums.languages.ENGLISH else request.path
    else:
        translated_url = request.path.replace('/cy/', '/')

    context = page.get_context(request)
    context.update({
        'page':
        page,
        'course':
        course,
        'comparison_link':
        comparison_page.url if comparison_page else '#',
        'manage_link':
        bookmark_page.url if bookmark_page else '#',
        'translated_url':
        translated_url,
        'cookies_accepted':
        request.COOKIES.get('discoverUniCookies')
    })

    return render(request, 'courses/course_detail_page.html', context)
Example #5
0
def regional_earnings(request):
    if 'region' in request.POST and request.is_ajax():
        region = request.POST['region']
        institution_id = request.POST['institution_id']
        course_id = request.POST['course_id']
        kis_mode = request.POST['kis_mode']
        subject_code = request.POST['subject_code']
        language = request.POST['language']
        course, error = Course.find(institution_id, course_id, kis_mode,
                                    language)

        with open("./CMS/static/jsonfiles/regions.json", "r") as f:
            regions = f.read()
        region_full_name = "region unknown"
        region_dict = json.loads(regions)
        for region_elem in region_dict:
            elem_id = region_elem['id']
            if elem_id == region:
                if language == 'cy':
                    region_full_name = region_elem['name_cy']
                else:
                    region_full_name = region_elem['name_en']

                if region_full_name[:2] == "- ":
                    region_full_name = region_full_name[2:]
                break

        def format_thousands(earnings):
            return f'{int(earnings):,}'

        if language == 'cy':
            # inst_prov_pc_delimiter_go = "wedi'u cyflogi yn"
            inst_prov_pc_delimiter_go = "wedi'u cyflogi yn"
            inst_prov_pc_delimiter_leo = "wedi'u lleoli yn"
            inst_prov_pc_prefix = "Mae "
        else:
            # inst_prov_pc_delimiter_go = "are employed in"
            inst_prov_pc_delimiter_go = "are employed in"
            inst_prov_pc_delimiter_leo = "are based in"
            inst_prov_pc_prefix = ""

        salaries_aggregate = [
            element for element in course.salary_aggregates
            if element.subject_code == subject_code
        ][0]

        unavail_msgs_go = salaries_aggregate.aggregated_salaries_sector[
            0].display_unavailable_info(language)
        unavail_msgs_leo = salaries_aggregate.aggregated_salaries_sector[
            1].display_unavailable_info(language)
        salary_sector_15_unavail_text = ""
        salary_sector_3_unavail_text = ""
        salary_sector_5_unavail_text = ""
        unavailable_region_not_exists = ""
        unavailable_region_not_nation = ""
        unavailable_region_is_ni = ""

        if 'unavailable_region_not_exists' in unavail_msgs_leo and unavail_msgs_leo[
                'unavailable_region_not_exists'] != "":
            unavailable_region_not_exists = unavail_msgs_leo[
                'unavailable_region_not_exists']
        if 'unavailable_region_not_nation' in unavail_msgs_go and unavail_msgs_go[
                'unavailable_region_not_nation'] != "":
            unavailable_region_not_nation = unavail_msgs_go[
                'unavailable_region_not_nation']
        if 'unavailable_region_is_ni' in unavail_msgs_leo and unavail_msgs_leo[
                'unavailable_region_is_ni'] != "":
            unavailable_region_is_ni = unavail_msgs_leo[
                'unavailable_region_is_ni']

        attr = getattr(salaries_aggregate.aggregated_salaries_sector[0],
                       "med" + region, None)
        if attr is not None:
            if getattr(salaries_aggregate.aggregated_salaries_sector[0],
                       "med" + region) == "" or getattr(
                           salaries_aggregate.aggregated_salaries_sector[0],
                           "med" + region) is None:
                salary_sector_15_unavail_text = unavailable_region_not_exists
            elif region not in ('_uk', '_e', '_s', '_w', '_ni'):
                salary_sector_15_unavail_text = unavailable_region_not_nation

            med = getattr(salaries_aggregate.aggregated_salaries_sector[0],
                          "med" + region, None)
            if med is not None and med != "NA":
                salary_sector_15_med = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[0],
                            "med" + region))
                salary_sector_15_lq = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[0],
                            "lq" + region))
                salary_sector_15_uq = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[0],
                            "uq" + region))
                salary_sector_15_pop = getattr(
                    salaries_aggregate.aggregated_salaries_sector[0],
                    "pop" + region)
                inst_prov_pc_go = getattr(
                    salaries_aggregate.aggregated_salaries_inst[0],
                    'prov_pc' + region)
            else:
                salary_sector_15_unavail_text = unavailable_region_not_exists
                salary_sector_15_med = None
                salary_sector_15_lq = None
                salary_sector_15_uq = None
                salary_sector_15_pop = None
                inst_prov_pc_go = None
        else:
            if region in ('_uk', '_e', '_s', '_w', '_ni'):
                salary_sector_15_unavail_text = unavailable_region_not_exists
            else:
                salary_sector_15_unavail_text = unavailable_region_not_nation
            salary_sector_15_med = None
            salary_sector_15_lq = None
            salary_sector_15_uq = None
            salary_sector_15_pop = None
            inst_prov_pc_go = None

        if not inst_prov_pc_go:
            inst_prov_pc_go = 0

        attr = getattr(salaries_aggregate.aggregated_salaries_sector[1],
                       "med" + region, None)
        if attr is not None:
            if getattr(salaries_aggregate.aggregated_salaries_sector[1],
                       "med" + region) == "" or getattr(
                           salaries_aggregate.aggregated_salaries_sector[1],
                           "med" + region) is None:
                salary_sector_3_unavail_text = unavailable_region_not_exists
            elif region == '_ni':
                salary_sector_3_unavail_text = unavailable_region_is_ni

            med = getattr(salaries_aggregate.aggregated_salaries_sector[1],
                          "med" + region)
            if med is not None and med != "NA":
                salary_sector_3_med = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[1],
                            "med" + region))
                salary_sector_3_lq = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[1],
                            "lq" + region))
                salary_sector_3_uq = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[1],
                            "uq" + region))
                salary_sector_3_pop = getattr(
                    salaries_aggregate.aggregated_salaries_sector[1],
                    "pop" + region)
                inst_prov_pc_leo3 = getattr(
                    salaries_aggregate.aggregated_salaries_inst[1],
                    'prov_pc' + region)
            else:
                salary_sector_3_unavail_text = unavailable_region_not_exists
                salary_sector_3_med = None
                salary_sector_3_lq = None
                salary_sector_3_uq = None
                salary_sector_3_pop = None
                inst_prov_pc_leo3 = None
        else:
            if region == "_ni":
                salary_sector_3_unavail_text = unavailable_region_is_ni
            else:
                salary_sector_3_unavail_text = unavailable_region_not_exists
            salary_sector_3_med = None
            salary_sector_3_lq = None
            salary_sector_3_uq = None
            salary_sector_3_pop = None
            inst_prov_pc_leo3 = None

        if (not inst_prov_pc_leo3
                or inst_prov_pc_leo3 == '') and (inst_prov_pc_go != ''):
            inst_prov_pc_leo3 = inst_prov_pc_go

        attr = getattr(salaries_aggregate.aggregated_salaries_sector[2],
                       "med" + region, None)
        if attr is not None:
            if getattr(salaries_aggregate.aggregated_salaries_sector[2],
                       "med" + region) == "" or getattr(
                           salaries_aggregate.aggregated_salaries_sector[2],
                           "med" + region) is None:
                salary_sector_5_unavail_text = unavailable_region_not_exists
            elif region == '_ni':
                salary_sector_5_unavail_text = unavailable_region_is_ni

            med = getattr(salaries_aggregate.aggregated_salaries_sector[2],
                          "med" + region)
            if med is not None and med != "NA":
                salary_sector_5_med = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[2],
                            "med" + region))
                salary_sector_5_lq = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[2],
                            "lq" + region))
                salary_sector_5_uq = format_thousands(
                    getattr(salaries_aggregate.aggregated_salaries_sector[2],
                            "uq" + region))
                salary_sector_5_pop = getattr(
                    salaries_aggregate.aggregated_salaries_sector[2],
                    "pop" + region)
                inst_prov_pc_leo5 = getattr(
                    salaries_aggregate.aggregated_salaries_inst[2],
                    'prov_pc' + region)
            else:
                salary_sector_5_unavail_text = unavailable_region_not_exists
                salary_sector_5_med = None
                salary_sector_5_lq = None
                salary_sector_5_uq = None
                salary_sector_5_pop = None
                inst_prov_pc_leo5 = None
        else:
            if region == "_ni":
                salary_sector_5_unavail_text = unavailable_region_is_ni
            else:
                salary_sector_5_unavail_text = unavailable_region_not_exists
            salary_sector_5_med = None
            salary_sector_5_lq = None
            salary_sector_5_uq = None
            salary_sector_5_pop = None
            inst_prov_pc_leo5 = None

        if (not inst_prov_pc_leo5
                or inst_prov_pc_leo5 == '') and (inst_prov_pc_leo3 != ''):
            inst_prov_pc_leo5 = inst_prov_pc_leo3

        resp = {
            'typical_range_text':
            translations.term_for_key(key='typical_range', language=language),
            'data_from_text':
            translations.term_for_key(key='Data from', language=language),
            'respondents_text':
            translations.term_for_key(key='respondents', language=language),
            'people_text':
            translations.term_for_key(key='people', language=language),
            'of_those_asked_text':
            translations.term_for_key(key='of those asked', language=language),
            'region_full_name':
            region_full_name,
            'salary_sector_15_med':
            salary_sector_15_med,
            'salary_sector_15_lq':
            salary_sector_15_lq,
            'salary_sector_15_uq':
            salary_sector_15_uq,
            'salary_sector_15_pop':
            salary_sector_15_pop,
            'salary_sector_15_unavail_text':
            salary_sector_15_unavail_text,
            'salary_sector_3_med':
            salary_sector_3_med,
            'salary_sector_3_lq':
            salary_sector_3_lq,
            'salary_sector_3_uq':
            salary_sector_3_uq,
            'salary_sector_3_pop':
            salary_sector_3_pop,
            'salary_sector_3_unavail_text':
            salary_sector_3_unavail_text,
            'salary_sector_5_med':
            salary_sector_5_med,
            'salary_sector_5_lq':
            salary_sector_5_lq,
            'salary_sector_5_uq':
            salary_sector_5_uq,
            'salary_sector_5_pop':
            salary_sector_5_pop,
            'salary_sector_5_unavail_text':
            salary_sector_5_unavail_text,
            'inst_prov_pc_go':
            inst_prov_pc_go,
            'inst_prov_pc_leo3':
            inst_prov_pc_leo3,
            'inst_prov_pc_leo5':
            inst_prov_pc_leo5,
            'inst_prov_pc_delimiter_go':
            inst_prov_pc_delimiter_go,
            'inst_prov_pc_delimiter_leo':
            inst_prov_pc_delimiter_leo,
            'inst_prov_pc_prefix':
            inst_prov_pc_prefix
        }
        return JsonResponse(resp)
    else:
        return JsonResponse({'retval': 'unhandled error'}),
Example #6
0
 def test_course_find_returns_a_course_object_if_course_found(self):
     course, error = Course.find(1, 1, 1, 'en')
     self.assertIsNone(error)
     self.assertIsNotNone(course)
     self.assertEquals(type(course), Course)
Example #7
0
 def test_course_find_returns_api_error_if_course_not_found(
         self, mock_response):
     course, error = Course.find(1, 1, 1, 'en')
     self.assertIsNone(course)
     self.assertIsNotNone(error)
     self.assertEquals(type(error), ApiError)