diff --git a/templates/admission/continuing_education/checklist.html b/templates/admission/continuing_education/checklist.html index 0a8f90dbb..391c2728f 100644 --- a/templates/admission/continuing_education/checklist.html +++ b/templates/admission/continuing_education/checklist.html @@ -293,6 +293,8 @@ }) }); + let onFirstTabLoad = true; + menuItems.on('shown.bs.tab', function (e) { $(this).parents('.list-group-item').find('.sub-items').show(); @@ -304,8 +306,18 @@ refreshDocuments(tabPaneId); - // refresh info viewer (e.target = active && e.relatedTarget = previous) - if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // refresh info viewer + if (onFirstTabLoad) { + onFirstTabLoad = false; + if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // move info from the current tab to the info viewer + $('#infos-shortcut').click(); + } else { + // hide the info viewer + $('#info-viewer-tab').hide(); + } + } else if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // (e.target = active && e.relatedTarget = previous) const $info = $('#info-viewer-tab .info-content'); // move old info from info viewer to old tab const oldTabPanel = $($(e.relatedTarget).parent().attr('href')).find('.info-part'); @@ -342,12 +354,6 @@ // Activate tab from hash on first load $(`#checklist-menu *[data-toggle="tab"][href="${defaultTab}"]`).click(); - if (configurationCache.getItem('side-tab', 'documents') === 'info') { - $('#infos-shortcut').click(); - } else { - $('#info-viewer-tab').hide(); - } - $('textarea[name="comment"]:visible').each(autogrow); }); diff --git a/templates/admission/doctorate/checklist.html b/templates/admission/doctorate/checklist.html index 816749873..405a08f93 100644 --- a/templates/admission/doctorate/checklist.html +++ b/templates/admission/doctorate/checklist.html @@ -60,6 +60,7 @@ {% can_update_tab 'person' as can_update_person_tab %} {% can_update_tab 'coordonnees' as can_update_coordonnees_tab %} + {% can_update_tab 'languages' as can_update_languages_tab %} {% can_update_tab 'accounting' as can_update_accounting_tab %} {% can_update_tab 'training-choice' as can_update_training_choice_tab %} {% can_update_tab 'curriculum' as can_update_curriculum %} @@ -90,6 +91,12 @@ {% url base_namespace|add:":training-choice" view.kwargs.uuid as training_choice_url %} {% endif %} + {% if can_update_languages_tab %} + {% url base_namespace|add:":update:languages" view.kwargs.uuid as languages_url %} + {% else %} + {% url base_namespace|add:":languages" view.kwargs.uuid as languages_url %} + {% endif %} + {% concat "#choix_formation" as checklist_training_choice_url %}
{% include 'admission/general_education/includes/checklist/financeabilty_info.html' with current=original_admission.checklist.current.financabilite %} + +
+
+
{% translate 'Knowledge of languages' %}
+ {% concat languages_url next_url as contextual_languages_url %} + {{ ''|edit_button:contextual_languages_url|safe }} +
+
+ {% include 'admission/exports/recap/includes/languages.html' with connaissances_langues=resume_proposition.connaissances_langues %} +
+
{% if can_update_curriculum %} - {% url 'admission:general-education:update:curriculum' view.kwargs.uuid as global_curriculum_update_url %} + {% url 'admission:doctorate:update:curriculum' view.kwargs.uuid as global_curriculum_update_url %} {% endif %} {% multiple_field_data specific_questions_by_tab|get_item:'CURRICULUM' edit_link_button=global_curriculum_update_url|add:next_url %}
@@ -307,7 +325,7 @@ {% else %} {% include 'admission/general_education/includes/checklist/previous_experience_single.html' with current=child authentication_form=authentication_forms|get_item_or_none:child.extra.identifiant experience_authentication_history_entry=all_experience_authentication_history_entries|get_item_or_none:child.extra.identifiant %}
- {% experience_details_template resume_proposition=resume_proposition experience=experience with_edit_link_button=True can_update_curriculum=can_update_curriculum can_update_education=can_update_education specific_questions=specific_questions_by_tab can_delete_curriculum=can_delete_curriculum %} + {% experience_details_template resume_proposition=resume_proposition experience=experience with_edit_link_button=True specific_questions=specific_questions_by_tab %}
{% endif %} {% endwith %} @@ -604,6 +622,8 @@ }) }); + let onFirstTabLoad = true; + menuItems.on('shown.bs.tab', function (e) { $(this).parents('.list-group-item').find('.sub-items').show(); @@ -615,8 +635,18 @@ refreshDocuments(tabPaneId); - // refresh info viewer (e.target = active && e.relatedTarget = previous) - if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // refresh info viewer + if (onFirstTabLoad) { + onFirstTabLoad = false; + if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // move info from the current tab to the info viewer + $('#infos-shortcut').click(); + } else { + // hide the info viewer + $('#info-viewer-tab').hide(); + } + } else if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // (e.target = active && e.relatedTarget = previous) const $info = $('#info-viewer-tab .info-content'); // move old info from info viewer to old tab const oldTabPanel = $($(e.relatedTarget).parent().attr('href')).find('.info-part'); @@ -653,12 +683,6 @@ // Activate tab from hash on first load $(`#checklist-menu *[data-toggle="tab"][href="${defaultTab}"]`).click(); - if (configurationCache.getItem('side-tab', 'documents') === 'info') { - $('#infos-shortcut').click(); - } else { - $('#info-viewer-tab').hide(); - } - $('textarea[name="comment"]:visible').each(autogrow); $('[data-toggle=popover]').popover(); diff --git a/templates/admission/general_education/checklist.html b/templates/admission/general_education/checklist.html index 93780c32b..cd9e9e8fc 100644 --- a/templates/admission/general_education/checklist.html +++ b/templates/admission/general_education/checklist.html @@ -368,7 +368,7 @@ {% else %} {% include 'admission/general_education/includes/checklist/previous_experience_single.html' with current=child authentication_form=authentication_forms|get_item_or_none:child.extra.identifiant experience_authentication_history_entry=all_experience_authentication_history_entries|get_item_or_none:child.extra.identifiant %}
- {% experience_details_template resume_proposition=resume_proposition experience=experience with_edit_link_button=True can_update_curriculum=can_update_curriculum can_update_education=can_update_education specific_questions=specific_questions_by_tab can_delete_curriculum=can_delete_curriculum %} + {% experience_details_template resume_proposition=resume_proposition experience=experience with_edit_link_button=True specific_questions=specific_questions_by_tab %}
{% endif %} {% endwith %} @@ -693,6 +693,8 @@ }) }); + let onFirstTabLoad = true; + menuItems.on('shown.bs.tab', function (e) { $(this).parents('.list-group-item').find('.sub-items').show(); @@ -704,8 +706,18 @@ refreshDocuments(tabPaneId); - // refresh info viewer (e.target = active && e.relatedTarget = previous) - if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // refresh info viewer + if (onFirstTabLoad) { + onFirstTabLoad = false; + if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // move info from the current tab to the info viewer + $('#infos-shortcut').click(); + } else { + // hide the info viewer + $('#info-viewer-tab').hide(); + } + } else if (configurationCache.getItem('side-tab', 'documents') === 'info') { + // (e.target = active && e.relatedTarget = previous) const $info = $('#info-viewer-tab .info-content'); // move old info from info viewer to old tab const oldTabPanel = $($(e.relatedTarget).parent().attr('href')).find('.info-part'); @@ -742,12 +754,6 @@ // Activate tab from hash on first load $(`#checklist-menu *[data-toggle="tab"][href="${defaultTab}"]`).click(); - if (configurationCache.getItem('side-tab', 'documents') === 'info') { - $('#infos-shortcut').click(); - } else { - $('#info-viewer-tab').hide(); - } - $('textarea[name="comment"]:visible').each(autogrow); $('[data-toggle=popover]').popover(); diff --git a/templatetags/admission.py b/templatetags/admission.py index 19fdd01cb..3e88738c1 100644 --- a/templatetags/admission.py +++ b/templatetags/admission.py @@ -41,11 +41,6 @@ from django.utils.safestring import SafeString, mark_safe from django.utils.translation import get_language, gettext_lazy as _, pgettext, gettext from osis_comment.models import CommentEntry - -from admission.ddd.admission.doctorat.preparation.domain.model.statut_checklist import ( - INDEX_ONGLETS_CHECKLIST as INDEX_ONGLETS_CHECKLIST_DOCTORALE, -) -from osis_document.api.utils import get_remote_metadata, get_remote_token from osis_history.models import HistoryEntry from rules.templatetags import rules @@ -66,6 +61,9 @@ from admission.ddd.admission.doctorat.preparation.domain.model.enums import ( ChoixStatutPropositionDoctorale, ) +from admission.ddd.admission.doctorat.preparation.domain.model.statut_checklist import ( + INDEX_ONGLETS_CHECKLIST as INDEX_ONGLETS_CHECKLIST_DOCTORALE, +) from admission.ddd.admission.doctorat.validation.domain.model.enums import ChoixSexe from admission.ddd.admission.domain.model.enums.authentification import EtatAuthentificationParcours from admission.ddd.admission.dtos import EtudesSecondairesAdmissionDTO, CoordonneesDTO, IdentificationDTO @@ -126,6 +124,7 @@ from ddd.logic.shared_kernel.campus.dtos import UclouvainCampusDTO from ddd.logic.shared_kernel.profil.dtos.parcours_externe import ExperienceAcademiqueDTO, ExperienceNonAcademiqueDTO from ddd.logic.shared_kernel.profil.dtos.parcours_interne import ExperienceParcoursInterneDTO +from osis_document.api.utils import get_remote_metadata, get_remote_token from osis_role.contrib.permissions import _get_roles_assigned_to_user from osis_role.templatetags.osis_role import has_perm from reference.models.country import Country @@ -334,11 +333,6 @@ def __eq__(self, other): Tab('doctorate-education', _('Course choice'), 'person-chalkboard'): [ Tab('training-choice', _('Course choice')), ], - # TODO Education choice - Tab('experience', _('Previous experience'), 'list-alt'): [ - Tab('curriculum', _('Curriculum')), - Tab('languages', _('Knowledge of languages')), - ], Tab('doctorate', pgettext('tab', 'PhD project'), 'graduation-cap'): [ Tab('project', _('Research project')), Tab('cotutelle', _('Cotutelle')), @@ -1045,7 +1039,8 @@ def checklist_state_button(context, **kwargs): def edit_button(string, url): return ( str(string) - + f'' + + f'' + f'' ) @@ -1342,9 +1337,6 @@ def experience_details_template( specific_questions: Dict[str, List[QuestionSpecifiqueDTO]] = None, with_edit_link_button=True, hide_files=True, - can_update_curriculum=False, - can_update_education=False, - can_delete_curriculum=False, ): """ Return the template used to render the experience details. @@ -1354,9 +1346,6 @@ def experience_details_template( :param specific_questions: The specific questions related to the experience (only used for secondary studies) :param with_edit_link_button: Specify if the edit link button should be displayed :param hide_files: Specify if the files should be hidden - :param can_update_curriculum: Specify if the user can update the curriculum - :param can_update_education: Specify if the user can update the education - :param can_delete_curriculum: Specify if the user can delete an experience from the curriculum :return: The rendered template """ next_url_suffix = f'?next={context.get("request").path}&next_hash_url=parcours_anterieur__{experience.uuid}' @@ -1374,104 +1363,41 @@ def experience_details_template( 'edit_link_button_in_new_tab': experience.epc_experience, } + if with_edit_link_button: + experience_urls = get_experience_urls( + user=context['request'].user, + admission=context['view'].admission, + experience=experience, + candidate_noma=context['view'].proposition.noma_candidat, + ) + + if experience_urls['curex_url']: + res_context['curex_link_button'] = experience_urls['curex_url'] + + elif experience_urls['edit_url']: + res_context['edit_link_button'] = experience_urls['edit_url'] + next_url_suffix + + if experience_urls['delete_url']: + res_context['delete_link_button'] = experience_urls['delete_url'] + delete_next_url_suffix + + if experience_urls['duplicate_url']: + res_context['duplicate_link_button'] = experience_urls['duplicate_url'] + next_url_suffix + if experience.__class__ == ExperienceAcademiqueDTO: res_context['custom_base_template'] = 'admission/exports/recap/includes/curriculum_educational_experience.html' res_context['title'] = _('Academic experience') res_context['with_single_header_buttons'] = True - - if with_edit_link_button and can_update_curriculum: - if not experience.epc_experience: - res_context['duplicate_link_button'] = ( - reverse( - 'admission:general-education:update:curriculum:educational_duplicate', - args=[resume_proposition.proposition.uuid, experience.uuid], - ) - + next_url_suffix - ) - res_context['edit_link_button'] = ( - reverse( - 'admission:general-education:update:curriculum:educational', - args=[resume_proposition.proposition.uuid, experience.uuid], - ) - + next_url_suffix - ) - if can_delete_curriculum: - res_context['delete_link_button'] = ( - reverse( - 'admission:general-education:update:curriculum:educational_delete', - args=[resume_proposition.proposition.uuid, experience.uuid], - ) - + delete_next_url_suffix - ) - - elif context['admission'].noma_candidat: - res_context['curex_link_button'] = resolve_url( - 'parcours-externe-view', - noma=context['admission'].noma_candidat, - ) - res_context.update(get_educational_experience_context(resume_proposition, experience)) elif experience.__class__ == ExperienceNonAcademiqueDTO: res_context['custom_base_template'] = 'admission/exports/recap/includes/curriculum_professional_experience.html' res_context['title'] = _('Non-academic activity') res_context['with_single_header_buttons'] = True - - if with_edit_link_button and can_update_curriculum: - if not experience.epc_experience: - res_context['edit_link_button'] = ( - reverse( - 'admission:general-education:update:curriculum:non_educational', - args=[resume_proposition.proposition.uuid, experience.uuid], - ) - + next_url_suffix - ) - - if can_delete_curriculum: - res_context['delete_link_button'] = ( - reverse( - 'admission:general-education:update:curriculum:non_educational_delete', - args=[resume_proposition.proposition.uuid, experience.uuid], - ) - + delete_next_url_suffix - ) - - elif context['admission'].noma_candidat: - res_context['edit_link_button'] = resolve_url( - 'edit-experience-non-academique-view', - noma=context['admission'].noma_candidat, - experience_uuid=experience.uuid, - ) - - res_context['duplicate_link_button'] = ( - reverse( - 'admission:general-education:update:curriculum:non_educational_duplicate', - args=[resume_proposition.proposition.uuid, experience.uuid], - ) - + next_url_suffix - ) - res_context.update(get_non_educational_experience_context(experience)) elif experience.__class__ == EtudesSecondairesAdmissionDTO: res_context['custom_base_template'] = 'admission/exports/recap/includes/education.html' res_context['etudes_secondaires'] = experience - - if with_edit_link_button and can_update_education: - if not experience.epc_experience: - res_context['edit_link_button'] = ( - reverse( - 'admission:general-education:update:education', - args=[resume_proposition.proposition.uuid], - ) - ) + next_url_suffix - - elif context['admission'].noma_candidat: - res_context['edit_link_button'] = resolve_url( - 'edit-etudes-secondaires-view', - noma=context['admission'].noma_candidat, - ) - res_context.update( get_secondary_studies_context( resume_proposition, @@ -1496,9 +1422,7 @@ def checklist_experience_action_links_context( parcours_tab_id='', ): next_url_suffix = f'?next={context["request"].path}&next_hash_url={parcours_tab_id}' - base_namespace = context['view'].base_namespace proposition_uuid = context['view'].kwargs['uuid'] - proposition_uuid_str = str(proposition_uuid) result_context = { 'prefix': prefix, @@ -1512,90 +1436,29 @@ def checklist_experience_action_links_context( if experience.__class__ == ExperienceParcoursInterneDTO: return result_context - elif experience.__class__ == EtudesSecondairesAdmissionDTO: - if not experience.epc_experience: - result_context['update_url'] = ( - resolve_url( - f'{base_namespace}:update:education', - uuid=proposition_uuid_str, - ) - + next_url_suffix - ) - elif context['admission'].noma_candidat: - result_context['update_url'] = resolve_url( - 'edit-etudes-secondaires-view', - noma=context['admission'].noma_candidat, - ) elif ( - experience.valorisee_par_admissions + experience.__class__ == EtudesSecondairesAdmissionDTO + or experience.valorisee_par_admissions and proposition_uuid in experience.valorisee_par_admissions and experience.derniere_annee == current_year ): - if experience.__class__ == ExperienceAcademiqueDTO: - if not experience.epc_experience: - result_context['duplicate_url'] = resolve_url( - f'{base_namespace}:update:curriculum:educational_duplicate', - uuid=proposition_uuid_str, - experience_uuid=experience.uuid, - ) - result_context['update_url'] = ( - resolve_url( - f'{base_namespace}:update:curriculum:educational', - uuid=proposition_uuid_str, - experience_uuid=experience.uuid, - ) - + next_url_suffix - ) - - can_delete_curriculum = has_perm(context, 'admission.delete_admission_curriculum') - if can_delete_curriculum: - result_context['delete_url'] = ( - resolve_url( - f'{base_namespace}:update:curriculum:educational_delete', - uuid=proposition_uuid_str, - experience_uuid=experience.uuid, - ) - + next_url_suffix - ) - elif context['admission'].noma_candidat: - result_context['curex_url'] = resolve_url( - 'parcours-externe-view', - noma=context['admission'].noma_candidat, - ) - - elif experience.__class__ == ExperienceNonAcademiqueDTO: - result_context['duplicate_url'] = resolve_url( - f'{base_namespace}:update:curriculum:non_educational_duplicate', - uuid=proposition_uuid_str, - experience_uuid=experience.uuid, - ) + experience_urls = get_experience_urls( + user=context['request'].user, + admission=context['view'].admission, + experience=experience, + candidate_noma=context['view'].proposition.noma_candidat, + ) + + if experience_urls['curex_url']: + result_context['curex_url'] = experience_urls['curex_url'] + + elif experience_urls['edit_url']: + result_context['update_url'] = experience_urls['edit_url'] + next_url_suffix + + if experience_urls['delete_url']: + result_context['delete_url'] = experience_urls['delete_url'] + next_url_suffix - if not experience.epc_experience: - result_context['update_url'] = ( - resolve_url( - f'{base_namespace}:update:curriculum:non_educational', - uuid=proposition_uuid_str, - experience_uuid=experience.uuid, - ) - + next_url_suffix - ) - - can_delete_curriculum = has_perm(context, 'admission.delete_admission_curriculum') - if can_delete_curriculum: - result_context['delete_url'] = ( - resolve_url( - f'{base_namespace}:update:curriculum:non_educational_delete', - uuid=proposition_uuid_str, - experience_uuid=experience.uuid, - ) - + next_url_suffix - ) - elif context['admission'].noma_candidat: - result_context['update_url'] = resolve_url( - 'edit-experience-non-academique-view', - noma=context['admission'].noma_candidat, - experience_uuid=experience.uuid, - ) + result_context['duplicate_url'] = experience_urls['duplicate_url'] return result_context diff --git a/utils.py b/utils.py index f71bdebd4..e14bec5c7 100644 --- a/utils.py +++ b/utils.py @@ -43,6 +43,7 @@ from django.utils.translation import pgettext, override, get_language, gettext from django_htmx.http import trigger_client_event from rest_framework.generics import get_object_or_404 +from weasyprint.css.computed_values import compute from admission.auth.roles.central_manager import CentralManager from admission.auth.roles.program_manager import ProgramManager as AdmissionProgramManager @@ -525,10 +526,30 @@ def get_experience_urls( 'delete_url': '', 'duplicate_url': '', 'details_url': '', + 'curex_url': '', 'edit_new_link_tab': False, } - can_update_curriculum_via_admission = user.has_perm(perm='admission.change_admission_curriculum', obj=admission) + if not getattr(user, '_computed_permissions', None): + computed_permissions = { + 'admission.change_admission_curriculum': user.has_perm( + perm='admission.change_admission_curriculum', + obj=admission, + ), + 'admission.change_admission_secondary_studies': user.has_perm( + perm='admission.change_admission_secondary_studies', + obj=admission, + ), + 'admission.delete_admission_curriculum': user.has_perm( + perm='admission.delete_admission_curriculum', + obj=admission, + ), + 'profil.can_edit_parcours_externe': user.has_perm(perm='profil.can_edit_parcours_externe'), + 'profil.can_see_parcours_externe': user.has_perm(perm='profil.can_see_parcours_externe'), + } + setattr(user, '_computed_permissions', computed_permissions) + else: + computed_permissions = getattr(user, '_computed_permissions') if isinstance(experience, ExperienceAcademiqueDTO): res_context['details_url'] = resolve_url( @@ -537,38 +558,38 @@ def get_experience_urls( experience_uuid=experience.uuid, ) - if not can_update_curriculum_via_admission: + if not computed_permissions['admission.change_admission_curriculum']: return res_context - res_context['duplicate_url'] = resolve_url( - f'{base_namespace}:update:curriculum:educational_duplicate', - uuid=admission.uuid, - experience_uuid=experience.uuid, - ) - if experience.epc_experience: - can_update_curriculum_via_profile = user.has_perm(perm='profil.can_edit_parcours_externe') - - if can_update_curriculum_via_profile and candidate_noma: - res_context['edit_url'] = resolve_url( - 'edit-experience-academique-view', - noma=candidate_noma, - experience_uuid=experience.annees[0].uuid, - ) - res_context['edit_new_link_tab'] = True + if candidate_noma: + if computed_permissions['profil.can_see_parcours_externe']: + res_context['curex_url'] = resolve_url( + 'parcours-externe-view', + noma=candidate_noma, + ) + if computed_permissions['profil.can_edit_parcours_externe']: + res_context['edit_url'] = resolve_url( + 'edit-experience-academique-view', + noma=candidate_noma, + experience_uuid=experience.annees[0].uuid, + ) + res_context['edit_new_link_tab'] = True else: + res_context['duplicate_url'] = resolve_url( + f'{base_namespace}:update:curriculum:educational_duplicate', + uuid=admission.uuid, + experience_uuid=experience.uuid, + ) + res_context['edit_url'] = resolve_url( f'{base_namespace}:update:curriculum:educational', uuid=admission.uuid, experience_uuid=experience.uuid, ) - can_delete_curriculum_via_admission = user.has_perm( - perm='admission.delete_admission_curriculum', - obj=admission, - ) - if can_delete_curriculum_via_admission: + if computed_permissions['admission.delete_admission_curriculum']: res_context['delete_url'] = resolve_url( f'{base_namespace}:update:curriculum:educational_delete', uuid=admission.uuid, @@ -582,7 +603,7 @@ def get_experience_urls( experience_uuid=experience.uuid, ) - if not can_update_curriculum_via_admission: + if not computed_permissions['admission.change_admission_curriculum']: return res_context res_context['duplicate_url'] = resolve_url( @@ -592,15 +613,14 @@ def get_experience_urls( ) if experience.epc_experience: - can_update_curriculum_via_profile = user.has_perm(perm='profil.can_edit_parcours_externe') - - if can_update_curriculum_via_profile and candidate_noma: - res_context['edit_url'] = resolve_url( - 'edit-experience-non-academique-view', - noma=candidate_noma, - experience_uuid=experience.uuid, - ) - res_context['edit_new_link_tab'] = True + if candidate_noma: + if computed_permissions['profil.can_edit_parcours_externe']: + res_context['edit_url'] = resolve_url( + 'edit-experience-non-academique-view', + noma=candidate_noma, + experience_uuid=experience.uuid, + ) + res_context['edit_new_link_tab'] = True else: res_context['edit_url'] = resolve_url( @@ -609,11 +629,7 @@ def get_experience_urls( experience_uuid=experience.uuid, ) - can_delete_curriculum_via_admission = user.has_perm( - perm='admission.delete_admission_curriculum', - obj=admission, - ) - if can_delete_curriculum_via_admission: + if computed_permissions['admission.delete_admission_curriculum']: res_context['delete_url'] = resolve_url( f'{base_namespace}:update:curriculum:non_educational_delete', uuid=admission.uuid, @@ -626,18 +642,17 @@ def get_experience_urls( uuid=admission.uuid, ) - if not can_update_curriculum_via_admission: + if not computed_permissions['admission.change_admission_secondary_studies']: return res_context if experience.epc_experience: - can_update_curriculum_via_profile = user.has_perm(perm='profil.can_edit_parcours_externe') - - if can_update_curriculum_via_profile and candidate_noma: - res_context['edit_url'] = resolve_url( - 'edit-etudes-secondaires-view', - noma=candidate_noma, - ) - res_context['edit_new_link_tab'] = True + if candidate_noma: + if computed_permissions['profil.can_edit_parcours_externe']: + res_context['edit_url'] = resolve_url( + 'edit-etudes-secondaires-view', + noma=candidate_noma, + ) + res_context['edit_new_link_tab'] = True else: res_context['edit_url'] = resolve_url( diff --git a/views/common/form_tabs/curriculum.py b/views/common/form_tabs/curriculum.py index e977d0520..8d6705710 100644 --- a/views/common/form_tabs/curriculum.py +++ b/views/common/form_tabs/curriculum.py @@ -134,7 +134,7 @@ def get_success_url(self): if self.next_url: return self.next_url - if self.is_general: + if self.is_general or self.is_doctorate: return resolve_url( f'{self.base_namespace}:update:curriculum:educational', uuid=self.admission_uuid, @@ -144,7 +144,10 @@ def get_success_url(self): return resolve_url(f'{self.base_namespace}:curriculum', uuid=self.admission_uuid) def delete_url(self): - if self.experience_id: + if self.experience_id and self.request.user.has_perm( + perm='admission.delete_admission_curriculum', + obj=self.admission, + ): return resolve_url( f'{self.base_namespace}:update:curriculum:educational_delete', uuid=self.admission_uuid, @@ -225,7 +228,7 @@ def get_success_url(self): if self.next_url: return self.next_url - if self.is_general: + if self.is_general or self.is_doctorate: return resolve_url( f'{self.base_namespace}:update:curriculum:non_educational', uuid=self.admission_uuid, @@ -235,7 +238,10 @@ def get_success_url(self): return resolve_url(f'{self.base_namespace}:curriculum', uuid=self.admission_uuid) def delete_url(self): - if self.experience_id: + if self.experience_id and self.request.user.has_perm( + perm='admission.delete_admission_curriculum', + obj=self.admission, + ): return resolve_url( f'{self.base_namespace}:update:curriculum:non_educational_delete', uuid=self.admission_uuid, @@ -332,7 +338,7 @@ def get_success_url(self): } return ( self.next_url or reverse(f'{self.base_namespace}:checklist', kwargs=kwargs) - if self.is_general + if self.is_general or self.is_doctorate else reverse(f'{self.base_namespace}:curriculum', kwargs=kwargs) ) @@ -485,7 +491,7 @@ def get_success_url(self): } return ( self.next_url or reverse(f'{self.base_namespace}:checklist', kwargs=kwargs) - if self.is_general + if self.is_general or self.is_doctorate else reverse(f'{self.base_namespace}:curriculum', kwargs=kwargs) ) diff --git a/views/doctorate/details/checklist/base.py b/views/doctorate/details/checklist/base.py index 5ca27f32c..f48311a46 100644 --- a/views/doctorate/details/checklist/base.py +++ b/views/doctorate/details/checklist/base.py @@ -160,8 +160,6 @@ def checklist_documents_by_tab(cls, specific_questions: List[QuestionSpecifiqueD for document in DocumentsAssimilation: assimilation_documents.add(document) - secondary_studies_attachments = set(DocumentsEtudesSecondaires.keys()) - documents_by_tab = { OngletsChecklist.assimilation.name: assimilation_documents, OngletsChecklist.financabilite.name: { @@ -180,16 +178,12 @@ def checklist_documents_by_tab(cls, specific_questions: List[QuestionSpecifiqueD 'DIPLOME_EQUIVALENCE', 'CURRICULUM', 'ADDITIONAL_DOCUMENTS', - *secondary_studies_attachments, }, OngletsChecklist.donnees_personnelles.name: assimilation_documents, OngletsChecklist.decision_facultaire.name: { 'ATTESTATION_ACCORD_FACULTAIRE', 'ATTESTATION_REFUS_FACULTAIRE', }, - f'{OngletsChecklist.parcours_anterieur.name}__{OngletsDemande.ETUDES_SECONDAIRES.name}': ( - secondary_studies_attachments - ), OngletsChecklist.decision_sic.name: { 'ATTESTATION_ACCORD_SIC', 'ATTESTATION_ACCORD_ANNEXE_SIC', @@ -203,9 +197,6 @@ def checklist_documents_by_tab(cls, specific_questions: List[QuestionSpecifiqueD # Add documents from the specific questions checklist_target_tab_by_specific_question_tab = { Onglets.CURRICULUM.name: OngletsChecklist.parcours_anterieur.name, - Onglets.ETUDES_SECONDAIRES.name: ( - f'{OngletsChecklist.parcours_anterieur.name}__{OngletsDemande.ETUDES_SECONDAIRES.name}' - ), } for specific_question in specific_questions: @@ -380,6 +371,7 @@ def get_context_data(self, **kwargs): if experience_id: context['all_experience_authentication_history_entries'].setdefault(experience_id, entry) + # Past experiences children_by_identifier = { child['extra']['identifiant']: child for child in children if child.get('extra', {}).get('identifiant') } @@ -595,7 +587,6 @@ def _get_experiences_by_uuid(self, resume: ResumeCandidatDTO): experiences[str(experience_academique.uuid)] = experience_academique for experience_non_academique in resume.curriculum.experiences_non_academiques: experiences[str(experience_non_academique.uuid)] = experience_non_academique - experiences[OngletsDemande.ETUDES_SECONDAIRES.name] = resume.etudes_secondaires return experiences