fusion maj parcelle,batiment,ulo et leur enquete
All checks were successful
CI - Build & Test (develop) / build-and-test (pull_request) Successful in 35s

This commit is contained in:
2026-03-23 20:53:45 +01:00
parent 77671bfb90
commit 5f2686ed7b
6 changed files with 257 additions and 108 deletions

View File

@@ -136,6 +136,7 @@ public class SecteurDecoupageServiceImpl implements SecteurDecoupageService {
.map(Secteur::getId)
.toList();
System.out.println(statutEnquete);
System.out.println(secteurIds);
return enqueteBatimentRepository.findStatsEnqueteBatimentBySecteurs(secteurIds,statutEnquete);
}

View File

@@ -551,19 +551,19 @@ BEGIN
CASE WHEN eb.categorie_usage = 'HABITATION'
THEN (p.superficie * v_taux_defaut_sup_sol / 100.0) * brb.valeur_locative
ELSE 0
END,
END,
-- tfu_calcule_taux_prop_parc
CASE WHEN eb.categorie_usage = 'HABITATION'
THEN (p.superficie * v_taux_defaut_sup_sol / 100.0) * brb.valeur_locative * v_taux_tfu_ratio
ELSE 0
END,
END,
-- valeur_locative_adm_sup_reel
CASE WHEN eb.categorie_usage = 'HABITATION'
THEN eb.superficie_au_sol * brb.valeur_locative
ELSE 0
END,
END,
-- ---------------------------------------------------------------
-- 🔧 CORRECTION : valeur_locative_adm avec tests explicites
@@ -597,13 +597,13 @@ BEGIN
NULLIF(eb.montant_locatif_annuel_estime, 0), 0)
ELSE 0
END,
END,
-- tfu_superficie_au_sol_reel
CASE WHEN eb.categorie_usage = 'HABITATION'
THEN eb.superficie_au_sol * brb.valeur_locative * v_taux_tfu_ratio
THEN eb.superficie_au_sol * brb.valeur_locative * v_taux_tfu_ratio * eb.nombre_piscine * v_tfu_piscine_unitaire
ELSE 0
END,
END,
-- tfu_piscine
eb.nombre_piscine * v_tfu_piscine_unitaire,
@@ -654,14 +654,12 @@ BEGIN
END
FROM calc
),
v_taux_tfu,
p.id,
b.id,
NULL,
ep.personne_id
FROM parcelle p
-- Dernière enquête parcelle
LEFT JOIN LATERAL (
SELECT

View File

@@ -256,46 +256,95 @@ public interface EnqueteRepository extends JpaRepository<Enquete, Long> {
List<Enquete> findAllByParcelle_Id(Long parcelleId);
// @Query(
// value = """
// SELECT DISTINCT
// d.id AS departement_id,
// d.code AS departement_code,
// d.nom AS departement_nom,
// COUNT(e.id) OVER (PARTITION BY d.id) AS nb_enquetes_departement,
//
// c.id AS commune_id,
// c.code AS commune_code,
// c.nom AS commune_nom,
// COUNT(e.id) OVER (PARTITION BY c.id) AS nb_enquetes_commune,
//
// a.id AS arrondissement_id,
// a.code AS arrondissement_code,
// a.nom AS arrondissement_nom,
// COUNT(e.id) OVER (PARTITION BY a.id) AS nb_enquetes_arrondissement,
//
// q.id AS quartier_id,
// q.code AS quartier_code,
// q.nom AS quartier_nom,
// COUNT(e.id) OVER (PARTITION BY q.id) AS nb_enquetes_quartier
//
// FROM enquete e
// JOIN parcelle p ON p.id = e.parcelle_id
// JOIN quartier q ON q.id = p.quartier_id
// JOIN arrondissement a ON a.id = q.arrondissement_id
// JOIN commune c ON c.id = a.commune_id
// JOIN departement d ON d.id = c.departement_id
//
// WHERE EXISTS (
// SELECT 1
// FROM secteur_decoupage sd
// WHERE sd.quartier_id = q.id
// AND sd.secteur_id IN (:secteurIds)
// )
// AND e.statut_enquete = :statutEnqueteParam
//
// ORDER BY d.nom, c.nom, a.nom, q.nom;
// """,
// nativeQuery = true
// )
// List<ParcelleStatsProjectionUnSecteur> findStatsEnqueteBySecteurs(
// @Param("secteurIds") List<Long> secteurIds,
// @Param("statutEnqueteParam") String statutEnqueteParam
// );
@Query(
value = """
SELECT DISTINCT
d.id AS departement_id,
d.code AS departement_code,
d.nom AS departement_nom,
COUNT(e.id) OVER (PARTITION BY d.id) AS nb_enquetes_departement,
c.id AS commune_id,
c.code AS commune_code,
c.nom AS commune_nom,
COUNT(e.id) OVER (PARTITION BY c.id) AS nb_enquetes_commune,
a.id AS arrondissement_id,
a.code AS arrondissement_code,
a.nom AS arrondissement_nom,
COUNT(e.id) OVER (PARTITION BY a.id) AS nb_enquetes_arrondissement,
q.id AS quartier_id,
q.code AS quartier_code,
q.nom AS quartier_nom,
COUNT(e.id) OVER (PARTITION BY q.id) AS nb_enquetes_quartier
FROM enquete e
JOIN parcelle p ON p.id = e.parcelle_id
JOIN quartier q ON q.id = p.quartier_id
JOIN arrondissement a ON a.id = q.arrondissement_id
JOIN commune c ON c.id = a.commune_id
JOIN departement d ON d.id = c.departement_id
WHERE EXISTS (
SELECT 1
FROM secteur_decoupage sd
WHERE sd.quartier_id = q.id
AND sd.secteur_id IN (:secteurIds)
)
AND e.statut_enquete = :statutEnqueteParam
ORDER BY d.nom, c.nom, a.nom, q.nom;
""",
SELECT DISTINCT
d.id AS departementId,
d.code AS departementCode,
d.nom AS departementNom,
COUNT(e.id) OVER (PARTITION BY d.id) AS nbParcellesDepartement,
c.id AS communeId,
c.code AS communeCode,
c.nom AS communeNom,
COUNT(e.id) OVER (PARTITION BY c.id) AS nbParcellesCommune,
a.id AS arrondissementId,
a.code AS arrondissementCode,
a.nom AS arrondissementNom,
COUNT(e.id) OVER (PARTITION BY a.id) AS nbParcellesArrondissement,
q.id AS quartierId,
q.code AS quartierCode,
q.nom AS quartierNom,
COUNT(e.id) OVER (PARTITION BY q.id) AS nbParcellesQuartier
FROM quartier q
JOIN arrondissement a ON a.id = q.arrondissement_id
JOIN commune c ON c.id = a.commune_id
JOIN departement d ON d.id = c.departement_id
JOIN parcelle p ON p.quartier_id = q.id
LEFT JOIN enquete e
ON e.parcelle_id = p.id
AND e.statut_enquete = :statutEnqueteParam
WHERE EXISTS (
SELECT 1
FROM secteur_decoupage sd
WHERE sd.quartier_id = q.id
AND sd.secteur_id IN (:secteurIds)
)
ORDER BY d.nom, c.nom, a.nom, q.nom
""",
nativeQuery = true
)
List<ParcelleStatsProjectionUnSecteur> findStatsEnqueteBySecteurs(

View File

@@ -98,22 +98,22 @@ public interface ParcelleRepository extends JpaRepository<Parcelle, Long>, JpaSp
d.id AS departement_id,
d.code AS departement_code,
d.nom AS departement_nom,
COUNT(p.id) OVER (PARTITION BY d.id) AS nb_parcelles_departement,
COUNT(p.id) OVER (PARTITION BY d.id) AS nbParcellesDepartement,
c.id AS commune_id,
c.code AS commune_code,
c.nom AS commune_nom,
COUNT(p.id) OVER (PARTITION BY c.id) AS nb_parcelles_commune,
COUNT(p.id) OVER (PARTITION BY c.id) AS nbParcellesCommune,
a.id AS arrondissement_id,
a.code AS arrondissement_code,
a.nom AS arrondissement_nom,
COUNT(p.id) OVER (PARTITION BY a.id) AS nb_parcelles_arrondissement,
COUNT(p.id) OVER (PARTITION BY a.id) AS nbParcellesArrondissement,
q.id AS quartier_id,
q.code AS quartier_code,
q.nom AS quartier_nom,
COUNT(p.id) OVER (PARTITION BY q.id) AS nb_parcelles_quartier
COUNT(p.id) OVER (PARTITION BY q.id) AS nbParcellesQuartier
FROM quartier q
JOIN arrondissement a ON a.id = q.arrondissement_id

View File

@@ -480,36 +480,89 @@ public interface EnqueteBatimentRepository extends JpaRepository<EnqueteBatiment
);
// @Query(
// value = """
// SELECT DISTINCT
// d.id AS departement_id,
// d.code AS departement_code,
// d.nom AS departement_nom,
// COUNT(eb.id) OVER (PARTITION BY d.id) AS nb_enquetes_departement,
//
// c.id AS commune_id,
// c.code AS commune_code,
// c.nom AS commune_nom,
// COUNT(eb.id) OVER (PARTITION BY c.id) AS nb_enquetes_commune,
//
// a.id AS arrondissement_id,
// a.code AS arrondissement_code,
// a.nom AS arrondissement_nom,
// COUNT(eb.id) OVER (PARTITION BY a.id) AS nb_enquetes_arrondissement,
//
// q.id AS quartier_id,
// q.code AS quartier_code,
// q.nom AS quartier_nom,
// COUNT(eb.id) OVER (PARTITION BY q.id) AS nb_enquetes_quartier
//
// FROM enquete_batiment eb
// JOIN batiment b ON b.id = eb.batiment_id
// JOIN parcelle p ON p.id = b.parcelle_id
// JOIN quartier q ON q.id = p.quartier_id
// JOIN arrondissement a ON a.id = q.arrondissement_id
// JOIN commune c ON c.id = a.commune_id
// JOIN departement d ON d.id = c.departement_id
//
// WHERE EXISTS (
// SELECT 1
// FROM secteur_decoupage sd
// WHERE sd.quartier_id = q.id
// AND sd.secteur_id IN (:secteurIds)
// )
// AND eb.statut_enquete = :statutEnqueteParam
//
// ORDER BY d.nom, c.nom, a.nom, q.nom;
// """,
// nativeQuery = true
// )
// List<ParcelleStatsProjectionUnSecteur> findStatsEnqueteBatimentBySecteurs(
// @Param("secteurIds") List<Long> secteurIds,
// @Param("statutEnqueteParam") String statutEnqueteParam
// );
@Query(
value = """
SELECT DISTINCT
SELECT DISTINCT
d.id AS departement_id,
d.code AS departement_code,
d.nom AS departement_nom,
COUNT(e.id) OVER (PARTITION BY d.id) AS nb_enquetes_departement,
COUNT(eb.id) OVER (PARTITION BY d.id) AS nbParcellesDepartement,
c.id AS commune_id,
c.code AS commune_code,
c.nom AS commune_nom,
COUNT(e.id) OVER (PARTITION BY c.id) AS nb_enquetes_commune,
COUNT(eb.id) OVER (PARTITION BY c.id) AS nbParcellesCommune,
a.id AS arrondissement_id,
a.code AS arrondissement_code,
a.nom AS arrondissement_nom,
COUNT(e.id) OVER (PARTITION BY a.id) AS nb_enquetes_arrondissement,
COUNT(eb.id) OVER (PARTITION BY a.id) AS nbParcellesArrondissement,
q.id AS quartier_id,
q.code AS quartier_code,
q.nom AS quartier_nom,
COUNT(e.id) OVER (PARTITION BY q.id) AS nb_enquetes_quartier
COUNT(eb.id) OVER (PARTITION BY q.id) AS nbParcellesQuartier
FROM enquete_batiment eb
JOIN batiment b ON b.id = eb.batiment_id
JOIN parcelle p ON p.id = b.parcelle_id
JOIN quartier q ON q.id = p.quartier_id
FROM quartier q
JOIN arrondissement a ON a.id = q.arrondissement_id
JOIN commune c ON c.id = a.commune_id
JOIN departement d ON d.id = c.departement_id
JOIN parcelle p ON p.quartier_id = q.id
JOIN batiment b ON b.parcelle_id = p.id
-- LEFT JOIN ici
LEFT JOIN enquete_batiment eb
ON eb.batiment_id = b.id
AND eb.statut_enquete = :statutEnqueteParam
WHERE EXISTS (
SELECT 1
@@ -517,7 +570,6 @@ public interface EnqueteBatimentRepository extends JpaRepository<EnqueteBatiment
WHERE sd.quartier_id = q.id
AND sd.secteur_id IN (:secteurIds)
)
AND e.statut_enquete = :statutEnqueteParam
ORDER BY d.nom, c.nom, a.nom, q.nom;
""",

View File

@@ -602,55 +602,104 @@ public interface EnqueteUniteLogementRepository extends JpaRepository<EnqueteUni
);
@Query(
value = """
SELECT DISTINCT
d.id AS departement_id,
d.code AS departement_code,
d.nom AS departement_nom,
COUNT(e.id) OVER (PARTITION BY d.id) AS nb_enquetes_departement,
c.id AS commune_id,
c.code AS commune_code,
c.nom AS commune_nom,
COUNT(e.id) OVER (PARTITION BY c.id) AS nb_enquetes_commune,
a.id AS arrondissement_id,
a.code AS arrondissement_code,
a.nom AS arrondissement_nom,
COUNT(e.id) OVER (PARTITION BY a.id) AS nb_enquetes_arrondissement,
q.id AS quartier_id,
q.code AS quartier_code,
q.nom AS quartier_nom,
COUNT(e.id) OVER (PARTITION BY q.id) AS nb_enquetes_quartier
FROM enquete_unite_logement eul
JOIN unite_logement ul on ul.id = eul.unite_logement_id
JOIN batiment b ON b.id = ul.batiment_id
JOIN parcelle p ON p.id = b.parcelle_id
JOIN quartier q ON q.id = p.quartier_id
JOIN arrondissement a ON a.id = q.arrondissement_id
JOIN commune c ON c.id = a.commune_id
JOIN departement d ON d.id = c.departement_id
WHERE EXISTS (
SELECT 1
FROM secteur_decoupage sd
WHERE sd.quartier_id = q.id
AND sd.secteur_id IN (:secteurIds)
)
AND e.statut_enquete = :statutEnqueteParam
ORDER BY d.nom, c.nom, a.nom, q.nom;
""",
nativeQuery = true
)
List<ParcelleStatsProjectionUnSecteur> findStatsEnqueteBatimentBySecteurs(
@Param("secteurIds") List<Long> secteurIds,
@Param("statutEnqueteParam") String statutEnqueteParam
);
// @Query(
// value = """
// SELECT DISTINCT
// d.id AS departement_id,
// d.code AS departement_code,
// d.nom AS departement_nom,
// COUNT(eul.id) OVER (PARTITION BY d.id) AS nb_enquetes_departement,
//
// c.id AS commune_id,
// c.code AS commune_code,
// c.nom AS commune_nom,
// COUNT(eul.id) OVER (PARTITION BY c.id) AS nb_enquetes_commune,
//
// a.id AS arrondissement_id,
// a.code AS arrondissement_code,
// a.nom AS arrondissement_nom,
// COUNT(eul.id) OVER (PARTITION BY a.id) AS nb_enquetes_arrondissement,
//
// q.id AS quartier_id,
// q.code AS quartier_code,
// q.nom AS quartier_nom,
// COUNT(eul.id) OVER (PARTITION BY q.id) AS nb_enquetes_quartier
//
// FROM enquete_unite_logement eul
// JOIN unite_logement ul on ul.id = eul.unite_logement_id
// JOIN batiment b ON b.id = ul.batiment_id
// JOIN parcelle p ON p.id = b.parcelle_id
// JOIN quartier q ON q.id = p.quartier_id
// JOIN arrondissement a ON a.id = q.arrondissement_id
// JOIN commune c ON c.id = a.commune_id
// JOIN departement d ON d.id = c.departement_id
//
// WHERE EXISTS (
// SELECT 1
// FROM secteur_decoupage sd
// WHERE sd.quartier_id = q.id
// AND sd.secteur_id IN (:secteurIds)
// )
// AND eul.statut_enquete = :statutEnqueteParam
//
// ORDER BY d.nom, c.nom, a.nom, q.nom;
// """,
// nativeQuery = true
// )
// List<ParcelleStatsProjectionUnSecteur> findStatsEnqueteBatimentBySecteurs(
// @Param("secteurIds") List<Long> secteurIds,
// @Param("statutEnqueteParam") String statutEnqueteParam
// );
@Query(
value = """
SELECT DISTINCT
d.id AS departementId,
d.code AS departementCode,
d.nom AS departementNom,
COUNT(eul.id) OVER (PARTITION BY d.id) AS nbParcellesDepartement,
c.id AS communeId,
c.code AS communeCode,
c.nom AS communeNom,
COUNT(eul.id) OVER (PARTITION BY c.id) AS nbParcellesCommune,
a.id AS arrondissementId,
a.code AS arrondissementCode,
a.nom AS arrondissementNom,
COUNT(eul.id) OVER (PARTITION BY a.id) AS nbParcellesArrondissement,
q.id AS quartierId,
q.code AS quartierCode,
q.nom AS quartierNom,
COUNT(eul.id) OVER (PARTITION BY q.id) AS nbParcellesQuartier
FROM quartier q
JOIN arrondissement a ON a.id = q.arrondissement_id
JOIN commune c ON c.id = a.commune_id
JOIN departement d ON d.id = c.departement_id
JOIN parcelle p ON p.quartier_id = q.id
JOIN batiment b ON b.parcelle_id = p.id
JOIN unite_logement ul ON ul.batiment_id = b.id
LEFT JOIN enquete_unite_logement eul
ON eul.unite_logement_id = ul.id
AND eul.statut_enquete = :statutEnqueteParam
WHERE EXISTS (
SELECT 1
FROM secteur_decoupage sd
WHERE sd.quartier_id = q.id
AND sd.secteur_id IN (:secteurIds)
)
ORDER BY d.nom, c.nom, a.nom, q.nom
""",
nativeQuery = true
)
List<ParcelleStatsProjectionUnSecteur> findStatsEnqueteBatimentBySecteurs(
@Param("secteurIds") List<Long> secteurIds,
@Param("statutEnqueteParam") String statutEnqueteParam
);
@Query(