diff --git a/src/main/java/io/gmss/fiscad/controllers/rfu/parametre/CampagneController.java b/src/main/java/io/gmss/fiscad/controllers/rfu/parametre/CampagneController.java index 926621c..0e07476 100644 --- a/src/main/java/io/gmss/fiscad/controllers/rfu/parametre/CampagneController.java +++ b/src/main/java/io/gmss/fiscad/controllers/rfu/parametre/CampagneController.java @@ -5,6 +5,7 @@ import io.gmss.fiscad.enums.TypeCampagne; import io.gmss.fiscad.exceptions.*; import io.gmss.fiscad.interfaces.rfu.parametre.CampagneService; import io.gmss.fiscad.paylaods.ApiResponse; +import io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -37,11 +38,11 @@ public class CampagneController { @PostMapping("/create") @PreAuthorize("hasAuthority('CREATE_CAMPAGNE')") - public ResponseEntity createCampagne(@RequestBody @Valid @Validated Campagne campagne) { + public ResponseEntity createCampagne(@RequestBody @Valid @Validated CampagnePayloadWeb campagnePayloadWeb) { try { - campagne = campagneService.createCampagne(campagne); + campagnePayloadWeb = campagneService.createCampagne(campagnePayloadWeb); return new ResponseEntity<>( - new ApiResponse<>(true, campagne, "Campagne créé avec succès."), + new ApiResponse<>(true, campagnePayloadWeb, "Campagne créé avec succès."), HttpStatus.OK ); } catch (HttpClientErrorException.MethodNotAllowed e) { @@ -62,10 +63,10 @@ public class CampagneController { @PutMapping("/update/{id}") @PreAuthorize("hasAuthority('UPDATE_CAMPAGNE')") - public ResponseEntity updateCampagne(@PathVariable Long id, @RequestBody Campagne campagne) { + public ResponseEntity updateCampagne(@PathVariable Long id, @RequestBody CampagnePayloadWeb campagnePayloadWeb) { try { return new ResponseEntity<>( - new ApiResponse<>(true, campagneService.updateCampagne(id, campagne), "Campagne mis à jour avec succès."), + new ApiResponse<>(true, campagneService.updateCampagne(id, campagnePayloadWeb), "Campagne mis à jour avec succès."), HttpStatus.OK ); } catch (HttpClientErrorException.MethodNotAllowed e) { @@ -207,5 +208,58 @@ public class CampagneController { return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK); } } + + + @GetMapping("/by-exercice-id/{exerciceId}") + @PreAuthorize("hasAuthority('READ_CAMPAGNE')") + public ResponseEntity getCampagneByType(@PathVariable Long exerciceId) { + + try { + return new ResponseEntity<>( + new ApiResponse<>(true, campagneService.getCampagneByExerciceId(exerciceId), "Liste des campagne par type 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("/page/by-exercice-id/{exerciceId}") + @PreAuthorize("hasAuthority('READ_CAMPAGNE')") + public ResponseEntity getCampagneByType(@PathVariable Long exerciceId,@RequestParam int pageNo, @RequestParam int pageSize) { + + try { + Pageable pageable = PageRequest.of(pageNo, pageSize); + return new ResponseEntity<>( + new ApiResponse<>(true, campagneService.getCampagneByExerciceId(exerciceId,pageable), "Liste des campagne par type 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/entities/rfu/parametre/Campagne.java b/src/main/java/io/gmss/fiscad/entities/rfu/parametre/Campagne.java index be82fd2..aaa3840 100644 --- a/src/main/java/io/gmss/fiscad/entities/rfu/parametre/Campagne.java +++ b/src/main/java/io/gmss/fiscad/entities/rfu/parametre/Campagne.java @@ -39,12 +39,9 @@ public class Campagne extends BaseEntity implements Serializable { private LocalDate dateFin; @Enumerated(EnumType.STRING) private TypeCampagne typeCampagne; -// @JsonIgnore -// @OneToMany(mappedBy = "campagne") -// private List equipes; -// @JsonIgnore -// @OneToMany(mappedBy = "campagne") -// private List enquetes; + @ManyToOne + private Exercice exercice ; + } diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/parametre/CampagneServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/parametre/CampagneServiceImpl.java index a0f2195..5781e8a 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/parametre/CampagneServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/parametre/CampagneServiceImpl.java @@ -1,11 +1,16 @@ package io.gmss.fiscad.implementations.rfu.parametre; +import io.gmss.fiscad.entities.infocad.metier.Parcelle; +import io.gmss.fiscad.entities.rfu.metier.Batiment; import io.gmss.fiscad.entities.rfu.parametre.Campagne; import io.gmss.fiscad.enums.TypeCampagne; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.interfaces.rfu.parametre.CampagneService; +import io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb; import io.gmss.fiscad.persistence.repositories.rfu.parametre.CampagneRepository; +import io.gmss.fiscad.service.EntityFromPayLoadService; +import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -14,29 +19,35 @@ import java.util.List; import java.util.Optional; @Service +@AllArgsConstructor public class CampagneServiceImpl implements CampagneService { private final CampagneRepository campagneRepository; + private final EntityFromPayLoadService entityFromPayLoadService; - public CampagneServiceImpl(CampagneRepository campagneRepository) { - this.campagneRepository = campagneRepository; - } @Override - public Campagne createCampagne(Campagne campagne) throws BadRequestException { - if (campagne.getId() != null) { + public CampagnePayloadWeb createCampagne(CampagnePayloadWeb campagnePayloadWeb) throws BadRequestException { + if (campagnePayloadWeb.getId() != null) { throw new BadRequestException("Impossible de créer une nouvelle campgne ayant un id non null."); } - return campagneRepository.save(campagne); + Campagne campagne= entityFromPayLoadService.getCampagneFromPayLoadWeb(campagnePayloadWeb); + campagne= campagneRepository.save(campagne); + + return campagneRepository.findPayloadById(campagne.getId()).orElse(null); + } @Override - public Campagne updateCampagne(Long id, Campagne campagne) throws NotFoundException { - if (campagne.getId() == null) { + public CampagnePayloadWeb updateCampagne(Long id, CampagnePayloadWeb campagnePayloadWeb) throws NotFoundException { + if (campagnePayloadWeb.getId() == null) { throw new BadRequestException("Impossible de mettre à jour une nouvelle campagne ayant un id null."); } - if (!campagneRepository.existsById(campagne.getId())) { + if (!campagneRepository.existsById(campagnePayloadWeb.getId())) { throw new NotFoundException("Impossible de trouver la campagne spécifiée dans notre base de données."); } - return campagneRepository.save(campagne); + Campagne campagne= entityFromPayLoadService.getCampagneFromPayLoadWeb(campagnePayloadWeb); + campagne= campagneRepository.save(campagne); + + return campagneRepository.findPayloadById(campagne.getId()).orElse(null); } @Override @@ -49,13 +60,13 @@ public class CampagneServiceImpl implements CampagneService { } } @Override - public Page getCampagneList(Pageable pageable) { - return campagneRepository.findAll(pageable); + public Page getCampagneList(Pageable pageable) { + return campagneRepository.findAllPayload(pageable); } @Override - public List getCampagneList() { - return campagneRepository.findAll(); + public List getCampagneList() { + return campagneRepository.findAllPayload(); } @Override @@ -64,8 +75,18 @@ public class CampagneServiceImpl implements CampagneService { } @Override - public Optional getCampagneById(Long id) { - return campagneRepository.findById(id); + public Optional getCampagneById(Long id) { + return campagneRepository.findPayloadById(id); + } + + @Override + public List getCampagneByExerciceId(Long exerciceId) { + return campagneRepository.findAllPayloadByExerciceId(exerciceId); + } + + @Override + public Page getCampagneByExerciceId(Long exerciceId, Pageable pageable) { + return campagneRepository.findAllPayloadByExerciceId(exerciceId,pageable); } } diff --git a/src/main/java/io/gmss/fiscad/interfaces/rfu/parametre/CampagneService.java b/src/main/java/io/gmss/fiscad/interfaces/rfu/parametre/CampagneService.java index eafea52..c61e91a 100644 --- a/src/main/java/io/gmss/fiscad/interfaces/rfu/parametre/CampagneService.java +++ b/src/main/java/io/gmss/fiscad/interfaces/rfu/parametre/CampagneService.java @@ -4,6 +4,7 @@ import io.gmss.fiscad.entities.rfu.parametre.Campagne; import io.gmss.fiscad.enums.TypeCampagne; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; +import io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -12,18 +13,21 @@ import java.util.Optional; public interface CampagneService { - Campagne createCampagne(Campagne campagne) throws BadRequestException; + CampagnePayloadWeb createCampagne(CampagnePayloadWeb campagnePayloadWeb) throws BadRequestException; - Campagne updateCampagne(Long id, Campagne campagne) throws NotFoundException; + CampagnePayloadWeb updateCampagne(Long id, CampagnePayloadWeb campagnePayloadWeb) throws NotFoundException; void deleteCampagne(Long id) throws NotFoundException; - Page getCampagneList(Pageable pageable); + Page getCampagneList(Pageable pageable); - List getCampagneList(); + List getCampagneList(); List getCampagnesByType(TypeCampagne typeCampagne); - Optional getCampagneById(Long id); + Optional getCampagneById(Long id); + List getCampagneByExerciceId(Long exerciceId); + Page getCampagneByExerciceId(Long exerciceId,Pageable pageable); + } diff --git a/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/CampagnePayloadWeb.java b/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/CampagnePayloadWeb.java new file mode 100644 index 0000000..9d11e2d --- /dev/null +++ b/src/main/java/io/gmss/fiscad/paylaods/request/crudweb/CampagnePayloadWeb.java @@ -0,0 +1,42 @@ +package io.gmss.fiscad.paylaods.request.crudweb; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.gmss.fiscad.deserializer.LocalDateDeserializer; +import io.gmss.fiscad.entities.rfu.parametre.Exercice; +import io.gmss.fiscad.enums.TypeCampagne; +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@NoArgsConstructor +@Data +public class CampagnePayloadWeb { + + private Long id; + private String refAdministrative; + private String nom; + @JsonFormat(pattern = "dd-MM-yyyy") + @JsonDeserialize(using = LocalDateDeserializer.class) + private LocalDate dateDebut; + @JsonFormat(pattern = "dd-MM-yyyy") + @JsonDeserialize(using = LocalDateDeserializer.class) + private LocalDate dateFin; + @Enumerated(EnumType.STRING) + private TypeCampagne typeCampagne; + private Long exerciceId ; + private Integer exerciceAnnee ; + + public CampagnePayloadWeb(Long id, String refAdministrative, String nom, LocalDate dateDebut, LocalDate dateFin, TypeCampagne typeCampagne, Long exerciceId, Integer exerciceAnnee) { + this.id = id; + this.refAdministrative = refAdministrative; + this.nom = nom; + this.dateDebut = dateDebut; + this.dateFin = dateFin; + this.typeCampagne = typeCampagne; + this.exerciceId = exerciceId; + this.exerciceAnnee = exerciceAnnee; + } +} diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/parametre/CampagneRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/parametre/CampagneRepository.java index f8f58a1..a34c038 100644 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/parametre/CampagneRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/parametre/CampagneRepository.java @@ -2,11 +2,114 @@ package io.gmss.fiscad.persistence.repositories.rfu.parametre; import io.gmss.fiscad.entities.rfu.parametre.Campagne; import io.gmss.fiscad.enums.TypeCampagne; +import io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.Optional; public interface CampagneRepository extends JpaRepository { List findAllByTypeCampagne(TypeCampagne typeCampagne); + + @Query(""" + SELECT new io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb( + c.id, + c.refAdministrative, + c.nom, + c.dateDebut, + c.dateFin, + c.typeCampagne, + e.id, + e.annee + ) + FROM Campagne c + LEFT JOIN c.exercice e + WHERE c.id = :id + """) + Optional findPayloadById(@Param("id") Long id); + + @Query(""" + SELECT new io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb( + c.id, + c.refAdministrative, + c.nom, + c.dateDebut, + c.dateFin, + c.typeCampagne, + e.id, + e.annee + ) + FROM Campagne c + LEFT JOIN c.exercice e + ORDER BY c.dateDebut DESC + """) + List findAllPayload(); + + @Query(value = """ + SELECT new io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb( + c.id, + c.refAdministrative, + c.nom, + c.dateDebut, + c.dateFin, + c.typeCampagne, + e.id, + e.annee + ) + FROM Campagne c + LEFT JOIN c.exercice e + """, + countQuery = """ + SELECT COUNT(c) + FROM Campagne c + """) + Page findAllPayload(Pageable pageable); + + @Query(""" + SELECT new io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb( + c.id, + c.refAdministrative, + c.nom, + c.dateDebut, + c.dateFin, + c.typeCampagne, + e.id, + e.annee + ) + FROM Campagne c + LEFT JOIN c.exercice e + WHERE e.id = :exerciceId + ORDER BY c.dateDebut DESC + """) + List findAllPayloadByExerciceId(@Param("exerciceId") Long exerciceId); + + + @Query(value = """ + SELECT new io.gmss.fiscad.paylaods.request.crudweb.CampagnePayloadWeb( + c.id, + c.refAdministrative, + c.nom, + c.dateDebut, + c.dateFin, + c.typeCampagne, + e.id, + e.annee + ) + FROM Campagne c + LEFT JOIN c.exercice e + WHERE e.id = :exerciceId + """, + countQuery = """ + SELECT COUNT(c) + FROM Campagne c + WHERE c.exercice.id = :exerciceId + """) + Page findAllPayloadByExerciceId( + @Param("exerciceId") Long exerciceId, + Pageable pageable); } diff --git a/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java b/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java index 9fb801f..cf52784 100644 --- a/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java +++ b/src/main/java/io/gmss/fiscad/service/EntityFromPayLoadService.java @@ -1231,4 +1231,25 @@ public class EntityFromPayLoadService { return participer ; } + + public Campagne getCampagneFromPayLoadWeb(CampagnePayloadWeb campagnePayloadWeb) { + Campagne campagne =new Campagne(); + if(campagnePayloadWeb.getId()!=null) + campagne = campagneRepository.findById(campagnePayloadWeb.getId()).orElse(new Campagne()); + + if (campagnePayloadWeb.getExerciceId() != null) { + Exercice exercice = new Exercice(); + exercice.setId(campagnePayloadWeb.getExerciceId()); + campagne.setExercice(exercice); + } + + campagne.setId(campagnePayloadWeb.getId()); + campagne.setDateDebut(campagnePayloadWeb.getDateDebut()); + campagne.setDateFin(campagnePayloadWeb.getDateFin()); + campagne.setTypeCampagne(campagnePayloadWeb.getTypeCampagne()); + campagne.setRefAdministrative(campagnePayloadWeb.getRefAdministrative()); + campagne.setNom(campagnePayloadWeb.getNom()); + + return campagne ; + } }