Done ticket GEPAFINBE-145
This commit is contained in:
@@ -6,10 +6,7 @@ import net.gepafin.tendermanagement.entities.UserActionEntity;
|
||||
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||
import net.gepafin.tendermanagement.entities.UserWithCompanyEntity;
|
||||
import net.gepafin.tendermanagement.entities.*;
|
||||
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
|
||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
|
||||
import net.gepafin.tendermanagement.enums.UserStatusEnum;
|
||||
import net.gepafin.tendermanagement.enums.*;
|
||||
import net.gepafin.tendermanagement.model.response.*;
|
||||
import net.gepafin.tendermanagement.repositories.*;
|
||||
import net.gepafin.tendermanagement.service.CompanyService;
|
||||
@@ -23,9 +20,7 @@ import org.springframework.stereotype.Component;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
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.time.LocalTime;
|
||||
@@ -362,5 +357,95 @@ public class DashboardDao {
|
||||
}
|
||||
}
|
||||
|
||||
private PreInstructorWidgetResponseBean initializeDashboardPreInstructorResponseBean() {
|
||||
return PreInstructorWidgetResponseBean.builder()
|
||||
.assignedApplication(ApplicationToConsider.builder()
|
||||
.totalAssignedApplication(0L)
|
||||
.additionalApplication(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<Long> applicationIds = getApplicationIdsForUserOrHub(userEntity, hubId);
|
||||
setPreInstructorWidgets(applicationIds, preInstructorWidgetResponseBean,hubId);
|
||||
calculateAverageEvaluationTime(applicationIds, preInstructorWidgetResponseBean, hubId);
|
||||
return preInstructorWidgetResponseBean;
|
||||
}
|
||||
private void setPreInstructorWidgets(List<Long> 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(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().setAdditionalApplication(percentageAdded.setScale(2, RoundingMode.HALF_UP));
|
||||
}
|
||||
|
||||
List<String> 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 = applicationRepository.countApplicationsByIdsAndStatus(applicationIds, ApplicationStatusTypeEnum.SOCCORSO.getValue());
|
||||
if (rescueInstructorsInProgress != null) {
|
||||
responseBean.getAmendmentInProgress().setTotalAmendmentInProgress(rescueInstructorsInProgress);
|
||||
}
|
||||
calculateExpiringRescueInstructorsToday(applicationIds,responseBean);
|
||||
|
||||
}
|
||||
private void calculateExpiringRescueInstructorsToday(List<Long> applicationIds, PreInstructorWidgetResponseBean responseBean) {
|
||||
List<String> 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<Long> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user