From 6ba1365148efc1daf0de1f74fc8ead4e836a8d69 Mon Sep 17 00:00:00 2001 From: Aurince AKAKPO Date: Wed, 18 Mar 2026 17:49:01 +0100 Subject: [PATCH 1/2] fusion maj parcelle,batiment,ulo et leur enquete --- .../decoupage/SecteurDecoupageController.java | 218 ++++++++++++++++++ .../infocad/metier/EnqueteController.java | 63 ++++- .../rfu/metier/EnqueteBatimentController.java | 64 +++++ .../EnqueteUniteLogementController.java | 65 ++++++ .../statistique/StatistiqueController.java | 76 ++++++ .../fiscad/entities/infocad/metier/Piece.java | 8 +- .../rfu/metier/DonneesImpositionTfu.java | 31 ++- .../io/gmss/fiscad/enums/ParametersType.java | 7 +- .../io/gmss/fiscad/enums/StatutEnquete.java | 1 - .../SecteurDecoupageServiceImpl.java | 41 +++- .../infocad/metier/EnqueteServiceImpl.java | 27 ++- .../infocad/metier/ParcelleServiceImpl.java | 56 ++--- .../metier/EnqueteBatimentServiceImpl.java | 14 ++ .../EnqueteUniteLogementServiceImpl.java | 14 ++ .../statistiques/StatistiquesServiceImpl.java | 35 ++- .../decoupage/SecteurDecoupageService.java | 7 +- .../interfaces/decoupage/SecteurService.java | 2 - .../infocad/metier/EnqueteService.java | 6 + .../infocad/metier/ParcelleService.java | 3 - .../rfu/metier/EnqueteBatimentService.java | 5 + .../metier/EnqueteUniteLogementService.java | 5 + .../statistique/StatistiquesService.java | 1 + .../request/crudweb/PiecePayLoadWeb.java | 6 +- .../statistique/NombreEnquetesParObjet.java | 10 + .../ParcelleStatsProjectionUnSecteur.java | 2 +- .../infocad/metier/EnqueteRepository.java | 170 ++++++++++++++ .../infocad/metier/ParcelleRepository.java | 30 ++- .../infocad/metier/PieceRepository.java | 37 ++- .../rfu/metier/EnqueteBatimentRepository.java | 170 ++++++++++++++ .../EnqueteUniteLogementRepository.java | 170 ++++++++++++++ .../service/EntityFromPayLoadService.java | 53 ++++- 31 files changed, 1294 insertions(+), 103 deletions(-) create mode 100644 src/main/java/io/gmss/fiscad/paylaods/response/statistique/NombreEnquetesParObjet.java rename src/main/java/io/gmss/fiscad/paylaods/response/{restoration => statistique}/ParcelleStatsProjectionUnSecteur.java (93%) diff --git a/src/main/java/io/gmss/fiscad/controllers/decoupage/SecteurDecoupageController.java b/src/main/java/io/gmss/fiscad/controllers/decoupage/SecteurDecoupageController.java index d667cf5..be9a5f7 100644 --- a/src/main/java/io/gmss/fiscad/controllers/decoupage/SecteurDecoupageController.java +++ b/src/main/java/io/gmss/fiscad/controllers/decoupage/SecteurDecoupageController.java @@ -1,6 +1,7 @@ package io.gmss.fiscad.controllers.decoupage; import io.gmss.fiscad.entities.decoupage.SecteurDecoupage; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.*; import io.gmss.fiscad.interfaces.decoupage.SecteurDecoupageService; import io.gmss.fiscad.interfaces.decoupage.SecteurService; @@ -248,4 +249,221 @@ public class SecteurDecoupageController { } + @GetMapping("/arbre/enquete-en-cours/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteEncoursByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteDecoupageByUserId(userId, StatutEnquete.EN_COURS.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-valide/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteValideByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteDecoupageByUserId(userId, StatutEnquete.VALIDE.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-cloture/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteClotureByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteDecoupageByUserId(userId, StatutEnquete.CLOTURE.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + + @GetMapping("/arbre/enquete-batiment-en-cours/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteBatimentEncoursByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteBatimentDecoupageByUserId(userId, StatutEnquete.EN_COURS.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-batiment-valide/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteBatimentValideByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteBatimentDecoupageByUserId(userId, StatutEnquete.VALIDE.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-batiment-cloture/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteBatimentClotureByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteBatimentDecoupageByUserId(userId, StatutEnquete.CLOTURE.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-unitlog-en-cours/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteUniteLogEncoursByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteUniteLogementDecoupageByUserId(userId, StatutEnquete.EN_COURS.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-unitlog-valide/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteUniteLogValideByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteUniteLogementDecoupageByUserId(userId, StatutEnquete.VALIDE.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/arbre/enquete-unitlog-cloture/user-id/{userId}") + public ResponseEntity getArborescenceEnqueteUniteLigClotureByUserId(@PathVariable Long userId) { + try { + return new ResponseEntity<>( + new ApiResponse<>(true, secteurDecoupageService.getStatEnqueteUniteLogementDecoupageByUserId(userId, StatutEnquete.CLOTURE.toString()), "SecteurDecoupage trouvée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + e.printStackTrace(); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + } \ No newline at end of file diff --git a/src/main/java/io/gmss/fiscad/controllers/infocad/metier/EnqueteController.java b/src/main/java/io/gmss/fiscad/controllers/infocad/metier/EnqueteController.java index 2043bbb..43af77a 100644 --- a/src/main/java/io/gmss/fiscad/controllers/infocad/metier/EnqueteController.java +++ b/src/main/java/io/gmss/fiscad/controllers/infocad/metier/EnqueteController.java @@ -3,6 +3,7 @@ package io.gmss.fiscad.controllers.infocad.metier; import io.gmss.fiscad.entities.infocad.metier.Enquete; import io.gmss.fiscad.entities.rfu.metier.EnqueteBatiment; import io.gmss.fiscad.entities.user.User; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.*; import io.gmss.fiscad.interfaces.infocad.metier.EnqueteService; import io.gmss.fiscad.paylaods.ApiResponse; @@ -67,7 +68,8 @@ public class EnqueteController { logger.error(e.getLocalizedMessage()); return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); } catch (Exception e) { - logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + // logger.error(e.getLocalizedMessage()); return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); } @@ -483,8 +485,65 @@ public class EnqueteController { + @GetMapping("/all-paged/en-cours/by-quartier-id/{quartierId}") + public ResponseEntity getAllEnqueteEncoursByQuartierPaged(@CurrentUser UserPrincipal currentUser,@PathVariable Long quartierId, @RequestParam int pageNo, @RequestParam int pageSize) { + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + return new ResponseEntity<>( + new ApiResponse<>(true, enqueteService.getEnqueteListByQuartierByStatutPageableToDto(userId,quartierId, StatutEnquete.EN_COURS, pageable), "Liste des enquetes en cours chargée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } - + @GetMapping("/all-paged/cloture/by-quartier-id/{quartierId}") + public ResponseEntity getAllEnqueteClotureByQuartierPaged(@CurrentUser UserPrincipal currentUser,@PathVariable Long quartierId, @RequestParam int pageNo, @RequestParam int pageSize) { + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + return new ResponseEntity<>( + new ApiResponse<>(true, enqueteService.getEnqueteListByQuartierByStatutPageableToDto(userId,quartierId, StatutEnquete.CLOTURE, pageable), "Liste des enquetes en cours chargée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } } diff --git a/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java b/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java index 26d246d..05e70f2 100644 --- a/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java +++ b/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java @@ -2,10 +2,13 @@ package io.gmss.fiscad.controllers.rfu.metier; import io.gmss.fiscad.entities.rfu.metier.EnqueteBatiment; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.*; import io.gmss.fiscad.interfaces.rfu.metier.EnqueteBatimentService; import io.gmss.fiscad.paylaods.ApiResponse; import io.gmss.fiscad.paylaods.request.crudweb.EnqueteBatimentPayloadWeb; +import io.gmss.fiscad.security.CurrentUser; +import io.gmss.fiscad.security.UserPrincipal; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -223,4 +226,65 @@ public class EnqueteBatimentController { return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); } } + + + @GetMapping("/all-paged/en-cours/by-quartier-id/{quartierId}") + public ResponseEntity getAllEnqueteBatimentEnCoursByQuartierPaged(@CurrentUser UserPrincipal currentUser, @PathVariable Long quartierId, @RequestParam int pageNo, @RequestParam int pageSize) { + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + return new ResponseEntity<>( + new ApiResponse<>(true, enqueteBatimentService.getEnqueteBatimentListByQuartierByStatutPageableToDto(userId,quartierId, StatutEnquete.EN_COURS, pageable), "Liste des enquetes en cours chargée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + @GetMapping("/all-paged/cloture/by-quartier-id/{quartierId}") + public ResponseEntity getAllEnqueteBatimentClotureByQuartierPaged(@CurrentUser UserPrincipal currentUser, @PathVariable Long quartierId, @RequestParam int pageNo, @RequestParam int pageSize) { + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + return new ResponseEntity<>( + new ApiResponse<>(true, enqueteBatimentService.getEnqueteBatimentListByQuartierByStatutPageableToDto(userId,quartierId, StatutEnquete.CLOTURE, pageable), "Liste des enquetes en cours chargée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } } diff --git a/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteUniteLogementController.java b/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteUniteLogementController.java index 407ceb5..402faca 100644 --- a/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteUniteLogementController.java +++ b/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteUniteLogementController.java @@ -2,10 +2,13 @@ package io.gmss.fiscad.controllers.rfu.metier; import io.gmss.fiscad.entities.rfu.metier.EnqueteUniteLogement; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.*; import io.gmss.fiscad.interfaces.rfu.metier.EnqueteUniteLogementService; import io.gmss.fiscad.paylaods.ApiResponse; import io.gmss.fiscad.paylaods.request.crudweb.EnqueteUniteLogementPayloadWeb; +import io.gmss.fiscad.security.CurrentUser; +import io.gmss.fiscad.security.UserPrincipal; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -223,4 +226,66 @@ public class EnqueteUniteLogementController { return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); } } + + + @GetMapping("/all-paged/en-cours/by-quartier-id/{quartierId}") + public ResponseEntity getAllEnqueteUniteLogementEncoursByQuartierPaged(@CurrentUser UserPrincipal currentUser, @PathVariable Long quartierId, @RequestParam int pageNo, @RequestParam int pageSize) { + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + return new ResponseEntity<>( + new ApiResponse<>(true, enqueteUniteLogementService.getEnqueteUniteLogementListByQuartierByStatutPageableToDto(userId,quartierId, StatutEnquete.EN_COURS, pageable), "Liste des enquetes en cours chargée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @GetMapping("/all-paged/cloture/by-quartier-id/{quartierId}") + public ResponseEntity getAllEnqueteUniteLogementClotureByQuartierPaged(@CurrentUser UserPrincipal currentUser, @PathVariable Long quartierId, @RequestParam int pageNo, @RequestParam int pageSize) { + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + return new ResponseEntity<>( + new ApiResponse<>(true, enqueteUniteLogementService.getEnqueteUniteLogementListByQuartierByStatutPageableToDto(userId,quartierId, StatutEnquete.CLOTURE, pageable), "Liste des enquetes en cours chargée avec succès."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } } diff --git a/src/main/java/io/gmss/fiscad/controllers/statistique/StatistiqueController.java b/src/main/java/io/gmss/fiscad/controllers/statistique/StatistiqueController.java index f0b119f..bdc9b0f 100644 --- a/src/main/java/io/gmss/fiscad/controllers/statistique/StatistiqueController.java +++ b/src/main/java/io/gmss/fiscad/controllers/statistique/StatistiqueController.java @@ -1,9 +1,12 @@ package io.gmss.fiscad.controllers.statistique; import io.gmss.fiscad.enums.NiveauDecoupage; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.*; import io.gmss.fiscad.interfaces.statistique.StatistiquesService; import io.gmss.fiscad.paylaods.ApiResponse; +import io.gmss.fiscad.security.CurrentUser; +import io.gmss.fiscad.security.UserPrincipal; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -174,4 +177,77 @@ public class StatistiqueController { return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); } } + + + + @Operation( + summary = "Statistique des enquetes en cours par object ", + description = "Donnes le nombre d'enquetes en coures par objet" + ) + @GetMapping(path = "/nombre-enquete/par-objet/en-cours") + public ResponseEntity getStatistiquesEnqueteEnCoursParObjet(@CurrentUser UserPrincipal currentUser) { + try { + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + + return new ResponseEntity<>( + new ApiResponse<>(true, statistiquesService.getStatNombreEnqueteParObjetUserConnect(userId,StatutEnquete.EN_COURS.toString()), "Statistique des personne par type."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + + @Operation( + summary = "Statistique des enquetes en cours par object ", + description = "Donnes le nombre d'enquetes en coures par objet" + ) + @GetMapping(path = "/nombre-enquete/par-objet/cloture") + public ResponseEntity getStatistiquesEnqueteClotureParObjet(@CurrentUser UserPrincipal currentUser) { + try { + if(currentUser==null) + return new ResponseEntity<>( + new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"), + HttpStatus.OK + ); + Long userId = currentUser.getUser().getId(); + + return new ResponseEntity<>( + new ApiResponse<>(true, statistiquesService.getStatNombreEnqueteParObjetUserConnect(userId, StatutEnquete.CLOTURE.toString()), "Statistique des personne par type."), + HttpStatus.OK + ); + } catch (HttpClientErrorException.MethodNotAllowed e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK); + } catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException | + FileStorageException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); + } catch (NullPointerException e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); + } catch (Exception e) { + logger.error(e.getLocalizedMessage()); + return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); + } + } + + } \ No newline at end of file diff --git a/src/main/java/io/gmss/fiscad/entities/infocad/metier/Piece.java b/src/main/java/io/gmss/fiscad/entities/infocad/metier/Piece.java index 80a94fa..c8c95b1 100644 --- a/src/main/java/io/gmss/fiscad/entities/infocad/metier/Piece.java +++ b/src/main/java/io/gmss/fiscad/entities/infocad/metier/Piece.java @@ -24,6 +24,7 @@ import org.hibernate.annotations.Where; import java.io.Serializable; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; @EqualsAndHashCode(callSuper = true) @@ -88,7 +89,7 @@ public class Piece extends BaseEntity implements Serializable { @OneToMany(mappedBy = "piece") - private List uploads; + private List uploads=new ArrayList<>(); @JsonIgnore @ManyToOne @@ -103,4 +104,9 @@ public class Piece extends BaseEntity implements Serializable { private boolean synchronise; private String observation; + private Long nombreFichier; + + public Long getNombreFichier() { + return uploads==null? 0l:uploads.size() ; + } } diff --git a/src/main/java/io/gmss/fiscad/entities/rfu/metier/DonneesImpositionTfu.java b/src/main/java/io/gmss/fiscad/entities/rfu/metier/DonneesImpositionTfu.java index ead1ff8..add9213 100644 --- a/src/main/java/io/gmss/fiscad/entities/rfu/metier/DonneesImpositionTfu.java +++ b/src/main/java/io/gmss/fiscad/entities/rfu/metier/DonneesImpositionTfu.java @@ -74,21 +74,20 @@ public class DonneesImpositionTfu extends BaseEntity implements Serializable { private int superficieParc; private Long superficieAuSolBat; private Long superficieAuSolUlog; - //private String batieOuiNon; - //private String exhonereOuiNon; - //private String batimentExhonereOuiNon; - //private String uniteLogementExhonereOuiNon; private Boolean batie; private Boolean exonere; private Boolean batimentExonere; private Boolean uniteLogementExonere; private Long valeurLocativeAdm; - private Long valeurLocativeAdm70Pour100; + private Long valeurLocativeAdmTauxPropParc; + private Long valeurLocativeAdmSupReel; + private Long superficieAuSolTauxPropParc; private Long valeurLocativeAdmMetreCarre; private Long montantLoyerAnnuel; private Long tfuMetreCarre; private Long tfuMinimum; private String standingBat; + private String categorieUsage; private String categorieBat; private Long nombrePiscine; private Long nombreUlog; @@ -97,15 +96,11 @@ public class DonneesImpositionTfu extends BaseEntity implements Serializable { @JsonDeserialize(using = LocalDateDeserializer.class) private LocalDate dateEnquete; private Long enqueteId; - //private Long structureId; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "structure_id") private Structure structure ; - private Long secteurId; - - //private Long zoneRfuId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "zone_rfu_id") private ZoneRfu zoneRfu ; @@ -113,7 +108,10 @@ public class DonneesImpositionTfu extends BaseEntity implements Serializable { @ColumnDefault("0") private Long valeurAdminParcelleNb; private Float tauxTfu; + private Long tfuPiscine; private Float montantTaxe; + private Float tfuCalculeTauxPropParc; + private Float tfuSuperficieAuSolReel; private Long valeurAdminParcelleNbMetreCarre; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @@ -123,4 +121,19 @@ public class DonneesImpositionTfu extends BaseEntity implements Serializable { private NatureImpot natureImpot; private Long valeurBatiment; private Long valeurParcelle; + + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parcelle_id") + private Parcelle parcelleImposee ; + + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "batiment_id") + private Batiment batimentImpose ; + + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "unite_logement_id") + private UniteLogement uniteLogementImposee ; } diff --git a/src/main/java/io/gmss/fiscad/enums/ParametersType.java b/src/main/java/io/gmss/fiscad/enums/ParametersType.java index 672e333..8b3fad1 100755 --- a/src/main/java/io/gmss/fiscad/enums/ParametersType.java +++ b/src/main/java/io/gmss/fiscad/enums/ParametersType.java @@ -13,7 +13,8 @@ public enum ParametersType { OBJET_CREATE_ACCOUNT, CORPS_CREATE_ACCOUNT, TOKEN_IFU_EN_LIGNE, - TAUX_TFU_HABITATION, - TAUX_TFU_PROFESSIONNELLE, - TAUX_DEFAUT_SUPERFICIE_AU_SOL; + TAUX_TFU, + TAUX_VALEUR_LOCATIVE_PROFESSIONNELLE, + TAUX_DEFAUT_SUPERFICIE_AU_SOL, + TFU_PAR_PISCINE; } diff --git a/src/main/java/io/gmss/fiscad/enums/StatutEnquete.java b/src/main/java/io/gmss/fiscad/enums/StatutEnquete.java index b574293..5aa4e79 100755 --- a/src/main/java/io/gmss/fiscad/enums/StatutEnquete.java +++ b/src/main/java/io/gmss/fiscad/enums/StatutEnquete.java @@ -2,7 +2,6 @@ package io.gmss.fiscad.enums; public enum StatutEnquete { EN_COURS, - // DECLARATION, FINALISE, REJETE, VALIDE, 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 389a77d..9c55091 100644 --- a/src/main/java/io/gmss/fiscad/implementations/decoupage/SecteurDecoupageServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/decoupage/SecteurDecoupageServiceImpl.java @@ -2,15 +2,18 @@ package io.gmss.fiscad.implementations.decoupage; import io.gmss.fiscad.entities.decoupage.Secteur; import io.gmss.fiscad.entities.decoupage.SecteurDecoupage; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.interfaces.decoupage.SecteurDecoupageService; import io.gmss.fiscad.interfaces.decoupage.SecteurService; import io.gmss.fiscad.paylaods.request.crudweb.SecteurDecoupagePaylaodWeb; -import io.gmss.fiscad.paylaods.request.crudweb.SecteurPaylaodWeb; -import io.gmss.fiscad.paylaods.response.restoration.ParcelleStatsProjectionUnSecteur; +import io.gmss.fiscad.paylaods.response.statistique.ParcelleStatsProjectionUnSecteur; import io.gmss.fiscad.persistence.repositories.decoupage.SecteurDecoupageRepository; +import io.gmss.fiscad.persistence.repositories.infocad.metier.EnqueteRepository; import io.gmss.fiscad.persistence.repositories.infocad.metier.ParcelleRepository; +import io.gmss.fiscad.persistence.repositories.rfu.metier.EnqueteBatimentRepository; +import io.gmss.fiscad.persistence.repositories.rfu.metier.EnqueteUniteLogementRepository; import io.gmss.fiscad.service.EntityFromPayLoadService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; @@ -26,6 +29,9 @@ public class SecteurDecoupageServiceImpl implements SecteurDecoupageService { private final SecteurDecoupageRepository secteurDecoupageRepository; private final SecteurService secteurService; private final ParcelleRepository parcelleRepository; + private final EnqueteRepository enqueteRepository; + private final EnqueteBatimentRepository enqueteBatimentRepository; + private final EnqueteUniteLogementRepository enqueteUniteLogementRepository; private final EntityFromPayLoadService entityFromPayLoadService; @@ -112,4 +118,35 @@ public class SecteurDecoupageServiceImpl implements SecteurDecoupageService { return parcelleStatsProjectionUnSecteurs ; } + + @Override + public List getStatEnqueteDecoupageByUserId(Long userId, String statutEnquete) { + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + System.out.println(statutEnquete); + return enqueteRepository.findStatsEnqueteBySecteurs(secteurIds,statutEnquete); + } + + @Override + public List getStatEnqueteBatimentDecoupageByUserId(Long userId, String statutEnquete) { + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + System.out.println(statutEnquete); + return enqueteBatimentRepository.findStatsEnqueteBatimentBySecteurs(secteurIds,statutEnquete); + } + + @Override + public List getStatEnqueteUniteLogementDecoupageByUserId(Long userId, String statutEnquete) { + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + return enqueteUniteLogementRepository.findStatsEnqueteBatimentBySecteurs(secteurIds,statutEnquete); + } + + } \ No newline at end of file diff --git a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java index 8b7d2c4..4ad501b 100644 --- a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java @@ -1,5 +1,6 @@ package io.gmss.fiscad.implementations.infocad.metier; +import io.gmss.fiscad.entities.decoupage.Secteur; import io.gmss.fiscad.entities.infocad.metier.*; import io.gmss.fiscad.entities.infocad.parametre.Personne; import io.gmss.fiscad.entities.rfu.metier.CaracteristiqueParcelle; @@ -13,6 +14,7 @@ import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.ApplicationException; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.interfaces.decoupage.SecteurService; import io.gmss.fiscad.interfaces.infocad.metier.EnqueteService; import io.gmss.fiscad.interfaces.infocad.metier.ParcelleService; import io.gmss.fiscad.interfaces.infocad.metier.PieceService; @@ -81,6 +83,7 @@ public class EnqueteServiceImpl implements EnqueteService { private final PersonneRepository personneRepository; private final ZoneRfuRepository zoneRfuRepository ; private final EntityFromPayLoadService entityFromPayLoadService ; + private final SecteurService secteurService ; ; @PersistenceContext @@ -100,9 +103,11 @@ public class EnqueteServiceImpl implements EnqueteService { throw new BadRequestException("Echec de l'enregistrement : Propriétaire inexistant"); } - Optional optionalParcelle = parcelleRepository.findById(enquetePayLoadWeb.getParcelleId()); - if (!optionalParcelle.isPresent()) { - throw new BadRequestException("Echec de l'enregistrement : Parcelle inexistante"); + if(enquetePayLoadWeb.getParcelleId()!=null) { + Optional optionalParcelle = parcelleRepository.findById(enquetePayLoadWeb.getParcelleId()); + if (!optionalParcelle.isPresent()) { + throw new BadRequestException("Echec de l'enregistrement : Parcelle inexistante"); + } } Optional optionalZoneRfu = zoneRfuRepository.findById(enquetePayLoadWeb.getZoneRfuId()); @@ -110,9 +115,9 @@ public class EnqueteServiceImpl implements EnqueteService { throw new BadRequestException("Echec de l'enregistrement : zone inexistante"); } - if (enquetePayLoadWeb.getParcelleId() == null) { - throw new ApplicationException("Echec de l'enregistrement : La parcelle non renseignée."); - } +// if (enquetePayLoadWeb.getParcelleId() == null) { +// throw new ApplicationException("Echec de l'enregistrement : La parcelle non renseignée."); +// } ParcellePayLoadWeb parcellePayLoadWeb= getParcellePayloadFromEnquetePl(enquetePayLoadWeb); @@ -566,6 +571,16 @@ public class EnqueteServiceImpl implements EnqueteService { return nbreEnquete; } + @Override + public Page getEnqueteListByQuartierByStatutPageableToDto(Long userId, Long quartierId, StatutEnquete statutEnquete, Pageable pageable) { + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + + return enqueteRepository.findAllEnqueteByQuartierByStatutToDtoPageable(quartierId,secteurIds,statutEnquete,pageable); + } + @Override @Transactional public int cloturerEnqueteParcelleBatimentUniteLogementByStructureIdAndExerciceId(Long structureId,Long exerciceId) { diff --git a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/ParcelleServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/ParcelleServiceImpl.java index 0749d42..4367c81 100644 --- a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/ParcelleServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/ParcelleServiceImpl.java @@ -2,10 +2,12 @@ package io.gmss.fiscad.implementations.infocad.metier; import io.gmss.fiscad.entities.decoupage.Quartier; import io.gmss.fiscad.entities.decoupage.Secteur; +import io.gmss.fiscad.entities.infocad.metier.Enquete; import io.gmss.fiscad.entities.infocad.metier.EnqueteFiltreResponse; import io.gmss.fiscad.entities.infocad.metier.Parcelle; import io.gmss.fiscad.entities.infocad.metier.Rue; import io.gmss.fiscad.entities.infocad.parametre.NatureDomaine; +import io.gmss.fiscad.entities.infocad.parametre.TypeDomaine; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.interfaces.decoupage.SecteurService; @@ -19,7 +21,9 @@ import io.gmss.fiscad.persistence.repositories.infocad.metier.ParcelleRepository import io.gmss.fiscad.persistence.repositories.infocad.metier.RueRepository; import io.gmss.fiscad.persistence.repositories.infocad.parametre.NatureDomaineRepository; import io.gmss.fiscad.persistence.repositories.infocad.parametre.SituationGeographiqueRepository; +import io.gmss.fiscad.persistence.repositories.infocad.parametre.TypeDomaineRepository; import io.gmss.fiscad.persistence.specification.ParcelleSpecification; +import io.gmss.fiscad.service.EntityFromPayLoadService; import io.gmss.fiscad.service.GeometryService; import jakarta.persistence.Query; import jakarta.transaction.Transactional; @@ -39,6 +43,8 @@ public class ParcelleServiceImpl implements ParcelleService { private final RueRepository rueRepository; private final GeometryService geometryService; private final SecteurService secteurService; + private final TypeDomaineRepository typeDomaineRepository; + private final EntityFromPayLoadService entityFromPayLoadService; // @Value("${infocad.geom.srid}") // private String defaultSrid32631; @@ -58,10 +64,14 @@ public class ParcelleServiceImpl implements ParcelleService { if (!optionalQuartier.isPresent()) { throw new BadRequestException("Impossible d'enregistrer une parcelle avec un quartier/village inexistant"); } + + Optional optionalTypeDomaine = typeDomaineRepository.findById(parcellePayLoadWeb.getTypeDomaineId()); + if (!optionalTypeDomaine.isPresent()) { + throw new BadRequestException("Veuillez préciser le type de domaine"); + } + Parcelle parcelle = new Parcelle(); - parcelle.setNatureDomaine(optionalNatureDomaine.orElse(null)); - parcelle.setQuartier(optionalQuartier.orElse(null)); - parcelle = getParcelleFromPayload(parcelle, parcellePayLoadWeb); + parcelle = entityFromPayLoadService.getParcelleFromPayload(parcellePayLoadWeb); parcelle= parcelleRepository.save(parcelle); return parcelleRepository.findParcelleToDtoById(parcelle.getId()).orElse(null); } @@ -72,22 +82,8 @@ public class ParcelleServiceImpl implements ParcelleService { if (!optionalParcelle.isPresent()) { throw new NotFoundException("Impossible de trouver la parcelle que vous désirer modifier"); } - Optional optionalNatureDomaine = natureDomaineRepository.findById(parcellePayLoadWeb.getNatureDomaineId()); - if (!optionalNatureDomaine.isPresent()) { - throw new BadRequestException("Impossible d'enregistrer une parcelle avec une nature de domaine inexistante"); - } - Optional optionalQuartier = quartierRepository.findById(parcellePayLoadWeb.getQuartierId()); - if (!optionalQuartier.isPresent()) { - throw new BadRequestException("Impossible d'enregistrer une parcelle avec un quartier/village inexistant"); - } -// Optional optionalSituationGeographique = situationGeographiqueRepository.findById(parcellePayLoadWeb.getSituationGeographiqueId()); -// if (!optionalSituationGeographique.isPresent()) { -// throw new BadRequestException("Impossible d'enregistrer une parcelle avec une situation géographique inexistant"); -// } - Parcelle parcelle=optionalParcelle.get(); - parcelle.setNatureDomaine(optionalNatureDomaine.orElse(null)); - parcelle.setQuartier(optionalQuartier.orElse(null)); - parcelle = getParcelleFromPayload(optionalParcelle.get(), parcellePayLoadWeb); + Parcelle parcelle = new Parcelle(); + parcelle = entityFromPayLoadService.getParcelleFromPayload(parcellePayLoadWeb); parcelle= parcelleRepository.save(parcelle); return parcelleRepository.findParcelleToDtoById(parcelle.getId()).orElse(null); } @@ -210,28 +206,6 @@ public class ParcelleServiceImpl implements ParcelleService { } - - private Parcelle getParcelleFromPayload(Parcelle parcelle, ParcellePayLoadWeb parcellePayLoadWeb) { - if(parcellePayLoadWeb.getRueId()!=null) { - Optional optionalRue = rueRepository.findById(parcellePayLoadWeb.getRueId()); - parcelle.setRue(optionalRue.orElse(null)); - } - parcelle.setP(parcellePayLoadWeb.getP()); - parcelle.setI(parcellePayLoadWeb.getI()); - parcelle.setQ(parcellePayLoadWeb.getQ()); - parcelle.setNup(parcellePayLoadWeb.getNup()); - parcelle.setLatitude(parcellePayLoadWeb.getLatitude()); - parcelle.setLongitude(parcellePayLoadWeb.getLongitude()); - parcelle.setAltitude(parcellePayLoadWeb.getAltitude()); - parcelle.setSituationGeographique(parcellePayLoadWeb.getSituationGeographique()); - parcelle.setNupProvisoire(parcellePayLoadWeb.getNupProvisoire()); - parcelle.setAutreNumeroTitreFoncier(parcellePayLoadWeb.getNumTitreFoncier()); - parcelle.setObservation(parcellePayLoadWeb.getObservation()); - parcelle.setSuperficie(parcellePayLoadWeb.getSuperficie()); - - return parcelle; - } - // private Parcelle getParcelle(Parcelle parcelle, ParcellePayLoadWeb parcellePayLoadWeb, Optional optionalSituationGeographique, Optional optionalNatureDomaine) { // StringBuilder coordonnees = new StringBuilder(); // parcelle.setP(parcellePayLoadWeb.getP()); diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java index 600f836..3766eff 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java @@ -1,13 +1,16 @@ package io.gmss.fiscad.implementations.rfu.metier; +import io.gmss.fiscad.entities.decoupage.Secteur; import io.gmss.fiscad.entities.infocad.metier.Enquete; import io.gmss.fiscad.entities.infocad.metier.Upload; import io.gmss.fiscad.entities.infocad.parametre.Personne; import io.gmss.fiscad.entities.rfu.metier.Batiment; import io.gmss.fiscad.entities.rfu.metier.CaracteristiqueBatiment; import io.gmss.fiscad.entities.rfu.metier.EnqueteBatiment; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.interfaces.decoupage.SecteurService; import io.gmss.fiscad.interfaces.rfu.metier.BatimentService; import io.gmss.fiscad.interfaces.rfu.metier.CaracteristiqueBatimentService; import io.gmss.fiscad.interfaces.rfu.metier.EnqueteBatimentService; @@ -36,6 +39,7 @@ public class EnqueteBatimentServiceImpl implements EnqueteBatimentService { private final EntityFromPayLoadService entityFromPayLoadService; private final BatimentRepository batimentRepository; private final BatimentService batimentService; + private final SecteurService secteurService; @@ -155,4 +159,14 @@ public class EnqueteBatimentServiceImpl implements EnqueteBatimentService { public List getEnqueteBatimentByBatimentList(Long batimentId) { return enqueteBatimentRepository.findAllByBatimentToDto(batimentId); } + + @Override + public Page getEnqueteBatimentListByQuartierByStatutPageableToDto(Long userId, Long quartierId, StatutEnquete statutEnquete, Pageable pageable) { + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + + return enqueteBatimentRepository.findAllEnqueteBatimentByQuartierByStatutToDtoPageable(quartierId,secteurIds,statutEnquete,pageable); + } } diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java index 0bf9820..66e68ad 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java @@ -1,11 +1,14 @@ package io.gmss.fiscad.implementations.rfu.metier; +import io.gmss.fiscad.entities.decoupage.Secteur; import io.gmss.fiscad.entities.infocad.metier.Enquete; import io.gmss.fiscad.entities.infocad.metier.Upload; import io.gmss.fiscad.entities.infocad.parametre.Personne; import io.gmss.fiscad.entities.rfu.metier.*; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.interfaces.decoupage.SecteurService; import io.gmss.fiscad.interfaces.rfu.metier.CaracteristiqueUniteLogementService; import io.gmss.fiscad.interfaces.rfu.metier.EnqueteUniteLogementService; import io.gmss.fiscad.interfaces.rfu.metier.UniteLogementService; @@ -34,6 +37,7 @@ public class EnqueteUniteLogementServiceImpl implements EnqueteUniteLogementServ private final EntityFromPayLoadService entityFromPayLoadService ; private final UniteLogementRepository uniteLogementRepository ; private final UniteLogementService uniteLogementService ; + private final SecteurService secteurService ; @@ -157,4 +161,14 @@ public class EnqueteUniteLogementServiceImpl implements EnqueteUniteLogementServ } } + + @Override + public Page getEnqueteUniteLogementListByQuartierByStatutPageableToDto(Long userId, Long quartierId, StatutEnquete statutEnquete, Pageable pageable) { + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + + return enqueteUniteLogementRepository.findAllEnqueteUniteLogementByQuartierByStatutToDtoPageable(quartierId,secteurIds,statutEnquete,pageable); + } } diff --git a/src/main/java/io/gmss/fiscad/implementations/statistiques/StatistiquesServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/statistiques/StatistiquesServiceImpl.java index 2874475..f503c17 100644 --- a/src/main/java/io/gmss/fiscad/implementations/statistiques/StatistiquesServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/statistiques/StatistiquesServiceImpl.java @@ -1,14 +1,23 @@ package io.gmss.fiscad.implementations.statistiques; +import io.gmss.fiscad.entities.decoupage.Secteur; import io.gmss.fiscad.entities.user.User; +import io.gmss.fiscad.enums.StatutEnquete; +import io.gmss.fiscad.interfaces.decoupage.SecteurService; import io.gmss.fiscad.interfaces.statistique.StatistiquesService; import io.gmss.fiscad.interfaces.user.UserService; +import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb; import io.gmss.fiscad.paylaods.response.statistique.*; import io.gmss.fiscad.persistence.repositories.infocad.metier.EnqueteRepository; import io.gmss.fiscad.persistence.repositories.infocad.metier.ParcelleRepository; import io.gmss.fiscad.persistence.repositories.infocad.parametre.PersonneRepository; import io.gmss.fiscad.persistence.repositories.rfu.metier.BatimentRepository; +import io.gmss.fiscad.persistence.repositories.rfu.metier.EnqueteBatimentRepository; +import io.gmss.fiscad.persistence.repositories.rfu.metier.EnqueteUniteLogementRepository; import io.gmss.fiscad.persistence.repositories.rfu.metier.UniteLogementRepository; +import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; @@ -18,21 +27,27 @@ import java.util.List; @Service public class StatistiquesServiceImpl implements StatistiquesService { - private Authentication authentication; + private Authentication authentication; private final UserService userService; private final EnqueteRepository enqueteRepository; private final ParcelleRepository parcelleRepository; private final BatimentRepository batimentRepository; private final UniteLogementRepository uniteLogementRepository; private final PersonneRepository personneRepository; + private final SecteurService secteurService; + private final EnqueteBatimentRepository enqueteBatimentRepository; + private final EnqueteUniteLogementRepository enqueteUniteLogementRepository; - public StatistiquesServiceImpl(UserService userService, EnqueteRepository enqueteRepository, ParcelleRepository parcelleRepository, BatimentRepository batimentRepository, UniteLogementRepository uniteLogementRepository, PersonneRepository personneRepository) { + public StatistiquesServiceImpl(UserService userService, EnqueteRepository enqueteRepository, ParcelleRepository parcelleRepository, BatimentRepository batimentRepository, UniteLogementRepository uniteLogementRepository, PersonneRepository personneRepository, SecteurService secteurService, EnqueteBatimentRepository enqueteBatimentRepository, EnqueteUniteLogementRepository enqueteUniteLogementRepository) { this.userService = userService; this.enqueteRepository = enqueteRepository; this.parcelleRepository = parcelleRepository; this.batimentRepository = batimentRepository; this.uniteLogementRepository = uniteLogementRepository; this.personneRepository = personneRepository; + this.secteurService = secteurService; + this.enqueteBatimentRepository = enqueteBatimentRepository; + this.enqueteUniteLogementRepository = enqueteUniteLogementRepository; } @@ -98,4 +113,20 @@ public class StatistiquesServiceImpl implements StatistiquesService { public List getStatNombrePersonneParCategorie() { return personneRepository.getNombrePersonnesResponse(); } + + @Override + public NombreEnquetesParObjet getStatNombreEnqueteParObjetUserConnect(Long userId, String statutEnquete) { + NombreEnquetesParObjet nombreEnquetesParObjet= new NombreEnquetesParObjet(); + List secteurs= secteurService.getListSecteurUserId(userId); + List secteurIds = secteurs.stream() + .map(Secteur::getId) + .toList(); + + nombreEnquetesParObjet.setNombreEnqueteUniteLogement(enqueteUniteLogementRepository.getNombreEnqueteUniteLogementByUserConnecte(secteurIds,statutEnquete)); + nombreEnquetesParObjet.setNombreEnqueteParcelle(enqueteRepository.getNombreEnqueteByUserConnecte(secteurIds,statutEnquete)); + nombreEnquetesParObjet.setNombreEnqueteBatiment(enqueteBatimentRepository.getNombreEnqueteBatimentByUserConnecte(secteurIds,statutEnquete)); + + return nombreEnquetesParObjet; + } + } diff --git a/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurDecoupageService.java b/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurDecoupageService.java index 173801d..93873f7 100644 --- a/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurDecoupageService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurDecoupageService.java @@ -1,11 +1,11 @@ package io.gmss.fiscad.interfaces.decoupage; import io.gmss.fiscad.entities.decoupage.SecteurDecoupage; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.paylaods.request.crudweb.SecteurDecoupagePaylaodWeb; -import io.gmss.fiscad.paylaods.request.crudweb.SecteurPaylaodWeb; -import io.gmss.fiscad.paylaods.response.restoration.ParcelleStatsProjectionUnSecteur; +import io.gmss.fiscad.paylaods.response.statistique.ParcelleStatsProjectionUnSecteur; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -33,4 +33,7 @@ public interface SecteurDecoupageService { List getStatParcelleDecoupageUnSecteur(Long secteurId) ; List getStatParcelleDecoupageByUserId(Long userId) ; + List getStatEnqueteDecoupageByUserId(Long userId, String statutEnquete) ; + List getStatEnqueteBatimentDecoupageByUserId(Long userId, String statutEnquete) ; + List getStatEnqueteUniteLogementDecoupageByUserId(Long userId, String statutEnquete) ; } \ No newline at end of file diff --git a/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurService.java b/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurService.java index b8ac1bd..2c725b1 100644 --- a/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/decoupage/SecteurService.java @@ -4,8 +4,6 @@ import io.gmss.fiscad.entities.decoupage.Secteur; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.paylaods.request.crudweb.SecteurPaylaodWeb; -import io.gmss.fiscad.paylaods.request.synchronisation.SecteurPayload; -import io.gmss.fiscad.paylaods.response.restoration.ParcelleStatsProjectionUnSecteur; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/EnqueteService.java b/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/EnqueteService.java index 6c8052b..231458a 100755 --- a/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/EnqueteService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/EnqueteService.java @@ -2,11 +2,13 @@ package io.gmss.fiscad.interfaces.infocad.metier; import io.gmss.fiscad.entities.infocad.metier.Enquete; import io.gmss.fiscad.entities.infocad.metier.EnqueteFiltreResponse; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.paylaods.request.EnqueteTraitementPayLoad; import io.gmss.fiscad.paylaods.request.FiltreEnquetePayLoad; import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb; +import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb; import io.gmss.fiscad.paylaods.response.synchronisation.EnqueteNonSyncResponse; import io.gmss.fiscad.paylaods.response.EnqueteResponse; import io.gmss.fiscad.paylaods.response.FicheResponse.FicheEnqueteResponse; @@ -60,4 +62,8 @@ public interface EnqueteService { int cloturerEnqueteParcelleBatimentUniteLogementByStructureIdAndExerciceId(Long strucutreId,Long exerciceId); int cloturerEnqueteParcelleBatimentUniteLogementByUserIdAndExerciceId(Long userId,Long exerciceId); + + + Page getEnqueteListByQuartierByStatutPageableToDto(Long userId, Long quartierId, StatutEnquete statutEnquete, Pageable pageable); + } diff --git a/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/ParcelleService.java b/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/ParcelleService.java index 8a98ff9..cfc48ac 100755 --- a/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/ParcelleService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/infocad/metier/ParcelleService.java @@ -4,10 +4,7 @@ import io.gmss.fiscad.entities.infocad.metier.Parcelle; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.paylaods.FiltreParcelle; -import io.gmss.fiscad.paylaods.request.FiltreParcellePayLoad; import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb; -import io.gmss.fiscad.paylaods.response.dataTableResponse.ParcelleDataTableResponse; -import io.gmss.fiscad.paylaods.response.restoration.ParcelleStatsProjectionUnSecteur; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteBatimentService.java b/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteBatimentService.java index d34554d..33b9a46 100755 --- a/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteBatimentService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteBatimentService.java @@ -1,9 +1,11 @@ package io.gmss.fiscad.interfaces.rfu.metier; import io.gmss.fiscad.entities.rfu.metier.EnqueteBatiment; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.paylaods.request.crudweb.EnqueteBatimentPayloadWeb; +import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -26,4 +28,7 @@ public interface EnqueteBatimentService { Page getEnqueteBatimentByBatimentListPageable(Long batimentId, Pageable pageable); List getEnqueteBatimentByBatimentList(Long batimentId); + + Page getEnqueteBatimentListByQuartierByStatutPageableToDto(Long userId, Long quartierId, StatutEnquete statutEnquete, Pageable pageable); + } diff --git a/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteUniteLogementService.java b/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteUniteLogementService.java index fde22a9..0eb1c99 100755 --- a/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteUniteLogementService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/rfu/metier/EnqueteUniteLogementService.java @@ -1,8 +1,10 @@ package io.gmss.fiscad.interfaces.rfu.metier; import io.gmss.fiscad.entities.rfu.metier.EnqueteUniteLogement; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.paylaods.request.crudweb.EnqueteBatimentPayloadWeb; import io.gmss.fiscad.paylaods.request.crudweb.EnqueteUniteLogementPayloadWeb; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -27,4 +29,7 @@ public interface EnqueteUniteLogementService { List getEnqueteUniteLogementUniteLogementList(Long uniteLogementId); Optional getEnqueteUniteLogementById(Long enqueteUniteLogement); + + Page getEnqueteUniteLogementListByQuartierByStatutPageableToDto(Long userId, Long quartierId, StatutEnquete statutEnquete, Pageable pageable); + } diff --git a/src/main/java/io/gmss/fiscad/interfaces/statistique/StatistiquesService.java b/src/main/java/io/gmss/fiscad/interfaces/statistique/StatistiquesService.java index d1d5dbb..ff123ab 100644 --- a/src/main/java/io/gmss/fiscad/interfaces/statistique/StatistiquesService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/statistique/StatistiquesService.java @@ -11,4 +11,5 @@ public interface StatistiquesService { List getStatBloc(); StatNombreTotalObjet getStatNombreTotalObjet(String codeDecoupageAdmin); List getStatNombrePersonneParCategorie(); + NombreEnquetesParObjet getStatNombreEnqueteParObjetUserConnect(Long userId, String statutEnquete); } diff --git a/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/PiecePayLoadWeb.java b/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/PiecePayLoadWeb.java index 54519ee..a339672 100644 --- a/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/PiecePayLoadWeb.java +++ b/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/PiecePayLoadWeb.java @@ -27,10 +27,11 @@ public class PiecePayLoadWeb { private Long enqueteId; private Long enqueteBatimentId; private Long enqueteUniteLogementId; - //private List uploadPayLoadWebs; + private Long nombreFichier; public PiecePayLoadWeb(Long id, LocalDate dateExpiration, LocalDate dateEtablissement, String numeroPiece, String url, Long typePieceId, String typePieceLibelle, Long personneId, String personneNom, String personnePrenom, String personneRaisonSociale, Long sourceDroitId, String sourceDroitLibelle, Long modeAcquisitionId, String modeAcquisitionLibelle, String observation, Long enqueteId, - Long enqueteBatimentId,Long enqueteUniteLogementId) { + Long enqueteBatimentId,Long enqueteUniteLogementId, + Long nombreFichier) { this.id = id; this.dateExpiration = dateExpiration; this.dateEtablissement = dateEtablissement; @@ -50,6 +51,7 @@ public class PiecePayLoadWeb { this.enqueteId = enqueteId; this.enqueteBatimentId = enqueteBatimentId; this.enqueteUniteLogementId = enqueteUniteLogementId; + this.nombreFichier = nombreFichier; } } diff --git a/src/main/java/io/gmss/fiscad/paylaods/response/statistique/NombreEnquetesParObjet.java b/src/main/java/io/gmss/fiscad/paylaods/response/statistique/NombreEnquetesParObjet.java new file mode 100644 index 0000000..99a512c --- /dev/null +++ b/src/main/java/io/gmss/fiscad/paylaods/response/statistique/NombreEnquetesParObjet.java @@ -0,0 +1,10 @@ +package io.gmss.fiscad.paylaods.response.statistique; + +import lombok.Data; + +@Data +public class NombreEnquetesParObjet { + Integer nombreEnqueteParcelle; + Integer nombreEnqueteBatiment; + Integer nombreEnqueteUniteLogement; +} diff --git a/src/main/java/io/gmss/fiscad/paylaods/response/restoration/ParcelleStatsProjectionUnSecteur.java b/src/main/java/io/gmss/fiscad/paylaods/response/statistique/ParcelleStatsProjectionUnSecteur.java similarity index 93% rename from src/main/java/io/gmss/fiscad/paylaods/response/restoration/ParcelleStatsProjectionUnSecteur.java rename to src/main/java/io/gmss/fiscad/paylaods/response/statistique/ParcelleStatsProjectionUnSecteur.java index da03755..6abddc6 100644 --- a/src/main/java/io/gmss/fiscad/paylaods/response/restoration/ParcelleStatsProjectionUnSecteur.java +++ b/src/main/java/io/gmss/fiscad/paylaods/response/statistique/ParcelleStatsProjectionUnSecteur.java @@ -1,4 +1,4 @@ -package io.gmss.fiscad.paylaods.response.restoration; +package io.gmss.fiscad.paylaods.response.statistique; public interface ParcelleStatsProjectionUnSecteur { // ================== Département ================== 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 7174409..a5ad6ad 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 @@ -1,10 +1,13 @@ package io.gmss.fiscad.persistence.repositories.infocad.metier; import io.gmss.fiscad.entities.infocad.metier.Enquete; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb; +import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb; import io.gmss.fiscad.paylaods.response.*; import io.gmss.fiscad.paylaods.response.report.EnqueteParBlocResponse; import io.gmss.fiscad.paylaods.response.restoration.EnquetePayLoad; +import io.gmss.fiscad.paylaods.response.statistique.ParcelleStatsProjectionUnSecteur; import io.gmss.fiscad.paylaods.response.statistique.StatEnqueteAdminDecoupageResponse; import io.gmss.fiscad.paylaods.response.statistique.StatEnqueteAdminStructureResponse; import io.gmss.fiscad.paylaods.response.statistique.StatEnqueteParBlocResponse; @@ -253,6 +256,53 @@ 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(""" SELECT new io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb( @@ -836,4 +886,124 @@ public interface EnqueteRepository extends JpaRepository { @Param("parcelleId") Long parcelleId, Pageable pageable ); + + + + + @Query( + value = """ + SELECT distinct new io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb( + e.id, + e.dateEnquete, + e.dateFinalisation, + e.litige, + e.statutEnquete, + e.descriptionMotifRejet, + e.observationParticuliere, + pa.numeroTitreFoncier, + pa.dateTitreFoncier, + e.numEntreeParcelle, + e.numRue, + e.nomRue, + e.precision, + e.nbreCoProprietaire, + e.nbreIndivisiaire, + e.autreAdresse, + e.superficie, + e.nbreBatiment, + e.nbrePiscine, + e.dateDebutExemption, + e.dateFinExemption, + pa.autreNumeroTitreFoncier, + e.montantMensuelleLocation, + e.montantAnnuelleLocation, + e.valeurParcelleEstime, + e.valeurParcelleReel, + zr.id, + zr.nom, + p.id, + p.nom, + p.prenom, + p.raisonSociale, + u.id, + u.nom, + u.prenom, + pa.id, + pa.nup, + pa.q, + pa.i, + pa.p, + ex.id, + ex.annee, + ma.id, + ma.libelle, + e.representantNom, + e.representantPrenom, + e.representantTel, + e.representantNpi, + pa.numeroProvisoire, + pa.longitude, + pa.latitude, + pa.altitude, + pa.situationGeographique, + q.id, + q.code, + q.nom, + nd.id, + nd.libelle, + td.id, + td.libelle, + r.id + ) + FROM Enquete e + LEFT JOIN e.zoneRfu zr + LEFT JOIN e.personne p + LEFT JOIN e.user u + LEFT JOIN e.parcelle pa + LEFT JOIN e.exercice ex + LEFT JOIN e.modeAcquisition ma + LEFT JOIN pa.quartier q + LEFT JOIN pa.natureDomaine nd + LEFT JOIN pa.typeDomaine td + LEFT JOIN pa.rue r + INNER JOIN SecteurDecoupage sd on sd.quartier=q + WHERE sd.secteur.id IN (:secteurIds) + and q.id = :quartierId + and e.statutEnquete = :statutEnquete + """, + countQuery = """ + SELECT COUNT(DISTINCT e.id) + FROM Enquete e + JOIN e.parcelle pa + INNER JOIN pa.quartier q + INNER JOIN SecteurDecoupage sd on sd.quartier= q + WHERE sd.secteur.id IN (:secteurIds) + and q.id = :quartierId + and e.statutEnquete = :statutEnquete + """ + ) + Page findAllEnqueteByQuartierByStatutToDtoPageable( + @Param("quartierId") Long quartierId, + @Param("secteurIds") List secteurIds, + @Param("statutEnquete") StatutEnquete statutEnquete, + Pageable pageable + ); + + + @Query( + value = """ + SELECT count(distinct e.*) + FROM enquete e + JOIN parcelle parc on parc.id=e.parcelle_id + JOIN quartier q on q.id=parc.quartier_id + JOIN secteur_decoupage sd on sd.quartier_id=q.id + WHERE sd.secteur_id IN (:secteurIds) + and e.statut_enquete = :statutEnquete + """, + nativeQuery = true + ) + Integer getNombreEnqueteByUserConnecte( + @Param("secteurIds") List secteurIds, + @Param("statutEnquete") String statutEnquete + ); } 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 e789fa0..e186954 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 @@ -5,7 +5,7 @@ import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb; import io.gmss.fiscad.paylaods.response.dataTableResponse.ParcelleDataTableResponse; import io.gmss.fiscad.paylaods.response.statistique.StatistiqueTypeNombreResponse; import io.gmss.fiscad.paylaods.response.restoration.ParcellePayLoadRestor; -import io.gmss.fiscad.paylaods.response.restoration.ParcelleStatsProjectionUnSecteur; +import io.gmss.fiscad.paylaods.response.statistique.ParcelleStatsProjectionUnSecteur; import io.gmss.fiscad.persistence.customrepository.ParcelleRepositoryCustom; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -94,32 +94,39 @@ public interface ParcelleRepository extends JpaRepository, JpaSp @Query( value = """ - SELECT DISTINCT + SELECT distinct 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, + 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, + 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, + 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 - FROM secteur_decoupage sd - JOIN quartier q ON q.id = sd.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 LEFT JOIN parcelle p ON p.quartier_id = q.id - WHERE sd.secteur_id IN (:secteurIds)\s - ORDER BY - d.nom, c.nom, a.nom, q.nom; + 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 ) @@ -348,7 +355,6 @@ public interface ParcelleRepository extends JpaRepository, JpaSp WHERE e2.parcelle = p ) LEFT JOIN e.personne pers - INNER JOIN SecteurDecoupage sd on sd.quartier=p.quartier WHERE p.id = :parcelleId """) Optional findParcelleToDtoById( @@ -358,7 +364,7 @@ public interface ParcelleRepository extends JpaRepository, JpaSp @Query( value = """ - SELECT new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( + SELECT distinct new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( p.id, p.q, p.i, @@ -475,7 +481,7 @@ public interface ParcelleRepository extends JpaRepository, JpaSp @Query( value = """ - SELECT new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( + SELECT distinct new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( p.id, p.q, p.i, @@ -541,7 +547,7 @@ public interface ParcelleRepository extends JpaRepository, JpaSp @Query( """ - SELECT new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( + SELECT distinct new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( p.id, p.q, p.i, @@ -597,7 +603,7 @@ public interface ParcelleRepository extends JpaRepository, JpaSp @Query( value = """ - SELECT new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( + SELECT distinct new io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb( p.id, p.q, p.i, diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/PieceRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/PieceRepository.java index c804bd0..7ef73e1 100755 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/PieceRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/infocad/metier/PieceRepository.java @@ -75,8 +75,13 @@ public interface PieceRepository extends JpaRepository { ma.libelle, p.observation, e.id, - p.enqueteBatiment.id, - p.enqueteUniteLogement.id + p.enqueteBatiment.id, + p.enqueteUniteLogement.id, + ( + SELECT CAST(COUNT(u.id) as Long) + FROM Upload u + WHERE u.piece.id = p.id + ) ) FROM Piece p LEFT JOIN p.typePiece tp @@ -109,7 +114,12 @@ public interface PieceRepository extends JpaRepository { p.observation, e.id, p.enqueteBatiment.id, - p.enqueteUniteLogement.id + p.enqueteUniteLogement.id, + ( + SELECT CAST(COUNT(u.id) as Long) + FROM Upload u + WHERE u.piece.id = p.id + ) ) FROM Piece p LEFT JOIN p.typePiece tp @@ -141,7 +151,12 @@ public interface PieceRepository extends JpaRepository { p.observation, e.id, p.enqueteBatiment.id, - p.enqueteUniteLogement.id + p.enqueteUniteLogement.id, + ( + SELECT CAST(COUNT(u.id) as Long) + FROM Upload u + WHERE u.piece.id = p.id + ) ) FROM Piece p LEFT JOIN p.typePiece tp @@ -180,7 +195,12 @@ public interface PieceRepository extends JpaRepository { p.observation, e.id, p.enqueteBatiment.id, - p.enqueteUniteLogement.id + p.enqueteUniteLogement.id, + ( + SELECT CAST(COUNT(u.id) as Long) + FROM Upload u + WHERE u.piece.id = p.id + ) ) FROM Piece p LEFT JOIN p.typePiece tp @@ -249,7 +269,12 @@ public interface PieceRepository extends JpaRepository { p.observation, e.id, p.enqueteBatiment.id, - p.enqueteUniteLogement.id + p.enqueteUniteLogement.id, + ( + SELECT CAST(COUNT(u.id) as Long) + FROM Upload u + WHERE u.piece.id = p.id + ) ) FROM Piece p LEFT JOIN p.typePiece tp 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 6f6c231..ef9256d 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 @@ -1,8 +1,11 @@ package io.gmss.fiscad.persistence.repositories.rfu.metier; import io.gmss.fiscad.entities.rfu.metier.EnqueteBatiment; +import io.gmss.fiscad.enums.StatutEnquete; import io.gmss.fiscad.paylaods.request.crudweb.EnqueteBatimentPayloadWeb; +import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb; import io.gmss.fiscad.paylaods.response.restoration.EnqueteBatimentPayLoadRestor; +import io.gmss.fiscad.paylaods.response.statistique.ParcelleStatsProjectionUnSecteur; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -477,5 +480,172 @@ public interface EnqueteBatimentRepository extends JpaRepository findStatsEnqueteBatimentBySecteurs( + @Param("secteurIds") List secteurIds, + @Param("statutEnqueteParam") String statutEnqueteParam + ); + + + @Query( + value = """ + SELECT new io.gmss.fiscad.paylaods.request.crudweb.EnqueteBatimentPayloadWeb( + eb.id, + eb.observation, + eb.autreMenuisierie, + eb.autreMur, + eb.sbee, + eb.numCompteurSbee, + eb.soneb, + eb.numCompteurSoneb, + eb.nbreLotUnite, + eb.nbreUniteLocation, + eb.superficieLouee, + eb.superficieAuSol, + eb.dateEnquete, + eb.nbreMenage, + eb.nbreHabitant, + eb.montantMensuelLocation, + eb.montantLocatifAnnuelDeclare, + eb.nbreEtage, + eb.valeurBatimentEstime, + eb.valeurBatimentReel, + eb.nbreMoisLocation, + eb.autreCaracteristiquePhysique, + eb.dateDebutExcemption, + eb.dateFinExcemption, + + b.id, + b.nub, + + p.id, + p.nom, + p.prenom, + p.raisonSociale, + + u.id, + u.nom, + u.prenom, + eb.statutEnquete, + ex.id, + ex.annee, + eb.representantNom, + eb.representantPrenom, + eb.representantTel, + eb.representantNpi, + cb.id, + cb.code, + cb.standing, + eb.nombrePiscine, + eb.montantLocatifAnnuelCalcule, + us.id, + us.nom, + b.nub, + b.code, + b.dateConstruction, + parc.id, + parc.nup, + parc.q, + parc.i, + parc.p, + b.montantLocatifAnnuelEstime, + b.valeurBatimentCalcule, + b.nbreUniteLogement + ) + FROM EnqueteBatiment eb + LEFT JOIN eb.batiment b + LEFT JOIN b.parcelle parc + LEFT JOIN parc.quartier q + LEFT JOIN eb.personne p + LEFT JOIN eb.user u + LEFT JOIN eb.exercice ex + LEFT JOIN eb.categorieBatiment cb + LEFT JOIN eb.usage us + INNER JOIN SecteurDecoupage sd on sd.quartier=q + WHERE sd.secteur.id IN (:secteurIds) + and q.id = :quartierId + and eb.statutEnquete = :statutEnquete + """, + countQuery = """ + SELECT COUNT(DISTINCT eb.id) + FROM EnqueteBatiment eb + LEFT JOIN eb.batiment b + LEFT JOIN b.parcelle parc + LEFT JOIN parc.quartier q + INNER JOIN SecteurDecoupage sd on sd.quartier= q + WHERE sd.secteur.id IN (:secteurIds) + and q.id = :quartierId + and eb.statutEnquete = :statutEnquete + """ + ) + Page findAllEnqueteBatimentByQuartierByStatutToDtoPageable( + @Param("quartierId") Long quartierId, + @Param("secteurIds") List secteurIds, + @Param("statutEnquete") StatutEnquete statutEnquete, + Pageable pageable + ); + + + @Query( + value = """ + SELECT count(distinct eb.*) + FROM enquete_batiment eb + JOIN batiment b on b.id=eb.batiment_id + JOIN parcelle parc on parc.id=b.parcelle_id + JOIN quartier q on q.id=parc.quartier_id + JOIN secteur_decoupage sd on sd.quartier_id=q.id + WHERE sd.secteur_id IN (:secteurIds) + and eb.statut_enquete = :statutEnquete + """, + nativeQuery = true + ) + Integer getNombreEnqueteBatimentByUserConnecte( + @Param("secteurIds") List secteurIds, + @Param("statutEnquete") String statutEnquete + ); + + } diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteUniteLogementRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteUniteLogementRepository.java index ecba16a..96abea4 100755 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteUniteLogementRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/EnqueteUniteLogementRepository.java @@ -1,8 +1,11 @@ package io.gmss.fiscad.persistence.repositories.rfu.metier; import io.gmss.fiscad.entities.rfu.metier.EnqueteUniteLogement; +import io.gmss.fiscad.enums.StatutEnquete; +import io.gmss.fiscad.paylaods.request.crudweb.EnqueteBatimentPayloadWeb; import io.gmss.fiscad.paylaods.request.crudweb.EnqueteUniteLogementPayloadWeb; import io.gmss.fiscad.paylaods.response.restoration.EnqueteUniteLogementPayLoadRestor; +import io.gmss.fiscad.paylaods.response.statistique.ParcelleStatsProjectionUnSecteur; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -598,4 +601,171 @@ public interface EnqueteUniteLogementRepository extends JpaRepository findStatsEnqueteBatimentBySecteurs( + @Param("secteurIds") List secteurIds, + @Param("statutEnqueteParam") String statutEnqueteParam + ); + + + + @Query( + value = """ + SELECT new io.gmss.fiscad.paylaods.request.crudweb.EnqueteUniteLogementPayloadWeb( + eul.id, + eul.observation, + eul.nbrePiece, + eul.nbreHabitant, + eul.nbreMenage, + eul.enLocation, + eul.nbreMoisLocation, + eul.montantMensuelLocation, + eul.montantLocatifAnnuelDeclare, + eul.valeurUniteLogementEstime, + eul.valeurUniteLogementReel, + eul.superficieLouee, + eul.superficieAuSol, + eul.dateEnquete, + eul.sbee, + eul.soneb, + eul.numCompteurSbee, + eul.numCompteurSoneb, + eul.dateDebutExemption, + eul.dateFinExemption, + + ul.id, + ul.numeroEtage, + ul.nul, + + p.id, + p.nom, + p.prenom, + p.raisonSociale, + + u.id, + u.nom, + u.prenom, + + ex.id, + ex.annee, + eul.statutEnquete, + eul.representantNom, + eul.representantPrenom, + eul.representantTel, + eul.representantNpi, + cb.id, + cb.code, + cb.standing, + eul.nombrePiscine, + eul.montantLocatifAnnuelCalcule , + us.id, + us.nom, + ul.nul, + ul.numeroEtage, + ul.code, + b.id, + b.nub, + ul.dateConstruction, + ul.montantLocatifAnnuelEstime, + ul.valeurUniteLogementCalcule + ) + FROM EnqueteUniteLogement eul + JOIN eul.uniteLogement ul + JOIN ul.batiment b + JOIN b.parcelle parc + JOIN parc.quartier q + LEFT JOIN eul.personne p + LEFT JOIN eul.user u + LEFT JOIN eul.exercice ex + LEFT JOIN eul.categorieBatiment cb + LEFT JOIN eul.usage us + INNER JOIN SecteurDecoupage sd on sd.quartier=q + WHERE sd.secteur.id IN (:secteurIds) + and q.id = :quartierId + and eul.statutEnquete = :statutEnquete + """, + countQuery = """ + SELECT COUNT(DISTINCT eul.id) + FROM EnqueteUniteLogement eul + JOIN eul.uniteLogement ul + JOIN ul.batiment b + JOIN b.parcelle parc + JOIN parc.quartier q + INNER JOIN SecteurDecoupage sd on sd.quartier= q + WHERE sd.secteur.id IN (:secteurIds) + and q.id = :quartierId + and eul.statutEnquete = :statutEnquete + """ + ) + Page findAllEnqueteUniteLogementByQuartierByStatutToDtoPageable( + @Param("quartierId") Long quartierId, + @Param("secteurIds") List secteurIds, + @Param("statutEnquete") StatutEnquete statutEnquete, + Pageable pageable + ); + + + + @Query( + value = """ + SELECT count(distinct eul.*) + 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 parc on parc.id=b.parcelle_id + JOIN quartier q on q.id=parc.quartier_id + JOIN secteur_decoupage sd on sd.quartier_id=q.id + WHERE sd.secteur_id IN (:secteurIds) + and eul.statut_enquete = :statutEnquete + """, + nativeQuery = true + ) + Integer getNombreEnqueteUniteLogementByUserConnecte( + @Param("secteurIds") List secteurIds, + @Param("statutEnquete") String statutEnquete + ); } diff --git a/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java b/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java index c845582..4c6390d 100644 --- a/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java +++ b/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java @@ -2,10 +2,7 @@ package io.gmss.fiscad.service; import io.gmss.fiscad.controllers.rfu.metier.ImpositionsTfuController; import io.gmss.fiscad.entities.decoupage.*; -import io.gmss.fiscad.entities.infocad.metier.Enquete; -import io.gmss.fiscad.entities.infocad.metier.Parcelle; -import io.gmss.fiscad.entities.infocad.metier.Piece; -import io.gmss.fiscad.entities.infocad.metier.Upload; +import io.gmss.fiscad.entities.infocad.metier.*; import io.gmss.fiscad.entities.infocad.parametre.*; import io.gmss.fiscad.entities.rfu.metier.*; import io.gmss.fiscad.entities.rfu.parametre.*; @@ -18,10 +15,7 @@ import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.paylaods.request.crudweb.*; import io.gmss.fiscad.persistence.repositories.decoupage.*; -import io.gmss.fiscad.persistence.repositories.infocad.metier.EnqueteRepository; -import io.gmss.fiscad.persistence.repositories.infocad.metier.ParcelleRepository; -import io.gmss.fiscad.persistence.repositories.infocad.metier.PieceRepository; -import io.gmss.fiscad.persistence.repositories.infocad.metier.UploadRepository; +import io.gmss.fiscad.persistence.repositories.infocad.metier.*; import io.gmss.fiscad.persistence.repositories.infocad.parametre.*; import io.gmss.fiscad.persistence.repositories.rfu.metier.*; import io.gmss.fiscad.persistence.repositories.rfu.parametre.BaremRfuNonBatiRepository; @@ -77,6 +71,9 @@ public class EntityFromPayLoadService { private final BaremRfuRepository baremRfuRepository ; private final BaremRfuNonBatiRepository baremRfuNonBatiRepository ; private final ImpositionsTfuRepository impositionsTfuRepository ; + private final RueRepository rueRepository ; + private final NatureDomaineRepository natureDomaineRepository ; + private final TypeDomaineRepository typeDomaineRepository ; public CaracteristiqueParcelle getCaracteristiqueParcelleFromPayLoadWeb(CaracteristiqueParcellePayloadWeb caracteristiqueParcellePayloadWeb){ @@ -860,6 +857,7 @@ public class EntityFromPayLoadService { + public BaremRfuBati getBaremRfuBatiFromPayLoadWeb(BaremRfuBatiPayloadWeb baremRfuBatiPayloadWeb){ BaremRfuBati baremRfuBati = new BaremRfuBati(); if (baremRfuBatiPayloadWeb.getId()!=null) @@ -960,4 +958,43 @@ public class EntityFromPayLoadService { return baremRfuNonBati; } + + + + public Parcelle getParcelleFromPayload(ParcellePayLoadWeb parcellePayLoadWeb) { + Parcelle parcelle = new Parcelle(); + if (parcellePayLoadWeb.getId() != null) + parcelle = parcelleRepository.findById(parcellePayLoadWeb.getId()).orElse(new Parcelle()); + + if (parcellePayLoadWeb.getRueId() != null) { + Optional optionalRue = rueRepository.findById(parcellePayLoadWeb.getRueId()); + parcelle.setRue(optionalRue.orElse(null)); + } + Optional optionalNatureDomaine = natureDomaineRepository.findById(parcellePayLoadWeb.getNatureDomaineId()); + if (optionalNatureDomaine.isPresent()) { + parcelle.setNatureDomaine(optionalNatureDomaine.orElse(null)); + } + Optional optionalQuartier = quartierRepository.findById(parcellePayLoadWeb.getQuartierId()); + if (!optionalQuartier.isPresent()) { + parcelle.setQuartier(optionalQuartier.orElse(null)); + } + + Optional optionalTypeDomaine = typeDomaineRepository.findById(parcellePayLoadWeb.getTypeDomaineId()); + if (!optionalTypeDomaine.isPresent()) { + parcelle.setTypeDomaine(optionalTypeDomaine.orElse(null)); + } + parcelle.setP(parcellePayLoadWeb.getP()); + parcelle.setI(parcellePayLoadWeb.getI()); + parcelle.setQ(parcellePayLoadWeb.getQ()); + parcelle.setNup(parcellePayLoadWeb.getNup()); + parcelle.setLatitude(parcellePayLoadWeb.getLatitude()); + parcelle.setLongitude(parcellePayLoadWeb.getLongitude()); + parcelle.setAltitude(parcellePayLoadWeb.getAltitude()); + parcelle.setSituationGeographique(parcellePayLoadWeb.getSituationGeographique()); + parcelle.setNupProvisoire(parcellePayLoadWeb.getNupProvisoire()); + parcelle.setAutreNumeroTitreFoncier(parcellePayLoadWeb.getNumTitreFoncier()); + parcelle.setObservation(parcellePayLoadWeb.getObservation()); + parcelle.setSuperficie(parcellePayLoadWeb.getSuperficie()); + return parcelle; + } } -- 2.49.1 From 04ca166db4e5a96444f5e47fe5db89257f320cb1 Mon Sep 17 00:00:00 2001 From: Aurince AKAKPO Date: Wed, 18 Mar 2026 18:14:21 +0100 Subject: [PATCH 2/2] fusion maj parcelle,batiment,ulo et leur enquete --- .../rfu/metier/EnqueteBatimentController.java | 1 + .../infocad/metier/EnqueteServiceImpl.java | 5 +-- .../rfu/metier/BatimentServiceImpl.java | 33 +++++++++++++++++++ .../metier/EnqueteBatimentServiceImpl.java | 7 ++-- .../EnqueteUniteLogementServiceImpl.java | 7 ++-- .../rfu/metier/UniteLogementServiceImpl.java | 20 +++++++++++ 6 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java b/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java index 05e70f2..140bbf4 100644 --- a/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java +++ b/src/main/java/io/gmss/fiscad/controllers/rfu/metier/EnqueteBatimentController.java @@ -54,6 +54,7 @@ public class EnqueteBatimentController { logger.error(e.getLocalizedMessage()); return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK); } catch (NullPointerException e) { + e.printStackTrace(); logger.error(e.getLocalizedMessage()); return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK); } catch (Exception e) { diff --git a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java index 4ad501b..2d36f9b 100644 --- a/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/infocad/metier/EnqueteServiceImpl.java @@ -94,6 +94,7 @@ public class EnqueteServiceImpl implements EnqueteService { @Override @Transactional public EnquetePayLoadWeb createEnquete(EnquetePayLoadWeb enquetePayLoadWeb) throws BadRequestException { + Optional optionalUser = userRepository.findById(enquetePayLoadWeb.getEnqueteurId()); if (!optionalUser.isPresent()) { throw new BadRequestException("Echec de l'enregistrement : Enquêteur inexistant"); @@ -115,10 +116,6 @@ public class EnqueteServiceImpl implements EnqueteService { throw new BadRequestException("Echec de l'enregistrement : zone inexistante"); } -// if (enquetePayLoadWeb.getParcelleId() == null) { -// throw new ApplicationException("Echec de l'enregistrement : La parcelle non renseignée."); -// } - ParcellePayLoadWeb parcellePayLoadWeb= getParcellePayloadFromEnquetePl(enquetePayLoadWeb); if(enquetePayLoadWeb.getParcelleId()==null){ diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/BatimentServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/BatimentServiceImpl.java index 225d55e..0dd086d 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/BatimentServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/BatimentServiceImpl.java @@ -1,11 +1,15 @@ package io.gmss.fiscad.implementations.rfu.metier; +import io.gmss.fiscad.entities.infocad.metier.Parcelle; import io.gmss.fiscad.entities.rfu.metier.Batiment; +import io.gmss.fiscad.entities.rfu.parametre.CategorieBatiment; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.interfaces.rfu.metier.BatimentService; import io.gmss.fiscad.paylaods.request.crudweb.BatimentPaylaodWeb; +import io.gmss.fiscad.persistence.repositories.infocad.metier.ParcelleRepository; import io.gmss.fiscad.persistence.repositories.rfu.metier.BatimentRepository; +import io.gmss.fiscad.persistence.repositories.rfu.parametre.CategorieBatimentRepository; import io.gmss.fiscad.service.EntityFromPayLoadService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; @@ -19,6 +23,8 @@ import java.util.Optional; public class BatimentServiceImpl implements BatimentService { private final BatimentRepository batimentRepository; + private final ParcelleRepository parcelleRepository; + private final CategorieBatimentRepository categorieBatimentRepository; private final EntityFromPayLoadService entityFromPayLoadService; @@ -27,8 +33,22 @@ public class BatimentServiceImpl implements BatimentService { if (batimentPaylaodWeb.getId() != null) { throw new BadRequestException("Impossible de créer un nouveau batiment ayant un id non null."); } + if (batimentPaylaodWeb.getParcelleId() == null) { + throw new BadRequestException("Impossible de créer un nouveau batiment: La parcelle doit être précisée."); + }else { + if(!parcelleRepository.existsById(batimentPaylaodWeb.getParcelleId())) + throw new BadRequestException("Impossible de créer un nouveau batiment: La parcelle doit être précisée."); + } + + if (batimentPaylaodWeb.getCategorieBatimentId() == null) { + throw new BadRequestException("Impossible de créer un nouveau batiment: La catégorie doit être précisée."); + }else { + if(!categorieBatimentRepository.existsById(batimentPaylaodWeb.getCategorieBatimentId())) + throw new BadRequestException("Impossible de créer un nouveau batiment: La catégorie doit être précisée."); + } Batiment batiment= entityFromPayLoadService.getBatimentFromPayLoadWeb(batimentPaylaodWeb); batiment= batimentRepository.save(batiment); + System.out.println(batiment.getId()); return batimentRepository.findBatimentAvecOccupantCourantToDto(batiment.getId()).orElse(null); } @@ -40,6 +60,19 @@ public class BatimentServiceImpl implements BatimentService { if (!batimentRepository.existsById(batimentPaylaodWeb.getId())) { throw new NotFoundException("Impossible de trouver le batiment spécifié dans notre base de données."); } + if (batimentPaylaodWeb.getParcelleId() == null) { + throw new BadRequestException("Impossible de créer un nouveau batiment: La parcelle doit être précisée."); + }else { + if(!parcelleRepository.existsById(batimentPaylaodWeb.getParcelleId())) + throw new BadRequestException("Impossible de créer un nouveau batiment: La parcelle doit être précisée."); + } + + if (batimentPaylaodWeb.getCategorieBatimentId() == null) { + throw new BadRequestException("Impossible de créer un nouveau batiment: La catégorie doit être précisée."); + }else { + if(!categorieBatimentRepository.existsById(batimentPaylaodWeb.getCategorieBatimentId())) + throw new BadRequestException("Impossible de créer un nouveau batiment: La catégorie doit être précisée."); + } Batiment batiment= entityFromPayLoadService.getBatimentFromPayLoadWeb(batimentPaylaodWeb); batiment= batimentRepository.save(batiment); return batimentRepository.findBatimentAvecOccupantCourantToDto(batiment.getId()).orElse(null); diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java index 3766eff..c623110 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteBatimentServiceImpl.java @@ -48,8 +48,11 @@ public class EnqueteBatimentServiceImpl implements EnqueteBatimentService { @Transactional public EnqueteBatimentPayloadWeb createEnqueteBatiment(EnqueteBatimentPayloadWeb enqueteBatimentPayloadWeb) throws BadRequestException { EnqueteBatiment enqueteBatiment=new EnqueteBatiment(); - if (!batimentRepository.existsById(enqueteBatimentPayloadWeb.getBatimentId())) { - throw new NotFoundException("Impossible d'enregistrer sans le batiment."); + + if(enqueteBatimentPayloadWeb.getBatimentId()!=null) { + if (!batimentRepository.existsById(enqueteBatimentPayloadWeb.getBatimentId())) { + throw new NotFoundException("Impossible d'enregistrer sans le batiment."); + } } BatimentPaylaodWeb batimentPaylaodWeb= getBatimentPayloadFromEnqueteBat(enqueteBatimentPayloadWeb); diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java index 66e68ad..6b04bf2 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/EnqueteUniteLogementServiceImpl.java @@ -47,9 +47,12 @@ public class EnqueteUniteLogementServiceImpl implements EnqueteUniteLogementServ EnqueteUniteLogement enqueteUniteLogement=new EnqueteUniteLogement(); Optional optionalUniteLogement= Optional.empty(); - if (enqueteUniteLogementPayloadWeb.getUniteLogementId() == null) { - throw new BadRequestException("Impossible d'enregistrer une nouvelle enquete d'unité de logement sans l'unité de logement."); + if(enqueteUniteLogementPayloadWeb.getUniteLogementId()!=null) { + if (!uniteLogementRepository.existsById(enqueteUniteLogementPayloadWeb.getUniteLogementId())) { + throw new NotFoundException("Unité de logement inexistant."); + } } + UniteLogementPaylaodWeb uniteLogementPaylaodWeb=getUniteLogementPayloadFromEnqueteUl(enqueteUniteLogementPayloadWeb); if(enqueteUniteLogementPayloadWeb.getId()==null){ diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/UniteLogementServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/UniteLogementServiceImpl.java index 8d79804..739c129 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/UniteLogementServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/UniteLogementServiceImpl.java @@ -5,7 +5,10 @@ import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.interfaces.rfu.metier.UniteLogementService; import io.gmss.fiscad.paylaods.request.crudweb.UniteLogementPaylaodWeb; +import io.gmss.fiscad.persistence.repositories.rfu.metier.BatimentRepository; import io.gmss.fiscad.persistence.repositories.rfu.metier.UniteLogementRepository; +import io.gmss.fiscad.persistence.repositories.rfu.parametre.BaremRfuNonBatiRepository; +import io.gmss.fiscad.persistence.repositories.rfu.parametre.CategorieBatimentRepository; import io.gmss.fiscad.service.EntityFromPayLoadService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; @@ -20,6 +23,8 @@ public class UniteLogementServiceImpl implements UniteLogementService { private final UniteLogementRepository uniteLogementRepository; private final EntityFromPayLoadService entityFromPayLoadService; + private final BatimentRepository batimentRepository; + private final CategorieBatimentRepository categorieBatimentRepository; @@ -28,6 +33,21 @@ public class UniteLogementServiceImpl implements UniteLogementService { if (uniteLogementPaylaodWeb.getId() != null) { throw new BadRequestException("Impossible de créer une nouvelle unité de logement ayant un id non null."); } + + if (uniteLogementPaylaodWeb.getBatimentId() == null) { + throw new BadRequestException("Impossible de créer l'unité de logement: Le batiment doit être précisé."); + }else { + if(!batimentRepository.existsById(uniteLogementPaylaodWeb.getBatimentId())) + throw new BadRequestException("Impossible de créer l'unite de logement: L'unité de logement doit être précisée."); + } + + if (uniteLogementPaylaodWeb.getCategorieBatimentId() == null) { + throw new BadRequestException("Impossible de créer l'unite de logement: La catégorie doit être précisée."); + }else { + if(!categorieBatimentRepository.existsById(uniteLogementPaylaodWeb.getCategorieBatimentId())) + throw new BadRequestException("Impossible de créer l'unite de logement: La catégorie doit être précisée."); + } + UniteLogement uniteLogement = entityFromPayLoadService.getUniteLogementFromPayLoadWeb(uniteLogementPaylaodWeb); uniteLogement = uniteLogementRepository.save(uniteLogement); return uniteLogementRepository.findUniteLogementAvecOccupantCourantToDto(uniteLogement.getId()).orElse(null); -- 2.49.1