diff --git a/.env b/.env index 4dc89d89f..3d3df1923 100755 --- a/.env +++ b/.env @@ -35,7 +35,6 @@ WIDGET_SIGNALEMENT_ACCEPTED_NO_SUIVI_CACHE_EXPIRED_AFTER=30 #second WIDGET_SIGNALEMENT_TERRITOIRE_CACHE_EXPIRED_AFTER=30 #second WIDGET_ESABORA_EVENTS_CACHE_EXPIRED_AFTER=3600 #second FEATURE_ASK_VISITE_ENABLE=1 -FEATURE_NEW_FORM_ENABLE=0 FEATURE_OILHI_ENABLE=1 FEATURE_DOCUMENTS_ENABLE=1 CRON_ENABLE=1 diff --git a/.env.sample b/.env.sample index 4c6be809d..27446a700 100755 --- a/.env.sample +++ b/.env.sample @@ -23,7 +23,6 @@ CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$' HISTOLOGE_URL=http://localhost:8080 WIREMOCK_HOSTNAME=histologe_wiremock WIREMOCK_PORT=8080 -FEATURE_NEW_FORM_ENABLE=1 FEATURE_OILHI_ENABLE=1 FEATURE_ASK_VISITE_ENABLE=1 FEATURE_DOCUMENTS_ENABLE=1 diff --git a/assets/styles/histologe.scss b/assets/styles/histologe.scss index aff9aa6ea..b3459539b 100644 --- a/assets/styles/histologe.scss +++ b/assets/styles/histologe.scss @@ -46,15 +46,6 @@ pre { max-width: 100%; } - -.fr-hover-critere:hover { - background: rgba(0, 0, 145, 0.15); -} - -[aria-expanded="true"] .fr-hover-critere { - background: rgba(0, 0, 145, 0.15); -} - /*STYLE*/ .fr-w-100 { width: 100%; @@ -138,7 +129,7 @@ pre { background-color: rgba(191, 204, 251, 0.37); } -.fr-toggle--parent, .fr-accordion, .toggle-criticite, [role="button"], .fr-list--hover li, .fr-btn, .fr-checkbox-affectation__parent, .fr-checkbox-affectation__parent label { +.fr-toggle--parent, .fr-accordion, [role="button"], .fr-list--hover li, .fr-btn, .fr-checkbox-affectation__parent, .fr-checkbox-affectation__parent label { cursor: pointer !important; user-select: none; } @@ -148,11 +139,6 @@ pre { background-color: var(--background-alt-grey); } -.toggle-criticite:hover { - border-radius: .25rem; - background-color: white; -} - .fr-rounded { border-radius: .25rem; } @@ -388,21 +374,6 @@ a.fr-btn.fr-btn--icon-left.fr-fi-file-pdf-fill.ignore-blank-style::before { resize: vertical; } -.toggle-criticite > input[type="radio"] { - width: 60px; - height: 50px; - position: relative; -} - -.toggle-criticite > input[type="radio"]::before { - position: absolute; - content: ''; - top: 0; - left: 25%; - width: 50px; - height: 50px; -} - .bar-bulle { position: relative; } diff --git a/config/app/nondecence.yaml b/config/app/nondecence.yaml deleted file mode 100644 index 8abcab13d..000000000 --- a/config/app/nondecence.yaml +++ /dev/null @@ -1,7 +0,0 @@ -# `experimentation_territory` To define the territories on non-décence énergétique experimentation -# - -parameters: - experimentation_territory: - 63: 'Puy de dôme' - 89: 'Yonne' diff --git a/config/services.yaml b/config/services.yaml index 06bb5cadb..9bc8de0a3 100755 --- a/config/services.yaml +++ b/config/services.yaml @@ -7,7 +7,6 @@ imports: - { resource: 'app/widgets.yaml'} - { resource: 'app/insee.yaml'} - - { resource: 'app/nondecence.yaml'} - { resource: 'app/documents.yaml'} - { resource: 'app/competences.yaml'} - { resource: 'app/suivi_messages.yaml'} @@ -31,7 +30,6 @@ parameters: cron_enable: '%env(bool:CRON_ENABLE)%' mail_enable: '%env(bool:MAIL_ENABLE)%' feature_ask_visite: '%env(FEATURE_ASK_VISITE_ENABLE)%' - feature_new_form: '%env(bool:FEATURE_NEW_FORM_ENABLE)%' feature_oilhi_enable: '%env(bool:FEATURE_OILHI_ENABLE)%' feature_documents_enable: '%env(bool:FEATURE_DOCUMENTS_ENABLE)%' platform_name: 'Histologe' diff --git a/public/js/app.js b/public/js/app.js index 6d9ccf87a..9f09dfe2d 100755 --- a/public/js/app.js +++ b/public/js/app.js @@ -15,48 +15,8 @@ for (let iTables = 0; iTables < tables.length; iTables++) { thead.addEventListener("click", sortTableFunction(table)); } } -let isZipForNDE = false -let hasCriticiteForNDE = false -let isNDEBail2023 = false; -let isNDEMissingInfo = false; -let isNDEDPEBefore2023 = false; -let hasDPE = false; -let totalNDEConso = -1; -let superficieNDE = -1; -localStorage.clear(); -forms.forEach((form) => { - form?.querySelectorAll('.toggle-criticite input[type="radio"]')?.forEach((criticite) => { - criticite.addEventListener('change', (event) => { - event.currentTarget.parentElement.parentElement.parentElement.querySelector('.fr-toggle__input').checked = true; - // parent.querySelector('[type="checkbox"]').checked = !parent.querySelector('[type="checkbox"]').checked; - }) - }) - form?.querySelectorAll('.fr-toggle')?.forEach((t) => { - t.addEventListener('change', (event) => { - if (!event.target.checked) - event.currentTarget.nextElementSibling.querySelectorAll('.fr-collapse input[type="radio"]').forEach((radio) => { - radio.checked = false - radio.required = false; - }) - }) - }) - form?.querySelectorAll('.fr-hover-critere')?.forEach(fhc => { - fhc.addEventListeners('click touchdown', (event) => { - if (fhc.parentElement.parentElement.getAttribute('aria-expanded') === "true") { - let target = form?.querySelector('#' + fhc.parentElement.parentElement.getAttribute('aria-controls')) - target.classList.remove('fr-fieldset--error') - target.querySelectorAll('input').forEach(i => { - i.required = false; - i.checked = false; - }) - target.querySelectorAll('.fr-radio-rich img').forEach(img => { - img.src = img.getAttribute('data-fr-unchecked-icon'); - }) - } - // if(event.target.parentElement.parentElement.querySelector('[type="checkbox"]')) - }) - }) +forms.forEach((form) => { form?.querySelectorAll('.fr-accordion__title')?.forEach((situation) => { situation.addEventListeners("click touchdown", (event) => { event.target.parentElement.parentElement.querySelectorAll('[type="radio"],[type="checkbox"]').forEach((ipt) => { @@ -65,297 +25,6 @@ forms.forEach((form) => { }) }) }) - form?.querySelectorAll('input[name="signalement[isAllocataire]"]')?.forEach((input) => { - input.addEventListener('change', (event) => { - if (event.target.value === 'CAF' || event.target.value === 'MSA') { - form.querySelector('#signalement-date-naissance-bloc')?.classList.remove('fr-hidden') - let isOccupant = false - document.querySelectorAll('input[name="signalement[isNotOccupant]"]').forEach((element) => { - if (element.value == '0' && element.checked) { - isOccupant = true - } - }) - if (isOccupant) { - form.querySelector('#signalement-date-naissance-bloc-necessary')?.classList.remove('fr-hidden') - } else { - form.querySelector('#signalement-date-naissance-bloc-necessary')?.classList.add('fr-hidden') - } - } else { - form.querySelector('#signalement-date-naissance-bloc')?.classList.add('fr-hidden') - } - }) - }) - form?.querySelectorAll('#signalement_cpOccupant')?.forEach((element) => { - element.addEventListener('change', (event) => { - let cpOccupant = form.querySelector('#signalement_cpOccupant').value; - let zipOccupant = cpOccupant.substr(0, 2) - // Only a few code postal available in territory 69 - if (zipOccupant == '69') { - const METROPOLE_RHONES_AUTHORIZED_CODES_POSTAL = [ - 69000, 69001, 69002, 69003, 69004, 69005, 69006, 69007, 69008, 69009, - 69100, 69125, 69190, 69200, 69290, 69381, - 69520, 69600, 69700, 69800 - ] - const COR_RHONES_AUTHORIZED_CODES_POSTAL = [ - 69170, 69240, 69430, 69470, 69490, 69550, 69870 - ]; - const RHONES_AUTHORIZED_CODES_POSTAL = METROPOLE_RHONES_AUTHORIZED_CODES_POSTAL.concat( - COR_RHONES_AUTHORIZED_CODES_POSTAL - ); - if (RHONES_AUTHORIZED_CODES_POSTAL.indexOf(Number(cpOccupant)) == -1) { - form.querySelector('#fr-error-text-code-postal')?.classList?.remove('fr-hidden'); - } else { - form.querySelector('#fr-error-text-code-postal')?.classList?.add('fr-hidden'); - } - } - - // Zip codes available for Non Conformité Energétique - isZipForNDE = (zipOccupant == '63' || zipOccupant == '89'); - - refetchAddress(form) - }) - }) - form?.querySelectorAll('#signalement_villeOccupant')?.forEach((element) => { - element.addEventListener('change', (event) => { - refetchAddress(form) - }) - }) - form?.querySelectorAll('#form-nde input')?.forEach((element) => { - element.addEventListener('change', (event) => { - let isEntreeSelected = false; - let isDPESelected = false; - let isDateBailSelected = false; - - let isEntree2023 = false; - let isEntreeBefore2023 = false; - hasDPE = false; - let isDateDPE2023 = false; - let isDateDPEBefore2023 = false; - isNDEMissingInfo = false; - - form.querySelectorAll('#form-nde input[name="signalement[dateEntree]"]')?.forEach((element) => { - if (element.checked) { - isEntreeSelected = true; - isEntree2023 = (element.value === '2023-01-02') - isNDEBail2023 = isEntree2023 - isEntreeBefore2023 = (element.value === '1970-01-01') - } - }) - if (isEntreeSelected) { - if (isEntreeBefore2023) { - form.querySelectorAll('#form-nde input[name="signalement[dateBail]"]')?.forEach((element) => { - if (element.checked) { - isDateBailSelected = true; - isNDEBail2023 = (element.value === '2023-01-02'); - isNDEMissingInfo = (element.value === 'Je ne sais pas'); - } - }) - } - if (isNDEBail2023) { - form.querySelectorAll('#form-nde input[name="signalement[hasDPE]"]')?.forEach((element) => { - if (element.checked) { - isDPESelected = true; - hasDPE = (element.value === '1'); - isNDEMissingInfo = (element.value === ''); - } - }) - } - if (hasDPE) { - form.querySelectorAll('#form-nde input[name="signalement[dateDPE]"]')?.forEach((element) => { - if (element.checked) { - isDateDPE2023 = (element.value === '2023-01-02') - isDateDPEBefore2023 = (element.value === '1970-01-01') - } - }) - } - } - - // Reinit display - form.querySelector('#form-nde .display-if-entree-2023')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-entree-before-2023')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-has-dpe')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-dpe-2023')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-dpe-before-2023')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-conso-complete')?.classList.add('fr-hidden'); - - form.querySelector('#form-nde .display-if-missing-info')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-bail-before-2023')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-not-nde')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-nde')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.add('fr-hidden'); - - // Logical display - if (isEntree2023) { - form.querySelector('#form-nde .display-if-entree-2023')?.classList.remove('fr-hidden'); - - } else if (isEntreeBefore2023) { - form.querySelector('#form-nde .display-if-entree-before-2023')?.classList.remove('fr-hidden'); - - if (isNDEBail2023) { - form.querySelector('#form-nde .display-if-entree-2023')?.classList.remove('fr-hidden'); - } else if (isNDEMissingInfo) { - form.querySelector('#form-nde .display-if-missing-info')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.remove('fr-hidden'); - return; - } else if (isDateBailSelected) { - form.querySelector('#form-nde .display-if-bail-before-2023')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.remove('fr-hidden'); - return; - } - } - - if (hasDPE) { - form.querySelector('#form-nde .display-if-has-dpe')?.classList.remove('fr-hidden'); - if (isDateDPE2023) { - form.querySelector('#form-nde .display-if-dpe-2023')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde button.calculate-conso')?.click(); - - } else if (isDateDPEBefore2023) { - form.querySelector('#form-nde .display-if-dpe-before-2023')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde button.calculate-conso')?.click(); - } - } else if (isNDEMissingInfo) { - form.querySelector('#form-nde .display-if-missing-info')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.remove('fr-hidden'); - return; - } else if (isDPESelected) { - form.querySelector('#form-nde .display-if-nde')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.remove('fr-hidden'); - return; - } - }) - }) - form?.querySelectorAll('#form-nde button.calculate-conso')?.forEach((element) => { - element.addEventListener('click', (event) => { - form.querySelector('#form-nde .display-if-conso-complete')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .fr-error-consoSizeYear')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .fr-error-consoSizePlusYear')?.classList.add('fr-hidden'); - - let isDateDPE2023 = false; - let isDateDPEBefore2023 = false; - form.querySelectorAll('#form-nde input[name="signalement[dateDPE]"]')?.forEach((element) => { - if (element.checked) { - isDateDPE2023 = (element.value === '2023-01-02') - isDateDPEBefore2023 = (element.value === '1970-01-01') - } - }) - - let consoSizeYear = -1; - isNDEDPEBefore2023 = false; - totalNDEConso = -1; - if (isNDEBail2023) { - if (isDateDPE2023) { - let consoSizeYearTxt = form.querySelector('#form-nde input[name="signalement[consoSizeYear]"]')?.value; - if (consoSizeYearTxt.length > 0) { - if (isNaN(consoSizeYear)) { - form.querySelector('#form-nde .fr-error-consoSizeYear')?.classList.remove('fr-hidden'); - } else { - consoSizeYear = consoSizeYearTxt; - form.querySelector('#form-nde .display-if-conso-complete span').textContent = consoSizeYear; - form.querySelector('#form-nde .display-if-conso-complete')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.remove('fr-hidden'); - } - } else { - form.querySelector('#form-nde .display-if-conso-complete')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.add('fr-hidden'); - } - } else if (isDateDPEBefore2023) { - isNDEDPEBefore2023 = true; - superficieNDE = form.querySelector('#form-nde input[name="signalement[consoSize]"]')?.value; - let consoYear = form.querySelector('#form-nde input[name="signalement[consoYear]"]')?.value; - if (superficieNDE.length > 0 && consoYear.length > 0) { - if (isNaN(superficieNDE) || isNaN(consoYear)) { - form.querySelector('#form-nde .fr-error-consoSizePlusYear')?.classList.remove('fr-hidden'); - } else { - consoSizeYear = Math.round(consoYear / superficieNDE, 2); - form.querySelector('#form-nde .display-if-conso-complete span').textContent = consoSizeYear; - form.querySelector('#form-nde .display-if-conso-complete')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.remove('fr-hidden'); - } - } else { - form.querySelector('#form-nde .display-if-conso-complete')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-finished')?.classList.add('fr-hidden'); - } - } - - if (consoSizeYear > -1) { - totalNDEConso = consoSizeYear; - if (consoSizeYear > 450) { - form.querySelector('#form-nde .display-if-nde')?.classList.remove('fr-hidden'); - form.querySelector('#form-nde .display-if-not-nde')?.classList.add('fr-hidden'); - } else { - form.querySelector('#form-nde .display-if-nde')?.classList.add('fr-hidden'); - form.querySelector('#form-nde .display-if-not-nde')?.classList.remove('fr-hidden'); - } - } - } - }) - }) - form?.querySelectorAll('[data-fr-toggle-show],[data-fr-toggle-hide]')?.forEach((toggle) => { - toggle.addEventListener('change', (event) => { - let toShow = event.target.getAttribute('data-fr-toggle-show'), - toHide = event.target.getAttribute('data-fr-toggle-hide'), - toUnrequire = event.target.getAttribute('data-fr-toggle-unrequire'), - toRequire = event.target.getAttribute('data-fr-toggle-require') - toShow && toShow.split('|').map(targetId => { - let target; - if (targetId === "signalement-consentement-tiers-bloc") { - target = document?.querySelector('#signalement-consentement-tiers-bloc'); - target.querySelector('[type="checkbox"]').required = true; - } else { - target = form?.querySelector('#' + targetId); - target.querySelectorAll('input:not([type="checkbox"]),textarea,select').forEach(ipt => { - if (ipt.name !== "signalement[numAllocataire]") { - ipt.required = true; - if (ipt.labels) - ipt.labels[0].classList.add('required') - } - }) - } - if (target.id === "signalement-methode-contact") { - target.querySelector('fieldset').setAttribute('aria-required', true) - } - target.classList.remove('fr-hidden') - }) - toHide && toHide.split('|').map(targetId => { - let target; - if (targetId === "signalement-consentement-tiers-bloc") { - target = document.querySelector('#signalement-consentement-tiers-bloc'); - target.querySelector('[type="checkbox"]').required = false - } else { - target = form?.querySelector('#' + targetId); - target?.querySelectorAll('input:not([type="checkbox"]),textarea,select')?.forEach(ipt => { - ipt.required = false; - }) - } - if (target.id === "signalement-methode-contact") { - target?.querySelector('fieldset[aria-required="true"]')?.removeAttribute('aria-required') - target?.querySelectorAll('[type="checkbox"]')?.forEach(chk => { - chk.checked = false; - }) - } - target.classList.add('fr-hidden') - }) - toUnrequire && toUnrequire.split('|').map(targetId => { - let target = form?.querySelector('#' + targetId); - if (!target) - target = document?.querySelector('#' + targetId); - target.required = false; - target?.parentElement?.classList?.remove('fr-input-group--error') - target?.parentElement?.querySelector('.fr-error-text')?.classList.add('fr-hidden') - target?.classList?.remove('fr-input--error') - target.labels[0].classList.remove('required') - }) - toRequire && toRequire.split('|').map(targetId => { - let target = form?.querySelector('#' + targetId); - if (!target) - target = document?.querySelector('#' + targetId); - target.required = true; - target?.labels[0]?.classList.add('required') - }) - }) - }) form?.querySelectorAll('input[type="file"]')?.forEach((file) => { file.addEventListener('change', (event) => { if (event.target.files.length > 0) { @@ -471,69 +140,38 @@ forms.forEach((form) => { } }) }) - form?.querySelectorAll('[data-fr-adresse-autocomplete]').forEach((autocomplete) => { - autocomplete.addEventListener('keyup', () => { - searchAddress(form, autocomplete) - }); - }) form.addEventListener('submit', (event) => { event.preventDefault(); - if (!form.checkValidity() || !checkFirstStep(form) || !checkFieldset(form)) { + if (!form.checkValidity() || !checkFieldset(form)) { event.stopPropagation(); - if (form.id === "signalement-step-2") { - form.querySelector('[role="alert"]').classList.remove('fr-hidden') - form?.querySelectorAll('.fr-fieldset__content.fr-collapse.fr-collapse--expanded').forEach(exp => { - exp.querySelector('[type="radio"]:first-of-type').required = true; - if (exp.querySelector('input:invalid')) { - exp.classList.add('fr-fieldset--error') - exp.querySelector('.fr-error-text').classList.remove('fr-hidden') + form.querySelectorAll('input,textarea,select,fieldset[aria-required="true"]').forEach((field) => { + if (field.tagName === "FIELDSET") { + if (!checkFieldset(form)) { + field.addEventListener('change', () => { + checkFieldset(form); + }) + invalid = field.parentElement; } - }) - invalid = form?.querySelector('*:invalid:first-of-type')?.parentElement; - if (!invalid) - invalid = document.querySelector("div[role='alert']") - form.addEventListener('change', () => { - form?.querySelectorAll('.fr-fieldset__content.fr-collapse.fr-collapse--expanded').forEach(exp => { - if (null === exp.querySelector('input:invalid')) { - exp.classList.remove('fr-fieldset--error') - exp.querySelector('.fr-error-text').classList.add('fr-hidden') - } + } else if (!field.checkValidity()) { + let parent = field.parentElement; + if (field.type === 'radio') + parent = field.parentElement.parentElement.parentElement; + [field.classList, parent.classList].forEach((f) => { + f.add(f[0] + '--error'); }) - if (checkFirstStep(form)) { - form.querySelector('[role="alert"]').classList.add('fr-hidden') - } - }) - } else { - form.querySelectorAll('input,textarea,select,fieldset[aria-required="true"]').forEach((field) => { - if (field.tagName === "FIELDSET") { - if (!checkFieldset(form)) { - field.addEventListener('change', () => { - checkFieldset(form); + parent?.querySelector('.fr-error-text')?.classList.remove('fr-hidden'); + field.addEventListener('input', () => { + if (field.checkValidity()) { + [field.classList, parent.classList].forEach((f) => { + f.remove(f[0] + '--error'); }) - invalid = field.parentElement; + parent.querySelector('.fr-error-text')?.classList.add('fr-hidden'); } - } else if (!field.checkValidity()) { - let parent = field.parentElement; - if (field.type === 'radio') - parent = field.parentElement.parentElement.parentElement; - [field.classList, parent.classList].forEach((f) => { - f.add(f[0] + '--error'); - }) - parent?.querySelector('.fr-error-text')?.classList.remove('fr-hidden'); - field.addEventListener('input', () => { - if (field.checkValidity()) { - [field.classList, parent.classList].forEach((f) => { - f.remove(f[0] + '--error'); - }) - parent.querySelector('.fr-error-text')?.classList.add('fr-hidden'); - } - }) - invalid = form?.querySelector('*:invalid:first-of-type')?.parentElement; - } - - }) + }) + invalid = form?.querySelector('*:invalid:first-of-type')?.parentElement; + } - } + }) if (invalid) { const y = invalid.getBoundingClientRect().top + window.scrollY; window.scroll({ @@ -542,256 +180,14 @@ forms.forEach((form) => { }); } } else { - form.querySelectorAll('input,textarea,select').forEach((field) => { - let parent = field.parentElement; - if (field.type === 'radio') - parent = field.parentElement.parentElement.parentElement; - [field.classList, parent.classList].forEach((f) => { - f.remove(f[0] + '--error'); - }) - parent.querySelector('.fr-error-text')?.classList.add('fr-hidden'); - }) - if (form.name !== 'signalement') { - Object.keys(uploadedFiles).map((f, index) => { - let fi = JSON.parse(uploadedFiles[f]); - form.insertAdjacentHTML('beforeend', ``); - }); - form.submit(); - } - else { - let currentTabBtn = document.querySelector('.fr-tabs__list>li>button[aria-selected="true"]'), - nextTabBtn = currentTabBtn.parentElement?.nextElementSibling?.querySelector('button'); - if (form.id === "signalement-step-1" && form.querySelector('.checkterr')) { - let inseeParam = ''; - if (form.querySelector('#signalement-insee-occupant').value != undefined && form.querySelector('#signalement-insee-occupant').value != '') { - inseeParam = '&insee='+form.querySelector('#signalement-insee-occupant').value; - } - fetch('checkterritory?cp='+form.querySelector('#signalement_cpOccupant').value+inseeParam).then(r=> r.json()).then(r=> { - if(r.success) - { - nextTabBtn.disabled = false; - setTimeout(() => {nextTabBtn.click()}, 50) - } else { - document.getElementById('fr-modal-closed-territory-content').innerHTML = r.message; - dsfr(document.querySelector('#fr-modal-closed-territory')).modal.disclose(); - } - }) - } else { - if (form.id === "signalement-step-3") { - if (isZipForNDE && hasCriticiteForNDE) { - nextTabBtn = document.querySelector('#signalement-step-3b-btn'); - nextTabBtn.classList.remove('fr-hidden'); - document.querySelector('#signalement-step-4-btn > span').textContent = '5'; - document.querySelector('#signalement-step-last-btn > span').textContent = '6'; - } else { - nextTabBtn = document.querySelector('#signalement-step-3b-btn'); - nextTabBtn.classList.add('fr-hidden'); - nextTabBtn = document.querySelector('#signalement-step-4-btn'); - document.querySelector('#signalement-step-4-btn > span').textContent = '4'; - document.querySelectorAll('#signalement-step-last-btn > span')?.forEach(element => { - element.textContent = '5'; - }) - } - } - if (form.id === "signalement-step-3b") { - if (superficieNDE > -1) { - document.querySelector('#signalement_superficie').value = superficieNDE; - } - } - - if (form.id === "signalement-step-4") { - document.querySelector('#signalement-date-naissance-bloc .fr-error-text').classList.add('fr-hidden') - let isOccupant = false - let isAllocataire = false - document.querySelectorAll('input[name="signalement[isNotOccupant]"]').forEach((element) => { - if (element.value == '0' && element.checked) { - isOccupant = true - } - }) - document.querySelectorAll('input[name="signalement[isAllocataire]"]').forEach((element) => { - if ((element.value == 'CAF' || element.value == 'MSA') && element.checked) { - isAllocataire = true - } - }) - if (isOccupant && isAllocataire) { - if (document.querySelector('#signalement_dateNaissanceOccupant_day').value == '' - || document.querySelector('#signalement_dateNaissanceOccupant_month').value == '' - || document.querySelector('#signalement_dateNaissanceOccupant_year').value == '') { - document.querySelector('#signalement-date-naissance-bloc .fr-error-text').classList.remove('fr-hidden') - event.stopPropagation(); - return - } - } - } - - if (nextTabBtn) { - if (nextTabBtn.hasAttribute('data-fr-last-step')) { - let inputHiddenElement = document.querySelector( - '#signalement-step-last-panel input[type=hidden]' - ); - - fetch('/signalement/csrf-token') - .then(response => response.json()) - .then(obj => { - inputHiddenElement.value = obj.csrf_token.value; - }); - - var nbDocs = 0; - var nbPhotos = 0; - document.querySelector('#recap-signalement-situation').innerHTML = ''; - forms.forEach((form) => { - form.querySelectorAll('[type="file"]').forEach(file => { - if (file.classList.contains("doc-file")) { - if (file.parentElement.classList.contains('fr-icon-checkbox-circle-fill')) { - nbDocs ++; - } - } - if (file.classList.contains("photo-file")) { - if (file.previousElementSibling != undefined && file.previousElementSibling.src != undefined && file.previousElementSibling.src != '') { - nbPhotos ++; - } - } - }) - - form.querySelectorAll('input,textarea,select').forEach((input) => { - if (document.querySelector('#recap-' + input.id)) { - document.querySelector('#recap-' + input.id).innerHTML = `${input.value}`; - } else if (input.classList.contains('signalement-situation') && input.checked) - document.querySelector('#recap-signalement-situation').innerHTML += '- ' + input.value + '
'; - }); - let compAddress = Array( 'signalement_etageOccupant', 'signalement_escalierOccupant', 'signalement_numAppartOccupant', 'signalement_adresseAutreOccupant' ); - for (const str of compAddress) { - if ( document.querySelector('#recap-' + str).innerHTML == '' ) { - document.querySelector('#recap-container-' + str).style.display = 'none'; - } else { - document.querySelector('#recap-container-' + str).style.display = 'inline'; - } - } - }) - - document.querySelector('#recap-signalement_documents').innerHTML = nbDocs + ' document(s) transmis'; - document.querySelector('#recap-signalement_photos').innerHTML = nbPhotos + ' photo(s) transmise(s)'; - - // Reinit display for non-décence - updateResultNDE(); - } - nextTabBtn.disabled = false; - setTimeout(() => {nextTabBtn.click()}, 50) - } else if (!nextTabBtn) { - event.target.querySelector('[type="submit"]').disabled = true; - ['fr-icon-checkbox-circle-fill', 'fr-icon-refresh-fill'].map(v => event.target.querySelector('[type="submit"]').classList.toggle(v)); - event.target.querySelector('[type="submit"]').innerHTML = "En cours d'envoi..." - let formData = new FormData(); - forms.forEach((form) => { - let data = serializeArray(form); - for (let i = 0; i < Object.keys(data).length; i++) { - let x = Object.keys(data)[i]; - let y = Object.values(data)[i]; - if (x !== 'signalement[photos]' && x !== 'signalement[documents]') - formData.append(x, y); - } - }) - Object.keys(uploadedFiles).map((f, index) => { - let fi = JSON.parse(uploadedFiles[f]); - formData.append(`signalement[files][${fi.key}][${fi.titre}]`, fi.file) - }) - fetch(form.action, { - method: "POST", - body: formData - }).then((r) => { - - if (r.ok) { - r.json().then((res) => { - if (res.response === "success") { - document.querySelectorAll('#signalement-tabs,#signalement-success').forEach(el => { - el.classList.toggle('fr-hidden') - window.scroll({ - top: 0, - behavior: 'smooth' - }); - }) - localStorage.clear(); - } else if (res.response === "success_edited") { - localStorage.clear(); - window.location.reload(); - } else { - event.target.querySelector('[type="submit"]').disabled = false; - event.target.querySelector('[type="submit"]').innerHTML = "Confirmer"; - ['fr-icon-checkbox-circle-fill', 'fr-icon-refresh-fill'].map(v => event.target.querySelector('[type="submit"]').classList.toggle(v)); - let messageAlert = 'Oups... Il semblerait que vous ayez passé trop de temps sur cette étape ! Retournez à l\'étape précédente puis continuez le formulaire pour régler le problème. Si cela ne fonctionne pas, veuillez réessayer plus tard.'; - if(res.response === "formErrors"){ - messageAlert = "Le formulaire contient des erreurs : \n"; - for (const [key, error] of Object.entries(res.errsMsgList)) { - messageAlert += "- " + error + "\n"; - } - } - alert(messageAlert); - } - }) - } else { - r.text().then(r=>{ - console.log(r) - }) - event.target.querySelector('[type="submit"]').disabled = false; - event.target.querySelector('[type="submit"]').innerHTML = "Confirmer"; - ['fr-icon-checkbox-circle-fill', 'fr-icon-refresh-fill'].map(v => event.target.querySelector('[type="submit"]').classList.toggle(v)); - alert('Oups... Il semblerait que vous ayez passé trop de temps sur cette étape ! Retournez à l\'étape précédente puis continuez le formulaire pour régler le problème. Si cela ne fonctionne pas, veuillez réessayer plus tard.') - } - }) - } - } - } - } - }) -}) -document?.querySelectorAll('.fr-tabs__panel')?.forEach((tab) => { - tab.addEventListener("dsfr.conceal", () => { - if (tab.id === "signalement-step-2-panel") { - tab.querySelectorAll('[aria-expanded="true"]').forEach(opened => { - localStorage.setItem(opened.id, 'true') - }) + Object.keys(uploadedFiles).map((f, index) => { + let fi = JSON.parse(uploadedFiles[f]); + form.insertAdjacentHTML('beforeend', ``); + }); + form.submit(); } - const y = tab.getBoundingClientRect().top + window.scrollY; - window.scroll({ - top: y, - behavior: 'smooth' - }); - }); -}) -document?.querySelectorAll('[data-goto-step]')?.forEach(stepper => { - stepper.addEventListeners('click touchdown', (evt) => { - evt.preventDefault(); - goToStep(stepper.getAttribute('data-goto-step')) }) }) -document?.querySelectorAll('.toggle-criticite-smiley').forEach(iptSmiley => { - iptSmiley.addEventListener('change', (evt) => { - let icon = evt.target.labels[0]?.parentElement?.querySelector('.fr-radio-rich__img img'); - evt.target.parentElement.parentElement.querySelectorAll('.fr-radio-rich__img img').forEach(iptParentImg => { - iptParentImg.src = iptParentImg.getAttribute('data-fr-unchecked-icon') - }) - if (evt.target.checked === true) - icon.src = evt.target.parentElement.querySelector('.fr-radio-rich__img img').getAttribute('data-fr-checked-icon') - - // Browse all options to check if one nte is checked - hasCriticiteForNDE = false; - document?.querySelectorAll('.toggle-criticite-smiley').forEach(elmtSmiley => { - if (elmtSmiley.checked && elmtSmiley.dataset.nde !== undefined) { - hasCriticiteForNDE = true; - } - }) - }) -}) -document?.querySelector('#signalement-step-2-panel')?.addEventListener('dsfr.disclose', (ev => { - ev.target.querySelectorAll('[aria-expanded]').forEach(exp => { - if (localStorage.getItem(exp.id)) { // noinspection CommaExpressionJS - document.querySelector('#' + exp.id).setAttribute('aria-expanded', "true"), localStorage.removeItem(exp.id) - } - }) -})) -document?.querySelector('#signalement-step-last-panel')?.addEventListener('dsfr.disclose', (ev => { - updateResultNDE(); -})) document?.querySelectorAll(".fr-pagination__link").forEach((e => { let t, r, a, n = document.querySelector(".fr-pagination__link--prev"), i = document.querySelector(".fr-pagination__link--next"), @@ -978,116 +374,4 @@ document.querySelector('#modal-dpe-opener')?.addEventListener('click', (event) = } }) }) -}) - -const refetchAddress = (form) => { - // If the code postal is manually edited, we reinit the insee/geoloc and fetch the first result - form.querySelector('#signalement-insee-occupant').value = ''; - form.querySelector('#signalement-geoloc-lat-occupant').value = ''; - form.querySelector('#signalement-geoloc-lng-occupant').value = ''; - let addressComplete = form.querySelector('#signalement_adresseOccupant').value - addressComplete += ' ' + form.querySelector('#signalement_cpOccupant').value - addressComplete += ' ' + form.querySelector('#signalement_villeOccupant').value - fetch('https://api-adresse.data.gouv.fr/search/?q=' + addressComplete).then((res) => { - res.json().then((r) => { - let feature = r.features[0]; - form.querySelector('#signalement-insee-occupant').value = feature.properties.citycode; - let zipOccupant = feature.properties.citycode.substr(0, 2) - if (zipOccupant == '69' || zipOccupant == '29') { - const METROPOLE_RHONES_AUTHORIZED_INSEE_CODES = [ - 69091, 69096, 69123, 69149, 69199, 69205, 69290, 69259, 69266, - 69381, 69382, 69383, 69384, 69385, 69386, 69387, 69388, 69389, - 69003, 69029, 69033, 69034, 69040, 69044, 69046, 69271, 69063, - 69273, 69068, 69069, 69071, 69072, 69275, 69081, 69276, 69085, - 69087, 69088, 69089, 69100, 69279, 69142, 69250, 69116, 69117, - 69127, 69282, 69283, 69284, 69143, 69152, 69153, 69163, 69286, - 69168, 69191, 69194, 69204, 69207, 69202, 69292, 69293, 69296, - 69244, 69256, 69260, 69233, 69278 - ]; - const COR_RHONES_AUTHORIZED_INSEE_CODES = [ - 69001, 69006, 69008, 69037, 69054, 69060, 69066, 69070, 69075, - 69093, 69102, 69107, 69174, 69130, 69160, 69164, 69169, 69181, - 69183, 69188, 69200, 69214, 69217, 69225, 69229, 69234, 69240, - 69243, 69248, 69254, 69157 - ]; - - const FINISTERE_AUTHORIZED_INSEE_CODES = [29232, 29019]; - - const AUTHORIZED_INSEE_CODES = METROPOLE_RHONES_AUTHORIZED_INSEE_CODES.concat( - COR_RHONES_AUTHORIZED_INSEE_CODES, - FINISTERE_AUTHORIZED_INSEE_CODES - ); - - if (AUTHORIZED_INSEE_CODES.indexOf(Number(feature.properties.citycode)) == -1) { - form.querySelector('#fr-error-text-insee')?.classList?.remove('fr-hidden'); - } else { - form.querySelector('#fr-error-text-insee')?.classList?.add('fr-hidden'); - } - } - - // Zip codes available for Non Conformité Energétique - isZipForNDE = (zipOccupant == '63' || zipOccupant == '89'); - - form.querySelector('#signalement-geoloc-lat-occupant').value = feature.geometry.coordinates[1]; - form.querySelector('#signalement-geoloc-lng-occupant').value = feature.geometry.coordinates[0]; - }) - }) -} - -const updateResultNDE = () => { - document.querySelector('#result-nde').classList.add('fr-hidden'); - document.querySelectorAll('#result-nde .display-if-missing-info').forEach(el => { - el.classList.add('fr-hidden') - }) - document.querySelectorAll('#result-nde .display-if-dpe-before-2023').forEach(el => { - el.classList.add('fr-hidden') - }) - document.querySelectorAll('#result-nde .display-if-conso').forEach(el => { - el.classList.add('fr-hidden') - }) - document.querySelectorAll('#result-nde .display-if-not-nde').forEach(el => { - el.classList.add('fr-hidden') - }) - document.querySelectorAll('#result-nde .display-if-nde').forEach(el => { - el.classList.add('fr-hidden') - }) - document.querySelectorAll('#result-nde .display-if-nde-no-dpe').forEach(el => { - el.classList.add('fr-hidden') - }) - // Results for non-décence - if (isZipForNDE && hasCriticiteForNDE && isNDEBail2023) { - document.querySelector('#result-nde').classList.remove('fr-hidden'); - if (isNDEMissingInfo) { - document.querySelectorAll('#result-nde .display-if-missing-info').forEach(el => { - el.classList.remove('fr-hidden') - }) - } else if (!hasDPE) { - document.querySelectorAll('#result-nde .display-if-nde-no-dpe').forEach(el => { - el.classList.remove('fr-hidden') - }) - - } else if (isNDEBail2023 && totalNDEConso > -1) { - if (isNDEDPEBefore2023) { - document.querySelectorAll('#result-nde .display-if-dpe-before-2023').forEach(el => { - el.classList.remove('fr-hidden') - }) - } - document.querySelectorAll('#result-nde .display-if-conso').forEach(el => { - el.classList.remove('fr-hidden') - }) - document.querySelector('#result-nde .conso-amount').textContent = totalNDEConso; - if (totalNDEConso > 450) { - document.querySelectorAll('#result-nde .display-if-nde').forEach(el => { - el.classList.remove('fr-hidden') - }) - } else { - document.querySelectorAll('#result-nde .display-if-not-nde').forEach(el => { - el.classList.remove('fr-hidden') - }) - } - } else { - document.querySelector('#result-nde').classList.add('fr-hidden'); - } - - } -} \ No newline at end of file +}) \ No newline at end of file diff --git a/public/js/const.js b/public/js/const.js index 864eb517e..ff7193326 100755 --- a/public/js/const.js +++ b/public/js/const.js @@ -112,28 +112,6 @@ const serializeArray = (form) => { return response }, {}) }; -const checkFirstStep = (form) => { - return !(form.id === "signalement-step-2" && null === form.querySelector('[type="radio"]:checked') || form.id === "signalement-step-2" && form.querySelectorAll('[type="checkbox"]:checked').length !== form.querySelectorAll('[type="radio"]:checked').length); -} -const checkFieldset = (form) => { - let field = form.querySelector('fieldset[aria-required="true"]') - if (field) { - if (null === field.querySelector('[type="checkbox"]:checked')) { - field.classList.add('fr-fieldset--error'); - field?.querySelector('.fr-error-text')?.classList.remove('fr-hidden'); - invalid = field.parentElement; - return false; - } else { - field.classList.remove('fr-fieldset--error'); - field?.querySelector('.fr-error-text')?.classList.add('fr-hidden'); - return true; - } - } else - return true; -} -const goToStep = (step) => { - document.querySelector('#signalement-step-' + step + '-btn').click(); -} const sortTableFunction = (table) => { return function (ev) { if (ev.target.tagName.toLowerCase() === 'A') { diff --git a/public/js/const.min.js b/public/js/const.min.js index 5b25cf71c..9a04f1b95 100755 --- a/public/js/const.min.js +++ b/public/js/const.min.js @@ -82,34 +82,4 @@ searchAddress=(e,t)=>{ ),!1 }, 300 ); } - - if ("signalement_adresseProprio" === t.id) { - idFetchTimeout = setTimeout( () => { - if (t.value.length > 10) { - t.removeEventListener('keyup', searchAddress) - fetch('https://api-adresse.data.gouv.fr/search/?q=' + t.value).then((res) => { - res.json().then((r) => { - let container = e.querySelector('#signalement-adresse-pro-suggestion') - container.innerHTML = ''; - for (let feature of r.features) { - let suggestion = document.createElement('div'); - suggestion.classList.add( - 'fr-col-12', - 'fr-p-3v', - 'fr-text-label--blue-france', - 'fr-adresse-suggestion' - ); - suggestion.innerHTML = feature.properties.label; - suggestion.addEventListener('click', () => { - e.querySelector('#signalement_adresseProprio').value = feature.properties.label; - container.innerHTML = ''; - }) - container.appendChild(suggestion) - } - }) - }) - return false; - } - }, 300 ); - } }; \ No newline at end of file diff --git a/src/Controller/Back/SignalementController.php b/src/Controller/Back/SignalementController.php index 5ccfb545b..b1e758bf1 100755 --- a/src/Controller/Back/SignalementController.php +++ b/src/Controller/Back/SignalementController.php @@ -8,12 +8,10 @@ use App\Entity\Intervention; use App\Entity\Signalement; use App\Entity\SignalementQualification; -use App\Entity\Suivi; use App\Entity\User; use App\Event\SignalementClosedEvent; use App\Event\SignalementViewedEvent; use App\Form\ClotureType; -use App\Form\SignalementType; use App\Manager\AffectationManager; use App\Manager\SignalementManager; use App\Repository\AffectationRepository; @@ -21,14 +19,9 @@ use App\Repository\DesordrePrecisionRepository; use App\Repository\InterventionRepository; use App\Repository\SignalementQualificationRepository; -use App\Repository\SituationRepository; use App\Repository\TagRepository; use App\Security\Voter\UserVoter; -use App\Service\FormHelper; -use App\Service\Signalement\CriticiteCalculator; -use App\Service\Signalement\Qualification\SignalementQualificationUpdater; use App\Service\Signalement\SignalementDesordresProcessor; -use DateTimeImmutable; use Doctrine\Persistence\ManagerRegistry; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; @@ -212,7 +205,6 @@ public function viewSignalement( 'listConcludeProcedures' => $listConcludeProcedures, 'partnersCanVisite' => $partnerVisite, 'pendingVisites' => $interventionRepository->getPendingVisitesForSignalement($signalement), - 'isNewFormEnabled' => $parameterBag->get('feature_new_form'), 'isDocumentsEnabled' => $parameterBag->get('feature_documents_enable'), ]); } @@ -226,71 +218,6 @@ private function isSignalementNDEActif(?SignalementQualification $signalementQua return false; } - #[Route('/{uuid}/editer', name: 'back_signalement_edit', methods: ['GET', 'POST'])] - public function editSignalement( - Signalement $signalement, - Request $request, - ManagerRegistry $doctrine, - SituationRepository $situationRepository, - CriticiteCalculator $criticiteCalculator, - SignalementQualificationUpdater $signalementQualificationUpdater, - ParameterBagInterface $parameterBag, - ): Response { - $this->denyAccessUnlessGranted('SIGN_EDIT', $signalement); - if (Signalement::STATUS_ACTIVE !== $signalement->getStatut()) { - $this->addFlash('error', "Ce signalement n'est pas éditable."); - - return $this->redirectToRoute('back_index'); - } - if ($parameterBag->get('feature_new_form')) { - return $this->redirectToRoute('back_signalement_view', ['uuid' => $signalement->getUuid()]); - } - $title = 'Administration - Edition signalement #'.$signalement->getReference(); - $etats = ['Etat moyen', 'Mauvais état', 'Très mauvais état']; - $etats_classes = ['moyen', 'grave', 'tres-grave']; - $form = $this->createForm(SignalementType::class, $signalement); - $form->handleRequest($request); - if ($form->isSubmitted()) { - if ($form->isValid()) { - $signalement->setModifiedBy($this->getUser()); - $signalement->setModifiedAt(new DateTimeImmutable()); - $signalement->setScore($criticiteCalculator->calculate($signalement)); - - $signalementQualificationUpdater->updateQualificationFromScore($signalement); - $suivi = new Suivi(); - $suivi->setCreatedBy($this->getUser()); - $suivi->setSignalement($signalement); - $suivi->setIsPublic(false); - $suivi->setDescription('Modification du signalement par un partenaire'); - $suivi->setType(SUIVI::TYPE_AUTO); - $doctrine->getManager()->persist($suivi); - $signalement->setGeoloc($form->getExtraData()['geoloc']); - $signalement->setInseeOccupant($form->getExtraData()['inseeOccupant']); - $doctrine->getManager()->persist($signalement); - $doctrine->getManager()->flush(); - $this->addFlash('success', 'Signalement modifié avec succès !'); - - return $this->json(['response' => 'success_edited']); - } - - return $this->json( - [ - 'response' => 'formErrors', - 'errsMsgList' => FormHelper::getErrorsFromForm($form), - ], - ); - } - - return $this->render('back/signalement/edit.html.twig', [ - 'title' => $title, - 'form' => $form->createView(), - 'signalement' => $signalement, - 'situations' => $situationRepository->findAllActive(), - 'etats' => $etats, - 'etats_classes' => $etats_classes, - ]); - } - #[Route('/{uuid}/supprimer', name: 'back_signalement_delete', methods: 'POST')] public function deleteSignalement(Signalement $signalement, Request $request, ManagerRegistry $doctrine): Response { diff --git a/src/Controller/Back/SignalementListController.php b/src/Controller/Back/SignalementListController.php index 891920a29..e2483f126 100755 --- a/src/Controller/Back/SignalementListController.php +++ b/src/Controller/Back/SignalementListController.php @@ -37,7 +37,6 @@ public function index( return $this->stream('back/table_result.html.twig', [ 'filters' => $filters, 'signalements' => $signalements, - 'isNewFormEnabled' => $parameterBag->get('feature_new_form'), ]); } @@ -47,7 +46,6 @@ public function index( 'countActiveFilters' => $searchFilterService->getCountActive(), 'displayRefreshAll' => true, 'signalements' => $signalements, - 'isNewFormEnabled' => $parameterBag->get('feature_new_form'), ]); } } diff --git a/src/Controller/FrontNewSignalementController.php b/src/Controller/FrontNewSignalementController.php deleted file mode 100755 index d26a17358..000000000 --- a/src/Controller/FrontNewSignalementController.php +++ /dev/null @@ -1,230 +0,0 @@ -redirectToRoute('front_signalement'); - } - - #[Route('/signalement-draft/{uuid}', name: 'front_nouveau_formulaire_edit', methods: 'GET')] - public function edit( - SignalementDraft $signalementDraft, - ParameterBagInterface $parameterBag - ): Response { - if (!$parameterBag->get('feature_new_form')) { - return $this->redirectToRoute('front_signalement'); - } - if ( - $signalementDraft - && SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() - ) { - return $this->render('front/nouveau_formulaire.html.twig', [ - 'uuid_signalement' => $signalementDraft->getUuid(), - ]); - } - - return $this->redirectToRoute('front_signalement'); - } - - #[Route('/signalement-draft/envoi', name: 'envoi_nouveau_signalement_draft', methods: 'POST')] - public function sendSignalementDraft( - Request $request, - SignalementDraftRequestSerializer $serializer, - SignalementDraftManager $signalementDraftManager, - ValidatorInterface $validator, - ): Response { - /** @var SignalementDraftRequest $signalementDraftRequest */ - $signalementDraftRequest = $serializer->deserialize( - $payload = $request->getContent(), - SignalementDraftRequest::class, - 'json' - ); - $errors = $validator->validate( - $signalementDraftRequest, - null, - ['Default', 'POST_'.strtoupper($signalementDraftRequest->getProfil())] - ); - if (0 === $errors->count()) { - return $this->json([ - 'uuid' => $signalementDraftManager->create( - $signalementDraftRequest, - json_decode($payload, true) - ), - ]); - } - - return $this->json($errors); - } - - #[Route('/signalement-draft/check', name: 'check_signalement_draft_existe', methods: 'POST')] - public function checkSignalementDraftExists( - Request $request, - SignalementDraftRequestSerializer $serializer, - SignalementDraftManager $signalementDraftManager, - ValidatorInterface $validator, - SignalementDraftFactory $signalementDraftFactory, - SignalementDraftRepository $signalementDraftRepository, - ): Response { - /** @var SignalementDraftRequest $signalementDraftRequest */ - $signalementDraftRequest = $serializer->deserialize( - $payload = $request->getContent(), - SignalementDraftRequest::class, - 'json' - ); - $errors = $validator->validate( - $signalementDraftRequest, - null, - ['Default', 'POST_'.strtoupper($signalementDraftRequest->getProfil())] - ); - if (0 === $errors->count()) { - $dataToHash = $signalementDraftFactory->getEmailDeclarant($signalementDraftRequest); - $dataToHash .= $signalementDraftRequest->getAdresseLogementAdresse(); - $hash = hash('sha256', $dataToHash); - - $existingSignalementDraft = $signalementDraftRepository->findOneBy( - [ - 'checksum' => $hash, - 'status' => SignalementDraftStatus::EN_COURS, - ], - [ - 'id' => 'DESC', - ] - ); - - if (null !== $existingSignalementDraft) { - return $this->json([ - 'already_exists' => true, - 'uuid' => $existingSignalementDraft->getUuid(), - 'created_at' => $existingSignalementDraft->getCreatedAt(), - 'updated_at' => $existingSignalementDraft->getUpdatedAt(), - ]); - } - - return $this->json([ - 'already_exists' => false, - 'uuid' => $signalementDraftManager->create( - $signalementDraftRequest, - json_decode($payload, true) - ), - ]); - } - - return $this->json($errors); - } - - #[Route('/signalement-draft/{uuid}/envoi', name: 'mise_a_jour_nouveau_signalement_draft', methods: 'PUT')] - public function updateSignalementDraft( - Request $request, - SignalementDraftRequestSerializer $serializer, - SignalementDraftManager $signalementDraftManager, - ValidatorInterface $validator, - SignalementDraft $signalementDraft, - ): Response { - /** @var SignalementDraftRequest $signalementDraftRequest */ - $signalementDraftRequest = $serializer->deserialize( - $payload = $request->getContent(), - SignalementDraftRequest::class, - 'json' - ); - $groupValidation = ['Default', 'POST_'.strtoupper($signalementDraftRequest->getProfil())]; - if ('validation_signalement' === $signalementDraftRequest->getCurrentStep()) { - $groupValidation[] = 'PUT_'.strtoupper($signalementDraftRequest->getProfil()); - } - $errors = $validator->validate($signalementDraftRequest, null, $groupValidation); - if (0 === $errors->count()) { - $result = $signalementDraftManager->update( - $signalementDraft, - $signalementDraftRequest, - json_decode($payload, true) - ); - - return $this->json($result); - } - - return $this->json($errors); - } - - #[Route('/signalement-draft/{uuid}/informations', name: 'informations_signalement_draft', methods: 'GET')] - public function getSignalementDraft( - SignalementDraft $signalementDraft, - ): Response { - return $this->json([ - 'signalement' => SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() - ? $signalementDraft : - null, - ]); - } - - #[Route('/signalement-draft/{uuid}/send_mail', name: 'send_mail_continue_from_draft')] - public function sendMailContinueFromDraft( - NotificationMailerRegistry $notificationMailerRegistry, - SignalementDraft $signalementDraft, - Request $request - ): Response { - if ( - $request->isMethod('POST') - && $signalementDraft - && SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() - ) { - $success = $notificationMailerRegistry->send( - new NotificationMail( - type: NotificationMailerType::TYPE_CONTINUE_FROM_DRAFT, - to: $signalementDraft->getEmailDeclarant(), - signalementDraft: $signalementDraft, - ) - ); - if ($success) { - return $this->json(['success' => true]); - } - - return $this->json([ - 'success' => false, - 'label' => 'Erreur', - 'message' => 'L\'envoi du mail n\'a pas fonctionné, veuillez réessayer ou faire un nouveau signalement.', - ]); - } - - return $this->json(['response' => 'error'], Response::HTTP_BAD_REQUEST); - } - - #[Route('/signalement-draft/{uuid}/archive', name: 'archive_draft')] - public function archiveDraft( - SignalementDraft $signalementDraft, - Request $request, - SignalementDraftManager $signalementDraftManager - ): Response { - if ( - $request->isMethod('POST') - && $signalementDraft - && SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() - ) { - $signalementDraft->setStatus(SignalementDraftStatus::ARCHIVE); - $signalementDraftManager->save($signalementDraft); - - return $this->json(['success' => true]); - } - - return $this->json(['response' => 'error'], Response::HTTP_BAD_REQUEST); - } -} diff --git a/src/Controller/FrontSignalementController.php b/src/Controller/FrontSignalementController.php index 4ff93940f..38c8cd7ad 100755 --- a/src/Controller/FrontSignalementController.php +++ b/src/Controller/FrontSignalementController.php @@ -2,48 +2,32 @@ namespace App\Controller; -use App\Entity\Critere; -use App\Entity\Criticite; +use App\Dto\Request\Signalement\SignalementDraftRequest; use App\Entity\Enum\DocumentType; -use App\Entity\Enum\Qualification; -use App\Entity\File; -use App\Entity\Signalement; -use App\Entity\Situation; +use App\Entity\Enum\SignalementDraftStatus; +use App\Entity\SignalementDraft; use App\Entity\Suivi; use App\Entity\User; -use App\Event\SignalementCreatedEvent; -use App\Factory\FileFactory; -use App\Factory\SignalementQualificationFactory; +use App\Factory\SignalementDraftFactory; use App\Factory\SuiviFactory; -use App\Form\SignalementType; +use App\Manager\SignalementDraftManager; use App\Manager\SuiviManager; use App\Manager\UserManager; use App\Repository\CommuneRepository; +use App\Repository\SignalementDraftRepository; use App\Repository\SignalementRepository; -use App\Repository\SituationRepository; -use App\Repository\TerritoryRepository; use App\Repository\UserRepository; -use App\Service\Files\DocumentProvider; +use App\Serializer\SignalementDraftRequestSerializer; use App\Service\ImageManipulationHandler; use App\Service\Mailer\NotificationMail; use App\Service\Mailer\NotificationMailerRegistry; use App\Service\Mailer\NotificationMailerType; -use App\Service\Signalement\AutoAssigner; -use App\Service\Signalement\CriticiteCalculator; use App\Service\Signalement\PostalCodeHomeChecker; -use App\Service\Signalement\Qualification\QualificationStatusService; -use App\Service\Signalement\Qualification\SignalementQualificationUpdater; -use App\Service\Signalement\ReferenceGenerator; use App\Service\Signalement\SignalementFileProcessor; -use App\Service\Signalement\ZipcodeProvider; use App\Service\UploadHandlerService; -use DateTimeImmutable; use Doctrine\ORM\EntityManagerInterface; -use Exception; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\DependencyInjection\Attribute\Autowire; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -55,34 +39,202 @@ class FrontSignalementController extends AbstractController { #[Route('/signalement', name: 'front_signalement')] public function index( - SituationRepository $situationRepository, + ): Response { + return $this->render('front/nouveau_formulaire.html.twig', [ + 'uuid_signalement' => null, + ]); + } + + #[Route('/signalement-draft/{uuid}', name: 'front_nouveau_formulaire_edit', methods: 'GET')] + public function edit( + SignalementDraft $signalementDraft + ): Response { + return $this->render('front/nouveau_formulaire.html.twig', [ + 'uuid_signalement' => $signalementDraft->getUuid(), + ]); + } + + #[Route('/signalement-draft/envoi', name: 'envoi_nouveau_signalement_draft', methods: 'POST')] + public function sendSignalementDraft( + Request $request, + SignalementDraftRequestSerializer $serializer, + SignalementDraftManager $signalementDraftManager, + ValidatorInterface $validator, + ): Response { + /** @var SignalementDraftRequest $signalementDraftRequest */ + $signalementDraftRequest = $serializer->deserialize( + $payload = $request->getContent(), + SignalementDraftRequest::class, + 'json' + ); + $errors = $validator->validate( + $signalementDraftRequest, + null, + ['Default', 'POST_'.strtoupper($signalementDraftRequest->getProfil())] + ); + if (0 === $errors->count()) { + return $this->json([ + 'uuid' => $signalementDraftManager->create( + $signalementDraftRequest, + json_decode($payload, true) + ), + ]); + } + + return $this->json($errors); + } + + #[Route('/signalement-draft/check', name: 'check_signalement_draft_existe', methods: 'POST')] + public function checkSignalementDraftExists( Request $request, - #[Autowire(env: 'FEATURE_NEW_FORM_ENABLE')] - bool $enableNewFormFeature, + SignalementDraftRequestSerializer $serializer, + SignalementDraftManager $signalementDraftManager, + ValidatorInterface $validator, + SignalementDraftFactory $signalementDraftFactory, + SignalementDraftRepository $signalementDraftRepository, ): Response { - if ($enableNewFormFeature) { - return $this->render('front/nouveau_formulaire.html.twig', [ - 'uuid_signalement' => null, + /** @var SignalementDraftRequest $signalementDraftRequest */ + $signalementDraftRequest = $serializer->deserialize( + $payload = $request->getContent(), + SignalementDraftRequest::class, + 'json' + ); + $errors = $validator->validate( + $signalementDraftRequest, + null, + ['Default', 'POST_'.strtoupper($signalementDraftRequest->getProfil())] + ); + if (0 === $errors->count()) { + $dataToHash = $signalementDraftFactory->getEmailDeclarant($signalementDraftRequest); + $dataToHash .= $signalementDraftRequest->getAdresseLogementAdresse(); + $hash = hash('sha256', $dataToHash); + + $existingSignalementDraft = $signalementDraftRepository->findOneBy( + [ + 'checksum' => $hash, + 'status' => SignalementDraftStatus::EN_COURS, + ], + [ + 'id' => 'DESC', + ] + ); + + if (null !== $existingSignalementDraft) { + return $this->json([ + 'already_exists' => true, + 'uuid' => $existingSignalementDraft->getUuid(), + 'created_at' => $existingSignalementDraft->getCreatedAt(), + 'updated_at' => $existingSignalementDraft->getUpdatedAt(), + ]); + } + + return $this->json([ + 'already_exists' => false, + 'uuid' => $signalementDraftManager->create( + $signalementDraftRequest, + json_decode($payload, true) + ), ]); } - $title = 'Signalez vos problèmes de logement'; - $etats = ['Etat moyen', 'Mauvais état', 'Très mauvais état']; - $etats_classes = ['moyen', 'grave', 'tres-grave']; - $signalement = new Signalement(); - $form = $this->createForm(SignalementType::class); - $form->handleRequest($request); - - return $this->render('front/signalement.html.twig', [ - 'title' => $title, - 'situations' => $situationRepository->findAllActive(), - 'signalement' => $signalement, - 'form' => $form->createView(), - 'etats' => $etats, - 'etats_classes' => $etats_classes, + return $this->json($errors); + } + + #[Route('/signalement-draft/{uuid}/envoi', name: 'mise_a_jour_nouveau_signalement_draft', methods: 'PUT')] + public function updateSignalementDraft( + Request $request, + SignalementDraftRequestSerializer $serializer, + SignalementDraftManager $signalementDraftManager, + ValidatorInterface $validator, + SignalementDraft $signalementDraft, + ): Response { + /** @var SignalementDraftRequest $signalementDraftRequest */ + $signalementDraftRequest = $serializer->deserialize( + $payload = $request->getContent(), + SignalementDraftRequest::class, + 'json' + ); + $groupValidation = ['Default', 'POST_'.strtoupper($signalementDraftRequest->getProfil())]; + if ('validation_signalement' === $signalementDraftRequest->getCurrentStep()) { + $groupValidation[] = 'PUT_'.strtoupper($signalementDraftRequest->getProfil()); + } + $errors = $validator->validate($signalementDraftRequest, null, $groupValidation); + if (0 === $errors->count()) { + $result = $signalementDraftManager->update( + $signalementDraft, + $signalementDraftRequest, + json_decode($payload, true) + ); + + return $this->json($result); + } + + return $this->json($errors); + } + + #[Route('/signalement-draft/{uuid}/informations', name: 'informations_signalement_draft', methods: 'GET')] + public function getSignalementDraft( + SignalementDraft $signalementDraft, + ): Response { + return $this->json([ + 'signalement' => SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() + ? $signalementDraft : + null, ]); } + #[Route('/signalement-draft/{uuid}/send_mail', name: 'send_mail_continue_from_draft')] + public function sendMailContinueFromDraft( + NotificationMailerRegistry $notificationMailerRegistry, + SignalementDraft $signalementDraft, + Request $request + ): Response { + if ( + $request->isMethod('POST') + && $signalementDraft + && SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() + ) { + $success = $notificationMailerRegistry->send( + new NotificationMail( + type: NotificationMailerType::TYPE_CONTINUE_FROM_DRAFT, + to: $signalementDraft->getEmailDeclarant(), + signalementDraft: $signalementDraft, + ) + ); + if ($success) { + return $this->json(['success' => true]); + } + + return $this->json([ + 'success' => false, + 'label' => 'Erreur', + 'message' => 'L\'envoi du mail n\'a pas fonctionné, veuillez réessayer ou faire un nouveau signalement.', + ]); + } + + return $this->json(['response' => 'error'], Response::HTTP_BAD_REQUEST); + } + + #[Route('/signalement-draft/{uuid}/archive', name: 'archive_draft')] + public function archiveDraft( + SignalementDraft $signalementDraft, + Request $request, + SignalementDraftManager $signalementDraftManager + ): Response { + if ( + $request->isMethod('POST') + && $signalementDraft + && SignalementDraftStatus::EN_COURS === $signalementDraft->getStatus() + ) { + $signalementDraft->setStatus(SignalementDraftStatus::ARCHIVE); + $signalementDraftManager->save($signalementDraft); + + return $this->json(['success' => true]); + } + + return $this->json(['response' => 'error'], Response::HTTP_BAD_REQUEST); + } + #[Route('/checkterritory', name: 'front_signalement_check_territory', methods: ['GET'])] public function checkTerritory( Request $request, @@ -161,249 +313,6 @@ public function handleUpload( return $this->json(['error' => 'Aucun fichier n\'a été téléversé'], 400); } - /** - * @throws Exception - * - * @deprecated Cette route est obsolète, elle est remplacée par les routes du - * @see \App\Controller\FrontNewSignalementController - */ - #[Route('/signalement/envoi', name: 'envoi_signalement', methods: 'POST')] - public function envoi( - Request $request, - EntityManagerInterface $entityManager, - TerritoryRepository $territoryRepository, - NotificationMailerRegistry $notificationMailerRegistry, - UploadHandlerService $uploadHandlerService, - ReferenceGenerator $referenceGenerator, - PostalCodeHomeChecker $postalCodeHomeChecker, - ZipcodeProvider $zipcodeProvider, - EventDispatcherInterface $eventDispatcher, - SignalementQualificationFactory $signalementQualificationFactory, - QualificationStatusService $qualificationStatusService, - ValidatorInterface $validator, - SignalementQualificationUpdater $signalementQualificationUpdater, - CriticiteCalculator $criticiteCalculator, - FileFactory $fileFactory, - LoggerInterface $logger, - DocumentProvider $documentProvider, - AutoAssigner $autoAssigner, - #[Autowire(env: 'FEATURE_NEW_FORM_ENABLE')] - bool $enableNewFormFeature, - ): Response { - if ($enableNewFormFeature) { - $logger->error( - 'La soumission de l\'ancien formulaire est inactif.', - ['payload' => $request->request->all()] - ); - - return $this->json(['response' => 'error'], Response::HTTP_BAD_REQUEST); - } - - if ($this->isCsrfTokenValid('new_signalement', $request->request->get('_token')) - && $data = $request->get('signalement') - ) { - $signalement = new Signalement(); - $dataDateBail = $dataHasDPE = $dataDateDPE = $dataConsoSizeYear = $dataConsoSize = $dataConsoYear = null; - $listNDECriticites = []; - if (isset($data['files'])) { - $dataFiles = $data['files']; - foreach ($dataFiles as $key => $files) { - foreach ($files as $titre => $file) { - if (\is_array($file)) { - continue; - } - $filename = $uploadHandlerService->moveFromBucketTempFolder($file); - $file = $fileFactory->createInstanceFrom( - filename: $filename, - title: $titre, - type: 'documents' === $key ? File::FILE_TYPE_DOCUMENT : File::FILE_TYPE_PHOTO, - documentType: DocumentType::AUTRE - ); - if (null !== $file) { - $file->setSize($uploadHandlerService->getFileSize($file->getFilename())); - $file->setIsVariantsGenerated($uploadHandlerService->hasVariants($file->getFilename())); - $signalement->addFile($file); - } - } - } - unset($data['files']); - } - - foreach ($data as $key => $value) { - $method = 'set'.ucfirst($key); - switch ($key) { - case 'situation': - foreach ($data[$key] as $idSituation => $criteres) { - $situation = $entityManager->getRepository(Situation::class)->find($idSituation); - $signalement->addSituation($situation); - foreach ($criteres as $critere) { - foreach ($critere as $idCritere => $criticites) { - $critere = $entityManager->getRepository(Critere::class)->find($idCritere); - $signalement->addCritere($critere); - $criticite = $entityManager->getRepository(Criticite::class)->find( - $data[$key][$idSituation]['critere'][$idCritere]['criticite'] - ); - $signalement->addCriticite($criticite); - // TODO : replace getQualification with an array of enum - if (null !== $criticite->getQualification() && \in_array(Qualification::NON_DECENCE_ENERGETIQUE->value, $criticite->getQualification())) { - $listNDECriticites[] = $criticite->getId(); - } - } - } - } - break; - - case 'dateEntree': - if (!empty($value)) { - $value = new DateTimeImmutable($value); - $signalement->$method($value); - } - break; - - case 'dateNaissanceOccupant': - $year = trim($value['year']); - $month = trim($value['month']); - $day = trim($value['day']); - if ('' !== $year && '' !== $month && '' !== $day) { - $value = new DateTimeImmutable($year.'-'.$month.'-'.$day); - $signalement->$method($value); - } - break; - - case 'geoloc': - $signalement->setGeoloc(['lat' => $data[$key]['lat'], 'lng' => $data[$key]['lng']]); - break; - - case 'dateBail': - $dataDateBail = $value; - break; - case 'hasDPE': - $dataHasDPE = $value; - break; - case 'dateDPE': - $dataDateDPE = $value; - break; - case 'consoSizeYear': - $dataConsoSizeYear = $value; - break; - case 'consoSize': - $dataConsoSize = $value; - break; - case 'consoYear': - $dataConsoYear = $value; - break; - default: - if (\in_array($method, ['setSignalement', 'setUuid', 'setStatus', 'setReference', 'setCodeSuivi'])) { - break; - } - if ('' === $value || ' ' === $value) { - $value = null; - } - $signalement->$method($value); - } - } - $errors = $validator->validate($signalement); - - if (\count($errors) > 0) { - $errsMsgList = []; - foreach ($errors as $error) { - $errsMsgList[$error->getPropertyPath().'_'.uniqid()] = $error->getMessage(); - } - - return $this->json( - [ - 'response' => 'formErrors', - 'errsMsgList' => $errsMsgList, - ], - ); - } - - if (!$signalement->getIsNotOccupant()) { - $signalement->setNomDeclarant(null); - $signalement->setPrenomDeclarant(null); - $signalement->setMailDeclarant(null); - $signalement->setStructureDeclarant(null); - $signalement->setTelDeclarant(null); - } - - if (!empty($signalement->getCpOccupant())) { - $signalement->setTerritory( - $territoryRepository->findOneBy([ - 'zip' => $zipcodeProvider->getZipCode($signalement->getCpOccupant()), 'isActive' => 1, ]) - ); - } - - if (null === $signalement->getTerritory() - || !$postalCodeHomeChecker->isAuthorizedInseeCode( - $signalement->getTerritory(), - $signalement->getInseeOccupant() - ) - ) { - return $this->json(['response' => 'Territory is inactive'], Response::HTTP_BAD_REQUEST); - } - $signalement->setReference($referenceGenerator->generate($signalement->getTerritory())); - - $signalement->setScore($criticiteCalculator->calculate($signalement)); - $signalementQualificationUpdater->updateQualificationFromScore($signalement); - - // Non-décence énergétique - // Create a SignalementQualification if: - // - Territory in experimentation : $isExperimentationTerritory - // - Criticité is NDE : $hasNDECriticite - // - dateEntree >= 2023 or dataDateBail >= 2023 or dataDateBail "Je ne sais pas" - $experimentationTerritories = $this->getParameter('experimentation_territory'); - $isExperimentationTerritory = \array_key_exists($signalement->getTerritory()->getZip(), $experimentationTerritories); - if ($isExperimentationTerritory && \count($listNDECriticites) > 0) { - $isDateBail2023 = $signalement->getDateEntree()->format('Y') >= 2023 || '2023-01-02' === $dataDateBail || 'Je ne sais pas' === $dataDateBail; - if ($isDateBail2023) { - $signalementQualification = $signalementQualificationFactory->createNDEInstanceFrom( - signalement: $signalement, - listNDECriticites: $listNDECriticites, - dataDateBail: $dataDateBail, - dataConsoSizeYear: $dataConsoSizeYear, - dataConsoYear: $dataConsoYear, - dataConsoSize: $dataConsoSize, - dataHasDPE: $dataHasDPE, - dataDateDPE: $dataDateDPE - ); - - $signalement->addSignalementQualification($signalementQualification); - // redéfinit le statut de la qualification après sa création - $signalementQualification->setStatus($qualificationStatusService->getNDEStatus($signalementQualification)); - $entityManager->persist($signalementQualification); - } - } - - $entityManager->persist($signalement); - $entityManager->flush(); - $autoAssigner->assign($signalement); - - $toRecipients = $signalement->getMailUsagers(); - foreach ($toRecipients as $toRecipient) { - $notificationMailerRegistry->send( - new NotificationMail( - type: NotificationMailerType::TYPE_CONFIRM_RECEPTION, - to: $toRecipient, - territory: $signalement->getTerritory(), - signalement: $signalement, - attachment: $documentProvider->getModeleCourrierPourProprietaire($signalement), - ) - ); - } - - $eventDispatcher->dispatch(new SignalementCreatedEvent($signalement), SignalementCreatedEvent::NAME); - - return $this->json(['response' => 'success']); - } - - $logger->error( - 'Erreur lors de l\'enregistrement du signalement : {payload}', - ['payload' => $request->request->all()] - ); - - return $this->json(['response' => 'error'], Response::HTTP_BAD_REQUEST); - } - #[Route('/suivre-ma-procedure/{code}', name: 'front_suivi_procedure', methods: 'GET')] public function suiviProcedure( string $code, diff --git a/src/DataFixtures/Loader/LoadSignalementData.php b/src/DataFixtures/Loader/LoadSignalementData.php index 305a06aac..51c75104e 100644 --- a/src/DataFixtures/Loader/LoadSignalementData.php +++ b/src/DataFixtures/Loader/LoadSignalementData.php @@ -6,6 +6,7 @@ use App\Entity\Enum\DocumentType; use App\Entity\Enum\MotifCloture; use App\Entity\Enum\MotifRefus; +use App\Entity\Enum\OccupantLink; use App\Entity\Enum\ProfileDeclarant; use App\Entity\Enum\Qualification; use App\Entity\Enum\QualificationStatus; @@ -19,7 +20,6 @@ use App\Factory\Signalement\InformationProcedureFactory; use App\Factory\Signalement\SituationFoyerFactory; use App\Factory\Signalement\TypeCompositionLogementFactory; -use App\Form\SignalementType; use App\Repository\CritereRepository; use App\Repository\CriticiteRepository; use App\Repository\DesordreCategorieRepository; @@ -126,6 +126,7 @@ private function loadSignalements(ObjectManager $manager, array $row) ) ->setIsUsagerAbandonProcedure(0); if (isset($row['is_not_occupant'])) { + $linkChoices = OccupantLink::getLabelList(); $signalement ->setIsNotOccupant($row['is_not_occupant']) ->setNomDeclarant($faker->lastName()) @@ -133,7 +134,7 @@ private function loadSignalements(ObjectManager $manager, array $row) ->setTelDeclarant($phoneNumber) ->setMailDeclarant($faker->email()) ->setStructureDeclarant($faker->company()) - ->setLienDeclarantOccupant(SignalementType::LINK_CHOICES[array_rand(SignalementType::LINK_CHOICES)]); + ->setLienDeclarantOccupant($linkChoices[array_rand($linkChoices)]); } else { $signalement->setIsNotOccupant(0); } @@ -353,6 +354,7 @@ private function loadNewSignalements(ObjectManager $manager, array $row) ); if (isset($row['is_not_occupant'])) { + $linkChoices = OccupantLink::getLabelList(); $signalement ->setIsNotOccupant($row['is_not_occupant']) ->setNomDeclarant($row['nom_declarant'] ?? $faker->lastName()) @@ -360,7 +362,7 @@ private function loadNewSignalements(ObjectManager $manager, array $row) ->setTelDeclarant($row['tel_declarant'] ?? $phoneNumber) ->setMailDeclarant($row['mail_declarant'] ?? $faker->email()) ->setStructureDeclarant($faker->company()) - ->setLienDeclarantOccupant(SignalementType::LINK_CHOICES[array_rand(SignalementType::LINK_CHOICES)]); + ->setLienDeclarantOccupant($linkChoices[array_rand($linkChoices)]); } else { $signalement->setIsNotOccupant(0); } diff --git a/src/Entity/Enum/OccupantLink.php b/src/Entity/Enum/OccupantLink.php index 2fb85f1ba..42f3db215 100644 --- a/src/Entity/Enum/OccupantLink.php +++ b/src/Entity/Enum/OccupantLink.php @@ -2,8 +2,12 @@ namespace App\Entity\Enum; +use App\Entity\Behaviour\EnumTrait; + enum OccupantLink: string { + use EnumTrait; + case PROCHE = 'PROCHE'; case VOISIN = 'VOISIN'; case SECOURS = 'SECOURS'; @@ -11,26 +15,15 @@ enum OccupantLink: string case PRO = 'PRO'; case AUTRE = 'AUTRE'; - public function label(): string - { - return self::getLabelList()[$this->name]; - } - - /** @see SignalementType::LINK_CHOICES legacy */ public static function getLabelList(): array { return [ - 'PROCHE' => 'Proche', - 'VOISIN' => 'Voisin', - 'SECOURS' => 'Services de secours', - 'BAILLEUR' => 'Bailleur', - 'PRO' => 'Pro', - 'AUTRE' => 'Autre', + self::PROCHE->name => 'Proche', + self::VOISIN->name => 'Voisin', + self::SECOURS->name => 'Services de secours', + self::BAILLEUR->name => 'Bailleur', + self::PRO->name => 'Pro', + self::AUTRE->name => 'Autre', ]; } - - public static function names(): array - { - return array_column(self::cases(), 'name'); - } } diff --git a/src/EventListener/ActivityListener.php b/src/EventListener/ActivityListener.php index 0e8c81a5c..e04c2ba83 100755 --- a/src/EventListener/ActivityListener.php +++ b/src/EventListener/ActivityListener.php @@ -221,7 +221,7 @@ private function isUserNotified($user, $entity): bool // - if entity is Suivi: we check that the partner of the user is different from the partner of the user who created the suivi return User::STATUS_ACTIVE === $user->getStatut() && !$user->isSuperAdmin() && !$user->isTerritoryAdmin() - && ($entity instanceof Affectation || $user->getPartner() !== $entity->getCreatedBy()->getPartner()); + && ($entity instanceof Affectation || ($entity->getCreatedBy() && $user->getPartner() !== $entity->getCreatedBy()->getPartner())); } public function preRemove(LifecycleEventArgs $args) diff --git a/src/Form/SignalementType.php b/src/Form/SignalementType.php deleted file mode 100755 index 552bc75c6..000000000 --- a/src/Form/SignalementType.php +++ /dev/null @@ -1,626 +0,0 @@ - 'PROCHE', - 'Professionnel' => 'PROFESSIONNEL', - 'Tuteur / Tutrice' => 'TUTEUR', - 'Voisin / Voisine' => 'VOISIN', - 'Autre' => 'AUTRE', - ]; - - public function buildForm(FormBuilderInterface $builder, array $options): void - { - $signalement = $builder->getData(); - if ($signalement) { - $signalement->setTelOccupant($signalement->getTelOccupantDecoded()); - $signalement->setTelOccupantBis($signalement->getTelOccupantBisDecoded()); - $signalement->setTelProprio($signalement->getTelProprioDecoded()); - $signalement->setTelDeclarant($signalement->getTelDeclarantDecoded()); - } - - $builder - ->add('details', TextareaType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'minlength' => 10, - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Décrivez le ou les problème(s) rencontré(s)', - 'help' => 'Proposer une rapide description du ou des problème(s) en 10 caractères minimum.', - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('isProprioAverti', ChoiceType::class, [ - 'choice_attr' => [ - 'class' => 'fr-radio', - ], - 'choices' => [ - 'Oui' => 1, - 'Non' => 0, - 'Ne sais pas' => '', - ], - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Avez-vous informé le propriétaire ou gestionnaire de ces nuisances ?', - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('nbAdultes', ChoiceType::class, [ - 'attr' => [ - 'class' => 'fr-select', - ], - 'choices' => [1, 2, 3, 4, '4+'], - 'choice_label' => function ($choice, $key, $value) { - if (1 === $choice) { - return $value.' Adulte'; - } elseif ('4+' === $choice) { - return 'Plus de 4 Adultes'; - } - - return $value.' Adultes'; - }, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-select-group', - ], 'label' => "Nombre d'adultes (personnes majeures occupant le logement)", - 'placeholder' => '--- Selectionnez ---', - ]) - ->add('nbEnfantsM6', ChoiceType::class, [ - 'attr' => [ - 'class' => 'fr-select', - ], - 'choices' => ['0', 1, 2, 3, 4, '4+'], - 'choice_label' => function ($choice, $key, $value) { - if (1 === $choice) { - return $value.' Enfant'; - } elseif ('4+' === $choice) { - return 'Plus de 4 Enfants'; - } - - return $value.' Enfants'; - }, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-select-group', - ], 'label' => "Nombre d'enfants de moins de 6 ans", - 'required' => false, - 'placeholder' => '--- Selectionnez ---', - ]) - ->add('nbEnfantsP6', ChoiceType::class, [ - 'attr' => [ - 'class' => 'fr-select', - ], - 'choices' => ['0', 1, 2, 3, 4, '4+'], - 'choice_label' => function ($choice, $key, $value) { - if (1 === $choice) { - return $value.' Enfant'; - } elseif ('4+' === $choice) { - return 'Plus de 4 Enfants'; - } - - return $value.' Enfants'; - }, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-select-group', - ], 'label' => "Nombre d'enfants de plus de 6 ans", - 'required' => false, - 'placeholder' => '--- Selectionnez ---', - ]) - ->add('natureLogement', ChoiceType::class, [ - 'attr' => [ - 'class' => 'fr-select', - ], - 'choices' => [ - 'Maison' => 'maison', - 'Appartement' => 'appartement', - 'Autre' => 'autre', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-select-group', - ], - 'label' => 'Quelle est la nature du logement ?', - 'placeholder' => '--- Selectionnez ---', - ]) - ->add('superficie', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => '^[0-9]*$', - 'maxlength' => '25', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-form-group fr-col-2', - ], - 'label' => 'Quelle est la superficie du logement (en m²) ?', - 'required' => false, - ]) - ->add('isAllocataire', ChoiceType::class, [ - 'choices' => [ - 'CAF' => 'CAF', - 'MSA' => 'MSA', - 'Non' => 0, - 'Ne sais pas' => '', - ], - 'choice_attr' => function ($choice, $key, $value) { - $attr['class'] = 'fr-radio'; - if ('Ne sais pas' === $key || 'Non' === $key) { - $attr['data-fr-toggle-hide'] = 'signalement-num-alloc-bloc'; - } else { - $attr['data-fr-toggle-show'] = 'signalement-num-alloc-bloc'; - } - - return $attr; - }, - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Recevez-vous une allocation logement de la CAF ou de la MSA ?', - 'help' => "Le cas échéant, merci de renseigner votre numéro d'allocataire.", - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - 'required' => false, - 'placeholder' => false, - ]) - ->add('numAllocataire', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '25', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-form-group fr-col-2', - ], - 'label' => "Numéro d'allocataire", - 'help' => "Merci de renseigner votre numéro d'allocataire tel qu'il apparait sur vos documents.", - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - 'required' => false, - ]) - ->add('dateNaissanceOccupant', BirthdayType::class, [ - 'input' => 'datetime_immutable', - 'attr' => [ - 'class' => 'fr-input', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-form-group fr-col-2', - ], - 'placeholder' => [ - 'year' => 'Année', - 'month' => 'Mois', - 'day' => 'Jour', - ], - 'label' => 'Date de naissance', - 'help' => 'Merci de préciser la date de naissance de l\'occupant.', - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - 'required' => false, - ]) - ->add('isLogementSocial', ChoiceType::class, [ - 'choices' => [ - 'Oui' => 1, - 'Non' => 0, - 'Ne sais pas' => '', - ], - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Le logement est-il un logement social ?', - 'help' => 'Cette information nous aide à optimiser le temps de traitement de votre signalement.', - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('isPreavisDepart', ChoiceType::class, [ - 'choices' => [ - 'Oui' => 1, - 'Non' => 0, - 'Ne sais pas' => '', - ], - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Avez-vous déposé un préavis de départ pour ce logement ?', - 'help' => 'Cette information nous aide à optimiser le temps de traitement de votre signalement.', - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('isRelogement', ChoiceType::class, [ - 'choices' => [ - 'Oui' => 1, - 'Non' => 0, - 'Ne sais pas' => '', - ], - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Avez-vous fait une demande de relogement ou de logement social ?', - 'help' => 'Cette information nous aide à optimiser le temps de traitement de votre signalement.', - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('nomOccupant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '50', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "Nom de l'occupant", - ]) - ->add('prenomOccupant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '50', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "Prénom de l'occupant", - ]) - ->add('telOccupant', TelType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => self::PATTERN_PHONE_NUMBER, - 'minlength' => '10', - 'maxlength' => '15', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "N° téléphone de l'occupant", - 'required' => false, - ]) - ->add('telOccupantBis', TelType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => self::PATTERN_PHONE_NUMBER, - 'minlength' => '10', - 'maxlength' => '15', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "N° téléphone secondaire de l'occupant", - 'required' => false, - ]) - ->add('mailOccupant', EmailType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '50', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "Courriel de l'occupant", - 'required' => false, - ]) - ->add('adresseOccupant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'data-fr-adresse-autocomplete' => 'true', - 'maxlength' => '100', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Adresse du logement', - 'help' => "Commencez à entrer votre adresse et cliquez sur l'une des suggestions. Si vous ne trouvez pas votre adresse, entrez-la manuellement.", - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('cpOccupant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => '[0-9]{5}', - 'maxlength' => '5', - 'minlength' => '5', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Code postal du logement', - ]) - ->add('villeOccupant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '100', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Ville du logement', - ]) - ->add('etageOccupant', NumberType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => '^(-\d{1,3}|\d{1,3})$', - 'maxlength' => '3', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Etage', - 'required' => false, - ]) - ->add('escalierOccupant', TextType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group', - ], - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '200', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Escalier', - 'required' => false, - ]) - ->add('numAppartOccupant', TextType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group', - ], - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '200', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "N° d'appartement", - 'required' => false, - ]) - ->add('adresseAutreOccupant', TextType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group', - ], - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '200', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Autre (ex: Residence, lieu-dit,...)', - 'required' => false, - ]) - ->add('nomProprio', TextType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group', - ], - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '200', - ], - 'label_attr' => [ - 'class' => 'fr-label required', - ], - 'label' => 'Nom ou raison sociale du propriétaire', - 'required' => true, - ]) - ->add('adresseProprio', TextType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group', - ], - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '200', - 'data-fr-adresse-autocomplete' => 'true', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Adresse du propriétaire', - 'help' => "Commencez à entrer votre adresse et cliquez sur l'une des suggestions. Si vous ne trouvez pas votre adresse, entrez-la manuellement.", - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - 'required' => false, - ]) - ->add('telProprio', TelType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group fr-mt-2w', - ], - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => self::PATTERN_PHONE_NUMBER, - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'N° de téléphone du propriétaire', - 'required' => false, - ]) - ->add('mailProprio', EmailType::class, [ - 'row_attr' => [ - 'class' => 'fr-input-group', - ], - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '200', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Courriel du propriétaire', - 'required' => false, - ]) - ->add('isNotOccupant', ChoiceType::class, [ - 'choice_attr' => function ($choice, $key, $value) { - $attr['class'] = 'fr-radio'; - 'Oui' === $key ? - $attr = [ - 'data-fr-toggle-hide' => 'signalement-pas-occupant|signalement-consentement-tiers-bloc', - 'data-fr-toggle-show' => 'signalement-occupant|signalement-infos-proprio|signalement-consentement-tiers-bloc', - 'data-fr-toggle-unrequire' => 'signalement_telOccupantBis|signalement-consentement-tiers|signalement_adresseProprio|signalement_telProprio|signalement_mailProprio|signalement_etageOccupant|signalement_escalierOccupant|signalement_numAppartOccupant|signalement_adresseAutreOccupant|signalement_lienDeclarantOccupant_0', - 'data-fr-toggle-require' => 'signalement_mailOccupant|signalement_telOccupant', - ] - : - $attr = [ - 'data-fr-toggle-show' => 'signalement-consentement-tiers-bloc|signalement-occupant|signalement-pas-occupant|signalement-infos-proprio', - 'data-fr-toggle-unrequire' => 'signalement_telOccupantBis|signalement_adresseProprio|signalement_telProprio|signalement_mailProprio|signalement_nomProprio|signalement_structureDeclarant|signalement_mailOccupant|signalement_telOccupant|signalement_etageOccupant|signalement_escalierOccupant|signalement_numAppartOccupant|signalement_adresseAutreOccupant', - ]; - - return $attr; - }, - 'choices' => [ - 'Oui' => 0, - 'Non' => 1, - ], - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "Êtes-vous l'occupant du logement ?", - 'help' => "Si vous déposez ce signalement pour le compte de quelqu'un d'autre, merci de nous le faire savoir.", - 'help_attr' => [ - 'class' => 'fr-hint-text', - ], - ]) - ->add('nomDeclarant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '50', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Nom déclarant', - 'required' => false, - ]) - ->add('prenomDeclarant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '50', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Prénom déclarant', - 'required' => false, - ]) - ->add('telDeclarant', TelType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'pattern' => self::PATTERN_PHONE_NUMBER, - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'N° de téléphone déclarant', - 'required' => false, - ]) - ->add('mailDeclarant', EmailType::class, [ - 'attr' => [ - 'class' => 'fr-input fr-fi-mail-line fr-input-wrap', - 'maxlength' => '200', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Courriel déclarant', - 'required' => false, - ]) - ->add('lienDeclarantOccupant', ChoiceType::class, [ - 'choices' => self::LINK_CHOICES, - 'expanded' => true, - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => "Lien avec l'occupant", - 'required' => false, - 'placeholder' => false, - ]) - ->add('structureDeclarant', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - 'maxlength' => '50', - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'row_attr' => [ - 'class' => 'fr-form-group', - ], - 'label' => 'Structure déclarant', - 'required' => false, - ]); - - $builder->get('etageOccupant') - ->addModelTransformer(new CallbackTransformer( - function ($currentEtage): ?int { - return $currentEtage ? EtageParser::parse($currentEtage) : null; - }, - function ($updtatedEtage): ?string { - return $updtatedEtage; - } - )); - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => Signalement::class, - 'allow_file_upload' => true, - 'allow_extra_fields' => true, - 'attr' => [ - 'class' => 'needs-validation', - 'novalidate' => true, - ], - ]); - } -} diff --git a/src/Form/SituationType.php b/src/Form/SituationType.php deleted file mode 100755 index 9865bd657..000000000 --- a/src/Form/SituationType.php +++ /dev/null @@ -1,46 +0,0 @@ -add('label', TextType::class, [ - 'attr' => [ - 'class' => 'fr-input', - ], - ]) - ->add('isActive', ChoiceType::class, [ - 'row_attr' => [ - 'class' => 'fr-select-group', - ], 'attr' => [ - 'class' => 'fr-select', - ], - 'choices' => [ - 'Active' => 1, - 'Desactivée' => 0, - ], - 'label_attr' => [ - 'class' => 'fr-label', - ], - 'label' => 'Active', - ]); - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => Situation::class, - 'allow_extra_fields' => true, - ]); - } -} diff --git a/src/Security/Voter/FileVoter.php b/src/Security/Voter/FileVoter.php index ab763a337..0ff8e3710 100755 --- a/src/Security/Voter/FileVoter.php +++ b/src/Security/Voter/FileVoter.php @@ -69,7 +69,6 @@ private function canView(bool|Signalement $subject, ?User $user = null): bool private function canEdit(File $file, User $user): bool { return $this->canCreate($file->getSignalement(), $user) - && $this->parameterBag->get('feature_new_form') && $this->parameterBag->get('feature_documents_enable') && ( $this->isFileUploadedByUser($file, $user) diff --git a/src/Security/Voter/UserVoter.php b/src/Security/Voter/UserVoter.php index 8e502ca7f..d588bbe88 100755 --- a/src/Security/Voter/UserVoter.php +++ b/src/Security/Voter/UserVoter.php @@ -93,16 +93,7 @@ private function canTransfer(User $subject, User $user): bool public function canSeeNde(User $user): bool { - $experimentationTerritories = $this->parameterBag->get('experimentation_territory'); - $isExperimentationTerritory = \array_key_exists( - $user->getPartner()->getTerritory()->getZip(), - $experimentationTerritories - ); - if ($isExperimentationTerritory || $this->parameterBag->get('feature_new_form')) { - return $user->isTerritoryAdmin() + return $user->isTerritoryAdmin() || \in_array(Qualification::NON_DECENCE_ENERGETIQUE, $user->getPartner()->getCompetence()); - } - - return false; } } diff --git a/templates/_partials/_modal_cgu.html.twig b/templates/_partials/_modal_cgu.html.twig deleted file mode 100755 index 3ae921f1f..000000000 --- a/templates/_partials/_modal_cgu.html.twig +++ /dev/null @@ -1,37 +0,0 @@ - -
-
-
-
-
- -
-
-

