#4 Perfil de Empleado - Registro de Información Personal con titulos

This commit is contained in:
Melina Gutierrez 2024-08-26 10:52:00 -04:00
parent 70b57708c6
commit 29ebc2e4e6

View File

@ -2,15 +2,17 @@ package com.primefactorsolutions.views;
import com.primefactorsolutions.model.Employee; import com.primefactorsolutions.model.Employee;
import com.primefactorsolutions.service.EmployeeService; import com.primefactorsolutions.service.EmployeeService;
import com.vaadin.flow.component.ClickEvent;
import com.vaadin.flow.component.Component; import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.ComponentEventListener;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.html.H2; import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.H3; import com.vaadin.flow.component.html.H3;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.EmailField;
import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.function.ValueProvider; import com.vaadin.flow.data.value.ValueChangeMode;
import com.vaadin.flow.router.BeforeEvent; import com.vaadin.flow.router.BeforeEvent;
import com.vaadin.flow.router.HasUrlParameter; import com.vaadin.flow.router.HasUrlParameter;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
@ -20,7 +22,6 @@ import jakarta.annotation.security.PermitAll;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.vaadin.firitin.components.datepicker.VDatePicker; import org.vaadin.firitin.components.datepicker.VDatePicker;
import org.vaadin.firitin.components.grid.VGrid;
import org.vaadin.firitin.form.BeanValidationForm; import org.vaadin.firitin.form.BeanValidationForm;
import java.util.List; import java.util.List;
@ -31,7 +32,6 @@ import java.util.UUID;
@Scope("prototype") @Scope("prototype")
@PageTitle("Employee") @PageTitle("Employee")
@Route(value = "/employees", layout = MainLayout.class) @Route(value = "/employees", layout = MainLayout.class)
public class EmployeeView extends BeanValidationForm<Employee> implements HasUrlParameter<String> { public class EmployeeView extends BeanValidationForm<Employee> implements HasUrlParameter<String> {
private final EmployeeService employeeService; private final EmployeeService employeeService;
@ -39,98 +39,147 @@ public class EmployeeView extends BeanValidationForm<Employee> implements HasUrl
private TextField lastName = null; private TextField lastName = null;
private VDatePicker birthday = null; private VDatePicker birthday = null;
private TextField birthCity = null; private TextField birthCity = null;
private TextField maritalStatus = null; private ComboBox<String> maritalStatus = null;
private TextField residenceAddress = null; private TextField residenceAddress = null;
private TextField phoneNumber = null; private TextField phoneNumber = null;
private TextField personalEmail = null; private EmailField personalEmail = null;
private TextField emergencyCName; private TextField emergencyCName = null;
private TextField emergencyCAddress; private TextField emergencyCAddress = null;
private TextField emergencyCPhone; private TextField emergencyCPhone = null;
private TextField emergencyCEmail; private EmailField emergencyCEmail = null;
private H2 mt = null;
private H3 fs = null;
private H3 ss = null;
private final Button saveButton = new Button("Save");
private final Button editButton = new Button("Edit");
public EmployeeView(final EmployeeService employeeService) { public EmployeeView(final EmployeeService employeeService) {
super(Employee.class); super(Employee.class);
this.employeeService = employeeService; this.employeeService = employeeService;
final H2 title = new H2("INFORMACION GENERAL DEL EMPLEADO");
final H3 subtitle = new H3("INFORMACION PERSONAL"); configureButtons();
final HorizontalLayout hl = new HorizontalLayout();
final HorizontalLayout hf = new HorizontalLayout(); mt = new H2("Información General del Empleado");
name = new TextField(); fs = new H3("Información Personal");
ss = new H3("Datos de Contacto de Emergencia");
final HorizontalLayout mainLayout = new HorizontalLayout();
final VerticalLayout sidebar = createSidebar();
final VerticalLayout contentLayout = createContentLayout();
final VerticalLayout contentLayout2 = createContentLayout();
name = new TextField("Nombres: ");
name.setWidthFull(); name.setWidthFull();
name.setLabel("Nombres: "); name.setMaxLength(30);
lastName = new TextField(); lastName = new TextField("Apellidos");
lastName.setWidthFull(); lastName.setWidthFull();
lastName.setLabel("Apellidos: "); lastName.setMaxLength(30);
birthday = new VDatePicker(); birthday = new VDatePicker("Fecha de Nacimiento");
birthday.setWidthFull(); birthday.setWidthFull();
birthday.setLabel("Fecha de Nacimiento:");
birthCity = new TextField(); birthCity = new TextField("Ciudad y País de Nacimiento");
birthCity.setWidthFull(); birthCity.setWidthFull();
birthCity.setLabel("Ciudad y pais de nacimiento: "); birthCity.setMaxLength(20);
maritalStatus = new TextField(); maritalStatus = new ComboBox<>("Estado Civil");
maritalStatus.setItems(List.of("Soltero", "Casado", "Viudo", "Divorciado"));
maritalStatus.setWidthFull(); maritalStatus.setWidthFull();
maritalStatus.setLabel("Estado Civil: ");
residenceAddress = new TextField(); residenceAddress = new TextField("Dirección de Residencia");
residenceAddress.setWidthFull(); residenceAddress.setWidthFull();
residenceAddress.setLabel("Direccion de Residencia: "); residenceAddress.setMaxLength(50);
phoneNumber = new TextField(); phoneNumber = new TextField("Teléfono");
phoneNumber.setWidthFull(); phoneNumber.setWidthFull();
phoneNumber.setLabel("Telefono: "); phoneNumber.setMaxLength(8);
phoneNumber.setValueChangeMode(ValueChangeMode.EAGER);
phoneNumber.addValueChangeListener(e -> {
if (!e.getValue().matches("\\d*")) {
phoneNumber.setErrorMessage("El teléfono debe contener solo números.");
}
});
personalEmail = new TextField(); personalEmail = new EmailField("E-mail");
personalEmail.setWidthFull(); personalEmail.setWidthFull();
personalEmail.setLabel("E-mail: "); personalEmail.setMaxLength(30);
final H3 secondsubtitle = new H3("DATOS DE CONTACTO DE EMERGENCIA"); emergencyCName = new TextField("Nombres y Apellidos de Contacto");
emergencyCName = new TextField();
emergencyCName.setWidthFull(); emergencyCName.setWidthFull();
emergencyCName.setLabel("Nombres y Apellidos de contacto: "); emergencyCName.setMaxLength(50);
emergencyCAddress = new TextField(); emergencyCAddress = new TextField("Dirección de Contacto");
emergencyCAddress.setWidthFull(); emergencyCAddress.setWidthFull();
emergencyCAddress.setLabel("Direccion de contacto: "); emergencyCAddress.setMaxLength(50);
emergencyCPhone = new TextField(); emergencyCPhone = new TextField("Teléfono de Contacto");
emergencyCPhone.setWidthFull(); emergencyCPhone.setWidthFull();
emergencyCPhone.setLabel("Telefono de contacto: "); emergencyCPhone.setMaxLength(8);
emergencyCPhone.setValueChangeMode(ValueChangeMode.EAGER);
emergencyCPhone.addValueChangeListener(e -> {
if (!e.getValue().matches("\\d*")) {
emergencyCPhone.setErrorMessage("El teléfono debe contener solo números.");
}
});
emergencyCEmail = new TextField(); emergencyCEmail = new EmailField("Email de Contacto");
emergencyCEmail.setWidthFull(); emergencyCEmail.setWidthFull();
emergencyCEmail.setLabel("Email de contacto: "); emergencyCEmail.setMaxLength(30);
final VGrid<Employee> grid = new VGrid<>(Employee.class); contentLayout.add(
mt, fs, name, lastName, birthday, birthCity, maritalStatus,
residenceAddress, phoneNumber, personalEmail);
grid.addComponentColumn((ValueProvider<Employee, Component>) employee -> { contentLayout2.add(
final Button edit = new Button("Edit"); ss, emergencyCName, emergencyCAddress, emergencyCPhone, emergencyCEmail);
edit.addClickListener((ComponentEventListener<ClickEvent<Button>>) buttonClickEvent -> {
// no-op
});
return edit;
});
grid.addComponentColumn((ValueProvider<Employee, Component>) employee -> {
final Button save = new Button("Save");
save.addClickListener((ComponentEventListener<ClickEvent<Button>>) buttonClickEvent -> {
// no-op
});
return save;
});
setSavedHandler((SavedHandler<Employee>) employee -> { setSavedHandler((SavedHandler<Employee>) employee -> {
final Employee saved = employeeService.createOrUpdate(employee); final Employee saved = employeeService.createOrUpdate(employee);
setEntityWithEnabledSave(saved); setEntityWithEnabledSave(saved);
}); });
mainLayout.add(sidebar, contentLayout, contentLayout2);
addClassName("main-layout");
}
private void configureButtons() {
editButton.setEnabled(false); // Desactivar el botón de editar inicialmente
saveButton.addClickListener(e -> {
if (isValid()) {
saveButton.setEnabled(false);
} else {
Notification.show("Por favor, complete todos los campos obligatorios.");
}
});
editButton.addClickListener(e -> {
Notification.show("Modo de edición activado.");
setHasChanges(false);
});
}
private VerticalLayout createSidebar() {
VerticalLayout sidebar = new VerticalLayout();
sidebar.setWidth("250px");
sidebar.add(new Button("Información General", e -> navigateToSection("Información General")));
sidebar.add(new Button("Detalles Profesionales", e -> navigateToSection("Detalles Profesionales")));
return sidebar;
}
private void navigateToSection(final String section) {
Notification.show("Navigating to " + section);
}
private VerticalLayout createContentLayout() {
VerticalLayout contentLayout = new VerticalLayout();
contentLayout.setWidth("100%");
return contentLayout;
} }
@Override @Override
@ -138,14 +187,18 @@ public class EmployeeView extends BeanValidationForm<Employee> implements HasUrl
if (StringUtils.isNotBlank(s) && !"new".equals(s)) { if (StringUtils.isNotBlank(s) && !"new".equals(s)) {
var employee = employeeService.getEmployee(UUID.fromString(s)); var employee = employeeService.getEmployee(UUID.fromString(s));
setEntityWithEnabledSave(employee); setEntityWithEnabledSave(employee);
editButton.setEnabled(true);
} else { } else {
setEntityWithEnabledSave(new Employee()); setEntityWithEnabledSave(new Employee());
editButton.setEnabled(false);
} }
} }
@Override @Override
protected List<Component> getFormComponents() { protected List<Component> getFormComponents() {
return List.of( return List.of(
mt,
fs,
name, name,
lastName, lastName,
birthday, birthday,
@ -154,10 +207,13 @@ public class EmployeeView extends BeanValidationForm<Employee> implements HasUrl
residenceAddress, residenceAddress,
phoneNumber, phoneNumber,
personalEmail, personalEmail,
ss,
emergencyCName, emergencyCName,
emergencyCAddress, emergencyCAddress,
emergencyCPhone, emergencyCPhone,
emergencyCEmail emergencyCEmail,
saveButton,
editButton
); );
} }