Merge pull request #244 from Kitzanos/feature/GEPAFINBE-183
GEPAFINBE-183 (Send Email on user onboarding)
This commit is contained in:
@@ -490,6 +490,10 @@ public class GepafinConstant {
|
|||||||
public static final String PREFERRED_CALL_ID="preferredCallId";
|
public static final String PREFERRED_CALL_ID="preferredCallId";
|
||||||
public static final String REGION_ID="regionId";
|
public static final String REGION_ID="regionId";
|
||||||
public static final String DELEGATION_TEMPLATE_CONFIDI="DELEGATION_TEMPLATE_CONFIDI";
|
public static final String DELEGATION_TEMPLATE_CONFIDI="DELEGATION_TEMPLATE_CONFIDI";
|
||||||
|
|
||||||
|
public static final String EMAIL_SUPPORT = "email_support";
|
||||||
|
public static final String PHONE_SUPPORT = "phone_support";
|
||||||
|
|
||||||
public static final String PDF_TRUE="PDF_TRUE";
|
public static final String PDF_TRUE="PDF_TRUE";
|
||||||
public static final String PDF_FALSE="PDF_FALSE";
|
public static final String PDF_FALSE="PDF_FALSE";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ import net.gepafin.tendermanagement.util.LoggingUtil;
|
|||||||
import net.gepafin.tendermanagement.util.Utils;
|
import net.gepafin.tendermanagement.util.Utils;
|
||||||
import net.gepafin.tendermanagement.util.Validator;
|
import net.gepafin.tendermanagement.util.Validator;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.ForbiddenAccessException;
|
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
|
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -40,10 +40,8 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
||||||
@@ -77,7 +75,13 @@ public class UserDao {
|
|||||||
|
|
||||||
@Value("${default.hub.uuid}")
|
@Value("${default.hub.uuid}")
|
||||||
private String defaultHubUuid;
|
private String defaultHubUuid;
|
||||||
|
|
||||||
|
@Value("${app.confidi.login.url.suffix}")
|
||||||
|
private String confidiLogin;
|
||||||
|
|
||||||
|
@Value("${app.bandi.login.url.suffix}")
|
||||||
|
private String bandiLoginUrlSuffix;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private Validator validator;
|
private Validator validator;
|
||||||
|
|
||||||
@@ -138,36 +142,58 @@ public class UserDao {
|
|||||||
/** This code is responsible for adding a version history log for the "Create user" operation. **/
|
/** This code is responsible for adding a version history log for the "Create user" operation. **/
|
||||||
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).newData(userEntity).build());
|
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).newData(userEntity).build());
|
||||||
|
|
||||||
if(beneficiary == null){
|
if(Boolean.FALSE.equals(roleEntity.getRoleType().equals(RoleStatusEnum.ROLE_BENEFICIARY.getValue()))){
|
||||||
sendEmailToOnboardingUser(userEntity);
|
sendEmailToOnboardingUser(userEntity, userReq );
|
||||||
}
|
}
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
public void sendEmailToOnboardingUser(UserEntity userEntity){
|
public void sendEmailToOnboardingUser(UserEntity userEntity,UserReq userReq){
|
||||||
SystemEmailTemplateResponse emailTemplate = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
|
SystemEmailTemplateResponse emailTemplate;
|
||||||
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.USER_ONBOARDING, userEntity.getHub(), null);
|
RoleStatusEnum roleStatus = RoleStatusEnum.valueOf(userEntity.getRoleEntity().getRoleType());
|
||||||
|
|
||||||
|
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType =
|
||||||
|
roleStatus.equals(RoleStatusEnum.ROLE_CONFIDI)
|
||||||
|
? SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.USER_ONBOARDING_CONFIDI
|
||||||
|
: SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.USER_ONBOARDING_BANDI;
|
||||||
|
|
||||||
|
emailTemplate = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, userEntity.getHub(), null);
|
||||||
|
|
||||||
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(), RecipientTypeEnum.USER, userEntity.getId(), userEntity.getEmail(),
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(), RecipientTypeEnum.USER, userEntity.getId(), userEntity.getEmail(),
|
||||||
userEntity.getId(), null, null, null);
|
userEntity.getId(), null, null, null);
|
||||||
String firstName = userEntity.getFirstName() != null ? userEntity.getFirstName() : "";
|
|
||||||
String lastName = userEntity.getLastName() != null ? userEntity.getLastName() : "";
|
Map<String, String> placeholders = replacePlaceholders(userEntity, userReq);
|
||||||
String userName = String.join(" ", firstName, lastName).trim();
|
String body = Utils.replacePlaceholders(emailTemplate.getHtmlContent(), placeholders);
|
||||||
String subject = Utils.replacePlaceholders(emailTemplate.getSubject(), Map.of(
|
|
||||||
"{{user_name}}", userName
|
|
||||||
));
|
|
||||||
String body = Utils.replacePlaceholders(emailTemplate.getHtmlContent(), Map.of(
|
|
||||||
"{{user_name}}", userName,
|
|
||||||
"{{user_email}}", userEntity.getEmail()
|
|
||||||
));
|
|
||||||
|
|
||||||
emailNotificationDao.sendMail(
|
emailNotificationDao.sendMail(
|
||||||
userEntity.getHub().getId(),
|
userEntity.getHub().getId(),
|
||||||
subject,
|
emailTemplate.getSubject(),
|
||||||
body,
|
body,
|
||||||
List.of(userEntity.getEmail()),
|
List.of(userEntity.getEmail()),
|
||||||
emailLogRequest
|
emailLogRequest
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
private BeneficiaryEntity createBeneficiary(RoleEntity roleEntity, UserReq userReq, HubEntity hub) {
|
|
||||||
|
private Map<String, String> replacePlaceholders(UserEntity userEntity, UserReq userReq) {
|
||||||
|
RoleStatusEnum roleStatus = RoleStatusEnum.valueOf(userEntity.getRoleEntity().getRoleType());
|
||||||
|
String confidiLoginUrl = userEntity.getHub().getDomainName() + confidiLogin;
|
||||||
|
String bandiLoginUrl = userEntity.getHub().getDomainName() + bandiLoginUrlSuffix;
|
||||||
|
String hubConfigText = userEntity.getHub().getHubConfig();
|
||||||
|
JSONObject hubConfig = new JSONObject(hubConfigText);
|
||||||
|
|
||||||
|
String gepafinEmail = hubConfig.optString(GepafinConstant.EMAIL_SUPPORT, "");
|
||||||
|
String gepafinPhoneNumber = hubConfig.optString(GepafinConstant.PHONE_SUPPORT, "");
|
||||||
|
|
||||||
|
Map<String, String> placeholders = new HashMap<>();
|
||||||
|
placeholders.put("{{username}}", userEntity.getEmail());
|
||||||
|
placeholders.put("{{userpassword}}",userReq.getPassword());
|
||||||
|
String loginUrl = roleStatus.equals(RoleStatusEnum.ROLE_CONFIDI) ? confidiLoginUrl : bandiLoginUrl;
|
||||||
|
placeholders.put("{{login_url}}",loginUrl);
|
||||||
|
placeholders.put("{{gepafinphonenumber}}", gepafinPhoneNumber);
|
||||||
|
placeholders.put("{{gepafinemail}}", gepafinEmail);
|
||||||
|
return placeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BeneficiaryEntity createBeneficiary(RoleEntity roleEntity, UserReq userReq, HubEntity hub) {
|
||||||
BeneficiaryEntity beneficiaryEntity = null;
|
BeneficiaryEntity beneficiaryEntity = null;
|
||||||
if (RoleStatusEnum.ROLE_BENEFICIARY.getValue().equals(roleEntity.getRoleType()) || RoleStatusEnum.ROLE_CONFIDI.getValue().equals(roleEntity.getRoleType())) {
|
if (RoleStatusEnum.ROLE_BENEFICIARY.getValue().equals(roleEntity.getRoleType()) || RoleStatusEnum.ROLE_CONFIDI.getValue().equals(roleEntity.getRoleType())) {
|
||||||
beneficiaryEntity = new BeneficiaryEntity();
|
beneficiaryEntity = new BeneficiaryEntity();
|
||||||
|
|||||||
@@ -66,4 +66,7 @@ public class HubEntity extends BaseEntity{
|
|||||||
|
|
||||||
@Column(name = "EVALUATION_EXPIRATION_DAYS")
|
@Column(name = "EVALUATION_EXPIRATION_DAYS")
|
||||||
private Long evaluationExpirationDays;
|
private Long evaluationExpirationDays;
|
||||||
|
|
||||||
|
@Column(name = "HUB_CONFIG")
|
||||||
|
private String hubConfig;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,10 +52,10 @@ public class SystemEmailTemplatesEntity extends BaseEntity {
|
|||||||
INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE("INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE"),
|
INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE("INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE"),
|
||||||
ADMISSIBILITY_NOTIFICATION("ADMISSIBILITY_NOTIFICATION"),
|
ADMISSIBILITY_NOTIFICATION("ADMISSIBILITY_NOTIFICATION"),
|
||||||
AMENDMENT_REMINDER("AMENDMENT_REMINDER"),
|
AMENDMENT_REMINDER("AMENDMENT_REMINDER"),
|
||||||
USER_ONBOARDING("USER_ONBOARDING"),
|
USER_ONBOARDING_CONFIDI("USER_ONBOARDING_CONFIDI"),
|
||||||
|
USER_ONBOARDING_BANDI("USER_ONBOARDING_BANDI"),
|
||||||
PASSWORD_RESET("PASSWORD_RESET"),
|
PASSWORD_RESET("PASSWORD_RESET"),
|
||||||
INADMISSIBILITY_TEMPLATE("INADMISSIBILITY_NOTIFICATION");
|
INADMISSIBILITY_TEMPLATE("INADMISSIBILITY_NOTIFICATION");
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
SystemEmailTemplatesEntityTypeEnum(String value) {
|
SystemEmailTemplatesEntityTypeEnum(String value) {
|
||||||
|
|||||||
@@ -68,4 +68,7 @@ default.hub.pdf.banner=https://mementoresources.s3.amazonaws.com/gepafin/staging
|
|||||||
#feign client config
|
#feign client config
|
||||||
spring.cloud.openfeign.client.config.default.connectTimeout=300000
|
spring.cloud.openfeign.client.config.default.connectTimeout=300000
|
||||||
spring.cloud.openfeign.client.config.default.readTimeout=300000
|
spring.cloud.openfeign.client.config.default.readTimeout=300000
|
||||||
spring.rabbitmq.connection-timeout=120000
|
spring.rabbitmq.connection-timeout=120000
|
||||||
|
|
||||||
|
app.bandi.login.url.suffix=/loginadmin
|
||||||
|
app.confidi.login.url.suffix=/confidi
|
||||||
@@ -2621,6 +2621,26 @@
|
|||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
</changeSet>
|
</changeSet>
|
||||||
|
|
||||||
|
<changeSet id="13-03-2025_PK_121745" author="Piyush Kag">
|
||||||
|
<addColumn tableName="hub">
|
||||||
|
<column name="hub_config" type="TEXT"/>
|
||||||
|
</addColumn>
|
||||||
|
|
||||||
|
<sqlFile dbms="postgresql" path="db/dump/update_hub_data_for_hub_config_13-03-2025.sql"/>
|
||||||
|
|
||||||
|
<sqlFile dbms="postgresql"
|
||||||
|
path="db/dump/update_system_email_template_for_confidi_user_13-03-2025.sql"/>
|
||||||
|
|
||||||
|
<sql dbms="postgresql">select
|
||||||
|
setval('gepafin_schema.system_email_template_id_seq', (select
|
||||||
|
max(id)+1
|
||||||
|
from gepafin_schema.system_email_template), false)
|
||||||
|
</sql>
|
||||||
|
<sqlFile dbms="postgresql"
|
||||||
|
path="db/dump/insert_system_email_template_for_user_13-03-2025.sql"/>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
<changeSet id="06-03-2025_NK_190111" author="Nisha Kashyap">
|
<changeSet id="06-03-2025_NK_190111" author="Nisha Kashyap">
|
||||||
<update tableName="role">
|
<update tableName="role">
|
||||||
<column name="permissions" value="VIEW_CONFIDI_CALLS,APPLY_CONFIDI_CALLS"/>
|
<column name="permissions" value="VIEW_CONFIDI_CALLS,APPLY_CONFIDI_CALLS"/>
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
INSERT INTO gepafin_schema.system_email_template
|
||||||
|
(template_name, "type", html_content, subject, "json", "system", is_deleted, created_date, updated_date, email_scenario)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
'Welcome Email for New Bandi User',
|
||||||
|
'USER_ONBOARDING_BANDI',
|
||||||
|
'<html>
|
||||||
|
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
|
||||||
|
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
|
||||||
|
<p><strong>Gentile Utente,</strong></p>
|
||||||
|
<p>Le comunichiamo che il Suo account per accedere al portale è stato creato con successo.</p>
|
||||||
|
<p><strong>Di seguito trova le credenziali di accesso:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Indirizzo portale:</strong> <a href="{{login_url}}">{{login_url}}</a></li>
|
||||||
|
<li><strong>Nome utente:</strong> {{username}}</li>
|
||||||
|
<li><strong>Password:</strong> {{userpassword}}</li>
|
||||||
|
</ul>
|
||||||
|
<p>Al primo accesso le consigliamo di modificare la password con una nuova di Sua scelta.
|
||||||
|
Per motivi di sicurezza, Le consigliamo di scegliere una password che:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Sia composta da almeno 8 caratteri</li>
|
||||||
|
<li>Contenga lettere maiuscole e minuscole</li>
|
||||||
|
<li>Includa numeri e caratteri speciali</li>
|
||||||
|
</ul>
|
||||||
|
<p>In caso di difficoltà durante laccesso o per qualsiasi chiarimento, può contattare il nostro servizio di assistenza:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Email: <a href="mailto:{{gepafinemail}}">{{gepafinemail}}</a></li>
|
||||||
|
<li>Telefono: {{gepafinphonenumber}}</li>
|
||||||
|
</ul>
|
||||||
|
<p>La invitiamo a conservare queste informazioni in un luogo sicuro e a non condividerle con terzi.</p>
|
||||||
|
<p>Cordiali saluti,</p>
|
||||||
|
<p><strong>{{email_signature}}</strong></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>',
|
||||||
|
'Le Sue Credenziali di Accesso al Portale Bandi',
|
||||||
|
NULL,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
CURRENT_TIMESTAMP,
|
||||||
|
CURRENT_TIMESTAMP,
|
||||||
|
'USER_CREATION'
|
||||||
|
);
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
UPDATE hub
|
||||||
|
SET hub_config = '{"email_support": "", "phone_support": ""}'
|
||||||
|
WHERE unique_uuid = 't7jh5wfg9QXylNaTZkPoE';
|
||||||
|
|
||||||
|
-- Update hub table with specific email and phone support values
|
||||||
|
UPDATE hub
|
||||||
|
SET hub_config = '{"email_support": "assistenzaportale@gepafin.it", "phone_support": "3517561769"}'
|
||||||
|
WHERE unique_uuid = 'p4lk3bcx1RStqTaIVVbXs';
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
UPDATE gepafin_schema.system_email_template
|
||||||
|
SET
|
||||||
|
template_name = 'Welcome Email for New Confidi User',
|
||||||
|
"type" = 'USER_ONBOARDING_CONFIDI',
|
||||||
|
html_content = '<html>
|
||||||
|
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
|
||||||
|
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
|
||||||
|
<p><strong>Gentile Utente,</strong></p>
|
||||||
|
<p>Le comunichiamo che il Suo account per accedere al portale Gepafin è stato creato con successo.</p>
|
||||||
|
<p><strong>Di seguito trova le credenziali di accesso:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Indirizzo portale:</strong> <a href="{{login_url}}">{{login_url}}</a></li>
|
||||||
|
<li><strong>Nome utente:</strong> {{username}}</li>
|
||||||
|
<li><strong>Password:</strong> {{userpassword}}</li>
|
||||||
|
</ul>
|
||||||
|
<p>Al primo accesso le consigliamo di modificare la password con una nuova di Sua scelta.</p>
|
||||||
|
<p><strong>Suggerimenti per la sicurezza della password:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Sia composta da almeno 8 caratteri</li>
|
||||||
|
<li>Contenga lettere maiuscole e minuscole</li>
|
||||||
|
<li>Includa numeri e caratteri speciali</li>
|
||||||
|
</ul>
|
||||||
|
<p>Se non avesse effettuato alcuna richiesta di registrazione, La invitiamo a comunicarcelo tempestivamente contattando il nostro servizio di assistenza.</p>
|
||||||
|
<p><strong>Contatti per assistenza:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>Email: <a href="mailto:{{gepafinemail}}">{{gepafinemail}}</a></li>
|
||||||
|
<li>Telefono: {{gepafinphonenumber}}</li>
|
||||||
|
</ul>
|
||||||
|
<p>La invitiamo a conservare queste informazioni in un luogo sicuro e a non condividerle con terzi.</p>
|
||||||
|
<p>Cordiali saluti,</p>
|
||||||
|
<p><strong>{{email_signature}}</strong></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>',
|
||||||
|
subject = 'Le Sue Credenziali di Accesso al Portale Gepafin Confidi',
|
||||||
|
updated_date = CURRENT_TIMESTAMP
|
||||||
|
WHERE template_name = 'Welcome Email for New User' AND "type" = 'USER_ONBOARDING';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user