Conditions Générales - d'Utilisation

-
-
-
- {{ block("body", "front/cgu_usagers.html.twig") }} -
-
-
-
- -
-
-
-
-
diff --git a/templates/_partials/_signalement_step_avantpropos.html.twig b/templates/_partials/_signalement_step_avantpropos.html.twig deleted file mode 100755 index e1cf63b4f..000000000 --- a/templates/_partials/_signalement_step_avantpropos.html.twig +++ /dev/null @@ -1,187 +0,0 @@ -
-

Avant de commencer

-

- Vous allez pouvoir signaler votre problème de logement. - Après cette page, cela vous prendra environ 20 minutes. - Avant de commencer, lisez bien les conseils ci-dessous. -

-
- -

Comment signaler mon problème de logement ?

- -

- Pour déposer votre signalement, il faut remplir toutes les étapes du formulaire et répondre à des questions sur : -

- - Pour répondre à toutes les questions, préparez : - - -
-

Un signalement complet permet une meilleure prise en charge de votre dossier !

-
- -
- -

J'ai un problème de logement : qu'est-ce qui m'attend ?

- Cliquez sur les questions pour voir les réponses ! - -
-

- -

-
- {{ platform.name }} permet de signaler les logements non décents. -
- Un logement est décent s’il remplit toutes les conditions suivantes : - - - Si votre logement ne respecte pas un ou plusieurs critères ou si vous avez un doute, - déposez votre signalement sur {{ platform.name }} ! - -
-
-

- L’entretien courant du logement est de votre responsabilité. - Veillez à garder votre logement propre et ne pas casser ni abîmer les équipements. - Contactez également votre assureur pour savoir si votre problème peut être pris en charge - par l'assurance habitation. -

-
-
-
-
-

- -

-
- Non. -
- C’est très important ! Même si votre logement est indécent, vous n’avez pas le droit d’arrêter - de payer votre loyer ou une partie. -
- Si vous êtes allocataire, la CAF ou la MSA pourra par contre arrêter de - verser l’allocation logement à votre propriétaire. De votre côté, - vous devez continuer de payer votre loyer quoiqu’il arrive ! -
-
-
-

- -

-
- Non. -
- Ce n’est pas obligatoire pour déposer un signalement, mais c’est recommandé ! -
- Il est recommandé de prévenir votre propriétaire, bailleur ou agence immobilière par écrit. - Le meilleur moyen est d’envoyer une lettre recommandée. - Cette lettre doit contenir une description des problèmes dans votre logement - et doit informer votre propriétaire qu’il a 2 mois pour vous répondre et commencer les travaux. -
-

- Pour vous aider, vous pouvez - - consulter un modèle de lettre en cliquant ici - . -

-
-
-
-
-

- -

-
- Une fois votre signalement déposé, voici les grandes étapes : -
-
    -
  1. Vous recevrez un email de confirmation avec un lien vers une page pour suivre votre dossier
  2. -
  3. Un agent valide votre signalement et le qualifie. Nous déterminons à quelle procédure correspond votre situation parmi quatre procédures : la non décence, l'infraction au RSD (règlement sanitaire départemental), l'insalubrité et le péril.
  4. -
  5. Une visite sera programmée par le service compétent pour confirmer l’état de votre logement
  6. -
  7. Suite au rapport de visite, des mesures seront prises auprès de votre propriétaire pour améliorer votre logement, en fonction de la procédure !
  8. -
