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'))
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'))
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') })
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')
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'])
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" ))