From 3f4d997aba2af2b44c14dc660b2e8cd0d76495e1 Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 17 Mar 2025 16:36:21 +0530 Subject: [PATCH] Done ticket GEPAFINBE-183 --- .../constants/GepafinConstant.java | 3 + .../gepafin/tendermanagement/dao/UserDao.java | 68 +++++++++++++------ .../tendermanagement/entities/HubEntity.java | 3 + .../entities/SystemEmailTemplatesEntity.java | 4 +- src/main/resources/application.properties | 5 +- .../db/changelog/db.changelog-1.0.0.xml | 21 ++++++ ...tem_email_template_for_user_13-03-2025.sql | 43 ++++++++++++ ...ate_hub_data_for_hub_config_13-03-2025.sql | 8 +++ ...l_template_for_confidi_user_13-03-2025.sql | 38 +++++++++++ 9 files changed, 169 insertions(+), 24 deletions(-) create mode 100644 src/main/resources/db/dump/insert_system_email_template_for_user_13-03-2025.sql create mode 100644 src/main/resources/db/dump/update_hub_data_for_hub_config_13-03-2025.sql create mode 100644 src/main/resources/db/dump/update_system_email_template_for_confidi_user_13-03-2025.sql diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index ff6ac233..44ee3380 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -490,6 +490,9 @@ public class GepafinConstant { public static final String REGION_ID="regionId"; + public static final String EMAIL_SUPPORT = "email_support"; + public static final String PHONE_SUPPORT = "phone_support"; + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java index f1bbb0b7..890932ee 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java @@ -24,11 +24,11 @@ import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; 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.Status; import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -40,10 +40,8 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import java.util.*; -import java.util.Map; import java.util.stream.Collectors; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; @@ -77,7 +75,13 @@ public class UserDao { @Value("${default.hub.uuid}") private String defaultHubUuid; - + + @Value("${app.confidi.login.url.suffix}") + private String confidiLogin; + + @Value("${app.bandi.login.url.suffix}") + private String bandiLoginUrlSuffix; + @Autowired private Validator validator; @@ -139,35 +143,57 @@ public class UserDao { loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).newData(userEntity).build()); if(beneficiary == null){ - sendEmailToOnboardingUser(userEntity); + sendEmailToOnboardingUser(userEntity, userReq ); } return token; } - public void sendEmailToOnboardingUser(UserEntity userEntity){ - SystemEmailTemplateResponse emailTemplate = systemEmailTemplatesService.retrieveTemplateByTypeAndCall( - SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.USER_ONBOARDING, userEntity.getHub(), null); + public void sendEmailToOnboardingUser(UserEntity userEntity,UserReq userReq){ + SystemEmailTemplateResponse emailTemplate; + 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(), userEntity.getId(), null, null, null); - String firstName = userEntity.getFirstName() != null ? userEntity.getFirstName() : ""; - String lastName = userEntity.getLastName() != null ? userEntity.getLastName() : ""; - String userName = String.join(" ", firstName, lastName).trim(); - 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() - )); + + Map placeholders = replacePlaceholders(userEntity, userReq); + String body = Utils.replacePlaceholders(emailTemplate.getHtmlContent(), placeholders); emailNotificationDao.sendMail( userEntity.getHub().getId(), - subject, + emailTemplate.getSubject(), body, List.of(userEntity.getEmail()), emailLogRequest ); } - private BeneficiaryEntity createBeneficiary(RoleEntity roleEntity, UserReq userReq, HubEntity hub) { + + private Map 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 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; if (RoleStatusEnum.ROLE_BENEFICIARY.getValue().equals(roleEntity.getRoleType())) { beneficiaryEntity = new BeneficiaryEntity(); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/HubEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/HubEntity.java index ccd6c325..603b42b4 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/HubEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/HubEntity.java @@ -66,4 +66,7 @@ public class HubEntity extends BaseEntity{ @Column(name = "EVALUATION_EXPIRATION_DAYS") private Long evaluationExpirationDays; + + @Column(name = "HUB_CONFIG") + private String hubConfig; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java index 8a3c964b..b2c3cfb7 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java @@ -52,10 +52,10 @@ public class SystemEmailTemplatesEntity extends BaseEntity { INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE("INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE"), ADMISSIBILITY_NOTIFICATION("ADMISSIBILITY_NOTIFICATION"), AMENDMENT_REMINDER("AMENDMENT_REMINDER"), - USER_ONBOARDING("USER_ONBOARDING"), + USER_ONBOARDING_CONFIDI("USER_ONBOARDING_CONFIDI"), + USER_ONBOARDING_BANDI("USER_ONBOARDING_BANDI"), PASSWORD_RESET("PASSWORD_RESET"), INADMISSIBILITY_TEMPLATE("INADMISSIBILITY_NOTIFICATION"); - private String value; SystemEmailTemplatesEntityTypeEnum(String value) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d0af99d3..3b9bd853 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -68,4 +68,7 @@ default.hub.pdf.banner=https://mementoresources.s3.amazonaws.com/gepafin/staging #feign client config spring.cloud.openfeign.client.config.default.connectTimeout=300000 spring.cloud.openfeign.client.config.default.readTimeout=300000 -spring.rabbitmq.connection-timeout=120000 \ No newline at end of file +spring.rabbitmq.connection-timeout=120000 + +app.bandi.login.url.suffix=/loginadmin +app.confidi.login.url.suffix=/confidi \ No newline at end of file diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 04ed853f..22b82c67 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -2621,4 +2621,25 @@ + + + + + + + + + + + select + setval('gepafin_schema.system_email_template_id_seq', (select + max(id)+1 + from gepafin_schema.system_email_template), false) + + + + + diff --git a/src/main/resources/db/dump/insert_system_email_template_for_user_13-03-2025.sql b/src/main/resources/db/dump/insert_system_email_template_for_user_13-03-2025.sql new file mode 100644 index 00000000..adf2450a --- /dev/null +++ b/src/main/resources/db/dump/insert_system_email_template_for_user_13-03-2025.sql @@ -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', + ' + +
+

Gentile Utente,

+

Le comunichiamo che il Suo account per accedere al portale è stato creato con successo.

+

Di seguito trova le credenziali di accesso:

+
    +
  • Indirizzo portale: {{login_url}}
  • +
  • Nome utente: {{username}}
  • +
  • Password: {{userpassword}}
  • +
+

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:

+
    +
  • Sia composta da almeno 8 caratteri
  • +
  • Contenga lettere maiuscole e minuscole
  • +
  • Includa numeri e caratteri speciali
  • +
+

In caso di difficoltà durante laccesso o per qualsiasi chiarimento, può contattare il nostro servizio di assistenza:

+ +

La invitiamo a conservare queste informazioni in un luogo sicuro e a non condividerle con terzi.

+

Cordiali saluti,

+

{{email_signature}}

+
+ + ', + 'Le Sue Credenziali di Accesso al Portale Bandi', + NULL, + true, + false, + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP, + 'USER_CREATION' +); diff --git a/src/main/resources/db/dump/update_hub_data_for_hub_config_13-03-2025.sql b/src/main/resources/db/dump/update_hub_data_for_hub_config_13-03-2025.sql new file mode 100644 index 00000000..fafbf66b --- /dev/null +++ b/src/main/resources/db/dump/update_hub_data_for_hub_config_13-03-2025.sql @@ -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": "email@support.it", "phone_support": "09998888"}' +WHERE unique_uuid = 'p4lk3bcx1RStqTaIVVbXs'; \ No newline at end of file diff --git a/src/main/resources/db/dump/update_system_email_template_for_confidi_user_13-03-2025.sql b/src/main/resources/db/dump/update_system_email_template_for_confidi_user_13-03-2025.sql new file mode 100644 index 00000000..0146994f --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_confidi_user_13-03-2025.sql @@ -0,0 +1,38 @@ +UPDATE gepafin_schema.system_email_template +SET + template_name = 'Welcome Email for New Confidi User', + "type" = 'USER_ONBOARDING_CONFIDI', + html_content = ' + +
+

Gentile Utente,

+

Le comunichiamo che il Suo account per accedere al portale è stato creato con successo.

+

Di seguito trova le credenziali di accesso:

+ +
  • Indirizzo portale: {{login_url}}
  • +
  • Nome utente: {{username}}
  • +
  • Password: {{userpassword}}
  • + +

    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:

    +
      +
    • Sia composta da almeno 8 caratteri
    • +
    • Contenga lettere maiuscole e minuscole
    • +
    • Includa numeri e caratteri speciali
    • +
    +

    In caso di difficoltà durante laccesso o per qualsiasi chiarimento, può contattare il nostro servizio di assistenza:

    + +

    La invitiamo a conservare queste informazioni in un luogo sicuro e a non condividerle con terzi.

    +

    Cordiali saluti,

    +

    {{email_signature}}

    +
    + + ', + 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'; + +