resolved conflicts
This commit is contained in:
@@ -41,6 +41,10 @@ import org.springframework.security.saml2.provider.service.web.DefaultRelyingPar
|
||||
import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationResolver;
|
||||
import org.springframework.security.saml2.provider.service.web.authentication.OpenSaml4AuthenticationRequestResolver;
|
||||
import org.springframework.security.saml2.provider.service.web.authentication.Saml2AuthenticationRequestResolver;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
@Configuration
|
||||
public class SamlConfig {
|
||||
@@ -123,28 +127,34 @@ public class SamlConfig {
|
||||
return authnRequest;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Saml2AuthenticationRequestResolver authenticationRequestResolver(RelyingPartyRegistrationRepository registrations) {
|
||||
@Bean
|
||||
public Saml2AuthenticationRequestResolver authenticationRequestResolver(RelyingPartyRegistrationRepository registrations) {
|
||||
RelyingPartyRegistrationResolver registrationResolver = new DefaultRelyingPartyRegistrationResolver(registrations);
|
||||
OpenSaml4AuthenticationRequestResolver authenticationRequestResolver = new OpenSaml4AuthenticationRequestResolver(registrationResolver);
|
||||
|
||||
authenticationRequestResolver.setAuthnRequestCustomizer((context) -> {
|
||||
// Set the required attributes
|
||||
AuthnRequest authnRequest = context.getAuthnRequest();
|
||||
authnRequest.setID("_" + UUID.randomUUID().toString()); // Add a unique ID
|
||||
authnRequest.setVersion(SAMLVersion.VERSION_20); // Ensure version is 2.0
|
||||
authnRequest.setProtocolBinding(SAMLConstants.SAML2_POST_BINDING_URI); // HTTP-POST
|
||||
|
||||
// Set Authentication Context
|
||||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
|
||||
String hubId = (String) request.getAttribute("hubId");
|
||||
|
||||
logger.info("Hub id " + hubId);
|
||||
|
||||
// Continue with normal AuthnRequest configuration
|
||||
AuthnRequest authnRequest = context.getAuthnRequest();
|
||||
authnRequest.setID("_" + UUID.randomUUID().toString()+":"+hubId);
|
||||
authnRequest.setVersion(SAMLVersion.VERSION_20);
|
||||
authnRequest.setProtocolBinding(SAMLConstants.SAML2_POST_BINDING_URI);
|
||||
authnRequest.setRequestedAuthnContext(buildRequestedAuthnContext());
|
||||
|
||||
|
||||
// Log the SAML AuthnRequest after setting context
|
||||
String samlRequest = SamlRequestLogger.convertSAMLObjectToString(authnRequest);
|
||||
logger.info("SAML AuthnRequest after setting context: " + samlRequest);
|
||||
});
|
||||
|
||||
return authenticationRequestResolver;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private RequestedAuthnContext buildRequestedAuthnContext() {
|
||||
AuthnContextClassRefBuilder authnContextClassRefBuilder = new AuthnContextClassRefBuilder();
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.gepafin.tendermanagement.config;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
@Component
|
||||
public class SamlRequestFilter extends OncePerRequestFilter {
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
||||
throws ServletException, IOException {
|
||||
String hub = request.getParameter("hubId");
|
||||
if (hub != null) {
|
||||
request.setAttribute("hubId", hub); // Store the hub ID as an attribute
|
||||
}
|
||||
filterChain.doFilter(request, response);
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,14 @@
|
||||
package net.gepafin.tendermanagement.config;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -13,6 +18,8 @@ import org.springframework.security.saml2.provider.service.authentication.Saml2A
|
||||
import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication;
|
||||
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
@@ -62,6 +69,27 @@ public class SamlSuccessHandler implements AuthenticationSuccessHandler {
|
||||
samlResponseLogEntity.setToken(token);
|
||||
samlResponseLogRepository.save(samlResponseLogEntity);
|
||||
|
||||
|
||||
// Extracting raw SAML response
|
||||
String samlResponse = samlAuth.getSaml2Response();
|
||||
logger.info("Raw SAML Response: " + samlResponse);
|
||||
|
||||
// If samlResponse is already in XML format, do not Base64 decode it
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
factory.setNamespaceAware(true);
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
Document document = builder.parse(new ByteArrayInputStream(samlResponse.getBytes())); // Remove the Base64 decoding
|
||||
|
||||
// Extracting ID, InResponseTo, and IssueInstant from the Response element
|
||||
Element responseElement = (Element) document.getElementsByTagNameNS("urn:oasis:names:tc:SAML:2.0:protocol", "Response").item(0);
|
||||
String responseId = responseElement.getAttribute("ID");
|
||||
String inResponseTo = responseElement.getAttribute("InResponseTo");
|
||||
String issueInstant = responseElement.getAttribute("IssueInstant");
|
||||
|
||||
logger.info("SAML Response ID: " + responseId);
|
||||
logger.info("InResponseTo: " + inResponseTo);
|
||||
logger.info("IssueInstant: " + issueInstant);
|
||||
|
||||
String redirectUrl = feBaseUrl;
|
||||
|
||||
logger.info("SAML login successful for user: " + principal.getName());
|
||||
|
||||
@@ -15,6 +15,7 @@ import org.springframework.security.config.annotation.web.configurers.AbstractHt
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.security.saml2.provider.service.web.Saml2WebSsoAuthenticationRequestFilter;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
|
||||
@@ -118,15 +119,11 @@ public class SecurityConfig {
|
||||
)
|
||||
.addFilterBefore(corsFilter(), UsernamePasswordAuthenticationFilter.class)
|
||||
.addFilterBefore(new JWTFilter(tokenProvider), UsernamePasswordAuthenticationFilter.class)
|
||||
// Add SAML2 login configuration (for BENEFICIARI)
|
||||
/*
|
||||
* .saml2Login(saml -> saml.loginPage("/saml/login") // Entry point for SAML
|
||||
* login .defaultSuccessUrl("/") // Redirect after successful SAML login );
|
||||
*/
|
||||
.saml2Login(saml -> saml.defaultSuccessUrl("/").successHandler(samlSuccessHandler)
|
||||
.addFilterBefore(new SamlRequestFilter(), Saml2WebSsoAuthenticationRequestFilter.class) // Add the custom SAML filter
|
||||
.saml2Login(saml -> saml.defaultSuccessUrl("/")
|
||||
.successHandler(samlSuccessHandler)
|
||||
.failureHandler(samlFailureHandler));
|
||||
|
||||
|
||||
return http.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -240,5 +240,6 @@ public class GepafinConstant {
|
||||
public static final String HUB_GET_ALL_SUCCESS = "hub_get_all_success";
|
||||
public static final String HUB_DELETE_SUCCESS = "hub_delete_success";
|
||||
public static final String HUB_NOT_FOUND = "hub_not_found";
|
||||
public static final String EVALUATIONCRITERIA_INVALID = "evaluationCriteria.invalid";
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ import net.gepafin.tendermanagement.config.Translator;
|
||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||
import net.gepafin.tendermanagement.entities.CallEntity;
|
||||
import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity;
|
||||
import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity;
|
||||
import net.gepafin.tendermanagement.entities.DocumentEntity;
|
||||
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
|
||||
import net.gepafin.tendermanagement.entities.FaqEntity;
|
||||
@@ -47,6 +48,7 @@ import net.gepafin.tendermanagement.model.request.LookUpDataReq;
|
||||
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
||||
import net.gepafin.tendermanagement.repositories.CallRepository;
|
||||
import net.gepafin.tendermanagement.repositories.CallTargetAudienceChecklistRepository;
|
||||
import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository;
|
||||
import net.gepafin.tendermanagement.repositories.DocumentRepository;
|
||||
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository;
|
||||
import net.gepafin.tendermanagement.repositories.FaqRepository;
|
||||
@@ -98,6 +100,9 @@ public class CallDao {
|
||||
@Autowired
|
||||
private AmazonS3Service amazonS3Service;
|
||||
|
||||
@Autowired
|
||||
private CriteriaFormFieldRepository criteriaFormFieldRepository;
|
||||
|
||||
public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) {
|
||||
createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId());
|
||||
CallEntity callEntity = convertToCallEntity(createCallRequest, userEntity);
|
||||
@@ -204,6 +209,12 @@ public class CallDao {
|
||||
private void softDeleteEvaluationCriteria(EvaluationCriteriaEntity evaluationCriteriaEntity) {
|
||||
evaluationCriteriaEntity.setIsDeleted(true);
|
||||
evaluationCriteriaRepository.save(evaluationCriteriaEntity);
|
||||
List<CriteriaFormFieldEntity> list = criteriaFormFieldRepository
|
||||
.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId())
|
||||
.stream()
|
||||
.peek(data -> data.setIsDeleted(Boolean.TRUE))
|
||||
.toList();
|
||||
criteriaFormFieldRepository.saveAll(list);
|
||||
}
|
||||
|
||||
private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq,
|
||||
@@ -251,6 +262,7 @@ public class CallDao {
|
||||
private void softDeleteDocument(DocumentEntity documentEntity) {
|
||||
documentEntity.setIsDeleted(true);
|
||||
documentRepository.save(documentEntity);
|
||||
|
||||
}
|
||||
|
||||
private DocumentEntity convertToDocumentEntity(DocumentReq documentReq,Long sourceId) {
|
||||
|
||||
@@ -3,17 +3,21 @@ package net.gepafin.tendermanagement.dao;
|
||||
import net.gepafin.tendermanagement.config.Translator;
|
||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||
import net.gepafin.tendermanagement.entities.CallEntity;
|
||||
import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity;
|
||||
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
|
||||
import net.gepafin.tendermanagement.entities.LookUpDataEntity;
|
||||
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaRequest;
|
||||
import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean;
|
||||
import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository;
|
||||
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository;
|
||||
import net.gepafin.tendermanagement.service.CallService;
|
||||
import net.gepafin.tendermanagement.service.LookUpDataService;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@@ -28,6 +32,9 @@ public class EvaluationCriteriaDao {
|
||||
@Autowired
|
||||
private LookUpDataService lookUpDataService;
|
||||
|
||||
@Autowired
|
||||
private CriteriaFormFieldRepository criteriaFormFieldRepository;
|
||||
|
||||
public EvaluationCriteriaResponseBean createEvaluationCriteria(
|
||||
EvaluationCriteriaRequest evaluationCriteriaRequest) {
|
||||
EvaluationCriteriaEntity entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(
|
||||
@@ -55,6 +62,12 @@ public class EvaluationCriteriaDao {
|
||||
Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
|
||||
}
|
||||
|
||||
public EvaluationCriteriaEntity validateEvaluationCriteria(Long id) {
|
||||
return evaluationCriteriaRepository.findById(id)
|
||||
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
|
||||
Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
|
||||
}
|
||||
|
||||
public EvaluationCriteriaResponseBean updateEvaluationCriteria(Long id, EvaluationCriteriaRequest request) {
|
||||
EvaluationCriteriaEntity entity = evaluationCriteriaRepository.findById(id)
|
||||
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
|
||||
@@ -64,12 +77,15 @@ public class EvaluationCriteriaDao {
|
||||
}
|
||||
|
||||
public void deleteEvaluationCriteria(Long id) {
|
||||
try {
|
||||
evaluationCriteriaRepository.deleteById(id);
|
||||
} catch (EmptyResultDataAccessException e) {
|
||||
throw new ResourceNotFoundException(Status.NOT_FOUND,
|
||||
Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND));
|
||||
}
|
||||
EvaluationCriteriaEntity evaluationCriteriaEntity = validateEvaluationCriteria(id);
|
||||
evaluationCriteriaEntity.setIsDeleted(Boolean.TRUE);
|
||||
evaluationCriteriaRepository.save(evaluationCriteriaEntity);
|
||||
List<CriteriaFormFieldEntity> list = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId())
|
||||
.stream()
|
||||
.peek(data -> data.setIsDeleted(Boolean.TRUE))
|
||||
.toList();;
|
||||
criteriaFormFieldRepository.saveAll(list);
|
||||
}
|
||||
|
||||
private EvaluationCriteriaResponseBean convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(
|
||||
|
||||
@@ -7,6 +7,7 @@ import net.gepafin.tendermanagement.model.request.*;
|
||||
import net.gepafin.tendermanagement.model.response.ContentResponseBean;
|
||||
import net.gepafin.tendermanagement.model.response.FormResponseBean;
|
||||
import net.gepafin.tendermanagement.repositories.*;
|
||||
import net.gepafin.tendermanagement.service.EvaluationCriteriaService;
|
||||
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
||||
import net.gepafin.tendermanagement.util.FieldValidator;
|
||||
import net.gepafin.tendermanagement.util.Utils;
|
||||
@@ -20,9 +21,12 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@@ -52,6 +56,12 @@ public class FormDao {
|
||||
@Autowired
|
||||
private Validator validator;
|
||||
|
||||
@Autowired
|
||||
private CriteriaFormFieldRepository criteriaFormFieldRepository;
|
||||
|
||||
@Autowired
|
||||
private EvaluationCriteriaService evaluationCriteriaService;
|
||||
|
||||
public FormEntity saveFormEntity(FormEntity formEntity){
|
||||
formEntity=formRepository.save(formEntity);
|
||||
return formEntity;
|
||||
@@ -65,15 +75,28 @@ public class FormDao {
|
||||
formEntity=saveFormEntity(formEntity);
|
||||
return formEntity;
|
||||
}
|
||||
public FormResponseBean convertFormEntityToFormResponseBean(FormEntity formEntity){
|
||||
public FormResponseBean convertFormEntityToFormResponseBean(FormEntity formEntity) {
|
||||
FormResponseBean formResponseBean=new FormResponseBean();
|
||||
formResponseBean.setId(formEntity.getId());
|
||||
formResponseBean.setContent(Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class));
|
||||
formResponseBean.setContent(setContent(formEntity));
|
||||
formResponseBean.setLabel(formEntity.getLabel());
|
||||
formResponseBean.setCallId(formEntity.getCall().getId());
|
||||
formResponseBean.setCallStatus(formEntity.getCall().getStatus());
|
||||
return formResponseBean;
|
||||
}
|
||||
|
||||
private List<ContentResponseBean> setContent(FormEntity formEntity) {
|
||||
List<ContentResponseBean> contentList = Utils.convertJsonStringToList(formEntity.getContent(),
|
||||
ContentResponseBean.class);
|
||||
contentList.forEach(data -> {
|
||||
List<Long> criteriaIds = criteriaFormFieldRepository
|
||||
.findByCallIdAndFormIdAndFormFieldIdAndIsDeletedFalse(formEntity.getCall().getId(), formEntity.getId(), data.getId())
|
||||
.stream().map(CriteriaFormFieldEntity::getEvaluationCriteriaId).toList();
|
||||
data.setCriteria(criteriaIds);
|
||||
});
|
||||
return contentList;
|
||||
}
|
||||
|
||||
public FormResponseBean createForm(CallEntity callEntity,FormRequest formRequest){
|
||||
validateForm(formRequest);
|
||||
List<FlowDataEntity> flowDataEntities=flowDataRepository.findByCallId(callEntity.getId());
|
||||
@@ -86,8 +109,60 @@ public class FormDao {
|
||||
callRepository.save(callEntity);
|
||||
}
|
||||
FormEntity formEntity=convertFormRequestToFormEntity(callEntity, formRequest);
|
||||
validateAndSaveCriteriaFormField(callEntity, formEntity, formRequest.getContent());
|
||||
return convertFormEntityToFormResponseBean(formEntity);
|
||||
}
|
||||
|
||||
private void validateAndSaveCriteriaFormField(CallEntity callEntity, FormEntity formEntity,
|
||||
List<ContentRequestBean> contentResponseBeans) {
|
||||
|
||||
contentResponseBeans.forEach(content -> {
|
||||
// Fetch existing records from the repository based on the call, form, and field ID
|
||||
List<CriteriaFormFieldEntity> existingCriteriaFields = criteriaFormFieldRepository
|
||||
.findByCallIdAndFormIdAndFormFieldIdAndIsDeletedFalse(callEntity.getId(), formEntity.getId(), content.getId());
|
||||
|
||||
// Extract existing evaluation criteria IDs into a set for quick lookup
|
||||
Set<Long> existingEvaluationCriteriaIds = existingCriteriaFields.stream()
|
||||
.map(CriteriaFormFieldEntity::getEvaluationCriteriaId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// Get the criteria list (handling null as an empty list for uniformity)
|
||||
List<Long> criteriaList = Optional.ofNullable(content.getCriteria()).orElse(Collections.emptyList());
|
||||
|
||||
// Filter and create new entries for criteria that are not already present
|
||||
criteriaList.stream()
|
||||
.filter(criteriaId -> !existingEvaluationCriteriaIds.contains(criteriaId))
|
||||
.forEach(criteriaId -> createCriteriaFormField(callEntity, formEntity, content.getId(), criteriaId));
|
||||
|
||||
List<CriteriaFormFieldEntity> toBeDeleted = existingCriteriaFields.stream()
|
||||
.filter(criteriaFormField -> !criteriaList.contains(criteriaFormField.getEvaluationCriteriaId()))
|
||||
.peek(data->data.setIsDeleted(Boolean.TRUE))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!toBeDeleted.isEmpty()) {
|
||||
criteriaFormFieldRepository.saveAll(toBeDeleted);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void createCriteriaFormField(CallEntity callEntity, FormEntity formEntity,
|
||||
String formFieldId,Long evaluationCriteriaId) {
|
||||
EvaluationCriteriaEntity evaluationCriteria = evaluationCriteriaService.validateEvaluationCriteria(evaluationCriteriaId);
|
||||
if (Boolean.FALSE.equals(evaluationCriteria.getCall().getId().equals(callEntity.getId()))) {
|
||||
throw new CustomValidationException(Status.VALIDATION_ERROR,
|
||||
Translator.toLocale(GepafinConstant.EVALUATIONCRITERIA_INVALID));
|
||||
}
|
||||
CriteriaFormFieldEntity criteriaFormField = new CriteriaFormFieldEntity();
|
||||
criteriaFormField.setCallId(callEntity.getId());
|
||||
criteriaFormField.setFormId(formEntity.getId());
|
||||
criteriaFormField.setFormFieldId(formFieldId);
|
||||
criteriaFormField.setIsDeleted(Boolean.FALSE);
|
||||
criteriaFormField.setEvaluationCriteriaId(evaluationCriteriaId);
|
||||
criteriaFormFieldRepository.save(criteriaFormField);
|
||||
|
||||
}
|
||||
|
||||
public void validateForm(FormRequest formRequest){
|
||||
if(formRequest.getContent()==null || formRequest.getLabel()==null ){
|
||||
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM));
|
||||
@@ -157,6 +232,7 @@ public class FormDao {
|
||||
Utils.setIfUpdated(formEntity::getContent, formEntity::setContent, setContentResponseBean(formRequest.getContent()));
|
||||
formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||
formEntity = saveFormEntity(formEntity);
|
||||
validateAndSaveCriteriaFormField(formEntity.getCall(), formEntity, formRequest.getContent());
|
||||
return convertFormEntityToFormResponseBean(formEntity);
|
||||
}
|
||||
return convertFormEntityToFormResponseBean(formEntity);
|
||||
@@ -198,7 +274,10 @@ public class FormDao {
|
||||
return formResponseBeanList;
|
||||
}
|
||||
public String setContentResponseBean(List<ContentRequestBean> contentRequestBeans){
|
||||
return Utils.convertListToJsonString(contentRequestBeans);
|
||||
String stringContentRequest = Utils.convertListToJsonString(contentRequestBeans);
|
||||
List<ContentRequestBean> cloneContentRequestBeans = Utils.convertJsonStringToList(stringContentRequest, ContentRequestBean.class);
|
||||
cloneContentRequestBeans.forEach(data->data.setCriteria(null));
|
||||
return Utils.convertListToJsonString(cloneContentRequestBeans);
|
||||
}
|
||||
|
||||
public void validateFormField(List<ApplicationFormFieldRequestBean> applicationFormFieldRequestList, ApplicationEntity applicationEntity, FormEntity formEntity) {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.gepafin.tendermanagement.entities;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Table;
|
||||
import lombok.Data;
|
||||
|
||||
@Entity
|
||||
@Table(name = "criteria_form_field")
|
||||
@Data
|
||||
public class CriteriaFormFieldEntity extends BaseEntity {
|
||||
|
||||
private Long callId;
|
||||
|
||||
private Long formId;
|
||||
|
||||
private String formFieldId;
|
||||
|
||||
private Long evaluationCriteriaId;
|
||||
|
||||
@Column(name ="IS_DELETED", nullable = false)
|
||||
private Boolean isDeleted = false;
|
||||
|
||||
}
|
||||
@@ -13,6 +13,8 @@ public class ContentRequestBean {
|
||||
private String label;
|
||||
private List<SettingRequestBean> settings;
|
||||
private Map<String,Object> validators;
|
||||
private List<Long> criteria;
|
||||
private String dynamicData;
|
||||
private Integer dbId;
|
||||
|
||||
}
|
||||
|
||||
@@ -13,5 +13,7 @@ public class ContentResponseBean {
|
||||
private String label;
|
||||
private List<SettingResponseBean> settings;
|
||||
private Map<String,Object> validators;
|
||||
private List<Long> criteria;
|
||||
private String dynamicData;
|
||||
private Integer dbId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package net.gepafin.tendermanagement.repositories;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity;
|
||||
|
||||
@Repository
|
||||
public interface CriteriaFormFieldRepository extends JpaRepository<CriteriaFormFieldEntity, Long>{
|
||||
|
||||
List<CriteriaFormFieldEntity> findByCallIdAndFormIdAndFormFieldIdAndIsDeletedFalse(Long callId, Long formId, String formFieldId);
|
||||
|
||||
List<CriteriaFormFieldEntity> findByEvaluationCriteriaIdAndIsDeletedFalse(Long evaluationCriteriaId);
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.gepafin.tendermanagement.service;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
|
||||
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaRequest;
|
||||
import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean;
|
||||
|
||||
@@ -13,4 +14,6 @@ public interface EvaluationCriteriaService {
|
||||
public EvaluationCriteriaResponseBean updateEvaluationCriteria(HttpServletRequest request,Long id, EvaluationCriteriaRequest evaluationCriteriaRequest);
|
||||
|
||||
public void deleteEvaluationCriteria(HttpServletRequest request,Long id);
|
||||
|
||||
public EvaluationCriteriaEntity validateEvaluationCriteria(Long id);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.service.impl;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import net.gepafin.tendermanagement.dao.EvaluationCriteriaDao;
|
||||
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
|
||||
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaRequest;
|
||||
import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean;
|
||||
import net.gepafin.tendermanagement.service.EvaluationCriteriaService;
|
||||
@@ -33,4 +34,9 @@ public class EvaluationCriteriaServiceImpl implements EvaluationCriteriaService
|
||||
public void deleteEvaluationCriteria(HttpServletRequest request,Long id) {
|
||||
evaluationCriteriaDao.deleteEvaluationCriteria(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EvaluationCriteriaEntity validateEvaluationCriteria(Long id) {
|
||||
return evaluationCriteriaDao.validateEvaluationCriteria(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public interface EvaluationCriteriaApi {
|
||||
@ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) }))
|
||||
})
|
||||
@DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
ResponseEntity<Void> deleteEvaluationCriteria(HttpServletRequest request,
|
||||
ResponseEntity<Response<Void>> deleteEvaluationCriteria(HttpServletRequest request,
|
||||
@Parameter(description = "evaluation criteria id", required = true)
|
||||
@PathVariable("id") Long id);
|
||||
}
|
||||
|
||||
@@ -57,10 +57,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Void> deleteEvaluationCriteria(HttpServletRequest request, Long id) {
|
||||
public ResponseEntity<Response<Void>> deleteEvaluationCriteria(HttpServletRequest request, Long id) {
|
||||
service.deleteEvaluationCriteria(request,id);
|
||||
|
||||
return ResponseEntity.status(HttpStatus.OK)
|
||||
.header("Message", Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_DELETED_SUCCESSFULLY))
|
||||
.build();
|
||||
.body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_DELETED_SUCCESSFULLY)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1135,6 +1135,44 @@
|
||||
<column name="country" value="Italy"/>
|
||||
</insert>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="16-10-2024_2" author="Rajesh Khore">
|
||||
|
||||
<createTable tableName="criteria_form_field">
|
||||
<column autoIncrement="true" name="id" type="INTEGER">
|
||||
<constraints nullable="false" primaryKey="true"
|
||||
primaryKeyName="criteria_form_field_pkey" />
|
||||
</column>
|
||||
<column name="call_id" type="INTEGER" />
|
||||
<column name="form_id" type="INTEGER" />
|
||||
<column name="form_field_id" type="varchar(255)" />
|
||||
<column name="evaluation_criteria_id" type="INTEGER" />
|
||||
<column name="IS_DELETED" type="BOOLEAN" defaultValueBoolean="true">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="created_date" type="TIMESTAMP WITHOUT TIME ZONE" />
|
||||
<column name="updated_date" type="TIMESTAMP WITHOUT TIME ZONE" />
|
||||
</createTable>
|
||||
|
||||
<addForeignKeyConstraint baseTableName="criteria_form_field"
|
||||
baseColumnNames="call_id"
|
||||
referencedTableName="call"
|
||||
referencedColumnNames="id"
|
||||
constraintName="fk_criteria_form_field_call_id"/>
|
||||
|
||||
<addForeignKeyConstraint baseTableName="criteria_form_field"
|
||||
baseColumnNames="form_id"
|
||||
referencedTableName="form"
|
||||
referencedColumnNames="id"
|
||||
constraintName="fk_criteria_form_field_form_id"/>
|
||||
|
||||
<addForeignKeyConstraint baseTableName="criteria_form_field"
|
||||
baseColumnNames="evaluation_criteria_id"
|
||||
referencedTableName="evaluation_criteria"
|
||||
referencedColumnNames="id"
|
||||
constraintName="fk_criteria_form_field_evaluation_criteria_id"/>
|
||||
</changeSet>
|
||||
|
||||
<changeSet id="16-10-2024_1" author="Harish Bagora">
|
||||
<addColumn tableName="user_with_company">
|
||||
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
|
||||
|
||||
@@ -253,6 +253,8 @@ get_login_attempt_se_msg=Login attempts fetched successfully.
|
||||
application.in.submit.status.cannot.delete.company=The company cannot be deleted because there are active applications in the SUBMITTED status.
|
||||
get.users.success.msg = Successfully fetched users.
|
||||
cannot.create.beneficiary.user = Creation of a Beneficiary user is not allowed. Please assign the appropriate role.
|
||||
evaluationCriteria.invalid=This evaluation criterion does not belong to the current call.
|
||||
|
||||
|
||||
# Hub Messages
|
||||
hub_create_success=Hub created successfully
|
||||
|
||||
@@ -250,6 +250,8 @@ application.in.submit.status.cannot.delete.company=Non <20> possibile eliminare l
|
||||
|
||||
get.users.success.msg = Utenti recuperati con successo
|
||||
cannot.create.beneficiary.user = La creazione di un utente beneficiario non <20> consentita. Si prega di assegnare il ruolo appropriato.
|
||||
evaluationCriteria.invalid=Questo criterio di valutazione non appartiene alla chiamata corrente.
|
||||
|
||||
|
||||
# Hub Messages
|
||||
hub_create_success=Hub creato con successo
|
||||
|
||||
Reference in New Issue
Block a user