Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
B
bmci-esign
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
destin tati
bmci-esign
Commits
279e3e25
Commit
279e3e25
authored
May 27, 2024
by
AnasJeg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
demo3-fc-v2
parent
5b9938d3
Changes
42
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
897 additions
and
265 deletions
+897
-265
.DS_Store
.DS_Store
+0
-0
src/main/java/bmci/esign/backendend/config/ScheduleService.java
...in/java/bmci/esign/backendend/config/ScheduleService.java
+8
-1
src/main/java/bmci/esign/backendend/controllers/DemandeController.java
.../bmci/esign/backendend/controllers/DemandeController.java
+32
-18
src/main/java/bmci/esign/backendend/controllers/NotificationController.java
.../esign/backendend/controllers/NotificationController.java
+1
-1
src/main/java/bmci/esign/backendend/controllers/SignatureController.java
...mci/esign/backendend/controllers/SignatureController.java
+6
-7
src/main/java/bmci/esign/backendend/controllers/TokenController.java
...va/bmci/esign/backendend/controllers/TokenController.java
+12
-2
src/main/java/bmci/esign/backendend/dto/DemandeDto.java
src/main/java/bmci/esign/backendend/dto/DemandeDto.java
+24
-4
src/main/java/bmci/esign/backendend/dto/DestinataireDto.java
src/main/java/bmci/esign/backendend/dto/DestinataireDto.java
+1
-0
src/main/java/bmci/esign/backendend/dto/UserDto.java
src/main/java/bmci/esign/backendend/dto/UserDto.java
+1
-1
src/main/java/bmci/esign/backendend/dto/request/FilterDto.java
...ain/java/bmci/esign/backendend/dto/request/FilterDto.java
+3
-3
src/main/java/bmci/esign/backendend/dto/request/GlobaleRequestDto.java
.../bmci/esign/backendend/dto/request/GlobaleRequestDto.java
+17
-4
src/main/java/bmci/esign/backendend/dto/request/RequestId.java
...ain/java/bmci/esign/backendend/dto/request/RequestId.java
+14
-0
src/main/java/bmci/esign/backendend/dto/response/GlobalTableDto.java
...va/bmci/esign/backendend/dto/response/GlobalTableDto.java
+71
-0
src/main/java/bmci/esign/backendend/dto/response/TableDto.java
...ain/java/bmci/esign/backendend/dto/response/TableDto.java
+0
-32
src/main/java/bmci/esign/backendend/dto/response/TableResponseDto.java
.../bmci/esign/backendend/dto/response/TableResponseDto.java
+1
-1
src/main/java/bmci/esign/backendend/dto/services/IMapClassWithDto.java
.../bmci/esign/backendend/dto/services/IMapClassWithDto.java
+3
-1
src/main/java/bmci/esign/backendend/dto/services/MapClassWithDto.java
...a/bmci/esign/backendend/dto/services/MapClassWithDto.java
+18
-1
src/main/java/bmci/esign/backendend/models/AuditorEntity.java
...main/java/bmci/esign/backendend/models/AuditorEntity.java
+1
-2
src/main/java/bmci/esign/backendend/models/Demande.java
src/main/java/bmci/esign/backendend/models/Demande.java
+29
-10
src/main/java/bmci/esign/backendend/models/Destinataire.java
src/main/java/bmci/esign/backendend/models/Destinataire.java
+12
-7
src/main/java/bmci/esign/backendend/models/MailRequest.java
src/main/java/bmci/esign/backendend/models/MailRequest.java
+11
-3
src/main/java/bmci/esign/backendend/models/Notification.java
src/main/java/bmci/esign/backendend/models/Notification.java
+1
-2
src/main/java/bmci/esign/backendend/models/Signature.java
src/main/java/bmci/esign/backendend/models/Signature.java
+3
-2
src/main/java/bmci/esign/backendend/models/User.java
src/main/java/bmci/esign/backendend/models/User.java
+19
-17
src/main/java/bmci/esign/backendend/models/enums/EStatut.java
...main/java/bmci/esign/backendend/models/enums/EStatut.java
+3
-3
src/main/java/bmci/esign/backendend/repositories/DemandeRepository.java
...bmci/esign/backendend/repositories/DemandeRepository.java
+7
-1
src/main/java/bmci/esign/backendend/repositories/NotificationRepository.java
...esign/backendend/repositories/NotificationRepository.java
+4
-1
src/main/java/bmci/esign/backendend/repositories/SignatureRepository.java
...ci/esign/backendend/repositories/SignatureRepository.java
+2
-2
src/main/java/bmci/esign/backendend/services/DemandeService.java
...n/java/bmci/esign/backendend/services/DemandeService.java
+5
-4
src/main/java/bmci/esign/backendend/services/EmailService.java
...ain/java/bmci/esign/backendend/services/EmailService.java
+1
-1
src/main/java/bmci/esign/backendend/services/NotificationService.java
...a/bmci/esign/backendend/services/NotificationService.java
+1
-1
src/main/java/bmci/esign/backendend/services/SignatureService.java
...java/bmci/esign/backendend/services/SignatureService.java
+1
-1
src/main/java/bmci/esign/backendend/services/impl/DemandeServiceImpl.java
...ci/esign/backendend/services/impl/DemandeServiceImpl.java
+222
-66
src/main/java/bmci/esign/backendend/services/impl/DemandeSpecification.java
.../esign/backendend/services/impl/DemandeSpecification.java
+0
-49
src/main/java/bmci/esign/backendend/services/impl/DestinataireServiceImpl.java
...ign/backendend/services/impl/DestinataireServiceImpl.java
+1
-0
src/main/java/bmci/esign/backendend/services/impl/EmailServiceImpl.java
...bmci/esign/backendend/services/impl/EmailServiceImpl.java
+7
-3
src/main/java/bmci/esign/backendend/services/impl/NotificationServiceImpl.java
...ign/backendend/services/impl/NotificationServiceImpl.java
+2
-3
src/main/java/bmci/esign/backendend/services/impl/SignatureServiceImpl.java
.../esign/backendend/services/impl/SignatureServiceImpl.java
+10
-5
src/main/resources/application.properties
src/main/resources/application.properties
+7
-6
src/main/resources/templates/demande.ftl
src/main/resources/templates/demande.ftl
+72
-0
src/main/resources/templates/expiredSoon.ftl
src/main/resources/templates/expiredSoon.ftl
+192
-0
src/main/resources/templates/relance.ftl
src/main/resources/templates/relance.ftl
+72
-0
No files found.
.DS_Store
View file @
279e3e25
No preview for this file type
src/main/java/bmci/esign/backendend/config/ScheduleService.java
View file @
279e3e25
...
...
@@ -24,10 +24,17 @@ public class ScheduleService {
this
.
demandeService
=
demandeService
;
}
@Scheduled
(
cron
=
"0 0
10
* * *"
,
zone
=
"Africa/Casablanca"
)
@Scheduled
(
cron
=
"0 0
9
* * *"
,
zone
=
"Africa/Casablanca"
)
public
void
scheduleTaskWithFixedDelay
(){
log
.
info
(
"Fixed Task :: Execution Time - {}"
,
dateTimeFormatter
.
format
(
LocalDateTime
.
now
()));
// demandeService.findDemandesByExpirationDateBeforeAndStatut
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();
}
}
src/main/java/bmci/esign/backendend/controllers/DemandeController.java
View file @
279e3e25
...
...
@@ -2,25 +2,19 @@ package bmci.esign.backendend.controllers;
import
bmci.esign.backendend.dto.DemandeDto
;
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.TableDto
;
import
bmci.esign.backendend.dto.response.
Global
TableDto
;
import
bmci.esign.backendend.models.ResponseModelStandard
;
import
bmci.esign.backendend.models.enums.EStatut
;
import
bmci.esign.backendend.services.DemandeService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.format.annotation.DateTimeFormat
;
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.List
;
import
java.util.Locale
;
import
java.util.Map
;
@RestController
...
...
@@ -68,22 +62,37 @@ public class DemandeController {
}
}
@GetMapping
(
"/
canceled
"
)
@GetMapping
(
"/
by
"
)
public
ResponseModelStandard
<
Long
>
canceledDemande
(
@RequestParam
(
name
=
"idDemand"
)
Long
id
){
try
{
DemandeDto
demandeDto
=
demandeService
.
getDemande
(
id
);
if
(
demandeDto
.
getStatut
().
equals
(
EStatut
.
WAITING
.
name
())){
String
message
=
demandeService
.
cancelDemand
(
demandeDto
);
if
(
message
.
equals
(
"success"
)){
return
new
ResponseModelStandard
<>(
"000"
);
}
}
return
new
ResponseModelStandard
<>(
"099"
);
DemandeDto
demandeDto
=
demandeService
.
getDemande
(
id
);
System
.
out
.
println
(
demandeDto
);
log
.
info
(
"STATUT {}"
,
demandeDto
.
getStatut
());
// if(demandeDto.getStatut().equals(EStatut.WAITING.name())){
// 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"
);
}
catch
(
Exception
e
){
return
new
ResponseModelStandard
<>(
"099"
);
}
}
@GetMapping
(
"/getForUser"
)
public
ResponseModelStandard
<
List
<
DemandeDto
>>
getForUserDemande
(
@RequestParam
(
name
=
"id"
)
Long
id
){
try
{
...
...
@@ -133,7 +142,7 @@ public class DemandeController {
}
@PostMapping
(
"/global"
)
public
ResponseModelStandard
<
Page
<
TableDto
>>
loadGlobalFilteredDm
(
@RequestBody
GlobaleRequest
Dto
dto
){
public
ResponseModelStandard
<
Page
<
GlobalTableDto
>>
loadGlobalFilteredDm
(
@RequestBody
Filter
Dto
dto
){
try
{
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"
);
...
...
@@ -149,4 +158,9 @@ public class DemandeController {
return
new
ResponseModelStandard
<>(
"000"
,
demandeService
.
cancelExpiredDm
());
}
@PostMapping
(
"/tomorrow"
)
public
ResponseModelStandard
<
Integer
>
findExpiringTomorrow
(){
return
new
ResponseModelStandard
<>(
"000"
,
demandeService
.
findExpiringTomorrow
());
}
}
src/main/java/bmci/esign/backendend/controllers/NotificationController.java
View file @
279e3e25
...
...
@@ -41,7 +41,7 @@ public class NotificationController {
@PostMapping
(
"/update/status"
)
public
ResponseModelStandard
<
NotificationDto
>
updateStatus
(
@RequestParam
Long
id
)
{
try
{
notificationService
.
changeStatusByDmId
(
id
,
null
,
ENotification
.
VIEW
);
notificationService
.
changeStatusByDmId
(
id
,
null
,
null
,
ENotification
.
VIEW
);
return
new
ResponseModelStandard
<>(
"000"
);
}
catch
(
Exception
e
){
return
new
ResponseModelStandard
<>(
"099"
);
...
...
src/main/java/bmci/esign/backendend/controllers/SignatureController.java
View file @
279e3e25
package
bmci
.
esign
.
backendend
.
controllers
;
import
bmci.esign.backendend.dto.SignatureDto
;
import
bmci.esign.backendend.models.ResponseModelStandard
;
import
bmci.esign.backendend.services.SignatureService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/signature"
)
public
class
SignatureController
{
private
final
SignatureService
signatureService
;
@Autowired
private
SignatureService
signatureService
;
public
SignatureController
(
SignatureService
signatureService
)
{
this
.
signatureService
=
signatureService
;
}
@PostMapping
(
"/add"
)
public
ResponseModelStandard
<
Long
>
addSignature
(
@RequestBody
SignatureDto
signatureDto
){
...
...
@@ -28,10 +28,9 @@ public class SignatureController {
@GetMapping
(
"/get"
)
public
ResponseModelStandard
<
List
<
SignatureDto
>
>
getSignature
(
@RequestParam
(
name
=
"id"
)
Long
id
){
public
ResponseModelStandard
<
SignatureDto
>
getSignature
(
@RequestParam
(
name
=
"id"
)
Long
id
){
try
{
List
<
SignatureDto
>
signatureDtos
=
signatureService
.
findAllByUserId
(
id
);
return
new
ResponseModelStandard
<>(
"000"
,
signatureDtos
);
return
new
ResponseModelStandard
<>(
"000"
,
signatureService
.
findByUserId
(
id
));
}
catch
(
Exception
e
){
return
new
ResponseModelStandard
<>(
"099"
);
}
...
...
src/main/java/bmci/esign/backendend/controllers/TokenController.java
View file @
279e3e25
...
...
@@ -4,9 +4,12 @@ import bmci.esign.backendend.dto.DemandeDto;
import
bmci.esign.backendend.models.MailRequest
;
import
bmci.esign.backendend.models.ResponseModelStandard
;
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.repositories.MailRequestRepository
;
import
bmci.esign.backendend.services.DemandeService
;
import
bmci.esign.backendend.services.NotificationService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Date
;
...
...
@@ -14,25 +17,32 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping
(
"/token"
)
@Slf4j
public
class
TokenController
{
private
final
MailRequestRepository
mailRequestRepository
;
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
.
demandeService
=
demandeService
;
this
.
notificationService
=
notificationService
;
}
@GetMapping
(
"/getToken"
)
public
ResponseModelStandard
<
DemandeDto
>
getToken
(
@RequestParam
(
name
=
"token"
)
String
token
){
log
.
info
(
"getToken {}"
,
token
);
MailRequest
mailRequest
=
mailRequestRepository
.
findByToken
(
token
);
log
.
info
(
"mailRequest {}"
,
mailRequest
);
if
(
mailRequest
!=
null
){
if
(
mailRequest
.
getStatus
().
equals
(
EMailStatus
.
SENT
)){
mailRequest
.
setStatus
(
EMailStatus
.
CLICKED
);
log
.
info
(
"CLICKED"
);
mailRequestRepository
.
save
(
mailRequest
);
log
.
warn
(
"CHANGE NOTIFICATION STATUS"
);
notificationService
.
changeStatusByDmId
(
null
,
mailRequest
.
getDemandeId
(),
mailRequest
.
getDestination
(),
ENotification
.
VIEW
);
}
DemandeDto
demandeDto
=
demandeService
.
getDemande
(
mailRequest
.
getDemandeId
());
if
(
demandeDto
.
getStatut
().
equals
(
EStatut
.
COMPLETE
.
name
())){
...
...
src/main/java/bmci/esign/backendend/dto/DemandeDto.java
View file @
279e3e25
...
...
@@ -4,15 +4,15 @@ import bmci.esign.backendend.models.TypeDocument;
import
bmci.esign.backendend.models.enums.EDemande
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.*
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
@Data
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
DemandeDto
implements
Serializable
{
private
Long
id
;
...
...
@@ -42,4 +42,24 @@ public class DemandeDto implements Serializable {
public
String
getStringDemand
(){
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
()
+
'}'
;
}
}
src/main/java/bmci/esign/backendend/dto/DestinataireDto.java
View file @
279e3e25
...
...
@@ -21,6 +21,7 @@ public class DestinataireDto {
private
String
statut
;
private
String
envoie
;
private
int
place
;
private
String
telephone
;
@JsonIgnore
private
DemandeDto
demande
;
...
...
src/main/java/bmci/esign/backendend/dto/UserDto.java
View file @
279e3e25
...
...
@@ -18,7 +18,7 @@ public class UserDto {
private
Long
id
;
private
String
firstname
;
private
String
lastname
;
private
String
avatar
;
private
String
telephone
;
private
String
email
;
private
String
password
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
)
...
...
src/main/java/bmci/esign/backendend/dto/request/FilterDto.java
View file @
279e3e25
...
...
@@ -11,10 +11,9 @@ import java.time.LocalDate;
@AllArgsConstructor
@NoArgsConstructor
public
class
FilterDto
{
private
int
page
;
private
int
size
;
private
Integer
page
;
private
Integer
size
;
private
String
email
;
private
LocalDate
createdDate
;
private
String
demandeType
;
private
String
statut
;
...
...
@@ -27,6 +26,7 @@ public class FilterDto {
", email='"
+
email
+
'\''
+
", createdDate="
+
createdDate
+
", demandeType='"
+
demandeType
+
'\''
+
", statut='"
+
statut
+
'\''
+
'}'
;
}
}
\ No newline at end of file
src/main/java/bmci/esign/backendend/dto/request/GlobaleRequestDto.java
View file @
279e3e25
package
bmci
.
esign
.
backendend
.
dto
.
request
;
import
bmci.esign.backendend.models.enums.EStatut
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
import
java.time.LocalDate
;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public
class
GlobaleRequestDto
{
private
String
email
;
private
Integer
page
;
private
Integer
size
;
private
String
creationDate
;
private
EStatut
statut
;
private
String
email
;
private
LocalDate
createdDate
;
private
String
statut
;
private
String
type
;
@Override
public
String
toString
()
{
return
"GlobaleRequestDto{"
+
"page="
+
page
+
", size="
+
size
+
", email='"
+
email
+
'\''
+
", createdDate="
+
createdDate
+
", statut='"
+
statut
+
'\''
+
", type='"
+
type
+
'\''
+
'}'
;
}
}
src/main/java/bmci/esign/backendend/dto/request/RequestId.java
0 → 100644
View file @
279e3e25
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
src/main/java/bmci/esign/backendend/dto/response/GlobalTableDto.java
0 → 100644
View file @
279e3e25
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
+
'}'
;
}
}
src/main/java/bmci/esign/backendend/dto/response/TableDto.java
deleted
100644 → 0
View file @
5b9938d3
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
();
}
}
src/main/java/bmci/esign/backendend/dto/response/TableResponseDto.java
View file @
279e3e25
...
...
@@ -13,7 +13,7 @@ import lombok.Setter;
public
class
TableResponseDto
{
@SerializedName
(
"data"
)
private
TableDto
data
;
private
Global
TableDto
data
;
private
int
totalElements
;
...
...
src/main/java/bmci/esign/backendend/dto/services/IMapClassWithDto.java
View file @
279e3e25
package
bmci
.
esign
.
backendend
.
dto
.
services
;
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
java.util.Collection
;
...
...
@@ -19,5 +22,4 @@ public interface IMapClassWithDto<E,D> {
Page
<
D
>
convertResponseToPageDto
(
Page
<
E
>
entityList
,
Class
<
D
>
outCLass
);
List
<
DashboardChart
>
mappingData
(
List
<
DashboardChart
>
chartList
);
}
src/main/java/bmci/esign/backendend/dto/services/MapClassWithDto.java
View file @
279e3e25
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.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
org.modelmapper.Conditions
;
import
org.modelmapper.ModelMapper
;
...
...
@@ -17,6 +24,7 @@ import java.util.List;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@Service
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
());
}
}
// 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
src/main/java/bmci/esign/backendend/models/AuditorEntity.java
View file @
279e3e25
...
...
@@ -15,7 +15,6 @@ import java.util.Date;
@MappedSuperclass
@EntityListeners
(
AuditingEntityListener
.
class
)
public
abstract
class
AuditorEntity
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
protected
Long
id
;
...
...
@@ -26,4 +25,4 @@ public abstract class AuditorEntity {
@UpdateTimestamp
@Temporal
(
TemporalType
.
TIMESTAMP
)
protected
Date
modificationDate
;
}
\ No newline at end of file
}
src/main/java/bmci/esign/backendend/models/Demande.java
View file @
279e3e25
...
...
@@ -3,20 +3,21 @@ package bmci.esign.backendend.models;
import
bmci.esign.backendend.models.enums.EDemande
;
import
bmci.esign.backendend.models.enums.EStatut
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.*
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Getter
@Setter
@Builder
@Entity
public
class
Demande
extends
AuditorEntity
implements
Serializable
{
private
String
confidentiality
;
private
String
priority
;
private
String
objetMail
;
...
...
@@ -30,7 +31,7 @@ public class Demande extends AuditorEntity implements Serializable {
@Column
(
length
=
50
)
private
EDemande
edemande
;
@ManyToOne
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JoinColumn
(
name
=
"user_id"
)
@JsonProperty
(
access
=
JsonProperty
.
Access
.
WRITE_ONLY
)
private
User
user
;
...
...
@@ -43,10 +44,28 @@ public class Demande extends AuditorEntity implements Serializable {
private
Date
expirationDate
;
@OneToMany
(
mappedBy
=
"demande"
,
fetch
=
FetchType
.
LAZY
)
// @JsonManagedReference
private
List
<
Destinataire
>
destinataires
;
@OneToMany
(
mappedBy
=
"demande"
)
private
List
<
Document
>
documents
;
private
List
<
Destinataire
>
destinataires
=
new
ArrayList
<>();
@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
+
'}'
;
}
}
src/main/java/bmci/esign/backendend/models/Destinataire.java
View file @
279e3e25
package
bmci
.
esign
.
backendend
.
models
;
import
bmci.esign.backendend.models.enums.EStatut
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.annotations.CreationTimestamp
;
import
org.hibernate.annotations.UpdateTimestamp
;
import
javax.persistence.*
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
@Data
@NoArgsConstructor
@AllArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@Entity
public
class
Destinataire
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
private
String
name
;
private
String
email
;
private
String
role
;
...
...
@@ -25,15 +27,18 @@ public class Destinataire {
@Enumerated
(
EnumType
.
STRING
)
@Column
(
length
=
50
)
private
EStatut
statut
;
private
String
envoie
;
private
int
place
;
@ManyToOne
private
String
telephone
;
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JoinColumn
(
name
=
"demande_id"
)
@JsonIgnore
private
Demande
demande
;
@ManyToOne
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JoinColumn
(
name
=
"user_id"
)
private
User
recipient
;
...
...
@@ -45,6 +50,6 @@ public class Destinataire {
@Temporal
(
TemporalType
.
TIMESTAMP
)
private
Date
modificationDate
;
@OneToMany
(
mappedBy
=
"destinataire"
)
private
List
<
Position
>
positions
;
@OneToMany
(
mappedBy
=
"destinataire"
,
fetch
=
FetchType
.
LAZY
)
private
List
<
Position
>
positions
=
new
ArrayList
<>()
;
}
src/main/java/bmci/esign/backendend/models/MailRequest.java
View file @
279e3e25
...
...
@@ -6,6 +6,7 @@ import lombok.*;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.util.Date
;
@Getter
@Setter
...
...
@@ -16,16 +17,23 @@ public class MailRequest extends AuditorEntity implements Serializable {
private
String
destination
;
private
String
email_type
;
private
long
demandeId
;
private
String
processCamundaId
;
private
String
processCamundaId
;
@Column
(
unique
=
true
)
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
userMessage
;
private
EMailStatus
status
;
private
String
responseMessage
;
private
String
url_sign
;
// @ManyToOne(fetch = FetchType.LAZY)
// @JoinColumn(name = "demande_id")
// private Demande demande;
@Override
public
String
toString
()
{
return
"MailRequest{"
+
...
...
@@ -34,7 +42,7 @@ public class MailRequest extends AuditorEntity implements Serializable {
", demandeId="
+
demandeId
+
", processCamundaId='"
+
processCamundaId
+
'\''
+
", token='"
+
token
+
'\''
+
", expiration
_date='"
+
expiration_date
+
'\''
+
", expiration
Date="
+
expirationDate
+
", name='"
+
name
+
'\''
+
", userMessage='"
+
userMessage
+
'\''
+
", status="
+
status
+
...
...
src/main/java/bmci/esign/backendend/models/Notification.java
View file @
279e3e25
...
...
@@ -13,7 +13,7 @@ import java.io.Serializable;
@Entity
public
class
Notification
extends
AuditorEntity
implements
Serializable
{
private
String
title
;
//
private String title;
private
String
message
;
@ManyToOne
...
...
@@ -31,7 +31,6 @@ public class Notification extends AuditorEntity implements Serializable {
@Override
public
String
toString
()
{
return
"Notification{"
+
"title='"
+
title
+
'\''
+
", message='"
+
message
+
'\''
+
", destinataire_name="
+
destinataire
.
getName
()
+
", demande_id="
+
demande
.
getId
()
+
...
...
src/main/java/bmci/esign/backendend/models/Signature.java
View file @
279e3e25
...
...
@@ -13,7 +13,8 @@ import java.io.Serializable;
@Entity
public
class
Signature
extends
AuditorEntity
implements
Serializable
{
private
String
directory
;
@ManyToOne
@JoinColumn
(
name
=
"user_id"
)
@JsonIgnore
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JoinColumn
(
name
=
"user_id"
)
@JsonIgnore
private
User
user
;
}
src/main/java/bmci/esign/backendend/models/User.java
View file @
279e3e25
package
bmci
.
esign
.
backendend
.
models
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Set
;
@Data
@NoArgsConstructor
@AllArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table
(
name
=
"userEntity"
)
public
class
User
extends
AuditorEntity
implements
Serializable
{
@Column
(
length
=
120
)
private
String
firstname
;
@Column
(
length
=
120
)
private
String
lastname
;
private
String
avatar
;
private
String
telephone
;
@Column
(
unique
=
true
)
private
String
email
;
@Column
(
length
=
60
)
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
)
@JoinTable
(
...
...
@@ -45,4 +33,18 @@ public class User extends AuditorEntity implements Serializable {
inverseJoinColumns
=
@JoinColumn
(
name
=
"authority_id"
)
)
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
+
'}'
;
}
}
src/main/java/bmci/esign/backendend/models/enums/EStatut.java
View file @
279e3e25
...
...
@@ -2,9 +2,9 @@ package bmci.esign.backendend.models.enums;
public
enum
EStatut
{
WAITING
(
"En attente"
),
CANCELED
(
"Expiré"
),
COMPLETE
(
"Signé
"
);
// REJECTED("Rejeté
");
CANCELED
(
"Expiré
e
"
),
COMPLETE
(
"Signé
e"
),
DELETED
(
"Annulée
"
);
private
final
String
displayName
;
EStatut
(
String
displayName
)
{
...
...
src/main/java/bmci/esign/backendend/repositories/DemandeRepository.java
View file @
279e3e25
...
...
@@ -15,12 +15,18 @@ import java.util.List;
@Repository
public
interface
DemandeRepository
extends
JpaRepository
<
Demande
,
Long
>,
JpaSpecificationExecutor
<
Demande
>
{
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
<
Demande
>
findAllByExpirationDateBeforeAndStatut
(
Date
date
,
EStatut
eStatut
);
@Modifying
@Query
(
"UPDATE Demande d set d.statut = :newStatut WHERE d.id = :id"
)
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
...
...
src/main/java/bmci/esign/backendend/repositories/NotificationRepository.java
View file @
279e3e25
...
...
@@ -3,6 +3,8 @@ package bmci.esign.backendend.repositories;
import
bmci.esign.backendend.models.Notification
;
import
bmci.esign.backendend.models.enums.ENotification
;
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
java.util.List
;
...
...
@@ -10,5 +12,6 @@ import java.util.List;
@Repository
public
interface
NotificationRepository
extends
JpaRepository
<
Notification
,
Long
>
{
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
);
}
src/main/java/bmci/esign/backendend/repositories/SignatureRepository.java
View file @
279e3e25
...
...
@@ -2,12 +2,12 @@ package bmci.esign.backendend.repositories;
import
bmci.esign.backendend.models.Signature
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.repository.PagingAndSortingRepository
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
import
java.util.Optional
;
@Repository
public
interface
SignatureRepository
extends
JpaRepository
<
Signature
,
Long
>
{
List
<
Signature
>
findAll
ByUserId
(
Long
id
);
Optional
<
Signature
>
find
ByUserId
(
Long
id
);
}
src/main/java/bmci/esign/backendend/services/DemandeService.java
View file @
279e3e25
...
...
@@ -2,9 +2,9 @@ package bmci.esign.backendend.services;
import
bmci.esign.backendend.dto.DemandeDto
;
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.TableDto
;
import
bmci.esign.backendend.dto.response.
Global
TableDto
;
import
bmci.esign.backendend.models.Demande
;
import
org.springframework.data.domain.Page
;
...
...
@@ -19,7 +19,7 @@ public interface DemandeService {
Demande
findDemande
(
Long
id
);
void
processEmail
(
Demande
demande
);
String
relaunchUser
(
Long
idDemand
,
Long
idDestinatiare
);
String
cancelDemand
(
DemandeDto
demandeDto
);
String
cancelDemand
ById
(
RequestId
idDemand
);
void
deleteDemande
(
Long
id
);
List
<
DemandeDto
>
getAll
();
List
<
DemandeDto
>
getAllbyUser
(
Long
userId
);
...
...
@@ -27,6 +27,7 @@ public interface DemandeService {
Page
<
DemandeDto
>
findDemandesByUser
(
FilterDto
filterDto
);
List
<
DashboardChart
>
loadReceivedChart
(
String
email
);
List
<
DashboardChart
>
loadGlobalData
(
String
email
);
Page
<
TableDto
>
loadGlobalFiltered
(
GlobaleRequest
Dto
globaleRequestDto
);
Page
<
GlobalTableDto
>
loadGlobalFiltered
(
Filter
Dto
globaleRequestDto
);
int
cancelExpiredDm
();
int
findExpiringTomorrow
();
}
src/main/java/bmci/esign/backendend/services/EmailService.java
View file @
279e3e25
...
...
@@ -8,5 +8,5 @@ import java.util.Map;
public
interface
EmailService
{
String
generateVerificationCode
();
String
generateUrl
(
String
sdkType
);
void
SendEmail
(
MailRequest
req
,
Map
<
String
,
String
>
model
);
void
sendEmail
(
MailRequest
req
,
Map
<
String
,
String
>
model
,
int
emailType
);
}
src/main/java/bmci/esign/backendend/services/NotificationService.java
View file @
279e3e25
...
...
@@ -10,5 +10,5 @@ public interface NotificationService {
List
<
NotificationDto
>
loadActiveNotificationsByUserEmail
(
String
email
);
// Notification createNotification(NotificationDto dto);
Notification
createNotification
(
Notification
notification
);
void
changeStatusByDmId
(
Long
id
,
Long
demandeId
,
ENotification
status
);
void
changeStatusByDmId
(
Long
id
,
Long
demandeId
,
String
email
,
ENotification
status
);
}
src/main/java/bmci/esign/backendend/services/SignatureService.java
View file @
279e3e25
...
...
@@ -7,5 +7,5 @@ public interface SignatureService {
SignatureDto
addSignature
(
SignatureDto
signatureDto
);
SignatureDto
updateSignature
(
SignatureDto
signatureDto
,
Long
id
);
SignatureDto
getSignature
(
Long
id
);
List
<
SignatureDto
>
findAll
ByUserId
(
Long
id
);
SignatureDto
find
ByUserId
(
Long
id
);
}
src/main/java/bmci/esign/backendend/services/impl/DemandeServiceImpl.java
View file @
279e3e25
This diff is collapsed.
Click to expand it.
src/main/java/bmci/esign/backendend/services/impl/DemandeSpecification.java
deleted
100644 → 0
View file @
5b9938d3
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
src/main/java/bmci/esign/backendend/services/impl/DestinataireServiceImpl.java
View file @
279e3e25
...
...
@@ -121,6 +121,7 @@ public class DestinataireServiceImpl implements DestinataireService {
}
// predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.WAITING));
predicates
.
add
(
criteriaBuilder
.
equal
(
root
.
get
(
"email"
),
dto
.
getEmail
()));
query
.
orderBy
(
criteriaBuilder
.
desc
(
root
.
get
(
"creationDate"
)));
return
criteriaBuilder
.
and
(
predicates
.
toArray
(
new
Predicate
[
0
]));
};
...
...
src/main/java/bmci/esign/backendend/services/impl/EmailServiceImpl.java
View file @
279e3e25
...
...
@@ -42,7 +42,9 @@ public class EmailServiceImpl implements EmailService {
private
static
final
String
CHARACTERS
=
"0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
;
private
static
final
int
CODE_LENGTH
=
16
;
// 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
public
String
generateVerificationCode
()
{
Random
random
=
new
Random
();
...
...
@@ -59,7 +61,7 @@ public class EmailServiceImpl implements EmailService {
}
@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
());
MimeMessage
mimeMessage
=
mailSender
.
createMimeMessage
();
MimeMessageHelper
helper
=
null
;
...
...
@@ -77,8 +79,10 @@ public class EmailServiceImpl implements EmailService {
model
.
put
(
"url_sign"
,
environment
.
getProperty
(
"url.esign.acess"
)+
":"
+
url_sign
);
model
.
put
(
"day_date"
,
LocalDateTime
.
now
().
format
(
formatter
));
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
)
;
req
.
setToken
(
url_sign
);
...
...
src/main/java/bmci/esign/backendend/services/impl/NotificationServiceImpl.java
View file @
279e3e25
...
...
@@ -45,7 +45,6 @@ public class NotificationServiceImpl implements NotificationService {
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
// public Notification createNotification(NotificationDto dto) {
public
Notification
createNotification
(
Notification
notification
)
{
log
.
info
(
"PROCESSING<>{createNotification}.. REQUEST {}"
,
notification
);
try
{
...
...
@@ -62,12 +61,12 @@ public class NotificationServiceImpl implements NotificationService {
@Override
@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
);
try
{
Notification
notification
;
if
(
id
==
null
){
notification
=
notificationRepository
.
findByDemandeId
(
demandeId
);
notification
=
notificationRepository
.
findByDemandeId
(
demandeId
,
email
);
}
else
{
notification
=
notificationRepository
.
findById
(
id
).
get
();
}
...
...
src/main/java/bmci/esign/backendend/services/impl/SignatureServiceImpl.java
View file @
279e3e25
package
bmci
.
esign
.
backendend
.
services
.
impl
;
import
bmci.esign.backendend.dto.PositionDto
;
import
bmci.esign.backendend.dto.SignatureDto
;
import
bmci.esign.backendend.dto.services.IMapClassWithDto
;
import
bmci.esign.backendend.models.Position
;
import
bmci.esign.backendend.models.Signature
;
import
bmci.esign.backendend.repositories.SignatureRepository
;
import
bmci.esign.backendend.services.SignatureService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Optional
;
@Service
@Slf4j
public
class
SignatureServiceImpl
implements
SignatureService
{
@Autowired
...
...
@@ -39,8 +40,12 @@ public class SignatureServiceImpl implements SignatureService {
}
@Override
public
List
<
SignatureDto
>
findAllByUserId
(
Long
id
)
{
List
<
Signature
>
signatures
=
signatureRepository
.
findAllByUserId
(
id
);
return
signatureMapping
.
convertListToListDto
(
signatures
,
SignatureDto
.
class
);
public
SignatureDto
findByUserId
(
Long
id
)
{
Optional
<
Signature
>
signatures
=
signatureRepository
.
findByUserId
(
id
);
if
(
signatures
.
isEmpty
()){
log
.
error
(
"Signature Not Found for userId {}"
,
id
);
return
null
;
}
return
signatureMapping
.
convertToDto
(
signatures
.
get
(),
SignatureDto
.
class
);
}
}
src/main/resources/application.properties
View file @
279e3e25
spring.application.name
=
backend-esign
# App Properties
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.address=192.168.11.106
#server.servlet-path=/*
server.port
=
9091
spring.sql.init.platform
=
postgres
#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://localhost:5432/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00
spring.datasource.password
=
admin
#spring.datasource.username=postgres
#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.password
=
admin
spring.jpa.database
=
postgresql
spring.jpa.show-sql
=
false
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation
=
true
...
...
@@ -34,8 +35,8 @@ spring.servlet.multipart.max-request-size=10MB
spring.mail.properties.mail.smtp.auth
=
true
spring.mail.properties.mail.smtp.starttls.enable
=
true
camunda.bpm.admin-user.email
=
anas
@indatacore.com
camunda.bpm.admin-user.password
=
123456
#camunda.bpm.admin-user.email=anas.jegoual
@indatacore.com
#
camunda.bpm.admin-user.password=123456
...
...
src/main/resources/templates/demande.ftl
0 → 100644
View file @
279e3e25
<!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>
src/main/resources/templates/expiredSoon.ftl
0 → 100644
View file @
279e3e25
<!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>
</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
<span>
${day_date}
</span>
</td>
</tr>
</table>
</div>
</div>
</td>
<td>
</td>
</tr>
</table>
</body>
</html>
src/main/resources/templates/relance.ftl
0 → 100644
View file @
279e3e25
<!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>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment