From 4a534aa98e7938af9cd0d75fa794d7c7d3237c1a Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 31 Jan 2025 11:12:59 +0530 Subject: [PATCH 01/17] Done ticket GEPAFINBE-154 --- .../constants/GepafinConstant.java | 1 + .../gepafin/tendermanagement/dao/PdfDao.java | 104 ++++++++++++------ .../tendermanagement/util/PdfUtils.java | 20 ++++ .../gepafin/tendermanagement/util/Utils.java | 6 + 4 files changed, 98 insertions(+), 33 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 9010e157..85bceee3 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -407,5 +407,6 @@ public class GepafinConstant { public static final String ASSIGNED_APPLICATION_STATUS_UPDATED_SUCCESSFULLY = "assigned.application.status.updated.successfully"; public static final String REQUIRED_REQUESTED_AMOUNT_MSG = "validation.required.requested.amount"; + public static final String CRITERIA_TABLE_COLUMNS="criteria_table_columns"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java index 8be69097..8247c321 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java @@ -152,6 +152,31 @@ public class PdfDao { // Create value cell with rounded corners PdfPTable valueTable = new PdfPTable(1); valueTable.setWidthPercentage(100); + + + Object finalValue = value; + List criteriaObject = (List) contentResponseBean.getSettings().stream() + .filter(setting -> GepafinConstant.CRITERIA_TABLE_COLUMNS.equals(setting.getName())) + .findFirst() + .map(setting -> { + try { + // Assuming setting.getValue() contains the JSON string or object + return PdfUtils.extractRows(finalValue); + } catch (Exception e) { + throw new RuntimeException("Error extracting rows from setting value", e); + } + }) + .orElse(null); + + +// Update value if criteriaObject is not null + if (criteriaObject != null) { + value = criteriaObject; + } + + +// Update value if criteriaObject is not null + if (value instanceof List) { // Further check if the list contains Strings List list = (List) value; @@ -181,11 +206,10 @@ public class PdfDao { document.add(valueTable); } else if (!list.isEmpty() && list.get(0) instanceof Map) { - Object object = value; - String stringvalue = Utils.convertToString(object); - List> fieldValueList = Utils.convertJsonStringIntoJsonList(stringvalue); - - document = createPdfTable(fieldValueList, document, contentResponseBean); + Object object = value; + String stringvalue = Utils.convertToString(object); + List> fieldValueList = Utils.convertJsonStringIntoJsonList(stringvalue); + document = createPdfTable(fieldValueList, document, contentResponseBean); } } else { @@ -231,27 +255,29 @@ public class PdfDao { document.add(valueTable); } else { - String fieldValue1= (String) value; - if(Utils.isValidDateString(fieldValue1)){ - fieldValue1=Utils.formatDateString(String.valueOf(value)); - } - if(Boolean.TRUE.equals(Utils.isItalianFormattedAmount(fieldValue)) ){ - fieldValue= String.valueOf(Utils.convertToItalianFormat(fieldValue)); - } + if (value instanceof String) { + String fieldValue1 = (String) value; + if (Utils.isValidDateString(fieldValue1)) { + fieldValue1 = Utils.formatDateString(String.valueOf(value)); + } + if(contentResponseBean.getName().equals("numberinput") && Boolean.TRUE.equals(Utils.isNumeric(fieldValue))){ + fieldValue1=Utils.convertToItalianFormat(fieldValue); + } // PdfPCell valueCell = new PdfPCell(new Phrase(fieldValue1, valueFont)); - PdfPCell valueCell = PdfUtils.htmlToPdfPCell(fieldValue1, valueFont); - valueCell.setMinimumHeight(30f); // Set a fixed height for the cell - valueCell.setPaddingLeft(10f); // Adjust left padding as needed - valueCell.setPaddingTop(0f); // Remove padding from top to allow vertical centering - valueCell.setPaddingBottom(6f); - valueCell.setPaddingLeft(leftMargin); // Increase left margin for value - valueCell.setBorder(Rectangle.NO_BORDER); // Remove border for value cell - valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE); - valueCell.setHorizontalAlignment(Element.ALIGN_LEFT); - valueCell.setCellEvent(new RoundedCorners()); // Apply rounded corners - valueTable.addCell(valueCell); - document.add(valueTable); - } + PdfPCell valueCell = PdfUtils.htmlToPdfPCell(fieldValue1, valueFont); + valueCell.setMinimumHeight(30f); // Set a fixed height for the cell + valueCell.setPaddingLeft(10f); // Adjust left padding as needed + valueCell.setPaddingTop(0f); // Remove padding from top to allow vertical centering + valueCell.setPaddingBottom(6f); + valueCell.setPaddingLeft(leftMargin); // Increase left margin for value + valueCell.setBorder(Rectangle.NO_BORDER); // Remove border for value cell + valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE); + valueCell.setHorizontalAlignment(Element.ALIGN_LEFT); + valueCell.setCellEvent(new RoundedCorners()); // Apply rounded corners + valueTable.addCell(valueCell); + document.add(valueTable); + } + } } document.add(new Paragraph("\n")); // Add line break after each value @@ -264,11 +290,12 @@ public class PdfDao { Map formulaEnabledMap = new HashMap<>(); Map formulaTypeMap = new HashMap<>(); Map fieldTypeMap = new HashMap<>(); + Map totalMap = new HashMap<>(); Font lightGrayFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new BaseColor(110, 110, 110)); // Light gray contentResponseBean.getSettings().stream() - .filter(setting -> "table_columns".equals(setting.getName())) // Check for "table_columns" + .filter(setting -> "table_columns".equals(setting.getName()) || "criteria_table_columns".equals(setting.getName())) // Check for "table_columns" .map(SettingResponseBean::getValue) .filter(Objects::nonNull) // Ensure value is not null .filter(settingValue -> settingValue instanceof Map) // Ensure value is a Map @@ -283,7 +310,7 @@ public class PdfDao { Boolean isFormulaEnabled = (Boolean) fieldData.get("enableFormula"); String formulaType = (String) fieldData.get("lastRowFormula"); String fieldType = (String) fieldData.get("fieldtype"); // Get the field type (e.g., numeric) - + String total= (String) fieldData.get("lastRowText"); if (fieldName != null && fieldDataValue != null) { stateFieldMap.put(fieldName, fieldDataValue); } @@ -297,6 +324,9 @@ public class PdfDao { if (fieldType != null) { fieldTypeMap.put(fieldName, fieldType); // Store the fieldType in the map } + if(total!=null){ + totalMap.put(fieldName,total); + } }); PdfPTable table = new PdfPTable(stateFieldMap.size()); // Number of columns equals the number of map entries @@ -342,12 +372,15 @@ public class PdfDao { Object value = row.getOrDefault(key, ""); // Fetch value or use empty string if key not present // String fieldValue= (String) value; String fieldValue = value != null ? value.toString() : ""; - if(Boolean.TRUE.equals(Utils.isItalianFormattedAmount(fieldValue)) ){ - fieldValue= String.valueOf(Utils.convertToItalianFormat(fieldValue)); - } +// if(Boolean.TRUE.equals(Utils.isItalianFormattedAmount(fieldValue)) ){ +//// fieldValue= String.valueOf(Utils.convertToItalianFormat(fieldValue)); +// } if (Boolean.TRUE.equals(formulaEnabledMap.get(key)) && Boolean.TRUE.equals(GepafinConstant.NUMERIC.equalsIgnoreCase(fieldTypeMap.get(key)))) { calculateValue(key, fieldValue, formulaTypeMap, columnSums); } + if(Boolean.TRUE.equals(Utils.isNumeric(fieldValue))){ + fieldValue=Utils.convertToItalianFormat(fieldValue); + } PdfPCell dataCell = PdfUtils.htmlToPdfPCell(fieldValue != null ? fieldValue : "", textFont); dataCell.setBackgroundColor(new BaseColor(239, 243, 248)); // Light blue for the cell @@ -397,14 +430,19 @@ public class PdfDao { table.addCell(emptyCell); } } else { - PdfPCell emptyCell = new PdfPCell(new Phrase("")); + String total=null; + if (totalMap.containsKey(key)) { + total=totalMap.getOrDefault(key, ""); + } + PdfPCell emptyCell = new PdfPCell(new Phrase(total,lightGrayFont)); + emptyCell.setPaddingTop(8f); + emptyCell.setPaddingLeft(8f); emptyCell.setBackgroundColor(new BaseColor(239, 243, 248)); table.addCell(emptyCell); } } - // Add the last table to the document document.add(table); @@ -415,7 +453,7 @@ public class PdfDao { try { if (Boolean.FALSE.equals(StringUtils.isEmpty(fieldValue))) { // Use Locale.ITALY to parse the number with the Italian format (comma as decimal separator) - NumberFormat format = NumberFormat.getInstance(Locale.ITALY); + NumberFormat format = NumberFormat.getInstance(Locale.ENGLISH); Number number = format.parse(fieldValue); // Parse the fieldValue as a number double numericValue = number.doubleValue(); // Convert the parsed number to double diff --git a/src/main/java/net/gepafin/tendermanagement/util/PdfUtils.java b/src/main/java/net/gepafin/tendermanagement/util/PdfUtils.java index cfa32b03..1878f5ce 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/PdfUtils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/PdfUtils.java @@ -1,4 +1,6 @@ package net.gepafin.tendermanagement.util; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; @@ -60,6 +62,24 @@ public class PdfUtils { return cell; } + public static Object extractRows(Object content) throws Exception { + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode rootNode; + + // Check if input is already a JSON tree (Object) or a String + if (content instanceof String) { + rootNode = objectMapper.readTree((String) content); + } else { + rootNode = objectMapper.valueToTree(content); + } + + // Extract "rows" dynamically + JsonNode rowsArray = rootNode.get("rows"); + + // Convert to a generic List + return objectMapper.convertValue(rowsArray, List.class); + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java index 2f063173..0be87340 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java @@ -753,6 +753,12 @@ public class Utils { private static Map defaultErrorResponse() { return Collections.singletonMap("message", Translator.toLocale(GepafinConstant.INVALID_VATNUMBER)); } + public static boolean isNumeric(String input) { + if (input == null || input.trim().isEmpty()) { + return false; + } + return input.matches("-?\\d+(\\.\\d+)?"); + } } \ No newline at end of file From ac79924f21cf1d0db8aa12496d0dd817e1620863 Mon Sep 17 00:00:00 2001 From: nisha Date: Fri, 31 Jan 2025 17:23:22 +0530 Subject: [PATCH 02/17] Removed table validation from draft application --- .../java/net/gepafin/tendermanagement/util/FieldValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java index 9fb108ae..a9b5ad9a 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -135,7 +135,7 @@ public class FieldValidator { break; case GepafinConstant.NON_EMPTY_TABLES: - checkTableValidation(value, fieldId, contentResponseBean, errors); +// checkTableValidation(value, fieldId, contentResponseBean, errors); break; default: From 527f45d2a0e0466050aa680fc544c602950f8c56 Mon Sep 17 00:00:00 2001 From: Piyush Date: Fri, 31 Jan 2025 19:04:58 +0530 Subject: [PATCH 03/17] Done ticket GEPAFINBE-155 --- .../constants/GepafinConstant.java | 23 +++++++++++++++++++ .../dao/EmailNotificationDao.java | 10 +++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 85bceee3..f2a5cb61 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -408,5 +408,28 @@ public class GepafinConstant { public static final String REQUIRED_REQUESTED_AMOUNT_MSG = "validation.required.requested.amount"; public static final String CRITERIA_TABLE_COLUMNS="criteria_table_columns"; + + public static final String DOCUMENTATION_INTEGRATION_REQUEST_SVILUPPUMBRIA= "\n" + + " \n" + + "
\n" + + "

RICHIESTA INTEGRAZIONE DOCUMENTALE

\n" + + "

Buongiorno,

\n" + + "

In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Bando \n" + + " {{call_name}} di cui al Protocollo n. {{protocol_number}} del\n" + + " {{protocol_date}} e {{protocol_time}}, alla luce dell'attività istruttoria svolta,\n" + + " segnaliamo quanto segue:\n" + + "

\n" + + " {{note}}\n" + + "

Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione caricandola all'interno dello sportello\n" + + " online {{platform_link}} entro e non oltre {{response_days}} giorni dal ricevimento della presente comunicazione,\n" + + " precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.\n" + + "

\n" + + "

La documentazione trasmessa e le informazioni fornite saranno processate dall'istruttore assegnatario della pratica.\n" + + "

\n" + + "

Distinti Saluti,

\n" + + "

{{email_signature}}

\n" + + "
\n" + + " \n" + + ""; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 3988b35a..7bc8010d 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -94,7 +94,15 @@ public class EmailNotificationDao { subjectPlaceholders.put("{{company_name}}", company.getCompanyName()); // bodyPlaceholders.put("{{legal_mail}}", legalMail); String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); - String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); + String body; + if ("t7jh5wfg9QXylNaTZkPoE".equals(hubEntity.getUniqueUuid()) && templateType.equals(SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST)) { + bodyPlaceholders.put("{{email_signature}}", hubEntity.getEmailSignature()); + bodyPlaceholders.put("{{platform_link}}",hubEntity.getDomainName()); + body = Utils.replacePlaceholders(GepafinConstant.DOCUMENTATION_INTEGRATION_REQUEST_SVILUPPUMBRIA, bodyPlaceholders); + } + else { + body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); + } return new EmailContentResponse(subject, body, systemEmailTemplateResponse); } From 7fc53897e23026a030e59a8a226d8b5566113860 Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 31 Jan 2025 20:02:42 +0530 Subject: [PATCH 04/17] Added validation in form creation --- src/main/java/net/gepafin/tendermanagement/dao/FormDao.java | 5 +++++ .../tendermanagement/service/impl/FormServiceImpl.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 1c7ed019..5e5cfdef 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -4,6 +4,7 @@ import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; +import net.gepafin.tendermanagement.enums.CallStatusEnum; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.ContentResponseBean; @@ -118,6 +119,10 @@ public class FormDao { //cloned entity for old call data. CallEntity oldCallData = Utils.getClonedEntityForData(callEntity); + if(callEntity.getStatus().equals(CallStatusEnum.PUBLISH.getValue())) { + throw new CustomValidationException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.PUBLISHED_CALL_NOT_UPDATE)); + } List flowDataEntities = flowDataRepository.findByCallId(callEntity.getId()); List flowEdgesEntities = flowEdgesRepository.findByCallId(callEntity.getId()); if (Boolean.FALSE.equals(flowDataEntities.isEmpty() || flowDataEntities == null) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty() || flowEdgesEntities == null)) { diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java index 51199767..fe62af2f 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/FormServiceImpl.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -27,6 +28,7 @@ public class FormServiceImpl implements FormService { private Validator validator; @Override + @Transactional(rollbackFor = Exception.class) public FormResponseBean createForm(HttpServletRequest request,Long callId, FormRequest formRequest) { UserEntity user = validator.validateUser(request); CallEntity call = validator.validateUserWithCall(user, callId); @@ -34,18 +36,21 @@ public class FormServiceImpl implements FormService { } @Override + @Transactional(rollbackFor = Exception.class) public FormResponseBean updateForm(HttpServletRequest request, Long formId, FormRequest formRequest,Boolean forceDeleteFlow) { UserEntity user = validator.validateUser(request); return formDao.updateForm(user, formId,formRequest,forceDeleteFlow); } @Override + @Transactional(readOnly = true) public FormResponseBean getFormById(HttpServletRequest request, Long formId) { UserEntity user = validator.validateUser(request); return formDao.getFormEntityById(user, formId); } @Override + @Transactional(rollbackFor = Exception.class) public void deleteForm(HttpServletRequest request, Long formId) { UserEntity user = validator.validateUser(request); formDao.deleteFormById(user, formId); @@ -57,6 +62,7 @@ public class FormServiceImpl implements FormService { } @Override + @Transactional(readOnly = true) public List getFormsByCallId(HttpServletRequest request, Long callId) { UserEntity user = validator.validateUser(request); CallEntity call = validator.validateUserWithCall(user, callId); From bb6187a908839c378dbc331d5dc0ca9f05c135cb Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 3 Feb 2025 12:28:12 +0530 Subject: [PATCH 05/17] Fixed table validation issue --- .../gepafin/tendermanagement/dao/FormDao.java | 4 +- .../tendermanagement/util/FieldValidator.java | 44 ++++++++++++++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 5e5cfdef..3f558574 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -471,7 +471,9 @@ public class FormDao { FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean.getValidators(), FieldValidatorBean.class); String fieldValue = getFieldValue(contentResponseBean); - validator.isRequired(value, fieldValidatorBean.getIsRequired(), fieldValue); + + validator.isRequired(value, fieldValidatorBean.getIsRequired(), fieldValue) + .validateCustomTableValidation(value,fieldValidatorBean.getCustom(),fieldValue,contentResponseBean); }); if (Boolean.TRUE.equals(isSendValidationError)) { validator.validate(); diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java index a9b5ad9a..ffcdfcac 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -147,11 +147,51 @@ public class FieldValidator { return this; } - private static void checkTableValidation(String value, String fieldId, ContentResponseBean contentResponseBean, List errors) { + + + public FieldValidator validateCustomTableValidation(String value, String customRule, String fieldId, ContentResponseBean contentResponseBean) { + if (customRule == null || value == null) { + return this; // No custom rule to validate + } + + switch (customRule) { + + case GepafinConstant.NON_EMPTY_TABLES: + try { + checkTableValidation(value, fieldId, contentResponseBean, errors); + } catch (Exception e) { + throw new RuntimeException(e); + } + break; + + default: + // If the custom rule is unknown, just log or add an error (optional) + errors.add(MessageFormat.format(Translator.toLocale(GepafinConstant.VALIDATION_FIELD_CUSTOM), fieldId, customRule)); + break; + } + + return this; + } + + private static void checkTableValidation(String value, String fieldId, ContentResponseBean contentResponseBean, List errors) throws Exception { Map stateFieldMap= new HashMap<>(); + String tableType = contentResponseBean.getSettings().stream() + .filter(setting ->GepafinConstant.CRITERIA_TABLE_COLUMNS.equals(setting.getName())) // Check for "table_columns" + .map(SettingResponseBean::getName) // Extract the name + .findFirst() // Get the first matching result + .orElse(null); // Default to null if no match + + if (tableType!=null){ + try { + Object object = PdfUtils.extractRows(value);; + value= Utils.convertToString(object); + } catch (Exception e) { + throw new RuntimeException(e); + } + } contentResponseBean.getSettings().stream() - .filter(setting -> "table_columns".equals(setting.getName())) // Check for "table_columns" + .filter(setting -> "table_columns".equals(setting.getName()) || GepafinConstant.CRITERIA_TABLE_COLUMNS.equals(setting.getName())) // Check for "table_columns" .map(SettingResponseBean::getValue) .filter(Objects::nonNull) // Ensure value is not null .filter(settingValue -> settingValue instanceof Map) // Ensure value is a Map From e6a700fc47bc5b3092d6a46bddb67b94fca8e536 Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 3 Feb 2025 13:04:27 +0530 Subject: [PATCH 06/17] Fixed criteria issue --- .../java/net/gepafin/tendermanagement/dao/FormDao.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 5e5cfdef..415753b0 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -36,6 +36,8 @@ import java.util.stream.Collectors; @Component public class FormDao { + private final Logger log = LoggerFactory.getLogger(FormDao.class); + @Autowired private FormRepository formRepository; @@ -203,8 +205,9 @@ public class FormDao { String formFieldId,Long evaluationCriteriaId) { EvaluationCriteriaEntity evaluationCriteria = evaluationCriteriaService.validateEvaluationCriteria(evaluationCriteriaId); if (Boolean.FALSE.equals(evaluationCriteria.getCall().getId().equals(callEntity.getId()))) { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.EVALUATIONCRITERIA_INVALID)); + log.info("This evaluation criterion does not belong to the current call. Expected Call ID = {}, Found Call ID = {}", + callEntity.getId(), evaluationCriteria.getCall().getId()); + return; } CriteriaFormFieldEntity criteriaFormField = new CriteriaFormFieldEntity(); criteriaFormField.setCallId(callEntity.getId()); From 03fbae86d63af99329bf68642c0696a881bf7024 Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 3 Feb 2025 16:36:11 +0530 Subject: [PATCH 07/17] Create an endpoint to get application evaluation version --- .../constants/GepafinConstant.java | 1 + .../dao/ApplicationEvaluationDao.java | 18 ++++++++++++++++++ .../enums/UserActionContextEnum.java | 1 + .../ApplicationEvaluationVersionResponse.java | 13 +++++++++++++ .../service/ApplicationEvaluationService.java | 2 ++ .../impl/ApplicationEvaluationServiceImpl.java | 9 +++++++++ .../web/rest/api/ApplicationEvaluationApi.java | 14 ++++++++++++++ .../ApplicationEvaluationApiController.java | 12 ++++++++++++ src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 1 + 10 files changed, 72 insertions(+) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationVersionResponse.java diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 85bceee3..3c2a0942 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -112,6 +112,7 @@ public class GepafinConstant { public static final String APPLICATION_UPDATED_SUCCESS_MSG = "application.updated.success"; public static final String DELETE_APPLICATION_SUCCESS_MSG = "application.deleted.success"; public static final String GET_APPLICATION_SUCCESS_MSG = "application.get.success"; + public static final String GET_APPLICATION_EVALUATION_VERSION_SUCCESS_MSG = "application.evaluation.version.get.success"; public static final String APPLICATION_NOT_FOUND_MSG = "application.not.found"; public static final String APPLICATION_FORM_FIELD_NOT_FOUND = "application.form.field.not.found"; public static final String FORM_ID_DOES_NOT_MACTHES = "Form.not.matches.to.call.initial.form"; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 3579b90c..f84e7b3f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -2201,5 +2201,23 @@ public class ApplicationEvaluationDao { return evaluationFormResponseBean; } + public ApplicationEvaluationVersionResponse getApplicationEvaluationVersion(HttpServletRequest request, Long applicationId){ + + log.info("Fetching application evaluation version with ID: {}", applicationId); + + ApplicationEntity applicationEntity = applicationService.validateApplication(applicationId); + return buildApplicationEvaluationVersionResponse(applicationEntity); + + } + private ApplicationEvaluationVersionResponse buildApplicationEvaluationVersionResponse(ApplicationEntity applicationEntity) { + ApplicationEvaluationVersionResponse response = new ApplicationEvaluationVersionResponse(); + response.setApplicationId(applicationEntity.getId()); + response.setCallId(applicationEntity.getCall().getId()); + response.setCompanyId(applicationEntity.getCompanyId()); + response.setEvaluationVersion(EvaluationVersionEnum.valueOf(applicationEntity.getEvaluationVersion())); + response.setEvaluationId(applicationEntity.getApplicationEvaluationId()); + return response; + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index d0839370..847ee9b8 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -35,6 +35,7 @@ public enum UserActionContextEnum { /** application action context **/ GET_APPLICATION("GET_APPLICATION"), CREATE_UPDATE_APPLICATION_FORM("CREATE_UPDATE_APPLICATION_FORM"), + GET_APPLICATION_EVALUATION_VERSION("GET_APPLICATION_EVALUATION_VERSION"), CREATE_APPLICATION("CREATE_APPLICATION"), DELETE_APPLICATION("DELETE_APPLICATION"), GET_ALL_APPLICATION("GET_ALL_APPLICATION"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationVersionResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationVersionResponse.java new file mode 100644 index 00000000..99f1ae75 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationVersionResponse.java @@ -0,0 +1,13 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; + +@Data +public class ApplicationEvaluationVersionResponse { + private Long callId; + private Long companyId; + private Long applicationId; + private Long evaluationId; + private EvaluationVersionEnum evaluationVersion; +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java index 51f0b52c..50b4f299 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java @@ -27,4 +27,6 @@ public interface ApplicationEvaluationService { ApplicationEvaluationFormResponse getApplicationEvaluationForm(HttpServletRequest request, Long applicationId, Long assignedApplicationId); + ApplicationEvaluationVersionResponse getApplicationEvaluationVersion(HttpServletRequest request, Long applicationId); + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java index 55da1766..c1f5d0f2 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.model.response.ApplicationEvaluationFormResp import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; +import net.gepafin.tendermanagement.model.response.ApplicationEvaluationVersionResponse; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; import net.gepafin.tendermanagement.service.ApplicationService; @@ -100,4 +101,12 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe return applicationEvaluationDao.getApplicationEvaluationForm(request,applicationId,assignedApplicationId); } + @Override + public ApplicationEvaluationVersionResponse getApplicationEvaluationVersion(HttpServletRequest request, Long applicationId) { + validator.validateUser(request); + return applicationEvaluationDao.getApplicationEvaluationVersion(request,applicationId); + } + + + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java index 0e59e6ac..f1769b92 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java @@ -89,5 +89,19 @@ public interface ApplicationEvaluationApi { @Parameter(required = false) @RequestParam(value = "applicationId", required = false) Long applicationId, @Parameter( required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId); + @Operation(summary = "Api to get application evaluation version", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @GetMapping(value = "/application/{id}/version", produces = { "application/json" }) + ResponseEntity> getApplicationEvaluationVersion(HttpServletRequest request, + @Parameter(description = "The application id", required = true) @PathVariable("id") Long id); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java index 3a5df202..f7b9b8c1 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java @@ -109,4 +109,16 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation } + @Override + public ResponseEntity> getApplicationEvaluationVersion(HttpServletRequest request, Long applicationId) { + + /** This code is responsible for creating user action logs for the "get application evaluation version" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_APPLICATION_EVALUATION_VERSION).build()); + + ApplicationEvaluationVersionResponse applicationEvaluationVersionResponse = applicationEvaluationService.getApplicationEvaluationVersion(request,applicationId); + + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(applicationEvaluationVersionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_EVALUATION_VERSION_SUCCESS_MSG))); + } + } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 6e058a9f..ef54674d 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -152,6 +152,7 @@ application.created.success=Application successfully created. application.updated.success=Application successfully updated. application.deleted.success=Application successfully deleted. application.get.success=Application details fetched successfully. +application.evaluation.version.get.success = Application evaluation version fetched successfully. application.not.found=Application not found with the given ID. application.form.field.not.found=Application form field not found. Form.not.matches.to.call.initial.form=Form id does not matches to initial form id of call. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 624c7dfe..e14120cd 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -146,6 +146,7 @@ application.created.success=Applicazione creata con successo. application.updated.success=Applicazione aggiornata con successo. application.deleted.success=Applicazione eliminata con successo. application.get.success=Dettagli dell'applicazione recuperati con successo. +application.evaluation.version.get.success = Versione di valutazione dell'applicazione recuperata correttamente. application.not.found=Applicazione non trovata con l'ID fornito. application.form.field.not.found=Campo del modulo di domanda non trovato. Form.not.matches.to.call.initial.form=L'ID del modulo non corrisponde all'ID del modulo iniziale della chiamata. From ecee3159c8b669f031f610607bd023339c08e2e6 Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 3 Feb 2025 18:06:55 +0530 Subject: [PATCH 08/17] Updated get endpoint for application evaluation(v2) --- .../dao/ApplicationEvaluationDao.java | 14 +++---- .../ApplicationEvaluationFormResponse.java | 38 +++++++++++++++++-- .../rest/api/ApplicationEvaluationApi.java | 2 +- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 3579b90c..3f3259c3 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -139,6 +139,10 @@ public class ApplicationEvaluationDao { @Autowired private EvaluationFormRepository evaluationFormRepository; + @Autowired + private ObjectMapper objectMapper; + + private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); @@ -2161,17 +2165,13 @@ public class ApplicationEvaluationDao { } private ApplicationEvaluationFormResponse processEvaluationForm(ApplicationEvaluationEntity evaluationEntity){ - ApplicationEvaluationFormResponse response = new ApplicationEvaluationFormResponse(); - response.setApplicationId(evaluationEntity.getApplicationId()); - response.setNote(evaluationEntity.getNote()); - response.setStatus(evaluationEntity.getStatus()); - response.setEvaluationVersion(EvaluationVersionEnum.valueOf(evaluationEntity.getEvaluationVersion())); - response.setAssignedApplicationId(evaluationEntity.getAssignedApplicationsEntity().getId()); + Object convertedResponse = convertToResponse(evaluationEntity); + + ApplicationEvaluationFormResponse response = objectMapper.convertValue(convertedResponse, ApplicationEvaluationFormResponse.class); EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByCallIdAndIsDeletedFalse(evaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getId()); if (evaluationFormEntity != null) { - response.setEvaluationFormId(evaluationFormEntity.getId()); response.setApplicationEvaluationFormResponse(convertEvaluationFormToResponse(evaluationFormEntity, evaluationEntity)); } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java index d58219dd..f51378e0 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java @@ -1,18 +1,48 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; +import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + @Data public class ApplicationEvaluationFormResponse { - private Long evaluationFormId; + + private Long id; private Long applicationId; + private ApplicationStatusTypeEnum applicationStatus; private Long assignedApplicationId; private String note; - private String status; - private EvaluationVersionEnum evaluationVersion; + private ApplicationEvaluationStatusTypeEnum status; + private Long minScore; private ApplicationEvaluationFormResponseBean applicationEvaluationFormResponse; - + private List files; + private List evaluationDocument; + private List amendmentDetails; + private LocalDateTime createdDate; + private LocalDateTime updatedDate; + private String beneficiary; + private Long assignedUserId; + private String assignedUserName; + private Long protocolNumber; + private String callName; + private String motivation; + private LocalDateTime submissionDate; + private LocalDateTime evaluationEndDate; + private LocalDateTime callEndDate; + private String companyName; + private LocalDateTime assignedAt; + private String ndg; + private String appointmentId; + private BigDecimal amountRequested; + private BigDecimal amountAccepted; + private LocalDateTime dateAccepted; + private LocalDateTime dateRejected; + private EvaluationVersionEnum evaluationVersion; } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java index 0e59e6ac..d955ecaf 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java @@ -84,7 +84,7 @@ public interface ApplicationEvaluationApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @GetMapping(value = "", produces = "application/json") + @GetMapping(value = "/v2", produces = "application/json") ResponseEntity> getApplicationEvaluationForm(HttpServletRequest request, @Parameter(required = false) @RequestParam(value = "applicationId", required = false) Long applicationId, @Parameter( required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId); From 88f68432eb175435982b9297b89f8b4a0fb3d849 Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 3 Feb 2025 19:07:07 +0530 Subject: [PATCH 09/17] Fixed FormDao issue --- src/main/java/net/gepafin/tendermanagement/dao/FormDao.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index e4be1b0d..4311076f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -1,6 +1,8 @@ package net.gepafin.tendermanagement.dao; import jakarta.servlet.http.HttpServletRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; From 5438bc8d670bfaea1ac67627118ad72b13915b1b Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 3 Feb 2025 20:34:10 +0530 Subject: [PATCH 10/17] Done ticket GEPAFINBE-158 --- .../tendermanagement/dao/DashboardDao.java | 14 ++++----- ...ApplicationAmendmentRequestRepository.java | 2 ++ .../repositories/ApplicationRepository.java | 11 ------- .../AssignedApplicationsRepository.java | 31 +++++++++++++++++-- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index 5b705fd9..ac6b6fd7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -432,14 +432,14 @@ public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation( return preInstructorWidgetResponseBean; } private void setPreInstructorWidgets(List applicationIds, PreInstructorWidgetResponseBean responseBean,Long hubId) { - - Long totalAssignedApplications = assignedApplicationsRepository.countAssignedApplicationsByApplicationIds(applicationIds); + List assignedApplicationStatus = Arrays.asList(AssignedApplicationEnum.AWAITING.getValue(), AssignedApplicationEnum.OPEN.getValue()); + Long totalAssignedApplications = assignedApplicationsRepository.countAssignedApplicationsByApplicationIds(applicationIds,assignedApplicationStatus); if (totalAssignedApplications != null) { responseBean.getAssignedApplication().setTotalAssignedApplication(totalAssignedApplications); } LocalDateTime yesterday = LocalDateTime.now().minusDays(1); - Long newApplicationsAddedYesterday = assignedApplicationsRepository.countApplicationsAddedYesterdayForHub(applicationIds, hubId, yesterday); + Long newApplicationsAddedYesterday = assignedApplicationsRepository.countApplicationsAddedYesterdayForHub(applicationIds, hubId, yesterday,assignedApplicationStatus); if (newApplicationsAddedYesterday != null && totalAssignedApplications != null && totalAssignedApplications > 0) { BigDecimal percentageAdded = BigDecimal.valueOf(newApplicationsAddedYesterday) .divide(BigDecimal.valueOf(totalAssignedApplications), 4, RoundingMode.HALF_UP) @@ -449,17 +449,17 @@ public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation( List statuses = Arrays.asList(ApplicationStatusTypeEnum.APPROVED.getValue(), ApplicationStatusTypeEnum.REJECTED.getValue()); LocalDateTime sevenDaysAgo = LocalDateTime.now().minusDays(7); - Long evaluatedApplication = applicationRepository.countEvaluatedApplicationsInLast7Days(applicationIds, statuses, sevenDaysAgo); + Long evaluatedApplication = assignedApplicationsRepository.countEvaluatedApplicationsInLast7Days(applicationIds, statuses, sevenDaysAgo); if (evaluatedApplication != null) { responseBean.getEvaluatedApplication().setEvaluatedApplication(evaluatedApplication); - BigDecimal dailyAverage = applicationRepository.countDailyAverageEvaluatedApplicationsInLast7Days(applicationIds, statuses, sevenDaysAgo); + BigDecimal dailyAverage = assignedApplicationsRepository.countDailyAverageEvaluatedApplicationsInLast7Days(applicationIds, statuses, sevenDaysAgo); if (dailyAverage != null) { responseBean.getEvaluatedApplication().setDailyAverage(dailyAverage.setScale(2, RoundingMode.HALF_UP)); // Rounded to 2 decimal places } } - - Long rescueInstructorsInProgress = assignedApplicationsRepository.countApplicationsByIdsAndStatus(applicationIds, AssignedApplicationEnum.SOCCORSO.getValue()); + List amendmentStatus =Arrays.asList( ApplicationAmendmentRequestEnum.AWAITING.getValue(), ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED.getValue()); + Long rescueInstructorsInProgress = applicationAmendmentRequestRepository.countAmendmentsByApplicationIds(applicationIds,amendmentStatus); if (rescueInstructorsInProgress != null) { responseBean.getAmendmentInProgress().setTotalAmendmentInProgress(rescueInstructorsInProgress); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java index 7037ba7e..fc492019 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java @@ -148,4 +148,6 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository applicationIds, @Param("statuses") List statuses); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 0f8bbf89..a536baaf 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -94,16 +94,5 @@ public interface ApplicationRepository extends JpaRepository findApplicationIdsByHubId(@Param("hubId") Long hubId); - @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.id IN :applicationIds AND a.status IN :statuses AND a.isDeleted = false AND a.updatedDate >= :sevenDaysAgo") - Long countEvaluatedApplicationsInLast7Days(@Param("applicationIds") List applicationIds, - @Param("statuses") List statuses, - @Param("sevenDaysAgo") LocalDateTime sevenDaysAgo); - - @Query("SELECT (COUNT(a) / 7.0) FROM ApplicationEntity a WHERE a.id IN :applicationIds AND a.status IN :statuses AND a.isDeleted = false AND a.updatedDate >= :sevenDaysAgo") - BigDecimal countDailyAverageEvaluatedApplicationsInLast7Days(@Param("applicationIds") List applicationIds, - @Param("statuses") List statuses, - @Param("sevenDaysAgo") LocalDateTime sevenDaysAgo); - - } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java index 90791462..43a40f04 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -27,8 +28,8 @@ public interface AssignedApplicationsRepository extends JpaRepository findApplicationIdsByUserIdAndIsDeletedFalse(@Param("userId") Long userId); - @Query("SELECT COUNT(a) FROM AssignedApplicationsEntity a WHERE a.application.id IN :applicationIds AND a.isDeleted = false") - Long countAssignedApplicationsByApplicationIds(@Param("applicationIds") List applicationIds); + @Query("SELECT COUNT(a) FROM AssignedApplicationsEntity a WHERE a.application.id IN :applicationIds AND a.status IN :statuses AND a.isDeleted = false") + Long countAssignedApplicationsByApplicationIds(@Param("applicationIds") List applicationIds, @Param("statuses") List statuses); @Query(""" SELECT COUNT(aa) @@ -36,10 +37,12 @@ public interface AssignedApplicationsRepository extends JpaRepository= :yesterday + AND aa.isDeleted = false AND (:applicationIds IS NULL OR aa.application.id IN :applicationIds) """) - Long countApplicationsAddedYesterdayForHub(@Param("applicationIds") List applicationIds, @Param("hubId") Long hubId, @Param("yesterday") LocalDateTime yesterday); + Long countApplicationsAddedYesterdayForHub(@Param("applicationIds") List applicationIds, @Param("hubId") Long hubId, @Param("yesterday") LocalDateTime yesterday, @Param("statuses") List statuses); @Query("SELECT COUNT(a) FROM AssignedApplicationsEntity a WHERE a.application.id IN :applicationIds AND a.status = :status AND a.isDeleted = false") Long countApplicationsByIdsAndStatus(@Param("applicationIds") List applicationIds, @Param("status") String status); @@ -83,6 +86,28 @@ public interface AssignedApplicationsRepository extends JpaRepository findApplicationIdsByHubId(@Param("hubId") Long hubId); + @Query(" SELECT COUNT(aa) FROM AssignedApplicationsEntity aa " + + "JOIN aa.application a " + + "WHERE a.status IN :statuses " + + "AND a.isDeleted = false " + + "AND a.updatedDate >= :sevenDaysAgo " + + "AND aa.status = 'CLOSE'" + + "AND aa.isDeleted = false " + + " AND (:applicationIds IS NULL OR aa.application.id IN :applicationIds) ") + Long countEvaluatedApplicationsInLast7Days(@Param("applicationIds") List applicationIds, + @Param("statuses") List statuses, + @Param("sevenDaysAgo") LocalDateTime sevenDaysAgo); + @Query("SELECT (COUNT(a) / 7.0) FROM AssignedApplicationsEntity aa " + + "JOIN aa.application a " + + "WHERE a.status IN :statuses " + + "AND a.isDeleted = false " + + "AND a.updatedDate >= :sevenDaysAgo " + + "AND aa.status = 'CLOSE'" + + "AND aa.isDeleted = false " + + "AND (:applicationIds IS NULL OR aa.application.id IN :applicationIds)") + BigDecimal countDailyAverageEvaluatedApplicationsInLast7Days(@Param("applicationIds") List applicationIds, + @Param("statuses") List statuses, + @Param("sevenDaysAgo") LocalDateTime sevenDaysAgo); } From 3803a6ff98f76994b767ba528241664f5c7d4080 Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 4 Feb 2025 15:52:36 +0530 Subject: [PATCH 11/17] Updated code for Application Evaluation form --- .../dao/ApplicationEvaluationDao.java | 96 +++++++++++++------ .../ApplicationEvaluationFormRequestBean.java | 19 ++++ .../ApplicationEvaluationResponseBean.java | 17 ---- .../service/ApplicationEvaluationService.java | 3 +- .../ApplicationEvaluationServiceImpl.java | 10 +- .../rest/api/ApplicationEvaluationApi.java | 7 +- .../ApplicationEvaluationApiController.java | 9 +- 7 files changed, 101 insertions(+), 60 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationFormRequestBean.java delete mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 7ecadfcb..75ce444c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -1946,13 +1946,27 @@ public class ApplicationEvaluationDao { return convertToResponse(savedEntity); } - public ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long evaluationFormId, Long assignedApplicationId){ + public ApplicationEvaluationFormResponse createApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long evaluationFormId, Long assignedApplicationId){ + + UserEntity user = validator.validateUser(request); + AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId); + ApplicationEntity application = applicationService.validateApplication(assignedApplicationsEntity.getApplication().getId()); + + // Convert FormRequestBean to ApplicationEvaluationRequest + ApplicationEvaluationRequest req = convertToApplicationEvaluationRequest(applicationEvaluationFormRequestBean); + + // Call the existing method to create or update evaluation + ApplicationEvaluationResponse evaluationResponse = createOrUpdateApplicationEvaluation(user, req, assignedApplicationId); + + ApplicationEvaluationEntity entity = applicationEvaluationService.validateApplicationEvaluation(evaluationResponse.getId()); + + //Handling Application Evaluation form EvaluationFormEntity evaluationFormEntity = evaluationFormService.validateEvaluationForm(evaluationFormId); - validateFormFields(applicationRequestBean,evaluationFormEntity); - ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationRepository.findByAssignedApplicationsId(assignedApplicationId); - ApplicationEvaluationFormEntity applicationEvaluationFormEntity = getApplicationEvaluationFormOrCreate(evaluationFormEntity,applicationEvaluationEntity); - createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationEvaluationFormEntity, evaluationFormEntity); - return getEvaluationById(applicationEvaluationEntity.getId(),evaluationFormEntity.getId()); + validateFormFields(applicationEvaluationFormRequestBean,evaluationFormEntity); +// ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationRepository.findByAssignedApplicationsId(assignedApplicationId); + ApplicationEvaluationFormEntity applicationEvaluationFormEntity = getApplicationEvaluationFormOrCreate(evaluationFormEntity,entity); + createOrUpdateMultipleFormFields(applicationEvaluationFormRequestBean.getFormFields(), applicationEvaluationFormEntity, evaluationFormEntity); + return processEvaluationForm(entity); } private ApplicationEvaluationFormEntity getApplicationEvaluationFormOrCreate(EvaluationFormEntity evaluationFormEntity, ApplicationEvaluationEntity applicationEvaluationEntity) { @@ -1979,7 +1993,7 @@ public class ApplicationEvaluationDao { return saveApplicationEvaluationFormEntity(applicationEvaluationFormEntity); } - public void validateFormFields(ApplicationRequestBean request, EvaluationFormEntity evaluationFormEntity) { + public void validateFormFields(ApplicationEvaluationFormRequestBean request, EvaluationFormEntity evaluationFormEntity) { List contentResponseBeans=evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity).getContent(); @@ -2074,17 +2088,6 @@ public class ApplicationEvaluationDao { return documentIds; } - public ApplicationEvaluationResponseBean getEvaluationById(Long evaluationId, Long evaluationFormId){ - ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(evaluationId); - - ApplicationEvaluationFormEntity applicationEvaluationFormEntity = applicationEvaluationFormRepository.findByEvaluationIdAndEvaluationFormId(applicationEvaluationEntity.getId(),evaluationFormId); - List applicationEvaluationFormFieldEntities = applicationEvaluationFormFieldRepository.findByApplicationEvaluationFormId(applicationEvaluationFormEntity.getId()); - List evaluationFormFieldResponseBeans = createEvaluationFormFieldResponse(applicationEvaluationFormFieldEntities, applicationEvaluationFormEntity); - ApplicationEvaluationResponseBean applicationEvaluationResponseBean = convertApplicationEvaluationEntityToApplicationEvaluationResponseBean(applicationEvaluationEntity); - applicationEvaluationResponseBean.setFormFields(evaluationFormFieldResponseBeans); - - return applicationEvaluationResponseBean; - } private List createEvaluationFormFieldResponse( List evaluationFormFieldEntities, @@ -2141,15 +2144,39 @@ public class ApplicationEvaluationDao { return applicationEvaluationFormFieldReponseBean; } - private ApplicationEvaluationResponseBean convertApplicationEvaluationEntityToApplicationEvaluationResponseBean(ApplicationEvaluationEntity entity){ - ApplicationEvaluationResponseBean response = new ApplicationEvaluationResponseBean(); - response.setId(entity.getId()); - response.setApplicationId(entity.getApplicationId()); - response.setEvaluationId(entity.getId()); - response.setNote(entity.getNote()); - response.setEvaluationVersion(EvaluationVersionEnum.valueOf(entity.getEvaluationVersion())); - response.setCreatedDate(entity.getCreatedDate()); - response.setUpdatedDate(entity.getUpdatedDate()); + private ApplicationEvaluationFormResponse convertToApplicationEvaluationResponseBean(ApplicationEvaluationResponse applicationEvaluationResponse){ + ApplicationEvaluationFormResponse response = new ApplicationEvaluationFormResponse(); + response.setId(applicationEvaluationResponse.getId()); + response.setApplicationId(applicationEvaluationResponse.getApplicationId()); + response.setNote(applicationEvaluationResponse.getNote()); + response.setEvaluationVersion(applicationEvaluationResponse.getEvaluationVersion()); + response.setCreatedDate(applicationEvaluationResponse.getCreatedDate()); + response.setUpdatedDate(applicationEvaluationResponse.getUpdatedDate()); + response.setApplicationStatus(applicationEvaluationResponse.getApplicationStatus()); + response.setAssignedApplicationId(applicationEvaluationResponse.getAssignedApplicationId()); + response.setMinScore(applicationEvaluationResponse.getMinScore()); + response.setStatus(applicationEvaluationResponse.getStatus()); + response.setFiles(applicationEvaluationResponse.getFiles()); + response.setEvaluationDocument(applicationEvaluationResponse.getEvaluationDocument()); + response.setAmendmentDetails(applicationEvaluationResponse.getAmendmentDetails()); + response.setBeneficiary(applicationEvaluationResponse.getBeneficiary()); + response.setAssignedUserId(applicationEvaluationResponse.getAssignedUserId()); + response.setAssignedUserName(applicationEvaluationResponse.getAssignedUserName()); + response.setProtocolNumber(applicationEvaluationResponse.getProtocolNumber()); + response.setCallName(applicationEvaluationResponse.getCallName()); + response.setMotivation(applicationEvaluationResponse.getMotivation()); + response.setSubmissionDate(applicationEvaluationResponse.getSubmissionDate()); + response.setEvaluationEndDate(applicationEvaluationResponse.getEvaluationEndDate()); + response.setCallEndDate(applicationEvaluationResponse.getCallEndDate()); + response.setCompanyName(applicationEvaluationResponse.getCompanyName()); + response.setAssignedAt(applicationEvaluationResponse.getAssignedAt()); + response.setNdg(applicationEvaluationResponse.getNdg()); + response.setAppointmentId(applicationEvaluationResponse.getAppointmentId()); + response.setAmountRequested(applicationEvaluationResponse.getAmountRequested()); + response.setAmountAccepted(applicationEvaluationResponse.getAmountAccepted()); + response.setDateAccepted(applicationEvaluationResponse.getDateAccepted()); + response.setDateRejected(applicationEvaluationResponse.getDateRejected()); + return response; } @@ -2219,5 +2246,20 @@ public class ApplicationEvaluationDao { return response; } + public static ApplicationEvaluationRequest convertToApplicationEvaluationRequest(ApplicationEvaluationFormRequestBean formRequestBean) { + ApplicationEvaluationRequest request = new ApplicationEvaluationRequest(); + request.setFiles(formRequestBean.getFiles()); + request.setEvaluationDocument(formRequestBean.getEvaluationDocument()); + request.setAmendmentDetails(formRequestBean.getAmendmentDetails()); + request.setNote(formRequestBean.getNote()); + request.setApplicationStatus(formRequestBean.getApplicationStatus()); + request.setMotivation(formRequestBean.getMotivation()); + request.setAmountAccepted(formRequestBean.getAmountAccepted()); + + request.setCriteria(null); + request.setChecklist(null); + + return request; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationFormRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationFormRequestBean.java new file mode 100644 index 00000000..d2c0e2dc --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationFormRequestBean.java @@ -0,0 +1,19 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.ApplicationStatusForEvaluation; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class ApplicationEvaluationFormRequestBean { + private List files; + private List evaluationDocument; + private List amendmentDetails; + private String note; + private ApplicationStatusForEvaluation applicationStatus; + private List formFields; + private String motivation; + private BigDecimal amountAccepted; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java deleted file mode 100644 index b8adf7a6..00000000 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.gepafin.tendermanagement.model.response; - -import lombok.Data; -import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum; -import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; -import net.gepafin.tendermanagement.model.BaseBean; - -import java.util.List; - -@Data -public class ApplicationEvaluationResponseBean extends BaseBean { - private Long applicationId; - private Long evaluationId; - private String note; - private EvaluationVersionEnum evaluationVersion; - private List formFields; -} diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java index 50b4f299..86140ac6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.enums.FormActionEnum; +import net.gepafin.tendermanagement.model.request.ApplicationEvaluationFormRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; @@ -23,7 +24,7 @@ public interface ApplicationEvaluationService { ApplicationEvaluationEntity validateApplicationEvaluationByApplicationId(Long applicationId); - ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long evaluationId, Long evaluationFormId); + ApplicationEvaluationFormResponse createApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long evaluationId, Long evaluationFormId); ApplicationEvaluationFormResponse getApplicationEvaluationForm(HttpServletRequest request, Long applicationId, Long assignedApplicationId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java index c1f5d0f2..044c0902 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -7,13 +7,10 @@ import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.model.request.ApplicationEvaluationFormRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; -import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; -import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationFormResponse; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; - -import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationVersionResponse; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; @@ -88,10 +85,11 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe } @Override - public ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long assignedApplicationId, Long evaluationFormId) { + @Transactional(rollbackFor = Exception.class) + public ApplicationEvaluationFormResponse createApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long assignedApplicationId, Long evaluationFormId) { AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId); validator.validatePreInstructor(request, assignedApplicationsEntity.getUserId()); - return applicationEvaluationDao.createApplicationEvaluation(request,applicationRequestBean,evaluationFormId,assignedApplicationId); + return applicationEvaluationDao.createApplicationEvaluation(request,applicationEvaluationFormRequestBean,evaluationFormId,assignedApplicationId); } @Override diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java index 891b86c8..18576c61 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java @@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import net.gepafin.tendermanagement.enums.FormActionEnum; +import net.gepafin.tendermanagement.model.request.ApplicationEvaluationFormRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; @@ -68,10 +69,10 @@ public interface ApplicationEvaluationApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PutMapping(value = "/assignedApplication/{id}", + @PutMapping(value = "/assignedApplication/{id}/v2", produces = { "application/json" }) - ResponseEntity> createApplicationEvaluation(HttpServletRequest request, - @Valid @RequestBody ApplicationRequestBean applicationRequestBean, + ResponseEntity> createApplicationEvaluation(HttpServletRequest request, + @Valid @RequestBody ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, @Parameter(description = "Assigned Application ID", required = true) @PathVariable(value = "id", required = true) Long assignedApplicationId, @Parameter(description = "The evaluation form ID", required = true) @RequestParam("evaluationFormId") Long evaluationFormId); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java index f7b9b8c1..50eadb36 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java @@ -6,10 +6,7 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.FormActionEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; -import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; -import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; -import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; -import net.gepafin.tendermanagement.model.request.UserActionRequest; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; @@ -85,13 +82,13 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation } @Override - public ResponseEntity> createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long assignedApplicationId, Long evaluationFormId) { + public ResponseEntity> createApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, Long assignedApplicationId, Long evaluationFormId) { /** This code is responsible for creating user action logs for the "Create or update application evaluation form" operation. **/ loggingUtil.logUserAction( UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.CREATE_UPDATE_APPLICATION_EVALUATION_FORM).build()); - ApplicationEvaluationResponseBean applicationEvaluationResponseBean = applicationEvaluationService.createApplicationEvaluation(request, applicationRequestBean, assignedApplicationId, evaluationFormId); + ApplicationEvaluationFormResponse applicationEvaluationResponseBean = applicationEvaluationService.createApplicationEvaluation(request, applicationEvaluationFormRequestBean, assignedApplicationId, evaluationFormId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(applicationEvaluationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CREATED_SUCCESSFULLY))); From 9771e69e3e5f0928a20ab29772ff5ff95880c7fe Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 4 Feb 2025 16:27:47 +0530 Subject: [PATCH 12/17] updated url for application evaluation PUT Api --- .../tendermanagement/web/rest/api/ApplicationEvaluationApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java index 18576c61..4798e078 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java @@ -69,7 +69,7 @@ public interface ApplicationEvaluationApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PutMapping(value = "/assignedApplication/{id}/v2", + @PutMapping(value = "/v2/assignedApplication/{id}", produces = { "application/json" }) ResponseEntity> createApplicationEvaluation(HttpServletRequest request, @Valid @RequestBody ApplicationEvaluationFormRequestBean applicationEvaluationFormRequestBean, From 2e49ac5807848585d5edbf74d2df5f8b7715979c Mon Sep 17 00:00:00 2001 From: rajesh Date: Tue, 4 Feb 2025 17:43:10 +0530 Subject: [PATCH 13/17] Done ticket GEPAFINBE-160 --- .../constants/GepafinConstant.java | 16 ++++++++++++++++ .../dao/EmailNotificationDao.java | 4 ++++ .../db/changelog/db.changelog-1.0.0.xml | 6 +++++- ...template_application_rejected_04_02_2025.sql | 17 +++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_application_rejected_04_02_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 c85dacd7..20657e87 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -432,5 +432,21 @@ public class GepafinConstant { " \n" + " \n" + ""; + + + public static final String APPLICATION_REJECTED_SVILUPPUMBRIA = "\n" + + " \n" + + "
\n" + + "