-
-

- Gardez bien votre email de confirmation : - il contient le lien vers votre page de suivi. Tout au long de la procédure, - la page de suivi vous permettra de suivre l’avancement de votre dossier et de compléter vos informations. -

-
-
-
-
-

- -

-
- Les services publics en charge de votre dossier. -
- En déposant un signalement sur {{ platform.name }}, les acteurs publics compétents pouvant - vous aider à trouver une solution auront accès à votre signalement. Les services sont variés : - l’ADIL, la mairie de votre commune, la CAF, l’agence régionale de santé… -
- En fonction des types de problèmes dans votre logement, différents services peuvent être en charge de votre dossier. -
-
-
-

- -

-
- Oui. -
- Si votre logement est indécent, le propriétaire est obligé de faire les travaux pour régler les problèmes. - Il sera donc prévenu par les services compétents. -
-
-
-

- -

-
- Non. -
- L’objectif du service {{ platform.name }} et de (re)mettre votre logement aux normes. - Ce n’est pas un service de relogement ou de demande de logement social. -
-
- -
-
-
- -
-
-
-

\ No newline at end of file diff --git a/templates/_partials/_signalement_step_nde.html.twig b/templates/_partials/_signalement_step_nde.html.twig deleted file mode 100755 index 2606c7301..000000000 --- a/templates/_partials/_signalement_step_nde.html.twig +++ /dev/null @@ -1,228 +0,0 @@ -
-

