#46 Perfil de Empleado - Registro Semanal de Horas trabajadas
This commit is contained in:
parent
2a59bc4e7e
commit
3e57c50378
@ -1,19 +1,32 @@
|
||||
package com.primefactorsolutions.views;
|
||||
|
||||
import com.primefactorsolutions.model.Employee;
|
||||
import com.primefactorsolutions.service.EmployeeService;
|
||||
import com.vaadin.flow.component.HasValue;
|
||||
import com.vaadin.flow.component.datepicker.DatePicker;
|
||||
import com.vaadin.flow.component.grid.Grid;
|
||||
import com.vaadin.flow.component.notification.Notification;
|
||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||
import com.vaadin.flow.component.textfield.TextField;
|
||||
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.orderedlayout.VerticalLayout;
|
||||
import com.vaadin.flow.component.html.H2;
|
||||
import com.vaadin.flow.router.PageTitle;
|
||||
import com.vaadin.flow.router.Route;
|
||||
import com.vaadin.flow.spring.annotation.SpringComponent;
|
||||
import jakarta.annotation.security.PermitAll;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.time.temporal.WeekFields;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
|
||||
@SpringComponent
|
||||
@PermitAll
|
||||
@ -21,20 +34,42 @@ import java.time.LocalDate;
|
||||
@PageTitle("Hours Worked")
|
||||
@Route(value = "/hours-worked/me", layout = MainLayout.class)
|
||||
public class HoursWorkedView extends VerticalLayout {
|
||||
private final List<Actividad> actividades;
|
||||
private final Grid<Actividad> grid;
|
||||
private final Grid<Actividad> totalsGrid;
|
||||
private LocalDate selectedStartOfWeek;
|
||||
|
||||
@Autowired
|
||||
private EmployeeService employeeService;
|
||||
|
||||
public HoursWorkedView() {
|
||||
H2 title = new H2("Registro de Horas Trabajadas");
|
||||
actividades = new ArrayList<>();
|
||||
grid = new Grid<>(Actividad.class, false);
|
||||
totalsGrid = new Grid<>(Actividad.class, false);
|
||||
|
||||
DatePicker datePicker = new DatePicker("Selecciona una fecha");
|
||||
datePicker.setValue(LocalDate.now());
|
||||
datePicker.addValueChangeListener(event -> {
|
||||
LocalDate selectedDate = event.getValue();
|
||||
if (selectedDate != null) {
|
||||
selectedStartOfWeek = selectedDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
||||
mostrarActividadesDeLaSemana();
|
||||
}
|
||||
});
|
||||
datePicker.setWidth("250px");
|
||||
|
||||
ComboBox<String> equipoDropdown = new ComboBox<>("Equipo");
|
||||
equipoDropdown.setItems("Equipo 1", "Equipo 2", "Equipo 3"); // Ejemplo de datos
|
||||
equipoDropdown.setItems("Equipo 1", "Equipo 2", "Equipo 3");
|
||||
equipoDropdown.setWidth("250px");
|
||||
|
||||
TextField empleadoSearch = new TextField("Empleado (Search)");
|
||||
empleadoSearch.setWidth("250px");
|
||||
empleadoSearch.addValueChangeListener(event -> {
|
||||
});
|
||||
|
||||
HorizontalLayout filtersLayout = new HorizontalLayout(equipoDropdown, empleadoSearch);
|
||||
filtersLayout.setSpacing(true);
|
||||
|
||||
Grid<Actividad> grid = new Grid<>(Actividad.class, false);
|
||||
grid.addColumn(Actividad::getNombre).setHeader("Actividad");
|
||||
grid.addColumn(Actividad::getLunes).setHeader("Lunes");
|
||||
grid.addColumn(Actividad::getMartes).setHeader("Martes");
|
||||
@ -43,47 +78,104 @@ public class HoursWorkedView extends VerticalLayout {
|
||||
grid.addColumn(Actividad::getViernes).setHeader("Viernes");
|
||||
grid.addColumn(Actividad::getSabado).setHeader("Sábado");
|
||||
grid.addColumn(Actividad::getDomingo).setHeader("Domingo");
|
||||
grid.addColumn(this::calcularTotalPorDia).setHeader("Total Día").setKey("totalDia");
|
||||
grid.setWidth("100%");
|
||||
|
||||
grid.setItems(
|
||||
new Actividad.Builder()
|
||||
.nombre("Actividad 1")
|
||||
.lunes(3)
|
||||
.martes(3)
|
||||
.miercoles(3)
|
||||
.jueves(3)
|
||||
.viernes(3)
|
||||
.sabado(1)
|
||||
.domingo(2)
|
||||
.build(),
|
||||
new Actividad.Builder()
|
||||
.nombre("Actividad 2")
|
||||
.lunes(2)
|
||||
.martes(2)
|
||||
.miercoles(2)
|
||||
.jueves(2)
|
||||
.viernes(2)
|
||||
.sabado(0)
|
||||
.domingo(1)
|
||||
.build(),
|
||||
new Actividad.Builder()
|
||||
.nombre("Meeting 1")
|
||||
.lunes(0)
|
||||
.martes(0.5)
|
||||
.miercoles(0.5)
|
||||
.jueves(0)
|
||||
.viernes(0)
|
||||
.sabado(0.5)
|
||||
.domingo(0)
|
||||
.build()
|
||||
);
|
||||
TextField actividadNombre = new TextField("Actividad");
|
||||
TextField lunesHoras = new TextField("Lunes");
|
||||
TextField martesHoras = new TextField("Martes");
|
||||
TextField miercolesHoras = new TextField("Miércoles");
|
||||
TextField juevesHoras = new TextField("Jueves");
|
||||
TextField viernesHoras = new TextField("Viernes");
|
||||
TextField sabadoHoras = new TextField("Sábado");
|
||||
TextField domingoHoras = new TextField("Domingo");
|
||||
|
||||
Button actualizarButton = new Button("Actualizar");
|
||||
Button agregarActividadButton = new Button("Agregar Actividad", e -> {
|
||||
try {
|
||||
String nombre = actividadNombre.getValue();
|
||||
double lunes = Double.parseDouble(lunesHoras.getValue());
|
||||
double martes = Double.parseDouble(martesHoras.getValue());
|
||||
double miercoles = Double.parseDouble(miercolesHoras.getValue());
|
||||
double jueves = Double.parseDouble(juevesHoras.getValue());
|
||||
double viernes = Double.parseDouble(viernesHoras.getValue());
|
||||
double sabado = Double.parseDouble(sabadoHoras.getValue());
|
||||
double domingo = Double.parseDouble(domingoHoras.getValue());
|
||||
|
||||
Actividad nuevaActividad = new Actividad.Builder()
|
||||
.nombre(nombre)
|
||||
.lunes(lunes)
|
||||
.martes(martes)
|
||||
.miercoles(miercoles)
|
||||
.jueves(jueves)
|
||||
.viernes(viernes)
|
||||
.sabado(sabado)
|
||||
.domingo(domingo)
|
||||
.build();
|
||||
|
||||
actividades.add(nuevaActividad);
|
||||
grid.setItems(actividades);
|
||||
actualizarTotales();
|
||||
|
||||
Notification.show("Actividad agregada correctamente");
|
||||
} catch (NumberFormatException ex) {
|
||||
Notification.show("Error: Por favor ingresa números válidos para las horas.");
|
||||
}
|
||||
});
|
||||
|
||||
HorizontalLayout actividadFormLayout = new HorizontalLayout(actividadNombre, lunesHoras, martesHoras, miercolesHoras, juevesHoras, viernesHoras, sabadoHoras, domingoHoras, agregarActividadButton);
|
||||
|
||||
Button actualizarButton = new Button("Actualizar Totales", event -> actualizarTotales());
|
||||
Button guardarButton = new Button("Guardar");
|
||||
Button cerrarButton = new Button("Cerrar");
|
||||
|
||||
HorizontalLayout buttonsLayout = new HorizontalLayout(actualizarButton, guardarButton, cerrarButton);
|
||||
|
||||
add(title, datePicker, filtersLayout, grid, buttonsLayout);
|
||||
add(datePicker, filtersLayout, grid, actividadFormLayout, buttonsLayout);
|
||||
add(totalsGrid);
|
||||
|
||||
configurarTablaTotales();
|
||||
}
|
||||
|
||||
private void mostrarActividadesDeLaSemana() {
|
||||
if (selectedStartOfWeek != null) {
|
||||
Notification.show("Mostrando actividades de la semana del " + selectedStartOfWeek + " al " + selectedStartOfWeek.plusDays(6));
|
||||
}
|
||||
}
|
||||
|
||||
private double calcularTotalPorDia(Actividad actividad) {
|
||||
return actividad.getLunes() + actividad.getMartes() + actividad.getMiercoles() +
|
||||
actividad.getJueves() + actividad.getViernes() + actividad.getSabado() + actividad.getDomingo();
|
||||
}
|
||||
|
||||
private void configurarTablaTotales() {
|
||||
totalsGrid.addColumn(Actividad::getNombre).setHeader("Descripción");
|
||||
totalsGrid.addColumn(Actividad::getLunes).setHeader("Total");
|
||||
}
|
||||
|
||||
private void actualizarTotales() {
|
||||
double totalLunes = actividades.stream().mapToDouble(Actividad::getLunes).sum();
|
||||
double totalMartes = actividades.stream().mapToDouble(Actividad::getMartes).sum();
|
||||
double totalMiercoles = actividades.stream().mapToDouble(Actividad::getMiercoles).sum();
|
||||
double totalJueves = actividades.stream().mapToDouble(Actividad::getJueves).sum();
|
||||
double totalViernes = actividades.stream().mapToDouble(Actividad::getViernes).sum();
|
||||
double totalSabado = actividades.stream().mapToDouble(Actividad::getSabado).sum();
|
||||
double totalDomingo = actividades.stream().mapToDouble(Actividad::getDomingo).sum();
|
||||
|
||||
double totalSemanaCompletada = totalLunes + totalMartes + totalMiercoles + totalJueves + totalViernes + totalSabado + totalDomingo;
|
||||
double horasPendientes = 40 - totalSemanaCompletada;
|
||||
|
||||
List<Actividad> totales = new ArrayList<>();
|
||||
totales.add(new Actividad.Builder()
|
||||
.nombre("Total Hrs/Semana Completadas")
|
||||
.lunes(totalSemanaCompletada)
|
||||
.build());
|
||||
|
||||
totales.add(new Actividad.Builder()
|
||||
.nombre("Total Hrs/Semana Pendientes")
|
||||
.lunes(horasPendientes)
|
||||
.build());
|
||||
|
||||
totalsGrid.setItems(totales);
|
||||
}
|
||||
|
||||
public static final class Actividad {
|
||||
@ -194,4 +286,4 @@ public class HoursWorkedView extends VerticalLayout {
|
||||
return domingo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user