diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 39736a57..89372905 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -10,12 +10,15 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; 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.Utils; @@ -26,16 +29,7 @@ import org.springframework.util.StringUtils; 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; -import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; -import net.gepafin.tendermanagement.entities.RegionEntity; -import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.CallStatusEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; @@ -45,13 +39,6 @@ import net.gepafin.tendermanagement.model.request.EvaluationCriteriaReq; import net.gepafin.tendermanagement.model.request.FaqReq; 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; -import net.gepafin.tendermanagement.repositories.RegionRepository; import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; @@ -104,6 +91,9 @@ public class CallDao { @Autowired private S3PathConfig s3PathConfig; + @Autowired + private BeneficiaryPreferredCallRepository beneficiaryPreferredCallRepository; + public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) { createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); @@ -652,16 +642,39 @@ public class CallDao { } public List getAllCalls(UserEntity user) { - String type=user.getRoleEntity().getRoleType(); - List callStatusList =CallStatusEnum.getStatusValues(); + String type = user.getRoleEntity().getRoleType(); + List callStatusList = CallStatusEnum.getStatusValues(); + if (Boolean.FALSE.equals(ROLE_SUPER_ADMIN.getValue().equals(type))) { callStatusList = List.of(CallStatusEnum.PUBLISH.getValue()); } List calls = callRepository.findByStatusInAndHubId(callStatusList, user.getHub().getId()); + List callIds = calls.stream().map(CallEntity::getId).collect(Collectors.toList()); + + Map preferredCallsMap = getBeneficiaryPreferredCallsForUser(user, callIds); + return calls.stream() - .map(this::convertToCallDetailsResponseBean) + .map(call -> { + CallDetailsResponseBean responseBean = convertToCallDetailsResponseBean(call); + String key = user.getId() + "_" + call.getId(); + boolean isPreferred = preferredCallsMap.containsKey(key); + responseBean.setPreferred(isPreferred); + return responseBean; + }) .collect(Collectors.toList()); } + public Map getBeneficiaryPreferredCallsForUser(UserEntity user, List callIds) { + + List beneficiaryPreferredCalls = beneficiaryPreferredCallRepository + .findByUserIdAndCallIdIn(user.getId(), callIds); + + return beneficiaryPreferredCalls.stream() + .collect(Collectors.toMap( + call -> user.getId() + "_" + call.getCallId(), + call -> call + )); + } + public CallResponse validateCallData(CallEntity callEntity) { validateUpdate(callEntity); 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 6338949e..8e14e7b9 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java @@ -53,5 +53,5 @@ public class CallDetailsResponseBean { private LocalDateTime createdDate; private LocalDateTime updatedDate; - + private Boolean preferred; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java index dd8d341e..d2f0618a 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java @@ -15,4 +15,6 @@ public interface BeneficiaryPreferredCallRepository extends JpaRepository findByUserIdAndCompanyId(@Param("userId") Long userId, @Param("companyId") Long companyId); List findByBeneficiaryIdAndCompanyId(Long beneficiaryId,Long companyId); + @Query("SELECT preferredCall FROM BeneficiaryPreferredCallEntity preferredCall WHERE preferredCall.userId = :userId AND preferredCall.callId IN :callIds") + List findByUserIdAndCallIdIn(@Param("userId") Long userId, @Param("callIds") List callIds); }