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 @@
-
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 @@
-
- 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. -
-- Pour déposer votre signalement, il faut remplir toutes les étapes du formulaire et répondre à des questions sur : -
Un signalement complet permet une meilleure prise en charge de votre dossier !
-- 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. -
-- Pour vous aider, vous pouvez - - consulter un modèle de lettre en cliquant ici - . -
-- 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. -
-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. - -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. -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 -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. -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. -Je valide mon signalement
-- Vérifiez les informations ci-dessous. -
- Acceptez les conditions - d'utilisation du service et validez votre signalement. -
-
-
-
-
-
-
-
-
- Etage
- Escalier
- Appartement
-
-
- Adulte(s)
- Enfant(s) de moins de 6 ans
- Enfant(s) de plus de 6 ans
-
- -
-- -
-- - -
-