示例#1
0
    def test_get_attribution_list_about_to_expire_already_applied(self):
        _create_learning_container_with_components("LAGRO1530",
                                                   self.current_academic_year,
                                                   Decimal(30), Decimal(30))
        next_academic_year = AcademicYear.objects.get(
            year=self.current_academic_year.year + 1)
        _create_learning_container_with_components("LAGRO1530",
                                                   next_academic_year,
                                                   Decimal(30), Decimal(30))
        application = [{
            'remark': 'This is the remarks',
            'course_summary': 'This is the course summary',
            'charge_lecturing_asked': 30,
            'charge_practical_asked': 30,
            'acronym': "LAGRO1530",
            'year': next_academic_year.year,
            'is_substitute': False
        }]
        self.attrib.applications = application
        self.attrib.save()

        attribution_list_about_to_expired = attribution.get_attribution_list_about_to_expire(
            self.person.global_id, self.current_academic_year)

        self.assertEqual(len(attribution_list_about_to_expired), 1)
        self.assertFalse(attribution_list_about_to_expired[0]['is_renewable'])
        self.assertEqual(
            attribution_list_about_to_expired[0]['not_renewable_reason'],
            _('An application has already been submitted'))
示例#2
0
 def test_get_attribution_list_with_substitute_is_not_renewable(self):
     self.attrib.attributions = [{
         'year': self.current_academic_year.year,
         'acronym': 'LAGRO1530',
         'title': 'Agrochimie élémentaire',
         'weight': '5.00',
         'LECTURING': '0',
         'PRACTICAL_EXERCISES': '0',
         'function': 'HOLDER',
         'start_year': 2015,
         'end_year': self.current_academic_year.year,
         'is_substitute': True
     }]
     self.attrib.save()
     _create_learning_container_with_components("LAGRO1530",
                                                self.current_academic_year,
                                                Decimal(30), Decimal(30))
     next_academic_year = AcademicYear.objects.get(
         year=self.current_academic_year.year + 1)
     _create_learning_container_with_components("LAGRO1530",
                                                next_academic_year,
                                                Decimal(30), Decimal(30))
     attribution_list_about_to_expired = attribution.get_attribution_list_about_to_expire(
         self.person.global_id, self.current_academic_year)
     self.assertEqual(len(attribution_list_about_to_expired), 1)
     self.assertFalse(attribution_list_about_to_expired[0]['is_renewable'])
     self.assertEqual(
         attribution_list_about_to_expired[0]['not_renewable_reason'],
         _('A substitute can not renew his function of substitute'))
示例#3
0
def overview(request, global_id=None):
    tutor = mdl_base.tutor.find_by_user(request.user) if not global_id else \
                 mdl_base.tutor.find_by_person_global_id(global_id)

    # Applications for next year
    application_year = tutor_application.get_application_year()
    applications = tutor_application.get_application_list(
        global_id=tutor.person.global_id)

    # Attributions for next year
    attributions = attribution.get_attribution_list(
        global_id=tutor.person.global_id, academic_year=application_year)
    volume_total_attributions = attribution.get_volumes_total(attributions)

    # Attribution which will be expire this academic year
    current_academic_year = mdl_base.academic_year.current_academic_year()

    attributions_about_to_expired = attribution.get_attribution_list_about_to_expire(
        global_id=tutor.person.global_id, academic_year=current_academic_year)

    for attrib in attributions:
        attrib['teachers'] = attribution.get_teachers(attrib['acronym'],
                                                      application_year.year)

    for an_attribution in attributions:
        attribution.update_learning_unit_volume(an_attribution,
                                                application_year)
    if attributions_about_to_expired:
        for an_attribution in attributions_about_to_expired:
            attribution.update_learning_unit_volume(an_attribution,
                                                    application_year)
    return layout.render(
        request, "attribution_overview.html", {
            'a_tutor':
            tutor,
            'attributions':
            attributions,
            'current_academic_year':
            current_academic_year,
            'attributions_about_to_expire':
            attributions_about_to_expired,
            'application_year':
            application_year,
            'applications':
            applications,
            'tot_lecturing':
            volume_total_attributions.get(
                learning_component_year_type.LECTURING),
            'tot_practical':
            volume_total_attributions.get(
                learning_component_year_type.PRACTICAL_EXERCISES),
            'application_academic_calendar':
            mdl_base.academic_calendar.get_by_reference_and_academic_year(
                academic_calendar_type.TEACHING_CHARGE_APPLICATION,
                current_academic_year),
            'catalog_url':
            settings.ATTRIBUTION_CONFIG.get('CATALOG_URL')
        })
