En-desarrollo #65

Merged
alex merged 29 commits from En-desarrollo into main 2024-11-09 12:15:26 +00:00
3 changed files with 60 additions and 56 deletions
Showing only changes of commit 88e80a7dcc - Show all commits

View File

@ -6,7 +6,6 @@ import com.primefactorsolutions.service.TimeOffRequestService;
import com.primefactorsolutions.service.VacationService;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.H3;
import com.vaadin.flow.component.html.Span;
@ -20,6 +19,7 @@ import com.vaadin.flow.router.Route;
import com.vaadin.flow.spring.annotation.SpringComponent;
import jakarta.annotation.security.PermitAll;
import org.springframework.context.annotation.Scope;
import org.vaadin.firitin.components.grid.PagingGrid;
import java.util.Collections;
import java.util.List;
@ -36,7 +36,7 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
private final TimeOffRequestService requestService;
private final EmployeeService employeeService;
private final VacationService vacationService;
private final Grid<TimeOffRequest> requestGrid = new Grid<>(TimeOffRequest.class);
private final PagingGrid<TimeOffRequest> requestGrid = new PagingGrid<>(TimeOffRequest.class);
private List<TimeOffRequest> requests = Collections.emptyList();
private ComboBox<TimeOffRequestType> categoryFilter;
private ComboBox<TimeOffRequestStatus> stateFilter;
@ -65,7 +65,7 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
}
private ComboBox<TimeOffRequestType> createCategoryFilter() {
categoryFilter = new ComboBox<>("Category");
categoryFilter = new ComboBox<>("Categoría");
categoryFilter.setItems(TimeOffRequestType.values());
categoryFilter.setValue(TimeOffRequestType.values()[0]);
categoryFilter.addValueChangeListener(event -> refreshRequestGrid(event.getValue(), stateFilter.getValue()));
@ -73,7 +73,7 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
}
private ComboBox<TimeOffRequestStatus> createStateFilter() {
stateFilter = new ComboBox<>("State");
stateFilter = new ComboBox<>("Estado de la solicitud");
stateFilter.setItems(TimeOffRequestStatus.values());
stateFilter.setValue(TimeOffRequestStatus.values()[0]);
stateFilter.addValueChangeListener(event -> refreshRequestGrid(categoryFilter.getValue(), event.getValue()));
@ -87,7 +87,15 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
"startDate",
"endDate",
"daysToBeTake");
requestGrid.setAllRowsVisible(true);
requestGrid.getColumnByKey("category").setHeader("Categoría");
requestGrid.getColumnByKey("state").setHeader("Estado");
requestGrid.getColumnByKey("startDate").setHeader("Fecha de Inicio");
requestGrid.getColumnByKey("endDate").setHeader("Fecha de Fin");
requestGrid.getColumnByKey("daysToBeTake").setHeader("Días a Tomar");
requestGrid.setPaginationBarMode(PagingGrid.PaginationBarMode.BOTTOM);
requestGrid.setPageSize(5);
requestGrid.asSingleSelect().addValueChangeListener(event -> {
TimeOffRequest selectedRequest = event.getValue();
if (selectedRequest != null) {
@ -102,22 +110,22 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
double totalVacations = requests.stream()
.filter(req -> req.getCategory().toString().startsWith("VACATION"))
.filter(req -> req.getCategory().toString().startsWith("VACACION"))
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
double totalPersonalDays = requests.stream()
.filter(req -> !verificationIsHoliday(req))
.filter(req -> !req.getCategory().name().startsWith("VACATION"))
.filter(req -> !req.getCategory().name().startsWith("VACACION"))
.mapToDouble(TimeOffRequest::getAvailableDays)
.sum();
double totalAvailableDays = totalHoliday + totalVacations + totalPersonalDays;
return new VerticalLayout(
new Span("TOTAL HOLIDAYS: " + totalHoliday),
new Span("TOTAL VACATIONS: " + totalVacations),
new Span("TOTAL PERSONAL DAYS: " + totalPersonalDays),
new Span("TOTAL GENERAL: " + totalAvailableDays)
new Span("Total días libres: " + totalHoliday),
new Span("Total vacaciones: " + totalVacations),
new Span("Total días personales: " + totalPersonalDays),
new Span("Total general: " + totalAvailableDays)
);
}
@ -127,24 +135,23 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
}
private HorizontalLayout createActionButtons() {
Button viewButton = new Button("View", event -> {
if (request != null) {
navigateToViewRequest(request);
} else {
Notification.show("Please select a request to view.", 3000, Notification.Position.MIDDLE);
}
});
Button editButton = new Button("Edit", event -> {
if (request != null) {
navigateToEditRequest(request);
} else {
Notification.show("Please select a request to view.", 3000, Notification.Position.MIDDLE);
}
});
Button closeButton = new Button("Close", event -> navigateToRequestsListView());
Button viewButton = createButton("Ver", () -> navigateToViewRequest(request));
Button editButton = createButton("Editar", () -> navigateToEditRequest(request));
Button closeButton = new Button("Salir", event -> navigateToRequestsListView());
return new HorizontalLayout(viewButton, editButton, closeButton);
}
private Button createButton(String caption, Runnable action) {
return new Button(caption, event -> {
if (request != null) {
action.run();
} else {
Notification.show("Seleccione una solicitud.", 3000, Notification.Position.MIDDLE);
}
});
}
private void navigateToRequestsListView() {
getUI().ifPresent(ui -> ui.navigate(RequestsListView.class));
}
@ -162,33 +169,30 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
}
private void refreshRequestGrid(final TimeOffRequestType category, final TimeOffRequestStatus state) {
List<TimeOffRequest> filteredRequests = allFiltersAreNull(category, state)
? requestService.findRequestsByEmployeeId(employeeId)
: fetchFilteredTimeOffRequests(category, state);
for (TimeOffRequest request : filteredRequests) {
requestService.saveTimeOffRequest(request);
}
requestGrid.setItems(filteredRequests);
requestGrid.setPagingDataProvider((page, pageSize) -> {
int start = (int) (page * requestGrid.getPageSize());
return fetchFilteredTimeOffRequests(start, pageSize, category, state);
});
requestGrid.getDataProvider().refreshAll();
}
private boolean allFiltersAreNull(final TimeOffRequestType category, final TimeOffRequestStatus state) {
return category == null && state == null;
}
private List<TimeOffRequest> fetchFilteredTimeOffRequests(final TimeOffRequestType category,
private List<TimeOffRequest> fetchFilteredTimeOffRequests(final int start,
final int pageSize,
final TimeOffRequestType category,
final TimeOffRequestStatus state) {
requests = requestService.findRequestsByEmployeeId(employeeId);
if (category != null && !"ALL".equals(category.name())) {
if (category != null && !"TODOS".equals(category.name())) {
requests = requests.stream()
.filter(req -> req.getCategory().equals(category))
.collect(Collectors.toList());
}
if (state != null && !"ALL".equals(state.name())) {
if (state != null && !"TODOS".equals(state.name())) {
requests = requests.stream()
.filter(req -> req.getState().equals(state))
.collect(Collectors.toList());
}
return requests;
int end = Math.min(start + pageSize, requests.size());
return requests.subList(start, end);
}
@Override
@ -202,7 +206,7 @@ public class RequestEmployeeView extends Div implements HasUrlParameter<String>
}
private void setViewTitle(final String employeeName, final String employeeTeam) {
addComponentAsFirst(new H3("Name: " + employeeName));
addComponentAtIndex(1, new H3("Team: " + employeeTeam));
addComponentAsFirst(new H3("Nombre del empleado: " + employeeName));
addComponentAtIndex(1, new H3("Equipo: " + employeeTeam));
}
}

View File

@ -27,12 +27,12 @@ import java.util.UUID;
@Route(value = "/requests/:requestId?/:action?", layout = MainLayout.class)
public class RequestView extends BeanValidationForm<TimeOffRequest> implements HasUrlParameter<String> {
private final ComboBox<TimeOffRequestStatus> state = new ComboBox<>("State");
private final DatePicker expiration = new DatePicker("Expiration");
private final DatePicker startDate = new DatePicker("Start Date");
private final DatePicker endDate = new DatePicker("End Date");
private final NumberField availableDays = new NumberField("Available Days");
private final NumberField daysToBeTake = new NumberField("Days To Be Take");
private final ComboBox<TimeOffRequestStatus> state = new ComboBox<>("Estado de la solicitud");
private final DatePicker expiration = new DatePicker("Vencimiento");
private final DatePicker startDate = new DatePicker("Fecha de inicio");
private final DatePicker endDate = new DatePicker("Fecha de fin");
private final NumberField availableDays = new NumberField("Días disponibles");
private final NumberField daysToBeTake = new NumberField("Días a tomar");
private final TimeOffRequestService requestService;
private final EmployeeService employeeService;
@ -85,13 +85,13 @@ public class RequestView extends BeanValidationForm<TimeOffRequest> implements H
}
protected Button createSaveButton() {
saveButton = new Button("Save");
saveButton = new Button("Guardar");
saveButton.addClickListener(event -> saveRequest());
return saveButton;
}
protected Button createCloseButton() {
Button closeButton = new Button("Close");
Button closeButton = new Button("Salir");
closeButton.addClickListener(event -> closeForm());
return closeButton;
}
@ -110,7 +110,7 @@ public class RequestView extends BeanValidationForm<TimeOffRequest> implements H
TimeOffRequest request = getEntity();
setRequestFieldValues(request);
requestService.saveTimeOffRequest(request);
Notification.show("Request saved successfully.");
Notification.show("Solicitud guardada correctamente.");
closeForm();
}
}
@ -147,14 +147,14 @@ public class RequestView extends BeanValidationForm<TimeOffRequest> implements H
}
private H3 createEmployeeHeader() {
return new H3("Employee: " + employee.getFirstName() + " " + employee.getLastName());
return new H3("Empleado: " + employee.getFirstName() + " " + employee.getLastName());
}
private H3 createTeamHeader() {
return new H3("Team: " + employee.getTeam().getName());
return new H3("Equipo: " + employee.getTeam().getName());
}
private H3 createCategoryHeader() {
return new H3("Category: " + request.getCategory());
return new H3("Categoría: " + request.getCategory());
}
}

View File

@ -90,7 +90,7 @@ public class RequestsListView extends Main {
if (selectedEmployeeId != null) {
navigateToTimeOffRequestView(selectedEmployeeId);
} else {
Notification.show("Seleccione una solicitud para verla.", 3000, Notification.Position.MIDDLE);
Notification.show("Seleccione una solicitud.", 3000, Notification.Position.MIDDLE);
}
});
Button closeButton = new Button("Salir", event -> navigateToMainView());