diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 219c5647..fcc5a814 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -293,5 +293,7 @@ public class GepafinConstant { public static final String APPLICATION_DOCUMENTS_NOT_FOUND_MSG = "application.documents.not.found"; public static final String DUPLICATE_BENEFICIARY_CALL = "beneficiary.call.duplicate"; public static final String USER_MUST_BE_ASSOCIATED_WITH_COMPANY="user.must.be.associated.with.company.to.create.application"; + public static final String COMPANY_ID_REQUIRED_FOR_PREFERRED_CALL = "company.id.required.for.preferred.call"; + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index fe692b69..b19a50d2 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -656,13 +656,29 @@ public class CallDao { return createCallResponseBean; } - public List getAllCalls(HttpServletRequest request,UserEntity user, Long companyId) { + public List getAllCalls(HttpServletRequest request,UserEntity user, Long companyId,Boolean onlyPreferredCall) { 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 calls; + if (Boolean.TRUE.equals(onlyPreferredCall) && companyId == null) { + throw new CustomValidationException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.COMPANY_ID_REQUIRED_FOR_PREFERRED_CALL)); + } + + if (Boolean.TRUE.equals(onlyPreferredCall)) { + validator.validateUserWithCompany(request, companyId); + List preferredCalls = beneficiaryPreferredCallRepository + .findByUserIdAndCompanyIdAndIsDeletedFalse(user.getId(), companyId); + List preferredCallIds = preferredCalls.stream() + .map(BeneficiaryPreferredCallEntity::getCallId) + .collect(Collectors.toList()); + calls = callRepository.findByIdInAndStatusIn(preferredCallIds, callStatusList); + } else { + calls = callRepository.findByStatusInAndHubId(callStatusList, user.getHub().getId()); + } List callIds = calls.stream().map(CallEntity::getId).collect(Collectors.toList()); Map preferredCallsMap = getBeneficiaryPreferredCallsForUser(request,user, callIds, companyId); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java index 27ab57b4..833e1d68 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java @@ -45,4 +45,6 @@ public interface CallRepository extends JpaRepository { @Query("SELECT COALESCE(SUM(c.amount), 0) FROM CallEntity c WHERE c.status = 'PUBLISH' And c.hub.id = :hubId") BigDecimal findTotalAmountOfPublishedCallsAndHubId(@Param("hubId") Long hubId); + @Query("SELECT c FROM CallEntity c WHERE c.id IN :ids AND c.status IN :status") + List findByIdInAndStatusIn(@Param("ids") List ids, @Param("status") List status); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/CallService.java b/src/main/java/net/gepafin/tendermanagement/service/CallService.java index c40457de..8762d576 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CallService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CallService.java @@ -21,7 +21,7 @@ public interface CallService { CallResponse getCallById (HttpServletRequest request, Long callId,Long companyId); - List getAllCalls(HttpServletRequest request,Long companyId); + List getAllCalls(HttpServletRequest request,Long companyId,Boolean onlyPreferredCall); CallResponse validateCallData(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 c5839bbc..38fd9562 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -62,9 +62,9 @@ public class CallServiceImpl implements CallService { @Override @Transactional(readOnly = true) - public List getAllCalls(HttpServletRequest request,Long companyId) { + public List getAllCalls(HttpServletRequest request,Long companyId,Boolean onlyPreferredCall) { UserEntity user = validator.validateUser(request); - return callDao.getAllCalls(request,user,companyId); + return callDao.getAllCalls(request,user,companyId,onlyPreferredCall); } 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 00a3e190..5a7d0384 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 @@ -100,8 +100,8 @@ public interface CallApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "", produces = { "application/json" }) - ResponseEntity>> getAllCalls(HttpServletRequest request,@RequestParam(value = "companyId", required = false) Long companyId); - + ResponseEntity>> getAllCalls(HttpServletRequest request,@RequestParam(value = "companyId", required = false) Long companyId , @RequestParam(value = "onlyPreferredCall", required = false, defaultValue = "false") Boolean onlyPreferredCall); + @Operation(summary = "Api to validate call", responses = { 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 32c89055..01f3d5f5 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 @@ -67,8 +67,8 @@ public class CallApiController implements CallApi { @Override @Transactional(readOnly = true) - public ResponseEntity>> getAllCalls(HttpServletRequest request,Long companyId) { - List calls = callService.getAllCalls(request,companyId); + public ResponseEntity>> getAllCalls(HttpServletRequest request,Long companyId,Boolean onlyPreferredCall) { + List calls = callService.getAllCalls(request,companyId,onlyPreferredCall); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(calls, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG))); diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 41ebe401..5c8345ed 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -309,3 +309,4 @@ DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm application.documents.not.found=No documents found for the application. beneficiary.call.duplicate = A preferred call with this call ID and company ID already exists for this user. user.must.be.associated.with.company.to.create.application=You must be associated with a company to apply for this application. +company.id.required.for.preferred.call=Company ID is required when requesting only preferred calls. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 43a8bbff..1aaaf17d 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -304,3 +304,4 @@ reminder.email.sent.success.msg=Email di promemoria inviata con successo! application.documents.not.found=Nessun documento trovato per la domanda. beneficiary.call.duplicate = Una chiamata preferita con questo ID di chiamata e ID azienda esiste gi� per questo utente. user.must.be.associated.with.company.to.create.application=Devi essere associato a un'azienda per poter presentare domanda per questa applicazione. +company.id.required.for.preferred.call=ID azienda obbligatorio quando si richiedono solo chiamate preferite.