Done ticket GEPAFINBE-231

This commit is contained in:
rajesh
2025-06-27 20:04:39 +05:30
parent 9354a3bca8
commit c7c21cf90d
17 changed files with 217 additions and 15 deletions

View File

@@ -56,13 +56,11 @@ import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.*;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
@@ -217,6 +215,9 @@ public class ApplicationDao {
@Autowired
private ApplicationEvaluationDao applicationEvaluationDao;
@Autowired
private EvaluationCriteriaRepository evaluationCriteriaRepository;
public final Random random = new Random();
public ApplicationResponseBean createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long formId, Long applicationId) {
@@ -2419,4 +2420,78 @@ public class ApplicationDao {
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(GepafinConstant.RINALDO_EMAIL),emailLogRequest);
}
public byte[] downloadRankingCsv(Long callId) {
CallEntity callEntity = callService.validateCall(callId);
BigDecimal scoreList = BigDecimal.ZERO;
List<EvaluationCriteriaEntity> evaluationCriteriaEntities =
evaluationCriteriaRepository.findByCallIdAndIsDeletedFalse(callId);
List<String> headers = Arrays.asList(
"ApplicationID",
"VatNumber",
"Company Name",
"Protocol",
"Requested Amount",
"Status",
"Total Score",
"Individual Scores"
);
for (EvaluationCriteriaEntity evaluationCriteria : evaluationCriteriaEntities) {
scoreList = scoreList.add(evaluationCriteria.getScore());
}
List<ApplicationEntity> applications =
applicationRepository.findByCallIdAndIsDeletedFalseAndStatusIn(callId,List.of(ApplicationStatusForEvaluation.APPROVED.getValue(),ApplicationStatusForEvaluation.ADMISSIBLE.getValue(),ApplicationStatusForEvaluation.TECHNICAL_EVALUATION.getValue()));
// Collect all rows with totalScore for sorting
List<List<Object>> rows = new ArrayList<>();
for (ApplicationEntity app : applications) {
CompanyEntity company = companyService.validateCompany(app.getCompanyId());
String name = company.getCompanyName();
String vat = company.getVatNumber();
Long applicationId = app.getId();
ProtocolEntity protocolEntity = app.getProtocol();
Long protocol = (protocolEntity != null) ? protocolEntity.getProtocolNumber() : 0L;
BigDecimal requestedAmount = app.getAmountRequested();
String status = app.getStatus();
ApplicationEvaluationEntity applicationEvaluationEntity =
applicationEvaluationRepository.findByApplicationId(app.getId());
BigDecimal totalScore = applicationEvaluationDao.calculateTotalScore(
applicationEvaluationEntity.getCriteria()
);
rows.add(Arrays.asList(
applicationId,
vat,
name,
protocol,
requestedAmount,
status,
scoreList,
totalScore
));
}
// 5. Write the CSV using Commons CSV, with headers:
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
CSVPrinter csvPrinter = new CSVPrinter(writer,
CSVFormat.DEFAULT.withHeader(headers.toArray(new String[0])))) {
for (List<Object> row : rows) {
csvPrinter.printRecord(row);
}
csvPrinter.flush();
} catch (IOException e) {
throw new RuntimeException("Error while generating CSV", e);
}
return out.toByteArray();
}
}

View File

