WIP: Rama-Melina #4 y #5 #13

Closed
melina.gutierrez wants to merge 3 commits from Rama-Melina into main
Showing only changes of commit 29ebc2e4e6 - Show all commits

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;
});
Review

parece que los campos de emergency contact no estan definidos en la clase model Employee. Se deberian crear esos campos para que puedan ser guardados en al DB.

podrias ir viendo de agregar campo por campo y ver si se guardan en la db cuando se hace el save.

parece que los campos de emergency contact no estan definidos en la clase model Employee. Se deberian crear esos campos para que puedan ser guardados en al DB. podrias ir viendo de agregar campo por campo y ver si se guardan en la db cuando se hace el 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
); );
} }