Consommation d'énergie

-

- Vous avez sélectionné des désordres concernant le chauffage et / ou la consommation - d'énergie de votre logement. Depuis le 1er janvier 2023, la législation concernant - la consommation d'énergie a évolué ! En effet, les logements consommant le plus - d'énergie peuvent être qualifiés de "non décents". Répondez aux questions suivantes - pour savoir si votre logement est concerné et nous permettre de vous accompagner au mieux ! -

- - Les champs marqués d'un astérisque (*) sont obligatoires. - -
- -
-
-
- - - -
-
- - -
-
- - -
-
-

- Veuillez préciser la date d'entrée. -

-
- -
- - - -
-
- - -
-
- - -
-
- - -
-
-

- Veuillez préciser la date de renouvellement de bail. -

-
- -
- - - -
-
- - -
-
- - -
-
- - -
-
-

- Veuillez préciser si vous disposez d'un DPE. -

-
- -
- - - -
-
- - -
-
- - -
-
-

- Veuillez préciser la date de votre DPE. -

-
- - -
-
-
-
-
- -
-
-

- Trouver les informations sur votre DPE -

-

- Sur la première page de votre DPE, cherchez la consommation d'énergie primaire, - indiquée en kWh/m²/an. Le nombre est situé sur la première page, à côté de l'indice performance - du logement (une lettre de A à G). -

