diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index de697243..9bd14950 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.dao; +import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.CallStatusEnum; @@ -57,16 +58,18 @@ public class DashboardDao { return widget1; } - public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(UserEntity userEntity) { - BeneficiaryWidgetResponseBean beneficiaryWidgetResponseBean = new BeneficiaryWidgetResponseBean(); - Long activeCalls = callRepository.countByStatus(CallStatusEnum.PUBLISH.getValue()); - if (Boolean.FALSE.equals(FieldValidator.isNullOrZero(activeCalls))) { - beneficiaryWidgetResponseBean.setActiveCalls(activeCalls); - } - Long activeApplication = applicationRepository.countSubmittedApplicationsByUserId(userEntity.getId()); - if (Boolean.FALSE.equals(FieldValidator.isNullOrZero(activeApplication))) { - beneficiaryWidgetResponseBean.setActiveAppication(activeApplication); - } - return beneficiaryWidgetResponseBean; - } + public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(UserEntity userEntity, + CompanyEntity company) { + BeneficiaryWidgetResponseBean beneficiaryWidgetResponseBean = BeneficiaryWidgetResponseBean.builder() + .numberOfApplications(0L).numberOfCalls(0L).numberOfIntegratedDocuments(0L).build(); + Long activeCalls = callRepository.countByStatus(CallStatusEnum.PUBLISH.getValue()); + if (activeCalls != null) { + beneficiaryWidgetResponseBean.setNumberOfCalls(activeCalls); + } + Long activeApplication = applicationRepository.countSubmittedApplicationsByUserId(userEntity.getId(), company.getId()); + if (activeApplication != null) { + beneficiaryWidgetResponseBean.setNumberOfApplications(activeApplication); + } + return beneficiaryWidgetResponseBean; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/BeneficiaryWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/BeneficiaryWidgetResponseBean.java index 945bfb45..04eb2d8a 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/BeneficiaryWidgetResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/BeneficiaryWidgetResponseBean.java @@ -1,15 +1,17 @@ package net.gepafin.tendermanagement.model.response; +import lombok.Builder; import lombok.Data; @Data +@Builder public class BeneficiaryWidgetResponseBean { - private Long activeAppication; + private Long numberOfApplications; - private Long activeCalls; + private Long numberOfCalls; - private Long integratedDocument; + private Long numberOfIntegratedDocuments; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 0a5b5f78..d90b409f 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -29,8 +29,7 @@ public interface ApplicationRepository extends JpaRepository findByIdAndUserIdAndCallIdAndIsDeletedFalse(Long applicationId, Long userId, Long callId); - - @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.userId = :userId AND a.status = 'SUBMIT' ") - Long countSubmittedApplicationsByUserId(@Param("userId") Long userId); + @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.userId = :userId AND a.company.id = :companyId AND a.status = 'SUBMIT' ") + Long countSubmittedApplicationsByUserId(@Param("userId") Long userId, @Param("companyId") Long companyId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java index 3d51c270..6328ca6e 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java @@ -8,6 +8,6 @@ public interface DashboardService { public SuperAdminWidgetResponseBean getDashboardWidgetForSuperAdmin(HttpServletRequest request); - public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request); + public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java index c4740470..d0bd0217 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.service.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.DashboardDao; +import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.model.response.BeneficiaryWidgetResponseBean; import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; @@ -25,8 +26,9 @@ public class DashboardServiceImpl implements DashboardService { } @Override - public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request) { + public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId) { UserEntity userEntity=validator.validateUser(request); - return dashboardDao.getDashboardWidgetForBeneficiary(userEntity); + CompanyEntity company = validator.validateUserWithCompany(request, companyId); + return dashboardDao.getDashboardWidgetForBeneficiary(userEntity, company); } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java index 912324b6..bcb79d61 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DashboardApi.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.web.rest.api; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -11,6 +12,8 @@ import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; public interface DashboardApi { @@ -26,6 +29,7 @@ public interface DashboardApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PostMapping(value = "", produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") ResponseEntity> getDashboardWidgetForSuperAdmin(HttpServletRequest request); @Operation(summary = "Api to get dashboard widget for beneficiary", @@ -37,9 +41,11 @@ public interface DashboardApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PostMapping(value = "/beneficiary", + @PostMapping(value = "/beneficiary/company/{companyId}", produces = { "application/json" }) - ResponseEntity> getDashboardWidgetForBeneficiary(HttpServletRequest request); + ResponseEntity> getDashboardWidgetForBeneficiary(HttpServletRequest request, + @Parameter(description = "The company id", required = true) @PathVariable(value = "companyId", required = true) Long companyId); + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java index da331cb3..c46258a2 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java @@ -29,8 +29,8 @@ public class DashboardApiController implements DashboardApi { .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); } @Override - public ResponseEntity> getDashboardWidgetForBeneficiary(HttpServletRequest request) { - BeneficiaryWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForBeneficiary(request); + public ResponseEntity> getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId) { + BeneficiaryWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForBeneficiary(request, companyId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); }