Buongiorno,

\n" + + "

Si comunica che, in riferimento alla domanda a valere sul bando “{{call_name}}” di cui al\n" + + " Protocollo n. {{protocol_number}} del {{protocol_date}} alle {{protocol_time}},\n" + + " la stessa è stata sottoposta ad istruttoria di ammissibilità con esito negativo.

\n" + + "

Le motivazioni sono le seguenti: {{form_text}}

\n" + + "

Vi ricordiamo che i Beneficiari che hanno presentato richieste valutate non ammissibili entro 10 giorni dalla data di ricevimento della presente potranno finoltrare richiesta di chiarimenti e/o osservazioni alla scrivente Società ai sensi e per gli effetti dell’art.10 bis della L.241/1990 e s.m.i.

\n" + + "

Distinti Saluti,

\n" + + "

{{email_signature}}

\n" + + "
\n" + + " \n" + + ""; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 7bc8010d..bcdf4069 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -100,6 +100,10 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{platform_link}}",hubEntity.getDomainName()); body = Utils.replacePlaceholders(GepafinConstant.DOCUMENTATION_INTEGRATION_REQUEST_SVILUPPUMBRIA, bodyPlaceholders); } + if ("t7jh5wfg9QXylNaTZkPoE".equals(hubEntity.getUniqueUuid()) && templateType.equals(SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE)) { + bodyPlaceholders.put("{{email_signature}}", hubEntity.getEmailSignature()); + body = Utils.replacePlaceholders(GepafinConstant.APPLICATION_REJECTED_SVILUPPUMBRIA, bodyPlaceholders); + } else { body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); } 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 cdc7e6f1..ff297cba 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 @@ -2374,5 +2374,9 @@ - + + + + diff --git a/src/main/resources/db/dump/update_system_email_template_application_rejected_04_02_2025.sql b/src/main/resources/db/dump/update_system_email_template_application_rejected_04_02_2025.sql new file mode 100644 index 00000000..67815ab0 --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_application_rejected_04_02_2025.sql @@ -0,0 +1,17 @@ +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
+