-
-
-
-
-
-
- -
- - - - -
- - - -
-

- Veuillez préciser votre consommation énergétique avec un nombre entier -

-
- - -
-
-
-
-
- -
-
-

- Trouver les informations sur votre DPE -

-

- Vous devez récupérer deux informations sur votre DPE : -
-

    -
  • - La surface habitable de votre logement, indiquée en m² -
  • -
  • - La consommation en énergie finale de votre logement, - indiquée en kWh avec la mention "é.f" (kWhef ou kWhef/an ou kWh é.f.) -
  • -
-

-
-
-
-
-
-
- -
- - - - -
- - - - - - - -
-

- Veuillez préciser votre consommation énergétique avec un nombre entier -

-
- -

- La consommation d'énergie finale de votre logement est de kWh/m²/an. -

- -

- Votre logement n'est pas concerné par les changements de législation concernant la consommation énergétique. - Cliquez sur le bouton "Continuer" pour compléter votre signalement sur {{ platform.name }} ! -

- -

- Il nous manque des informations pour déterminer la consommation énergétique de votre logement ! - Ces informations pourront vous être demandées plus tard. -
- Cliquez sur le bouton "Continuer" pour compléter votre signalement et le déposer sur {{ platform.name }}. -

- -

- D'après les informations renseignées, votre logement n'est pas concerné par la non décence énergétique. - Cliquez sur le bouton "Continuer" pour compléter votre signalement et le déposer sur {{ platform.name }}. -

