def _get_academic_end_year(self, end_postponement): if end_postponement is None: if self.learning_unit_instance and self.learning_unit_instance.end_year: end_postponement = academic_year.find_academic_year_by_year(self.learning_unit_instance.end_year) elif self.learning_unit_full_instance and self.learning_unit_full_instance.end_year: end_postponement = academic_year.find_academic_year_by_year(self.learning_unit_full_instance.end_year) return end_postponement
def _get_calendar(academic_yr, an_entity_version): a_calendar = get_entity_calendar(an_entity_version, academic_yr) if a_calendar is None: an_academic_calendar = find_academic_year_by_year(academic_yr.year) if an_academic_calendar: return an_academic_calendar return a_calendar
def __init__(self, person, start_postponement, end_postponement=None, learning_unit_instance=None, learning_unit_full_instance=None, data=None, check_consistency=True): self.check_input_instance(learning_unit_full_instance, learning_unit_instance) self.learning_unit_instance = learning_unit_instance self.learning_unit_full_instance = learning_unit_full_instance self.subtype = learning_unit_year_subtypes.PARTIM if learning_unit_full_instance else \ learning_unit_year_subtypes.FULL self.start_postponement = start_postponement self.person = person self.check_consistency = check_consistency # end_year can be given by the request (eg: for partims) end_year = data and data.get('end_year') if end_year: end_postponement = academic_year.find_academic_year_by_year( end_year) self.end_postponement = self._get_academic_end_year(end_postponement) self._compute_forms_to_insert_update_delete(data)
def _get_actual_end_year(learning_unit_to_edit): proposal = ProposalLearningUnit.objects.filter( learning_unit_year__learning_unit=learning_unit_to_edit).first() end_year_lu = proposal.initial_data.get('learning_unit').get('end_year') if proposal \ else learning_unit_to_edit.end_year return end_year_lu or academic_year.find_academic_year_by_year( compute_max_academic_year_adjournment() + 1)
def _decrement_end_year_learning_unit(learning_unit_year): learning_unit_to_edit = learning_unit_year.learning_unit start_year = learning_unit_to_edit.start_year new_end_year = learning_unit_year.academic_year.year - 1 if new_end_year >= start_year.year: learning_unit_to_edit.end_year = academic_year.find_academic_year_by_year(new_end_year) learning_unit_to_edit.save()
def max_end_year(self): """ Compute the maximal possible end_year value when the end_year is None """ if self.end_year: return self.end_year end_year = AcademicYear.objects.filter( learningunityear__learning_unit=self).aggregate( Max('year'))['year__max'] return academic_year.find_academic_year_by_year(end_year)
def get_academic_year_postponement_range(luy): end_postponement = academic_year.find_academic_year_by_year( luy.learning_unit.end_year.year ) if luy.learning_unit and luy.learning_unit.end_year else None max_postponement_year = compute_max_postponement_year( luy.learning_unit, luy.subtype, end_postponement) academic_year_postponement_range = AcademicYear.objects.min_max_years( luy.academic_year.year + 1, max_postponement_year) return academic_year_postponement_range
def export_mandates_for_entity(request: http.HttpRequest, year: int): mandates = assistant_mandate.AssistantMandate.objects.filter( mandateentity__entity__in=reviewer.find_by_person( find_by_user(request.user)).values_list("entity", flat=True), academic_year=academic_year.find_academic_year_by_year(year)).order_by( 'assistant__person__last_name') if mandates: return build_doc(request, mandates) return HttpResponseRedirect(reverse('reviewer_mandates_list'))
def export_mandates_for_entity(request, year): current_reviewer = reviewer.find_by_person(find_by_user(request.user)) mandates = find_mandates_for_academic_year_and_entity( academic_year.find_academic_year_by_year(year), current_reviewer.entity) if mandates: return build_doc(request, mandates) else: return HttpResponseRedirect(reverse('reviewer_mandates_list'))
def export_mandates_for_entity(request, year): current_reviewer = reviewer.find_by_person(find_by_user(request.user)) mandates = find_mandates_for_academic_year_and_entity( academic_year.find_academic_year_by_year(year), current_reviewer.entity ) if mandates: return build_doc(request, mandates) else: return HttpResponseRedirect(reverse('reviewer_mandates_list'))
def _consolidate_suppression_proposal_accepted(proposal): initial_end_year = proposal.initial_data["learning_unit"]["end_year"] new_end_year = proposal.learning_unit_year.learning_unit.end_year proposal.learning_unit_year.learning_unit.end_year = initial_end_year new_academic_year = find_academic_year_by_year(new_end_year) try: results = {SUCCESS: edit_learning_unit_end_date(proposal.learning_unit_year.learning_unit, new_academic_year)} except IntegrityError as err: results = {ERROR: err.args[0]} return results
def setUp(self): self.client = Client() self.request = self.client.post('/assistants/manager/mandates/upload/') self.request._messages = FakeMessages() self.manager = ManagerFactory() self.client.force_login(self.manager.person.user) self.request.user = self.manager.person.user now = timezone.now() AcademicYearFactory.produce_in_past() self.previous_academic_year = academic_year.find_academic_year_by_year(now.year - 2) self.person1 = PersonFactory(global_id='00201968') self.assistant1 = AcademicAssistantFactory(person=self.person1) self.record1 = { 'SECTOR': 'SST', 'LOGISTICS_ENTITY': 'None', 'FACULTY': 'SC', 'SCHOOL': 'CHIM', 'INSTITUTE': 'IMCN', 'POLE': 'MOST', 'SAP_ID': '1122199', 'GLOBAL_ID': '1122199', 'LAST_NAME': self.assistant1.person.last_name, 'FIRST_NAME': self.assistant1.person.first_name, 'FULLTIME_EQUIVALENT': '1', 'ENTRY_DATE': '01/02/2015', 'END_DATE': '03-10-2017', 'ASSISTANT_TYPE_CODE': 'ST', 'SCALE': '021', 'CONTRACT_DURATION': '4', 'CONTRACT_DURATION_FTE': '4', 'RENEWAL_TYPE': 'NORMAL', 'ABSENCES': None, 'COMMENT': None, 'OTHER_STATUS': None, 'EMAIL': None, 'FGS': '00201968' } self.person2 = PersonFactory(global_id='00201979') self.assistant2 = AcademicAssistantFactory() self.record2 = { 'SECTOR': 'SST', 'LOGISTICS_ENTITY': 'None', 'FACULTY': 'SC', 'SCHOOL': 'CHIM', 'INSTITUTE': 'IMCN', 'POLE': 'MOST', 'SAP_ID': '1122199', 'GLOBAL_ID': '1122199', 'LAST_NAME': self.person2.last_name, 'FIRST_NAME': self.person2.first_name, 'FULLTIME_EQUIVALENT': '1', 'ENTRY_DATE': '01/02/2015', 'END_DATE': '03-10-2017', 'ASSISTANT_TYPE_CODE': 'AS', 'SCALE': '021', 'CONTRACT_DURATION': '4', 'CONTRACT_DURATION_FTE': '4', 'RENEWAL_TYPE': 'exceptional', 'ABSENCES': None, 'COMMENT': None, 'OTHER_STATUS': None, 'EMAIL': None, 'FGS': '00201979' } self.assistant3 = AcademicAssistantFactory() self.record3 = { 'SECTOR': 'SST', 'LOGISTICS_ENTITY': 'None', 'FACULTY': 'SC', 'SCHOOL': 'CHIM', 'INSTITUTE': 'IMCN', 'POLE': 'MOST', 'SAP_ID': '1122599', 'GLOBAL_ID': '1322199', 'LAST_NAME': 'last_name', 'FIRST_NAME': 'first_name', 'FULLTIME_EQUIVALENT': '1', 'ENTRY_DATE': '01/02/2015', 'END_DATE': '03-10-2017', 'ASSISTANT_TYPE_CODE': 'AS', 'SCALE': '021', 'CONTRACT_DURATION': '4', 'CONTRACT_DURATION_FTE': '4', 'RENEWAL_TYPE': 'SPECIAL', 'ABSENCES': None, 'COMMENT': None, 'OTHER_STATUS': None, 'EMAIL': None, 'FGS': None } self.entity_version1 = EntityVersionFactory(entity_type=entity_type.SECTOR, acronym='SST', title='Secteur des Sciences et Technologies', end_date=datetime.datetime(datetime.date.today().year + 1, 9, 14)) self.entity_version2 = EntityVersionFactory(entity_type=entity_type.SECTOR, acronym='SSH', end_date=datetime.datetime(datetime.date.today().year + 1, 9, 14)) self.assistant_mandate1 = AssistantMandateFactory( assistant=self.assistant1 )
def __init__(self, person, start_postponement, end_postponement=None, learning_unit_instance=None, learning_unit_full_instance=None, data=None, check_consistency=True, external=False): self.check_input_instance(learning_unit_full_instance, learning_unit_instance) self.learning_unit_instance = learning_unit_instance self.learning_unit_full_instance = learning_unit_full_instance self.subtype = learning_unit_year_subtypes.PARTIM if learning_unit_full_instance else \ learning_unit_year_subtypes.FULL self.start_postponement = start_postponement self.person = person self.check_consistency = check_consistency self.external = external # end_year can be given by the request (eg: for partims) end_year = data and data.get('end_year') if end_year: end_postponement = academic_year.find_academic_year_by_year(end_year) self.end_postponement = self._get_academic_end_year(end_postponement) self._compute_forms_to_insert_update_delete(data)