示例#4
0
def renew_applications(request):
    tutor = mdl_base.tutor.find_by_user(request.user)
    global_id = tutor.person.global_id
    post_data = dict(request.POST.lists())
    learning_container_year_acronyms = [param.split("_")[-1] for param, value in post_data.items()\
                                        if "learning_container_year_" in param]
    attributions_about_to_expired = attribution.get_attribution_list_about_to_expire(
        global_id=global_id)
    attribution_to_renew_list = [attrib for attrib in attributions_about_to_expired
                                 if attrib.get('acronym') in learning_container_year_acronyms and \
                                    attrib.get('is_renewable', False)]
    if not attribution_to_renew_list:
        messages.add_message(request, messages.ERROR,
                             _('no_attribution_renewed'))
        return redirect('applications_overview')

    l_containers_years = mdl_base.learning_container_year.search(id=[
        attrib.get('attribution_vacant', {}).get('learning_container_year_id')
        for attrib in attribution_to_renew_list
    ])

    for attri_to_renew in attribution_to_renew_list:
        learning_container_year = next(
            (l_containers_year for l_containers_year in l_containers_years
             if l_containers_year.acronym == attri_to_renew.get('acronym')),
            None)

        application_data = {
            'charge_lecturing_asked':
            attri_to_renew.get(learning_component_year_type.LECTURING),
            'charge_practical_asked':
            attri_to_renew.get(
                learning_component_year_type.PRACTICAL_EXERCISES),
        }
        form = ApplicationForm(learning_container_year=learning_container_year,
                               data=application_data)
        if form.is_valid():
            application = form.cleaned_data
            try:
                tutor_application.create_or_update_application(
                    global_id, application)
                tutor_application.set_pending_flag(
                    global_id, application,
                    tutor_application_epc.UPDATE_OPERATION)
                # Send signal to EPC
                tutor_application_epc.send_message(
                    tutor_application_epc.UPDATE_OPERATION, global_id,
                    application)
            except Exception as e:
                error_msg = "{}: {}".format(learning_container_year.acronym,
                                            e.args[0])
                messages.add_message(request, messages.ERROR, error_msg)
    return redirect('applications_overview')
示例#5
0
 def test_get_attribution_list_about_to_expire(self):
     _create_learning_container_with_components("LAGRO1530",
                                                self.current_academic_year,
                                                Decimal(30), Decimal(30))
     next_academic_year = AcademicYear.objects.get(
         year=self.current_academic_year.year + 1)
     _create_learning_container_with_components("LAGRO1530",
                                                next_academic_year,
                                                Decimal(30), Decimal(30))
     attribution_list_about_to_expired = attribution.get_attribution_list_about_to_expire(
         self.person.global_id, self.current_academic_year)
     self.assertEqual(len(attribution_list_about_to_expired), 1)
     self.assertTrue(attribution_list_about_to_expired[0]['is_renewable'])
     self.assertIsNone(
         attribution_list_about_to_expired[0]['not_renewable_reason'])
示例#6
0
 def test_get_attribution_list_about_to_expire_volume_pratical_lower(self):
     _create_learning_container_with_components("LAGRO1530",
                                                self.current_academic_year,
                                                Decimal(30), Decimal(30))
     next_academic_year = AcademicYear.objects.get(
         year=self.current_academic_year.year + 1)
     _create_learning_container_with_components("LAGRO1530",
                                                next_academic_year,
                                                Decimal(1), Decimal(30))
     attribution_list_about_to_expired = attribution.get_attribution_list_about_to_expire(
         self.person.global_id, self.current_academic_year)
     self.assertEqual(len(attribution_list_about_to_expired), 1)
     self.assertFalse(attribution_list_about_to_expired[0]['is_renewable'])
     self.assertEqual(
         attribution_list_about_to_expired[0]['not_renewable_reason'],
         _("The vacant volume of the next academic year is lower than the current one"
           ))