- -

- D'après les informations renseignées, votre logement est en situation de non décence énergétique. - Vous allez bénéficier d'un accompagnement spécifique sur les problèmes de consommation énergétique dans votre logement. - Cliquez sur le bouton "Continuer" pour compléter votre signalement et le déposer sur {{ platform.name }} ! -

- -
-
- -
-
-
-
diff --git a/templates/_partials/_signalement_steps_tabs.html.twig b/templates/_partials/_signalement_steps_tabs.html.twig deleted file mode 100755 index 74d823540..000000000 --- a/templates/_partials/_signalement_steps_tabs.html.twig +++ /dev/null @@ -1,888 +0,0 @@ -
- - - {% if 'back_' not in app.request.get('_route') %} -
- {% include '_partials/_signalement_step_avantpropos.html.twig' %} -
- {% endif %} -
- {% if 'back_' not in app.request.get('_route') %} -
-

Je renseigne mes coordonnées

-

- Pour traiter votre demande, nous avons besoin de vos coordonnées. -

- Les champs marqués d'un - astérisque - (*) sont obligatoires. -
- {% endif %} -
- -
-
- - {{ form_label(form.isNotOccupant) }} - {{ form_help(form.isNotOccupant) }} - -
- {% for key, choice in form.isNotOccupant.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser si vous êtes l'occupant du logement. -

-
-
-
-
- - Informations concernant le déclarant - Vous déposez pour le compte de quelqu'un d'autre - -
-
-
- {{ form_label(form.nomDeclarant) }} - {% if 'back_' not in app.request.get('_route') %} - {{ form_widget(form.nomDeclarant,{attr:{value:app.user ? app.user.nom : ''}}) }} - {% else %} - {{ form_widget(form.nomDeclarant) }} - {% endif %} -

- Veuillez renseigner votre nom. -

-
-
-
-
- {{ form_label(form.prenomDeclarant) }} - {% if 'back_' not in app.request.get('_route') %} - {{ form_widget(form.prenomDeclarant,{attr:{value:app.user ? app.user.prenom : ''}}) }} - {% else %} - {{ form_widget(form.prenomDeclarant) }} - {% endif %} -

- Veuillez renseigner votre prénom. -

-
-
-
-
- {{ form_label(form.telDeclarant) }} - {{ form_widget(form.telDeclarant) }} -

- Veuillez renseigner votre numéro de téléphone. -

-
-
-
-
- {{ form_label(form.mailDeclarant) }} - {% if 'back_' not in app.request.get('_route') %} - {{ form_widget(form.mailDeclarant,{attr:{value:app.user ? app.user.email : ''}}) }} - {% else %} - {{ form_widget(form.mailDeclarant) }} - {% endif %} -

- Veuillez renseigner votre adresse courriel -

-
-
-
-
-
-
- - {{ form_label(form.lienDeclarantOccupant) }} - -
- {% for key, choice in form.lienDeclarantOccupant.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser votre lien avec l'occupant. -

-
-
-
- {{ form_label(form.structureDeclarant) }} - {% if 'back_' not in app.request.get('_route') %} - {{ form_widget(form.structureDeclarant,{attr:{value:app.user ? app.user.partner.nom : ''}}) }} - {% else %} - {{ form_widget(form.structureDeclarant) }} - {% endif %} -
-
-
-
- - Informations concernant l'occupant - Ces informations sont nécessaires au suivi de votre signalement, merci de bien vérifier votre saisie. - -
-
-
- {{ form_label(form.nomOccupant) }} - {{ form_widget(form.nomOccupant) }} -

- Veuillez renseigner votre nom. -

-
-
-
-
- {{ form_label(form.prenomOccupant) }} - {{ form_widget(form.prenomOccupant) }} -

- Veuillez renseigner votre prénom. -

-
-
-
-
- {{ form_label(form.telOccupant) }} - {{ form_widget(form.telOccupant) }} -

- Veuillez renseigner au moins un numéro de téléphone. -

-
-
-
-
- {{ form_label(form.telOccupantBis) }} - {{ form_widget(form.telOccupantBis) }} -
-
-
-
- {{ form_label(form.mailOccupant) }} - {{ form_widget(form.mailOccupant) }} -

- Veuillez renseigner votre adresse courriel -

-
-
-
-
-
-
- {{ form_label(form.adresseOccupant) }} - {{ form_help(form.adresseOccupant) }} - {{ form_widget(form.adresseOccupant) }} -
-
-

- Veuillez renseigner l'adresse du logement. -

-

- Il n'est pas encore possible de déposer un signalement sur cette commune. -

-
-
- {{ form_label(form.cpOccupant) }} - {{ form_widget(form.cpOccupant) }} -

- Veuillez renseigner le code postal a 5 chiffres du logement (ex: 75000). -

-

- Il n'est pas encore possible de déposer un signalement sur ce code postal. -

-
-
- {{ form_label(form.villeOccupant) }} - {{ form_widget(form.villeOccupant) }} -

- Veuillez renseigner la ville du logement -

-
- {% if 'back_' in app.request.get('_route') %} - {% set attr = 'type=text class=fr-input' %} - {% set attr_label = 'class=fr-label' %} - {% else %} - {% set attr = 'class=fr-hidden type="hidden"' %} - {% set attr_label = 'class=fr-hidden' %} - {% endif %} - - - - - - -
-
- - Complément d'adresse - -
-
- {{ form_label(form.etageOccupant) }} - {{ form_widget(form.etageOccupant) }} -

Saisissez 0 pour le rez-de-chaussée (RDC), 1 pour le premier étage, -1 pour le sous-sol, etc.

-

- Veuillez saisir 0 pour le rez-de-chaussée (RDC), 1 pour le premier étage, -1 pour le sous-sol, etc. -

-
- {{ form_row(form.escalierOccupant) }} - {{ form_row(form.numAppartOccupant) }} - {{ form_row(form.adresseAutreOccupant) }} -
-
-
-
-
- - Informations du propriétaire ou gestionnaire bailleur - Si vous disposez des informations suivantes concernant le propriétaire, merci de les renseigner. - -
-
- {{ form_label(form.nomProprio) }} - {% if 'back_' not in app.request.get('_route') %} - {{ form_widget(form.nomProprio) }} - {% else %} - {{ form_widget(form.nomProprio,{required:false}) }} - {% endif %} -

- Merci de renseigner le nom ou la raison sociale du propriétaire du logement. -

-
- {{ form_label(form.adresseProprio) }} - {{ form_help(form.adresseProprio) }} - {{ form_widget(form.adresseProprio) }} -
-
- {{ form_row(form.telProprio) }} - {{ form_row(form.mailProprio) }} -
-
-
-
-
- -
-
-
-
-
- {% if 'back_' not in app.request.get('_route') %} -
-

Signaler un problème dans votre logement

-

- Sélectionnez le ou les problèmes que vous rencontrez et indiquez la gravité. -

- Vous pouvez en - selectionner - plusieurs -
- {% endif %} -
- -
    - {% for situation in situations %} -
  • -
    -

    - Votre - signalement - concerne-t-il {{ situation.label }} - -

    -
    -
      - {% for critere in situation.criteres %} -
      - - -
      -
      - {% for index,criticite in critere.criticites %} - {% if not criticite.isArchive %} -
      - - -
      - - -
      -
      - {% endif %} - {% endfor %} -

      Vous devez sélectioner un état - pour cette situation

      -
      - {% endfor %} -
    -
    -
    -
  • - {% endfor %} -
-
-
- -
-
-
-
- -
-
-

Je donne des détails sur les problèmes rencontrés

-

- Décrivez ici en détails le problème rencontré dans votre logement. Vous pouvez ajouter des - documents - et photos. -

- Les champs marqués - d'un - astérisque - (*) sont obligatoires. -
-
-
- {{ form_label(form.details) }} - {{ form_help(form.details) }} - {{ form_widget(form.details) }} -

- Merci de proposer une rapide description (minimum 10 caractères). -

-
- {% if 'back_' not in app.request.get('_route') %} - {% include '_partials/_signalement_upload.html.twig' %} - {% endif %} -
-
- -
-
-
-
- -
- {% include '_partials/_signalement_step_nde.html.twig' %} -
- -
- {% if 'back_' not in app.request.get('_route') %} -
-

Je donne des informations sur mon logement

-

- Pour continuer, nous avons besoin d'informations complémentaires sur votre logement. -

- Les champs marqués d'un - astérisque - (*) sont obligatoires. -
- {% endif %} -
-
-
- - {{ form_label(form.isProprioAverti) }} - {{ form_help(form.isProprioAverti) }} - -
- {% for key, choice in form.isProprioAverti.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser si vous avez pris contact. -

-
-
-
-
- - Qui habite ce logement ?* - Indiquer la composition du logement en précisant le nombre d'enfants. - -
-
- {{ form_label(form.nbAdultes) }} - {{ form_widget(form.nbAdultes) }} -

- Veuillez renseigner le nombre d'adultes dans le logement. -

-
- {{ form_row(form.nbEnfantsM6) }} - {{ form_row(form.nbEnfantsP6) }} -
-
-
-
-
- - {{ form_label(form.natureLogement) }} - -
-
- {{ form_widget(form.natureLogement) }} -

- Veuillez renseigner la nature du logement. -

-
-
-
-
-
-
- - {{ form_label(form.superficie) }} - -
-
- {{ form_widget(form.superficie) }} -

- Veuillez saisir la superficie du logement au format numérique. -

-
-
-
-
-
-
- - {{ form_label(form.isAllocataire) }} - {{ form_help(form.isAllocataire) }} - -
- {% for key, choice in form.isAllocataire.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser si vous êtes allocataire -

-
-
-
- {{ form_label(form.numAllocataire) }} - {{ form_help(form.numAllocataire) }} - {{ form_widget(form.numAllocataire) }} -

- Veuillez préciser votre numéro d'allocataire -

-
-
-
-
- - Date de naissance - * - - {{ form_help(form.dateNaissanceOccupant) }} - {{ form_widget(form.dateNaissanceOccupant) }} -

- Veuillez préciser votre date de naissance. -

-
-
-
-
-
- - {{ form_label(form.isLogementSocial) }} - {{ form_help(form.isLogementSocial) }} - -
- {% for key, choice in form.isLogementSocial.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser si le logement est un logement social ou non. -

-
-
-
-
- - {{ form_label(form.isPreavisDepart) }} - {{ form_help(form.isPreavisDepart) }} - -
- {% for key, choice in form.isPreavisDepart.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser si vous avez déposé un préavis de départ. -

-
-
-
-
- - {{ form_label(form.isRelogement) }} - {{ form_help(form.isRelogement) }} - -
- {% for key, choice in form.isRelogement.children %} -
- {{ form_widget(choice) }} - {{ form_label(choice) }} -
- {% endfor %} -
-

- Veuillez préciser si vous avez fait une demande de relogement. -

-
-
-
-
- {% if 'back_' not in app.request.get('_route') %} - - {% else %} - - {% endif %} -
-
-
-
- -
-
-

Je valide mon signalement

-

- Vérifiez les informations ci-dessous. -

- Acceptez les conditions - d'utilisation du service et validez votre signalement. -
-
-
-
    -
  • - Coordonnées - - -

    -
    -
    - -

    -
  • -
-
-
-
    -
  • - Adresse du logement - - -

    - -
    - -
    - Etage
    - Escalier
    - Appartement
    -
    -

    -
  • -
-
-
-
    -
  • - Composition du logement - - -

    - Adulte(s)
    - Enfant(s) de moins de 6 ans
    - Enfant(s) de plus de 6 ans
    -

    -
  • -
-
-
-
    -
  • - Problème(s) signalé(s) - - -

    - -

    -
  • -
-
-
-
    -
  • - Description du ou des problème(s) - - -

    - -

    -
  • -
-
-
-
    -
  • - Document(s) et photo(s) transmis - - -

    - - -

    -
  • -
-
-
-
    -
  • - Consommation énergétique - - -
  • Situation : à vérifier
  • -
  • DPE : à renseigner
  • -
  • Bail : à renseigner
  • -
  • Consommation : non calculée
  • - -
  • Situation : non décence énergétique
  • -
  • DPE : Non
  • - -
  • Situation : décence énergétique OK
  • -
  • Situation : non décence énergétique
  • -
  • - DPE : - Avant - 2023 -
  • -
  • Bail : 2023
  • -
  • - Consommation : - - kWh/m²/an -
  • - -
-
-
-
-
-
- - -

- Pour déposer un signalement au nom d'une tierce personne vous devez en avoir - l'autorisation. -

-
-
-
-
- - -

- Vous devez accepter l'autorisation de visite pour transmettre votre signalement. -

-
-
-
-
- - -

- Vous devez accepter les Conditions Générales d'Utilisation pour transmettre votre signalement. -

-
-
-
-
- -
-
-
-
- -
-
- {% if 'back_' not in app.request.get('_route') %} - - {% else %} - {{ form_widget(form._token) }} - {% endif %} -
-
-
diff --git a/templates/_partials/_signalement_upload.html.twig b/templates/_partials/_signalement_upload.html.twig index 9689a574d..f56fabe38 100755 --- a/templates/_partials/_signalement_upload.html.twig +++ b/templates/_partials/_signalement_upload.html.twig @@ -1,3 +1,4 @@ +{% include '_partials/_modal_pictures_restrictions.html.twig' %}
Joindre des photos du/des problème(s) diff --git a/templates/back/signalement/edit.html.twig b/templates/back/signalement/edit.html.twig deleted file mode 100755 index 5d5ff255a..000000000 --- a/templates/back/signalement/edit.html.twig +++ /dev/null @@ -1,27 +0,0 @@ -{% extends 'back/base_bo.html.twig' %} - -{% block content %} -
-
-
-
-

Edition signalement #{{ signalement.reference }}

- {% if signalement.isNotOccupant %} -   - Signalement par un tiers - {% else %} -   - Signalement par l'occupant - {% endif %} - Déposé le: {{ signalement.createdAt|format_datetime(locale='fr') }} -
-
- Retour -
-
-
-
- {% include '_partials/_signalement_steps_tabs.html.twig' %} -
-{% endblock %} \ No newline at end of file diff --git a/templates/back/signalement/view/address-qualifications.html.twig b/templates/back/signalement/view/address-qualifications.html.twig index 5ce457d86..f2f4223a1 100755 --- a/templates/back/signalement/view/address-qualifications.html.twig +++ b/templates/back/signalement/view/address-qualifications.html.twig @@ -1,11 +1,11 @@
- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} {% include 'back/signalement/view/edit-modals/edit-address.html.twig' %} {% endif %}

Adresse du logement - {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier diff --git a/templates/back/signalement/view/information.html.twig b/templates/back/signalement/view/information.html.twig index 1cc2c1f70..ff83402a9 100644 --- a/templates/back/signalement/view/information.html.twig +++ b/templates/back/signalement/view/information.html.twig @@ -9,18 +9,14 @@ data-dpe-url="https://koumoul.com/data-fair/api/v1/datasets/dpe-france/values_agg?field=code_insee_commune_actualise&format=json&agg_size=20&q_mode=simple&geo_adresse_in={{ (signalement.adresseOccupant~' '~signalement.cpOccupant~' '~signalement.villeOccupant)|replace({' ':' '})|url_encode }}&size=100&select=%2A&sampling=neighbors"> Consulter le(s) DPE - {% if not isNewFormEnabled and canEditSignalement %} - Modifier les infos - {% endif %}

{% if signalement.isNotOccupant %} - {% if isNewFormEnabled and canEditSignalement %} - {% include 'back/signalement/view/edit-modals/edit-coordonnees-tiers.html.twig' %} + {% if canEditSignalement %} + {% include 'back/signalement/view/edit-modals/edit-coordonnees-tiers.html.twig' %} {% endif %}
@@ -29,7 +25,7 @@

Coordonnées du tiers déclarant

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
@@ -73,7 +69,7 @@ {% endif %}
- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} {% include 'back/signalement/view/edit-modals/edit-coordonnees-foyer.html.twig' %} {% endif %}
@@ -82,7 +78,7 @@

Coordonnées du foyer

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
@@ -129,7 +125,7 @@ {% if not signalement.profileDeclarant or (signalement.profileDeclarant is not same as enum('App\\Entity\\Enum\\ProfileDeclarant').BAILLEUR_OCCUPANT and signalement.profileDeclarant is not same as enum('App\\Entity\\Enum\\ProfileDeclarant').BAILLEUR) %}
- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} {% include 'back/signalement/view/edit-modals/edit-coordonnees-bailleur.html.twig' %} {% endif %}
@@ -138,7 +134,7 @@

Informations sur le bailleur

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
@@ -211,8 +207,8 @@ {% endif %}
- {% if isNewFormEnabled and canEditSignalement %} - {% include 'back/signalement/view/edit-modals/edit-informations-logement.html.twig' %} + {% if canEditSignalement %} + {% include 'back/signalement/view/edit-modals/edit-informations-logement.html.twig' %} {% endif %}
@@ -220,7 +216,7 @@

Informations sur le logement

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
@@ -332,8 +328,8 @@
- {% if isNewFormEnabled and canEditSignalement %} - {% include 'back/signalement/view/edit-modals/edit-composition-logement.html.twig' %} + {% if canEditSignalement %} + {% include 'back/signalement/view/edit-modals/edit-composition-logement.html.twig' %} {% endif %}
@@ -341,7 +337,7 @@

Composition du logement

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
@@ -497,8 +493,8 @@
- {% if isNewFormEnabled and canEditSignalement %} - {% include 'back/signalement/view/edit-modals/edit-situation-foyer.html.twig' %} + {% if canEditSignalement %} + {% include 'back/signalement/view/edit-modals/edit-situation-foyer.html.twig' %} {% endif %}
@@ -506,7 +502,7 @@

Situation du foyer

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
@@ -638,8 +634,8 @@
- {% if isNewFormEnabled and canEditSignalement %} - {% include 'back/signalement/view/edit-modals/edit-procedure-demarches.html.twig' %} + {% if canEditSignalement %} + {% include 'back/signalement/view/edit-modals/edit-procedure-demarches.html.twig' %} {% endif %}
@@ -647,7 +643,7 @@

Procédure et démarches

- {% if isNewFormEnabled and canEditSignalement %} + {% if canEditSignalement %} Modifier {% endif %}
diff --git a/templates/back/table_result.html.twig b/templates/back/table_result.html.twig index b24377c41..ed677c7aa 100755 --- a/templates/back/table_result.html.twig +++ b/templates/back/table_result.html.twig @@ -68,10 +68,6 @@ - {% if not isNewFormEnabled and signalement.statut is same as(2) %} - - {% endif %} {% if is_granted('ROLE_ADMIN_TERRITORY') %}