Lista de Solicitudes de empleado - Refactorizar

This commit is contained in:
jesus.pelaez 2024-11-13 12:38:25 -04:00
parent 51a1d22be9
commit 6d60fd00cc
2 changed files with 78 additions and 38 deletions

View File

@ -23,9 +23,7 @@ import org.vaadin.firitin.components.grid.PagingGrid;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.Period; import java.time.Period;
import java.util.Collections; import java.util.*;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@SpringComponent @SpringComponent
@ -106,51 +104,68 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
}); });
} }
private Set<TimeOffRequestType> getStandardExclusions() {
return Set.of(
TimeOffRequestType.MATERNIDAD,
TimeOffRequestType.PATERNIDAD,
TimeOffRequestType.MATRIMONIO,
TimeOffRequestType.DUELO_1ER_GRADO,
TimeOffRequestType.DUELO_2ER_GRADO,
TimeOffRequestType.DIA_DEL_PADRE,
TimeOffRequestType.DIA_DE_LA_MADRE
);
}
private Set<TimeOffRequestType> getMaleSpecificExclusions() {
return Set.of(
TimeOffRequestType.DIA_DE_LA_MUJER_INTERNACIONAL,
TimeOffRequestType.DIA_DE_LA_MUJER_NACIONAL
);
}
private VerticalLayout createSummaryLayout() { private VerticalLayout createSummaryLayout() {
Employee employee = employeeService.getEmployee(employeeId);
boolean isMale = employee.getGender() == Employee.Gender.MALE;
List<Vacation> vacations = vacationService.findVacations(); List<Vacation> vacations = vacationService.findVacations();
double holiday = vacations.stream() double totalFixedAndMovableHolidays = calculateHolidayDays(vacations);
double totalPersonalDays = calculatePersonalDays(vacations, isMale);
double totalVacationDays = calculateVacationDays(employee);
double utilizedFixedAndMovableHolidays = calculateHolidayUtilizedDays();
double utilizedVacationDays = calculateVacationUtilizedDays();
double utilizedPersonalDays = calculatePersonalDaysUtilized(isMale);
double remainingHolidayDays = totalFixedAndMovableHolidays - utilizedFixedAndMovableHolidays;
double remainingPersonalDays = totalPersonalDays - utilizedPersonalDays;
double remainingVacationDays = totalVacationDays - utilizedVacationDays;
double totalAvailableDays = remainingHolidayDays + remainingPersonalDays + remainingVacationDays;
return new VerticalLayout(
new Span("Total feriados fijos y movibles: " + remainingHolidayDays),
new Span("Total días libres personales: " + remainingPersonalDays),
new Span("Total vacaciones pendientes de uso: " + remainingVacationDays),
new Span("Total general de días disponibles: " + totalAvailableDays)
);
}
private double calculateHolidayDays(final List<Vacation> vacations) {
return vacations.stream()
.filter(req -> req.getType() != Vacation.Type.OTHER) .filter(req -> req.getType() != Vacation.Type.OTHER)
.mapToDouble(Vacation::getDuration) .mapToDouble(Vacation::getDuration)
.sum(); .sum();
}
double personalDays = vacations.stream() private double calculatePersonalDays(final List<Vacation> vacations, final boolean isMale) {
return vacations.stream()
.filter(req -> req.getType() == Vacation.Type.OTHER) .filter(req -> req.getType() == Vacation.Type.OTHER)
.filter(req -> !getStandardExclusions().contains(req.getCategory()))
.filter(req -> !(isMale && getMaleSpecificExclusions().contains(req.getCategory())))
.filter(req -> !req.getCategory().name().startsWith("VACACION")) .filter(req -> !req.getCategory().name().startsWith("VACACION"))
.mapToDouble(Vacation::getDuration) .mapToDouble(Vacation::getDuration)
.sum(); .sum();
double vacation = calculateVacationDays(employeeService.getEmployee(employeeId));
double holidayUtilized = requests.stream()
.filter(this::verificationIsHoliday)
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
double vacationUtilized = requests.stream()
.filter(req -> req.getCategory() == TimeOffRequestType.VACACION_GESTION_ACTUAL)
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
double personalDaysUtilized = requests.stream()
.filter(req -> !verificationIsHoliday(req))
.filter(req -> !req.getCategory().name().startsWith("VACACION"))
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
double totalHoliday = holiday - holidayUtilized;
double totalPersonalDays = personalDays - personalDaysUtilized;
double totalVacations = vacation - vacationUtilized;
double totalAvailableDays = totalHoliday + totalVacations + totalPersonalDays;
return new VerticalLayout(
new Span("Total feriados fijos y movibles: " + totalHoliday),
new Span("Total días libres personales: " + totalPersonalDays),
new Span("Total vacaciones pendientes de uso: " + totalVacations),
new Span("Total general de días disponibles: " + totalAvailableDays)
);
} }
private double calculateVacationDays(final Employee employee) { private double calculateVacationDays(final Employee employee) {
@ -196,6 +211,30 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
} }
} }
private double calculateHolidayUtilizedDays() {
return requests.stream()
.filter(this::verificationIsHoliday)
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
}
private double calculateVacationUtilizedDays() {
return requests.stream()
.filter(req -> req.getCategory() == TimeOffRequestType.VACACION_GESTION_ACTUAL)
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
}
private double calculatePersonalDaysUtilized(final boolean isMale) {
return requests.stream()
.filter(req -> !verificationIsHoliday(req))
.filter(req -> !getStandardExclusions().contains(req.getCategory()))
.filter(req -> !(isMale && getMaleSpecificExclusions().contains(req.getCategory())))
.filter(req -> !req.getCategory().name().startsWith("VACACION"))
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
}
private double calculateVacationDaysSinceEntry(final LocalDate dateOfEntry, final LocalDate date) { private double calculateVacationDaysSinceEntry(final LocalDate dateOfEntry, final LocalDate date) {
int yearsOfService = dateOfEntry != null ? Period.between(dateOfEntry, date).getYears() : 0; int yearsOfService = dateOfEntry != null ? Period.between(dateOfEntry, date).getYears() : 0;
if (yearsOfService > 10) { if (yearsOfService > 10) {

View File

@ -171,7 +171,8 @@ public class RequestRegisterView extends VerticalLayout {
return latestRequest.getState() == TimeOffRequestStatus.VENCIDO return latestRequest.getState() == TimeOffRequestStatus.VENCIDO
|| (latestRequest.getState() == TimeOffRequestStatus.TOMADO && latestRequest.getDaysBalance() > 0); || (latestRequest.getState() == TimeOffRequestStatus.TOMADO && latestRequest.getDaysBalance() > 0);
} else { } else {
return latestRequest.getState() == TimeOffRequestStatus.VENCIDO || latestRequest.getState() == TimeOffRequestStatus.RECHAZADO; return latestRequest.getState() == TimeOffRequestStatus.VENCIDO
|| latestRequest.getState() == TimeOffRequestStatus.RECHAZADO;
} }
} }