diff --git a/assets/controllers/back_signalement_view/form_upload_documents.js b/assets/controllers/back_signalement_view/form_upload_documents.js index fb010143b1..51f01dd10b 100644 --- a/assets/controllers/back_signalement_view/form_upload_documents.js +++ b/assets/controllers/back_signalement_view/form_upload_documents.js @@ -1,58 +1,44 @@ initializeUploadModal( '#fr-modal-upload-files', - '.modal-upload-drop-section', - '.modal-upload-list', - '.modal-upload-files-selector', - '.modal-upload-files-selector-input', - '#select-type-to-clone', + '#select-type-situation-to-clone', + '#select-type-procedure-to-clone', '#select-desordre-to-clone', - '#btn-validate-modal-upload-files', - '#modal-upload-file-dynamic-content' ); document?.querySelectorAll('.fr-modal-visites-upload-files')?.forEach(modalVisiteUpload => { initializeUploadModal( '#'+modalVisiteUpload.id, - '.modal-upload-drop-section', - '.modal-upload-list', - '.modal-upload-files-selector', - '.modal-upload-files-selector-input', null, null, - '#btn-validate-modal-upload-files', - '#modal-upload-file-dynamic-content' + null, ) }) function initializeUploadModal( modalSelector, - fileDropAreaSelector, - fileListContainerSelector, - fileTypeSelector, - fileInputSelector, - selectTypeToCloneSelector, + selectTypeSituationToCloneSelector, + selectTypeProcedureToCloneSelector, selectDesordreToCloneSelector, - btnValidateSelector, - ancreSelector ) { const modal = document?.querySelector(modalSelector); if (!modal) return; - const dropArea = modal.querySelector(fileDropAreaSelector); - const listContainer = modal.querySelector(fileListContainerSelector); - const fileSelector = modal.querySelector(fileTypeSelector) - const fileSelectorInput = modal.querySelector(fileInputSelector) + const dropArea = modal.querySelector('.modal-upload-drop-section'); + const listContainer = modal.querySelector('.modal-upload-list'); + const fileSelector = modal.querySelector('.modal-upload-files-selector') + const fileSelectorInput = modal.querySelector('.modal-upload-files-selector-input') const addFileRoute = modal.dataset.addFileRoute; const addFileToken = modal.dataset.addFileToken; const waitingSuiviRoute = modal.dataset.waitingSuiviRoute; const deleteTmpFileRoute = modal.dataset.deleteTmpFileRoute; - const selectTypeToClone = selectTypeToCloneSelector ? modal.querySelector(selectTypeToCloneSelector) : null; + const selectTypeSituationToClone = selectTypeSituationToCloneSelector ? modal.querySelector(selectTypeSituationToCloneSelector) : null; + const selectTypeProcedureToClone = selectTypeProcedureToCloneSelector ? modal.querySelector(selectTypeProcedureToCloneSelector) : null; const selectDesordreToClone = selectDesordreToCloneSelector ? modal.querySelector(selectDesordreToCloneSelector) : null; const editFileRoute = modal.dataset.editFileRoute; const editFileToken = modal.dataset.editFileToken; - const btnValidate = modal.querySelector(btnValidateSelector); - const ancre = modal.querySelector(ancreSelector); + const btnValidate = modal.querySelector('#btn-validate-modal-upload-files'); + const ancre = modal.querySelector('#modal-upload-file-dynamic-content'); fileSelector.onclick = () => fileSelectorInput.click() @@ -139,13 +125,16 @@ function initializeUploadModal( addEventListenerDeleteTmpFile(btnDeleteTmpFile) if (this.status == 200) { modal.dataset.hasChanges = true - if (null !== selectDesordreToClone || null !== selectTypeToClone){ + if (null !== selectDesordreToClone || null !== selectTypeSituationToClone || null !== selectTypeProcedureToClone){ let clone if (modal.dataset.fileType == 'photo') { clone = selectDesordreToClone.cloneNode(true) clone.id = 'select-desordre-' + response.response - } else { - clone = selectTypeToClone.cloneNode(true) + if ('situation' === modal.dataset.fileFilter ){ + clone = selectTypeSituationToClone.cloneNode(true) + } else { + clone = selectTypeProcedureToClone.cloneNode(true) + } clone.id = 'select-type-' + response.response } clone.dataset.fileId = response.response @@ -314,10 +303,11 @@ function initializeUploadModal( modal.dataset.hasChanges = false }) - let fileType, documentType, interventionId + let fileType, fileFilter, documentType, interventionId document.querySelectorAll('.open-modal-upload-files-btn').forEach((button) => { button.addEventListener('click', (e) => { fileType = e.target.dataset.fileType + fileFilter = e.target.dataset.fileFilter documentType = e.target.dataset.documentType ?? null interventionId = e.target.dataset.interventionId ?? null }) @@ -330,7 +320,11 @@ function initializeUploadModal( modal.querySelectorAll('.type-conditional').forEach((type) => { type.classList.add('fr-hidden') }) + modal.querySelectorAll('.filter-conditional').forEach((type) => { + type.classList.add('fr-hidden') + }) modal.dataset.documentType = documentType + modal.dataset.fileFilter = fileFilter modal.dataset.interventionId = interventionId if (fileType == 'photo') { modal.dataset.fileType = 'photo' @@ -340,8 +334,12 @@ function initializeUploadModal( modal.dataset.fileType = 'document' modal.querySelector('.type-document').classList.remove('fr-hidden') fileSelectorInput.setAttribute('accept', '*/*') + } + if (fileFilter == 'procedure') { + modal.querySelector('.filter-procedure').classList.remove('fr-hidden') + } else if (fileFilter == 'situation') { + modal.querySelector('.filter-situation').classList.remove('fr-hidden') } - }) btnValidate.addEventListener('click', (e) => { diff --git a/src/Entity/Enum/DocumentType.php b/src/Entity/Enum/DocumentType.php index 44ba600f3b..008f598919 100644 --- a/src/Entity/Enum/DocumentType.php +++ b/src/Entity/Enum/DocumentType.php @@ -47,18 +47,26 @@ public static function getPhotosList(): array { return [ self::PHOTO_SITUATION->name => self::PHOTO_SITUATION->label(), - self::PHOTO_VISITE->name => self::PHOTO_VISITE->label(), + self::PHOTO_VISITE->name => self::PHOTO_VISITE->label(), // TODO, garder ? self::AUTRE->name => self::AUTRE->label(), ]; } - public static function getDocumentsList(): array + public static function getSituationList(): array { return [ + self::PHOTO_SITUATION->name => self::PHOTO_SITUATION->label(), + self::AUTRE->name => self::AUTRE->label(), self::SITUATION_FOYER_BAIL->name => self::SITUATION_FOYER_BAIL->label(), self::SITUATION_FOYER_DPE->name => self::SITUATION_FOYER_DPE->label(), self::SITUATION_FOYER_ETAT_DES_LIEUX->name => self::SITUATION_FOYER_ETAT_DES_LIEUX->label(), self::SITUATION_DIAGNOSTIC_PLOMB_AMIANTE->name => self::SITUATION_DIAGNOSTIC_PLOMB_AMIANTE->label(), + ]; + } + + public static function getProcedureList(): array + { + return [ self::PROCEDURE_MISE_EN_DEMEURE->name => self::PROCEDURE_MISE_EN_DEMEURE->label(), self::PROCEDURE_RAPPORT_DE_VISITE->name => self::PROCEDURE_RAPPORT_DE_VISITE->label(), self::PROCEDURE_ARRETE_MUNICIPAL->name => self::PROCEDURE_ARRETE_MUNICIPAL->label(), @@ -66,9 +74,6 @@ public static function getDocumentsList(): array self::PROCEDURE_SAISINE->name => self::PROCEDURE_SAISINE->label(), self::BAILLEUR_DEVIS_POUR_TRAVAUX->name => self::BAILLEUR_DEVIS_POUR_TRAVAUX->label(), self::BAILLEUR_REPONSE_BAILLEUR->name => self::BAILLEUR_REPONSE_BAILLEUR->label(), - self::PHOTO_SITUATION->name => self::PHOTO_SITUATION->label(), - self::PHOTO_VISITE->name => self::PHOTO_VISITE->label(), - self::AUTRE->name => self::AUTRE->label(), ]; } } diff --git a/templates/_partials/_modal_upload_files.html.twig b/templates/_partials/_modal_upload_files.html.twig index a693df3e8b..70d56b6f2b 100644 --- a/templates/_partials/_modal_upload_files.html.twig +++ b/templates/_partials/_modal_upload_files.html.twig @@ -22,17 +22,28 @@
-

- Ajouter des documents partenaires -

-
- Ajouter un ou plusieurs documents. Pour chaque document, veuillez renseigner son type. +
+

+ Ajouter des documents liés à la procédure +

+
+ Ajouter un ou plusieurs documents. Pour chaque document, veuillez renseigner son type. +
+
+

Pour ajouter des documents de type Bail, DPE, Diagnostic et Etat des lieux, rendez-vous dans la partie "Déclaration usager".

+
- {# -
-

Pour ajouter des documents de type Bail, DPE, Diagnostic et Etat des lieux, rendez-vous dans la partie "Déclaration usager".

+
+

+ Ajouter des documents liés à la situation +

+
+ Ajouter un ou plusieurs documents. Pour chaque document, veuillez renseigner son type. +
+
+

Ces photos seront partagées à l'usager.

+
- #}

@@ -61,9 +72,15 @@

{% set DocumentType = enum('\\App\\Entity\\Enum\\DocumentType') %} - + + {% for key, value in DocumentType.getSituationList() %} + + {% endfor %} + + diff --git a/templates/back/signalement/view.html.twig b/templates/back/signalement/view.html.twig index 2cfbf59d37..f01f6c1431 100755 --- a/templates/back/signalement/view.html.twig +++ b/templates/back/signalement/view.html.twig @@ -41,36 +41,25 @@ {% include 'back/signalement/view/user-declaration.html.twig' %} - {% if createdFromDraft %} - {% include 'back/signalement/view/photos-documents.html.twig' with { - 'zonetitle': "Photos et documents de la situation", - 'importedBy': "user" - } %} - {% endif %} + {% include 'back/signalement/view/photos-documents.html.twig' with { + 'zonetitle': "Photos et documents de la situation", + 'filesFilter': 'situation' + } %} {% include 'back/signalement/view/information.html.twig' %} {% include 'back/signalement/view/nde.html.twig' %} - - {% if not createdFromDraft %} - {% include 'back/signalement/view/photos-documents.html.twig' with { - 'zonetitle': "Photos et documents", - 'importedBy': "all" - } %} - {% endif %} - + {% include 'back/signalement/view/partners.html.twig' %} {% include 'back/signalement/view/suivis.html.twig' %} {% include 'back/signalement/view/visites/visites-list.html.twig' %} - {% if createdFromDraft %} - {% include 'back/signalement/view/photos-documents.html.twig' with { - 'zonetitle': "Photos et documents liés à la procédure", - 'importedBy': "partner" - } %} - {% endif %} + {% include 'back/signalement/view/photos-documents.html.twig' with { + 'zonetitle': "Documents liés à la procédure", + 'filesFilter': 'procedure' + } %} {% endblock %} {% block javascripts %} diff --git a/templates/back/signalement/view/photos-documents.html.twig b/templates/back/signalement/view/photos-documents.html.twig index cf5721e3d4..57f4e2d317 100755 --- a/templates/back/signalement/view/photos-documents.html.twig +++ b/templates/back/signalement/view/photos-documents.html.twig @@ -1,35 +1,41 @@ -{% if importedBy is not same as 'user' %} -
+
-
-
-

{{ zonetitle }}

-
-
- {% if (is_granted('FILE_CREATE', signalement)) %} - {% if isDocumentsEnabled %} - +
+
+

{{ zonetitle }}

+
+
+ {% if (is_granted('FILE_CREATE', signalement)) %} + {% if isDocumentsEnabled %} + + {% if filesFilter is same as 'situation' %} - {% else %} -
- - - -
+ {% endif %} + {% else %} +
+ + + +
+ {% if filesFilter is same as 'situation' %}
+ + + {% endif %}
+
+{% if filesFilter is same as 'situation' %}

Pour ajouter plusieurs photos ou documents à la fois, sélectionnez vos fichiers en maintenant la touche CTRL enfoncée.

- -{% else %} -

{{ zonetitle }}

{% endif %} {% if signalement.files|length == 0 %} @@ -60,69 +65,71 @@

{% endif %} -
- {% for index, photo in signalement.files|filter( - photo => photo.fileType == 'photo' - and photo.intervention is null - and ( - (importedBy is same as 'user' and (photo.uploadedBy is null or photo.isUsagerFile )) - or (importedBy is same as 'partner' and (photo.uploadedBy is not null and photo.isPartnerFile)) - or importedBy is same as 'all' - ) - ) %} -
-
- - {% if is_granted('FILE_EDIT', photo) %} - {% set DocumentType = enum('\\App\\Entity\\Enum\\DocumentType') %} - {% include 'back/signalement/view/edit-modals/edit-file.html.twig' %} - - {% endif %} - {% if is_granted('FILE_DELETE', photo) %} + +{% set DocumentType = enum('\\App\\Entity\\Enum\\DocumentType') %} +{% if filesFilter is same as 'situation' %} +
+ {% for index, photo in signalement.files|filter( + photo => photo.fileType == 'photo' + and photo.intervention is null + and filesFilter is same as 'situation' + and photo.documentType.label() in DocumentType.getSituationList + ) %} +
+
- {% endif %} + {% if is_granted('FILE_EDIT', photo) %} + {% include 'back/signalement/view/edit-modals/edit-file.html.twig' %} + + {% endif %} + {% if is_granted('FILE_DELETE', photo) %} + + {% endif %} +
-
- {% endfor %} -
+ {% endfor %} +
+{% endif %} {% for index, doc in signalement.files|filter( doc => doc.fileType == 'document' - and ( - (importedBy is same as 'user' and (doc.uploadedBy is null or doc.isUsagerFile )) - or (importedBy is same as 'partner' and (doc.uploadedBy is not null and doc.isPartnerFile)) - or importedBy is same as 'all' - ) + and ( + (filesFilter is same as 'situation' + and doc.documentType.label() in DocumentType.getSituationList) + or + (filesFilter is same as 'procedure' + and doc.documentType.label() in DocumentType.getProcedureList) + ) ) %}
@@ -161,7 +168,7 @@ data-type="document" data-file-id="{{ doc.id}}" data-documentType="{{ doc.documentType.name }}" - data-documentType-list="{{ DocumentType.getDocumentsList() | json_encode }}" + data-documentType-list="{{ filesFilter is same as 'situation' ? DocumentType.getSituationList() | json_encode : DocumentType.getProcedureList() | json_encode }}" data-createdAt="{{ doc.createdAt is defined ? doc.createdAt|date('d.m.Y') : 'N/R' }}" data-partner-name="{{ doc.uploadedBy and doc.uploadedBy.partner ? doc.uploadedBy.partner.nom ~ ' - ' : '' }}" data-user-name="{{ doc.uploadedBy.nomComplet ?? 'N/R' }}"