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