diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 75e6bcc4..609eb0db 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -1,6 +1,9 @@ package net.gepafin.tendermanagement.dao; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; @@ -24,6 +27,7 @@ import java.util.*; import java.util.stream.Collectors; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; +import static org.apache.commons.lang3.StringUtils.isNumeric; @Component public class ApplicationEvaluationDao { @@ -48,7 +52,6 @@ public class ApplicationEvaluationDao { @Autowired private FormRepository formRepository; - @Autowired private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository; @@ -163,10 +166,8 @@ public class ApplicationEvaluationDao { } private List getMappedFieldsForCriteria(Long evaluationCriteriaId, Long applicationId) { - List criteriaFormFields = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaId); List mappedFields = new ArrayList<>(); - Set uniqueFieldIds = new HashSet<>(); List applicationForms = applicationFormRepository.findByApplicationId(applicationId); @@ -178,28 +179,31 @@ public class ApplicationEvaluationDao { CriteriaMappedField mappedField = new CriteriaMappedField(); mappedField.setId(formFieldId); - FormEntity formEntity = formRepository.findById(formField.getFormId()).orElse(null); + FormEntity formEntity = getFormEntity(formField.getFormId()); if (formEntity != null) { List contentBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); - contentBeans.stream().filter(contentBean -> contentBean.getId().equals(formFieldId)).findFirst().ifPresent(contentBean -> { - String label = contentBean.getLabel(); - if (contentBean.getSettings() != null) { - for (SettingResponseBean setting : contentBean.getSettings()) { - if ("label".equals(setting.getName())) { - label = setting.getValue() != null ? setting.getValue().toString() : label; - break; + contentBeans.stream() + .filter(contentBean -> contentBean.getId().equals(formFieldId)) + .findFirst() + .ifPresent(contentBean -> { + mappedField.setFieldLabel(getLabelForField(contentBean)); + switch (contentBean.getName()) { + case "fileupload": + mapFileFieldDetails(mappedField, formFieldId, applicationForm.getId(), applicationId); + break; + + case "checkboxes": + populateOptionFieldsAsFieldValue(mappedField, formFieldId, applicationForm, applicationId, contentBean); + break; + case "paragraph": + handleParagraphField(applicationId, formField, contentBean, mappedField); + break; + default: + populateOptionFieldsAsFieldValue(mappedField, formFieldId, applicationForm, applicationId, contentBean); } - } - } - mappedField.setFieldLabel(label); - }); + }); } - Optional formFieldEntityOptional = applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( - formFieldId, applicationForm.getId(), applicationId); - - formFieldEntityOptional.ifPresent(field -> mappedField.setFieldValue(field.getFieldValue())); - mappedFields.add(mappedField); uniqueFieldIds.add(formFieldId); } @@ -208,6 +212,58 @@ public class ApplicationEvaluationDao { return mappedFields; } + private FormEntity getFormEntity(Long formId) { + return formRepository.findById(formId).orElse(null); + } + + private String getLabelForField(ContentResponseBean contentBean) { + String label = contentBean.getLabel(); + if (contentBean.getSettings() != null) { + for (SettingResponseBean setting : contentBean.getSettings()) { + if ("label".equals(setting.getName())) { + label = setting.getValue() != null ? setting.getValue().toString() : label; + break; + } + } + } + return label; + } + + private void mapFileFieldDetails(CriteriaMappedField mappedField, String formFieldId, Long applicationFormId, Long applicationId) { + Optional formFieldEntityOptional = applicationFormFieldRepository + .findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(formFieldId, applicationFormId, applicationId); + + if (formFieldEntityOptional.isPresent()) { + String[] documentIds = formFieldEntityOptional.get().getFieldValue().split(","); + List documentResponseBeans = new ArrayList<>(); + + for (String docId : documentIds) { + Long documentId = Long.valueOf(docId.trim()); + documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> { + DocumentResponseBean responseBean = new DocumentResponseBean(); + responseBean.setId(documentEntity.getId()); + responseBean.setName(documentEntity.getFileName()); + responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType())); + responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource())); + responseBean.setSourceId(documentEntity.getSourceId()); + responseBean.setFilePath(documentEntity.getFilePath()); + responseBean.setCreatedDate(documentEntity.getCreatedDate()); + responseBean.setUpdatedDate(documentEntity.getUpdatedDate()); + documentResponseBeans.add(responseBean); + }); + } + mappedField.setFieldValue(documentResponseBeans); + } + } + + + private void mapNonFileFieldDetails(CriteriaMappedField mappedField, String formFieldId, Long applicationFormId, Long applicationId) { + applicationFormFieldRepository + .findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(formFieldId, applicationFormId, applicationId) + .ifPresent(field -> mappedField.setFieldValue(field.getFieldValue())); + } + + private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List checklistEntities) { List checklistResponsesFromEntity = entity.getChecklist() != null ? @@ -562,57 +618,23 @@ public class ApplicationEvaluationDao { return response; } - private void setCriteriaResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, - List evaluationCriterias) { + private void setCriteriaResponses(ApplicationEvaluationEntity entity, Long applicationId, + ApplicationEvaluationResponse response, + List evaluationCriterias) { - List criteriaResponses = entity.getCriteria() != null ? Utils.convertJsonToList(entity.getCriteria(), new TypeReference>() { - }) : getCriteriaResponse(applicationId); + List criteriaResponses = getInitialCriteriaResponses(entity, applicationId); criteriaResponses.forEach(criteriaResponse -> { - EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream() - .filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())).findFirst().orElse(null); - - List applicationForms = applicationFormRepository.findByApplicationId(applicationId); - Map mappedFieldMap = new HashMap<>(); + EvaluationCriteriaEntity matchingEvaluationCriteria = + findMatchingEvaluationCriteria(criteriaResponse, evaluationCriterias); if (matchingEvaluationCriteria != null) { + List applicationForms = applicationFormRepository.findByApplicationId(applicationId); + Map mappedFieldMap = populateMappedFields( + matchingEvaluationCriteria, applicationForms, applicationId); + criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue()); criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore()); - - List criteriaFormFields = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(matchingEvaluationCriteria.getId()); - - for (ApplicationFormEntity applicationForm : applicationForms) { - for (CriteriaFormFieldEntity criteriaFormField : criteriaFormFields) { - String formFieldId = criteriaFormField.getFormFieldId(); - if (!mappedFieldMap.containsKey(formFieldId)) { - CriteriaMappedField mappedField = new CriteriaMappedField(); - mappedField.setId(formFieldId); - FormEntity formEntity = formRepository.findById(criteriaFormField.getFormId()).orElse(null); - - if (formEntity != null) { - List contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); - contentResponseBeans.stream().filter(bean -> bean.getId().equals(formFieldId)).findFirst().ifPresent(contentResponseBean -> { - String label = contentResponseBean.getLabel(); - if (contentResponseBean.getSettings() != null) { - for (SettingResponseBean setting : contentResponseBean.getSettings()) { - if ("label".equals(setting.getName())) { - label = setting.getValue() != null ? setting.getValue().toString() : label; - break; - } - } - } - mappedField.setFieldLabel(label); - }); - } - Optional formFieldEntityOptional = - applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( - formFieldId, applicationForm.getId(), applicationId); - - formFieldEntityOptional.ifPresent(formField -> mappedField.setFieldValue(formField.getFieldValue())); - mappedFieldMap.put(formFieldId, mappedField); - } - } - } criteriaResponse.setCriteriaMappedFields(new ArrayList<>(mappedFieldMap.values())); } }); @@ -620,6 +642,159 @@ public class ApplicationEvaluationDao { response.setCriteria(criteriaResponses); } + private List getInitialCriteriaResponses(ApplicationEvaluationEntity entity, Long applicationId) { + return entity.getCriteria() != null + ? Utils.convertJsonToList(entity.getCriteria(), new TypeReference>() {}) + : getCriteriaResponse(applicationId); + } + + private EvaluationCriteriaEntity findMatchingEvaluationCriteria(CriteriaResponse criteriaResponse, + List evaluationCriterias) { + return evaluationCriterias.stream() + .filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())) + .findFirst() + .orElse(null); + } + + private Map populateMappedFields(EvaluationCriteriaEntity matchingEvaluationCriteria, + List applicationForms, + Long applicationId) { + Map mappedFieldMap = new HashMap<>(); + List criteriaFormFields = criteriaFormFieldRepository + .findByEvaluationCriteriaIdAndIsDeletedFalse(matchingEvaluationCriteria.getId()); + + for (ApplicationFormEntity applicationForm : applicationForms) { + for (CriteriaFormFieldEntity criteriaFormField : criteriaFormFields) { + String formFieldId = criteriaFormField.getFormFieldId(); + if (!mappedFieldMap.containsKey(formFieldId)) { + CriteriaMappedField mappedField = new CriteriaMappedField(); + populateMappedField(mappedField, formFieldId, criteriaFormField, applicationForm, applicationId); + mappedFieldMap.put(formFieldId, mappedField); + } + } + } + + return mappedFieldMap; + } + + private void populateMappedField(CriteriaMappedField mappedField, String formFieldId, + CriteriaFormFieldEntity criteriaFormField, + ApplicationFormEntity applicationForm, Long applicationId) { + mappedField.setId(formFieldId); + formRepository.findById(criteriaFormField.getFormId()).ifPresent(formEntity -> { + List contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); + contentResponseBeans.stream().filter(bean -> bean.getId().equals(formFieldId)).findFirst().ifPresent(contentResponseBean -> { + String label = getLabel(contentResponseBean); + mappedField.setFieldLabel(label); + switch (contentResponseBean.getName()) { + case "fileupload": + populateFileDetailsAsFieldValue(mappedField, formFieldId, applicationForm, applicationId); + break; + + case "checkboxes": + populateOptionFieldsAsFieldValue(mappedField, formFieldId, applicationForm, applicationId, contentResponseBean); + break; + + case "paragraph": + handleParagraphField(applicationId, criteriaFormField, contentResponseBean, mappedField); + break; + + default: + populateOptionFieldsAsFieldValue(mappedField, formFieldId, applicationForm, applicationId, contentResponseBean); + } + }); + }); + } + + + private void populateFileDetailsAsFieldValue(CriteriaMappedField mappedField, String formFieldId, + ApplicationFormEntity applicationForm, Long applicationId) { + applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( + formFieldId, applicationForm.getId(), applicationId) + .ifPresent(formField -> { + if (formField.getFieldValue() != null) { + List documentResponseBeans = new ArrayList<>(); + for (String docId : formField.getFieldValue().split(",")) { + Long documentId = Long.valueOf(docId.trim()); + documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> { + DocumentResponseBean responseBean = createDocumentResponseBean(documentEntity); + documentResponseBeans.add(responseBean); + }); + } + // Set the list of DocumentResponseBean directly + mappedField.setFieldValue(documentResponseBeans); + } + }); + } + + private String getLabel(ContentResponseBean contentResponseBean) { + String label = contentResponseBean.getLabel(); + if (contentResponseBean.getSettings() != null) { + for (SettingResponseBean setting : contentResponseBean.getSettings()) { + if ("label".equals(setting.getName())) { + label = setting.getValue() != null ? setting.getValue().toString() : label; + break; + } + } + } + return label; + } + private void populateOptionFieldsAsFieldValue(CriteriaMappedField mappedField, String formFieldId, ApplicationFormEntity applicationForm, Long applicationId, ContentResponseBean contentBean) { + ObjectMapper objectMapper = new ObjectMapper(); + findFormFieldValue(applicationId, formFieldId).ifPresent(formField -> { + Object value = formField.getFieldValue(); + List labels = new ArrayList<>(); + if (value instanceof String) { + String fieldValue = (String) value; + if (fieldValue.contains(",")) { + try { + List parsedValue = objectMapper.readValue(fieldValue, new TypeReference>() {}); + parsedValue.forEach(item -> addLabelToList(labels, item, contentBean)); + } catch (JsonProcessingException e) { + + String[] fallbackValues = fieldValue.split(","); + for (String item : fallbackValues) { + addLabelToList(labels, item.trim(), contentBean); + } + } + mappedField.setFieldValue(!labels.isEmpty() ? labels : null); + } else { + + addLabelToList(labels, fieldValue.trim(), contentBean); + mappedField.setFieldValue(!labels.isEmpty() ? labels.get(0) : null); + } + } else if (value instanceof List) { + + List parsedValue = (List) value; + parsedValue.forEach(item -> addLabelToList(labels, item, contentBean)); + mappedField.setFieldValue(!labels.isEmpty() ? labels : null); + } + }); + } + + private void addLabelToList(List labels, Object item, ContentResponseBean contentBean) { + if (item instanceof String) { + Object label = PdfDao.findLabelInOptions(contentBean.getSettings(), item); + if (label != null) { + labels.add(label.toString()); + } + } + } + + + private DocumentResponseBean createDocumentResponseBean(DocumentEntity documentEntity) { + DocumentResponseBean responseBean = new DocumentResponseBean(); + responseBean.setId(documentEntity.getId()); + responseBean.setName(documentEntity.getFileName()); + responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType())); + responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource())); + responseBean.setSourceId(documentEntity.getSourceId()); + responseBean.setFilePath(documentEntity.getFilePath()); + responseBean.setCreatedDate(documentEntity.getCreatedDate()); + responseBean.setUpdatedDate(documentEntity.getUpdatedDate()); + return responseBean; + } + private void setChecklistResponses(ApplicationEvaluationEntity entity, Long applicationId, ApplicationEvaluationResponse response, List checklistEntities) { @@ -693,8 +868,6 @@ public class ApplicationEvaluationDao { fieldResponse.setFileDetail(documentResponseBeans); } - - // Mark this field ID as processed to prevent duplicates processedFieldIds.add(fieldResponse.getId()); } }); @@ -721,65 +894,212 @@ public class ApplicationEvaluationDao { response.setEvaluationDate(application.getSubmissionDate() != null ? application.getSubmissionDate().plusDays(30) : null); } + private Optional findFormFieldValue(Long applicationId, String formFieldId) { + return applicationFormRepository.findByApplicationId(applicationId).stream() + .flatMap(applicationForm -> applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( + formFieldId, applicationForm.getId(), applicationId).stream()) + .findFirst(); + } List getCriteriaResponse(Long applicationId) { + CallEntity call = getCallEntityByApplicationId(applicationId); + List evaluationCriterias = getEvaluationCriterias(call); - CallEntity call = callRepository.findCallEntityByApplicationId(applicationId); - List evaluationCriterias = evaluationCriteriaRepository.findByCallId(call.getId()); + return evaluationCriterias.stream() + .map(criteria -> buildCriteriaResponse(applicationId, criteria)) + .collect(Collectors.toList()); + } - List criteriaResponses = evaluationCriterias.stream().map(criteria -> { - CriteriaResponse response = new CriteriaResponse(); - response.setId(criteria.getId()); - response.setLabel(criteria.getLookupData().getValue()); - response.setScore(null); - response.setMaxScore(criteria.getScore()); - response.setValid(null); + private CallEntity getCallEntityByApplicationId(Long applicationId) { + return callRepository.findCallEntityByApplicationId(applicationId); + } - List criteriaFormFields = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(criteria.getId()); + private List getEvaluationCriterias(CallEntity call) { + return evaluationCriteriaRepository.findByCallId(call.getId()); + } - List mappedFields = new ArrayList<>(); - Set processedFormFieldIds = new HashSet<>(); + private CriteriaResponse buildCriteriaResponse(Long applicationId, EvaluationCriteriaEntity criteria) { + CriteriaResponse response = new CriteriaResponse(); + response.setId(criteria.getId()); + response.setLabel(criteria.getLookupData().getValue()); + response.setScore(null); + response.setMaxScore(criteria.getScore()); + response.setValid(null); - for (CriteriaFormFieldEntity criteriaFormField : criteriaFormFields) { - if (processedFormFieldIds.contains(criteriaFormField.getFormFieldId())) { - continue; - } + List mappedFields = getMappedFields(applicationId, criteria); + response.setCriteriaMappedFields(mappedFields); + return response; + } - CriteriaMappedField mappedField = new CriteriaMappedField(); - mappedField.setId(criteriaFormField.getFormFieldId()); + private List getMappedFields(Long applicationId, EvaluationCriteriaEntity criteria) { + List criteriaFormFields = getCriteriaFormFields(criteria); - FormEntity formEntity = formRepository.findById(criteriaFormField.getFormId()).orElse(null); - if (formEntity != null) { - List contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); - contentResponseBeans.stream().filter(bean -> bean.getId().equals(criteriaFormField.getFormFieldId())).findFirst().ifPresent(contentResponseBean -> { - String label = contentResponseBean.getLabel(); - if (contentResponseBean.getSettings() != null) { - for (SettingResponseBean setting : contentResponseBean.getSettings()) { - if ("label".equals(setting.getName())) { - label = setting.getValue() != null ? setting.getValue().toString() : label; - break; - } - } - } - mappedField.setFieldLabel(label); - }); - } + List mappedFields = new ArrayList<>(); + Set processedFormFieldIds = new HashSet<>(); - applicationFormRepository.findByApplicationId(applicationId).stream().flatMap( - applicationForm -> applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId(criteriaFormField.getFormFieldId(), - applicationForm.getId(), applicationId).stream()).findFirst().ifPresent(formField -> mappedField.setFieldValue(formField.getFieldValue())); - - mappedFields.add(mappedField); - processedFormFieldIds.add(criteriaFormField.getFormFieldId()); + for (CriteriaFormFieldEntity criteriaFormField : criteriaFormFields) { + if (processedFormFieldIds.contains(criteriaFormField.getFormFieldId())) { + continue; } - response.setCriteriaMappedFields(mappedFields); - return response; - }).collect(Collectors.toList()); + CriteriaMappedField mappedField = mapField(applicationId, criteriaFormField); + mappedFields.add(mappedField); + processedFormFieldIds.add(criteriaFormField.getFormFieldId()); + } - return criteriaResponses; + return mappedFields; } + private List getCriteriaFormFields(EvaluationCriteriaEntity criteria) { + return criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(criteria.getId()); + } + + private CriteriaMappedField mapField(Long applicationId, CriteriaFormFieldEntity criteriaFormField) { + CriteriaMappedField mappedField = new CriteriaMappedField(); + mappedField.setId(criteriaFormField.getFormFieldId()); + + FormEntity formEntity = formRepository.findById(criteriaFormField.getFormId()).orElse(null); + if (formEntity != null) { + List contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); + contentResponseBeans.stream() + .filter(bean -> bean.getId().equals(criteriaFormField.getFormFieldId())) + .findFirst() + .ifPresent(contentResponseBean -> processFieldValue(applicationId, criteriaFormField, contentResponseBean, mappedField)); + } + + return mappedField; + } + + private void processFieldValue(Long applicationId, CriteriaFormFieldEntity criteriaFormField, ContentResponseBean contentResponseBean, CriteriaMappedField mappedField) { + String label = getLabelFromSettings(contentResponseBean); + + mappedField.setFieldLabel(label); + + boolean isCheckbox = "checkboxes".equals(contentResponseBean.getName()); + boolean isFileUpload = "fileupload".equals(contentResponseBean.getName()); + boolean isParagraph = "paragraph".equals(contentResponseBean.getName()); + + if (isFileUpload) { + handleFileUpload(applicationId, criteriaFormField, mappedField); + } else if (isCheckbox) { + handleCheckbox(applicationId, criteriaFormField, contentResponseBean, mappedField); + } + else if (isParagraph) { + handleParagraphField(applicationId, criteriaFormField, contentResponseBean, mappedField); + } + else { + handleOtherFields(applicationId, criteriaFormField, contentResponseBean, mappedField); + } + } + private void handleParagraphField(Long applicationId, CriteriaFormFieldEntity criteriaFormField, ContentResponseBean contentResponseBean, CriteriaMappedField mappedField) { + findFormFieldValue(applicationId, criteriaFormField.getFormFieldId()).ifPresent(formField -> { + String paragraph = contentResponseBean.getSettings().stream() + .filter(setting -> "text".equals(setting.getName())) + .map(SettingResponseBean::getValue) + .map(Object::toString) + .findFirst() + .orElse(null); + if (paragraph != null) { + mappedField.setFieldValue(paragraph.trim()); + } + + }); + } + + private String getLabelFromSettings(ContentResponseBean contentResponseBean) { + String label = contentResponseBean.getLabel(); + if (contentResponseBean.getSettings() != null) { + for (SettingResponseBean setting : contentResponseBean.getSettings()) { + if ("label".equals(setting.getName())) { + label = setting.getValue() != null ? setting.getValue().toString() : label; + break; + } + } + } + return label; + } + + private void handleFileUpload(Long applicationId, CriteriaFormFieldEntity criteriaFormField, CriteriaMappedField mappedField) { + List documentResponseBeans = new ArrayList<>(); + findFormFieldValue(applicationId, criteriaFormField.getFormFieldId()).ifPresent(formField -> { + String fieldValue = formField.getFieldValue(); + if (fieldValue != null) { + String[] fieldValues = fieldValue.split(","); + for (String value : fieldValues) { + Long documentId = Long.valueOf(value.trim()); + documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> { + DocumentResponseBean responseBean = mapDocumentEntityToResponse(documentEntity); + documentResponseBeans.add(responseBean); + }); + } + } + mappedField.setFieldValue(!documentResponseBeans.isEmpty() ? documentResponseBeans : null); + }); + } + + private DocumentResponseBean mapDocumentEntityToResponse(DocumentEntity documentEntity) { + DocumentResponseBean responseBean = new DocumentResponseBean(); + responseBean.setId(documentEntity.getId()); + responseBean.setName(documentEntity.getFileName()); + responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType())); + responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource())); + responseBean.setSourceId(documentEntity.getSourceId()); + responseBean.setFilePath(documentEntity.getFilePath()); + responseBean.setCreatedDate(documentEntity.getCreatedDate()); + responseBean.setUpdatedDate(documentEntity.getUpdatedDate()); + return responseBean; + } + + private void handleCheckbox(Long applicationId, CriteriaFormFieldEntity criteriaFormField, ContentResponseBean contentResponseBean, CriteriaMappedField mappedField) { + ObjectMapper objectMapper = new ObjectMapper(); + findFormFieldValue(applicationId, criteriaFormField.getFormFieldId()).ifPresent(formField -> { + Object value = formField.getFieldValue(); + List labels = new ArrayList<>(); + + if (value instanceof String) { + List parsedValue = parseJsonValue((String) value, objectMapper); + addLabelsFromParsedValues(parsedValue, contentResponseBean, labels); + } else if (value instanceof List) { + List parsedValue = (List) value; + addLabelsFromParsedValues(parsedValue, contentResponseBean, labels); + } + + mappedField.setFieldValue(!labels.isEmpty() ? (labels.size() == 1 ? labels.get(0) : labels) : null); + }); + } + + private List parseJsonValue(String value, ObjectMapper objectMapper) { + try { + return objectMapper.readValue(value, new TypeReference>() {}); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + private void addLabelsFromParsedValues(List parsedValue, ContentResponseBean contentResponseBean, List labels) { + for (Object item : parsedValue) { + if (item instanceof String) { + Object label = PdfDao.findLabelInOptions(contentResponseBean.getSettings(), item); + if (label != null) { + labels.add(label.toString()); + } + } + } + } + + private void handleOtherFields(Long applicationId, CriteriaFormFieldEntity criteriaFormField, ContentResponseBean contentResponseBean, CriteriaMappedField mappedField) { + findFormFieldValue(applicationId, criteriaFormField.getFormFieldId()).ifPresent(formField -> { + String fieldValue = formField.getFieldValue() != null ? formField.getFieldValue().trim() : null; + Object label = PdfDao.findLabelInOptions(contentResponseBean.getSettings(), fieldValue); + if (label != null) { + mappedField.setFieldValue(fieldValue != null && !fieldValue.isEmpty() && !fieldValue.contains(",") + ? label.toString() + : Arrays.asList(label.toString())); + } + }); + } + + List getChecklistResponse(Long applicationId) { CallEntity call = callRepository.findCallEntityByApplicationId(applicationId); @@ -852,8 +1172,6 @@ public class ApplicationEvaluationDao { } fieldResponse.setFileDetail(documentResponseBeans); - - // Now add fieldResponse to the list fieldResponses.add(fieldResponse); } } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CriteriaMappedField.java b/src/main/java/net/gepafin/tendermanagement/model/response/CriteriaMappedField.java index 8c62e178..e94e0f73 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CriteriaMappedField.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CriteriaMappedField.java @@ -1,10 +1,11 @@ package net.gepafin.tendermanagement.model.response; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; @Data public class CriteriaMappedField { private String id; private String fieldLabel; - private String fieldValue; + private Object fieldValue; }