Merge pull request #176 from Kitzanos/feature/GEPAFINBE-144

GEPAFINBE-144(Instructor: stats for domande da valutare page)
This commit is contained in:
Rinaldo
2025-01-24 08:14:59 +01:00
committed by GitHub
9 changed files with 158 additions and 17 deletions

View File

@@ -6,31 +6,23 @@ 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;
import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
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;
import java.util.List;
import java.util.List;
import java.util.stream.Collectors;
@Component
@@ -57,8 +49,6 @@ public class DashboardDao {
@Autowired
private ApplicationEvaluationRepository applicationEvaluationRepository;
@Autowired
private UserActionsRepository userActionsRepository;
@Autowired
private ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository;
@@ -258,14 +248,15 @@ public class DashboardDao {
if (Boolean.FALSE.equals(applicationIds.isEmpty())) {
BigDecimal averageTime = applicationEvaluationRepository.findAverageEvaluationTimeByApplicationIds(applicationIds);
responseBean.setEvaluationAverageTime(averageTime != null ? averageTime : BigDecimal.ZERO);
responseBean.setEvaluationAverageTime(averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO);
}
LocalDate twoDaysLater = LocalDate.now().plusDays(2);
List<String> statusList =Arrays.asList( ApplicationEvaluationStatusTypeEnum.OPEN.getValue(), ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue());
Long dueApplications = applicationEvaluationRepository.countDueApplicationsBetween(
applicationIds,
LocalDate.now(),
twoDaysLater
twoDaysLater,
statusList
);
if (dueApplications != null) {
@@ -362,5 +353,57 @@ public class DashboardDao {
}
}
public AssignedApplicationWidgetResponseBean getApplicationDetailsForEvaluation(UserEntity userEntity) {
Long userId = userEntity.getId();
Long hubId = userEntity.getHub().getId();
Object[] results;
List<Long> applicationIds;
if (validator.checkIsPreInstructor()) {
results = assignedApplicationsRepository.countAssignedApplicationsWithStatus(userId, hubId);
applicationIds = assignedApplicationsRepository.findApplicationIdsByUserIdAndHubIdAndIsDeletedFalse(userId,hubId);
} else {
results = assignedApplicationsRepository.countAssignedApplicationsForHub(hubId);
applicationIds = assignedApplicationsRepository.findApplicationIdsByHubId(hubId);
}
AssignedApplicationWidgetResponseBean response = convertToResponse(results);
calculateEvaluationAvgTimeForAssignedApplication(response, applicationIds);
return response;
}
private void calculateEvaluationAvgTimeForAssignedApplication(AssignedApplicationWidgetResponseBean response, List<Long> applicationIds) {
if (applicationIds == null || applicationIds.isEmpty()) {
response.setAverageEvaluationDays(BigDecimal.ZERO);
response.setNumberOfApplicationExpiringIn48Hours(0L);
return;
}
BigDecimal averageTime = applicationEvaluationRepository.findAverageEvaluationTimeByApplicationIds(applicationIds);
response.setAverageEvaluationDays(averageTime != null ? averageTime.setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO);
LocalDate today = LocalDate.now();
LocalDate twoDaysLater = today.plusDays(2);
List<String> statusList =Arrays.asList( ApplicationEvaluationStatusTypeEnum.OPEN.getValue(), ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue());
Long dueApplications = applicationEvaluationRepository.countDueApplicationsBetween(
applicationIds, today, twoDaysLater,statusList
);
response.setNumberOfApplicationExpiringIn48Hours(dueApplications != null ? dueApplications : 0L);
}
private AssignedApplicationWidgetResponseBean convertToResponse(Object[] results) {
AssignedApplicationWidgetResponseBean response = new AssignedApplicationWidgetResponseBean();
Object[] data = (Object[]) results[0];
response.setNumberOfAssignedApplication(data[0] instanceof Number ? ((Number) data[0]).longValue() : 0L);
response.setNumberOfApplicationInAmendmentState(data[1] instanceof Number ? ((Number) data[1]).longValue() : 0L);
response.setNumberOfApplicationInEvaluationState(data[2] instanceof Number ? ((Number) data[2]).longValue() : 0L);
response.setNumberOfAcceptedApplication(data[3] instanceof Number ? ((Number) data[3]).longValue() : 0L);
return response;
}
}