Commit 279e3e25 authored by AnasJeg's avatar AnasJeg

demo3-fc-v2

parent 5b9938d3
No preview for this file type
...@@ -24,10 +24,17 @@ public class ScheduleService { ...@@ -24,10 +24,17 @@ public class ScheduleService {
this.demandeService = demandeService; this.demandeService = demandeService;
} }
@Scheduled(cron = "0 0 10 * * *", zone = "Africa/Casablanca") @Scheduled(cron = "0 0 9 * * *", zone = "Africa/Casablanca")
public void scheduleTaskWithFixedDelay(){ public void scheduleTaskWithFixedDelay(){
log.info("Fixed Task :: Execution Time - {}", dateTimeFormatter.format(LocalDateTime.now())); log.info("Fixed Task :: Execution Time - {}", dateTimeFormatter.format(LocalDateTime.now()));
// demandeService.findDemandesByExpirationDateBeforeAndStatut // demandeService.findDemandesByExpirationDateBeforeAndStatut
demandeService.cancelExpiredDm(); demandeService.cancelExpiredDm();
} }
@Scheduled(cron = "0 28 17 * * *", zone = "Africa/Casablanca")
public void scheduleExpiredSoonTask(){
log.info("Fixed Expired Soon Task :: Execution Time - {}", dateTimeFormatter.format(LocalDateTime.now()));
demandeService.findExpiringTomorrow();
// demandeService.cancelExpiredDm();
}
} }
...@@ -2,25 +2,19 @@ package bmci.esign.backendend.controllers; ...@@ -2,25 +2,19 @@ package bmci.esign.backendend.controllers;
import bmci.esign.backendend.dto.DemandeDto; import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.request.FilterDto; import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.request.GlobaleRequestDto; import bmci.esign.backendend.dto.request.RequestId;
import bmci.esign.backendend.dto.response.DashboardChart; import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.response.TableDto; import bmci.esign.backendend.dto.response.GlobalTableDto;
import bmci.esign.backendend.models.ResponseModelStandard; import bmci.esign.backendend.models.ResponseModelStandard;
import bmci.esign.backendend.models.enums.EStatut; import bmci.esign.backendend.models.enums.EStatut;
import bmci.esign.backendend.services.DemandeService; import bmci.esign.backendend.services.DemandeService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
@RestController @RestController
...@@ -68,22 +62,37 @@ public class DemandeController { ...@@ -68,22 +62,37 @@ public class DemandeController {
} }
} }
@GetMapping("/canceled") @GetMapping("/by")
public ResponseModelStandard<Long> canceledDemande(@RequestParam( name = "idDemand") Long id){ public ResponseModelStandard<Long> canceledDemande(@RequestParam( name = "idDemand") Long id){
try { try {
DemandeDto demandeDto = demandeService.getDemande(id); DemandeDto demandeDto = demandeService.getDemande(id);
if(demandeDto.getStatut().equals(EStatut.WAITING.name())){ System.out.println(demandeDto);
String message = demandeService.cancelDemand(demandeDto); log.info("STATUT {}", demandeDto.getStatut());
if(message.equals("success")){ // if(demandeDto.getStatut().equals(EStatut.WAITING.name())){
return new ResponseModelStandard<>("000"); // System.out.println("demandeDto -> "+demandeDto);
// String message = demandeService.cancelDemand(demandeDto);
// if(message.equals("success")){
// return new ResponseModelStandard<>("000");
// }
// }
return new ResponseModelStandard<>("099");
}catch (Exception e){
return new ResponseModelStandard<>("099");
}
} }
@PostMapping("/canceled")
public ResponseModelStandard<Long> byIdTest(@RequestBody RequestId idDemand){
try {
String result =demandeService.cancelDemandById(idDemand);
if(result.equals("success")){
return new ResponseModelStandard<>("000");
} }
return new ResponseModelStandard<>("099"); return new ResponseModelStandard<>("099");
}catch (Exception e){ }catch (Exception e){
return new ResponseModelStandard<>("099"); return new ResponseModelStandard<>("099");
} }
} }
@GetMapping("/getForUser") @GetMapping("/getForUser")
public ResponseModelStandard<List<DemandeDto>> getForUserDemande(@RequestParam(name = "id") Long id){ public ResponseModelStandard<List<DemandeDto>> getForUserDemande(@RequestParam(name = "id") Long id){
try { try {
...@@ -133,7 +142,7 @@ public class DemandeController { ...@@ -133,7 +142,7 @@ public class DemandeController {
} }
@PostMapping("/global") @PostMapping("/global")
public ResponseModelStandard<Page<TableDto>> loadGlobalFilteredDm(@RequestBody GlobaleRequestDto dto){ public ResponseModelStandard<Page<GlobalTableDto>> loadGlobalFilteredDm(@RequestBody FilterDto dto){
try { try {
if(dto.getPage() == null || dto.getSize() == null || dto.getPage() < 0 || dto.getSize() <= 0){ if(dto.getPage() == null || dto.getSize() == null || dto.getPage() < 0 || dto.getSize() <= 0){
return new ResponseModelStandard<>("099","Page or Size cannot be negative or Null"); return new ResponseModelStandard<>("099","Page or Size cannot be negative or Null");
...@@ -149,4 +158,9 @@ public class DemandeController { ...@@ -149,4 +158,9 @@ public class DemandeController {
return new ResponseModelStandard<>("000", demandeService.cancelExpiredDm()); return new ResponseModelStandard<>("000", demandeService.cancelExpiredDm());
} }
@PostMapping("/tomorrow")
public ResponseModelStandard<Integer> findExpiringTomorrow(){
return new ResponseModelStandard<>("000", demandeService.findExpiringTomorrow());
}
} }
...@@ -41,7 +41,7 @@ public class NotificationController { ...@@ -41,7 +41,7 @@ public class NotificationController {
@PostMapping("/update/status") @PostMapping("/update/status")
public ResponseModelStandard<NotificationDto> updateStatus(@RequestParam Long id) { public ResponseModelStandard<NotificationDto> updateStatus(@RequestParam Long id) {
try { try {
notificationService.changeStatusByDmId(id, null,ENotification.VIEW); notificationService.changeStatusByDmId(id, null,null,ENotification.VIEW);
return new ResponseModelStandard<>("000"); return new ResponseModelStandard<>("000");
}catch (Exception e){ }catch (Exception e){
return new ResponseModelStandard<>("099"); return new ResponseModelStandard<>("099");
......
package bmci.esign.backendend.controllers; package bmci.esign.backendend.controllers;
import bmci.esign.backendend.dto.SignatureDto; import bmci.esign.backendend.dto.SignatureDto;
import bmci.esign.backendend.models.ResponseModelStandard; import bmci.esign.backendend.models.ResponseModelStandard;
import bmci.esign.backendend.services.SignatureService; import bmci.esign.backendend.services.SignatureService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RestController
@RequestMapping("/signature") @RequestMapping("/signature")
public class SignatureController { public class SignatureController {
private final SignatureService signatureService;
@Autowired public SignatureController(SignatureService signatureService) {
private SignatureService signatureService; this.signatureService = signatureService;
}
@PostMapping("/add") @PostMapping("/add")
public ResponseModelStandard<Long> addSignature(@RequestBody SignatureDto signatureDto){ public ResponseModelStandard<Long> addSignature(@RequestBody SignatureDto signatureDto){
...@@ -28,10 +28,9 @@ public class SignatureController { ...@@ -28,10 +28,9 @@ public class SignatureController {
@GetMapping("/get") @GetMapping("/get")
public ResponseModelStandard<List<SignatureDto>> getSignature(@RequestParam(name = "id") Long id){ public ResponseModelStandard<SignatureDto> getSignature(@RequestParam(name = "id") Long id){
try { try {
List<SignatureDto> signatureDtos = signatureService.findAllByUserId(id); return new ResponseModelStandard<>("000", signatureService.findByUserId(id));
return new ResponseModelStandard<>("000", signatureDtos);
}catch (Exception e){ }catch (Exception e){
return new ResponseModelStandard<>("099"); return new ResponseModelStandard<>("099");
} }
......
...@@ -4,9 +4,12 @@ import bmci.esign.backendend.dto.DemandeDto; ...@@ -4,9 +4,12 @@ import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.models.MailRequest; import bmci.esign.backendend.models.MailRequest;
import bmci.esign.backendend.models.ResponseModelStandard; import bmci.esign.backendend.models.ResponseModelStandard;
import bmci.esign.backendend.models.enums.EMailStatus; import bmci.esign.backendend.models.enums.EMailStatus;
import bmci.esign.backendend.models.enums.ENotification;
import bmci.esign.backendend.models.enums.EStatut; import bmci.esign.backendend.models.enums.EStatut;
import bmci.esign.backendend.repositories.MailRequestRepository; import bmci.esign.backendend.repositories.MailRequestRepository;
import bmci.esign.backendend.services.DemandeService; import bmci.esign.backendend.services.DemandeService;
import bmci.esign.backendend.services.NotificationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Date; import java.util.Date;
...@@ -14,25 +17,32 @@ import java.util.stream.Collectors; ...@@ -14,25 +17,32 @@ import java.util.stream.Collectors;
@RestController @RestController
@RequestMapping("/token") @RequestMapping("/token")
@Slf4j
public class TokenController { public class TokenController {
private final MailRequestRepository mailRequestRepository; private final MailRequestRepository mailRequestRepository;
private final DemandeService demandeService; private final DemandeService demandeService;
private final NotificationService notificationService;
public TokenController(MailRequestRepository mailRequestRepository, DemandeService demandeService) { public TokenController(MailRequestRepository mailRequestRepository, DemandeService demandeService, NotificationService notificationService) {
this.mailRequestRepository = mailRequestRepository; this.mailRequestRepository = mailRequestRepository;
this.demandeService = demandeService; this.demandeService = demandeService;
this.notificationService = notificationService;
} }
@GetMapping("/getToken") @GetMapping("/getToken")
public ResponseModelStandard<DemandeDto> getToken(@RequestParam(name = "token") String token){ public ResponseModelStandard<DemandeDto> getToken(@RequestParam(name = "token") String token){
log.info("getToken {}",token);
MailRequest mailRequest = mailRequestRepository.findByToken(token); MailRequest mailRequest = mailRequestRepository.findByToken(token);
log.info("mailRequest {}",mailRequest);
if(mailRequest != null){ if(mailRequest != null){
if(mailRequest.getStatus().equals(EMailStatus.SENT)){ if(mailRequest.getStatus().equals(EMailStatus.SENT)){
mailRequest.setStatus(EMailStatus.CLICKED); mailRequest.setStatus(EMailStatus.CLICKED);
log.info("CLICKED");
mailRequestRepository.save(mailRequest); mailRequestRepository.save(mailRequest);
log.warn("CHANGE NOTIFICATION STATUS");
notificationService.changeStatusByDmId(null, mailRequest.getDemandeId(), mailRequest.getDestination(),ENotification.VIEW);
} }
DemandeDto demandeDto = demandeService.getDemande(mailRequest.getDemandeId()); DemandeDto demandeDto = demandeService.getDemande(mailRequest.getDemandeId());
if(demandeDto.getStatut().equals(EStatut.COMPLETE.name())){ if(demandeDto.getStatut().equals(EStatut.COMPLETE.name())){
......
...@@ -4,15 +4,15 @@ import bmci.esign.backendend.models.TypeDocument; ...@@ -4,15 +4,15 @@ import bmci.esign.backendend.models.TypeDocument;
import bmci.esign.backendend.models.enums.EDemande; import bmci.esign.backendend.models.enums.EDemande;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@Data @Getter
@Setter
@Builder
@AllArgsConstructor @NoArgsConstructor @AllArgsConstructor @NoArgsConstructor
public class DemandeDto implements Serializable { public class DemandeDto implements Serializable {
private Long id; private Long id;
...@@ -42,4 +42,24 @@ public class DemandeDto implements Serializable { ...@@ -42,4 +42,24 @@ public class DemandeDto implements Serializable {
public String getStringDemand(){ public String getStringDemand(){
return edemande; return edemande;
} }
@Override
public String toString() {
return "DemandeDto{" +
"id=" + id +
", confidentiality='" + confidentiality + '\'' +
", priority='" + priority + '\'' +
", objetMail='" + objetMail + '\'' +
", message='" + message + '\'' +
", statut='" + statut + '\'' +
", edemande='" + edemande + '\'' +
", user=" + user +
", typeDocument=" + typeDocument +
", expirationDate=" + expirationDate +
", creationDate=" + creationDate +
", modificationDate=" + modificationDate +
", destinataires=" + destinataires.size() +
", documents=" + documents.size() +
'}';
}
} }
...@@ -21,6 +21,7 @@ public class DestinataireDto { ...@@ -21,6 +21,7 @@ public class DestinataireDto {
private String statut; private String statut;
private String envoie; private String envoie;
private int place; private int place;
private String telephone;
@JsonIgnore @JsonIgnore
private DemandeDto demande; private DemandeDto demande;
......
...@@ -18,7 +18,7 @@ public class UserDto { ...@@ -18,7 +18,7 @@ public class UserDto {
private Long id; private Long id;
private String firstname; private String firstname;
private String lastname; private String lastname;
private String avatar; private String telephone;
private String email; private String email;
private String password; private String password;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ") @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
......
...@@ -11,10 +11,9 @@ import java.time.LocalDate; ...@@ -11,10 +11,9 @@ import java.time.LocalDate;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class FilterDto { public class FilterDto {
private int page; private Integer page;
private int size; private Integer size;
private String email; private String email;
private LocalDate createdDate; private LocalDate createdDate;
private String demandeType; private String demandeType;
private String statut; private String statut;
...@@ -27,6 +26,7 @@ public class FilterDto { ...@@ -27,6 +26,7 @@ public class FilterDto {
", email='" + email + '\'' + ", email='" + email + '\'' +
", createdDate=" + createdDate + ", createdDate=" + createdDate +
", demandeType='" + demandeType + '\'' + ", demandeType='" + demandeType + '\'' +
", statut='" + statut + '\'' +
'}'; '}';
} }
} }
\ No newline at end of file
package bmci.esign.backendend.dto.request; package bmci.esign.backendend.dto.request;
import bmci.esign.backendend.models.enums.EStatut;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDate;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class GlobaleRequestDto { public class GlobaleRequestDto {
private String email;
private Integer page; private Integer page;
private Integer size; private Integer size;
private String creationDate; private String email;
private EStatut statut; private LocalDate createdDate;
private String statut;
private String type; private String type;
@Override
public String toString() {
return "GlobaleRequestDto{" +
"page=" + page +
", size=" + size +
", email='" + email + '\'' +
", createdDate=" + createdDate +
", statut='" + statut + '\'' +
", type='" + type + '\'' +
'}';
}
} }
package bmci.esign.backendend.dto.request;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class RequestId {
private Long demandId;
}
\ No newline at end of file
package bmci.esign.backendend.dto.response;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.DocumentDto;
import bmci.esign.backendend.models.TypeDocument;
import bmci.esign.backendend.models.User;
import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class GlobalTableDto implements Serializable {
private Long id;
private String confidentiality;
private String priority;
private String objetMail;
private String message;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date creationDate;
private String demandeType;
private TypeDocument typeDocument;
private List<DestinataireDto> destinataires;
private EStatut statut;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expirationDate;
private List<DocumentDto> documents;
private User currentUser;
public void setDemandeTypeBasedOnUser(boolean isSender, boolean isRecipient) {
if (isSender) {
this.demandeType = "Demande des signatures";
} else if (isRecipient) {
this.demandeType = "Demandes à signer";
} else {
this.demandeType = "";
}
}
@Override
public String toString() {
return "GlobalTableDto{" +
"id=" + id +
", creationDate=" + creationDate +
", demandeType=" + demandeType +
", statut='" + statut + '\'' +
", typeDocument=" + typeDocument +
", expirationDate=" + expirationDate +
", destinataires=" + destinataires +
", documents=" + documents +
'}';
}
}
package bmci.esign.backendend.dto.response;
import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
@Getter
@Setter
@AllArgsConstructor
public class TableDto implements Serializable {
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date creationDate;
private String demandeType;
private String typeDocument;
// private List<RecipientDto> destinataires;
private int destinataires;
private String statut;
public String getStatut() {
return EStatut.valueOf(statut).getDisplayName();
}
}
...@@ -13,7 +13,7 @@ import lombok.Setter; ...@@ -13,7 +13,7 @@ import lombok.Setter;
public class TableResponseDto { public class TableResponseDto {
@SerializedName("data") @SerializedName("data")
private TableDto data; private GlobalTableDto data;
private int totalElements; private int totalElements;
......
package bmci.esign.backendend.dto.services; package bmci.esign.backendend.dto.services;
import bmci.esign.backendend.dto.response.DashboardChart; import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.response.GlobalTableDto;
import bmci.esign.backendend.models.Demande;
import bmci.esign.backendend.models.User;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import java.util.Collection; import java.util.Collection;
...@@ -19,5 +22,4 @@ public interface IMapClassWithDto<E,D> { ...@@ -19,5 +22,4 @@ public interface IMapClassWithDto<E,D> {
Page<D> convertResponseToPageDto(Page<E> entityList, Class<D> outCLass); Page<D> convertResponseToPageDto(Page<E> entityList, Class<D> outCLass);
List<DashboardChart> mappingData(List<DashboardChart> chartList); List<DashboardChart> mappingData(List<DashboardChart> chartList);
} }
package bmci.esign.backendend.dto.services; package bmci.esign.backendend.dto.services;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.DocumentDto;
import bmci.esign.backendend.dto.response.DashboardChart; import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.response.GlobalTableDto;
import bmci.esign.backendend.models.Demande;
import bmci.esign.backendend.models.Destinataire;
import bmci.esign.backendend.models.Document;
import bmci.esign.backendend.models.User;
import bmci.esign.backendend.models.enums.EStatut; import bmci.esign.backendend.models.enums.EStatut;
import org.modelmapper.Conditions; import org.modelmapper.Conditions;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
...@@ -17,6 +24,7 @@ import java.util.List; ...@@ -17,6 +24,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
public class MapClassWithDto<E, D> implements IMapClassWithDto<E, D> { public class MapClassWithDto<E, D> implements IMapClassWithDto<E, D> {
...@@ -96,4 +104,13 @@ public class MapClassWithDto<E, D> implements IMapClassWithDto<E, D> { ...@@ -96,4 +104,13 @@ public class MapClassWithDto<E, D> implements IMapClassWithDto<E, D> {
} }
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
// public Page<GlobalTableDto> convertResponseToPageDto(Page<Demande> demandes, Class<GlobalTableDto> dtoClass, User currentUser) {
// return demandes.map(demande -> {
// GlobalTableDto dto = modelMapper.map(demande, dtoClass);
// dto.setCurrentUser(currentUser);
// dto.setDemandeTypeBasedOnUser(currentUser);
// return dto;
// });
// }
} }
\ No newline at end of file
...@@ -15,7 +15,6 @@ import java.util.Date; ...@@ -15,7 +15,6 @@ import java.util.Date;
@MappedSuperclass @MappedSuperclass
@EntityListeners(AuditingEntityListener.class) @EntityListeners(AuditingEntityListener.class)
public abstract class AuditorEntity { public abstract class AuditorEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id; protected Long id;
......
...@@ -3,20 +3,21 @@ package bmci.esign.backendend.models; ...@@ -3,20 +3,21 @@ package bmci.esign.backendend.models;
import bmci.esign.backendend.models.enums.EDemande; import bmci.esign.backendend.models.enums.EDemande;
import bmci.esign.backendend.models.enums.EStatut; import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Getter
@Setter
@Builder
@Entity @Entity
public class Demande extends AuditorEntity implements Serializable { public class Demande extends AuditorEntity implements Serializable {
private String confidentiality; private String confidentiality;
private String priority; private String priority;
private String objetMail; private String objetMail;
...@@ -30,7 +31,7 @@ public class Demande extends AuditorEntity implements Serializable { ...@@ -30,7 +31,7 @@ public class Demande extends AuditorEntity implements Serializable {
@Column(length = 50) @Column(length = 50)
private EDemande edemande; private EDemande edemande;
@ManyToOne @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id") @JoinColumn(name = "user_id")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private User user; private User user;
...@@ -43,10 +44,28 @@ public class Demande extends AuditorEntity implements Serializable { ...@@ -43,10 +44,28 @@ public class Demande extends AuditorEntity implements Serializable {
private Date expirationDate; private Date expirationDate;
@OneToMany(mappedBy = "demande", fetch = FetchType.LAZY) @OneToMany(mappedBy = "demande", fetch = FetchType.LAZY)
// @JsonManagedReference private List<Destinataire> destinataires = new ArrayList<>();
private List<Destinataire> destinataires;
@OneToMany(mappedBy = "demande")
private List<Document> documents;
@OneToMany(mappedBy = "demande", fetch = FetchType.LAZY)
private List<Document> documents = new ArrayList<>();
@Override
public String toString() {
return "Demande{" +
"confidentiality='" + confidentiality + '\'' +
", priority='" + priority + '\'' +
", objetMail='" + objetMail + '\'' +
", message='" + message + '\'' +
", statut=" + statut +
", edemande=" + edemande +
", user=" + user +
", typeDocument=" + typeDocument +
", expirationDate=" + expirationDate +
", destinataires=" + destinataires +
", documents=" + documents +
", id=" + id +
", creationDate=" + creationDate +
", modificationDate=" + modificationDate +
'}';
}
} }
package bmci.esign.backendend.models; package bmci.esign.backendend.models;
import bmci.esign.backendend.models.enums.EStatut; import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp; import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
@NoArgsConstructor @AllArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Entity @Entity
public class Destinataire { public class Destinataire {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
private String name; private String name;
private String email; private String email;
private String role; private String role;
...@@ -25,15 +27,18 @@ public class Destinataire { ...@@ -25,15 +27,18 @@ public class Destinataire {
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
@Column(length = 50) @Column(length = 50)
private EStatut statut; private EStatut statut;
private String envoie; private String envoie;
private int place; private int place;
@ManyToOne private String telephone;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "demande_id") @JoinColumn(name = "demande_id")
@JsonIgnore
private Demande demande; private Demande demande;
@ManyToOne @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id") @JoinColumn(name = "user_id")
private User recipient; private User recipient;
...@@ -45,6 +50,6 @@ public class Destinataire { ...@@ -45,6 +50,6 @@ public class Destinataire {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Date modificationDate; private Date modificationDate;
@OneToMany(mappedBy = "destinataire") @OneToMany(mappedBy = "destinataire", fetch = FetchType.LAZY)
private List<Position> positions; private List<Position> positions = new ArrayList<>();
} }
...@@ -6,6 +6,7 @@ import lombok.*; ...@@ -6,6 +6,7 @@ import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
@Getter @Getter
@Setter @Setter
...@@ -16,16 +17,23 @@ public class MailRequest extends AuditorEntity implements Serializable { ...@@ -16,16 +17,23 @@ public class MailRequest extends AuditorEntity implements Serializable {
private String destination; private String destination;
private String email_type; private String email_type;
private long demandeId; private long demandeId;
private String processCamundaId ; private String processCamundaId;
@Column(unique = true) @Column(unique = true)
private String token; private String token;
private String expiration_date; // private String expiration_date;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "expiration_date")
private Date expirationDate;
private String name; private String name;
private String userMessage; private String userMessage;
private EMailStatus status; private EMailStatus status;
private String responseMessage; private String responseMessage;
private String url_sign; private String url_sign;
// @ManyToOne(fetch = FetchType.LAZY)
// @JoinColumn(name = "demande_id")
// private Demande demande;
@Override @Override
public String toString() { public String toString() {
return "MailRequest{" + return "MailRequest{" +
...@@ -34,7 +42,7 @@ public class MailRequest extends AuditorEntity implements Serializable { ...@@ -34,7 +42,7 @@ public class MailRequest extends AuditorEntity implements Serializable {
", demandeId=" + demandeId + ", demandeId=" + demandeId +
", processCamundaId='" + processCamundaId + '\'' + ", processCamundaId='" + processCamundaId + '\'' +
", token='" + token + '\'' + ", token='" + token + '\'' +
", expiration_date='" + expiration_date + '\'' + ", expirationDate=" + expirationDate +
", name='" + name + '\'' + ", name='" + name + '\'' +
", userMessage='" + userMessage + '\'' + ", userMessage='" + userMessage + '\'' +
", status=" + status + ", status=" + status +
......
...@@ -13,7 +13,7 @@ import java.io.Serializable; ...@@ -13,7 +13,7 @@ import java.io.Serializable;
@Entity @Entity
public class Notification extends AuditorEntity implements Serializable { public class Notification extends AuditorEntity implements Serializable {
private String title; // private String title;
private String message; private String message;
@ManyToOne @ManyToOne
...@@ -31,7 +31,6 @@ public class Notification extends AuditorEntity implements Serializable { ...@@ -31,7 +31,6 @@ public class Notification extends AuditorEntity implements Serializable {
@Override @Override
public String toString() { public String toString() {
return "Notification{" + return "Notification{" +
"title='" + title + '\'' +
", message='" + message + '\'' + ", message='" + message + '\'' +
", destinataire_name=" + destinataire.getName() + ", destinataire_name=" + destinataire.getName() +
", demande_id=" + demande.getId() + ", demande_id=" + demande.getId() +
......
...@@ -13,7 +13,8 @@ import java.io.Serializable; ...@@ -13,7 +13,8 @@ import java.io.Serializable;
@Entity @Entity
public class Signature extends AuditorEntity implements Serializable { public class Signature extends AuditorEntity implements Serializable {
private String directory; private String directory;
@ManyToOne @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id") @JsonIgnore @JoinColumn(name = "user_id")
@JsonIgnore
private User user; private User user;
} }
package bmci.esign.backendend.models; package bmci.esign.backendend.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set; import java.util.Set;
@Data @Data
@NoArgsConstructor @AllArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Entity @Entity
@Table(name = "userEntity") @Table(name = "userEntity")
public class User extends AuditorEntity implements Serializable { public class User extends AuditorEntity implements Serializable {
@Column(length = 120) @Column(length = 120)
private String firstname; private String firstname;
@Column(length = 120) @Column(length = 120)
private String lastname; private String lastname;
private String avatar; private String telephone;
@Column(unique = true) @Column(unique = true)
private String email; private String email;
@Column(length = 60) @Column(length = 60)
private String password; private String password;
/*
@OneToMany(mappedBy = "sender")
@JsonIgnore
private List<Demande> sentDemandes = new ArrayList<>();
@OneToMany(mappedBy = "recipient")
@JsonIgnore
private List<Destinataire> receivedDemandes = new ArrayList<>();
*/
@OneToMany(mappedBy = "user")
@JsonIgnore
private List<Signature> signatures = new ArrayList<>();
@ManyToMany(fetch = FetchType.EAGER) @ManyToMany(fetch = FetchType.EAGER)
@JoinTable( @JoinTable(
...@@ -45,4 +33,18 @@ public class User extends AuditorEntity implements Serializable { ...@@ -45,4 +33,18 @@ public class User extends AuditorEntity implements Serializable {
inverseJoinColumns = @JoinColumn(name = "authority_id") inverseJoinColumns = @JoinColumn(name = "authority_id")
) )
private Set<Authority> authorities; private Set<Authority> authorities;
@Override
public String toString() {
return "User{" +
"firstname='" + firstname + '\'' +
", lastname='" + lastname + '\'' +
", telephone='" + telephone + '\'' +
", email='" + email + '\'' +
", password='" + password + '\'' +
", id=" + id +
", creationDate=" + creationDate +
", modificationDate=" + modificationDate +
'}';
}
} }
...@@ -2,9 +2,9 @@ package bmci.esign.backendend.models.enums; ...@@ -2,9 +2,9 @@ package bmci.esign.backendend.models.enums;
public enum EStatut { public enum EStatut {
WAITING("En attente"), WAITING("En attente"),
CANCELED("Expiré"), CANCELED("Expirée"),
COMPLETE("Signé"); COMPLETE("Signée"),
// REJECTED("Rejeté"); DELETED("Annulée");
private final String displayName; private final String displayName;
EStatut(String displayName) { EStatut(String displayName) {
......
...@@ -15,12 +15,18 @@ import java.util.List; ...@@ -15,12 +15,18 @@ import java.util.List;
@Repository @Repository
public interface DemandeRepository extends JpaRepository<Demande, Long>, JpaSpecificationExecutor<Demande> { public interface DemandeRepository extends JpaRepository<Demande, Long>, JpaSpecificationExecutor<Demande> {
List<Demande> findAllByUserId(Long id); List<Demande> findAllByUserId(Long id);
@Query(value = "SELECT count(d.id) as count, d.statut as statut FROM Demande d WHERE d.user.email= :email GROUP BY d.statut") // @Query(value = "SELECT count(d.id) as count, d.statut as statut FROM Demande d WHERE d.user.email= :email GROUP BY d.statut")
@Query(value = "SELECT count(d.id) as count, d.statut as statut FROM demande d inner join user_entity u " +
"on (d.user_id= u.id) WHERE u.email= :email GROUP BY d.statut", nativeQuery = true)
List<DashboardChart> loadSignaturesChart(@Param("email") String email); List<DashboardChart> loadSignaturesChart(@Param("email") String email);
List<Demande> findAllByExpirationDateBeforeAndStatut(Date date, EStatut eStatut); List<Demande> findAllByExpirationDateBeforeAndStatut(Date date, EStatut eStatut);
@Modifying @Modifying
@Query("UPDATE Demande d set d.statut = :newStatut WHERE d.id = :id") @Query("UPDATE Demande d set d.statut = :newStatut WHERE d.id = :id")
int updateExpiredById(@Param("id") Long id, @Param("newStatut") EStatut newStatut); int updateExpiredById(@Param("id") Long id, @Param("newStatut") EStatut newStatut);
@Query(value = "SELECT * FROM demande d WHERE d.expiration_date <= NOW() + INTERVAL '1 days' " +
"AND expiration_date > NOW() AND statut = 'WAITING'", nativeQuery = true)
List<Demande> findExpiringTomorrow();
} }
/* /*
SELECT statut as statut, SUM(count) as total SELECT statut as statut, SUM(count) as total
......
...@@ -3,6 +3,8 @@ package bmci.esign.backendend.repositories; ...@@ -3,6 +3,8 @@ package bmci.esign.backendend.repositories;
import bmci.esign.backendend.models.Notification; import bmci.esign.backendend.models.Notification;
import bmci.esign.backendend.models.enums.ENotification; import bmci.esign.backendend.models.enums.ENotification;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
...@@ -10,5 +12,6 @@ import java.util.List; ...@@ -10,5 +12,6 @@ import java.util.List;
@Repository @Repository
public interface NotificationRepository extends JpaRepository<Notification, Long> { public interface NotificationRepository extends JpaRepository<Notification, Long> {
List<Notification> findAllByDestinataire_EmailAndStatus(String email, ENotification status); List<Notification> findAllByDestinataire_EmailAndStatus(String email, ENotification status);
Notification findByDemandeId(Long id); @Query("SELECT n from Notification n WHERE n.demande.id= :id AND n.destinataire.email= :email")
Notification findByDemandeId(@Param("id") Long id,@Param("email") String email);
} }
...@@ -2,12 +2,12 @@ package bmci.esign.backendend.repositories; ...@@ -2,12 +2,12 @@ package bmci.esign.backendend.repositories;
import bmci.esign.backendend.models.Signature; import bmci.esign.backendend.models.Signature;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Optional;
@Repository @Repository
public interface SignatureRepository extends JpaRepository<Signature, Long> { public interface SignatureRepository extends JpaRepository<Signature, Long> {
List<Signature> findAllByUserId(Long id); Optional<Signature> findByUserId(Long id);
} }
...@@ -2,9 +2,9 @@ package bmci.esign.backendend.services; ...@@ -2,9 +2,9 @@ package bmci.esign.backendend.services;
import bmci.esign.backendend.dto.DemandeDto; import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.request.FilterDto; import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.request.GlobaleRequestDto; import bmci.esign.backendend.dto.request.RequestId;
import bmci.esign.backendend.dto.response.DashboardChart; import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.response.TableDto; import bmci.esign.backendend.dto.response.GlobalTableDto;
import bmci.esign.backendend.models.Demande; import bmci.esign.backendend.models.Demande;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
...@@ -19,7 +19,7 @@ public interface DemandeService { ...@@ -19,7 +19,7 @@ public interface DemandeService {
Demande findDemande(Long id); Demande findDemande(Long id);
void processEmail(Demande demande); void processEmail(Demande demande);
String relaunchUser(Long idDemand, Long idDestinatiare); String relaunchUser(Long idDemand, Long idDestinatiare);
String cancelDemand(DemandeDto demandeDto); String cancelDemandById(RequestId idDemand);
void deleteDemande(Long id); void deleteDemande(Long id);
List<DemandeDto> getAll(); List<DemandeDto> getAll();
List<DemandeDto> getAllbyUser(Long userId); List<DemandeDto> getAllbyUser(Long userId);
...@@ -27,6 +27,7 @@ public interface DemandeService { ...@@ -27,6 +27,7 @@ public interface DemandeService {
Page<DemandeDto> findDemandesByUser(FilterDto filterDto); Page<DemandeDto> findDemandesByUser(FilterDto filterDto);
List<DashboardChart> loadReceivedChart(String email); List<DashboardChart> loadReceivedChart(String email);
List<DashboardChart> loadGlobalData(String email); List<DashboardChart> loadGlobalData(String email);
Page<TableDto> loadGlobalFiltered(GlobaleRequestDto globaleRequestDto); Page<GlobalTableDto> loadGlobalFiltered(FilterDto globaleRequestDto);
int cancelExpiredDm(); int cancelExpiredDm();
int findExpiringTomorrow();
} }
...@@ -8,5 +8,5 @@ import java.util.Map; ...@@ -8,5 +8,5 @@ import java.util.Map;
public interface EmailService { public interface EmailService {
String generateVerificationCode(); String generateVerificationCode();
String generateUrl(String sdkType); String generateUrl(String sdkType);
void SendEmail(MailRequest req, Map<String, String> model); void sendEmail(MailRequest req, Map<String, String> model, int emailType);
} }
...@@ -10,5 +10,5 @@ public interface NotificationService { ...@@ -10,5 +10,5 @@ public interface NotificationService {
List<NotificationDto> loadActiveNotificationsByUserEmail(String email); List<NotificationDto> loadActiveNotificationsByUserEmail(String email);
// Notification createNotification(NotificationDto dto); // Notification createNotification(NotificationDto dto);
Notification createNotification(Notification notification); Notification createNotification(Notification notification);
void changeStatusByDmId(Long id,Long demandeId, ENotification status); void changeStatusByDmId(Long id,Long demandeId, String email,ENotification status);
} }
...@@ -7,5 +7,5 @@ public interface SignatureService { ...@@ -7,5 +7,5 @@ public interface SignatureService {
SignatureDto addSignature(SignatureDto signatureDto); SignatureDto addSignature(SignatureDto signatureDto);
SignatureDto updateSignature(SignatureDto signatureDto, Long id); SignatureDto updateSignature(SignatureDto signatureDto, Long id);
SignatureDto getSignature(Long id); SignatureDto getSignature(Long id);
List<SignatureDto> findAllByUserId(Long id); SignatureDto findByUserId(Long id);
} }
package bmci.esign.backendend.services.impl; package bmci.esign.backendend.services.impl;
import bmci.esign.backendend.dto.DemandeDto; import bmci.esign.backendend.dto.*;
import bmci.esign.backendend.dto.request.FilterDto; import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.DestinataireDto; import bmci.esign.backendend.dto.request.RequestId;
import bmci.esign.backendend.dto.PositionDto;
import bmci.esign.backendend.dto.request.GlobaleRequestDto;
import bmci.esign.backendend.dto.response.DashboardChart; import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.response.TableDto; import bmci.esign.backendend.dto.response.GlobalTableDto;
import bmci.esign.backendend.dto.services.IMapClassWithDto; import bmci.esign.backendend.dto.services.IMapClassWithDto;
import bmci.esign.backendend.models.*; import bmci.esign.backendend.models.*;
import bmci.esign.backendend.models.enums.EDemande; import bmci.esign.backendend.models.enums.EDemande;
...@@ -22,6 +20,7 @@ import org.springframework.data.domain.Page; ...@@ -22,6 +20,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
...@@ -54,32 +53,40 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -54,32 +53,40 @@ public class DemandeServiceImpl implements DemandeService {
@Autowired @Autowired
private IMapClassWithDto<Position, PositionDto> positionMapping; private IMapClassWithDto<Position, PositionDto> positionMapping;
@Autowired @Autowired
private IMapClassWithDto<Document, DocumentDto> documentMapping;
@Autowired
private NotificationService notificationService; private NotificationService notificationService;
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
@Override @Override
public DemandeDto addDemande(DemandeDto demandeDto) { public DemandeDto addDemande(DemandeDto demandeDto) {
log.info("PROCESSING<>{addDemande}... REQUEST_ID: {}", demandeDto.getId()); log.info("PROCESSING<>{addDemande}... REQUEST_ID: {}", demandeDto.getObjetMail());
List<DestinataireDto> destinataireDtos = demandeDto.getDestinataires(); List<DestinataireDto> destinataireDtos = demandeDto.getDestinataires();
log.warn("destinataireDtos {}",destinataireDtos.size());
Demande demande = demandeMapping.convertToEntity(demandeDto, Demande.class); Demande demande = demandeMapping.convertToEntity(demandeDto, Demande.class);
demande.setStatut(EStatut.WAITING); demande.setStatut(EStatut.WAITING);
demande.setEdemande(EDemande.fromString(demandeDto.getStringDemand())); demande.setEdemande(EDemande.fromString(demandeDto.getStringDemand()));
System.out.println(demande); System.out.println(demande);
log.info("demande {} dest_id {}",demande.getDestinataires(), demande.getDestinataires().get(0).getId());
demande = demandeRepository.save(demande); demande = demandeRepository.save(demande);
demandeDto = demandeMapping.convertToDto(demande, DemandeDto.class); demandeDto = demandeMapping.convertToDto(demande, DemandeDto.class);
if(demande.getDocuments().size() > 0){ if(!demande.getDocuments().isEmpty()){
log.warn("Docs SIZE: {}",demande.getDocuments().size());
Optional<Document> document = demande.getDocuments().stream().findFirst(); Optional<Document> document = demande.getDocuments().stream().findFirst();
if(document.isPresent()){ if(document.isPresent()){
Demande demande1 = new Demande(); Demande demande1 = new Demande();
demande1.setId(demande.getId()); demande1.setId(demande.getId());
document.get().setDemande(demande1); document.get().setDemande(demande1);
log.warn("SAVE_documentRepository {}",document.get().toString());
documentRepository.save(document.get()); documentRepository.save(document.get());
} }
} }
for (DestinataireDto destinataireDto: destinataireDtos){ for (DestinataireDto destinataireDto: destinataireDtos){
// if(!userRepository.existsByEmail(destinataireDto.getEmail())){
// userService.addUser(new UserDto(null,destinataireDto.getName(),destinataireDto.getEmail(),null,authorityRepository.findById(1L).get()));
// }
Optional<User> user=userRepository.findByEmail(destinataireDto.getEmail()); Optional<User> user=userRepository.findByEmail(destinataireDto.getEmail());
destinataireDto.setStatut(EStatut.WAITING.name()); destinataireDto.setStatut(EStatut.WAITING.name());
destinataireDto.setDemande(demandeDto); destinataireDto.setDemande(demandeDto);
...@@ -94,6 +101,8 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -94,6 +101,8 @@ public class DemandeServiceImpl implements DemandeService {
destinataire1.setId(destinataire.getId()); destinataire1.setId(destinataire.getId());
positionDto.setDestinataire(destinataire1); positionDto.setDestinataire(destinataire1);
positionRepository.save(positionMapping.convertToEntity(positionDto, Position.class)); positionRepository.save(positionMapping.convertToEntity(positionDto, Position.class));
notificationService.createNotification(new Notification(demande.getObjetMail(),destinataire,demande, ENotification.WAITING));
} }
} }
...@@ -104,6 +113,65 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -104,6 +113,65 @@ public class DemandeServiceImpl implements DemandeService {
return demandeDto; return demandeDto;
} }
/*
@Override
public DemandeDto addDemande(DemandeDto demandeDto) {
log.info("PROCESSING<>{addDemande}... REQUEST_ID: {}", demandeDto.getObjetMail());
List<DestinataireDto> destinataireDtos = demandeDto.getDestinataires();
log.warn("destinataireDtos {}", destinataireDtos.size());
Demande demande = demandeMapping.convertToEntity(demandeDto, Demande.class);
demande.setStatut(EStatut.WAITING);
demande.setEdemande(EDemande.fromString(demandeDto.getStringDemand()));
// Sauvegarder la demande avant d'ajouter les destinataires
demande = demandeRepository.save(demande);
// Ajouter la demande à chaque destinataire avant de les sauvegarder
for (DestinataireDto destinataireDto : destinataireDtos) {
Optional<User> user = userRepository.findByEmail(destinataireDto.getEmail());
destinataireDto.setStatut(EStatut.WAITING.name());
destinataireDto.setDemande(demandeDto);
destinataireDto.setRecipient(user.orElse(null));
}
List<Destinataire> destinataires = destinataireMapping.convertListToListEntity(destinataireDtos, Destinataire.class);
Demande finalDemande = demande;
destinataires.forEach(destinataire -> destinataire.setDemande(finalDemande));
destinataires = destinataireRepository.saveAll(destinataires);
// Ajouter les positions pour chaque destinataire
for (DestinataireDto destinataireDto : destinataireDtos) {
for (PositionDto positionDto : destinataireDto.getPositions()) {
for (Destinataire destinataire : destinataires) {
if (destinataire.getEmail().equals(destinataireDto.getEmail())) {
Destinataire destinataire1 = new Destinataire();
destinataire1.setId(destinataire.getId());
positionDto.setDestinataire(destinataire1);
positionRepository.save(positionMapping.convertToEntity(positionDto, Position.class));
}
}
}
}
demande.setDestinataires(destinataires);
if(!demande.getDocuments().isEmpty()){
log.warn("Docs SIZE: {}",demande.getDocuments().size());
Optional<Document> document = demande.getDocuments().stream().findFirst();
if(document.isPresent()){
Demande demande1 = new Demande();
demande1.setId(demande.getId());
document.get().setDemande(demande1);
log.warn("SAVE_documentRepository {}",document.get().toString());
documentRepository.save(document.get());
}
}
processEmail(demande);
return demandeMapping.convertToDto(demande, DemandeDto.class);
}
*/
@Override @Override
public DemandeDto updateDemande(DemandeDto demandeDto, Long id) { public DemandeDto updateDemande(DemandeDto demandeDto, Long id) {
Optional<Demande> demande = demandeRepository.findById(id); Optional<Demande> demande = demandeRepository.findById(id);
...@@ -120,11 +188,18 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -120,11 +188,18 @@ public class DemandeServiceImpl implements DemandeService {
} }
@Override @Override
@Transactional(readOnly = true)
public DemandeDto getDemande(Long id) { public DemandeDto getDemande(Long id) {
log.info("PROCESSING<>{getDemande}... REQUEST_DM_ID: {}", id); log.info("PROCESSING<>{getDemande}... REQUEST_DM_ID: {}", id);
try {
Optional<Demande> demande = demandeRepository.findById(id); Optional<Demande> demande = demandeRepository.findById(id);
return demande.map(value -> demandeMapping.convertToDto(value, DemandeDto.class)).orElse(null); return demande.map(value -> demandeMapping.convertToDto(value, DemandeDto.class)).orElse(null);
} catch (Exception e) {
log.error("Exception<getDemande> message: {} cause {}", e.getMessage(), e.getCause(), e);
return null;
} }
}
@Override @Override
public Demande findDemande(Long id) { public Demande findDemande(Long id) {
...@@ -177,13 +252,13 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -177,13 +252,13 @@ public class DemandeServiceImpl implements DemandeService {
Destinataire destinataire = destinataires.stream().findFirst().get(); Destinataire destinataire = destinataires.stream().findFirst().get();
for (Destinataire dest : destinataires){ for (Destinataire dest : destinataires){
if(dest.getStatut().name().equals(EStatut.WAITING.name()) && dest.getPlace() == destinataire.getPlace()){ if(dest.getStatut().name().equals(EStatut.WAITING.name()) && dest.getPlace() == destinataire.getPlace()){
SendData(demande, dest, "bmci_t1"); sendEmailRequest(demande, dest, "bmci_t1",1);
} }
} }
}else{ }else{
for (Destinataire dest : destinataires){ for (Destinataire dest : destinataires){
if(dest.getStatut().name().equals(EStatut.WAITING.name())){ if(dest.getStatut().name().equals(EStatut.WAITING.name())){
SendData(demande, dest, "bmci_t1"); sendEmailRequest(demande, dest, "bmci_t1",1);
} }
} }
} }
...@@ -191,10 +266,11 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -191,10 +266,11 @@ public class DemandeServiceImpl implements DemandeService {
@Override @Override
public String relaunchUser(Long idDemand, Long idDestinatiare) { public String relaunchUser(Long idDemand, Long idDestinatiare) {
log.info("PROCESSING<relaunchUser> REQUEST demande_ID {} User_Id {}",idDemand, idDestinatiare);
try { try {
Demande demande = findDemande(idDemand); Demande demande = findDemande(idDemand);
Destinataire destinataire = demande.getDestinataires().stream().filter(destinataire1 -> destinataire1.getId().equals(idDestinatiare)).collect(Collectors.toList()).get(0); Destinataire destinataire = demande.getDestinataires().stream().filter(destinataire1 -> destinataire1.getId().equals(idDestinatiare)).collect(Collectors.toList()).get(0);
SendData(demande, destinataire, "bmci_t1"); sendEmailRequest(demande, destinataire, "bmci_t1",1);
return "success"; return "success";
}catch (Exception e){ }catch (Exception e){
return "failed"; return "failed";
...@@ -203,9 +279,20 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -203,9 +279,20 @@ public class DemandeServiceImpl implements DemandeService {
} }
@Override @Override
public String cancelDemand(DemandeDto demandeDto) { @Transactional
public String cancelDemandById(RequestId idDemand) {
log.info("PROCESSING<cancelDemand> REQUEST demande_Id {}", idDemand.getDemandId());
try { try {
demandeDto.setStatut(EStatut.CANCELED.name()); if(idDemand.getDemandId() == null){
log.warn("<cancelDemandById> Demande ID Null");
return "failed";
}
DemandeDto demandeDto = getDemande(idDemand.getDemandId());
if(!demandeDto.getStatut().equals(EStatut.WAITING.name())){
log.warn("<cancelDemandById> No Statut(WAITING) found!");
return "failed";
}
demandeDto.setStatut(EStatut.DELETED.name());
EDemande eDemande = EDemande.valueOf(demandeDto.getStringDemand()); EDemande eDemande = EDemande.valueOf(demandeDto.getStringDemand());
demandeDto.setEdemande(eDemande.getDisplayName()); demandeDto.setEdemande(eDemande.getDisplayName());
updateDemande(demandeDto, demandeDto.getId()); updateDemande(demandeDto, demandeDto.getId());
...@@ -213,7 +300,7 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -213,7 +300,7 @@ public class DemandeServiceImpl implements DemandeService {
for(Destinataire destinataire : destinataires){ for(Destinataire destinataire : destinataires){
if(destinataire.getStatut().equals(EStatut.WAITING)){ if(destinataire.getStatut().equals(EStatut.WAITING)){
destinataire.setStatut(EStatut.CANCELED); destinataire.setStatut(EStatut.DELETED);
destinataireRepository.save(destinataire); destinataireRepository.save(destinataire);
} }
} }
...@@ -223,26 +310,35 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -223,26 +310,35 @@ public class DemandeServiceImpl implements DemandeService {
} }
} }
private void SendData(Demande demande, Destinataire dest, String type) { private void sendEmailRequest(Demande demande, Destinataire dest, String type, int subject) {
MailRequest mailRequest = new MailRequest(); MailRequest mailRequest = new MailRequest();
Map<String,String> model = new HashMap<>(); Map<String,String> model = new HashMap<>();
mailRequest.setDemandeId(demande.getId()); mailRequest.setDemandeId(demande.getId());
mailRequest.setDestination(dest.getEmail()); mailRequest.setDestination(dest.getEmail());
mailRequest.setName(dest.getName()); mailRequest.setName(dest.getName());
mailRequest.setEmail_type(type); mailRequest.setEmail_type(type);
mailRequest.setExpiration_date(demande.getExpirationDate().toString()); mailRequest.setExpirationDate(demande.getExpirationDate());
model.put("objet", demande.getObjetMail()); model.put("objet", demande.getObjetMail());
model.put("message", demande.getMessage()); model.put("message", demande.getMessage());
model.put("name", dest.getName()); model.put("name", dest.getName());
emailService.SendEmail(mailRequest,model); model.put("role", getRoleFromUser(dest.getRole()));
emailService.sendEmail(mailRequest,model,subject);
String message="Vous avez une nouvelle demande en attente.\n Envoyé par : "+demande.getUser().getFirstname() +" "+ demande.getUser().getLastname(); String message="Vous avez une nouvelle demande en attente.\n Envoyé par : "+demande.getUser().getFirstname() +" "+ demande.getUser().getLastname();
// String message = String.format("Cher %s, vous avez une nouvelle demande avec le sujet '%s'. Veuillez la consulter dès que possible.", // String message = String.format("Cher %s, vous avez une nouvelle demande avec le sujet '%s'. Veuillez la consulter dès que possible.",
// demande.getUser().getLastname(), // demande.getUser().getLastname(),
// demande.getObjetMail()); // demande.getObjetMail());
for(Destinataire destinataire : demande.getDestinataires()){ }
notificationService.createNotification(new Notification(message, demande.getObjetMail(),destinataire,demande, ENotification.WAITING));
private String getRoleFromUser(String role){
switch (role){
case "Signataire":
return "signer";
case "Validateur":
return "valider";
case "Observateur":
return "observer";
} }
return "";
} }
@Override @Override
...@@ -347,7 +443,7 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -347,7 +443,7 @@ public class DemandeServiceImpl implements DemandeService {
predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.fromString(dto.getStatut()))); predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.fromString(dto.getStatut())));
} }
predicates.add(criteriaBuilder.equal(root.get("user").get("email"), dto.getEmail())); predicates.add(criteriaBuilder.equal(root.get("user").get("email"), dto.getEmail()));
query.orderBy(criteriaBuilder.desc(root.get("creationDate")));
return criteriaBuilder.and(predicates.toArray(new Predicate[0])); return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
}; };
} }
...@@ -361,6 +457,7 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -361,6 +457,7 @@ public class DemandeServiceImpl implements DemandeService {
dest.getStatut(), dest.getStatut(),
dest.getEnvoie(), dest.getEnvoie(),
dest.getPlace(), dest.getPlace(),
dest.getTelephone(),
dest.getDemande(), dest.getDemande(),
dest.getRecipient(), dest.getRecipient(),
dest.getCreationDate(), dest.getCreationDate(),
...@@ -399,53 +496,110 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -399,53 +496,110 @@ public class DemandeServiceImpl implements DemandeService {
return Collections.emptyList(); return Collections.emptyList();
} }
} }
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public Page<TableDto> loadGlobalFiltered(GlobaleRequestDto globaleRequestDto) { public Page<GlobalTableDto> loadGlobalFiltered(FilterDto globaleRequestDto) {
log.info("PROCESSING<>{loadGlobalData}... EMAIL: {}", globaleRequestDto.getEmail());
try {
Optional<User> user = userRepository.findByEmail(globaleRequestDto.getEmail()); Optional<User> user = userRepository.findByEmail(globaleRequestDto.getEmail());
if(user.isEmpty()){ if (user.isEmpty()) {
log.error("User Not Found with Email: {}",globaleRequestDto.getEmail()); log.error("User Not Found with Email: {}", globaleRequestDto.getEmail());
return Page.empty();
}
Pageable pageable = PageRequest.of(globaleRequestDto.getPage(), globaleRequestDto.getSize());
Specification<Demande> demandeSpecification = specification(globaleRequestDto, user.get());
return convertResponseToPageDto(demandeRepository.findAll(demandeSpecification, pageable), user.get());
} catch (ResourceNotFoundException ex) {
log.error("ERROR<loadGlobalFiltered>: ResourceNotFoundException: ", ex);
} catch (Exception ex) {
log.error("Exception<loadGlobalFiltered>: Exception in loadGlobalFiltered: ", ex);
}
return Page.empty(); return Page.empty();
} }
Specification<Demande> specification = Specification.where(DemandeSpecification.isSentBy(user.get())
.or(DemandeSpecification.isReceivedBy(user.get())));
if (globaleRequestDto.getCreationDate() != null) { public static Specification<Demande> specification(FilterDto globaleRequestDto, User user) {
specification = specification.and(DemandeSpecification.withDate(globaleRequestDto.getCreationDate())); return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (globaleRequestDto.getCreatedDate() != null) {
log.info("Global__CreationDate: {}", globaleRequestDto.getCreatedDate());
Expression<LocalDate> creationDateExpression = criteriaBuilder.function(
"date", LocalDate.class, root.get("creationDate"));
predicates.add(criteriaBuilder.equal(creationDateExpression, globaleRequestDto.getCreatedDate()));
} }
if (globaleRequestDto.getStatut() != null) { if (globaleRequestDto.getStatut() != null) {
specification = specification.and(DemandeSpecification.hasStatus(globaleRequestDto.getStatut())); log.info("Global__Statut: {}", globaleRequestDto.getStatut());
predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.fromString(globaleRequestDto.getStatut())));
}
if (globaleRequestDto.getDemandeType() == null) {
predicates.add(criteriaBuilder.or(isSentBy(user).toPredicate(root, query, criteriaBuilder),
isReceivedBy(user).toPredicate(root, query, criteriaBuilder)));
} else if ("Demande des signatures".equals(globaleRequestDto.getDemandeType())) {
log.info("Global__Type: signatures-> {}", globaleRequestDto.getDemandeType());
predicates.add(isSentBy(user).toPredicate(root, query, criteriaBuilder));
} else {
log.info("Global__Type: signer-> {}", globaleRequestDto.getDemandeType());
predicates.add(isReceivedBy(user).toPredicate(root, query, criteriaBuilder));
}
query.distinct(true);
query.orderBy(criteriaBuilder.desc(root.get("creationDate")));
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
} }
Pageable pageable=PageRequest.of(globaleRequestDto.getPage(),globaleRequestDto.getSize());
Page<Demande> demandes = demandeRepository.findAll(specification, pageable); public static Specification<Demande> isSentBy(User user) {
return demandes.map(this::mapToTableDto); return (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("user"), user);
}
public static Specification<Demande> isReceivedBy(User user) {
return (root, query, criteriaBuilder) -> {
Join<Demande, Destinataire> join = root.join("destinataires", JoinType.INNER);
return criteriaBuilder.equal(join.get("recipient"), user);
};
} }
private TableDto mapToTableDto(Demande demande) { public Page<GlobalTableDto> convertResponseToPageDto(Page<Demande> demandes, User currentUser) {
// List<RecipientDto> dtos = demande.getDestinataires().stream() return demandes.map(demande -> convertToDto(demande, currentUser));
// .map(d -> new RecipientDto(d.getId(), d.getName(), d.getEmail(), d.getRole(), d.getStatut().name()))
// .collect(Collectors.toList());
return new TableDto(
demande.getId(),
demande.getCreationDate(),
demande.getEdemande().name(),
demande.getTypeDocument().getName(),
demande.getDestinataires().size(),
demande.getStatut().name()
);
} }
private GlobalTableDto convertToDto(Demande demande, User currentUser) {
GlobalTableDto dto = new GlobalTableDto();
dto.setId(demande.getId());
dto.setConfidentiality(demande.getConfidentiality());
dto.setPriority(demande.getPriority());
dto.setObjetMail(demande.getObjetMail());
dto.setMessage(demande.getMessage());
dto.setCreationDate(demande.getCreationDate());
dto.setTypeDocument(demande.getTypeDocument());
dto.setDestinataires(destinataireMapping.convertListToListDto(demande.getDestinataires(), DestinataireDto.class));
dto.setStatut(demande.getStatut());
dto.setExpirationDate(demande.getExpirationDate());
dto.setDocuments(documentMapping.convertListToListDto(demande.getDocuments(), DocumentDto.class));
dto.setCurrentUser(currentUser);
boolean isSender = demande.getUser().equals(currentUser);
boolean isRecipient = demande.getDestinataires().stream().filter(destinataire -> destinataire.getRecipient() != null)
.anyMatch(dest -> dest.getRecipient().equals(currentUser));
dto.setDemandeTypeBasedOnUser(isSender, isRecipient);
return dto;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int cancelExpiredDm() { public int cancelExpiredDm() {
log.info("PROCESSING.... Scheduled task initiated Now {}", new Date()); log.info("PROCESSING<cancelExpiredDm>.... Scheduled task initiated Now {}", new Date());
try{ try{
List<Demande> demandes=demandeRepository.findAllByExpirationDateBeforeAndStatut(new Date(), EStatut.WAITING); List<Demande> demandes=demandeRepository.findAllByExpirationDateBeforeAndStatut(new Date(), EStatut.WAITING);
demandes.forEach(demande -> { demandes.forEach(demande -> {
log.warn("RESULT : ID {} ExpirationDate {}", demande.getId(), demande.getExpirationDate()); log.warn("RESULT : ID {} ExpirationDate {}", demande.getId(), demande.getExpirationDate());
demandeRepository.updateExpiredById(demande.getId(), EStatut.CANCELED); demandeRepository.updateExpiredById(demande.getId(), EStatut.CANCELED);
SendExpired(demande,demande.getDestinataires().get(0) , "bmci_t1"); // sendEmailRequest(demande,demande.getDestinataires().get(0) , "bmci_t1", 3);
}); });
return demandes.size(); return demandes.size();
}catch (Exception e){ }catch (Exception e){
...@@ -453,20 +607,22 @@ public class DemandeServiceImpl implements DemandeService { ...@@ -453,20 +607,22 @@ public class DemandeServiceImpl implements DemandeService {
return 0; return 0;
} }
} }
private void SendExpired(Demande demande, Destinataire dest, String type) {
MailRequest mailRequest = new MailRequest();
Map<String,String> model = new HashMap<>();
mailRequest.setDemandeId(demande.getId());
mailRequest.setDestination(dest.getEmail());
mailRequest.setName(dest.getName());
mailRequest.setEmail_type(type);
mailRequest.setExpiration_date(demande.getExpirationDate().toString());
model.put("objet", demande.getObjetMail());
model.put("message", demande.getMessage());
model.put("name", dest.getName());
emailService.SendEmail(mailRequest,model);
String message="Vous avez une nouvelle demande en attente.\n Envoyé par : "+demande.getUser().getFirstname() +" "+ demande.getUser().getLastname();
notificationService.createNotification(new Notification(message, demande.getObjetMail(),dest,demande, ENotification.WAITING));
@Override
@Transactional(rollbackFor = Exception.class)
public int findExpiringTomorrow() {
log.info("PROCESSING<findExpiringTomorrow>.....");
try{
List<Demande> demandes= demandeRepository.findExpiringTomorrow();
demandes.forEach(dm -> {
log.info("Demande with ID {} will expire tomorrow ",dm.getId());
sendEmailRequest(dm,dm.getDestinataires().get(0) , "bmci_t1", 2);
});
log.warn("demandes.size() : {}",demandes.size());
return demandes.size();
}catch (Exception e){
log.error("Exception<findExpiringTomorrow> message: {} class {}",e.getMessage(),e.getClass(),e);
return 0;
}
} }
} }
\ No newline at end of file
package bmci.esign.backendend.services.impl;
import bmci.esign.backendend.models.Demande;
import bmci.esign.backendend.models.Destinataire;
import bmci.esign.backendend.models.User;
import bmci.esign.backendend.models.enums.EStatut;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
public class DemandeSpecification {
private static final String date_pattern ="yyyy-MM-dd"; // "dd-MM-yyyy"
public static Specification<Demande> isSentBy(User user) {
return (root, query, criteriaBuilder) ->
criteriaBuilder.equal(root.get("user"), user);
}
public static Specification<Demande> isReceivedBy(User user) {
return (root, query, criteriaBuilder) -> {
Join<Demande, Destinataire> join = root.join("destinataires", JoinType.INNER);
return criteriaBuilder.equal(join.get("recipient"), user);
};
}
public static Specification<Demande> hasStatus(EStatut statut) {
return (root, query, criteriaBuilder) ->
criteriaBuilder.equal(root.get("statut"), statut);
}
public static Specification<Demande> withDate(String creationDate) {
try {
Date date = new SimpleDateFormat(date_pattern).parse(creationDate);
log.info("creationDate_string: {} -> parse_date {}", creationDate, date);
return (root, query, criteriaBuilder) ->
criteriaBuilder.equal(
criteriaBuilder.function("DATE", Date.class, root.get("creationDate")),
date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
\ No newline at end of file
...@@ -121,6 +121,7 @@ public class DestinataireServiceImpl implements DestinataireService { ...@@ -121,6 +121,7 @@ public class DestinataireServiceImpl implements DestinataireService {
} }
// predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.WAITING)); // predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.WAITING));
predicates.add(criteriaBuilder.equal(root.get("email"), dto.getEmail())); predicates.add(criteriaBuilder.equal(root.get("email"), dto.getEmail()));
query.orderBy(criteriaBuilder.desc(root.get("creationDate")));
return criteriaBuilder.and(predicates.toArray(new Predicate[0])); return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
}; };
......
...@@ -42,7 +42,9 @@ public class EmailServiceImpl implements EmailService { ...@@ -42,7 +42,9 @@ public class EmailServiceImpl implements EmailService {
private static final String CHARACTERS = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; private static final String CHARACTERS = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
private static final int CODE_LENGTH = 16; private static final int CODE_LENGTH = 16;
// private static final String TEMPLATE_NAME="sendDoc.ftl"; // private static final String TEMPLATE_NAME="sendDoc.ftl";
private static final String TEMPLATE_NAME="test.ftl"; private static final String NEW_DM_TEMPLATE="demande.ftl";
private static final String RELANCE_DM_TEMPLATE="relance.ftl";
private static final String EXPIRED_DM_TEMPLATE="test.ftl";
@Override @Override
public String generateVerificationCode() { public String generateVerificationCode() {
Random random = new Random(); Random random = new Random();
...@@ -59,7 +61,7 @@ public class EmailServiceImpl implements EmailService { ...@@ -59,7 +61,7 @@ public class EmailServiceImpl implements EmailService {
} }
@Override @Override
public void SendEmail(MailRequest req, Map<String, String> model) { public void sendEmail(MailRequest req, Map<String, String> model, int emailType) {
log.info("PROCESSING<>{sendEmail} REQUEST {}", req.toString()); log.info("PROCESSING<>{sendEmail} REQUEST {}", req.toString());
MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = null; MimeMessageHelper helper = null;
...@@ -77,8 +79,10 @@ public class EmailServiceImpl implements EmailService { ...@@ -77,8 +79,10 @@ public class EmailServiceImpl implements EmailService {
model.put("url_sign", environment.getProperty("url.esign.acess")+":"+url_sign); model.put("url_sign", environment.getProperty("url.esign.acess")+":"+url_sign);
model.put("day_date", LocalDateTime.now().format(formatter)); model.put("day_date", LocalDateTime.now().format(formatter));
model.put("message", model.get("message")); model.put("message", model.get("message"));
log.info("ROLE USER IN DM {}", model.get("role"));
} }
template = config.getTemplate(TEMPLATE_NAME); log.info("emailType: {}", emailType);
template = config.getTemplate(emailType == 1 ? NEW_DM_TEMPLATE : RELANCE_DM_TEMPLATE);
String HtmlMsg = FreeMarkerTemplateUtils.processTemplateIntoString(template,model) ; String HtmlMsg = FreeMarkerTemplateUtils.processTemplateIntoString(template,model) ;
req.setToken(url_sign); req.setToken(url_sign);
......
...@@ -45,7 +45,6 @@ public class NotificationServiceImpl implements NotificationService { ...@@ -45,7 +45,6 @@ public class NotificationServiceImpl implements NotificationService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
// public Notification createNotification(NotificationDto dto) {
public Notification createNotification(Notification notification) { public Notification createNotification(Notification notification) {
log.info("PROCESSING<>{createNotification}.. REQUEST {}", notification); log.info("PROCESSING<>{createNotification}.. REQUEST {}", notification);
try { try {
...@@ -62,12 +61,12 @@ public class NotificationServiceImpl implements NotificationService { ...@@ -62,12 +61,12 @@ public class NotificationServiceImpl implements NotificationService {
@Override @Override
@Transactional @Transactional
public void changeStatusByDmId(Long id, Long demandeId, ENotification status) { public void changeStatusByDmId(Long id, Long demandeId, String email,ENotification status) {
log.info("PROCESSING<>{changeStatus}.. REQUEST_ ID {} Demande_Id {}", id, demandeId); log.info("PROCESSING<>{changeStatus}.. REQUEST_ ID {} Demande_Id {}", id, demandeId);
try { try {
Notification notification; Notification notification;
if(id == null){ if(id == null){
notification = notificationRepository.findByDemandeId(demandeId); notification = notificationRepository.findByDemandeId(demandeId, email);
}else{ }else{
notification = notificationRepository.findById(id).get(); notification = notificationRepository.findById(id).get();
} }
......
package bmci.esign.backendend.services.impl; package bmci.esign.backendend.services.impl;
import bmci.esign.backendend.dto.PositionDto;
import bmci.esign.backendend.dto.SignatureDto; import bmci.esign.backendend.dto.SignatureDto;
import bmci.esign.backendend.dto.services.IMapClassWithDto; import bmci.esign.backendend.dto.services.IMapClassWithDto;
import bmci.esign.backendend.models.Position;
import bmci.esign.backendend.models.Signature; import bmci.esign.backendend.models.Signature;
import bmci.esign.backendend.repositories.SignatureRepository; import bmci.esign.backendend.repositories.SignatureRepository;
import bmci.esign.backendend.services.SignatureService; import bmci.esign.backendend.services.SignatureService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
@Slf4j
public class SignatureServiceImpl implements SignatureService { public class SignatureServiceImpl implements SignatureService {
@Autowired @Autowired
...@@ -39,8 +40,12 @@ public class SignatureServiceImpl implements SignatureService { ...@@ -39,8 +40,12 @@ public class SignatureServiceImpl implements SignatureService {
} }
@Override @Override
public List<SignatureDto> findAllByUserId(Long id) { public SignatureDto findByUserId(Long id) {
List<Signature> signatures = signatureRepository.findAllByUserId(id); Optional<Signature> signatures = signatureRepository.findByUserId(id);
return signatureMapping.convertListToListDto(signatures, SignatureDto.class); if(signatures.isEmpty()){
log.error("Signature Not Found for userId {}",id);
return null;
}
return signatureMapping.convertToDto(signatures.get(), SignatureDto.class);
} }
} }
spring.application.name=backend-esign spring.application.name=backend-esign
# App Properties # App Properties
spring.mvc.converters.preferred-json-mapper=gson spring.mvc.converters.preferred-json-mapper=gson
server.address=192.168.1.23 server.address=192.168.1.25
#server.address=192.168.1.144
server.servlet.context-path=/esignback server.servlet.context-path=/esignback
#server.address=192.168.11.106
#server.servlet-path=/* #server.servlet-path=/*
server.port=9091 server.port=9091
spring.sql.init.platform= postgres spring.sql.init.platform= postgres
#server.ssl.enabled= true #server.ssl.enabled= true
#spring.datasource.url= jdbc:postgresql://192.168.1.46:5433/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00 #spring.datasource.url= jdbc:postgresql://192.168.1.46:5433/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00
spring.datasource.url= jdbc:postgresql://localhost:5432/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00 #spring.datasource.username=postgres
spring.datasource.password= admin
#spring.datasource.password= @sql$23asas #spring.datasource.password= @sql$23asas
spring.datasource.url= jdbc:postgresql://localhost:5432/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00
spring.datasource.username=admin spring.datasource.username=admin
spring.datasource.password= admin
spring.jpa.database = postgresql spring.jpa.database = postgresql
spring.jpa.show-sql=false spring.jpa.show-sql=false
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
...@@ -34,8 +35,8 @@ spring.servlet.multipart.max-request-size=10MB ...@@ -34,8 +35,8 @@ spring.servlet.multipart.max-request-size=10MB
spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.enable=true
camunda.bpm.admin-user.email=anas@indatacore.com #camunda.bpm.admin-user.email=anas.jegoual@indatacore.com
camunda.bpm.admin-user.password=123456 #camunda.bpm.admin-user.password=123456
......
<!doctype html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<title>Nouvelle Demande - BMCI</title>
<style>
body {
font-family: Helvetica, Arial, sans-serif;
background-color: #f4f5f6;
margin: 0;
padding: 0;
color: #333;
}
.container {
max-width: 600px;
margin: 0 auto;
padding: 24px;
}
.content {
background-color: #ffffff;
border: 1px solid #eaebed;
border-radius: 16px;
padding: 24px;
}
.footer {
text-align: center;
color: #9a9ea6;
font-size: 14px;
margin-top: 24px;
}
.btn-primary {
display: inline-block;
padding: 12px 24px;
background: linear-gradient(45deg, #07674D, #0ECD99);
color: #ffffff;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
}
.btn-primary:hover {
background: linear-gradient(45deg, #065942, #0bb689);
}
@media only screen and (max-width: 640px) {
.container {
padding: 16px;
}
.content {
padding: 16px;
}
.btn-primary {
width: 100%;
text-align: center;
}
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<p>Bonjour ${name},</p>
<p>${message}</p>
<p>Veuillez cliquer sur le lien ci-dessous pour procéder à la signature :</p>
<p><a href="${url_sign}" target="_blank">Cliquez ici pour ${role}</a></p>
</div>
<div class="footer">
<p>BANQUE MAROCAINE POUR LE COMMERCE ET L'INDUSTRIE (BMCI)</p>
<p>Fait à <b>Casablanca</b> le <span>${day_date}</span></p>
</div>
</div>
</body>
</html>
<!doctype html>
<html lang="fr">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Notification d'expiration de licence</title>
<style media="all">
body {
font-family: Helvetica, sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 16px;
line-height: 1.3;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
background-color: #f4f5f6;
margin: 0;
padding: 0;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
width: 100%;
}
table td {
font-family: Helvetica, sans-serif;
font-size: 16px;
vertical-align: top;
}
.container {
margin: 0 auto !important;
max-width: 600px;
padding: 0;
padding-top: 24px;
width: 600px;
}
.content {
box-sizing: border-box;
display: block;
margin: 0 auto;
max-width: 600px;
padding: 0;
}
.main {
background: #ffffff;
border: 1px solid #eaebed;
border-radius: 16px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 24px;
}
.footer {
clear: both;
padding-top: 24px;
text-align: center;
width: 100%;
}
.footer td, .footer p, .footer span, .footer a {
color: #9a9ea6;
font-size: 16px;
text-align: center;
}
p {
font-family: Helvetica, sans-serif;
font-size: 16px;
font-weight: normal;
margin: 0;
margin-bottom: 16px;
}
a {
color: #0867ec;
text-decoration: underline;
}
.btn-primary table td {
background: linear-gradient(45deg, #07674D, #0ECD99);
}
.btn-primary a {
background: linear-gradient(45deg, #07674D, #0ECD99);
border-color: #07674D;
color: #ffffff;
text-decoration: none;
display: inline-block;
padding: 10px 20px;
border-radius: 5px;
}
@media all {
.btn-primary table td:hover {
background-color: #218838 !important;
}
.btn-primary a:hover {
background-color: #218838 !important;
border-color: #218838 !important;
}
}
@media only screen and (max-width: 640px) {
.main p, .main td, .main span {
font-size: 16px !important;
}
.wrapper {
padding: 8px !important;
}
.content {
padding: 0 !important;
}
.container {
padding: 0 !important;
padding-top: 8px !important;
width: 100% !important;
}
.btn table {
max-width: 100% !important;
width: 100% !important;
}
.btn a {
font-size: 16px !important;
max-width: 100% !important;
width: 100% !important;
}
}
@media all {
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
#MessageViewBody a {
color: inherit;
text-decoration: none;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
line-height: inherit;
}
}
</style>
</head>
<body>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="wrapper">
<p>Bonjour ${name},</p>
<p>${message}</p>
<p>Veuillez cliquer sur le lien ci-dessous pour procéder à la signature :</p>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="btn btn-primary">
<tbody>
<tr>
<td align="left">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td> <a href="${url_sign}" target="_blank">Cliquez ici pour signer</a> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
<div class="footer">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block">
<span class="apple-link">BANQUE MAROCAINE POUR LE COMMERCE ET L'INDUSTRIE (BMCI)</span>
</td>
</tr>
<tr>
<td class="content-block powered-by">
Fait à <b>Casablanca</b> le &nbsp;<span>${day_date}</span>
</td>
</tr>
</table>
</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<title>Relance - Demande en attente - BMCI</title>
<style>
body {
font-family: Helvetica, Arial, sans-serif;
background-color: #f4f5f6;
margin: 0;
padding: 0;
color: #333;
}
.container {
max-width: 600px;
margin: 0 auto;
padding: 24px;
}
.content {
background-color: #ffffff;
border: 1px solid #eaebed;
border-radius: 16px;
padding: 24px;
}
.footer {
text-align: center;
color: #9a9ea6;
font-size: 14px;
margin-top: 24px;
}
.btn-primary {
display: inline-block;
padding: 12px 24px;
background: linear-gradient(45deg, #07674D, #0ECD99);
color: #ffffff;
text-decoration: none;
border-radius: 4px;
font-weight: bold;
}
.btn-primary:hover {
background: linear-gradient(45deg, #065942, #0bb689);
}
@media only screen and (max-width: 640px) {
.container {
padding: 16px;
}
.content {
padding: 16px;
}
.btn-primary {
width: 100%;
text-align: center;
}
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<p>Bonjour ${name},</p>
<p>Votre demande est toujours en attente et va bientôt expirer.</p>
<p>Veuillez cliquer sur le lien ci-dessous pour procéder à la ${role} :</p>
<p><a href="${url_sign}" target="_blank" class="btn-primary">Cliquez ici pour ${role}</a></p>
</div>
<div class="footer">
<p>BANQUE MAROCAINE POUR LE COMMERCE ET L'INDUSTRIE (BMCI)</p>
<p>Fait à <b>Casablanca</b> le <span>${day_date}</span></p>
</div>
</div>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment