256 lines
14 KiB
Java
256 lines
14 KiB
Java
package net.gepafin.tendermanagement.dao;
|
|
|
|
import jakarta.transaction.Transactional;
|
|
import net.gepafin.tendermanagement.config.Translator;
|
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
|
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
|
|
import net.gepafin.tendermanagement.entities.ApplicationEntity;
|
|
import net.gepafin.tendermanagement.entities.CallEntity;
|
|
import net.gepafin.tendermanagement.entities.CommunicationEntity;
|
|
import net.gepafin.tendermanagement.entities.CompanyEntity;
|
|
import net.gepafin.tendermanagement.entities.ProtocolEntity;
|
|
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity;
|
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
|
import net.gepafin.tendermanagement.model.request.CommunicationRequestBean;
|
|
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse;
|
|
import net.gepafin.tendermanagement.model.response.CommunicationResponseBean;
|
|
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
|
|
import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository;
|
|
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
|
|
import net.gepafin.tendermanagement.repositories.CallRepository;
|
|
import net.gepafin.tendermanagement.repositories.CommunicationRepository;
|
|
import net.gepafin.tendermanagement.repositories.CompanyRepository;
|
|
import net.gepafin.tendermanagement.repositories.UserWithCompanyRepository;
|
|
import net.gepafin.tendermanagement.service.SystemEmailTemplatesService;
|
|
import net.gepafin.tendermanagement.service.UserService;
|
|
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
|
import net.gepafin.tendermanagement.util.MailUtil;
|
|
import net.gepafin.tendermanagement.util.Utils;
|
|
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
@Component
|
|
public class CommunicationDao {
|
|
private static final Logger log = LoggerFactory.getLogger(CommunicationDao.class);
|
|
|
|
@Autowired
|
|
CommunicationRepository communicationRepository;
|
|
|
|
@Autowired
|
|
ApplicationAmendmentRequestRepository applicationAmendmentRepository;
|
|
|
|
@Autowired
|
|
private MailUtil mailUtil;
|
|
|
|
@Autowired
|
|
private SystemEmailTemplatesService systemEmailTemplatesService;
|
|
|
|
@Autowired
|
|
UserService userService;
|
|
|
|
@Autowired
|
|
ApplicationRepository applicationRepository;
|
|
|
|
@Transactional(rollbackOn = Exception.class)
|
|
public CommunicationResponseBean addCommentToAmendmentRequest(CommunicationRequestBean communicationReq, Long amendmentId) {
|
|
|
|
log.info("Adding communication request...");
|
|
CommunicationEntity communicationEntity = convertToCommunicationCommentEntity(communicationReq, amendmentId);
|
|
communicationEntity = communicationRepository.save(communicationEntity);
|
|
log.info("Added comment: {}", communicationEntity);
|
|
return convertToCommunicationResponseBean(communicationEntity);
|
|
}
|
|
|
|
public String deleteComment(Long amendmentId, Long commentId) {
|
|
|
|
CommunicationEntity data = communicationRepository.findById(commentId)
|
|
.orElseThrow(() -> new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.COMMENT_NOT_FOUND)));
|
|
if (!data.getApplicationAmendmentRequest().getId().equals(amendmentId)) {
|
|
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.INVALID_AMENDMENT_FOR_COMMENT));
|
|
}
|
|
data.setIsDeleted(true);
|
|
communicationRepository.save(data);
|
|
return "Deleted Comment Successfully.";
|
|
}
|
|
|
|
public ApplicationAmendmentResponse getAmendmentComments(Long amendmentId) {
|
|
|
|
ApplicationAmendmentRequestEntity amendmentData = applicationAmendmentRepository.findByIdAndIsDeletedFalse(amendmentId);
|
|
if (amendmentData == null) {
|
|
throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG));
|
|
}
|
|
List<CommunicationResponseBean> commentsList = communicationRepository.findCommentDetailsByAmendmentId(amendmentId);
|
|
if (commentsList == null) {
|
|
throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.COMMENT_NOT_FOUND));
|
|
}
|
|
return new ApplicationAmendmentResponse(amendmentData, commentsList);
|
|
}
|
|
|
|
@Transactional(rollbackOn = Exception.class)
|
|
public CommunicationResponseBean updateAmendmentComment(CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId) {
|
|
|
|
log.info("Updating communication comment...");
|
|
CommunicationEntity existingComment = communicationRepository.findById(commentId)
|
|
.orElseThrow(() -> new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.COMMENT_NOT_FOUND)));
|
|
if (!existingComment.getApplicationAmendmentRequest().getId().equals(amendmentId)) {
|
|
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.COMMENT_NOT_ASSOCIATE_WITH_AMENDMENT_ID_ERROR_MSG));
|
|
}
|
|
existingComment.setCommunicationTitle(communicationRequestBean.getTitle());
|
|
existingComment.setCommunicationComment(communicationRequestBean.getComment());
|
|
existingComment.setCommentedDate(LocalDateTime.now());
|
|
existingComment = communicationRepository.save(existingComment);
|
|
log.info("Updated Comment: {}", existingComment);
|
|
return convertToCommunicationResponseBean(existingComment);
|
|
}
|
|
|
|
private CommunicationResponseBean convertToCommunicationResponseBean(CommunicationEntity entity) {
|
|
|
|
CommunicationResponseBean response = new CommunicationResponseBean();
|
|
response.setComment(entity.getCommunicationComment());
|
|
response.setCommentedDate(entity.getCommentedDate());
|
|
response.setAmendmentId(entity.getApplicationAmendmentRequest().getId());
|
|
response.setCreatedDate(entity.getCreatedDate());
|
|
response.setUpdatedDate(entity.getUpdatedDate());
|
|
response.setTitle(entity.getCommunicationTitle());
|
|
return response;
|
|
}
|
|
|
|
private CommunicationEntity convertToCommunicationCommentEntity(CommunicationRequestBean communicationReq, Long amendmentId) {
|
|
|
|
ApplicationAmendmentRequestEntity amendmentRequest = applicationAmendmentRepository.findByIdAndIsDeletedFalse(amendmentId);
|
|
CommunicationEntity communicationEntity = new CommunicationEntity();
|
|
communicationEntity.setApplicationAmendmentRequest(amendmentRequest);
|
|
communicationEntity.setCommunicationTitle(communicationReq.getTitle());
|
|
communicationEntity.setCommunicationComment(communicationReq.getComment());
|
|
communicationEntity.setIsDeleted(false);
|
|
communicationEntity.setCommentedDate(LocalDateTime.now());
|
|
return communicationEntity;
|
|
}
|
|
|
|
public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationEntity applicationEntity) {
|
|
|
|
// UserEntity user = userService.validateUser(applicationEntity.getUserId());
|
|
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
|
|
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, applicationEntity.getCall(), null);
|
|
|
|
// Create the map for subject placeholders
|
|
Map<String, String> subjectPlaceholders = new HashMap<>();
|
|
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
|
|
subjectPlaceholders.put("{{company_name}}", applicationEntity.getCompany().getCompanyName());
|
|
|
|
// Create the map for body placeholders
|
|
Map<String, String> bodyPlaceholders = new HashMap<>();
|
|
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
|
|
bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString());
|
|
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate()));
|
|
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
|
|
bodyPlaceholders.put("{{form_dataInput}}", "");
|
|
|
|
// Replace placeholders in the subject and body
|
|
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
|
|
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
|
|
mailUtil.sendByMailGun(subject, body, List.of("piyush1.kag1@gmail.com"), null);
|
|
}
|
|
|
|
public void sendApplicationFailureNotificationEmail(String userEmail, ApplicationEntity applicationEntity) {
|
|
|
|
CallEntity call = applicationEntity.getCall();
|
|
CompanyEntity company = applicationEntity.getCompany();
|
|
ProtocolEntity protocol = applicationEntity.getProtocol();
|
|
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
|
|
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, call, null);
|
|
|
|
// Create the map for subject placeholders
|
|
Map<String, String> subjectPlaceholders = new HashMap<>();
|
|
subjectPlaceholders.put("{{call_name}}", call.getName());
|
|
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
|
|
|
|
// Create the map for body placeholders
|
|
Map<String, String> bodyPlaceholders = new HashMap<>();
|
|
bodyPlaceholders.put("{{call_name}}", call.getName());
|
|
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(protocol.getCreatedDate(), GepafinConstant.DD_MM_YYYY_HH_MM));
|
|
|
|
// Replace placeholders in the subject and body
|
|
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
|
|
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
|
|
|
|
mailUtil.sendByMailGun(subject, body, List.of(userEmail), null);
|
|
mailUtil.sendByMailGun(subject, body, List.of(applicationEntity.getCompany().getEmail()), null);
|
|
}
|
|
|
|
private void sendAdmissibilityNotificationEmail(UserEntity userEntity, ApplicationEntity applicationEntity) {
|
|
|
|
CallEntity call = applicationEntity.getCall();
|
|
CompanyEntity company = applicationEntity.getCompany();
|
|
ProtocolEntity protocol = applicationEntity.getProtocol();
|
|
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
|
|
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, call, null);
|
|
|
|
// Create the map for subject placeholders
|
|
Map<String, String> subjectPlaceholders = new HashMap<>();
|
|
subjectPlaceholders.put("{{call_name}}", call.getName());
|
|
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
|
|
|
|
// Create the map for body placeholders
|
|
Map<String, String> bodyPlaceholders = new HashMap<>();
|
|
bodyPlaceholders.put("{{call_name}}", call.getName());
|
|
bodyPlaceholders.put("{{protocol_number}}", protocol.getProtocolNumber().toString());
|
|
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(protocol.getCreatedDate()));
|
|
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(protocol.getTime(), GepafinConstant.HH_MM_SS));
|
|
|
|
// Replace placeholders in the subject and body
|
|
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
|
|
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
|
|
|
|
String email = userEntity.getEmail();
|
|
if (userEntity.getBeneficiary() != null) {
|
|
email = userEntity.getBeneficiary().getEmail();
|
|
}
|
|
mailUtil.sendByMailGun(subject, body, List.of(email), null);
|
|
mailUtil.sendByMailGun(subject, body, List.of(applicationEntity.getCompany().getEmail()), null);
|
|
}
|
|
|
|
private void sendInadmissibilityTemplateEmail(UserEntity userEntity, ApplicationEntity applicationEntity) {
|
|
|
|
CallEntity call = applicationEntity.getCall();
|
|
CompanyEntity company = applicationEntity.getCompany();
|
|
ProtocolEntity protocol = applicationEntity.getProtocol();
|
|
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
|
|
SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, call, null);
|
|
|
|
// Create the map for subject placeholders
|
|
Map<String, String> subjectPlaceholders = new HashMap<>();
|
|
subjectPlaceholders.put("{{call_name}}", call.getName());
|
|
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
|
|
|
|
// Create the map for body placeholders
|
|
Map<String, String> bodyPlaceholders = new HashMap<>();
|
|
bodyPlaceholders.put("{{call_name}}", call.getName());
|
|
bodyPlaceholders.put("{{protocol_number}}", protocol.getProtocolNumber().toString());
|
|
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(protocol.getCreatedDate()));
|
|
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(protocol.getTime(), GepafinConstant.HH_MM_SS));
|
|
bodyPlaceholders.put("{{form_text}}", "YOUR_FORM_TEXT_HERE"); // Replace with actual data input if available
|
|
|
|
// Replace placeholders in the subject and body
|
|
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
|
|
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
|
|
|
|
String email = userEntity.getEmail();
|
|
if (userEntity.getBeneficiary() != null) {
|
|
email = userEntity.getBeneficiary().getEmail();
|
|
}
|
|
mailUtil.sendByMailGun(subject, body, List.of(email), null);
|
|
mailUtil.sendByMailGun(subject, body, List.of(applicationEntity.getCompany().getEmail()), null);
|
|
}
|
|
|
|
}
|