@@ -1910,7 +1910,8 @@ public class ApplicationEvaluationDao {
Optional<ApplicationEvaluationEntity> existingEntityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(
assignedApplicationsEntity.getId());
ApplicationEvaluationEntity entity;
UserEntity user=userService.validateUser(application.getUserId());
HubEntity hub=user.getHub();
EmailSendResponse emailSendResponse = new EmailSendResponse();
if (existingEntityOptional.isPresent()) {
ApplicationEvaluationEntity existingEntity = existingEntityOptional.get();
@@ -1940,7 +1941,13 @@ public class ApplicationEvaluationDao {
application.setStatus(newStatus.getValue());
log.info("Application status updated to {} for applicationId: {}", newStatus, application.getId());
}
application = applicationRepository.save(application);
if(newStatus.equals(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION_REJECTED) && Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.ADMISSIBLE.getValue()))) {
application.setStatus(newStatus.getValue());
log.info("Application status updated to {} for applicationId: {}", newStatus, application.getId());
emailNotificationDao.sendMailForApplicationTechnicalEvaluationRejected(application,hub,existingEntity);
}
application = applicationRepository.save(application);
/** This code is responsible for adding a version history log for the "Update Application" operation. **/
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(application).build());
@@ -2573,7 +2580,7 @@ public class ApplicationEvaluationDao {
}
}
private BigDecimal calculateTotalScore(String criteriaJson){
public BigDecimal calculateTotalScore(String criteriaJson){
try {
ObjectMapper objectMapper = new ObjectMapper();
// Convert JSON string to List of Maps

View File

@@ -73,6 +73,9 @@ public class EmailNotificationDao {
@Value("${rinaldo_email}")
private String rinaldoEmail;
@Autowired
private SystemEmailTemplatesDao systemEmailTemplatesDao;
private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map<String, String> bodyPlaceholders,
List<String> additionalRecipients, Long amendmentId) {
@@ -355,4 +358,30 @@ public class EmailNotificationDao {
throw new IllegalArgumentException("Failed to parse email configuration JSON", e);
}
}
}
public void sendMailForApplicationTechnicalEvaluationRejected(ApplicationEntity applicationEntity,HubEntity hub,ApplicationEvaluationEntity applicationEvaluationEntity) {
Map<String, String> bodyPlaceholders = prepareEmailPlaceholdersForTechnicalEvaluationRejected(applicationEntity,hub,applicationEvaluationEntity);
sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_TECHNICAL_EVALUATION_FAILURE, bodyPlaceholders, null,
null);
}
public Map<String, String> prepareEmailPlaceholdersForTechnicalEvaluationRejected(ApplicationEntity applicationEntity,HubEntity hub,ApplicationEvaluationEntity applicationEvaluationEntity) {
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
String protocolNumber = applicationEntity.getProtocol().getExternalProtocolNumber();
if (protocolNumber == null) {
protocolNumber = String.valueOf(applicationEntity.getProtocol().getProtocolNumber());
}
bodyPlaceholders.put("{{protocol_number}}", protocolNumber);
String protocolDate = DateTimeUtil.formatLocalDateTime(applicationEntity.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY);
if (applicationEntity.getProtocol().getExternalProtocolDate() != null) {
protocolDate = DateTimeUtil.formatLocalDateTime(applicationEntity.getProtocol().getExternalProtocolDate(), GepafinConstant.DD_MM_YYYY);
}
bodyPlaceholders.put("{{protocol_date}}", protocolDate);
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
bodyPlaceholders.put("{{email_signature}}", hub.getEmailSignature());
bodyPlaceholders.put("{{platform_link}}", hub.getDomainName());
bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getMotivation());
return bodyPlaceholders;
}
}

View File

@@ -116,7 +116,7 @@ public class SystemEmailTemplatesDao {
return htmlContent;
}
private String replaceEmailSignature(HubEntity hub, String htmlContent, Map<String, String> languageMap) {
public String replaceEmailSignature(HubEntity hub, String htmlContent, Map<String, String> languageMap) {
String emailSignature = defaultEmailSignature;
if(hub != null && Boolean.FALSE.equals(StringUtils.isEmpty(hub.getEmailSignature()))){
emailSignature = hub.getEmailSignature();
@@ -124,7 +124,7 @@ public class SystemEmailTemplatesDao {
return htmlContent.replace("{{email_signature}}", emailSignature);
}
private String replacePlatformLinkPlaceholder(HubEntity hub, String htmlContent, Map<String, String> languageMap) {
public String replacePlatformLinkPlaceholder(HubEntity hub, String htmlContent, Map<String, String> languageMap) {
String platformLink = feBaseUrl;
if(hub != null && Boolean.FALSE.equals(StringUtils.isEmpty(hub.getDomainName()))){
platformLink = hub.getDomainName();