diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index cb1e14c3..3f144d87 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -521,10 +521,63 @@ public class ApplicationDao { } else { List applicationFormEntities = applicationFormRepository.findByApplicationId(applicationEntity.getId()); - for (ApplicationFormEntity applicationFormEntity : applicationFormEntities) { - FormEntity form = formService.validateForm(applicationFormEntity.getForm().getId()); - formEntities.add(form); - addFormApplication(form, applicationEntity, formApplicationResponses); + List sequencedApplicationFormEntity = new ArrayList<>(); + Long formIdMiddle = null; + List flowEdgesList = flowEdgesRepository.findBySourceIdAndCallId( + applicationEntity.getCall().getInitialForm(), applicationEntity.getCall().getId()); + + if (!flowEdgesList.isEmpty()) { + if (flowEdgesList.size() == 1) { + formIdMiddle = flowEdgesList.get(0).getTargetId(); + } else { + List nextFormIds = flowEdgesList.stream() + .map(FlowEdgesEntity::getTargetId) + .toList(); + + FlowDataEntity flowDataEntity = flowDataRepository.findByFormIdAndCallId( + applicationEntity.getCall().getInitialForm(), applicationEntity.getCall().getId()); + + ApplicationFormFieldEntity applicationFormFieldEntity = applicationFormFieldRepository + .findByFieldIdAndApplicationFormFormIdAndApplicationFormApplicationId( + flowDataEntity.getChoosenField(), applicationEntity.getCall().getInitialForm(), applicationEntity.getId()) + .orElse(null); + + if (applicationFormFieldEntity != null) { + formIdMiddle = flowDataRepository.findByChoosenValueAndFormIdIn( + applicationFormFieldEntity.getFieldValue(), nextFormIds) + .map(FlowDataEntity::getFormId) + .orElse(null); + } + } + } + List applicationFormIds = new ArrayList<>(); + applicationFormIds.add(applicationEntity.getCall().getInitialForm()); + if (formIdMiddle != null && formIdMiddle > 0) { + applicationFormIds.add(formIdMiddle); + } + applicationFormIds.add(applicationEntity.getCall().getFinalForm()); + if (applicationFormEntities.size() == 3) { + for (Long applicationFormId : applicationFormIds) { + for (ApplicationFormEntity applicationFormEntity : applicationFormEntities) { + if (applicationFormEntity.getForm().getId().equals(applicationFormId)) { + sequencedApplicationFormEntity.add(applicationFormEntity); + FormEntity form = formService.validateForm(applicationFormId); + formEntities.add(form); + addFormApplication(form, applicationEntity, formApplicationResponses); + } + } + } + }else { + ApplicationFormEntity applicationFormEntity1=applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(),applicationEntity.getCall().getInitialForm()); + sequencedApplicationFormEntity.add(applicationFormEntity1); + FormEntity form1 = formService.validateForm(applicationFormEntity1.getForm().getId()); + formEntities.add(form1); + addFormApplication(form1, applicationEntity, formApplicationResponses); + ApplicationFormEntity applicationFormEntity2=applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(),applicationEntity.getCall().getFinalForm()); + sequencedApplicationFormEntity.add(applicationFormEntity2); + FormEntity form2= formService.validateForm(applicationFormEntity2.getForm().getId()); + formEntities.add(form2); + addFormApplication(form2, applicationEntity, formApplicationResponses); } }