diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index d88319e1..5b705fd9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -2,7 +2,6 @@ package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.CompanyEntity; -import net.gepafin.tendermanagement.entities.UserActionEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserWithCompanyEntity; import net.gepafin.tendermanagement.entities.*; @@ -16,12 +15,13 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.*; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @@ -352,8 +352,7 @@ public class DashboardDao { responseBean.setAverageResponseDays(BigDecimal.ZERO); } } - - public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(UserEntity userEntity) { +public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(UserEntity userEntity) { Long userId = userEntity.getId(); Long hubId = userEntity.getHub().getId(); @@ -404,6 +403,94 @@ public class DashboardDao { } + private PreInstructorWidgetResponseBean initializeDashboardPreInstructorResponseBean() { + return PreInstructorWidgetResponseBean.builder() + .assignedApplication(ApplicationToConsider.builder() + .totalAssignedApplication(0L) + .additionalApplicationPercentage(BigDecimal.ZERO) + .build()) + .evaluatedApplication(EvaluatedApplication.builder() + .evaluatedApplication(0L) + .dailyAverage(BigDecimal.ZERO) + .build()) + .averageEvaluationDays(AverageEvaluationTime.builder() + .averageEvlauationDaysRating(BigDecimal.ZERO) + .timeDifferenceFromAverage(BigDecimal.ZERO) + .build()) + .amendmentInProgress(RescueInstructorInProgress.builder() + .totalAmendmentInProgress(0L) + .expiringToday(0L) + .build()) + .build(); + } + public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(UserEntity userEntity) { + PreInstructorWidgetResponseBean preInstructorWidgetResponseBean = initializeDashboardPreInstructorResponseBean(); + Long hubId = userEntity.getHub().getId(); + List applicationIds = getApplicationIdsForUserOrHub(userEntity, hubId); + setPreInstructorWidgets(applicationIds, preInstructorWidgetResponseBean,hubId); + calculateAverageEvaluationTime(applicationIds, preInstructorWidgetResponseBean, hubId); + return preInstructorWidgetResponseBean; + } + private void setPreInstructorWidgets(List applicationIds, PreInstructorWidgetResponseBean responseBean,Long hubId) { + Long totalAssignedApplications = assignedApplicationsRepository.countAssignedApplicationsByApplicationIds(applicationIds); + if (totalAssignedApplications != null) { + responseBean.getAssignedApplication().setTotalAssignedApplication(totalAssignedApplications); + } + LocalDateTime yesterday = LocalDateTime.now().minusDays(1); + Long newApplicationsAddedYesterday = assignedApplicationsRepository.countApplicationsAddedYesterdayForHub(applicationIds, hubId, yesterday); + if (newApplicationsAddedYesterday != null && totalAssignedApplications != null && totalAssignedApplications > 0) { + BigDecimal percentageAdded = BigDecimal.valueOf(newApplicationsAddedYesterday) + .divide(BigDecimal.valueOf(totalAssignedApplications), 4, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)); + responseBean.getAssignedApplication().setAdditionalApplicationPercentage(percentageAdded.setScale(2, RoundingMode.HALF_UP)); + } + + List statuses = Arrays.asList(ApplicationStatusTypeEnum.APPROVED.getValue(), ApplicationStatusTypeEnum.REJECTED.getValue()); + LocalDateTime sevenDaysAgo = LocalDateTime.now().minusDays(7); + Long evaluatedApplication = applicationRepository.countEvaluatedApplicationsInLast7Days(applicationIds, statuses, sevenDaysAgo); + if (evaluatedApplication != null) { + responseBean.getEvaluatedApplication().setEvaluatedApplication(evaluatedApplication); + + BigDecimal dailyAverage = applicationRepository.countDailyAverageEvaluatedApplicationsInLast7Days(applicationIds, statuses, sevenDaysAgo); + if (dailyAverage != null) { + responseBean.getEvaluatedApplication().setDailyAverage(dailyAverage.setScale(2, RoundingMode.HALF_UP)); // Rounded to 2 decimal places + } + } + + Long rescueInstructorsInProgress = assignedApplicationsRepository.countApplicationsByIdsAndStatus(applicationIds, AssignedApplicationEnum.SOCCORSO.getValue()); + if (rescueInstructorsInProgress != null) { + responseBean.getAmendmentInProgress().setTotalAmendmentInProgress(rescueInstructorsInProgress); + } + calculateExpiringRescueInstructorsToday(applicationIds,responseBean); + + } + private void calculateExpiringRescueInstructorsToday(List applicationIds, PreInstructorWidgetResponseBean responseBean) { + List statuses =Arrays.asList( ApplicationAmendmentRequestEnum.AWAITING.getValue(), ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED.getValue()); + + LocalDateTime startOfDay = LocalDateTime.now().toLocalDate().atStartOfDay(); + + LocalDateTime endOfDay = startOfDay.plusDays(1).minusNanos(1); + + Long expiringToday = applicationAmendmentRequestRepository.countAmendmentsExpiringToday(applicationIds, statuses, startOfDay, endOfDay); + + if (expiringToday != null) { + responseBean.getAmendmentInProgress().setExpiringToday(expiringToday); + } + } + + private void calculateAverageEvaluationTime(List applicationIds, PreInstructorWidgetResponseBean responseBean, Long hubId) { + + if (Boolean.FALSE.equals(applicationIds.isEmpty())) { + BigDecimal averageTime = applicationEvaluationRepository.findAverageEvaluationTimeByApplicationIds(applicationIds); + responseBean.getAverageEvaluationDays().setAverageEvlauationDaysRating( + averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP) + ); + +// +// BigDecimal timeDifference = applicationEvaluationRepository.findTimeDifferenceFromAverage(applicationIds); +// responseBean.getAverageEvaluationTime().setTimeDifferenceFromAverage(timeDifference != null ? timeDifference : BigDecimal.ZERO); + } + } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 8a6e43a6..d0839370 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -146,6 +146,7 @@ public enum UserActionContextEnum { GET_DASHBOARD_WIDGET_FOR_BENEFICIARY("GET_DASHBOARD_WIDGET_FOR_BENEFICIARY"), GET_APPLICATION_DETAILS("GET_APPLICATION_DETAILS"), GET_AMENDMENT_DETAILS("GET_AMENDMENT_DETAILS"), + GET_DASHBOARD_WIDGET_FOR_PRE_INSTRUCTOR("GET_DASHBOARD_WIDGET_FOR_PRE_INSTRUCTOR"), GET_APPLICATION_DETAILS_FOR_EVALUATION("GET_APPLICATION_DETAILS_FOR_EVALUATION"), /** Evaluation criteria action context **/ diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationToConsider.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationToConsider.java new file mode 100644 index 00000000..b7f9715b --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationToConsider.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; + +@Builder +@Data +public class ApplicationToConsider { + + public Long totalAssignedApplication; + + private BigDecimal additionalApplicationPercentage; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AverageEvaluationTime.java b/src/main/java/net/gepafin/tendermanagement/model/response/AverageEvaluationTime.java new file mode 100644 index 00000000..0715d7e8 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AverageEvaluationTime.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; + +@Builder +@Data +public class AverageEvaluationTime { + + private BigDecimal averageEvlauationDaysRating; + + private BigDecimal timeDifferenceFromAverage; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/EvaluatedApplication.java b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluatedApplication.java new file mode 100644 index 00000000..50df2089 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluatedApplication.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; + +@Builder +@Data +public class EvaluatedApplication { + + public Long evaluatedApplication; + + private BigDecimal dailyAverage; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/PreInstructorWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/PreInstructorWidgetResponseBean.java new file mode 100644 index 00000000..579d4df5 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/PreInstructorWidgetResponseBean.java @@ -0,0 +1,20 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; + +@Builder +@Data +public class PreInstructorWidgetResponseBean { + + private ApplicationToConsider assignedApplication; + + private EvaluatedApplication evaluatedApplication; + + private AverageEvaluationTime averageEvaluationDays; + + private RescueInstructorInProgress amendmentInProgress; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/RescueInstructorInProgress.java b/src/main/java/net/gepafin/tendermanagement/model/response/RescueInstructorInProgress.java new file mode 100644 index 00000000..ec8502e1 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/RescueInstructorInProgress.java @@ -0,0 +1,13 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Builder; +import lombok.Data; + +@Builder +@Data +public class RescueInstructorInProgress { + + private Long totalAmendmentInProgress; + + private Long expiringToday; +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java index 0ec7d668..7037ba7e 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java @@ -132,4 +132,20 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository= :startOfDay + AND e.start_date + INTERVAL '1 DAY' * e.response_days < :endOfDay + AND e.is_deleted = false +""", nativeQuery = true) + Long countAmendmentsExpiringToday( + @Param("applicationIds") List applicationIds, + @Param("statuses") List statuses, + @Param("startOfDay") LocalDateTime startOfDay, + @Param("endOfDay") LocalDateTime endOfDay + ); + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 086b0807..0f8bbf89 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -8,6 +8,8 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -92,5 +94,16 @@ public interface ApplicationRepository extends JpaRepository findApplicationIdsByHubId(@Param("hubId") Long hubId); + @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.id IN :applicationIds AND a.status IN :statuses AND a.isDeleted = false AND a.updatedDate >= :sevenDaysAgo") + Long countEvaluatedApplicationsInLast7Days(@Param("applicationIds") List applicationIds, + @Param("statuses") List statuses, + @Param("sevenDaysAgo") LocalDateTime sevenDaysAgo); + + @Query("SELECT (COUNT(a) / 7.0) FROM ApplicationEntity a WHERE a.id IN :applicationIds AND a.status IN :statuses AND a.isDeleted = false AND a.updatedDate >= :sevenDaysAgo") + BigDecimal countDailyAverageEvaluatedApplicationsInLast7Days(@Param("applicationIds") List applicationIds, + @Param("statuses") List statuses, + @Param("sevenDaysAgo") LocalDateTime sevenDaysAgo); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java index f48833aa..90791462 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -25,6 +26,23 @@ public interface AssignedApplicationsRepository extends JpaRepository findApplicationIdsByUserIdAndIsDeletedFalse(@Param("userId") Long userId); + + @Query("SELECT COUNT(a) FROM AssignedApplicationsEntity a WHERE a.application.id IN :applicationIds AND a.isDeleted = false") + Long countAssignedApplicationsByApplicationIds(@Param("applicationIds") List applicationIds); + + @Query(""" + SELECT COUNT(aa) + FROM AssignedApplicationsEntity aa + JOIN aa.application a + WHERE a.hubId = :hubId + AND a.isDeleted = false + AND aa.createdDate >= :yesterday + AND (:applicationIds IS NULL OR aa.application.id IN :applicationIds) + """) + Long countApplicationsAddedYesterdayForHub(@Param("applicationIds") List applicationIds, @Param("hubId") Long hubId, @Param("yesterday") LocalDateTime yesterday); + + @Query("SELECT COUNT(a) FROM AssignedApplicationsEntity a WHERE a.application.id IN :applicationIds AND a.status = :status AND a.isDeleted = false") + Long countApplicationsByIdsAndStatus(@Param("applicationIds") List applicationIds, @Param("status") String status); @Query(""" SELECT diff --git a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java index f2076f0c..a1782f6e 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DashboardService.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; @@ -14,6 +15,7 @@ public interface DashboardService { public BeneficiaryWidgetResponseBean getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId); public ApplicationWidgetResponseBean getApplicationDetails(HttpServletRequest request); public AmendmentWidgetResponseBean getAmendmentDetails(HttpServletRequest request); + public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request); public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(HttpServletRequest request); } 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 a3cf0482..963294f4 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DashboardServiceImpl.java @@ -4,6 +4,7 @@ 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.*; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; @@ -46,7 +47,11 @@ public class DashboardServiceImpl implements DashboardService { UserEntity userEntity=validator.validateUser(request); return dashboardDao.getAmendmentDetails(userEntity); } - + @Override + public PreInstructorWidgetResponseBean getDashboardWidgetForPreInstructor(HttpServletRequest request) { + UserEntity userEntity = validator.validateUser(request); + return dashboardDao.getDashboardWidgetForPreInstructor(userEntity); + } @Override public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(HttpServletRequest request) { UserEntity userEntity = validator.validateUser(request); 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 2fe77d1b..de62d73d 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 @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; @@ -77,18 +78,36 @@ public interface DashboardApi { @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") ResponseEntity> getAmendmentDetails(HttpServletRequest request); + @Operation(summary = "Api to get Application details for Evaluation", responses = { - @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @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) })) }) - @GetMapping(value = "/evaluation", + + @GetMapping(value = "/evaluation", produces = { "application/json" }) @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") ResponseEntity> getApplicationDetailsForEvaluation(HttpServletRequest request); + + @Operation(summary = "Api to get dashboard widget for pre instructor", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @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) })) }) + + @GetMapping(value = "/instructor/amendment", + produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN') || hasRole('ROLE_INSTRUCTOR_MANAGER')|| hasRole('ROLE_PRE_INSTRUCTOR')") + ResponseEntity> getDashboardWidgetForPreInstructor(HttpServletRequest request); + } 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 7a4a489c..0ef56f7b 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 @@ -6,6 +6,7 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.UserActionRequest; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.AmendmentWidgetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationWidgetResponseBean; import net.gepafin.tendermanagement.model.response.AssignedApplicationWidgetResponseBean; @@ -74,6 +75,15 @@ public class DashboardApiController implements DashboardApi { } @Override + public ResponseEntity> getDashboardWidgetForPreInstructor(HttpServletRequest request) { + + /** This code is responsible for creating user action logs for the "Get dashboard stats widget for amendment page" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_DASHBOARD_WIDGET_FOR_PRE_INSTRUCTOR).build()); + + PreInstructorWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForPreInstructor(request); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); + } public ResponseEntity> getApplicationDetailsForEvaluation(HttpServletRequest request) { /** This code is responsible for creating user action logs for the "Get Application Details for Evaluation" operation. **/