diff --git a/src/main/java/io/gmss/fiscad/implementations/decoupage/SecteurDecoupageServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/decoupage/SecteurDecoupageServiceImpl.java index 9c55091..085d696 100644 --- a/src/main/java/io/gmss/fiscad/implementations/decoupage/SecteurDecoupageServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/decoupage/SecteurDecoupageServiceImpl.java @@ -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); } diff --git a/src/main/java/io/gmss/fiscad/persistence/procedure_fonction_stocke/generer_donnees_imposition_tfu_batie.sql b/src/main/java/io/gmss/fiscad/persistence/procedure_fonction_stocke/generer_donnees_imposition_tfu_batie.sql index e58580a..bb91e9a 100644 --- a/src/main/java/io/gmss/fiscad/persistence/procedure_fonction_stocke/generer_donnees_imposition_tfu_batie.sql +++ b/src/main/java/io/gmss/fiscad/persistence/procedure_fonction_stocke/generer_donnees_imposition_tfu_batie.sql @@ -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 diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/EnqueteRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/EnqueteRepository.java index 88adece..1a22052 100755 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/EnqueteRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/EnqueteRepository.java @@ -256,46 +256,95 @@ public interface EnqueteRepository extends JpaRepository { List 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 findStatsEnqueteBySecteurs( +// @Param("secteurIds") List 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 findStatsEnqueteBySecteurs( diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/ParcelleRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/ParcelleRepository.java index e186954..d5c6f30 100755 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/ParcelleRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/ParcelleRepository.java @@ -98,22 +98,22 @@ public interface ParcelleRepository extends JpaRepository, 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 diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteBatimentRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteBatimentRepository.java index ef9256d..4136479 100755 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteBatimentRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteBatimentRepository.java @@ -480,36 +480,89 @@ public interface EnqueteBatimentRepository extends JpaRepository findStatsEnqueteBatimentBySecteurs( +// @Param("secteurIds") List 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 findStatsEnqueteBatimentBySecteurs( - @Param("secteurIds") List 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 findStatsEnqueteBatimentBySecteurs( +// @Param("secteurIds") List 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 findStatsEnqueteBatimentBySecteurs( + @Param("secteurIds") List secteurIds, + @Param("statutEnqueteParam") String statutEnqueteParam +); @Query(