Buongiorno,

+

Si comunica che, in riferimento alla domanda a valere sul bando “{{call_name}}” di cui al + Protocollo n. {{protocol_number}} del {{protocol_date}} alle {{protocol_time}}, + la stessa è stata sottoposta ad istruttoria di ammissibilità con esito negativo.

+

Le motivazioni sono le seguenti: {{form_text}}

+

Vi ricordiamo che i Beneficiari che hanno presentato richieste valutate non ammissibili entro 10 giorni dalla data di ricevimento della presente potranno formulare ricorso al Gestore tramite modello disponibile nello sportello online + {{platform_link}}.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'INADMISSIBILITY_NOTIFICATION'; \ No newline at end of file From c80e97cfd8ac489be9c6a8653e94cfe3bb118902 Mon Sep 17 00:00:00 2001 From: Piyush Date: Wed, 5 Feb 2025 12:14:10 +0530 Subject: [PATCH 14/17] Updated email content for DOCUMENTATION_INTEGRATION_REQUEST_SVILUPPUMBRIA --- .../net/gepafin/tendermanagement/constants/GepafinConstant.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 20657e87..d04a6abf 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -416,7 +416,7 @@ public class GepafinConstant { "

RICHIESTA INTEGRAZIONE DOCUMENTALE

\n" + "

Buongiorno,

\n" + "

In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Bando \n" + - " {{call_name}} di cui al Protocollo n. {{protocol_number}} del\n" + + " “{{call_name}}“ di cui al Protocollo n. {{protocol_number}} del\n" + " {{protocol_date}} e {{protocol_time}}, alla luce dell'attività istruttoria svolta,\n" + " segnaliamo quanto segue:\n" + "

\n" + From a3ac053594f2bdecc6e89ee1cf8269b66da4681f Mon Sep 17 00:00:00 2001 From: nisha Date: Wed, 5 Feb 2025 12:39:03 +0530 Subject: [PATCH 15/17] Fixed issue for email updation in company --- .../java/net/gepafin/tendermanagement/dao/CompanyDao.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java index b014b779..3a527d9f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java @@ -230,8 +230,8 @@ public class CompanyDao { String responseJson = companyRequest.getVatCheckResponse() != null ? Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) : null; setIfUpdated(userWithCompanyEntity::getJson, userWithCompanyEntity::setJson, responseJson); } - setIfUpdated(userWithCompanyEntity::getPec, userWithCompanyEntity::setPec, userWithCompanyEntity.getPec()); - setIfUpdated(userWithCompanyEntity::getEmail, userWithCompanyEntity::setEmail, userWithCompanyEntity.getEmail()); + setIfUpdated(userWithCompanyEntity::getPec, userWithCompanyEntity::setPec, companyRequest.getPec()); + setIfUpdated(userWithCompanyEntity::getEmail, userWithCompanyEntity::setEmail, companyRequest.getEmail()); setIfUpdated(userWithCompanyEntity::getContactName, userWithCompanyEntity::setContactName, companyRequest.getContactName()); setIfUpdated(userWithCompanyEntity::getContactEmail, userWithCompanyEntity::setContactEmail, companyRequest.getContactEmail()); setIfUpdated(userWithCompanyEntity::getIsLegalRepresentant, userWithCompanyEntity::setIsLegalRepresentant, companyRequest.getIsLegalRepresentant()); From a20d2908e1ad9d6e175ca39ef28b1fb685faec55 Mon Sep 17 00:00:00 2001 From: Piyush Date: Wed, 5 Feb 2025 15:33:27 +0530 Subject: [PATCH 16/17] Done changes related to instructor dashboard API --- .../tendermanagement/dao/DashboardDao.java | 28 +++++++++++++++---- .../service/DashboardService.java | 2 +- .../service/impl/DashboardServiceImpl.java | 6 ++-- .../web/rest/api/DashboardApi.java | 3 +- .../rest/api/impl/DashboardApiController.java | 4 +-- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index ac6b6fd7..3da577dc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -1,5 +1,7 @@ package net.gepafin.tendermanagement.dao; +import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.UserEntity; @@ -10,6 +12,9 @@ import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.CompanyService; 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.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -278,14 +283,16 @@ public class DashboardDao { AmendmentWidgetResponseBean amendmentWidgetResponseBean = initializeAmendmentResponseBean(); Long hubId = userEntity.getHub().getId(); - List applicationIds = getApplicationIdsForUserOrHub(userEntity,hubId); + List applicationIds = getApplicationIdsForUserOrHub(userEntity,hubId,null); setAmendmentCounts(applicationIds,amendmentWidgetResponseBean, hubId); calculateExpiringRequestsIn48Hours(applicationIds,amendmentWidgetResponseBean, hubId); calculateAverageResponseDays(applicationIds,amendmentWidgetResponseBean,hubId); return amendmentWidgetResponseBean; } - public List getApplicationIdsForUserOrHub(UserEntity userEntity, Long hubId) { - if (validator.checkIsPreInstructor()) { + public List getApplicationIdsForUserOrHub(UserEntity userEntity, Long hubId , Long userId) { + if (userId != null) { + return assignedApplicationsRepository.findApplicationIdsByUserIdAndIsDeletedFalse(userId); + } else if (validator.checkIsPreInstructor()) { return assignedApplicationsRepository.findApplicationIdsByUserIdAndIsDeletedFalse(userEntity.getId()); } else { return applicationRepository.findApplicationIdsByHubId(hubId); @@ -423,10 +430,21 @@ public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation( .build()) .build(); } - public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(UserEntity userEntity) { + public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request, Long userId) { + UserEntity userEntity = validator.validateUser(request); + if (validator.checkIsPreInstructor() && userId == null) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG)); + } + if (userId != null) { + validator.validatePreInstructor(request, userId); + if (validator.checkIsInstructorManager() && !userEntity.getId().equals(userId)) { + throw new ForbiddenAccessException(Status.FORBIDDEN, + Translator.toLocale(GepafinConstant.PERMISSION_DENIED)); + } + } PreInstructorWidgetResponseBean preInstructorWidgetResponseBean = initializeDashboardPreInstructorResponseBean(); Long hubId = userEntity.getHub().getId(); - List applicationIds = getApplicationIdsForUserOrHub(userEntity, hubId); + List applicationIds = getApplicationIdsForUserOrHub(userEntity, hubId,userId); setPreInstructorWidgets(applicationIds, preInstructorWidgetResponseBean,hubId); calculateAverageEvaluationTime(applicationIds, preInstructorWidgetResponseBean, hubId); return preInstructorWidgetResponseBean; diff --git a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java index a1782f6e..6950eaae 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java @@ -15,7 +15,7 @@ public interface DashboardService { public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId); public ApplicationWidgetResponseBean getApplicationDetails(HttpServletRequest request); public AmendmentWidgetResponseBean getAmendmentDetails(HttpServletRequest request); - public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request); + public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request,Long userId); public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(HttpServletRequest request); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java index 963294f4..1b44c350 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java @@ -48,9 +48,9 @@ public class DashboardServiceImpl implements DashboardService { return dashboardDao.getAmendmentDetails(userEntity); } @Override - public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request) { - UserEntity userEntity = validator.validateUser(request); - return dashboardDao.getDashboardWidgetForPreInstructor(userEntity); + public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request,Long userId) { + validator.validateUser(request); + return dashboardDao.getDashboardWidgetForPreInstructor(request,userId); } @Override public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(HttpServletRequest request) { 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 de62d73d..02b2fed7 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 @@ -20,6 +20,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; public interface DashboardApi { @@ -107,7 +108,7 @@ public interface DashboardApi { @GetMapping(value = "/instructor/amendment", produces = { "application/json" }) @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") - ResponseEntity> getDashboardWidgetForPreInstructor(HttpServletRequest request); + ResponseEntity> getDashboardWidgetForPreInstructor(HttpServletRequest request, @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java index 0ef56f7b..bb9f6d49 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java @@ -75,12 +75,12 @@ public class DashboardApiController implements DashboardApi { } @Override - public ResponseEntity> getDashboardWidgetForPreInstructor(HttpServletRequest request) { + public ResponseEntity> getDashboardWidgetForPreInstructor(HttpServletRequest request,Long userId) { /** This code is responsible for creating user action logs for the "Get dashboard stats widget for amendment page" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_DASHBOARD_WIDGET_FOR_PRE_INSTRUCTOR).build()); - PreInstructorWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForPreInstructor(request); + PreInstructorWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForPreInstructor(request,userId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); } From a3d3fec0e1d8bdcd1582546813fc8370e4b36108 Mon Sep 17 00:00:00 2001 From: nisha Date: Thu, 6 Feb 2025 15:03:49 +0530 Subject: [PATCH 17/17] Updated code --- .../net/gepafin/tendermanagement/dao/EmailNotificationDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index bcdf4069..8133e5f7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -100,7 +100,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{platform_link}}",hubEntity.getDomainName()); body = Utils.replacePlaceholders(GepafinConstant.DOCUMENTATION_INTEGRATION_REQUEST_SVILUPPUMBRIA, bodyPlaceholders); } - if ("t7jh5wfg9QXylNaTZkPoE".equals(hubEntity.getUniqueUuid()) && templateType.equals(SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE)) { + else if ("t7jh5wfg9QXylNaTZkPoE".equals(hubEntity.getUniqueUuid()) && templateType.equals(SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE)) { bodyPlaceholders.put("{{email_signature}}", hubEntity.getEmailSignature()); body = Utils.replacePlaceholders(GepafinConstant.APPLICATION_REJECTED_SVILUPPUMBRIA, bodyPlaceholders); }