From f4f084719fdcbf9b9fb60e324a86f456ce1326ea Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 20 Jan 2025 18:09:29 +0530 Subject: [PATCH 01/29] Applied table validation --- .../constants/GepafinConstant.java | 3 +- .../gepafin/tendermanagement/dao/FormDao.java | 30 +++--- .../tendermanagement/util/FieldValidator.java | 93 ++++++++++++++++++- src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 1 + 5 files changed, 109 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index dd163bf1..e9cc9eae 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -386,6 +386,7 @@ public class GepafinConstant { public static final String COUNT="count"; public static final String APPLICATION_PER_CALL="applicationPerCall"; public static final String APPLICATION_PER_STATUS="applicationPerStatus"; - + public static final String NON_EMPTY_TABLES="nonEmptyTables"; + public static final String VALIDATION_IN_TABLE = "validation.table.message"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 9e85a843..2ff4b2e9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -55,13 +55,13 @@ public class FormDao { @Autowired private CallRepository callRepository; - + @Autowired private Validator validator; @Autowired private CriteriaFormFieldRepository criteriaFormFieldRepository; - + @Autowired private EvaluationCriteriaService evaluationCriteriaService; @@ -144,7 +144,7 @@ public class FormDao { validateAndSaveCriteriaFormField(callEntity, formEntity, formRequest.getContent()); return convertFormEntityToFormResponseBean(formEntity); } - + private void validateAndSaveCriteriaFormField(CallEntity callEntity, FormEntity formEntity, List contentResponseBeans) { @@ -211,7 +211,7 @@ public class FormDao { /** This code is responsible for adding a version history log for the "creating criteria form field" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(criteriaFormField).build()); - + } public void validateForm(FormRequest formRequest){ @@ -397,9 +397,9 @@ public class FormDao { FieldValidator validator = FieldValidator.create(); formResponseBean.getContent().forEach(contentResponseBean -> { String fieldId = contentResponseBean.getId(); - String value = (String) formFieldMap.get(fieldId); String fieldLabel=contentResponseBean.getLabel(); - + Object object=formFieldMap.get(fieldId); + String value =Utils.convertToString(object); if(value == null && isApplicationFormExist) { return; } @@ -408,7 +408,7 @@ public class FormDao { .minLength(value, fieldValidatorBean.getMinLength(), fieldLabel) // Only applies if minLength is not null .maxLength(value, fieldValidatorBean.getMaxLength(), fieldLabel) // Only applies if maxLength is not null .matchesPattern(value, fieldValidatorBean.getPattern(), fieldLabel) // Only applies if pattern is present - .validateCustom(value, fieldValidatorBean.getCustom(), fieldLabel); // Add the custom validation here + .validateCustom(value, fieldValidatorBean.getCustom(), fieldLabel,contentResponseBean); // Add the custom validation here if (fieldValidatorBean.getCustom() != null && fieldValidatorBean.getCustom().equals(GepafinConstant.IS_PIVA)) { String error = validateVatNumber(value, fieldValidatorBean.getCustom(), fieldLabel); if(error != null) { @@ -428,11 +428,14 @@ public class FormDao { for (Object value : list) { setFormFieldMap(fieldId, formFieldMap, value); } - } + }else if (list.stream().allMatch(item -> item instanceof Map map && + map.keySet().stream().allMatch(String.class::isInstance))) { + if (fieldValue != null) { + formFieldMap.put(fieldId, fieldValue); + } + } else setFormFieldMap(fieldId, formFieldMap, fieldValue); } - else setFormFieldMap(fieldId, formFieldMap, fieldValue); } - private void setFormFieldMap(String fieldId, Map formFieldMap, Object value) { if (value instanceof String) { if(value !=null && Boolean.FALSE.equals(StringUtils.isEmpty((String)value))) { @@ -453,7 +456,7 @@ public class FormDao { for(ApplicationFormFieldEntity applicationFormFieldEntity:applicationFormFieldEntityList) { formFieldMap.put(applicationFormFieldEntity.getFieldId(),applicationFormFieldEntity.getFieldValue()); } - + FormResponseBean formResponseBean = convertFormEntityToFormResponseBean(formEntity); FieldValidator validator = FieldValidator.create(); formResponseBean.getContent().forEach(contentResponseBean -> { @@ -462,10 +465,11 @@ public class FormDao { FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean.getValidators(), FieldValidatorBean.class); validator - .isRequired(value,fieldValidatorBean.getIsRequired(),fieldId); + .isRequired(value,fieldValidatorBean.getIsRequired(),contentResponseBean.getLabel()); }); + validator.validate(); if (validator.hasErrors()) { - return false; // Validation failed, return false + return false; } return true; } diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java index 26edffff..9fb108ae 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -1,17 +1,20 @@ package net.gepafin.tendermanagement.util; import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.dao.FormDao; import net.gepafin.tendermanagement.dao.VatCheckDao; +import net.gepafin.tendermanagement.model.request.ContentRequestBean; +import net.gepafin.tendermanagement.model.response.ContentResponseBean; +import net.gepafin.tendermanagement.model.response.SettingResponseBean; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.ValidationException; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; @@ -75,7 +78,7 @@ public class FieldValidator { return value == null || value == 0L; } - public FieldValidator validateCustom(String value, String customRule, String fieldId) { + public FieldValidator validateCustom(String value, String customRule, String fieldId, ContentResponseBean contentResponseBean) { if (customRule == null || value == null) { return this; // No custom rule to validate } @@ -131,6 +134,10 @@ public class FieldValidator { } break; + case GepafinConstant.NON_EMPTY_TABLES: + checkTableValidation(value, fieldId, contentResponseBean, errors); + 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)); @@ -139,6 +146,70 @@ public class FieldValidator { return this; } + + private static void checkTableValidation(String value, String fieldId, ContentResponseBean contentResponseBean, List errors) { + Map stateFieldMap= new HashMap<>(); + + contentResponseBean.getSettings().stream() + .filter(setting -> "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 + .map(settingValue -> (Map) settingValue) // Cast to Map + .map(valueMap -> (List>) valueMap.get("stateFieldData")) // Extract stateFieldData list + .filter(Objects::nonNull) // Ensure stateFieldData is not null + .flatMap(List::stream) // Flatten the list of field data maps + .forEach(fieldData -> { + String fieldName = (String) fieldData.get("name"); // Get the name field + Boolean isPredefined = (Boolean) fieldData.get("predefined"); // Get the predefined field + + if (fieldName != null && isPredefined != null) { + stateFieldMap.put(fieldName, isPredefined); + } + }); + + + try { + List> fieldValueList = Utils.convertJsonStringIntoJsonList(value); + + if (fieldValueList == null || fieldValueList.isEmpty()) { + errors.add(MessageFormat.format( + Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE), + fieldId)); + return; + } + + for (int rowIndex = 0; rowIndex < fieldValueList.size(); rowIndex++) { + Map field = fieldValueList.get(rowIndex); + + boolean hasSingleNonNullPredefinedFalse = false; + + for (Map.Entry entry : stateFieldMap.entrySet()) { + String stateKey = entry.getKey(); + Boolean isPredefinedFalse = Boolean.FALSE.equals(entry.getValue()); + + if (isPredefinedFalse) { + Object fieldValue = field.get(stateKey); + if (fieldValue != null && !StringUtils.isEmpty(fieldValue.toString())) { + hasSingleNonNullPredefinedFalse = true; + break; + } + } + } + + if (!hasSingleNonNullPredefinedFalse) { + errors.add(MessageFormat.format( + Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE), + fieldId)); + break; + } + + } + + } catch (Exception e) { + } + } + public FieldValidator isRequired(String value,Boolean isRequired, String fieldName) { if (Boolean.TRUE.equals(isRequired)) { // Only check if isRequired is true if (Objects.isNull(value) || value.isEmpty()) { // Check if value is null or empty @@ -150,4 +221,16 @@ public class FieldValidator { public boolean hasErrors() { return !errors.isEmpty(); } + + + public ContentRequestBean getContentRequestBeanFromJson(String jsonString) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + + // Parse the JSON into a ContentRequestBean + ContentRequestBean contentRequestBean = objectMapper.readValue(jsonString, ContentRequestBean.class); + + // Now contentRequestBean is populated with the data from the JSON + return contentRequestBean; + } + } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index a92a61ad..1066eaaa 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -61,6 +61,7 @@ invalid.status.change.from.draft=Status cannot be changed to READY_TO_PUBLISH or status.cannot.be.changed=Status cannot be changed. published.call.not.update=Published call cannot be updated. invalid.status.change.from.publish=Status cannot be changed to READY_TO_PUBLISH or DRAFT from PUBLISH. +validation.table.message=Data for field {0} is not present. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index e7dbc010..ca782fe6 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -342,3 +342,4 @@ user.with.company.not.found = Utente con azienda non trovato per utente o aziend user.action.fetched.successfully = Dettagli sull'azione dell'utente recuperati correttamente. action.context.labels.fetched.successfully = Etichette del contesto dell'azione recuperate correttamente. amount.accepted.required=L'importo accettato � obbligatorio durante l'approvazione della domanda. +validation.table.message=I dati per il campo {0} non sono presenti. \ No newline at end of file From c8a9c3216b419e0d3576f41d59842312bc3c6b22 Mon Sep 17 00:00:00 2001 From: harish Date: Tue, 21 Jan 2025 22:39:55 +0530 Subject: [PATCH 02/29] Fixed isRequested amount issue --- .../tendermanagement/dao/ApplicationDao.java | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index ba847ca3..d9938639 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -497,27 +497,24 @@ public class ApplicationDao { VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; List contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); - contentResponseBeans.stream() - .filter(content -> "numberinput".equals(content.getName())) - .map(ContentResponseBean::getSettings) - .flatMap(List::stream) - .filter(setting -> "isRequestedAmount".equals(setting.getName()) && Boolean.TRUE.equals(setting.getValue())) - .findFirst() - .ifPresent(setting -> { - Object fieldValue = applicationFormFieldRequestBean.getFieldValue(); - if(fieldValue!=null) { - if (fieldValue instanceof String) { - try { - BigDecimal amountRequested = new BigDecimal((String) fieldValue); - applicationFormEntity.getApplication().setAmountRequested(amountRequested); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("Field value is not a valid number: " + fieldValue, e); - } - } else { - throw new IllegalArgumentException("Field value is not a String: " + fieldValue); - } - } - }); + contentResponseBeans.stream() + .filter(content -> "numberinput".equals(content.getName()) && content.getId().toString().equals(applicationFormFieldRequestBean.getFieldId())) + .map(ContentResponseBean::getSettings) + .flatMap(List::stream) + .filter(setting -> "isRequestedAmount".equals(setting.getName()) && Boolean.TRUE.equals(setting.getValue())) + .findFirst() + .ifPresent(setting -> { + + Object fieldValue = applicationFormFieldRequestBean.getFieldValue(); + if(fieldValue!=null) { + try { + BigDecimal amountRequested = new BigDecimal(fieldValue.toString()); + applicationFormEntity.getApplication().setAmountRequested(amountRequested); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Field value is not a valid number: " + fieldValue, e); + } + } + }); ApplicationFormFieldEntity oldApplicationFormFieldData = null; From b31c33103d1f779a8ebe85fbf2fb0109cca67bfa Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 22 Jan 2025 16:38:46 +0530 Subject: [PATCH 03/29] Added validation for the requested amount in the application. --- .../gepafin/tendermanagement/constants/GepafinConstant.java | 1 + .../java/net/gepafin/tendermanagement/dao/ApplicationDao.java | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 34a05ca6..faf9570e 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -387,5 +387,6 @@ public class GepafinConstant { public static final String APPLICATION_PER_CALL="applicationPerCall"; public static final String APPLICATION_PER_STATUS="applicationPerStatus"; public static final String CALL_EXPIRED="call.expired"; + public static final String AMOUNT_REQUEST_SHOULD_GREATED_THEN_ZERO = "amount.request.should.greated.then.zero"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index d9938639..84131b9b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -1260,6 +1260,9 @@ public class ApplicationDao { if (Boolean.FALSE.equals(ApplicationStatusTypeEnum.DRAFT.getValue().equals(applicationEntity.getStatus()))) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_NOT_IN_DRAFT_STATUS)); } + if (applicationEntity.getAmountRequested() == null || applicationEntity.getAmountRequested().compareTo(BigDecimal.ZERO) <= 0 ) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.AMOUNT_REQUEST_SHOULD_GREATED_THEN_ZERO)); + } List flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId()); Long totalSteps = flowFormDao.calculateTotalSteps(flowEdgesList); Integer completedSteps = flowFormDao.getCompletedSteps(applicationEntity); From c8580317bac566cb7e80164e0c0a2735219c41f3 Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 22 Jan 2025 16:39:10 +0530 Subject: [PATCH 04/29] updated code --- src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 4559736c..4839b210 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -351,3 +351,4 @@ user.action.fetched.successfully = User action details fetched successfully. action.context.labels.fetched.successfully = Action Context Labels Fetched Successfully. amount.accepted.required=Amount accepted is required while approving the application. call.expired=Call has been expired. +amount.request.should.greated.then.zero=Requested amount should not be empty and should be greater than zero. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 1ab08cbd..65fa7094 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -341,4 +341,5 @@ user.with.company.not.found = Utente con azienda non trovato per utente o aziend user.action.fetched.successfully = Dettagli sull'azione dell'utente recuperati correttamente. action.context.labels.fetched.successfully = Etichette del contesto dell'azione recuperate correttamente. amount.accepted.required=L'importo accettato � obbligatorio durante l'approvazione della domanda. -call.expired=La chiamata è scaduta. \ No newline at end of file +call.expired=La chiamata è scaduta. +amount.request.should.greated.then.zero=L'importo richiesto non deve essere vuoto e deve essere maggiore di zero. From 4957a91f41a1217a7598d593562f017b4f914798 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Wed, 22 Jan 2025 18:04:00 +0530 Subject: [PATCH 05/29] Fixed validation error issue in nex-prev api. --- .../net/gepafin/tendermanagement/dao/ApplicationDao.java | 4 ++-- .../net/gepafin/tendermanagement/dao/FlowFormDao.java | 8 ++++---- .../java/net/gepafin/tendermanagement/dao/FormDao.java | 7 +++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index d9938639..b9c9d5a7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -402,7 +402,7 @@ public class ApplicationDao { ApplicationResponse responseBean = new ApplicationResponse(); List flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId()); Long totalFormSteps = flowFormDao.calculateTotalSteps(flowEdgesList); - Long completedSteps= Long.valueOf(flowFormDao.getCompletedSteps(applicationEntity)); + Long completedSteps= Long.valueOf(flowFormDao.getCompletedSteps(applicationEntity, false)); Integer progress = calculateProgress(totalFormSteps, completedSteps); responseBean.setId(applicationEntity.getId()); responseBean.setProgress(progress); @@ -1262,7 +1262,7 @@ public class ApplicationDao { } List flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId()); Long totalSteps = flowFormDao.calculateTotalSteps(flowEdgesList); - Integer completedSteps = flowFormDao.getCompletedSteps(applicationEntity); + Integer completedSteps = flowFormDao.getCompletedSteps(applicationEntity, true); if (totalSteps.intValue() != completedSteps) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_IS_INCOMPLETE_MSG)); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java index bf68f3b9..404ec854 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java @@ -305,7 +305,7 @@ public class FlowFormDao { Long totalFormSteps = calculateTotalSteps(flowEdgesList); Long currentStep = calculateCurrentStep(flowEdgesList, formEntity); nextOrPreviousFormResponse.setTotalFormSteps(totalFormSteps); - completedSteps = getCompletedSteps(applicationEntity); + completedSteps = getCompletedSteps(applicationEntity, false); nextOrPreviousFormResponse.setCompletedSteps(Long.valueOf(completedSteps)); nextOrPreviousFormResponse.setCurrentStep(currentStep); if(applicationEntity.getProtocol() != null) { @@ -318,13 +318,13 @@ public class FlowFormDao { return nextOrPreviousFormResponse; } - public Integer getCompletedSteps(ApplicationEntity applicationEntity) { + public Integer getCompletedSteps(ApplicationEntity applicationEntity, Boolean isSendValidationError) { Integer completedSteps=0; List applicationFormList = applicationFormRepository.findByApplicationId(applicationEntity.getId()); List applicationFormFieldEntities=new ArrayList<>(); for (ApplicationFormEntity applicationFormEntity:applicationFormList){ applicationFormFieldEntities=applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()); - Boolean isCompleted=formDao.validateCompletedSteps(applicationFormFieldEntities, applicationEntity, applicationFormEntity.getForm()); + Boolean isCompleted=formDao.validateCompletedSteps(applicationFormFieldEntities, applicationEntity, applicationFormEntity.getForm(), isSendValidationError); if(Boolean.TRUE.equals(isCompleted)){ completedSteps++; } @@ -361,7 +361,7 @@ public class FlowFormDao { FormEntity currentFormEntity = applicationFormList.get(applicationFormList.size() - 1).getForm(); for (ApplicationFormEntity applicationFormEntity : applicationFormList) { - Boolean isCompleted = formDao.validateCompletedSteps(applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()), applicationEntity, applicationFormEntity.getForm()); + Boolean isCompleted = formDao.validateCompletedSteps(applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()), applicationEntity, applicationFormEntity.getForm(), false); if (Boolean.FALSE.equals(isCompleted)) { return applicationFormEntity.getForm().getId(); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 2ff4b2e9..3b910738 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -451,7 +451,8 @@ public class FormDao { return false; } - public Boolean validateCompletedSteps(List applicationFormFieldEntityList, ApplicationEntity applicationEntity, FormEntity formEntity) { + public Boolean validateCompletedSteps(List applicationFormFieldEntityList, ApplicationEntity applicationEntity, FormEntity formEntity, + Boolean isSendValidationError) { Map formFieldMap = new LinkedHashMap(); for(ApplicationFormFieldEntity applicationFormFieldEntity:applicationFormFieldEntityList) { formFieldMap.put(applicationFormFieldEntity.getFieldId(),applicationFormFieldEntity.getFieldValue()); @@ -467,7 +468,9 @@ public class FormDao { validator .isRequired(value,fieldValidatorBean.getIsRequired(),contentResponseBean.getLabel()); }); - validator.validate(); + if (Boolean.TRUE.equals(isSendValidationError)) { + validator.validate(); + } if (validator.hasErrors()) { return false; } From 20c148128e57a72bd6560d7102b437056391f053 Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 22 Jan 2025 18:04:46 +0530 Subject: [PATCH 06/29] Fixed motivation field issue --- .../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 88e6954a..3988b35a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -265,7 +265,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_number}}", applicationEntity.getProtocol().getProtocolNumber().toString()); bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate())); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); - bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getNote()); + bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getMotivation()); sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null,null); } From 45aaf4f66706d4ab9cbf99d478219f5317bfd885 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Thu, 23 Jan 2025 13:16:11 +0530 Subject: [PATCH 07/29] Fixed vaidation errors for createupdate application API. --- .../gepafin/tendermanagement/dao/FormDao.java | 2 +- .../gepafin/tendermanagement/util/Utils.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 3b910738..b9b4da07 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -399,7 +399,7 @@ public class FormDao { String fieldId = contentResponseBean.getId(); String fieldLabel=contentResponseBean.getLabel(); Object object=formFieldMap.get(fieldId); - String value =Utils.convertToString(object); + String value =Utils.convertToStringForFormFieldValue(object); if(value == null && isApplicationFormExist) { return; } diff --git a/src/main/java/net/gepafin/tendermanagement/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java index 18c49a6e..2f063173 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java @@ -407,6 +407,29 @@ public class Utils { return input.toString(); } + public static String convertToStringForFormFieldValue(Object input) { + if (input == null) { + return null; // Return string "null" for null input + } + + if (input instanceof String) { + return (String) input; // Return the string directly if input is a string + } + + if (input instanceof Collection) { + // Handle collections (List, Set, etc.) + return convertCollectionToString((Collection) input); + } + + if (input instanceof Map) { + // Handle maps + return convertMapToString((Map) input); + } + + // For other types (like Integer, Boolean, etc.), use toString() + return input.toString(); + } + private static String convertCollectionToString(Collection collection) { try { return mapper.writeValueAsString(collection); // Convert the collection to a JSON string From 2c01cbc39a4d791b5da6b74e39f978244ed2b759 Mon Sep 17 00:00:00 2001 From: nisha Date: Thu, 23 Jan 2025 14:11:58 +0530 Subject: [PATCH 08/29] Done ticket GEPAFINBE-144 --- .../tendermanagement/dao/DashboardDao.java | 75 +++++++++++++++---- .../enums/UserActionContextEnum.java | 1 + ...AssignedApplicationWidgetResponseBean.java | 15 ++++ .../ApplicationEvaluationRepository.java | 4 +- .../AssignedApplicationsRepository.java | 40 ++++++++++ .../service/DashboardService.java | 3 + .../service/impl/DashboardServiceImpl.java | 7 ++ .../web/rest/api/DashboardApi.java | 16 ++++ .../rest/api/impl/DashboardApiController.java | 14 ++++ 9 files changed, 158 insertions(+), 17 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index 1f17ef3e..4dbca0cf 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -6,31 +6,23 @@ import net.gepafin.tendermanagement.entities.UserActionEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserWithCompanyEntity; import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; -import net.gepafin.tendermanagement.enums.CallStatusEnum; -import net.gepafin.tendermanagement.enums.RoleStatusEnum; -import net.gepafin.tendermanagement.enums.UserStatusEnum; +import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.CompanyService; import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.temporal.ChronoUnit; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.*; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; -import java.util.List; -import java.util.List; + import java.util.stream.Collectors; @Component @@ -57,8 +49,6 @@ public class DashboardDao { @Autowired private ApplicationEvaluationRepository applicationEvaluationRepository; - @Autowired - private UserActionsRepository userActionsRepository; @Autowired private ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository; @@ -258,14 +248,15 @@ public class DashboardDao { if (Boolean.FALSE.equals(applicationIds.isEmpty())) { BigDecimal averageTime = applicationEvaluationRepository.findAverageEvaluationTimeByApplicationIds(applicationIds); - responseBean.setEvaluationAverageTime(averageTime != null ? averageTime : BigDecimal.ZERO); + responseBean.setEvaluationAverageTime(averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); } LocalDate twoDaysLater = LocalDate.now().plusDays(2); - + List statusList =Arrays.asList( ApplicationEvaluationStatusTypeEnum.OPEN.getValue(), ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue()); Long dueApplications = applicationEvaluationRepository.countDueApplicationsBetween( applicationIds, LocalDate.now(), - twoDaysLater + twoDaysLater, + statusList ); if (dueApplications != null) { @@ -362,5 +353,57 @@ public class DashboardDao { } } + public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(UserEntity userEntity) { + Long userId = userEntity.getId(); + Long hubId = userEntity.getHub().getId(); + + Object[] results; + List applicationIds; + if (validator.checkIsPreInstructor()) { + results = assignedApplicationsRepository.countAssignedApplicationsWithStatus(userId, hubId); + applicationIds = assignedApplicationsRepository.findApplicationIdsByUserIdAndHubIdAndIsDeletedFalse(userId,hubId); + } else { + results = assignedApplicationsRepository.countAssignedApplicationsForHub(hubId); + applicationIds = assignedApplicationsRepository.findApplicationIdsByHubId(hubId); + } + AssignedApplicationWidgetResponseBean response = convertToResponse(results); + calculateEvaluationAvgTimeForAssignedApplication(response, applicationIds); + return response; + } + + private void calculateEvaluationAvgTimeForAssignedApplication(AssignedApplicationWidgetResponseBean response, List applicationIds) { + if (applicationIds == null || applicationIds.isEmpty()) { + response.setEvaluationAverageTime(BigDecimal.ZERO); + response.setNumberOfApplicationExpiringIn48Hours(0L); + return; + } + + BigDecimal averageTime = applicationEvaluationRepository.findAverageEvaluationTimeByApplicationIds(applicationIds); + response.setEvaluationAverageTime(averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + + LocalDate today = LocalDate.now(); + LocalDate twoDaysLater = today.plusDays(2); + List statusList =Arrays.asList( ApplicationEvaluationStatusTypeEnum.OPEN.getValue(), ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue()); + Long dueApplications = applicationEvaluationRepository.countDueApplicationsBetween( + applicationIds, today, twoDaysLater,statusList + ); + response.setNumberOfApplicationExpiringIn48Hours(dueApplications != null ? dueApplications : 0L); + } + + private AssignedApplicationWidgetResponseBean convertToResponse(Object[] results) { + AssignedApplicationWidgetResponseBean response = new AssignedApplicationWidgetResponseBean(); + + Object[] data = (Object[]) results[0]; + + response.setNumberOfAssignedApplication(data[0] instanceof Number ? ((Number) data[0]).longValue() : 0L); + response.setNumberOfApplicationInAmendmentState(data[1] instanceof Number ? ((Number) data[1]).longValue() : 0L); + response.setNumberOfApplicationInEvaluationState(data[2] instanceof Number ? ((Number) data[2]).longValue() : 0L); + response.setNumberOfAcceptedApplication(data[3] instanceof Number ? ((Number) data[3]).longValue() : 0L); + + 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 64fd530c..503f0383 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -138,6 +138,7 @@ public enum UserActionContextEnum { GET_DASHBOARD_WIDGET_FOR_BENEFICIARY("GET_DASHBOARD_WIDGET_FOR_BENEFICIARY"), GET_APPLICATION_DETAILS("GET_APPLICATION_DETAILS"), GET_AMENDMENT_DETAILS("GET_AMENDMENT_DETAILS"), + GET_APPLICATION_DETAILS_FOR_EVALUATION("GET_APPLICATION_DETAILS_FOR_EVALUATION"), /** Evaluation criteria action context **/ GET_EVALUATION_CRITERIA("GET_EVALUATION_CRITERIA"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java new file mode 100644 index 00000000..163acdad --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class AssignedApplicationWidgetResponseBean { + private Long numberOfAssignedApplication; + private Long numberOfApplicationInAmendmentState; + private Long numberOfAcceptedApplication; + private Long numberOfApplicationInEvaluationState; + private Long numberOfApplicationExpiringIn48Hours; + private BigDecimal evaluationAverageTime; +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java index cf0b9c66..468a5a6f 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java @@ -55,11 +55,13 @@ public interface ApplicationEvaluationRepository extends JpaRepository applicationIds, @Param("startDate") LocalDate startDate, - @Param("endDate") LocalDate endDate + @Param("endDate") LocalDate endDate, + @Param("statusList") List statusList ); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java index 56036759..16fa4928 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java @@ -25,4 +25,44 @@ public interface AssignedApplicationsRepository extends JpaRepository findApplicationIdsByUserIdAndIsDeletedFalse(@Param("userId") Long userId); + + @Query(""" + SELECT + COALESCE(COUNT(a.id), 0) AS totalAssigned, + COALESCE(SUM(CASE WHEN app.status = 'SOCCORSO' THEN 1 ELSE 0 END), 0) AS amendmentCount, + COALESCE(SUM(CASE WHEN app.status = 'EVALUATION' THEN 1 ELSE 0 END), 0) AS evaluationCount, + COALESCE(SUM(CASE WHEN app.status = 'APPROVED' THEN 1 ELSE 0 END), 0) AS approvedCount + FROM AssignedApplicationsEntity a + JOIN a.application app + WHERE a.isDeleted = false + AND a.userId = :userId + AND app.hubId = :hubId +""") + Object[] countAssignedApplicationsWithStatus( + @Param("userId") Long userId, + @Param("hubId") Long hubId + ); + + @Query(""" + SELECT + COALESCE(COUNT(a.id), 0) AS totalAssigned, + COALESCE(SUM(CASE WHEN app.status = 'SOCCORSO' THEN 1 ELSE 0 END), 0) AS amendmentCount, + COALESCE(SUM(CASE WHEN app.status = 'EVALUATION' THEN 1 ELSE 0 END), 0) AS evaluationCount, + COALESCE(SUM(CASE WHEN app.status = 'APPROVED' THEN 1 ELSE 0 END), 0) AS approvedCount + FROM AssignedApplicationsEntity a + JOIN a.application app + WHERE a.isDeleted = false + AND app.hubId = :hubId +""") + Object[] countAssignedApplicationsForHub(@Param("hubId") Long hubId); + + @Query("SELECT aa.application.id FROM AssignedApplicationsEntity aa " + + "WHERE aa.userId = :userId AND aa.application.hubId = :hubId AND aa.isDeleted = false") + List findApplicationIdsByUserIdAndHubIdAndIsDeletedFalse(@Param("userId") Long userId, @Param("hubId") Long hubId); + + @Query("SELECT aa.application.id FROM AssignedApplicationsEntity aa " + + "WHERE aa.application.hubId = :hubId AND aa.isDeleted = false") + List findApplicationIdsByHubId(@Param("hubId") Long hubId); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java index ee7429d4..f2076f0c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; +import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.BeneficiaryWidgetResponseBean; import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; @@ -13,4 +14,6 @@ public interface DashboardService { public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId); public ApplicationWidgetResponseBean getApplicationDetails(HttpServletRequest request); public AmendmentWidgetResponseBean getAmendmentDetails(HttpServletRequest request); + 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 e157d293..a3cf0482 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java @@ -6,6 +6,7 @@ import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; +import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.BeneficiaryWidgetResponseBean; import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; import net.gepafin.tendermanagement.service.DashboardService; @@ -45,4 +46,10 @@ public class DashboardServiceImpl implements DashboardService { UserEntity userEntity=validator.validateUser(request); return dashboardDao.getAmendmentDetails(userEntity); } + + @Override + public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(HttpServletRequest request) { + UserEntity userEntity = validator.validateUser(request); + return dashboardDao.getApplicationDetailsForEvaluation(userEntity); + } } 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 bf1779fc..2fe77d1b 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 @@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; +import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.BeneficiaryWidgetResponseBean; import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; import net.gepafin.tendermanagement.model.util.Response; @@ -75,4 +76,19 @@ public interface DashboardApi { produces = { "application/json" }) @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") ResponseEntity> getAmendmentDetails(HttpServletRequest request); + + @Operation(summary = "Api to get Application details for Evaluation", + 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 = "/evaluation", + produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") + ResponseEntity> getApplicationDetailsForEvaluation(HttpServletRequest request); + } 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 c9bc0d85..7a4a489c 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 @@ -8,6 +8,7 @@ import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; +import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.BeneficiaryWidgetResponseBean; import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; import net.gepafin.tendermanagement.model.util.Response; @@ -71,4 +72,17 @@ public class DashboardApiController implements DashboardApi { return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); } + + @Override + public ResponseEntity> getApplicationDetailsForEvaluation(HttpServletRequest request) { + + /** This code is responsible for creating user action logs for the "Get Application Details for Evaluation" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_APPLICATION_DETAILS_FOR_EVALUATION).build()); + + AssignedApplicationWidgetResponseBean widgetResponseBean= dashboardService.getApplicationDetailsForEvaluation(request); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); + } + + } From 3e8b55c90ed51cf4f2a28ae98509d9fd2d2dcf85 Mon Sep 17 00:00:00 2001 From: nisha Date: Thu, 23 Jan 2025 16:06:37 +0530 Subject: [PATCH 09/29] updated code --- .../java/net/gepafin/tendermanagement/dao/DashboardDao.java | 4 ++-- .../model/response/AssignedApplicationWidgetResponseBean.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index 4dbca0cf..1d0bc307 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -373,13 +373,13 @@ public class DashboardDao { private void calculateEvaluationAvgTimeForAssignedApplication(AssignedApplicationWidgetResponseBean response, List applicationIds) { if (applicationIds == null || applicationIds.isEmpty()) { - response.setEvaluationAverageTime(BigDecimal.ZERO); + response.setAverageEvaluationDays(BigDecimal.ZERO); response.setNumberOfApplicationExpiringIn48Hours(0L); return; } BigDecimal averageTime = applicationEvaluationRepository.findAverageEvaluationTimeByApplicationIds(applicationIds); - response.setEvaluationAverageTime(averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); + response.setAverageEvaluationDays(averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); LocalDate today = LocalDate.now(); LocalDate twoDaysLater = today.plusDays(2); diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java index 163acdad..186ff323 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java @@ -11,5 +11,5 @@ public class AssignedApplicationWidgetResponseBean { private Long numberOfAcceptedApplication; private Long numberOfApplicationInEvaluationState; private Long numberOfApplicationExpiringIn48Hours; - private BigDecimal evaluationAverageTime; + private BigDecimal averageEvaluationDays; } From cd913734f40821883c512491fa7ac7cf2ffcf8d8 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Thu, 23 Jan 2025 16:19:04 +0530 Subject: [PATCH 10/29] Replaced field value from fields name to its actual labled value. --- .../gepafin/tendermanagement/dao/FormDao.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index b9b4da07..1c7ed019 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -465,17 +465,27 @@ public class FormDao { String value = (String) formFieldMap.get(fieldId); FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean.getValidators(), FieldValidatorBean.class); - validator - .isRequired(value,fieldValidatorBean.getIsRequired(),contentResponseBean.getLabel()); + String fieldValue = getFieldValue(contentResponseBean); + validator.isRequired(value, fieldValidatorBean.getIsRequired(), fieldValue); }); if (Boolean.TRUE.equals(isSendValidationError)) { validator.validate(); } - if (validator.hasErrors()) { - return false; - } - return true; + return !validator.hasErrors(); } + + private String getFieldValue(ContentResponseBean contentResponseBean) { + // Use Optional with pattern matching for type checks + return contentResponseBean.getSettings().stream().filter(setting -> "label".equals(setting.getName()) && setting.getValue() != null) + .map(setting -> { + if (setting.getValue() instanceof String value) { + return value.trim(); + } else { + return String.valueOf(setting.getValue()).trim(); + } + }).filter(value -> !value.isEmpty()).findFirst().orElse(contentResponseBean.getId()); + } + public String validateVatNumber(String value,String customRule,String fieldId){ String error=null; From 38c414e2540439aba7fe8c906cb2a6b0280c798b Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 23 Jan 2025 18:51:31 +0530 Subject: [PATCH 11/29] Updated code for create assigned application --- .../dao/AssignedApplicationsDao.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index cc281df7..f9a3476f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -8,7 +8,6 @@ import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.CompanyEntity; -import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; @@ -80,8 +79,13 @@ public class AssignedApplicationsDao { log.info("Assigning application to pre-Instructor with details: {}", applicationId, userId); AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null); - if (assignedApplications != null) { + if (assignedApplications != null && assignedApplications.getUserId().equals(userId)) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_ASSIGNED)); + } else if(assignedApplications != null) { + assignedApplications = reassignApplication(userId, assignedByUser, assignedApplications); + AssignedApplicationsResponse assignApplicationToInstructorResponse = convertEntityToResponse(assignedApplications); + log.info("Application re-assigned succesfully {}", assignApplicationToInstructorResponse); + return assignApplicationToInstructorResponse; } ApplicationEntity application = applicationService.validateApplication(applicationId); @@ -107,6 +111,30 @@ public class AssignedApplicationsDao { return assignApplicationToInstructorResponse; } + private AssignedApplicationsEntity reassignApplication(Long userId, UserEntity assignedByUser, + AssignedApplicationsEntity assignedApplication) { + + AssignedApplicationsEntity oldAssignedApplicationEntity = Utils.getClonedEntityForData(assignedApplication); + + setIfUpdated(assignedApplication::getAssignedBy, assignedApplication::setAssignedBy, assignedByUser.getId()); + setIfUpdated(assignedApplication::getUserId, assignedApplication::setUserId, userId); + assignedApplication.setAssignedAt(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + Optional entityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplication.getId()); + if(entityOptional.isPresent()) { + ApplicationEvaluationEntity oldApplicationEvaluationEntity = Utils.getClonedEntityForData(entityOptional.get()); + setIfUpdated(entityOptional.get()::getUserId, entityOptional.get()::setUserId, userId); + applicationEvaluationRepository.save(entityOptional.get()); + /** This code is responsible for adding a version history log for the "Create Application" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluationEntity).newData(entityOptional.get()).build()); + + }; + assignedApplication = assignedApplicationsRepository.save(assignedApplication); + /** This code is responsible for adding a version history log for the "Create Application" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldAssignedApplicationEntity).newData(assignedApplication).build()); + + return assignedApplication; + } + public AssignedApplicationsEntity createAssignmentEntity(ApplicationEntity application, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest) { AssignedApplicationsEntity assignApplication = new AssignedApplicationsEntity(); assignApplication.setApplication(application); From 64b952204094c457c550858a3f41fc9b9dbf4ce3 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 23 Jan 2025 19:59:17 +0530 Subject: [PATCH 12/29] Created endpoints for Evaluation form --- .../constants/GepafinConstant.java | 9 + .../dao/EvaluationFormDao.java | 171 ++++++++++++++++++ .../entities/EvaluationFormEntity.java | 29 +++ .../enums/UserActionContextEnum.java | 7 + .../model/request/EvaluationFormRequest.java | 14 ++ .../response/EvaluationFormResponseBean.java | 19 ++ .../EvalualtionFormRepository.java | 15 ++ .../service/EvaluationFormService.java | 28 +++ .../impl/EvaluationFormServiceImpl.java | 62 +++++++ .../web/rest/api/EvaluationFormApi.java | 101 +++++++++++ .../api/impl/EvaluationFormApiController.java | 88 +++++++++ .../db/changelog/db.changelog-1.0.0.xml | 22 ++- src/main/resources/message_en.properties | 9 + src/main/resources/message_it.properties | 10 +- 14 files changed, 582 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/EvaluationFormEntity.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/EvaluationFormRequest.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/EvaluationFormResponseBean.java create mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java create mode 100644 src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java create mode 100644 src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java create mode 100644 src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java create mode 100644 src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 325bf286..5e14c667 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -390,5 +390,14 @@ public class GepafinConstant { public static final String VALIDATION_IN_TABLE = "validation.table.message"; public static final String CALL_EXPIRED="call.expired"; public static final String AMOUNT_REQUEST_SHOULD_GREATED_THEN_ZERO = "amount.request.should.greated.then.zero"; + + + + public static final String EVALUATION_FORM_CREATED_SUCCESSFULLY = "evaluation.form.created.successfully"; + public static final String EVALUATION_FORM_UPDATED_SUCCESSFULLY = "evaluation.form.updated.successfully"; + public static final String EVALUATION_FORM_DELETED_SUCCESSFULLY = "evaluation.form.deleted.successfully"; + public static final String EVALUATION_FORM_FETCHED_SUCCESSFULLY = "evaluation.form.fetched.successfully"; + + public static final String EVALUATION_FORM_NOT_FOUND = "evaluation.form.not.found"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java new file mode 100644 index 00000000..f56c83bb --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java @@ -0,0 +1,171 @@ +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.*; + import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; + import net.gepafin.tendermanagement.model.request.*; + import net.gepafin.tendermanagement.model.response.ContentResponseBean; + import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; + import net.gepafin.tendermanagement.repositories.*; + import net.gepafin.tendermanagement.service.EvaluationCriteriaService; + import net.gepafin.tendermanagement.util.DateTimeUtil; + import net.gepafin.tendermanagement.util.LoggingUtil; + import net.gepafin.tendermanagement.util.Utils; + import net.gepafin.tendermanagement.util.Validator; + import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; + import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; + import net.gepafin.tendermanagement.web.rest.api.errors.Status; + import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.stereotype.Component; + + import java.time.LocalDateTime; + import java.util.Collections; + import java.util.List; + import java.util.Optional; + import java.util.Set; + import java.util.stream.Collectors; + +@Component +public class EvaluationFormDao { + + @Autowired + private EvalualtionFormRepository evaluationFormRepository; + + @Autowired + private CallDao callDao; + + @Autowired + private VatCheckDao vatCheckDao; + + @Autowired + private CallRepository callRepository; + + @Autowired + private Validator validator; + + @Autowired + private CriteriaFormFieldRepository criteriaFormFieldRepository; + + @Autowired + private EvaluationCriteriaService evaluationCriteriaService; + + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; + + public EvaluationFormEntity saveEvaluationFormEntity(EvaluationFormEntity evaluationFormEntity){ + evaluationFormEntity= evaluationFormRepository.save(evaluationFormEntity); + return evaluationFormEntity; + } + + public EvaluationFormEntity convertEvaluationFormRequestToEvaluationFormEntity(CallEntity callEntity, EvaluationFormRequest formRequest) { + + EvaluationFormEntity evaluationFormEntity = new EvaluationFormEntity(); + evaluationFormEntity.setCall(callEntity); + evaluationFormEntity.setLabel(formRequest.getLabel()); + evaluationFormEntity.setContent(setContentResponseBean(formRequest.getContent())); + evaluationFormEntity.setIsDeleted(false); + evaluationFormEntity = saveEvaluationFormEntity(evaluationFormEntity); + + /** This code is responsible for adding a version history log for the "Create form" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(evaluationFormEntity).build()); + + return evaluationFormEntity; + } + + public EvaluationFormResponseBean convertEvaluationFormEntityToEvaluationFormResponseBean(EvaluationFormEntity formEntity) { + EvaluationFormResponseBean evaluationFormResponseBean =new EvaluationFormResponseBean(); + evaluationFormResponseBean.setId(formEntity.getId()); + evaluationFormResponseBean.setContent(setContent(formEntity)); + evaluationFormResponseBean.setLabel(formEntity.getLabel()); + evaluationFormResponseBean.setCallId(formEntity.getCall().getId()); + evaluationFormResponseBean.setCallStatus(formEntity.getCall().getStatus()); + return evaluationFormResponseBean; + } + + private List setContent(EvaluationFormEntity formEntity) { + List contentList = Utils.convertJsonStringToList(formEntity.getContent(), + ContentResponseBean.class); + return contentList; + } + + public EvaluationFormResponseBean createEvaluationForm(CallEntity callEntity, EvaluationFormRequest formRequest) { + + validateEvaluationForm(formRequest); + EvaluationFormEntity formEntity = convertEvaluationFormRequestToEvaluationFormEntity(callEntity, formRequest); + return convertEvaluationFormEntityToEvaluationFormResponseBean(formEntity); + } + + public void validateEvaluationForm(EvaluationFormRequest formRequest){ + if(formRequest.getContent()==null || formRequest.getLabel()==null ){ + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM)); + } + } + public EvaluationFormResponseBean updateEvaluationForm(UserEntity user, Long formId, EvaluationFormRequest formRequest) { + EvaluationFormEntity evaluationFormEntity = validateForm(formId); + //cloned for old form data + EvaluationFormEntity oldFormData = Utils.getClonedEntityForData(evaluationFormEntity); + + Utils.setIfUpdated(evaluationFormEntity::getLabel, evaluationFormEntity::setLabel, formRequest.getLabel()); + Utils.setIfUpdated(evaluationFormEntity::getContent, evaluationFormEntity::setContent, setContentResponseBean(formRequest.getContent())); + evaluationFormEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + evaluationFormEntity = saveEvaluationFormEntity(evaluationFormEntity); + + /** This code is responsible for adding a version history log for the "Update form data" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldFormData).newData(evaluationFormEntity).build()); + return convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity); + + } + + public EvaluationFormEntity validateForm(Long formId) { + EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByIdAndIsDeletedFalse(formId); + if (evaluationFormEntity == null) { + throw new ResourceNotFoundException( + Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.EVALUATION_FORM_NOT_FOUND) + ); + } + return evaluationFormEntity; + } + + + public EvaluationFormResponseBean getEvaluationFormById(UserEntity user, Long formId) { + EvaluationFormEntity evaluationFormEntity = validateForm(formId); + validator.validateUserWithCall(user, evaluationFormEntity.getCall().getId()); + return convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity); + } + public void deleteEvaluationForm(UserEntity user, Long formId){ + EvaluationFormEntity evaluationFormEntity = validateForm(formId); + EvaluationFormEntity clonedData = Utils.getClonedEntityForData(evaluationFormEntity); + validator.validateUserWithCall(user, evaluationFormEntity.getCall().getId()); + evaluationFormEntity.setIsDeleted(Boolean.TRUE); + evaluationFormEntity = saveEvaluationFormEntity(evaluationFormEntity); + /** This code is responsible for adding a version history log for the "soft deleting evaluation from field" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(clonedData).newData(evaluationFormEntity).build()); + + + } + public List getEvaluationFormsByCallId(CallEntity callEntity){ + if(callEntity== null){ + throw new CustomValidationException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.CALL_NOT_FOUND)); + } + List formEntities= evaluationFormRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); + List formResponseBeanList = formEntities.stream() + .map(req -> convertEvaluationFormEntityToEvaluationFormResponseBean(req)) + .collect(Collectors.toList()); + return formResponseBeanList; + } + public String setContentResponseBean(List contentRequestBeans){ + String stringContentRequest = Utils.convertListToJsonString(contentRequestBeans); + List cloneContentRequestBeans = Utils.convertJsonStringToList(stringContentRequest, ContentRequestBean.class); + cloneContentRequestBeans.forEach(data->data.setCriteria(null)); + return Utils.convertListToJsonString(cloneContentRequestBeans); + } + + +} \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EvaluationFormEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EvaluationFormEntity.java new file mode 100644 index 00000000..9d3bd3fa --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/EvaluationFormEntity.java @@ -0,0 +1,29 @@ +package net.gepafin.tendermanagement.entities; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +@Entity +@Table(name = "EVALUATION_FORM") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class EvaluationFormEntity extends BaseEntity{ + + + @Column(name = "LABEL") + private String label; + + @ManyToOne + @JoinColumn(name = "CALL_ID") + private CallEntity call; + + @Column(name = "CONTENT") + private String content; + + @Column(name="IS_DELETED") + private Boolean isDeleted; +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 64fd530c..e42a0fb8 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -172,6 +172,13 @@ public enum UserActionContextEnum { GET_ALL_APPLICATION_BY_PAGINATION("GET_ALL_APPLICATION_BY_PAGINATION"), + /** Evaluation form action context **/ + GET_EVALUATION_FORM("GET_EVALUATION_FORM"), + CREATE_EVALUATION_FORM("CREATE_EVALUATION_FORM"), + UPDATE_EVALUATION_FORM("UPDATE_EVALUATION_FORM"), + DELETE_EVALUATION_FORM("DELETE_EVALUATION_FORM"), + + GET_USER_ACTION("GET_USER_ACTION"), GET_ACTION_CONTEXT_LABELS("GET_ACTION_CONTEXT_LABELS"); diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationFormRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationFormRequest.java new file mode 100644 index 00000000..bf8dad8f --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationFormRequest.java @@ -0,0 +1,14 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; + +import java.util.List; + +@Data +public class EvaluationFormRequest { + + private String label; + + private List content; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationFormResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationFormResponseBean.java new file mode 100644 index 00000000..78abb382 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationFormResponseBean.java @@ -0,0 +1,19 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +import java.util.List; + +@Data +public class EvaluationFormResponseBean { + + private Long id; + + private String callStatus; + + private String label; + + private Long callId; + + private List content; +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java new file mode 100644 index 00000000..032eb9ed --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.repositories; + +import net.gepafin.tendermanagement.entities.EvaluationFormEntity; +import net.gepafin.tendermanagement.entities.FormEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +@Repository +public interface EvalualtionFormRepository extends JpaRepository { + + List findByCallIdAndIsDeletedFalse(Long callId); + EvaluationFormEntity findByIdAndIsDeletedFalse(Long formId); + List findByIdInAndIsDeletedFalse(List evaluationFormId); +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java b/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java new file mode 100644 index 00000000..77e99267 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java @@ -0,0 +1,28 @@ +package net.gepafin.tendermanagement.service; + +import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.entities.ApplicationEntity; +import net.gepafin.tendermanagement.entities.EvaluationFormEntity; +import net.gepafin.tendermanagement.entities.FormEntity; +import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean; +import net.gepafin.tendermanagement.model.request.EvaluationFormRequest; +import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; +import net.gepafin.tendermanagement.model.response.FormResponseBean; + +import java.util.List; + +public interface EvaluationFormService { + + public EvaluationFormResponseBean createEvaluationForm(HttpServletRequest request, Long callId, EvaluationFormRequest formRequest); + + public EvaluationFormResponseBean updateEvaluationForm(HttpServletRequest request, Long evaluationFormId, EvaluationFormRequest formRequest); + + public EvaluationFormResponseBean getEvaluationFormById(HttpServletRequest request, Long evaluationFormId); + + public void deleteEvaluationForm(HttpServletRequest request, Long evaluationFormId); + + public EvaluationFormEntity validateEvaluationForm(Long id); + + public List getEvaluationFormsByCallId(HttpServletRequest request, Long callId); + +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java new file mode 100644 index 00000000..2c7260e1 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java @@ -0,0 +1,62 @@ +package net.gepafin.tendermanagement.service.impl; + +import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.dao.EvaluationFormDao; +import net.gepafin.tendermanagement.entities.*; +import net.gepafin.tendermanagement.model.request.EvaluationFormRequest; +import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; +import net.gepafin.tendermanagement.service.EvaluationFormService; +import net.gepafin.tendermanagement.util.Validator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class EvaluationFormServiceImpl implements EvaluationFormService { + + @Autowired + private EvaluationFormDao evalauationFormDao; + + @Autowired + private Validator validator; + + @Override + public EvaluationFormResponseBean createEvaluationForm(HttpServletRequest request, Long callId, EvaluationFormRequest evaluationFormRequest) { + UserEntity user = validator.validateUser(request); + CallEntity call = validator.validateUserWithCall(user, callId); + return evalauationFormDao.createEvaluationForm(call,evaluationFormRequest); + } + + @Override + public EvaluationFormResponseBean updateEvaluationForm(HttpServletRequest request, Long evaluationFormId, EvaluationFormRequest evaluationFormRequest) { + UserEntity user = validator.validateUser(request); + return evalauationFormDao.updateEvaluationForm(user, evaluationFormId,evaluationFormRequest); + } + + @Override + public EvaluationFormResponseBean getEvaluationFormById(HttpServletRequest request, Long evaluationFormId) { + UserEntity user = validator.validateUser(request); + return evalauationFormDao.getEvaluationFormById(user, evaluationFormId); + } + + @Override + public void deleteEvaluationForm(HttpServletRequest request, Long evaluationFormId) { + UserEntity user = validator.validateUser(request); + evalauationFormDao.deleteEvaluationForm(user, evaluationFormId); + } + + @Override + public EvaluationFormEntity validateEvaluationForm(Long id) { + return evalauationFormDao.validateForm(id); + } + + @Override + public List getEvaluationFormsByCallId(HttpServletRequest request, Long callId) { + UserEntity user = validator.validateUser(request); + CallEntity call = validator.validateUserWithCall(user, callId); + return evalauationFormDao.getEvaluationFormsByCallId(call); + } + + +} diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java new file mode 100644 index 00000000..727ea6e8 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java @@ -0,0 +1,101 @@ +package net.gepafin.tendermanagement.web.rest.api; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import net.gepafin.tendermanagement.model.request.EvaluationFormRequest; +import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; +import net.gepafin.tendermanagement.model.response.FormResponseBean; +import net.gepafin.tendermanagement.model.util.Response; +import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +public interface EvaluationFormApi { + + @Operation(summary = "Api to create Evaluation form", + 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) })) + }) + @PostMapping(value = "/call/{callId}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") + public ResponseEntity> createEvaluationForm(HttpServletRequest request, @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId, + @Parameter(description = "evaluationForm request object", required = true) + @Valid @RequestBody EvaluationFormRequest evaluationFormRequest); + + + @Operation(summary = "Api to update Evaluation form", + 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) })) }) + @PutMapping(value = "/{evaluationFormId}", + produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") + ResponseEntity> updateEvaluationForm(HttpServletRequest request, + @Parameter(description = "The Evaluation form ID", required = true) @PathVariable("evaluationFormId") Long evaluationFormId, + @Parameter(description = "Evaluation form request object", required = true) @Valid @RequestBody EvaluationFormRequest evaluationFormRequest); + + @Operation(summary = "Api to get Evaluation form by id", + 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 = "/{evaluationFormId}", + produces = { "application/json" }) + ResponseEntity> getEvaluationFormById(HttpServletRequest request, + @Parameter(description = "The Evaluation form ID", required = true) @PathVariable("evaluationFormId") Long evaluationFormId); + + + @Operation(summary = "Api to delete Evaluation form", + 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) })) }) + @DeleteMapping(value = "/{evaluationFormId}") + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") + ResponseEntity> deleteEvaluationForm(HttpServletRequest request, + @Parameter(description = "The Evaluation form ID", required = true) @PathVariable("evaluationFormId") Long evaluationFormId); + + @Operation(summary = "Api to get Evaluation forms by callId", + 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 = "/call/{callId}", + produces = { "application/json" }) + ResponseEntity>> getEvaluationFormsByCallId(HttpServletRequest request, + @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId); + +} diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java new file mode 100644 index 00000000..f8058247 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java @@ -0,0 +1,88 @@ +package net.gepafin.tendermanagement.web.rest.api.impl; + +import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.config.Translator; +import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; +import net.gepafin.tendermanagement.model.request.EvaluationFormRequest; +import net.gepafin.tendermanagement.model.request.UserActionRequest; +import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; +import net.gepafin.tendermanagement.model.util.Response; +import net.gepafin.tendermanagement.service.EvaluationFormService; +import net.gepafin.tendermanagement.util.LoggingUtil; +import net.gepafin.tendermanagement.web.rest.api.EvaluationFormApi; +import net.gepafin.tendermanagement.web.rest.api.errors.Status; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +@RestController +@RequestMapping("${openapi.gepafin.base-path:/v1/evaluationForm}") +public class EvaluationFormApiController implements EvaluationFormApi { + + @Autowired + private EvaluationFormService evaluationFormService; + + @Autowired + private LoggingUtil loggingUtil; + + @Override + public ResponseEntity> createEvaluationForm(HttpServletRequest request, Long callId, EvaluationFormRequest evaluationFormRequest) { + + /** This code is responsible for creating user action logs for the "Create Evaluation form" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.CREATE_EVALUATION_FORM).build()); + + EvaluationFormResponseBean evaluationFormResponseBean = evaluationFormService.createEvaluationForm(request,callId, evaluationFormRequest); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(evaluationFormResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FORM_CREATED_SUCCESSFULLY))); + } + + @Override + public ResponseEntity> updateEvaluationForm(HttpServletRequest request, Long evaluationFormId, EvaluationFormRequest evaluationFormRequest) { + + /** This code is responsible for creating user action logs for the "Update Evaluation form" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_EVALUATION_FORM).build()); + + EvaluationFormResponseBean evaluationFormResponseBean = evaluationFormService.updateEvaluationForm(request, evaluationFormId, evaluationFormRequest); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(evaluationFormResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FORM_UPDATED_SUCCESSFULLY))); + } + + @Override + public ResponseEntity> getEvaluationFormById(HttpServletRequest request, Long evaluationFormId) { + + /** This code is responsible for creating user action logs for the "Get Evaluation form by id" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_EVALUATION_FORM).build()); + + EvaluationFormResponseBean evaluationFormResponseBean= evaluationFormService.getEvaluationFormById(request,evaluationFormId); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(evaluationFormResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FORM_FETCHED_SUCCESSFULLY))); + } + + @Override + public ResponseEntity> deleteEvaluationForm(HttpServletRequest request, Long evaluationFormId) { + + /** This code is responsible for creating user action logs for the "delete Evaluation form" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_EVALUATION_FORM).build()); + + evaluationFormService.deleteEvaluationForm(request,evaluationFormId); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FORM_DELETED_SUCCESSFULLY))); + } + + @Override + public ResponseEntity>> getEvaluationFormsByCallId(HttpServletRequest request, Long callId) { + + /** This code is responsible for creating user action logs for the "Get Evaluation forms by call id" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_EVALUATION_FORM).build()); + + List evaluationFormResponseBean= evaluationFormService.getEvaluationFormsByCallId(request,callId); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(evaluationFormResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FORM_FETCHED_SUCCESSFULLY))); + } + +} diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 59d3147a..4e282d43 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 @@ -2253,5 +2253,25 @@ unique_uuid = 'p4lk3bcx1RStqTaIVVbXs' - + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 5fcbc7f7..6c824cbc 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -353,3 +353,12 @@ action.context.labels.fetched.successfully = Action Context Labels Fetched Succe amount.accepted.required=Amount accepted is required while approving the application. call.expired=Call has been expired. amount.request.should.greated.then.zero=Requested amount should not be empty and should be greater than zero. + + + +evaluation.form.created.successfully=Evaluation form created successfully. +evaluation.form.updated.successfully=Evaluation form updated successfully. +evaluation.form.deleted.successfully=Evaluation form deleted successfully. +evaluation.form.fetched.successfully=Evaluation form fetched successfully. +evaluation.form.not.found=Evaluation form not found. + diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index fd355f2f..cca4b808 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -343,4 +343,12 @@ action.context.labels.fetched.successfully = Etichette del contesto dell'azione amount.accepted.required=L'importo accettato � obbligatorio durante l'approvazione della domanda. call.expired=La chiamata � scaduta. amount.request.should.greated.then.zero=L'importo richiesto non deve essere vuoto e deve essere maggiore di zero. -call.expired=La chiamata � scaduta. + + + +evaluation.form.created.successfully=Modulo di valutazione creato con successo. +evaluation.form.updated.successfully=Modulo di valutazione aggiornato con successo. +evaluation.form.deleted.successfully=Modulo di valutazione eliminato con successo. +evaluation.form.fetched.successfully=Modulo di valutazione recuperato con successo. +evaluation.form.not.found=Modulo di valutazione non trovato. + From 28346cbfb2229eb2824cc20bacc6cf08fc5a8ae0 Mon Sep 17 00:00:00 2001 From: harish Date: Fri, 24 Jan 2025 18:14:05 +0530 Subject: [PATCH 13/29] Updated code for assigned application dashboard API --- .../gepafin/tendermanagement/dao/DashboardDao.java | 4 ++-- .../AssignedApplicationWidgetResponseBean.java | 4 ++-- .../AssignedApplicationsRepository.java | 14 ++++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index 1d0bc307..d88319e1 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -397,8 +397,8 @@ public class DashboardDao { response.setNumberOfAssignedApplication(data[0] instanceof Number ? ((Number) data[0]).longValue() : 0L); response.setNumberOfApplicationInAmendmentState(data[1] instanceof Number ? ((Number) data[1]).longValue() : 0L); - response.setNumberOfApplicationInEvaluationState(data[2] instanceof Number ? ((Number) data[2]).longValue() : 0L); - response.setNumberOfAcceptedApplication(data[3] instanceof Number ? ((Number) data[3]).longValue() : 0L); + response.setNumberOfApplicationInOpenState(data[2] instanceof Number ? ((Number) data[2]).longValue() : 0L); + response.setNumberOfApplicationInCloseState(data[3] instanceof Number ? ((Number) data[3]).longValue() : 0L); return response; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java index 186ff323..c6e2ac0f 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationWidgetResponseBean.java @@ -8,8 +8,8 @@ import java.math.BigDecimal; public class AssignedApplicationWidgetResponseBean { private Long numberOfAssignedApplication; private Long numberOfApplicationInAmendmentState; - private Long numberOfAcceptedApplication; - private Long numberOfApplicationInEvaluationState; + private Long numberOfApplicationInCloseState; + private Long numberOfApplicationInOpenState; private Long numberOfApplicationExpiringIn48Hours; private BigDecimal averageEvaluationDays; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java index 16fa4928..f48833aa 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java @@ -29,13 +29,14 @@ public interface AssignedApplicationsRepository extends JpaRepository Date: Fri, 24 Jan 2025 19:33:47 +0530 Subject: [PATCH 14/29] Updated code for evaluation-v2(call) --- .../constants/GepafinConstant.java | 2 + .../tendermanagement/dao/ApplicationDao.java | 2 + .../gepafin/tendermanagement/dao/CallDao.java | 21 +++++++++- .../dao/EvaluationFormDao.java | 17 ++++---- .../entities/ApplicationEntity.java | 3 ++ .../tendermanagement/entities/CallEntity.java | 3 ++ .../enums/EvaluationVersionEnum.java | 40 +++++++++++++++++++ .../enums/UserActionContextEnum.java | 5 +++ .../model/request/CreateCallRequestStep1.java | 2 + .../CreateCallRequestStep2EvaluationV2.java | 14 +++++++ .../model/request/UpdateCallRequestStep1.java | 3 ++ .../model/response/ApplicationResponse.java | 3 ++ .../response/CallDetailsResponseBean.java | 3 ++ .../model/response/CallResponse.java | 3 ++ .../EvalualtionFormRepository.java | 2 +- .../tendermanagement/service/CallService.java | 10 ++--- .../service/EvaluationFormService.java | 2 +- .../service/impl/CallServiceImpl.java | 14 ++++--- .../impl/CallValidatorServiceImpl.java | 22 ++++++---- .../impl/EvaluationFormServiceImpl.java | 4 +- .../web/rest/api/CallApi.java | 21 ++++++++-- .../web/rest/api/EvaluationFormApi.java | 2 +- .../web/rest/api/impl/CallApiController.java | 12 ++++++ .../api/impl/EvaluationFormApiController.java | 4 +- .../db/changelog/db.changelog-1.0.0.xml | 19 +++++++++ .../updated_form_field_data_24-01-2025.sql | 17 ++++++++ 26 files changed, 214 insertions(+), 36 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/EvaluationVersionEnum.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2EvaluationV2.java create mode 100644 src/main/resources/db/dump/updated_form_field_data_24-01-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 5e14c667..6b5a9c3e 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -399,5 +399,7 @@ public class GepafinConstant { public static final String EVALUATION_FORM_FETCHED_SUCCESSFULLY = "evaluation.form.fetched.successfully"; public static final String EVALUATION_FORM_NOT_FOUND = "evaluation.form.not.found"; + + public static final String EVALUATION_V2_STEP_2 = "EVALUATION_V2_STEP_2"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 6284abc5..174313ca 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -234,6 +234,7 @@ public class ApplicationDao { entity.setUserWithCompany(userWithCompany); entity.setIsDeleted(false); entity.setStatus(ApplicationStatusTypeEnum.DRAFT.getValue()); + entity.setEvaluationVersion(call.getEvaluationVersion()); return entity; } @@ -413,6 +414,7 @@ public class ApplicationDao { responseBean.setCallId(applicationEntity.getCall().getId()); responseBean.setSubmissionDate(applicationEntity.getSubmissionDate()); responseBean.setStatus(applicationEntity.getStatus()); + responseBean.setEvaluationVersion(EvaluationVersionEnum.valueOf(applicationEntity.getCall().getEvaluationVersion())); responseBean.setComments(applicationEntity.getComments()); responseBean.setCompanyId(applicationEntity.getCompanyId()); Optional assignedApplicationsOptional = diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 0f7a9f5a..ce9fefd9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -116,6 +116,9 @@ public class CallDao { @Autowired private NotificationTypeRepository notificationTypeRepository; + @Autowired + private EvaluationFormDao evalualtionFormDao; + public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) { createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); CallEntity callEntity = convertToCallEntity(createCallRequest, userEntity); @@ -178,6 +181,7 @@ public class CallDao { } } callEntity.setStatus(CallStatusEnum.DRAFT.getValue()); + callEntity.setEvaluationVersion(createCallRequest.getEvaluationVersion().getValue()); callEntity.setAmountMax(createCallRequest.getAmountMax()); callEntity.setAmount(createCallRequest.getAmount()); callEntity.setConfidi(false); @@ -362,6 +366,7 @@ public class CallDao { createCallResponseBean.setDescriptionShort(callEntity.getDescriptionShort()); createCallResponseBean.setDescriptionLong(callEntity.getDescriptionLong()); createCallResponseBean.setStatus(CallStatusEnum.valueOf(callEntity.getStatus())); + createCallResponseBean.setEvaluationVersion(EvaluationVersionEnum.valueOf(callEntity.getEvaluationVersion())); createCallResponseBean.setRegionId(callEntity.getRegion().getId()); createCallResponseBean.setAmount(callEntity.getAmount()); createCallResponseBean.setAmountMax(callEntity.getAmountMax()); @@ -601,6 +606,7 @@ public class CallDao { setIfUpdated(callEntity::getStartTime, callEntity::setStartTime, DateTimeUtil.parseTime(updateCallRequest.getStartTime())); setIfUpdated(callEntity::getEndTime, callEntity::setEndTime, DateTimeUtil.parseTime(updateCallRequest.getEndTime())); setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi()); + setIfUpdated(callEntity::getEvaluationVersion, callEntity::setEvaluationVersion, updateCallRequest.getEvaluationVersion().getValue()); callEntity = callRepository.save(callEntity); /** This code is responsible for adding a version history log for the "update call step 1" operation **/ @@ -691,6 +697,7 @@ public class CallDao { callDetailsResponseBean.setDescriptionShort(callEntity.getDescriptionShort()); callDetailsResponseBean.setDescriptionLong(callEntity.getDescriptionLong()); callDetailsResponseBean.setStatus(CallStatusEnum.valueOf(callEntity.getStatus())); + callDetailsResponseBean.setEvaluationVersion(EvaluationVersionEnum.valueOf(callEntity.getEvaluationVersion())); callDetailsResponseBean.setRegionId(callEntity.getRegion().getId()); callDetailsResponseBean.setAmount(callEntity.getAmount()); callDetailsResponseBean.setAmountMax(callEntity.getAmountMax()); @@ -811,7 +818,8 @@ public class CallDao { CallResponse callResponseBean = getCallResponseBean(callEntity); FlowResponseBean flowResponseBean = flowDao.getFlowByCallId(callEntity.getId()); List formResponseBean = formDao.getFormsByCallId(callEntity); - CallValidatorServiceImpl.validateResponse(callResponseBean,flowResponseBean,formResponseBean); + EvaluationFormResponseBean evaluationFormResponseBean = evalualtionFormDao.getEvaluationFormByCallId(callEntity); + CallValidatorServiceImpl.validateResponse(callResponseBean,flowResponseBean,formResponseBean,evaluationFormResponseBean); callEntity.setStatus(CallStatusEnum.READY_TO_PUBLISH.getValue()); callEntity = callRepository.save(callEntity); @@ -1063,4 +1071,15 @@ public class CallDao { return predicates; } + + public CallResponse createCallStep2EvaluationV2(CallEntity callEntity, CreateCallRequestStep2EvaluationV2 createCallRequest, UserEntity user) { + + convertToDocumentEntities(createCallRequest.getDocs(), callEntity.getId(), DocumentTypeEnum.DOCUMENT); + + convertToDocumentEntities(createCallRequest.getImages(), callEntity.getId(), DocumentTypeEnum.IMAGES); + + CallResponse createCallResponseBean = getCallResponseBean(callEntity); + createCallResponseBean.setCurrentStep(GepafinConstant.EVALUATION_V2_STEP_2); + return createCallResponseBean; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java index f56c83bb..594aa24d 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java @@ -149,17 +149,20 @@ public class EvaluationFormDao { } - public List getEvaluationFormsByCallId(CallEntity callEntity){ - if(callEntity== null){ + public EvaluationFormResponseBean getEvaluationFormByCallId(CallEntity callEntity) { + if (callEntity == null) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND)); } - List formEntities= evaluationFormRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); - List formResponseBeanList = formEntities.stream() - .map(req -> convertEvaluationFormEntityToEvaluationFormResponseBean(req)) - .collect(Collectors.toList()); - return formResponseBeanList; + + EvaluationFormEntity formEntity = evaluationFormRepository + .findByCallIdAndIsDeletedFalse(callEntity.getId()); + if(formEntity!=null) + return convertEvaluationFormEntityToEvaluationFormResponseBean(formEntity); + else return null; } + + public String setContentResponseBean(List contentRequestBeans){ String stringContentRequest = Utils.convertListToJsonString(contentRequestBeans); List cloneContentRequestBeans = Utils.convertJsonStringToList(stringContentRequest, ContentRequestBean.class); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java index c6880af4..a482f453 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java @@ -68,4 +68,7 @@ public class ApplicationEntity extends BaseEntity { @Column(name="DATE_REJECTED") private LocalDateTime dateRejected; + @Column(name = "evaluationVersion") + private String evaluationVersion; + } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java index 1c6181b2..990d27a1 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java @@ -88,5 +88,8 @@ public class CallEntity extends BaseEntity { @ManyToOne @JoinColumn(name = "HUB_ID") private HubEntity hub; + + @Column(name = "evaluationVersion") + private String evaluationVersion; } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EvaluationVersionEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EvaluationVersionEnum.java new file mode 100644 index 00000000..ff8c35fc --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/EvaluationVersionEnum.java @@ -0,0 +1,40 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum EvaluationVersionEnum { + V1("V1"), + V2("V2"); + private String value; + + EvaluationVersionEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static EvaluationVersionEnum fromValue(String value) { + for (EvaluationVersionEnum b : EvaluationVersionEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + public static List getStatusValues() { + return Arrays.stream(EvaluationVersionEnum.values()) + .map(EvaluationVersionEnum::getValue) + .collect(Collectors.toList()); + } +} + + diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index e42a0fb8..76bed042 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -13,6 +13,11 @@ public enum UserActionContextEnum { GET_CALL("GET_CALL"), DOWNLOAD_CALL_DOCUMENT("DOWNLOAD_CALL_DOCUMENT"), + + /** Evaluation V2 call action context **/ + EVALUATION_V2_CREATE_UPDATE_CALL_STEP_2("EVALUATION_V2_CREATE_UPDATE_CALL_STEP_2"), + + /** user action context **/ CREATE_USER("CREATE_USER"), USER_LOGIN("USER_LOGIN"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java index 6ca30e37..75c2a3d0 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.util.List; import lombok.Data; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; @Data public class CreateCallRequestStep1 { @@ -41,4 +42,5 @@ public class CreateCallRequestStep1 { private List faq; + private EvaluationVersionEnum evaluationVersion; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2EvaluationV2.java b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2EvaluationV2.java new file mode 100644 index 00000000..68430bff --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2EvaluationV2.java @@ -0,0 +1,14 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; + +import java.util.List; + +@Data +public class CreateCallRequestStep2EvaluationV2 { + + private List docs; + + private List images; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/UpdateCallRequestStep1.java b/src/main/java/net/gepafin/tendermanagement/model/request/UpdateCallRequestStep1.java index e57f8715..d63e5754 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/UpdateCallRequestStep1.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/UpdateCallRequestStep1.java @@ -6,6 +6,7 @@ import java.time.LocalTime; import java.util.List; import lombok.Data; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; @Data public class UpdateCallRequestStep1 { @@ -40,4 +41,6 @@ public class UpdateCallRequestStep1 { private List faq; + private EvaluationVersionEnum evaluationVersion; + } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java index 2c659838..559edcc7 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.model.response.ApplicationFormFieldResponseBean; import java.math.BigDecimal; @@ -49,4 +50,6 @@ public class ApplicationResponse{ private LocalDateTime dateRejected; + private EvaluationVersionEnum evaluationVersion; + } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java index 4028b789..ebe82d1e 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; import net.gepafin.tendermanagement.enums.CallStatusEnum; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -55,4 +56,6 @@ public class CallDetailsResponseBean { private LocalDateTime updatedDate; private Long preferredCallId; + + private EvaluationVersionEnum evaluationVersion; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java index 43655e9c..01c36068 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java @@ -8,6 +8,7 @@ import java.util.List; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; import net.gepafin.tendermanagement.enums.CallStatusEnum; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.util.DynamicLocalTimeSerializer; @Data @@ -74,6 +75,8 @@ public class CallResponse { private String currentStep; private Long preferredCallId; + + private EvaluationVersionEnum evaluationVersion; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java index 032eb9ed..fb658f54 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EvalualtionFormRepository.java @@ -9,7 +9,7 @@ import java.util.List; @Repository public interface EvalualtionFormRepository extends JpaRepository { - List findByCallIdAndIsDeletedFalse(Long callId); + EvaluationFormEntity findByCallIdAndIsDeletedFalse(Long callId); EvaluationFormEntity findByIdAndIsDeletedFalse(Long formId); List findByIdInAndIsDeletedFalse(List evaluationFormId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/CallService.java b/src/main/java/net/gepafin/tendermanagement/service/CallService.java index b12a3398..0e1838b5 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CallService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CallService.java @@ -5,17 +5,15 @@ import java.util.List; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.enums.CallStatusEnum; -import net.gepafin.tendermanagement.model.request.CallPageableRequestBean; -import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; -import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; -import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; import net.gepafin.tendermanagement.model.response.CallResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; public interface CallService { - CallResponse createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest); + CallResponse createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest ); CallResponse createCallStep2(HttpServletRequest request, Long callId, CreateCallRequestStep2 createCallRequest); @@ -36,5 +34,7 @@ public interface CallService { byte[] downloadCallDocumentsAsZip(HttpServletRequest request, Long callId); PageableResponseBean> getAllCallsByPagination(HttpServletRequest request, Long companyId , Boolean onlyPreferredCall,CallPageableRequestBean callPageableRequestBean); + + CallResponse createCallStep2EvaluationV2(HttpServletRequest request, Long callId, CreateCallRequestStep2EvaluationV2 createCallRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java b/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java index 77e99267..d359e0aa 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/EvaluationFormService.java @@ -23,6 +23,6 @@ public interface EvaluationFormService { public EvaluationFormEntity validateEvaluationForm(Long id); - public List getEvaluationFormsByCallId(HttpServletRequest request, Long callId); + public EvaluationFormResponseBean getEvaluationFormByCallId(HttpServletRequest request, Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java index 07823f1c..a621662c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -5,10 +5,8 @@ import net.gepafin.tendermanagement.dao.CallDao; import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.CallStatusEnum; -import net.gepafin.tendermanagement.model.request.CallPageableRequestBean; -import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; -import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; -import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; import net.gepafin.tendermanagement.model.response.CallResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; @@ -110,5 +108,11 @@ public class CallServiceImpl implements CallService { UserEntity user = validator.validateUser(request); return callDao.getAllCallsByPagination(request,user,companyId,onlyPreferredCall,callPageableRequestBean); } - + @Override + @Transactional(rollbackFor = Exception.class) + public CallResponse createCallStep2EvaluationV2(HttpServletRequest request, Long callId, CreateCallRequestStep2EvaluationV2 createCallRequest) { + UserEntity user = validator.validateUser(request); + CallEntity call = validator.validateUserWithCall(user, callId); + return callDao.createCallStep2EvaluationV2(call, createCallRequest, user); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java index 3c7091cf..6c3024c6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java @@ -6,7 +6,9 @@ import java.util.List; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.model.response.CallResponse; +import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; import net.gepafin.tendermanagement.model.response.FlowResponseBean; import net.gepafin.tendermanagement.model.response.FormResponseBean; import net.gepafin.tendermanagement.util.FieldValidator; @@ -15,7 +17,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationExceptio import net.gepafin.tendermanagement.web.rest.api.errors.Status; public class CallValidatorServiceImpl { - public static void validateResponse(CallResponse response, FlowResponseBean flowResponse, List formResponses) { + public static void validateResponse(CallResponse response, FlowResponseBean flowResponse, List formResponses, EvaluationFormResponseBean evaluationFormResponseBean) { // Validate CallResponse (existing logic) FieldValidator data = FieldValidator.create() .notNull(response.getId(), "id") @@ -28,29 +30,35 @@ public class CallValidatorServiceImpl { .notNull(response.getRegionId(), "regionId") .notNull(response.getAmount(), "amount") .notNull(response.getAmountMax(), "amountMax") - .notNull(response.getThreshold(), "threshold") .notNull(response.getEmail(),"email") .notNull(response.getAmountMin(),"amountMin") .notNull(response.getStartTime(),"startTime") .notNull(response.getEndTime(),"endTime") .notNull(response.getDocumentationRequested(), "documentationRequested") .notEmpty(response.getAimedTo(), "aimedTo") - .notEmpty(response.getCriteria(), "criteria") - .notEmpty(response.getDocs(), "docs") - .notEmpty(response.getCheckList(), "checkList"); + .notEmpty(response.getDocs(), "docs"); + if (response.getEvaluationVersion() == EvaluationVersionEnum.V1) { + data = data.notEmpty(response.getCheckList(), "checkList") + .notEmpty(response.getCriteria(), "criteria") + .notNull(response.getThreshold(), "threshold"); + } + if (response.getEvaluationVersion() == EvaluationVersionEnum.V2 && evaluationFormResponseBean == null) { + data.addError(Translator.toLocale(GepafinConstant.EVALUATION_FORM_NOT_FOUND)); + } if (response.getDates().get(0) == null || response.getDates().get(1) == null || response.getDates().get(0).toLocalDate().isBefore(LocalDate.now()) || response.getDates().get(1).toLocalDate().isBefore(LocalDate.now()) || response.getDates().get(0).toLocalDate().isAfter(response.getDates().get(1).toLocalDate())) { data = data.addError(Translator.toLocale(GepafinConstant.INVALID_DATE_MSG)); } - if (flowResponse == null || ((flowResponse.getFlowData() == null || flowResponse.getFlowData().isEmpty()) + + if (response.getEvaluationVersion() == EvaluationVersionEnum.V1 &&(flowResponse == null || ((flowResponse.getFlowData() == null || flowResponse.getFlowData().isEmpty())) && (flowResponse.getFlowEdges() == null || flowResponse.getFlowEdges().isEmpty()))) { data.addError(Translator.toLocale(GepafinConstant.FLOW_NOT_FOUND)); } - if (formResponses == null || formResponses.isEmpty()) { + if (response.getEvaluationVersion() == EvaluationVersionEnum.V1 &&(formResponses == null || formResponses.isEmpty()) ){ data.addError(Translator.toLocale(GepafinConstant.FORM_NOT_FOUND)); } data.validate(); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java index 2c7260e1..568bad0c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/EvaluationFormServiceImpl.java @@ -52,10 +52,10 @@ public class EvaluationFormServiceImpl implements EvaluationFormService { } @Override - public List getEvaluationFormsByCallId(HttpServletRequest request, Long callId) { + public EvaluationFormResponseBean getEvaluationFormByCallId(HttpServletRequest request, Long callId) { UserEntity user = validator.validateUser(request); CallEntity call = validator.validateUserWithCall(user, callId); - return evalauationFormDao.getEvaluationFormsByCallId(call); + return evalauationFormDao.getEvaluationFormByCallId(call); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java index e14ed8e7..37af42d4 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java @@ -3,7 +3,8 @@ package net.gepafin.tendermanagement.web.rest.api; import java.util.List; import net.gepafin.tendermanagement.enums.CallStatusEnum; -import net.gepafin.tendermanagement.model.request.CallPageableRequestBean; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; import org.springframework.http.MediaType; @@ -19,9 +20,6 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; -import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; -import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; -import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; import net.gepafin.tendermanagement.model.response.CallResponse; import net.gepafin.tendermanagement.model.util.Response; @@ -164,5 +162,20 @@ public interface CallApi { ResponseEntity>>> getAllCallsByPagination(HttpServletRequest request,@RequestParam(value = "companyId", required = false) Long companyId , @RequestParam(value = "onlyPreferredCall", required = false, defaultValue = "false") Boolean onlyPreferredCall, @RequestBody CallPageableRequestBean callPageableRequestBean); + @Operation(summary = "Api to update call step 2 (Evaluation V2)", + 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) })) + }) + @PutMapping(value = "/step2-v2/{callId}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") + public ResponseEntity> createCallStep2EvaluationV2(HttpServletRequest request, + @Parameter(description = "The call id", required = true) @PathVariable("callId") Long callId, + @Parameter(description = "Call request object", required = true) @Valid @RequestBody CreateCallRequestStep2EvaluationV2 createCallRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java index 727ea6e8..c74fa829 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java @@ -95,7 +95,7 @@ public interface EvaluationFormApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "/call/{callId}", produces = { "application/json" }) - ResponseEntity>> getEvaluationFormsByCallId(HttpServletRequest request, + ResponseEntity> getEvaluationFormByCallId(HttpServletRequest request, @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java index 85de9a1c..4ea1c575 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.web.rest.api.impl; import java.util.List; import net.gepafin.tendermanagement.enums.CallStatusEnum; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.*; @@ -160,6 +161,17 @@ public class CallApiController implements CallApi { return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(callsByPagination, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG))); } + @Override + @Transactional(rollbackFor=Exception.class) + public ResponseEntity> createCallStep2EvaluationV2(HttpServletRequest request, Long callId, CreateCallRequestStep2EvaluationV2 createCallRequest) { + /** This code is responsible for creating user action logs for the "Create or update Call step 2 for Evaluation V2" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE) + .actionContext(UserActionContextEnum.EVALUATION_V2_CREATE_UPDATE_CALL_STEP_2).build()); + + CallResponse createCallStep2EvaluationV2 = callService.createCallStep2EvaluationV2(request, callId, createCallRequest); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(createCallStep2EvaluationV2, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_CREATED_SUCCESSFULLY_MSG))); + } } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java index f8058247..1353ccd9 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationFormApiController.java @@ -75,12 +75,12 @@ public class EvaluationFormApiController implements EvaluationFormApi { } @Override - public ResponseEntity>> getEvaluationFormsByCallId(HttpServletRequest request, Long callId) { + public ResponseEntity> getEvaluationFormByCallId(HttpServletRequest request, Long callId) { /** This code is responsible for creating user action logs for the "Get Evaluation forms by call id" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_EVALUATION_FORM).build()); - List evaluationFormResponseBean= evaluationFormService.getEvaluationFormsByCallId(request,callId); + EvaluationFormResponseBean evaluationFormResponseBean= evaluationFormService.getEvaluationFormByCallId(request,callId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(evaluationFormResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_FORM_FETCHED_SUCCESSFULLY))); } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 4e282d43..e4bfdfe5 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 @@ -2274,4 +2274,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/dump/updated_form_field_data_24-01-2025.sql b/src/main/resources/db/dump/updated_form_field_data_24-01-2025.sql new file mode 100644 index 00000000..0ffa1926 --- /dev/null +++ b/src/main/resources/db/dump/updated_form_field_data_24-01-2025.sql @@ -0,0 +1,17 @@ +UPDATE FORM_FIELD +SET SETTINGS = '[{"name": "label", "value": "Numero"}, {"name": "placeholder", "value": 0}, {"name": "step", "value": 0}, {"name": "isRequestedAmount", "value": false}, {"name": "variable", "value": []}, {"name": "formula", "value": ""}]' +WHERE ID = 4; + +INSERT INTO FORM_FIELD (ID, SORT_ORDER, NAME, LABEL, DESCRIPTION, SETTINGS, VALIDATORS, CREATED_DATE, UPDATED_DATE) +VALUES +( + 21, + 21, + 'criteria_table', + 'Tabella di criteri', + 'Tabella di criteri', + '[{"name": "label", "value": "Tabella"}, {"name": "criteria_table_columns", "value": {}}, {"name": "variable", "value": []}]', + '{"custom": "nonEmptyTables"}', + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); \ No newline at end of file From 9f6adf7b924512c6ec5f03e5ff23e7327e5f0b57 Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 27 Jan 2025 12:00:32 +0530 Subject: [PATCH 15/29] Added applicationEvalutionId in application table --- .../dao/ApplicationEvaluationDao.java | 32 +++++++++++++------ .../entities/ApplicationEntity.java | 3 ++ .../db/changelog/db.changelog-1.0.0.xml | 13 ++++++++ 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 48573e4f..74a14114 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -634,16 +634,33 @@ public class ApplicationEvaluationDao { application.setAmountAccepted(req.getAmountAccepted()); } actionType = VersionActionTypeEnum.UPDATE; + + entity = applicationEvaluationRepository.save(entity); + } else { AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId); entity = convertToEntity(user, req, assignedApplicationId); actionType = VersionActionTypeEnum.INSERT; + + entity = applicationEvaluationRepository.save(entity); + + ApplicationEntity oldApplication = Utils.getClonedEntityForData(application); + + application.setApplicationEvaluationId(entity.getId()); + + /** This code is responsible for adding a version history log for the "Update Application" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldApplication).newData(application).build()); Map placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.EVALUATION_CREATION); notificationDao.sendNotificationToSuperUser(application,placeHolders,NotificationTypeEnum.EVALUATION_CREATION); notificationDao.sendNotificationToInstructor(placeHolders,entity,NotificationTypeEnum.EVALUATION_CREATION); } + + + /** This code is responsible for adding a version history log for the "Update Application Evaluation" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldApplicationEvaluation).newData(entity).build()); + ApplicationStatusForEvaluation status = req.getApplicationStatus(); // Fetch all amendment request entities associated with the evaluation ID List applicationAmendmentRequestEntities = @@ -653,21 +670,16 @@ public class ApplicationEvaluationDao { } // Fetch amendment details from the request if(req.getAmendmentDetails()!=null) { - List amendmentDetailsRequests = req.getAmendmentDetails(); - - updateAmendmentDocumentsAndFormFields(applicationAmendmentRequestEntities, amendmentDetailsRequests); -} - - ApplicationEvaluationEntity savedEntity = applicationEvaluationRepository.save(entity); - - /** This code is responsible for adding a version history log for the "Update Application Evaluation" operation. **/ - loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldApplicationEvaluation).newData(entity).build()); + List amendmentDetailsRequests = req.getAmendmentDetails(); + + updateAmendmentDocumentsAndFormFields(applicationAmendmentRequestEntities, amendmentDetailsRequests); + } if (status != null) { AssignedApplicationsEntity assignedApplicationsEntity = assignedApplications.get(); return updateApplicationEvaluationStatus(application, assignedApplicationsEntity, status); } else { - return convertToResponse(savedEntity); + return convertToResponse(entity); } } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java index a482f453..50d16557 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java @@ -70,5 +70,8 @@ public class ApplicationEntity extends BaseEntity { @Column(name = "evaluationVersion") private String evaluationVersion; + + @Column(name = "APPLICATION_EVALUATION_ID") + private Long applicationEvaluationId; } \ No newline at end of file diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index e4bfdfe5..b987fd7c 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 @@ -2292,5 +2292,18 @@ + + + + + + + + + + EXISTS (SELECT 1 FROM application_evaluation ae WHERE ae.application_id = application.id) + + + From cc94edc2651c2f04526c474c48b9caecf1dc8ad9 Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 27 Jan 2025 12:40:44 +0530 Subject: [PATCH 16/29] Updated assigned application response --- .../tendermanagement/dao/AssignedApplicationsDao.java | 2 ++ .../model/response/AssignedApplicationsResponse.java | 2 ++ .../web/rest/api/EvaluationFormApi.java | 10 +++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index f9a3476f..c8e45af4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -11,6 +11,7 @@ import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; @@ -202,6 +203,7 @@ public class AssignedApplicationsDao { assignedApplicationsResponse.setSubmissionDate(submissionDate); assignedApplicationsResponse.setCallEndDate(callEndDate); assignedApplicationsResponse.setCallStartDate(callStartDate); + assignedApplicationsResponse.setEvaluationVersion(EvaluationVersionEnum.valueOf(application.getCall().getEvaluationVersion())); if(applicationEvaluationEntity.isPresent()){ assignedApplicationsResponse.setEvaluationEndDate(applicationEvaluationEntity.get().getEndDate()); } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java index b975c150..83c1ab0a 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.model.BaseBean; import java.time.LocalDateTime; @@ -22,6 +23,7 @@ public class AssignedApplicationsResponse extends BaseBean { private LocalDateTime callEndDate; private String companyName; private LocalDateTime evaluationEndDate; + private EvaluationVersionEnum evaluationVersion; } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java index c74fa829..66903a51 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationFormApi.java @@ -22,7 +22,7 @@ import java.util.List; public interface EvaluationFormApi { - @Operation(summary = "Api to create Evaluation form", + @Operation(summary = "Api to create Evaluation form (Evaluation V2)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -39,7 +39,7 @@ public interface EvaluationFormApi { @Valid @RequestBody EvaluationFormRequest evaluationFormRequest); - @Operation(summary = "Api to update Evaluation form", + @Operation(summary = "Api to update Evaluation form (Evaluation V2)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -55,7 +55,7 @@ public interface EvaluationFormApi { @Parameter(description = "The Evaluation form ID", required = true) @PathVariable("evaluationFormId") Long evaluationFormId, @Parameter(description = "Evaluation form request object", required = true) @Valid @RequestBody EvaluationFormRequest evaluationFormRequest); - @Operation(summary = "Api to get Evaluation form by id", + @Operation(summary = "Api to get Evaluation form by id (Evaluation V2)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -70,7 +70,7 @@ public interface EvaluationFormApi { @Parameter(description = "The Evaluation form ID", required = true) @PathVariable("evaluationFormId") Long evaluationFormId); - @Operation(summary = "Api to delete Evaluation form", + @Operation(summary = "Api to delete Evaluation form (Evaluation V2)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -84,7 +84,7 @@ public interface EvaluationFormApi { ResponseEntity> deleteEvaluationForm(HttpServletRequest request, @Parameter(description = "The Evaluation form ID", required = true) @PathVariable("evaluationFormId") Long evaluationFormId); - @Operation(summary = "Api to get Evaluation forms by callId", + @Operation(summary = "Api to get Evaluation forms by callId (Evaluation V2)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { From c396eaf1421f9ce3f2983934b73ace56823d926d Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 27 Jan 2025 13:01:46 +0530 Subject: [PATCH 17/29] Updated code --- .../service/impl/CallValidatorServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java index 6c3024c6..eaa3ba13 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java @@ -54,11 +54,11 @@ public class CallValidatorServiceImpl { data = data.addError(Translator.toLocale(GepafinConstant.INVALID_DATE_MSG)); } - if (response.getEvaluationVersion() == EvaluationVersionEnum.V1 &&(flowResponse == null || ((flowResponse.getFlowData() == null || flowResponse.getFlowData().isEmpty())) - && (flowResponse.getFlowEdges() == null || flowResponse.getFlowEdges().isEmpty()))) { + if (flowResponse == null || ((flowResponse.getFlowData() == null || flowResponse.getFlowData().isEmpty())) + && (flowResponse.getFlowEdges() == null || flowResponse.getFlowEdges().isEmpty())) { data.addError(Translator.toLocale(GepafinConstant.FLOW_NOT_FOUND)); } - if (response.getEvaluationVersion() == EvaluationVersionEnum.V1 &&(formResponses == null || formResponses.isEmpty()) ){ + if (formResponses == null || formResponses.isEmpty()) { data.addError(Translator.toLocale(GepafinConstant.FORM_NOT_FOUND)); } data.validate(); From 8aeb6b05248829b78598ead92037c94567a11678 Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 27 Jan 2025 18:00:50 +0530 Subject: [PATCH 18/29] Done ticket GEPAFINBE-149 --- .../constants/GepafinConstant.java | 2 ++ .../dao/AssignedApplicationsDao.java | 28 ++++++++++--------- .../enums/AssignedApplicationEnum.java | 3 ++ .../enums/UserActionContextEnum.java | 1 + .../request/AssignedApplicationsRequest.java | 1 - .../service/AssignedApplicationsService.java | 2 ++ .../impl/AssignedApplicationsServiceImpl.java | 6 +++- .../web/rest/api/AssignedApplicationsApi.java | 18 +++++++++++- .../impl/AssignedApplicationsController.java | 15 ++++++++++ src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 3 ++ 11 files changed, 64 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 6b5a9c3e..8e2828e5 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -401,5 +401,7 @@ public class GepafinConstant { public static final String EVALUATION_FORM_NOT_FOUND = "evaluation.form.not.found"; public static final String EVALUATION_V2_STEP_2 = "EVALUATION_V2_STEP_2"; + + public static final String ASSIGNED_APPLICATION_STATUS_UPDATED_SUCCESSFULLY = "assigned.application.status.updated.successfully"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index c8e45af4..6211a017 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -4,19 +4,13 @@ import jakarta.persistence.criteria.Predicate; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; -import net.gepafin.tendermanagement.entities.ApplicationEntity; -import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; -import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; -import net.gepafin.tendermanagement.entities.CompanyEntity; -import net.gepafin.tendermanagement.entities.UserEntity; -import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; -import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; -import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; +import net.gepafin.tendermanagement.entities.*; +import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; -import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; +import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository; @@ -37,6 +31,7 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -120,6 +115,7 @@ public class AssignedApplicationsDao { setIfUpdated(assignedApplication::getAssignedBy, assignedApplication::setAssignedBy, assignedByUser.getId()); setIfUpdated(assignedApplication::getUserId, assignedApplication::setUserId, userId); assignedApplication.setAssignedAt(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + assignedApplication.setStatus(AssignedApplicationEnum.AWAITING.getValue()); Optional entityOptional = applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplication.getId()); if(entityOptional.isPresent()) { ApplicationEvaluationEntity oldApplicationEvaluationEntity = Utils.getClonedEntityForData(entityOptional.get()); @@ -141,10 +137,7 @@ public class AssignedApplicationsDao { assignApplication.setApplication(application); assignApplication.setAssignedBy(assignedByUser.getId()); assignApplication.setUserId(userId); - assignApplication.setStatus(AssignedApplicationEnum.OPEN.getValue()); - if (assignedApplicationsRequest.getStatus() != null) { - assignApplication.setStatus(assignedApplicationsRequest.getStatus().getValue()); - } + assignApplication.setStatus(AssignedApplicationEnum.AWAITING.getValue()); assignApplication.setNote(assignedApplicationsRequest.getNote()); assignApplication.setIsDeleted(false); assignApplication.setAssignedAt(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); @@ -287,5 +280,14 @@ public class AssignedApplicationsDao { log.info("Assigned application fetched successfully: {}", response); return response; } + public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { + AssignedApplicationsEntity assignedApplication = validateAssignedApplication(assignedApplicationId); + validator.validatePreInstructor(request, assignedApplication.getUserId()); + + AssignedApplicationsEntity oldAssignedApplicationEntity = Utils.getClonedEntityForData(assignedApplication); + assignedApplication.setStatus(status.getValue()); + AssignedApplicationsEntity updatedAssignment = saveAssignedApplication(assignedApplication, oldAssignedApplicationEntity, VersionActionTypeEnum.UPDATE); + return convertEntityToResponse(updatedAssignment); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/AssignedApplicationEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/AssignedApplicationEnum.java index 59f8ae1d..be3f6b1a 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/AssignedApplicationEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/AssignedApplicationEnum.java @@ -5,6 +5,9 @@ import com.fasterxml.jackson.annotation.JsonValue; public enum AssignedApplicationEnum { OPEN ("OPEN"), SOCCORSO("SOCCORSO"), + + AWAITING("AWAITING"), + CLOSE("CLOSE"); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 03f878bf..4a4d1109 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -109,6 +109,7 @@ public enum UserActionContextEnum { DELETE_ASSIGNED_APPLICATION("DELETE_ASSIGNED_APPLICATION"), GET_ASSIGNED_APPLICATION("GET_ASSIGNED_APPLICATION"), UPDATE_ASSIGNED_APPLICATION_DETAILS("UPDATE_ASSIGNED_APPLICATION_DETAILS"), + UPDATE_ASSIGNED_APPLICATION_STATUS("UPDATE_ASSIGNED_APPLICATION_STATUS"), /** Assigned form field context **/ CREATE_FORM_FIELD("CREATE_FORM_FIELD"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationsRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationsRequest.java index ef4cd3c3..998e3715 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationsRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationsRequest.java @@ -6,5 +6,4 @@ import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; @Data public class AssignedApplicationsRequest { private String note; - private AssignedApplicationEnum status; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java index 1a73c674..d37f19b6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; @@ -19,4 +20,5 @@ public interface AssignedApplicationsService { AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, UpdateAssignedApplicationRequest assignedApplicationsRequest); AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id); AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId); + AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java index c820d929..85082d15 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java @@ -4,6 +4,7 @@ import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.AssignedApplicationsDao; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; @@ -60,5 +61,8 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ public AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId) { return assignedApplicationsDao.validateAssignedApplication(assignedApplicationId); } - + @Override + public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { + return assignedApplicationsDao.updateAssignedApplicationStatus(request, assignedApplicationId, status); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java index 144a20f4..4b2fe64b 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java @@ -6,8 +6,11 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; +import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; @@ -96,7 +99,20 @@ public interface AssignedApplicationsApi { @GetMapping(value = "/{id}", produces = "application/json") ResponseEntity> getAssignedApplicationById(HttpServletRequest request, @Parameter(description = "The assigned application id", required = true) @PathVariable(value = "id", required = true) Long id); - + + @Operation(summary = "Api to update assigned application status", + 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) })) }) + @PutMapping(value = "/{id}/status", produces = { "application/json" }) + ResponseEntity> updateAssignedApplicationStatus(HttpServletRequest request, + @Parameter(description = "The assigned application id", required = true) @PathVariable("id") Long id, + @Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) AssignedApplicationEnum status); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java index 78cc47dd..459824a0 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java @@ -4,11 +4,14 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; +import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.AssignedApplicationsService; @@ -89,6 +92,18 @@ public class AssignedApplicationsController implements AssignedApplicationsApi { .body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); } + @Override + public ResponseEntity> updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { + + /** This code is responsible for creating user action logs for the "update assigned application status" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_ASSIGNED_APPLICATION_STATUS).build()); + + AssignedApplicationsResponse applicationResponse = assignedApplicationsService.updateAssignedApplicationStatus(request, assignedApplicationId, status); + + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); + } } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 6c824cbc..239efc0f 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -362,3 +362,4 @@ evaluation.form.deleted.successfully=Evaluation form deleted successfully. evaluation.form.fetched.successfully=Evaluation form fetched successfully. evaluation.form.not.found=Evaluation form not found. +assigned.application.status.updated.successfully=Assigned application status updated successfully. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index cca4b808..3d37c00c 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -352,3 +352,6 @@ evaluation.form.deleted.successfully=Modulo di valutazione eliminato con success evaluation.form.fetched.successfully=Modulo di valutazione recuperato con successo. evaluation.form.not.found=Modulo di valutazione non trovato. + +assigned.application.status.updated.successfully=Stato dell'applicazione assegnata aggiornato con successo. + From 9d8757b384973aa12f3bdde3ba1c1677610e2d86 Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 27 Jan 2025 18:24:09 +0530 Subject: [PATCH 19/29] Updated code for pdf --- src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java index ec7b53da..8be69097 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java @@ -340,7 +340,8 @@ public class PdfDao { for (String key : orderedKeys) { if (stateFieldMap.containsKey(key)) { // Only add data cell if key is in stateFieldMap Object value = row.getOrDefault(key, ""); // Fetch value or use empty string if key not present - String fieldValue= (String) value; +// String fieldValue= (String) value; + String fieldValue = value != null ? value.toString() : ""; if(Boolean.TRUE.equals(Utils.isItalianFormattedAmount(fieldValue)) ){ fieldValue= String.valueOf(Utils.convertToItalianFormat(fieldValue)); } From 15bf2e4d4a8f7bce35b5ceb81d105b55d294952c Mon Sep 17 00:00:00 2001 From: Piyush Date: Mon, 27 Jan 2025 19:11:16 +0530 Subject: [PATCH 20/29] Done ticket GEPAFINBE-150 --- .../dao/AssignedApplicationsDao.java | 12 +++++++++--- .../service/AssignedApplicationsService.java | 4 +++- .../impl/AssignedApplicationsServiceImpl.java | 6 ++++-- .../web/rest/api/AssignedApplicationsApi.java | 5 ++++- .../api/impl/AssignedApplicationsController.java | 6 ++++-- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index c8e45af4..d1119e51 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -226,7 +226,7 @@ public class AssignedApplicationsDao { log.info("Assigned Application deleted with ID: {}", id); } - public List getAllAssignedApplications(HttpServletRequest request, Long userId) { + public List getAllAssignedApplications(HttpServletRequest request, Long userId,List statusList) { UserEntity user = validator.validateUser(request); if(validator.checkIsPreInstructor() && userId == null) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG)); @@ -234,18 +234,24 @@ public class AssignedApplicationsDao { if(userId != null) { validator.validatePreInstructor(request, userId); } - Specification spec = search(user.getHub().getId() ,userId); + Specification spec = search(user.getHub().getId() ,userId,statusList); List assignedApplicationsEntityList = assignedApplicationsRepository.findAll(spec); return assignedApplicationsEntityList.stream() .map(entity -> convertEntityToResponse(entity)) .collect(Collectors.toList()); } - private Specification search(Long hubId, Long userId) { + private Specification search(Long hubId, Long userId,List statusList) { return (root, query, builder) -> { Predicate predicate = builder.isFalse(root.get("isDeleted")); if (userId != null) { predicate = builder.and(predicate, builder.equal(root.get("userId"), userId)); } + if (statusList != null && !statusList.isEmpty()) { + List statusNames = statusList.stream() + .map(Enum::name) + .collect(Collectors.toList()); + predicate = builder.and(predicate, root.get("status").in(statusNames)); + } query.orderBy( builder.desc(builder.isNotNull(root.get(GepafinConstant.ASSIGNED_AT))), builder.desc(root.get(GepafinConstant.ASSIGNED_AT)) diff --git a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java index 1a73c674..5d9df4f7 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java @@ -2,6 +2,8 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; @@ -15,7 +17,7 @@ public interface AssignedApplicationsService { void deleteApplication(HttpServletRequest request, Long id); - List getAllAssignedApplications(HttpServletRequest request, Long userId); + List getAllAssignedApplications(HttpServletRequest request, Long userId,List statusList); AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, UpdateAssignedApplicationRequest assignedApplicationsRequest); AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id); AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java index c820d929..b6d68807 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java @@ -4,6 +4,8 @@ import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.AssignedApplicationsDao; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; @@ -40,8 +42,8 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ @Override @Transactional(readOnly = true) - public List getAllAssignedApplications(HttpServletRequest request, Long userId) { - return assignedApplicationsDao.getAllAssignedApplications(request, userId); + public List getAllAssignedApplications(HttpServletRequest request, Long userId,List statusList) { + return assignedApplicationsDao.getAllAssignedApplications(request, userId,statusList); } @Override diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java index 144a20f4..a2742e07 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java @@ -6,6 +6,8 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; @@ -66,7 +68,8 @@ public interface AssignedApplicationsApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "", produces = "application/json") ResponseEntity>> getAllAssignedApplications(HttpServletRequest request, - @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId); + @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId, + @Parameter(description = "Assigned application statuses" ,required = false) @RequestParam(value = "statuses",required = false) List statusList); @Operation(summary = "Api to update assigned application", responses = { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java index 78cc47dd..ceaea428 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java @@ -4,6 +4,8 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; @@ -56,12 +58,12 @@ public class AssignedApplicationsController implements AssignedApplicationsApi { } @Override - public ResponseEntity>> getAllAssignedApplications(HttpServletRequest request, Long userId) { + public ResponseEntity>> getAllAssignedApplications(HttpServletRequest request, Long userId,List statusList) { log.info("Get All Assigned Applications"); /** This code is responsible for creating user action logs for the "get Assigned Applications" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) .actionContext(UserActionContextEnum.GET_ASSIGNED_APPLICATION).build()); - List applications = assignedApplicationsService.getAllAssignedApplications(request, userId); + List applications = assignedApplicationsService.getAllAssignedApplications(request, userId,statusList); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); } From a6d86445928a854f894916ba607a91857dcc9f79 Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 28 Jan 2025 17:50:22 +0530 Subject: [PATCH 21/29] Added application evaluation form and form field --- .../tendermanagement/dao/ApplicationDao.java | 2 +- .../dao/ApplicationEvaluationDao.java | 233 +++++++++++++++++- .../ApplicationEvaluationFormEntity.java | 22 ++ .../ApplicationEvaluationFormFieldEntity.java | 24 ++ .../enums/UserActionContextEnum.java | 1 + ...icationEvaluationFormFieldReponseBean.java | 15 ++ .../ApplicationEvaluationResponseBean.java | 15 ++ ...licationEvaluationFormFieldRepository.java | 18 ++ .../ApplicationEvaluationFormRepository.java | 19 ++ .../service/ApplicationEvaluationService.java | 5 + .../ApplicationEvaluationServiceImpl.java | 9 + .../rest/api/ApplicationEvaluationApi.java | 19 ++ .../ApplicationEvaluationApiController.java | 16 ++ .../db/changelog/db.changelog-1.0.0.xml | 57 ++++- 14 files changed, 449 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormEntity.java create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormFieldEntity.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormFieldReponseBean.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java create mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormFieldRepository.java create mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 174313ca..794e7796 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -669,7 +669,7 @@ public class ApplicationDao { return documentIds; } - private List validateDocumentIds(String documentId) { + public List validateDocumentIds(String documentId) { if (documentId != null && !documentId.isEmpty()) { return Arrays.stream(documentId.split(",")) .map(Long::parseLong) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 74a14114..d19c8965 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -12,10 +12,7 @@ import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.*; -import net.gepafin.tendermanagement.util.DateTimeUtil; -import net.gepafin.tendermanagement.util.LoggingUtil; -import net.gepafin.tendermanagement.util.Utils; -import net.gepafin.tendermanagement.util.Validator; +import net.gepafin.tendermanagement.util.*; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -25,6 +22,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; +import java.text.MessageFormat; import java.time.Duration; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; @@ -32,6 +30,7 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static net.gepafin.tendermanagement.util.Utils.log; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; @Component @@ -116,6 +115,27 @@ public class ApplicationEvaluationDao { @Autowired private HubService hubService; + @Autowired + private EvaluationFormService evaluationFormService; + + @Autowired + private EvaluationFormDao evaluationFormDao; + + @Autowired + private ApplicationEvaluationFormRepository applicationEvaluationFormRepository; + + @Autowired + private ApplicationEvaluationFormFieldRepository applicationEvaluationFormFieldRepository; + + @Autowired + private ApplicationDao applicationDao; + + @Autowired + private ApplicationEvaluationService applicationEvaluationService; + + @Autowired + private CallDao callDao; + private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); @@ -1907,5 +1927,210 @@ public class ApplicationEvaluationDao { loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluation).newData(savedEntity).build()); return convertToResponse(savedEntity); } + + public ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long evaluationFormId, Long evaluationId){ + EvaluationFormEntity evaluationFormEntity = evaluationFormService.validateEvaluationForm(evaluationFormId); + validateFormFields(applicationRequestBean,evaluationFormEntity); + ApplicationEvaluationEntity applicationEvaluationEntity = validateApplicationEvaluation(evaluationId); + ApplicationEvaluationFormEntity applicationEvaluationFormEntity = getApplicationEvaluationFormOrCreate(evaluationFormEntity,applicationEvaluationEntity); + createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationEvaluationFormEntity, evaluationFormEntity); + return getEvaluationById(applicationEvaluationEntity.getId(),evaluationFormEntity.getId()); + } + + private ApplicationEvaluationFormEntity getApplicationEvaluationFormOrCreate(EvaluationFormEntity evaluationFormEntity, ApplicationEvaluationEntity applicationEvaluationEntity) { + + ApplicationEvaluationFormEntity applicationEvaluationFormEntity = applicationEvaluationFormRepository.findByEvaluationIdAndEvaluationFormId(applicationEvaluationEntity.getId(), evaluationFormEntity.getId()); + ApplicationEvaluationFormEntity oldApplicationEvaluationFormEntity = Utils.getClonedEntityForData(applicationEvaluationFormEntity); + if (applicationEvaluationFormEntity == null) { + applicationEvaluationFormEntity = createApplicationEvaluationFormEntity(applicationEvaluationEntity, evaluationFormEntity); + + /** This code is responsible for adding a version history log for the "Create application evalaution form" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(oldApplicationEvaluationFormEntity).newData(applicationEvaluationFormEntity) + .build()); + } + return applicationEvaluationFormEntity; + } + + public ApplicationEvaluationFormEntity createApplicationEvaluationFormEntity(ApplicationEvaluationEntity applicationEvaluationEntity, EvaluationFormEntity evaluationFormEntity) { + ApplicationEvaluationFormEntity applicationEvaluationFormEntity = new ApplicationEvaluationFormEntity(); + applicationEvaluationFormEntity.setApplicationId(applicationEvaluationEntity.getApplicationId()); + applicationEvaluationFormEntity.setEvaluationForm(evaluationFormEntity); + applicationEvaluationFormEntity.setApplicationEvaluation(applicationEvaluationEntity); + applicationEvaluationFormEntity.setIsDeleted(false); + return saveApplicationEvaluationFormEntity(applicationEvaluationFormEntity); + } + + public void validateFormFields(ApplicationRequestBean request, EvaluationFormEntity evaluationFormEntity) { + + List contentResponseBeans=evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity).getContent(); + + List requestFields = request.getFormFields(); + + Map contentMap = contentResponseBeans.stream() + .collect(Collectors.toMap(ContentResponseBean::getId, ContentResponseBean::getLabel)); // Change getLabel() if needed + FieldValidator validator = FieldValidator.create(); + for (ApplicationFormFieldRequestBean requestField : requestFields) { + String fieldId = requestField.getFieldId(); + + if (!contentMap.containsKey(fieldId)) { + validator.addError(MessageFormat.format(Translator.toLocale(GepafinConstant.FIELD_ID_NOT_FOUND), fieldId)); + } + + } + validator.validate(); + } + + public ApplicationEvaluationFormEntity saveApplicationEvaluationFormEntity(ApplicationEvaluationFormEntity applicationEvaluationFormEntity) { + return applicationEvaluationFormRepository.save(applicationEvaluationFormEntity); + } + + public List createOrUpdateMultipleFormFields(List formFieldRequestBeans, + ApplicationEvaluationFormEntity applicationEvaluationFormEntity, EvaluationFormEntity evaluationFormEntity) { + + List existingFields = applicationEvaluationFormFieldRepository.findByApplicationEvaluationFormId(applicationEvaluationFormEntity.getId()); + + return formFieldRequestBeans.stream().map(requestBean -> createOrUpdateApplicationEvaluationFormField(requestBean, applicationEvaluationFormEntity, existingFields, evaluationFormEntity)) + .collect(Collectors.toList()); + } + + public ApplicationEvaluationFormFieldEntity createOrUpdateApplicationEvaluationFormField(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, + ApplicationEvaluationFormEntity applicationEvaluationFormEntity, + List applicationEvaluationFormFieldEntities, + EvaluationFormEntity evaluationFormEntity){ + ApplicationEvaluationFormFieldEntity applicationEvaluationFormFieldEntity = null; + validateFileUploadDocuments(applicationFormFieldRequestBean, evaluationFormEntity); + VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; + ApplicationEvaluationFormFieldEntity oldApplicationEvaluationFormFieldData = null; + if (applicationEvaluationFormFieldEntities == null || applicationEvaluationFormFieldEntities.isEmpty()) { + applicationEvaluationFormFieldEntity = new ApplicationEvaluationFormFieldEntity(); + applicationEvaluationFormFieldEntity.setApplicationEvaluationForm(applicationEvaluationFormEntity); + applicationEvaluationFormFieldEntity.setIsDeleted(false); + }else{ + for (ApplicationEvaluationFormFieldEntity existingFieldEntity : applicationEvaluationFormFieldEntities) { + if (existingFieldEntity.getFieldId().equals(applicationFormFieldRequestBean.getFieldId())) { + applicationEvaluationFormFieldEntity = existingFieldEntity; + oldApplicationEvaluationFormFieldData = Utils.getClonedEntityForData(existingFieldEntity); + actionType = VersionActionTypeEnum.UPDATE; + break; + } else { + applicationEvaluationFormFieldEntity.setApplicationEvaluationForm(applicationEvaluationFormEntity); + } + } + } + Utils.setIfUpdated(applicationEvaluationFormFieldEntity::getFieldId, applicationEvaluationFormFieldEntity::setFieldId, applicationFormFieldRequestBean.getFieldId()); + + if (applicationFormFieldRequestBean.getFieldValue() != null) { + applicationEvaluationFormFieldEntity.setFieldValue(Utils.convertObjectToJsonString(applicationFormFieldRequestBean.getFieldValue())); + } else { + applicationEvaluationFormFieldEntity.setFieldValue(null); + } + + ApplicationEvaluationFormFieldEntity savedEvaluationFormFieldEntity = applicationEvaluationFormFieldRepository.save(applicationEvaluationFormFieldEntity); + + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldApplicationEvaluationFormFieldData).newData(savedEvaluationFormFieldEntity).build()); + + log.info("Version history logged for action: {}, Field ID: {}", actionType, applicationEvaluationFormFieldEntity.getFieldId()); + + return savedEvaluationFormFieldEntity; + } + + private List validateFileUploadDocuments(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, EvaluationFormEntity evaluationFormEntity) { + List documentIds=null; + + List contentResponseBeans=evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity).getContent(); + for (ContentResponseBean contentResponseBean:contentResponseBeans){ + if(Boolean.TRUE.equals(contentResponseBean.getName().equals("fileupload"))) { + if (contentResponseBean.getId().equals(applicationFormFieldRequestBean.getFieldId())) { + Object fieldValueObject = applicationFormFieldRequestBean.getFieldValue(); + if (fieldValueObject instanceof String) { + // Safely cast the object to a string + String documentId = (String) fieldValueObject; + // Now you can use documentId as needed + documentIds = applicationDao.validateDocumentIds(documentId); + } + } + } + } + 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, + ApplicationEvaluationFormEntity applicationEvaluationFormEntity){ + List evaluationFormFieldResponseBeans = new ArrayList<>(); + List contentResponseBeans =evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(applicationEvaluationFormEntity.getEvaluationForm()).getContent(); + + for (ApplicationEvaluationFormFieldEntity applicationEvaluationFormFieldEntity : evaluationFormFieldEntities) { + + Optional fileUploadContent = contentResponseBeans.stream() + .filter(contentResponseBean -> "fileupload".equals(contentResponseBean.getName()) && + contentResponseBean.getId().equals(applicationEvaluationFormFieldEntity.getFieldId())) + .findFirst(); + + List documentResponseBeans = new ArrayList<>(); + if (fileUploadContent.isPresent()) { + String documentId = applicationEvaluationFormFieldEntity.getFieldValue(); + if (documentId != null && !documentId.isEmpty()) { + documentResponseBeans = Arrays.stream(documentId.split(",")) + .map(String::trim) + .map(Long::parseLong) + .map(docId -> { + DocumentEntity documentEntity = documentService.validateDocument(docId); +// if (Boolean.FALSE.equals(DocumentSourceTypeEnum.APPLICATION.getValue().equals(documentEntity.getSource()))) { +// throw new CustomValidationException(Status.NOT_FOUND,Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)); +// } + return documentEntity; + }) + .map(callDao::convertToDocumentResponseBean) + .collect(Collectors.toList()); + } + } + ApplicationEvaluationFormFieldReponseBean responseBean = convertToEvaluationFormFieldResponseBean( + applicationEvaluationFormFieldEntity, applicationEvaluationFormEntity.getId()); + if (!documentResponseBeans.isEmpty()) { + responseBean.setFieldValue(documentResponseBeans); + } + evaluationFormFieldResponseBeans.add(responseBean); + } + return evaluationFormFieldResponseBeans; + + } + + private ApplicationEvaluationFormFieldReponseBean convertToEvaluationFormFieldResponseBean(ApplicationEvaluationFormFieldEntity entity,Long applicationEvaluationFormId){ + ApplicationEvaluationFormFieldReponseBean applicationEvaluationFormFieldReponseBean = new ApplicationEvaluationFormFieldReponseBean(); + applicationEvaluationFormFieldReponseBean.setApplicationEvaluationFormId(applicationEvaluationFormId); + applicationEvaluationFormFieldReponseBean.setFieldId(entity.getFieldId()); + if(entity.getFieldValue() != null) { + applicationEvaluationFormFieldReponseBean.setFieldValue(Utils.getFieldValueAsObject(entity.getFieldValue())); + } + applicationEvaluationFormFieldReponseBean.setId(entity.getId()); + applicationEvaluationFormFieldReponseBean.setCreatedDate(entity.getCreatedDate()); + applicationEvaluationFormFieldReponseBean.setUpdatedDate(entity.getUpdatedDate()); + 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.setCreatedDate(entity.getCreatedDate()); + response.setUpdatedDate(entity.getUpdatedDate()); + return response; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormEntity.java new file mode 100644 index 00000000..251fb262 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormEntity.java @@ -0,0 +1,22 @@ +package net.gepafin.tendermanagement.entities; + +import jakarta.persistence.*; +import lombok.Data; + +@Entity +@Data +@Table(name = "APPLICATION_EVALUATION_FORM") +public class ApplicationEvaluationFormEntity extends BaseEntity{ + private Long applicationId; + + @Column(name="IS_DELETED") + private Boolean isDeleted; + + @ManyToOne + @JoinColumn(name = "EVALUATION_ID") + private ApplicationEvaluationEntity applicationEvaluation; + + @ManyToOne + @JoinColumn(name = "EVALUATION_FORM_ID") + private EvaluationFormEntity evaluationForm; +} diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormFieldEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormFieldEntity.java new file mode 100644 index 00000000..913d8831 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationFormFieldEntity.java @@ -0,0 +1,24 @@ +package net.gepafin.tendermanagement.entities; + +import jakarta.persistence.*; +import lombok.Data; + +@Entity +@Data +@Table(name = "APPLICATION_EVALUATION_FORM_FIELD") +public class ApplicationEvaluationFormFieldEntity extends BaseEntity { + + @ManyToOne + @JoinColumn(name = "APPLICATION_EVALUATION_FORM_ID") + private ApplicationEvaluationFormEntity applicationEvaluationForm; + + @Column(name = "FIELD_ID") + private String fieldId; + + @Column(name = "FIELD_VALUE") + private String fieldValue; + + @Column(name="IS_DELETED") + private Boolean isDeleted; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 76bed042..9a5dd397 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -97,6 +97,7 @@ public enum UserActionContextEnum { CREATE_UPDATE_APPLICATION_EVALUATION("CREATE_UPDATE_APPLICATION_EVALUATION"), GET_APPLICATION_EVALUATION("GET_APPLICATION_EVALUATION"), DELETE_APPLICATION_EVALUATION("DELETE_APPLICATION_EVALUATION"), + CREATE_UPDATE_APPLICATION_EVALUATION_FORM("CREATE_UPDATE_APPLICATION_EVALUATION_FORM"), /** Beneficiary Preferred Call action context **/ CREATE_BENEFICIARY_PREFERRED_CALL("CREATE_BENEFICIARY_PREFERRED_CALL"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormFieldReponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormFieldReponseBean.java new file mode 100644 index 00000000..62a0aa82 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormFieldReponseBean.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; +import net.gepafin.tendermanagement.model.BaseBean; + +@Data +public class ApplicationEvaluationFormFieldReponseBean extends BaseBean { + private Long id; + + private Long applicationEvaluationFormId; + + private String fieldId; + + private Object fieldValue; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java new file mode 100644 index 00000000..cf4b5865 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum; +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 List formFields; +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormFieldRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormFieldRepository.java new file mode 100644 index 00000000..07a0d318 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormFieldRepository.java @@ -0,0 +1,18 @@ +package net.gepafin.tendermanagement.repositories; + +import net.gepafin.tendermanagement.entities.ApplicationEvaluationFormFieldEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface ApplicationEvaluationFormFieldRepository extends JpaRepository { + @Query("SELECT f FROM ApplicationEvaluationFormFieldEntity f " + + "WHERE f.applicationEvaluationForm.id = :applicationEvaluationFormId " + + "AND f.isDeleted = false") + List findByApplicationEvaluationFormId( + @Param("applicationEvaluationFormId") Long applicationEvaluationFormId); +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java new file mode 100644 index 00000000..4514205b --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java @@ -0,0 +1,19 @@ +package net.gepafin.tendermanagement.repositories; + +import net.gepafin.tendermanagement.entities.ApplicationEvaluationFormEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +@Repository +public interface ApplicationEvaluationFormRepository extends JpaRepository { + + @Query("SELECT a FROM ApplicationEvaluationFormEntity a " + + "WHERE a.applicationEvaluation.id = :evaluationId " + + "AND a.evaluationForm.id = :evaluationFormId " + + "AND a.isDeleted = false") + ApplicationEvaluationFormEntity findByEvaluationIdAndEvaluationFormId( + @Param("evaluationId") Long evaluationId, + @Param("evaluationFormId") Long evaluationFormId); +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java index 454030af..682e2999 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java @@ -3,8 +3,11 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; 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.ApplicationEvaluationResponse; +import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; +import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; import java.util.List; @@ -21,4 +24,6 @@ public interface ApplicationEvaluationService { ApplicationEvaluationEntity validateApplicationEvaluationByApplicationId(Long applicationId); + ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long evaluationId, Long evaluationFormId); + } 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 3dd9035f..604d5fd5 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -7,9 +7,11 @@ import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; 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.ApplicationEvaluationResponse; +import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; import net.gepafin.tendermanagement.service.AssignedApplicationsService; @@ -78,4 +80,11 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe return applicationEvaluationDao.validateApplicationEvaluationByApplicationId(applicationId); } + @Override + public ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long evaluationId, Long evaluationFormId) { + ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(evaluationId); + validator.validatePreInstructor(request, applicationEvaluationEntity.getUserId()); + return applicationEvaluationDao.createApplicationEvaluation(request,applicationRequestBean,evaluationFormId,evaluationId); + } + } 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 9d168955..19b3170c 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,8 +8,11 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; 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.ApplicationEvaluationResponse; +import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; +import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; @@ -56,4 +59,20 @@ public interface ApplicationEvaluationApi { @Parameter( required = true) @PathVariable("id") Long id); + @Operation(summary = "Api to create or update application evaluation form ( Evaluation V2 )", + 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) })) }) + @PutMapping(value = "/{evaluationId}/form", + produces = { "application/json" }) + ResponseEntity> createApplicationEvaluation(HttpServletRequest request, + @Valid @RequestBody ApplicationRequestBean applicationRequestBean, + @Parameter(description = "The evaluation id", required = true) @PathVariable(value = "evaluationId", required = true) Long evaluationId, + @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 b299ecc2..cffaa7f7 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,9 +6,12 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; 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.response.ApplicationEvaluationResponse; +import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; +import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; import net.gepafin.tendermanagement.model.response.EvaluationDocumentResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; @@ -83,4 +86,17 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_DELETED_SUCCESSFULLY))); } + @Override + public ResponseEntity> createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long evaluationId, 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, evaluationId, evaluationFormId); + + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(applicationEvaluationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CREATED_SUCCESSFULLY))); + } + } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index b987fd7c..f357b08b 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 @@ -2303,7 +2303,62 @@ EXISTS (SELECT 1 FROM application_evaluation ae WHERE ae.application_id = application.id) - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 71c1b4949d852da6e57e39584cd65d8ee9024a86 Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 28 Jan 2025 18:27:38 +0530 Subject: [PATCH 22/29] updated code --- .../web/rest/api/ApplicationEvaluationApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 19b3170c..8fe0c4ac 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 @@ -68,11 +68,11 @@ 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 = "/{evaluationId}/form", + @PutMapping(value = "/{id}/form", produces = { "application/json" }) ResponseEntity> createApplicationEvaluation(HttpServletRequest request, @Valid @RequestBody ApplicationRequestBean applicationRequestBean, - @Parameter(description = "The evaluation id", required = true) @PathVariable(value = "evaluationId", required = true) Long evaluationId, + @Parameter(description = "The evaluation id", required = true) @PathVariable(value = "id", required = true) Long id, @Parameter(description = "The evaluation form ID", required = true) @RequestParam("evaluationFormId") Long evaluationFormId); } From b274cd672b161a2f3cbfe3604daf05e90e7d5e93 Mon Sep 17 00:00:00 2001 From: Piyush Date: Tue, 28 Jan 2025 18:43:39 +0530 Subject: [PATCH 23/29] Done ticket GEPAFINBE-151 --- .../impl/ApplicationAmendmentRequestServiceImpl.java | 1 - .../web/rest/api/ApplicationAmendmentRequestApi.java | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java index e2615a71..0d44c22b 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java @@ -84,7 +84,6 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm @Override public List getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { - UserEntity user = validator.validatePreInstructor(request, userId); return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(request,userId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java index 0918b918..1f1ca862 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java @@ -18,6 +18,7 @@ import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -85,9 +86,10 @@ public interface ApplicationAmendmentRequestApi { @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 = "/user/{id}", produces = "application/json") + @GetMapping(value = "/user", produces = "application/json") + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") ResponseEntity>> getAllApplicationAmendmentRequest(HttpServletRequest request, - @Parameter(description = "The User ID", required = false) @PathVariable(value = "id",required = false) Long userId); + @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId); @Operation(summary = "Api to update application amendment", responses = { From 19d7bf5e26ed94f59ad80475d8fc8b95384a2ade Mon Sep 17 00:00:00 2001 From: Piyush Date: Tue, 28 Jan 2025 19:24:39 +0530 Subject: [PATCH 24/29] Updated code --- .../dao/ApplicationAmendmentRequestDao.java | 35 +++++++++++++++++-- .../response/GetAllAmendmentResponseBean.java | 30 ++++++++++++++++ .../ApplicationAmendmentRequestService.java | 3 +- ...pplicationAmendmentRequestServiceImpl.java | 3 +- .../api/ApplicationAmendmentRequestApi.java | 5 +-- ...ApplicationAmendmentRequestController.java | 5 +-- 6 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/GetAllAmendmentResponseBean.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 5693193c..0e138227 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -592,7 +592,7 @@ public class ApplicationAmendmentRequestDao { return response; } - public List getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) { + public List getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) { if (validator.checkIsPreInstructor() && userId == null) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG)); } @@ -604,7 +604,7 @@ public class ApplicationAmendmentRequestDao { applicationAmendmentRequestRepository.findAll(spec); return applicationAmendmentRequestEntities.stream() - .map(entity -> convertEntityToResponse(entity, false)) + .map(this::initializeGetAllBasicResponse) .collect(Collectors.toList()); } @@ -1178,6 +1178,37 @@ public class ApplicationAmendmentRequestDao { return applicationEvaluation; + } + + private GetAllAmendmentResponseBean initializeGetAllBasicResponse(ApplicationAmendmentRequestEntity entity) { + GetAllAmendmentResponseBean response = new GetAllAmendmentResponseBean(); + ApplicationEntity applicationEntity = entity.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication(); + response.setId(entity.getId()); + response.setApplicationId(entity.getApplicationId()); + response.setApplicationEvaluationId(entity.getApplicationEvaluationEntity().getId()); + response.setNote(entity.getNote()); + response.setStatus(ApplicationAmendmentRequestEnum.valueOf(entity.getStatus())); + response.setResponseDays(entity.getResponseDays()); + response.setInternalNote(entity.getInternalNote()); + + LocalDateTime startDate = entity.getStartDate(); + response.setStartDate(startDate); + response.setExpirationDate(entity.getEndDate()); + response.setEvaluationEndDate(entity.getApplicationEvaluationEntity().getEndDate()); + response.setIsSendEmail(entity.getIsEmail()); + response.setIsSendNotification(entity.getIsNotification()); + + ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId()); + response.setCallEmail(application.getCall().getEmail()); + response.setCallName(application.getCall().getName()); + + UserEntity userEntity = userService.validateUser(application.getUserId()); + response.setBeneficiaryName(buildBeneficiaryName(userEntity)); + CompanyEntity company = companyService.validateCompany(application.getCompanyId()); + response.setCompanyName(company.getCompanyName()); + Long protocolNumber = entity.getProtocol() != null ? entity.getProtocol().getProtocolNumber() : null; + response.setProtocolNumber(protocolNumber); + return response; } private void softDeleteDocument(Long documentId) { documentService.deleteFile(documentId); diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/GetAllAmendmentResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/GetAllAmendmentResponseBean.java new file mode 100644 index 00000000..7a0d8f93 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/GetAllAmendmentResponseBean.java @@ -0,0 +1,30 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class GetAllAmendmentResponseBean { + private Long id; + private String callEmail; + private String note; + private Long responseDays; + private LocalDateTime startDate; + private Boolean isSendNotification; + private Boolean isSendEmail; + private Long protocolNumber; + private String callName; + private String beneficiaryName; + private String companyName; + private String amendmentNotes; + private Long applicationId; + private Long applicationEvaluationId; + private LocalDateTime evaluationEndDate; + private LocalDateTime expirationDate; + private String internalNote; + private ApplicationAmendmentRequestEnum status; +} + diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java index 678ff913..5c664327 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java @@ -8,6 +8,7 @@ import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; +import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import java.util.List; @@ -16,7 +17,7 @@ public interface ApplicationAmendmentRequestService { public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(HttpServletRequest request, Long applicationEvaluationId , ApplicationAmendmentRequest applicationAmendmentRequest); void deleteApplicationAmendmentRequest(HttpServletRequest request, Long id); ApplicationAmendmentRequestResponse getApplicationAmendmentRequestById(HttpServletRequest request,Long id); - List getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId); + List getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId); ApplicationAmendmentRequestResponse updateApplicationAmendment(HttpServletRequest request, Long id, ApplicationAmendmentRequestBean applicationAmendmentRequestBean); ApplicationAmendmentRequestEntity validateApplicationAmendmentRequest(Long applicationAmendmentId); List getAllAmendmentRequestByBeneficiaryId(HttpServletRequest request,Long beneficiaryId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java index 0d44c22b..cb8b5043 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java @@ -12,6 +12,7 @@ import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; +import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; @@ -83,7 +84,7 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm } @Override - public List getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { + public List getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) { return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(request,userId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java index 1f1ca862..e0880127 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBea import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationResponse; +import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; @@ -88,8 +89,8 @@ public interface ApplicationAmendmentRequestApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "/user", produces = "application/json") @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") - ResponseEntity>> getAllApplicationAmendmentRequest(HttpServletRequest request, - @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId); + ResponseEntity>> getAllApplicationAmendmentRequest(HttpServletRequest request, + @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId); @Operation(summary = "Api to update application amendment", responses = { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java index d4707511..d00a8df0 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java @@ -12,6 +12,7 @@ import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBea import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; +import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -85,14 +86,14 @@ public class ApplicationAmendmentRequestController implements ApplicationAmendme } @Override - public ResponseEntity>> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { + public ResponseEntity>> getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) { log.info("Get All Applications Amendment Request"); /** This code is responsible for creating user action logs for the "get all application amendment by preInstructor user id" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) .actionContext(UserActionContextEnum.GET_ALL_AMENDMENT_BY_PREINSTRUCTOR_USER_ID).build()); - List applicationAmendmentRequestResponses = applicationAmendmentRequestService.getAllApplicationAmendmentRequest(request,userId); + List applicationAmendmentRequestResponses = applicationAmendmentRequestService.getAllApplicationAmendmentRequest(request,userId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(applicationAmendmentRequestResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_AMENDMENT_SUCCESS_MSG))); } From 65dea832d0dfda0b2da4dfda968de75afc3fe20f Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 29 Jan 2025 12:34:57 +0530 Subject: [PATCH 25/29] Done ticket GEPAFINBE-146 --- .../constants/GepafinConstant.java | 2 ++ .../impl/CallValidatorServiceImpl.java | 33 ++++++++++++++++--- src/main/resources/message_en.properties | 4 +++ src/main/resources/message_it.properties | 4 +++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 8e2828e5..3170aafd 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -403,5 +403,7 @@ public class GepafinConstant { public static final String EVALUATION_V2_STEP_2 = "EVALUATION_V2_STEP_2"; 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"; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java index eaa3ba13..4c54f042 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java @@ -7,10 +7,7 @@ import java.util.List; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; -import net.gepafin.tendermanagement.model.response.CallResponse; -import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; -import net.gepafin.tendermanagement.model.response.FlowResponseBean; -import net.gepafin.tendermanagement.model.response.FormResponseBean; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.util.FieldValidator; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; @@ -61,6 +58,34 @@ public class CallValidatorServiceImpl { if (formResponses == null || formResponses.isEmpty()) { data.addError(Translator.toLocale(GepafinConstant.FORM_NOT_FOUND)); } + boolean isAmountRequestedValid = false; + if (formResponses != null && !formResponses.isEmpty()) { + outerloop: + for (FormResponseBean formResponse : formResponses) { + + if (formResponse.getContent() != null && !formResponse.getContent().isEmpty()) { + for (ContentResponseBean content : formResponse.getContent()) { + if ("numberinput".equals(content.getName()) && content.getSettings() != null) { + for (SettingResponseBean setting : content.getSettings()) { + if ("isRequestedAmount".equals(setting.getName())) { + Object value = setting.getValue(); + if (Boolean.TRUE.equals(value)) { + isAmountRequestedValid = true; + break outerloop; + } else if (value == null) { + data.addError(Translator.toLocale(GepafinConstant.REQUIRED_REQUESTED_AMOUNT_MSG)); + } + } + } + } + } + } + } + } + + if (!isAmountRequestedValid) { + data.addError(Translator.toLocale(GepafinConstant.REQUIRED_REQUESTED_AMOUNT_MSG)); + } data.validate(); } } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 239efc0f..451dec92 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -363,3 +363,7 @@ evaluation.form.fetched.successfully=Evaluation form fetched successfully. evaluation.form.not.found=Evaluation form not found. assigned.application.status.updated.successfully=Assigned application status updated successfully. + +validation.required.requested.amount=The Requested Amount configuration should be mandatory. + + diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 3d37c00c..66595c92 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -355,3 +355,7 @@ evaluation.form.not.found=Modulo di valutazione non trovato. assigned.application.status.updated.successfully=Stato dell'applicazione assegnata aggiornato con successo. +validation.required.requested.amount=La configurazione dell'importo richiesto è obbligatoria. + + + From 651ea9540a30af5b7512e583577c2b73ca26f411 Mon Sep 17 00:00:00 2001 From: nisha Date: Wed, 29 Jan 2025 13:00:18 +0530 Subject: [PATCH 26/29] Fixed issue for evaluation expiration --- .../tendermanagement/dao/NotificationDao.java | 14 ++++++++++++++ .../ApplicationAmendmentRequestRepository.java | 4 ++-- .../ApplicationEvaluationRepository.java | 2 +- .../scheduler/ApplicationEvaluationScheduler.java | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java index 3944246c..275447ef 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java @@ -208,6 +208,20 @@ public class NotificationDao { } } + public void sendNotificationToInstructorManager(Map placeHolders, ApplicationEvaluationEntity applicationEvaluationEntity, NotificationTypeEnum notificationTypeEnum) { + + List userEntities=userRepository.findByRoleEntity_RoleTypeAndHubId(RoleStatusEnum.ROLE_INSTRUCTOR_MANAGER.getValue(),applicationEvaluationEntity.getAssignedApplicationsEntity().getApplication().getHubId()); + for (UserEntity user:userEntities) { + Long instructorId=user.getId(); + ApplicationEntity application = applicationService.validateApplication(applicationEvaluationEntity.getApplicationId()); + if (instructorId != null) { + NotificationReq notificationreq = createNotificationReq(notificationTypeEnum.getValue(), placeHolders, instructorId, application.getUserWithCompany(), + null); + sendNotification(notificationreq); + } + } + } + public List getAllCompanyIdsForUser(Long userId) { return userWithCompanyRepository.findActiveCompanyIdsByUserId(userId); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java index 3e25f4a7..0ec7d668 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java @@ -59,7 +59,7 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository 'CLOSE' " + + "AND a.status NOT IN('CLOSE','EXPIRED') " + "AND a.endDate < :currentTime") List findAmendmentsDueForExpiration(LocalDateTime currentTime); @@ -72,7 +72,7 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository 'CLOSE' " + + " AND activeAmendment.status NOT IN('CLOSE','EXPIRED') " + " AND activeAmendment.isDeleted = false) ") Set findEvaluationsWithoutActiveAmendmentsByIds(@Param("applicationEvaluationIds") Set applicationEvaluationIds); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java index 468a5a6f..c1329470 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationRepository.java @@ -32,7 +32,7 @@ public interface ApplicationEvaluationRepository extends JpaRepository findAllByIsDeletedFalseAndEndDateBefore(@Param("currentDate") LocalDateTime currentDate); @Query("SELECT a FROM ApplicationEvaluationEntity a " + diff --git a/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationEvaluationScheduler.java b/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationEvaluationScheduler.java index e7249645..c43aca10 100644 --- a/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationEvaluationScheduler.java +++ b/src/main/java/net/gepafin/tendermanagement/scheduler/ApplicationEvaluationScheduler.java @@ -90,7 +90,7 @@ public class ApplicationEvaluationScheduler { Map placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.EVALUATION_EXPIRED); notificationDao.sendNotificationToSuperUser(application,placeHolders,NotificationTypeEnum.EVALUATION_EXPIRED); notificationDao.sendNotificationToInstructor(placeHolders,evaluation,NotificationTypeEnum.EVALUATION_EXPIRED); - + notificationDao.sendNotificationToInstructorManager(placeHolders,evaluation,NotificationTypeEnum.EVALUATION_EXPIRED); // Logging version history for the update operation loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(httpServletRequest) From c2da8bee21171af685c8bb306f0d4087bc18b8ab Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 29 Jan 2025 14:37:34 +0530 Subject: [PATCH 27/29] Added an get API for application evaluation form --- .../constants/GepafinConstant.java | 3 + .../dao/ApplicationEvaluationDao.java | 55 +++++++++++++++++++ .../dao/EvaluationFormDao.java | 6 +- .../enums/UserActionContextEnum.java | 1 + .../ApplicationEvaluationFormResponse.java | 16 ++++++ ...ApplicationEvaluationFormResponseBean.java | 19 +++++++ .../ApplicationEvaluationFormRepository.java | 2 + .../ApplicationEvaluationRepository.java | 9 +++ ...ory.java => EvaluationFormRepository.java} | 3 +- .../service/ApplicationEvaluationService.java | 7 ++- .../ApplicationEvaluationServiceImpl.java | 13 +++++ .../rest/api/ApplicationEvaluationApi.java | 21 ++++++- .../ApplicationEvaluationApiController.java | 18 ++++-- src/main/resources/message_en.properties | 3 + src/main/resources/message_it.properties | 3 + 15 files changed, 162 insertions(+), 17 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponseBean.java rename src/main/java/net/gepafin/tendermanagement/repositories/{EvalualtionFormRepository.java => EvaluationFormRepository.java} (76%) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 6b5a9c3e..6b03299d 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -237,6 +237,7 @@ public class GepafinConstant { public static final String EVALUATION_UPDATED_SUCCESSFULLY = "evaluation.updated.successfully"; public static final String EVALUATION_FETCHED_SUCCESSFULLY = "evaluation.fetched.successfully"; public static final String EVALUATION_DELETED_SUCCESSFULLY = "evaluation.deleted.successfully"; + public static final String GET_APPLICATION_EVALUATION_FORM_SUCCESS_MSG = "application.evaluation.form.get.success"; public static final String EVALUATIONS_FETCHED_SUCCESSFULLY = "evaluations.fetched.successfully"; public static final String APPLICATION_EVALUATION_NOT_FOUND = "application.evaluation.not.found"; public static final String APPLICATION_EVALUATION_STATUS_UPDATED_SUCCESSFULLY = "application.evaluation.status.updated.successfully"; @@ -401,5 +402,7 @@ public class GepafinConstant { public static final String EVALUATION_FORM_NOT_FOUND = "evaluation.form.not.found"; public static final String EVALUATION_V2_STEP_2 = "EVALUATION_V2_STEP_2"; + + public static final String EITHER_APPLICATION_ID_OR_ASSIGNED_APPLICATION_ID_MUST_BE_PROVIDED = "either.applicationId.or.assignedApplicationId.must.be.provided"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index d19c8965..edb69587 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -136,6 +136,9 @@ public class ApplicationEvaluationDao { @Autowired private CallDao callDao; + @Autowired + private EvaluationFormRepository evaluationFormRepository; + private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); @@ -2132,5 +2135,57 @@ public class ApplicationEvaluationDao { response.setUpdatedDate(entity.getUpdatedDate()); return response; } + + public ApplicationEvaluationFormResponse getApplicationEvaluationForm(HttpServletRequest request, Long applicationId, Long assignedApplicationId ){ + + if (applicationId == null && assignedApplicationId == null) { + throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.EITHER_APPLICATION_ID_OR_ASSIGNED_APPLICATION_ID_MUST_BE_PROVIDED)); + } + + ApplicationEvaluationEntity evaluationEntity = applicationEvaluationRepository.findByApplicationIdAndAssignedApplicationId(applicationId, assignedApplicationId); + + return (evaluationEntity != null) ? processEvaluationForm(evaluationEntity) : null; + } + + private ApplicationEvaluationFormResponse processEvaluationForm(ApplicationEvaluationEntity evaluationEntity){ + ApplicationEvaluationFormResponse response = new ApplicationEvaluationFormResponse(); + response.setApplicationId(evaluationEntity.getApplicationId()); + response.setNote(evaluationEntity.getNote()); + response.setStatus(evaluationEntity.getStatus()); + response.setAssignedApplicationId(evaluationEntity.getAssignedApplicationsEntity().getId()); + + EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByCallIdAndIsDeletedFalse(evaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getId()); + + if (evaluationFormEntity != null) { + response.setEvaluationFormId(evaluationFormEntity.getId()); + response.setApplicationEvaluationFormResponse(convertEvaluationFormToResponse(evaluationFormEntity, evaluationEntity)); + } + + return response; + } + + private ApplicationEvaluationFormResponseBean convertEvaluationFormToResponse(EvaluationFormEntity evaluationForm, ApplicationEvaluationEntity applicationEvaluationEntity) { + ApplicationEvaluationFormResponseBean applicationEvaluationFormResponseBean = createEvaluationFormResponse(evaluationForm); + + ApplicationEvaluationFormEntity applicationEvaluationFormEntity = applicationEvaluationFormRepository.findByEvaluationIdAndEvaluationFormId(applicationEvaluationEntity.getId(), evaluationForm.getId()); + + if(applicationEvaluationFormEntity!=null) { + List applicationEvaluationFormFieldEntities = applicationEvaluationFormFieldRepository.findByApplicationEvaluationFormId(applicationEvaluationFormEntity.getId()); + List evaluationFormFieldResponseBeans = createEvaluationFormFieldResponse(applicationEvaluationFormFieldEntities, applicationEvaluationFormEntity); + applicationEvaluationFormResponseBean.setFormFields(evaluationFormFieldResponseBeans); + } + + return applicationEvaluationFormResponseBean; + } + + private ApplicationEvaluationFormResponseBean createEvaluationFormResponse(EvaluationFormEntity evaluationFormEntity) { + ApplicationEvaluationFormResponseBean evaluationFormResponseBean = new ApplicationEvaluationFormResponseBean(); + evaluationFormResponseBean.setId(evaluationFormEntity.getId()); + evaluationFormResponseBean.setLabel(evaluationFormEntity.getLabel()); + evaluationFormResponseBean.setCallId(evaluationFormEntity.getCall().getId()); + evaluationFormResponseBean.setContent(evaluationFormDao.convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity).getContent()); + return evaluationFormResponseBean; + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java index 594aa24d..e5361e83 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationFormDao.java @@ -21,17 +21,13 @@ package net.gepafin.tendermanagement.dao; import org.springframework.stereotype.Component; import java.time.LocalDateTime; - import java.util.Collections; import java.util.List; - import java.util.Optional; - import java.util.Set; - import java.util.stream.Collectors; @Component public class EvaluationFormDao { @Autowired - private EvalualtionFormRepository evaluationFormRepository; + private EvaluationFormRepository evaluationFormRepository; @Autowired private CallDao callDao; diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 9a5dd397..7e0210e5 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -98,6 +98,7 @@ public enum UserActionContextEnum { GET_APPLICATION_EVALUATION("GET_APPLICATION_EVALUATION"), DELETE_APPLICATION_EVALUATION("DELETE_APPLICATION_EVALUATION"), CREATE_UPDATE_APPLICATION_EVALUATION_FORM("CREATE_UPDATE_APPLICATION_EVALUATION_FORM"), + GET_APPLICATION_EVALUATION_FORM("GET_APPLICATION_EVALUATION_FORM"), /** Beneficiary Preferred Call action context **/ CREATE_BENEFICIARY_PREFERRED_CALL("CREATE_BENEFICIARY_PREFERRED_CALL"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java new file mode 100644 index 00000000..7c806d39 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java @@ -0,0 +1,16 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +@Data +public class ApplicationEvaluationFormResponse { + + private Long evaluationFormId; + private Long applicationId; + private Long assignedApplicationId; + private String note; + private String status; + private ApplicationEvaluationFormResponseBean applicationEvaluationFormResponse; + + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponseBean.java new file mode 100644 index 00000000..804d5845 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponseBean.java @@ -0,0 +1,19 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +import java.util.List; + +@Data +public class ApplicationEvaluationFormResponseBean { + + private Long id; + + private String label; + + private Long callId; + + private List content; + + private List formFields; +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java index 4514205b..8e2fba81 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationEvaluationFormRepository.java @@ -16,4 +16,6 @@ public interface ApplicationEvaluationFormRepository extends JpaRepository { +public interface EvaluationFormRepository extends JpaRepository { EvaluationFormEntity findByCallIdAndIsDeletedFalse(Long callId); EvaluationFormEntity findByIdAndIsDeletedFalse(Long formId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java index 682e2999..51f0b52c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationEvaluationService.java @@ -2,12 +2,11 @@ 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.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; -import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; -import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; -import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; +import net.gepafin.tendermanagement.model.response.*; import java.util.List; @@ -26,4 +25,6 @@ public interface ApplicationEvaluationService { ApplicationEvaluationResponseBean createApplicationEvaluation(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, 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 604d5fd5..cfe4c9df 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -3,17 +3,20 @@ package net.gepafin.tendermanagement.service.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.ApplicationEvaluationDao; +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.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.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; +import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +39,9 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe @Autowired private ApplicationEvaluationService applicationEvaluationService; + @Autowired + private ApplicationService applicationService; + @Override @Transactional(rollbackFor = Exception.class) public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation( @@ -87,4 +93,11 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe return applicationEvaluationDao.createApplicationEvaluation(request,applicationRequestBean,evaluationFormId,evaluationId); } + @Override + @Transactional(readOnly = true) + public ApplicationEvaluationFormResponse getApplicationEvaluationForm(HttpServletRequest request, Long applicationId, Long assignedApplicationId) { + validator.validateUser(request); + return applicationEvaluationDao.getApplicationEvaluationForm(request,applicationId,assignedApplicationId); + } + } 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 8fe0c4ac..ff6bfc15 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 @@ -7,12 +7,11 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; 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.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; -import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; -import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; -import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; @@ -48,6 +47,7 @@ public interface ApplicationEvaluationApi { HttpServletRequest request, @Parameter(required = false) @RequestParam(value = "applicationId", required = false) Long applicationId, @Parameter( required = false) @RequestParam(value = "assignedApplicationId", required = false) Long assignedApplicationId); + @Operation(summary = "API to delete ApplicationEvaluation", responses = { @ApiResponse(responseCode = "200", description = "OK"), @@ -75,4 +75,19 @@ public interface ApplicationEvaluationApi { @Parameter(description = "The evaluation id", required = true) @PathVariable(value = "id", required = true) Long id, @Parameter(description = "The evaluation form ID", required = true) @RequestParam("evaluationFormId") Long evaluationFormId); + @Operation(summary = "Api to get an application evaluation form", + 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 = "", 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); + + } 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 cffaa7f7..de92247c 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 @@ -3,16 +3,14 @@ package net.gepafin.tendermanagement.web.rest.api.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; 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.response.ApplicationEvaluationResponse; -import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponseBean; -import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; -import net.gepafin.tendermanagement.model.response.EvaluationDocumentResponse; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -99,4 +97,16 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation .body(new Response<>(applicationEvaluationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CREATED_SUCCESSFULLY))); } + @Override + public ResponseEntity> getApplicationEvaluationForm(HttpServletRequest request, Long applicationId, Long assignedApplicationId) { + + /** This code is responsible for creating user action logs for the "get application evaluation form" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_APPLICATION_EVALUATION_FORM).build()); + + ApplicationEvaluationFormResponse applicationEvaluationFormResponse = applicationEvaluationService.getApplicationEvaluationForm(request,applicationId,assignedApplicationId); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(applicationEvaluationFormResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_EVALUATION_FORM_SUCCESS_MSG))); + + } + } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 6c824cbc..4f4891da 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -267,6 +267,7 @@ evaluationCriteria.invalid=This evaluation criterion does not belong to the curr assigned.application.not.found.with.id=Assigned application with this application ID not found either.application.or.assigned.application.id.required=Either applicationId or assignedApplicationId is required. evaluation.already.exists=An application evaluation already exists for this application ID. +application.evaluation.form.get.success = Application Evaluation Form Fetched Successfully. # Hub Messages hub_create_success=Hub created successfully @@ -362,3 +363,5 @@ evaluation.form.deleted.successfully=Evaluation form deleted successfully. evaluation.form.fetched.successfully=Evaluation form fetched successfully. evaluation.form.not.found=Evaluation form not found. +either.applicationId.or.assignedApplicationId.must.be.provided=Either applicationId or assignedApplicationId must be provided. + diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index cca4b808..03359586 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -260,6 +260,7 @@ application.evaluation.status.updated.successfully=Stato della valutazione dell' assigned.application.not.found.with.id=Applicazione assegnata con questo ID dell'applicazione non trovata either.application.or.assigned.application.id.required=? richiesto almeno uno tra applicationId o assignedApplicationId. evaluation.already.exists=Una valutazione dell'applicazione esiste gi? per questo ID applicazione. +application.evaluation.form.get.success =Modulo di valutazione della domanda recuperato correttamente.code application.assigned.success.msg =Domanda assegnata con successo application.already.assigned.msg =La domanda ? gi? assegnata @@ -352,3 +353,5 @@ evaluation.form.deleted.successfully=Modulo di valutazione eliminato con success evaluation.form.fetched.successfully=Modulo di valutazione recuperato con successo. evaluation.form.not.found=Modulo di valutazione non trovato. +either.applicationId.or.assignedApplicationId.must.be.provided = "È necessario fornire applicationId o assegnatoApplicationId." + From fbe126878700d6eb76127da08b27d99609783d18 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 30 Jan 2025 11:44:13 +0530 Subject: [PATCH 28/29] updated code --- src/main/resources/db/changelog/db.changelog-1.0.0.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 f357b08b..e9cc9cb3 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 @@ -2359,6 +2359,11 @@ - + + + From 4ae96705fa3d704b0de284e2a2059ec802944da3 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 30 Jan 2025 14:20:25 +0530 Subject: [PATCH 29/29] Added evaluation version in the evaluation API's response. --- .../dao/ApplicationEvaluationDao.java | 18 ++++++++++++++++-- .../entities/ApplicationEvaluationEntity.java | 3 +++ .../ApplicationEvaluationFormResponse.java | 2 ++ .../ApplicationEvaluationResponse.java | 3 +++ .../ApplicationEvaluationResponseBean.java | 2 ++ .../db/changelog/db.changelog-1.0.0.xml | 9 +++++++++ 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index edb69587..70ac9a4a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -165,6 +165,7 @@ public class ApplicationEvaluationDao { entity.setSuspendedDays(0L); entity.setStartDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); entity.setEndDate(DateTimeUtil.DateServerToUTC(application.getSubmissionDate().plusDays(30))); + entity.setEvaluationVersion(application.getEvaluationVersion()); entity.setStatus(ApplicationEvaluationStatusTypeEnum.OPEN.getValue()); return entity; } @@ -286,6 +287,7 @@ public class ApplicationEvaluationDao { response.setNote(entity.getNote()); response.setMotivation(entity.getMotivation()); response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus())); + response.setEvaluationVersion(EvaluationVersionEnum.valueOf(entity.getEvaluationVersion())); response.setEvaluationEndDate(entity.getEndDate()); response.setCreatedDate(entity.getCreatedDate()); response.setUpdatedDate(entity.getUpdatedDate()); @@ -635,6 +637,7 @@ public class ApplicationEvaluationDao { ApplicationEvaluationEntity oldApplicationEvaluation = null; ApplicationEntity application = applicationService.validateApplication(assignedApplications.get().getApplication().getId()); VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; + validateApplicationEvaluationRequest(req, application); if (existingEntityOptional.isPresent()) { entity = existingEntityOptional.get(); oldApplicationEvaluation = Utils.getClonedEntityForData(entity); @@ -706,7 +709,14 @@ public class ApplicationEvaluationDao { } } - private void updateAmendmentDocumentsAndFormFields(List applicationAmendmentRequestEntities, List amendmentFormFields) { + private void validateApplicationEvaluationRequest(ApplicationEvaluationRequest req, ApplicationEntity application) { + if(EvaluationVersionEnum.V2.getValue().equals(application.getEvaluationVersion())) { + req.setChecklist(null); + req.setCriteria(null); + } + } + + private void updateAmendmentDocumentsAndFormFields(List applicationAmendmentRequestEntities, List amendmentFormFields) { // Iterate through amendment request entities // @@ -1130,6 +1140,7 @@ public class ApplicationEvaluationDao { List applicationFormEntities = applicationFormRepository.findByApplicationId(applicationId); response.setApplicationId(application.getId()); response.setAssignedApplicationId(assignedApplications.getId()); + response.setEvaluationVersion(EvaluationVersionEnum.valueOf(application.getEvaluationVersion())); response.setNote(null); response.setMotivation(null); response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus())); @@ -2001,7 +2012,7 @@ public class ApplicationEvaluationDao { ApplicationEvaluationFormEntity applicationEvaluationFormEntity, List applicationEvaluationFormFieldEntities, EvaluationFormEntity evaluationFormEntity){ - ApplicationEvaluationFormFieldEntity applicationEvaluationFormFieldEntity = null; + ApplicationEvaluationFormFieldEntity applicationEvaluationFormFieldEntity = new ApplicationEvaluationFormFieldEntity(); validateFileUploadDocuments(applicationFormFieldRequestBean, evaluationFormEntity); VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; ApplicationEvaluationFormFieldEntity oldApplicationEvaluationFormFieldData = null; @@ -2018,6 +2029,7 @@ public class ApplicationEvaluationDao { break; } else { applicationEvaluationFormFieldEntity.setApplicationEvaluationForm(applicationEvaluationFormEntity); + applicationEvaluationFormFieldEntity.setIsDeleted(Boolean.FALSE); } } } @@ -2131,6 +2143,7 @@ public class ApplicationEvaluationDao { 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()); return response; @@ -2152,6 +2165,7 @@ public class ApplicationEvaluationDao { response.setApplicationId(evaluationEntity.getApplicationId()); response.setNote(evaluationEntity.getNote()); response.setStatus(evaluationEntity.getStatus()); + response.setEvaluationVersion(EvaluationVersionEnum.valueOf(evaluationEntity.getEvaluationVersion())); response.setAssignedApplicationId(evaluationEntity.getAssignedApplicationsEntity().getId()); EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByCallIdAndIsDeletedFalse(evaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getId()); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java index 6ab7b72c..045a1bdb 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java @@ -67,5 +67,8 @@ public class ApplicationEvaluationEntity extends BaseEntity{ @Column(name = "ACTIVE_DAYS") private Long activeDays; + + @Column(name = "evaluationVersion") + private String evaluationVersion; } 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 7c806d39..d58219dd 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationFormResponse.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; +import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; @Data public class ApplicationEvaluationFormResponse { @@ -10,6 +11,7 @@ public class ApplicationEvaluationFormResponse { private Long assignedApplicationId; private String note; private String status; + private EvaluationVersionEnum evaluationVersion; private ApplicationEvaluationFormResponseBean applicationEvaluationFormResponse; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java index c2fcd6cb..4afd57eb 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java @@ -3,6 +3,7 @@ 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; @@ -43,4 +44,6 @@ public class ApplicationEvaluationResponse { private BigDecimal amountAccepted; private LocalDateTime dateAccepted; private LocalDateTime dateRejected; + private EvaluationVersionEnum evaluationVersion; + } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java index cf4b5865..b8adf7a6 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponseBean.java @@ -2,6 +2,7 @@ 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; @@ -11,5 +12,6 @@ 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/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index e9cc9cb3..cdc7e6f1 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 @@ -2366,4 +2366,13 @@ columnName="field_value" newDataType="TEXT"/> + + + + + + + + +