diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 73dc49ad..66cb3ed7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -1295,8 +1295,9 @@ public class ApplicationAmendmentRequestDao { if (Boolean.TRUE.equals(amendment.getIsEmail()) && email != null && !email.isEmpty()) { log.info("Sending reminder email to: {}", email); EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(), RecipientTypeEnum.USER, beneficiaryUser.getId(), email, - beneficiaryUser.getId(), applicationEntity.getId(), amendment.getId(), applicationEntity.getCall().getId()); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email), emailLogRequest); + beneficiaryUser.getId(), applicationEntity.getId(), amendment.getId(), applicationEntity.getCall().getId(),subject,body); + EmailLogEntity emailLog=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email), emailLog); EmailSendResponse emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request); List responses = List.of(emailSendResponse); if (!Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())){ diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 56e267be..bfc0e4d5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -1232,7 +1232,7 @@ public class ApplicationDao { // Replace placeholders in the subject and body String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.USER,userEntity.getId(),userEntity.getEmail(),userEntity.getId(),applicationEntity.getId(),null,applicationEntity.getCall().getId()); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.USER,userEntity.getId(),userEntity.getEmail(),userEntity.getId(),applicationEntity.getId(),null,applicationEntity.getCall().getId(),subject,body); String email = userEntity.getEmail(); if (userEntity.getBeneficiary() != null) { emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY); @@ -1245,12 +1245,14 @@ public class ApplicationDao { } emailLogRequest.setRecipientId(userEntity.getBeneficiary().getId()); } - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogEntity); if (Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid)) && userEntity.getBeneficiary() != null) { emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY); email = userEntity.getBeneficiary().getEmail(); emailLogRequest.setRecipientId(userEntity.getBeneficiary().getId()); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest); + EmailLogEntity emailLog=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLog); } List recipientEmails = new ArrayList<>(); // recipientEmails.add(email); @@ -1277,7 +1279,8 @@ public class ApplicationDao { emailLogRequest.setRecipientType(RecipientTypeEnum.COMPANY); emailLogRequest.setRecipientEmails(String.valueOf(recipientEmails)); } - emailNotificationDao.sendMail(hub.getId(), subject, body, recipientEmails,emailLogRequest); + EmailLogEntity emailLog=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body, recipientEmails,emailLog); } private void sendMailTodefaultSystemAndGepafin(UserEntity userEntity, ApplicationEntity applicationEntity) { CallEntity call = applicationEntity.getCall(); @@ -1319,7 +1322,7 @@ public class ApplicationDao { String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,userEntity.getEmail(),userEntity.getId(),applicationEntity.getId(),null,applicationEntity.getCall().getId()); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,userEntity.getEmail(),userEntity.getId(),applicationEntity.getId(),null,applicationEntity.getCall().getId(),subject,body); List hubEmails = Arrays.stream(hub.getEmail().split(",")) .map(String::trim) @@ -1327,9 +1330,11 @@ public class ApplicationDao { .toList(); emailLogRequest.setRecipientEmails(hub.getEmail()); - emailNotificationDao.sendMail(hub.getId(), subject, body,hubEmails,emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body,hubEmails,emailLogEntity); emailLogRequest.setRecipientEmails(rinaldoEmail); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest); + EmailLogEntity emailLog=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLog); } public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId, MultipartFile file) { @@ -2447,14 +2452,14 @@ public class ApplicationDao { } - public void sendApplicationSubmissionFailureEmail(EmailLogRequest emailLogRequest){ + public void sendApplicationSubmissionFailureEmail(EmailLogEntity emailLogEntity){ - Long callId = emailLogRequest.getCallId(); + Long callId = emailLogEntity.getCallId(); CallEntity call = callService.validateCall(callId); HubEntity hub = call.getHub(); - Long userId = emailLogRequest.getUserId(); + Long userId = emailLogEntity.getUserId(); UserEntity user = userService.validateUser(userId); - Long applicationId = emailLogRequest.getApplicatioId(); + Long applicationId = emailLogEntity.getApplicationId(); ApplicationEntity applicationEntity = validateApplication(applicationId); CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); @@ -2467,7 +2472,7 @@ public class ApplicationDao { subjectPlaceholders.put("{{call_name}}", call.getName()); Map bodyPlaceholders = new HashMap<>(); - bodyPlaceholders.put("{{scenario}}",emailLogRequest.getEmailType().getValue()); + bodyPlaceholders.put("{{scenario}}",emailLogEntity.getEmailType()); bodyPlaceholders.put("{{call_name}}", call.getName()); bodyPlaceholders.put("{{application_id}}", applicationEntity.getId().toString()); bodyPlaceholders.put("{{company_name}}", company.getCompanyName()); @@ -2476,15 +2481,16 @@ public class ApplicationDao { protocolNumber= String.valueOf(applicationEntity.getProtocol().getProtocolNumber()); } bodyPlaceholders.put("{{protocol_number}}", protocolNumber); - bodyPlaceholders.put("{{user_action_id}}",emailLogRequest.getUserActionId().toString()); + bodyPlaceholders.put("{{user_action_id}}",emailLogEntity.getUserAction().getId().toString()); String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,user.getEmail(),user.getId(),applicationEntity.getId(),null,callId); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,user.getEmail(),user.getId(),applicationEntity.getId(),null,callId,subject,body); emailLogRequest.setRecipientEmails(GepafinConstant.RINALDO_EMAIL); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(GepafinConstant.RINALDO_EMAIL),emailLogRequest); + EmailLogEntity newEmailLogEntity=emailLogDao.createEmailLog(emailLogRequest,null); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(GepafinConstant.RINALDO_EMAIL),newEmailLogEntity); } public byte[] downloadRankingCsv(Long callId,UserEntity userEntity) { diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailDao.java index 244df6a4..ac790906 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailDao.java @@ -73,8 +73,9 @@ public class EmailDao { log.getUserId(), log.getApplicationId(), log.getAmendmentId(), - log.getCallId() + log.getCallId(),log.getEmailSubject(),log.getEmailBody() ); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,Utils.convertJsonStringToList(log.getAttachments(),String.class)); List recipients = Utils.commaSeparatedStringToList(log.getRecipientEmails()); CallEntity call = callService.validateCall(log.getCallId()); @@ -83,7 +84,7 @@ public class EmailDao { log.getEmailSubject(), log.getEmailBody(), recipients, - emailLogRequest + emailLogEntity ); } EmailSendResponse emailSendResponse = buildEmailSendResponseFromRequest(request); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java index 747c9e83..9bc89426 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java @@ -10,10 +10,12 @@ import net.gepafin.tendermanagement.repositories.EmailLogRepository; import net.gepafin.tendermanagement.repositories.UserActionsRepository; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.LoggingUtil; +import net.gepafin.tendermanagement.util.Utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDateTime; +import java.util.List; @Component public class EmailLogDao { @@ -28,7 +30,7 @@ public class EmailLogDao { private LoggingUtil loggingUtil; - public EmailLogEntity createEmailLog(EmailLogRequest emailLogRequest) { + public EmailLogEntity createEmailLog(EmailLogRequest emailLogRequest,List attachments) { EmailLogEntity emailLogEntity = new EmailLogEntity(); emailLogEntity.setEmailType(emailLogRequest.getEmailType().getValue()); @@ -37,17 +39,17 @@ public class EmailLogDao { emailLogEntity.setEmailSubject(emailLogRequest.getEmailSubject()); emailLogEntity.setEmailBody(emailLogRequest.getEmailBody()); emailLogEntity.setSendStatus(emailLogRequest.getSendStatus()); - emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); // Set to now if null emailLogEntity.setErrorMessage(emailLogRequest.getErrorMessage()); emailLogEntity.setUserId(emailLogRequest.getUserId()); emailLogEntity.setEmailServiceResponse(emailLogRequest.getEmailServiceResponse()); emailLogEntity.setRecipientEmails(emailLogRequest.getRecipientEmails()); - emailLogEntity.setEmailServiceType(emailLogRequest.getEmailServiceType().getValue()); emailLogEntity.setIsDeleted(false); emailLogEntity.setApplicationId(emailLogRequest.getApplicatioId()); emailLogEntity.setAmendmentId(emailLogRequest.getAmendmentId()); emailLogEntity.setCallId(emailLogRequest.getCallId()); emailLogEntity.setUserAction(loggingUtil.getUserActionLogById(emailLogRequest.getUserActionId())); + emailLogEntity.setSendStatus(StatusTypeEnum.PENDING.getValue()); + emailLogEntity.setAttachments(Utils.convertListToJsonString(attachments)); emailLogEntity = saveEmailLogEntity(emailLogEntity); return emailLogEntity; } @@ -55,7 +57,7 @@ public class EmailLogDao { return emailLogRepository.save(emailLogEntity); } public EmailLogRequest createEmailLogRequest(EmailScenarioTypeEnum emailType, RecipientTypeEnum recipientType, Long recipientId, - String recipientEmails, Long userId,Long applicationId,Long amendmentId,Long callId) { + String recipientEmails, Long userId, Long applicationId, Long amendmentId, Long callId, String subject, String body) { EmailLogRequest emailLogRequest = new EmailLogRequest(); Long userActionId =(Long) request.getAttribute(GepafinConstant.USER_ACTION_ID); emailLogRequest.setEmailType(emailType); @@ -67,6 +69,8 @@ public class EmailLogDao { emailLogRequest.setAmendmentId(amendmentId); emailLogRequest.setCallId(callId); emailLogRequest.setUserActionId(userActionId); + emailLogRequest.setEmailSubject(subject); + emailLogRequest.setEmailBody(body); return emailLogRequest; } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index da689b79..8bf116aa 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -143,23 +143,9 @@ public class EmailNotificationDao { applicationAmendmentRequest = applicationAmendmentRequestDao.validateApplicationAmendmentRequest(amendmentId); } List attachmentRequests =new ArrayList<>(); - S3DocxProcessor processor = new S3DocxProcessor(s3Client); List urls=new ArrayList<>(); - Map replacements=new HashMap<>(); List documentEntities=new ArrayList<>(); if(systemEmailTemplateResponse.getEmailScenario().equals(EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED)) { - String amount=Utils.convertToItalianFormat(String.valueOf(applicationEntity.getAmountAccepted())); - String protocolNumber=applicationEntity.getProtocol().getExternalProtocolNumber(); - if(protocolNumber==null){ - protocolNumber= String.valueOf(applicationEntity.getProtocol().getProtocolNumber()); - } - replacements = Map.of( - "{call_name}", applicationEntity.getCall().getName(), - "{amount_accepted}", amount, - "{pec}", "bandi.gepafin@legalmail.it", - "{company_name}", company.getCompanyName(), - "{protocol_number}", protocolNumber - ); if(Boolean.TRUE.equals(AmendmentDocumentTypeEnum.ALTRE_GARANZIE.getValue().equals(applicationAmendmentRequest.getAmendmentDocumentType()))){ documentEntities=documentRepository.findBySourceInAndIsDeletedFalse(List.of(applicationAmendmentRequest.getAmendmentDocumentType(),"MODELLO_AUTOCERTIFICAZIONE","MODELLO_PRIVACY")); }else { @@ -192,20 +178,7 @@ public class EmailNotificationDao { urls = documentEntities.stream() .map(DocumentEntity::getFilePath) // or getUrl() .collect(Collectors.toList()); - if(Boolean.FALSE.equals(urls.isEmpty())) { - Map processedFiles = null; - try { - processedFiles = processor.processFiles(urls, replacements); - } catch (IOException e) { - throw new RuntimeException(e); - } - for (Map.Entry entry : processedFiles.entrySet()) { - AttachmentRequest attachmentRequest = new AttachmentRequest(); - attachmentRequest.setName(entry.getKey()); // e.g. "path/file1.docx" - attachmentRequest.setFile(entry.getValue().getFile()); // updated file content - attachmentRequests.add(attachmentRequest); - } - } + UserWithCompanyEntity userWithCompany=companyService.getUserWithCompany(userEntity.getId(),company.getId()); String companyEmail = userWithCompany.getEmail(); String contactEmail = userWithCompany.getContactEmail(); @@ -217,22 +190,25 @@ public class EmailNotificationDao { recipientEmails.add(userWithCompany.getPec()); } EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY,company.getId() , - String.valueOf(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + String.valueOf(recipientEmails), userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, recipientEmails, emailLogEntity); } else { if (companyEmail != null && !companyEmail.isEmpty()) { EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY, company.getId(), - companyEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + companyEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, List.of(companyEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, List.of(companyEmail), emailLogEntity); } if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY, company.getId(), - contactEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + contactEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, List.of(contactEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, List.of(contactEmail), emailLogEntity); } } @@ -246,16 +222,18 @@ public class EmailNotificationDao { beneficiaryEmail=userEntity.getBeneficiary().getEmail(); } EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), recipientTypeEnum,userEntity.getBeneficiary().getId() , - beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogEntity); } if (Boolean.TRUE.equals(userEntity.getHub().getUniqueUuid().equals(defaultHubUuid)) && userEntity.getBeneficiary() != null) { String beneficiaryEmail = userEntity.getBeneficiary().getEmail(); EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY, userEntity.getBeneficiary().getId(), - beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogEntity); } if(userEntity.getHub().getEmail() != null){ String hubEmails = userEntity.getHub().getEmail(); @@ -264,19 +242,21 @@ public class EmailNotificationDao { hubEmail = hubEmail.trim(); if (!hubEmail.isEmpty()) { EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null, - hubEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + hubEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, List.of(hubEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, List.of(hubEmail), emailLogEntity); } } } if (GepafinConstant.RINALDO_EMAIL.equals(rinaldoEmail)) { EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null , - rinaldoEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + rinaldoEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); //SMTP emailLogRequest.setAttachments(attachmentRequests); - sendMail(null, subject, body, List.of(rinaldoEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(null, subject, body, List.of(rinaldoEmail), emailLogEntity); } if (applicationEvaluationEntity.isPresent()) { Long preInstructorId = applicationEvaluationEntity.get().getUserId(); // Assuming UserEntity has an email field @@ -284,9 +264,10 @@ public class EmailNotificationDao { String preInstructorEmail = instructorUser.getEmail(); if (preInstructorEmail != null && !preInstructorEmail.isEmpty()) { EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.INSTRUCTOR, instructorUser.getId(), - preInstructorEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId()); + preInstructorEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId(),subject,body); emailLogRequest.setAttachments(attachmentRequests); - sendMail(applicationEntity.getHubId(), subject, body, List.of(preInstructorEmail), emailLogRequest); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,urls); + sendMail(applicationEntity.getHubId(), subject, body, List.of(preInstructorEmail), emailLogEntity); } } } @@ -435,18 +416,31 @@ public class EmailNotificationDao { sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null,null,emailType); } - public void sendMail(Long hubId, String subject, String body, List recipientEmails, EmailLogRequest emailLogRequest) { + public void sendMail(Long hubId, String subject, String body, List recipientEmails, EmailLogEntity emailLogEntity) { EmailConfig emailConfig = new EmailConfig(); + Boolean isSendEmail=Boolean.TRUE; + + HubEntity hubEntity = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId)); + if(Boolean.TRUE.equals(hubEntity.getUniqueUuid().equals(defaultHubUuid))){ + if(Boolean.FALSE.equals(emailLogEntity.getEmailType().equals(EmailScenarioTypeEnum.USER_CREATION.getValue())) + || Boolean.FALSE.equals(emailLogEntity.getEmailType().equals(EmailScenarioTypeEnum.APPLICATION_AMENDMENT_REMINDER.getValue())) + || Boolean.FALSE.equals(emailLogEntity.getEmailType().equals(EmailScenarioTypeEnum.APPLICATION_SUBMITTED.getValue())) + || Boolean.FALSE.equals(emailLogEntity.getEmailType().equals(EmailScenarioTypeEnum.PASSWORD_RESET_REQUEST.getValue()))) { + isSendEmail = Boolean.FALSE; + } + } if (recipientEmails.stream().anyMatch(email -> email.equals(GepafinConstant.RINALDO_EMAIL))) { + emailConfig.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE.getValue()); EmailService emailService = emailServiceFactory.getEmailService(emailConfig.getEmailServiceType()); - emailService.sendEmail(subject, body, recipientEmails, emailConfig, emailLogRequest); + emailService.sendEmail(subject, body, recipientEmails, emailConfig,emailLogEntity,isSendEmail); } else { emailConfig = retrieveEmailConfig(hubId); EmailService emailService = emailServiceFactory.getEmailService(emailConfig.getEmailServiceType()); - emailService.sendEmail(subject, body, recipientEmails, emailConfig, emailLogRequest); + emailService.sendEmail(subject, body, recipientEmails, emailConfig,emailLogEntity,isSendEmail); } + } public EmailConfig retrieveEmailConfig(Long hubId) { @@ -554,4 +548,19 @@ public class EmailNotificationDao { EmailContentResponse emailContentResponse= new EmailContentResponse(subject, body, systemEmailTemplateResponse); sendEmails(applicationEntity, user, null,null,emailContentResponse.getSystemEmailTemplateResponse(),emailContentResponse.getSubject(),emailContentResponse.getBody(),applicationContractEntity.getId()); } + public void sendPendingMail(Long hubId, String subject, String body, List recipientEmails, EmailLogEntity emailLogEntity) { + + EmailConfig emailConfig = new EmailConfig(); + if (recipientEmails.stream().anyMatch(email -> email.equals(GepafinConstant.RINALDO_EMAIL))) { + + emailConfig.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE.getValue()); + EmailService emailService = emailServiceFactory.getEmailService(emailConfig.getEmailServiceType()); + emailService.sendEmail(subject, body, recipientEmails, emailConfig,emailLogEntity,true); + } else { + emailConfig = retrieveEmailConfig(hubId); + EmailService emailService = emailServiceFactory.getEmailService(emailConfig.getEmailServiceType()); + emailService.sendEmail(subject, body, recipientEmails, emailConfig,emailLogEntity,true); + } + + } } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/dao/PecMailDao.java b/src/main/java/net/gepafin/tendermanagement/dao/PecMailDao.java index f24c6be8..18240044 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/PecMailDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/PecMailDao.java @@ -50,24 +50,28 @@ public class PecMailDao { private ApplicationService applicationService; - public PecMailResponse sendPecMail(HttpServletRequest request, List userActionIds) { + public List sendPecMail(HttpServletRequest request, List userActionIds) { + List pecMailResponses=new ArrayList<>(); for (Long userActionId: userActionIds) { List emailLogs = getEmailLogEntities(request, userActionId); for (EmailLogEntity log : emailLogs) { List recipients = Utils.commaSeparatedStringToList(log.getRecipientEmails()); CallEntity call = callService.validateCall(log.getCallId()); - emailNotificationDao.sendMail( + emailNotificationDao.sendPendingMail( call.getHub().getId(), log.getEmailSubject(), log.getEmailBody(), recipients, - null + log ); - + ApplicationEntity applicationEntity=applicationService.validateApplication(log.getApplicationId()); + String callName=applicationEntity.getCall().getName(); + PecMailResponse pecMailResponse=createPecMailResponse(log.getUserAction().getId(),log,callName); + pecMailResponses.add(pecMailResponse); } } - return null; + return pecMailResponses; } private List getEmailLogEntities(HttpServletRequest request, Long userActionId) { @@ -77,7 +81,7 @@ public class PecMailDao { } validator.validateHubId(request, userActionEntity.getHubId()); - List emailLogs = emailLogRepository.findByUserActionIdAndEmailServiceTypeAndSendStatus(userActionId, EmailServiceTypeEnum.PEC_SERVICE.getValue(), StatusTypeEnum.PENDING.getValue()); + List emailLogs = emailLogRepository.findByUserActionIdAndSendStatusAndIsDeletedFalse(userActionId,StatusTypeEnum.PENDING.getValue()); if (emailLogs.isEmpty()) { log.info("No emails found for given userActionId: {}", userActionId); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java index 0403fde3..ab8f8831 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java @@ -192,19 +192,19 @@ public class UserDao { : SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.USER_ONBOARDING_BANDI; emailTemplate = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, userEntity.getHub(), null); - + Map placeholders = replacePlaceholders(userEntity, userReq); + String body = Utils.replacePlaceholders(emailTemplate.getHtmlContent(), placeholders); EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(), RecipientTypeEnum.USER, userEntity.getId(), userEntity.getEmail(), - userEntity.getId(), null, null, null); + userEntity.getId(), null, null, null,emailTemplate.getSubject(),body); - Map placeholders = replacePlaceholders(userEntity, userReq); - String body = Utils.replacePlaceholders(emailTemplate.getHtmlContent(), placeholders); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,null); emailNotificationDao.sendMail( userEntity.getHub().getId(), emailTemplate.getSubject(), body, List.of(userEntity.getEmail()), - emailLogRequest + emailLogEntity ); } @@ -545,15 +545,7 @@ public class UserDao { redirectUrl = user.getHub().getDomainName(); } - EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest( - emailTemplate.getEmailScenario(), - RecipientTypeEnum.USER, - user.getId(), - user.getEmail(), - user.getId(), - null, - null, - null); + redirectUrl = String.format( user.getHub().getDomainName() + GepafinConstant.RESET_PASSWORD_URL_FORMAT, token, @@ -569,12 +561,22 @@ public class UserDao { "{{user_name}}", userName, "{{reset_password_link}}", redirectUrl )); + EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest( + emailTemplate.getEmailScenario(), + RecipientTypeEnum.USER, + user.getId(), + user.getEmail(), + user.getId(), + null, + null, + null,subject,body); + EmailLogEntity emailLogEntity=emailLogDao.createEmailLog(emailLogRequest,null); emailNotificationDao.sendMail( user.getHub().getId(), subject, body, List.of(user.getEmail()), - emailLogRequest + emailLogEntity ); log.info("Password reset token email sent to: {}", user.getEmail()); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java index 1f8f3fe5..0a4dfc90 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java @@ -59,5 +59,8 @@ public class EmailLogEntity extends BaseEntity{ @ManyToOne @JoinColumn(name = "user_action_id") private UserActionEntity userAction; + + @Column(name = "ATTACHMENTS") + private String attachments; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java index 3a021127..057afff7 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java @@ -24,8 +24,11 @@ public interface EmailLogRepository extends JpaRepository { String sendStatus ); + List findByUserActionIdAndSendStatusAndIsDeletedFalse(Long userActionId,String status); + + @Query(value = """ - SELECT DISTINCT ON (user_action_id) * FROM gepafin_schema.email_log WHERE send_status = 'PENDING' AND is_deleted = false """, nativeQuery = true) + SELECT DISTINCT ON (user_action_id) * FROM gepafin_schema.email_log WHERE send_status = 'PENDING' AND is_deleted = false""", nativeQuery = true) List findPendingPECEmailLogs(); diff --git a/src/main/java/net/gepafin/tendermanagement/service/PecMailService.java b/src/main/java/net/gepafin/tendermanagement/service/PecMailService.java index 2d7dbd30..77339aae 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/PecMailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/PecMailService.java @@ -8,7 +8,7 @@ import java.util.List; public interface PecMailService { - public PecMailResponse sendPecMail(HttpServletRequest request, List userActionIds); + public List sendPecMail(HttpServletRequest request, List userActionIds); public List getEmailLogByUserActionId(HttpServletRequest request, Long userActionId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java index 395456e8..9f4f7e5d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java @@ -1,12 +1,13 @@ package net.gepafin.tendermanagement.service.impl; +import net.gepafin.tendermanagement.entities.EmailLogEntity; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; import java.util.List; public interface EmailService { - void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest); + void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogEntity emailLogEntity,Boolean isSendEmail); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java index 978ea459..944ebda0 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java @@ -8,6 +8,8 @@ import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; +import net.gepafin.tendermanagement.repositories.EmailLogRepository; +import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; @@ -15,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.Base64; import java.util.List; @@ -30,8 +33,11 @@ public class MailgunEmailService implements EmailService { @Autowired private EmailLogDao emailLogDao; + @Autowired + private EmailLogRepository emailLogRepository; + @Override - public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) { + public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogEntity emailLogEntity,Boolean isSendEmail) { if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) { return; @@ -45,10 +51,8 @@ public class MailgunEmailService implements EmailService { // Send email via Mailgun API HttpResponse response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - emailLogRequest.setEmailSubject(subject); - emailLogRequest.setEmailBody(body); - emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); - emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails)); + emailLogEntity.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); + emailLogEntity.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails)); try { Unirest.setTimeouts(0, 0); response2 = Unirest.post(url) @@ -60,16 +64,17 @@ public class MailgunEmailService implements EmailService { .field("html", body) .asString(); }catch(Exception e) { - emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE); - emailLogRequest.setErrorMessage(e.getMessage()); - EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); - throw new RuntimeException("Failed to send email via Mailgun: " + response2.getStatus()); + emailLogEntity.setSendStatus(StatusTypeEnum.FAILED.getValue()); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE.getValue()); + emailLogEntity.setErrorMessage(e.getMessage()); + emailLogRepository.save(emailLogEntity); + throw new RuntimeException("Failed to send email via Mailgun: " + response2.getStatus()); } - emailLogRequest.setEmailServiceResponse(response2.getBody()); + emailLogEntity.setEmailServiceResponse(response2.getBody()); } - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE); - EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE.getValue()); + emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + emailLogRepository.save(emailLogEntity); } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index 85153e91..f29750fc 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.service.impl; +import com.amazonaws.services.s3.AmazonS3Client; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.mashape.unirest.http.HttpResponse; @@ -9,14 +10,18 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.dao.ApplicationDao; import net.gepafin.tendermanagement.dao.EmailLogDao; import net.gepafin.tendermanagement.dao.NotificationDao; +import net.gepafin.tendermanagement.entities.ApplicationEntity; +import net.gepafin.tendermanagement.entities.CompanyEntity; +import net.gepafin.tendermanagement.entities.EmailLogEntity; import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum; import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; import net.gepafin.tendermanagement.enums.NotificationTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; -import net.gepafin.tendermanagement.model.request.EmailConfig; -import net.gepafin.tendermanagement.model.request.EmailLogRequest; -import net.gepafin.tendermanagement.model.request.NotificationReq; -import net.gepafin.tendermanagement.model.request.PecEmailRequest; +import net.gepafin.tendermanagement.model.request.*; +import net.gepafin.tendermanagement.repositories.EmailLogRepository; +import net.gepafin.tendermanagement.service.CompanyService; +import net.gepafin.tendermanagement.util.DateTimeUtil; +import net.gepafin.tendermanagement.util.S3DocxProcessor; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; @@ -25,6 +30,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -51,65 +59,109 @@ public class PecEmailService implements EmailService { @Autowired private ApplicationDao applicationDao; + @Autowired + private CompanyService companyService; + + @Autowired + private AmazonS3Client s3Client; + + @Autowired + private EmailLogRepository emailLogRepository; + @Override - public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) { + public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogEntity emailLogEntity, Boolean isSendEmail) { if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) { return; } + if(Boolean.TRUE.equals(isSendEmail)) { + Map replacements=new HashMap<>(); + List attachmentRequests =new ArrayList<>(); + S3DocxProcessor processor = new S3DocxProcessor(s3Client); + List urls = Utils.convertJsonStringToList(emailLogEntity.getAttachments(), String.class); - PecEmailRequest emailRequest = new PecEmailRequest(); - emailRequest.setSender(emailConfig.getSender()); - emailRequest.setSubject(subject); - emailRequest.setBody(body); - emailRequest.setUsername(emailConfig.getUsername()); - emailRequest.setPassword(emailConfig.getPassword()); - emailRequest.setAttachments(emailLogRequest.getAttachments()); - emailRequest.setRecipient(recipientEmails); - String url=emailConfig.getUrl()+ GepafinConstant.PEC_SERVICE_SEND_MAIL; - String authToken = emailConfig.getAuthToken(); - HttpResponse response2=null; - if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - emailLogRequest.setEmailSubject(emailRequest.getSubject()); - emailLogRequest.setEmailBody(emailRequest.getBody()); - emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); - emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient())); - try { - if (Boolean.TRUE.equals(Boolean.parseBoolean(isPecServiceEnabled))) { - Unirest.setTimeouts(0, 0); - response2 = Unirest.post(url) - .header("Authorization", "Bearer " + authToken) - .header("Content-Type", "application/json") - .body(Utils.convertObjectToJson(emailRequest)) // Serialize the emailRequest object to JSON - .asString(); + if(emailLogEntity.getEmailType().equals(EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED.getValue())) { + ApplicationEntity applicationEntity = applicationDao.validateApplication(emailLogEntity.getApplicationId()); + CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId()); + String amount = Utils.convertToItalianFormat(String.valueOf(applicationEntity.getAmountAccepted())); + String protocolNumber = applicationEntity.getProtocol().getExternalProtocolNumber(); + if (protocolNumber == null) { + protocolNumber = String.valueOf(applicationEntity.getProtocol().getProtocolNumber()); + } + replacements = Map.of( + "{call_name}", applicationEntity.getCall().getName(), + "{amount_accepted}", amount, + "{pec}", "bandi.gepafin@legalmail.it", + "{company_name}", company.getCompanyName(), + "{protocol_number}", protocolNumber + ); + } + if (urls!=null && Boolean.FALSE.equals(urls.isEmpty())) { + Map processedFiles = null; + try { + processedFiles = processor.processFiles(urls, replacements); + } catch (IOException e) { + throw new RuntimeException(e); + } + for (Map.Entry entry : processedFiles.entrySet()) { + AttachmentRequest attachmentRequest = new AttachmentRequest(); + attachmentRequest.setName(entry.getKey()); // e.g. "path/file1.docx" + attachmentRequest.setFile(entry.getValue().getFile()); // updated file content + attachmentRequests.add(attachmentRequest); + } + } + PecEmailRequest emailRequest = new PecEmailRequest(); + emailRequest.setSender(emailConfig.getSender()); + emailRequest.setSubject(subject); + emailRequest.setBody(body); + emailRequest.setUsername(emailConfig.getUsername()); + emailRequest.setPassword(emailConfig.getPassword()); + emailRequest.setAttachments(attachmentRequests); + emailRequest.setRecipient(recipientEmails); + String url = emailConfig.getUrl() + GepafinConstant.PEC_SERVICE_SEND_MAIL; + String authToken = emailConfig.getAuthToken(); + HttpResponse response2 = null; + if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { + emailLogEntity.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); + emailLogEntity.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient())); + try { + if (Boolean.TRUE.equals(Boolean.parseBoolean(isPecServiceEnabled))) { + Unirest.setTimeouts(0, 0); + response2 = Unirest.post(url) + .header("Authorization", "Bearer " + authToken) + .header("Content-Type", "application/json") + .body(Utils.convertObjectToJson(emailRequest)) // Serialize the emailRequest object to JSON + .asString(); - if (!isSuccessfulPecResponse(response2.getBody())) { - String errorMsg = "PEC sending failed: " + response2.getBody(); - emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); - emailLogRequest.setErrorMessage(errorMsg); - sendNotificationOnFailure(emailLogRequest.getUserId(),emailLogRequest.getEmailType()); + if (!isSuccessfulPecResponse(response2.getBody())) { + String errorMsg = "PEC sending failed: " + response2.getBody(); + emailLogEntity.setSendStatus(StatusTypeEnum.FAILED.getValue()); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE.getValue()); + emailLogEntity.setErrorMessage(errorMsg); + sendNotificationOnFailure(emailLogEntity.getUserId(), EmailScenarioTypeEnum.valueOf(emailLogEntity.getEmailType())); - if (EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED.equals(emailLogRequest.getEmailType())) { - applicationDao.sendApplicationSubmissionFailureEmail(emailLogRequest); + if (EmailScenarioTypeEnum.APPLICATION_SUBMITTED.getValue().equals(emailLogEntity.getEmailType())) { + applicationDao.sendApplicationSubmissionFailureEmail(emailLogEntity); + } } } + } catch (Exception e) { + emailLogEntity.setSendStatus(StatusTypeEnum.FAILED.getValue()); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE.getValue()); + emailLogEntity.setErrorMessage(e.getMessage()); + sendNotificationOnFailure(emailLogEntity.getUserId(), EmailScenarioTypeEnum.valueOf(emailLogEntity.getEmailType())); + if (EmailScenarioTypeEnum.APPLICATION_SUBMITTED.getValue().equals(emailLogEntity.getEmailType())) { + applicationDao.sendApplicationSubmissionFailureEmail(emailLogEntity); + } } - }catch(Exception e) { - emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); - emailLogRequest.setErrorMessage(e.getMessage()); - sendNotificationOnFailure(emailLogRequest.getUserId(),emailLogRequest.getEmailType()); - if (EmailScenarioTypeEnum.SPECIAL_APPLICATION_AMENDMENT_REQUESTED.equals(emailLogRequest.getEmailType())) { - applicationDao.sendApplicationSubmissionFailureEmail(emailLogRequest); + if (response2 != null) { + emailLogEntity.setEmailServiceResponse(response2.getBody()); } } - if(response2 != null) { - emailLogRequest.setEmailServiceResponse(response2.getBody()); - } } - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); - emailLogDao.createEmailLog(emailLogRequest); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE.getValue()); + emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + emailLogRepository.save(emailLogEntity); } private void sendNotificationOnFailure(Long userId, EmailScenarioTypeEnum emailScenarioTypeEnum) { diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecMailSerivceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecMailSerivceImpl.java index 507923be..8e0daef1 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecMailSerivceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecMailSerivceImpl.java @@ -17,7 +17,7 @@ public class PecMailSerivceImpl implements PecMailService { private PecMailDao pecMailDao; @Override - public PecMailResponse sendPecMail(HttpServletRequest request, List userActionIds) { + public List sendPecMail(HttpServletRequest request, List userActionIds) { return pecMailDao.sendPecMail(request,userActionIds); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/SystemEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/SystemEmailService.java index 0cc64b89..77593f2d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/SystemEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/SystemEmailService.java @@ -9,6 +9,8 @@ import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; +import net.gepafin.tendermanagement.repositories.EmailLogRepository; +import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; import org.slf4j.Logger; @@ -17,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; import java.util.List; @Component @@ -43,42 +46,46 @@ public class SystemEmailService implements EmailService { @Autowired private EmailLogDao emailLogDao; + @Autowired + private EmailLogRepository emailLogRepository; + public final Logger log = LoggerFactory.getLogger(SystemEmailService.class); - public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) { + public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogEntity emailLogEntity,Boolean isSendEmail) { if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) { return; } + if (Boolean.TRUE.equals(isSendEmail)) { + emailLogEntity.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); + emailLogEntity.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails)); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE.getValue()); + if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { + MessageResponse response = null; + try { + MailgunMessagesApi mailgunMessagesApi = MailgunClient.config(mailGunBaseUrl, mailGunApiKey).createApi(MailgunMessagesApi.class); - emailLogRequest.setEmailSubject(subject); - emailLogRequest.setEmailBody(body); - emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); - emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails)); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE); - if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - MessageResponse response = null; - try { - MailgunMessagesApi mailgunMessagesApi = MailgunClient.config(mailGunBaseUrl, mailGunApiKey).createApi(MailgunMessagesApi.class); + String mailFrom = mailGunUser; + com.mailgun.model.message.Message message = com.mailgun.model.message.Message.builder().from(mailFrom).to(recipientEmails).subject(subject).html(body).build(); - String mailFrom = mailGunUser; - com.mailgun.model.message.Message message = com.mailgun.model.message.Message.builder().from(mailFrom).to(recipientEmails).subject(subject).html(body).build(); + response = mailgunMessagesApi.sendMessage(mailGunDomainName, message); + } catch (Exception e) { + emailLogEntity.setSendStatus(StatusTypeEnum.FAILED.getValue()); + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE.getValue()); + emailLogEntity.setErrorMessage(e.getMessage()); + emailLogRepository.save(emailLogEntity); + throw new RuntimeException("Failed to send email via Mailgun: " + (response != null ? response.getMessage() : "No response from Mailgun"), e); + } + if (response != null) { + emailLogEntity.setEmailServiceResponse(response.toString()); + } - response = mailgunMessagesApi.sendMessage(mailGunDomainName, message); - } catch (Exception e) { - emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE); - emailLogRequest.setErrorMessage(e.getMessage()); - emailLogDao.createEmailLog(emailLogRequest); - - throw new RuntimeException("Failed to send email via Mailgun: " + (response != null ? response.getMessage() : "No response from Mailgun"), e); } - if(response != null) { - emailLogRequest.setEmailServiceResponse(response.toString()); - } - - emailLogDao.createEmailLog(emailLogRequest); } + emailLogEntity.setEmailServiceType(EmailServiceTypeEnum.SYSTEM_EMAIL_SERVICE.getValue()); + emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + emailLogRepository.save(emailLogEntity); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java index d0fb4bef..7812c0ad 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java @@ -35,7 +35,7 @@ public interface DashboardApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "", produces = { "application/json" }) - @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')") + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER') || hasRole('ROLE_DIRECTOR')") ResponseEntity> getDashboardWidgetForSuperAdmin(HttpServletRequest request); @Operation(summary = "Api to get dashboard widget for beneficiary", diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/PecMailApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/PecMailApi.java index 34315491..27fdcc27 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/PecMailApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/PecMailApi.java @@ -28,7 +28,7 @@ public interface PecMailApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE))) }) @PostMapping(value = "/userAction", produces = "application/json") - ResponseEntity> sendPecMail(HttpServletRequest request, + ResponseEntity>> sendPecMail(HttpServletRequest request, @Parameter(description = "The user action id", required = true) @RequestParam("userActionIds") List userActionIds); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/PecMailController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/PecMailController.java index ca3c7c35..41e8ed58 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/PecMailController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/PecMailController.java @@ -33,14 +33,14 @@ public class PecMailController implements PecMailApi { private PecMailService pecMailService; @Override - public ResponseEntity> sendPecMail(HttpServletRequest request,List userActionIds) { + public ResponseEntity>> sendPecMail(HttpServletRequest request,List userActionIds) { loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.EMAIL) .actionContext(UserActionContextEnum.SEND_PEC_MAIL).build()); -// PecMailResponse pecMailResponse=pecMailService.sendPecMail(request,userActionId); + List pecMailResponse=pecMailService.sendPecMail(request,userActionIds); return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.MAIL_SENT_SUCCESSFULLY))); + .body(new Response<>(pecMailResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.MAIL_SENT_SUCCESSFULLY))); } 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 178e4ad4..233604e3 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 @@ -3164,4 +3164,10 @@ + + + + + +