From 50ae40449b2dd45e218189c2f0833eefdcd34131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Cort=C3=A9s?= Date: Tue, 28 May 2019 22:33:15 -0400 Subject: [PATCH] Agrege Trabajadores! --- biblioteca.vpp | Bin 898048 -> 898048 bytes pom.xml | 5 + script.sql | 8 +- src/main/java/xyz/danielcortes/App.java | 3 +- .../controllers/LaunchController.java | 18 ++ .../TrabajadorCreateController.java | 117 ++++++++++++ .../TrabajadorSearchController.java | 125 ++++++++++++ .../TrabajadorUpdateController.java | 102 ++++++++++ .../trabajador/TrabajadorViewController.java | 47 +++++ .../xyz/danielcortes/framework/PanelName.java | 5 + .../xyz/danielcortes/models/Trabajador.java | 101 ++++++++++ .../java/xyz/danielcortes/models/Usuario.java | 15 ++ .../repository/TrabajadorRespository.java | 34 ++++ .../validator/TrabajadorValidator.java | 85 +++++++++ .../validator/UsuarioValidator.java | 35 ++++ .../trabajador/TrabajadorCreatePanel.form | 170 +++++++++++++++++ .../trabajador/TrabajadorCreatePanel.java | 178 ++++++++++++++++++ .../trabajador/TrabajadorSearchPanel.form | 96 ++++++++++ .../trabajador/TrabajadorSearchPanel.java | 154 +++++++++++++++ .../trabajador/TrabajadorUpdatePanel.form | 138 ++++++++++++++ .../trabajador/TrabajadorUpdatePanel.java | 151 +++++++++++++++ .../views/trabajador/TrabajadorViewPanel.form | 141 ++++++++++++++ .../views/trabajador/TrabajadorViewPanel.java | 155 +++++++++++++++ 23 files changed, 1879 insertions(+), 4 deletions(-) create mode 100644 src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorCreateController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorSearchController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorUpdateController.java create mode 100644 src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorViewController.java create mode 100644 src/main/java/xyz/danielcortes/models/Trabajador.java create mode 100644 src/main/java/xyz/danielcortes/repository/TrabajadorRespository.java create mode 100644 src/main/java/xyz/danielcortes/validator/TrabajadorValidator.java create mode 100644 src/main/java/xyz/danielcortes/validator/UsuarioValidator.java create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.form create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.java create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.form create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.java create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.form create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.java create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.form create mode 100644 src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.java diff --git a/biblioteca.vpp b/biblioteca.vpp index 682d42d17c76d03dbb6f4d174c571ef89ea9107f..b95c9e17d32fe77fde096a952cea54424a96d33b 100644 GIT binary patch delta 38219 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 delta 41743 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 diff --git a/pom.xml b/pom.xml index ed3b8d9..0a27aa4 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,11 @@ forms_rt 7.0.3 + + com.github.lgooddatepicker + LGoodDatePicker + 10.3.1 + diff --git a/script.sql b/script.sql index 43d55c1..6fe0e6f 100644 --- a/script.sql +++ b/script.sql @@ -304,9 +304,11 @@ create table libro_arriendo create table usuario ( - id int unsigned primary key auto_increment, - nombre varchar(255) not null, - password varbinary(2000) not null + id int unsigned primary key auto_increment, + nombre varchar(255) not null, + password varbinary(2000) not null, + trabajador_id int unsigned not null, + foreign key (trabajador_id) references trabajador (id) on delete cascade on update cascade ); #--------------------------------------------------------------------------------# diff --git a/src/main/java/xyz/danielcortes/App.java b/src/main/java/xyz/danielcortes/App.java index e9dda4b..c9b4bdd 100644 --- a/src/main/java/xyz/danielcortes/App.java +++ b/src/main/java/xyz/danielcortes/App.java @@ -7,6 +7,7 @@ import javax.swing.UnsupportedLookAndFeelException; import xyz.danielcortes.controllers.LaunchController; import xyz.danielcortes.login.LoginController; import xyz.danielcortes.login.LoginPanel; +import xyz.danielcortes.models.Usuario; public class App { @@ -14,7 +15,7 @@ public class App { setupLookAndFeel(); LoginController loginController = new LoginController(new LoginPanel()); loginController.setLoggedListener(e -> { - LaunchController launchController = new LaunchController(e.getUser()); + LaunchController launchController = new LaunchController(new Usuario()); launchController.run(); }); } diff --git a/src/main/java/xyz/danielcortes/controllers/LaunchController.java b/src/main/java/xyz/danielcortes/controllers/LaunchController.java index 85ed4c8..0caa9f7 100644 --- a/src/main/java/xyz/danielcortes/controllers/LaunchController.java +++ b/src/main/java/xyz/danielcortes/controllers/LaunchController.java @@ -27,6 +27,10 @@ import xyz.danielcortes.controllers.libro.LibroCreateController; import xyz.danielcortes.controllers.libro.LibroSearchController; import xyz.danielcortes.controllers.libro.LibroUpdateController; import xyz.danielcortes.controllers.libro.LibroViewController; +import xyz.danielcortes.controllers.trabajador.TrabajadorCreateController; +import xyz.danielcortes.controllers.trabajador.TrabajadorSearchController; +import xyz.danielcortes.controllers.trabajador.TrabajadorUpdateController; +import xyz.danielcortes.controllers.trabajador.TrabajadorViewController; import xyz.danielcortes.framework.BaseController; import xyz.danielcortes.framework.PanelName; import xyz.danielcortes.models.Usuario; @@ -51,6 +55,10 @@ import xyz.danielcortes.views.libro.LibroCreatePanel; import xyz.danielcortes.views.libro.LibroSearchPanel; import xyz.danielcortes.views.libro.LibroUpdatePanel; import xyz.danielcortes.views.libro.LibroViewPanel; +import xyz.danielcortes.views.trabajador.TrabajadorCreatePanel; +import xyz.danielcortes.views.trabajador.TrabajadorSearchPanel; +import xyz.danielcortes.views.trabajador.TrabajadorUpdatePanel; +import xyz.danielcortes.views.trabajador.TrabajadorViewPanel; public class LaunchController { @@ -97,6 +105,11 @@ public class LaunchController { this.controllers.put(PanelName.EDITORIAL_CREATE, new EditorialCreateController(new EditorialCreatePanel(), this)); this.controllers.put(PanelName.EDITORIAL_UPDATE, new EditorialUpdateController(new EditorialUpdatePanel(), this)); + this.controllers.put(PanelName.TRABAJADOR_VIEW, new TrabajadorViewController(new TrabajadorViewPanel(), this)); + this.controllers.put(PanelName.TRABAJADOR_SEARCH, new TrabajadorSearchController(new TrabajadorSearchPanel(), this)); + this.controllers.put(PanelName.TRABAJADOR_CREATE, new TrabajadorCreateController(new TrabajadorCreatePanel(), this)); + this.controllers.put(PanelName.TRABAJADOR_UPDATE, new TrabajadorUpdateController(new TrabajadorUpdatePanel(), this)); + for (PanelName name : this.controllers.keySet()) { BaseController controller = this.controllers.get(name); this.frame.addCard(controller.getView().getContentPane(), name); @@ -125,11 +138,15 @@ public class LaunchController { JMenuItem editorialesItem = new JMenuItem("Editoriales"); editorialesItem.setMnemonic(KeyEvent.VK_E); + JMenuItem trabajadoresItem = new JMenuItem("Trabajadores"); + trabajadoresItem.setMnemonic(KeyEvent.VK_T); + autoresItem.addActionListener(e -> this.showCard(PanelName.AUTOR_SEARCH)); idiomasItem.addActionListener(e -> this.showCard(PanelName.IDIOMA_SEARCH)); librosItem.addActionListener(e -> this.showCard(PanelName.LIBRO_SEARCH)); categoriasItem.addActionListener(e -> this.showCard(PanelName.CATEGORIA_SEARCH)); editorialesItem.addActionListener(e -> this.showCard(PanelName.EDITORIAL_SEARCH)); + trabajadoresItem.addActionListener(e -> this.showCard(PanelName.TRABAJADOR_SEARCH)); menuBar.add(mantenedoresMenu); @@ -138,6 +155,7 @@ public class LaunchController { mantenedoresMenu.add(idiomasItem); mantenedoresMenu.add(categoriasItem); mantenedoresMenu.add(editorialesItem); + mantenedoresMenu.add(trabajadoresItem); this.frame.setJMenuBar(menuBar); } diff --git a/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorCreateController.java b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorCreateController.java new file mode 100644 index 0000000..9feb4a9 --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorCreateController.java @@ -0,0 +1,117 @@ +package xyz.danielcortes.controllers.trabajador; + +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.Hash; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.framework.ValidationResult; +import xyz.danielcortes.models.Trabajador; +import xyz.danielcortes.models.Usuario; +import xyz.danielcortes.repository.TrabajadorRespository; +import xyz.danielcortes.repository.UsuarioRepository; +import xyz.danielcortes.validator.TrabajadorValidator; +import xyz.danielcortes.validator.UsuarioValidator; +import xyz.danielcortes.views.trabajador.TrabajadorCreatePanel; + +public class TrabajadorCreateController extends BaseController { + + private TrabajadorCreatePanel view; + private TrabajadorRespository trabajadorRespository; + private TrabajadorValidator trabajadorValidator; + private UsuarioRepository usuarioRepository; + private UsuarioValidator usuarioValidator; + + public TrabajadorCreateController(TrabajadorCreatePanel view, LaunchController parent) { + super(parent); + this.view = view; + this.trabajadorRespository = new TrabajadorRespository(); + this.trabajadorValidator = new TrabajadorValidator(this.trabajadorRespository); + this.usuarioRepository = new UsuarioRepository(); + this.usuarioValidator = new UsuarioValidator(this.usuarioRepository); + this.setupListeners(); + } + + public void show() { + this.view.getRutField().requestFocus(); + } + + private void setupListeners() { + this.view.getGuardarButton().addActionListener(e -> save()); + this.view.getVolverButton().addActionListener(e -> this.getParentController().showCard(PanelName.TRABAJADOR_SEARCH)); + } + + private void save() { + String rut = this.view.getRutField().getText(); + ValidationResult rutValidation = this.trabajadorValidator.validateRut(rut); + if(rutValidation.hasError()){ + rutValidation.showErrorDialog(); + return; + } + + String nombre = this.view.getNombreField().getText(); + ValidationResult nombreValidation = this.trabajadorValidator.validateNombre(nombre); + if(nombreValidation.hasError()){ + nombreValidation.showErrorDialog(); + return; + } + + String apellidoPaterno = this.view.getApellidoPaternoField().getText(); + ValidationResult apellidoPaternoValidation = this.trabajadorValidator.validateApellidoPaterno(apellidoPaterno); + if(apellidoPaternoValidation.hasError()){ + apellidoPaternoValidation.showErrorDialog(); + return; + } + + String apellidoMaterno = this.view.getApellidoMaternoField().getText(); + ValidationResult apellidoMaternoValidation = this.trabajadorValidator.validateApellidoMaterno(apellidoMaterno); + if(apellidoMaternoValidation.hasError()){ + apellidoMaternoValidation.showErrorDialog(); + return; + } + + LocalDate fechaContrato = this.view.getFechaContratoPicker().getDate(); + ValidationResult fechaContratoValidation = this.trabajadorValidator.validateFechaContrato(fechaContrato); + if(fechaContratoValidation.hasError()){ + fechaContratoValidation.showErrorDialog(); + return; + } + + String username = this.view.getUsernameField().getText(); + ValidationResult usernameValidator = this.usuarioValidator.validateUsername(username); + if(usernameValidator.hasError()){ + usernameValidator.showErrorDialog(); + return; + } + + char[] password = this.view.getPassField().getPassword(); + ValidationResult passwordValidation = this.usuarioValidator.validatePassword(password); + if(passwordValidation.hasError()){ + passwordValidation.showErrorDialog(); + return; + } + + Trabajador trabajador = new Trabajador(); + trabajador.setNombre(nombre); + trabajador.setApellidoPaterno(apellidoPaterno); + trabajador.setApellidoMaterno(apellidoMaterno); + trabajador.setFechaContrato(fechaContrato); + trabajador.setRut(rut); + + Usuario usuario = new Usuario(); + usuario.setNombre(username); + usuario.setPassword(Hash.sha256(new String(password).getBytes(StandardCharsets.UTF_8))); + usuario.setTrabajador(trabajador); + + trabajadorRespository.save(trabajador); + usuarioRepository.save(usuario); + + this.getParentController().showCard(PanelName.TRABAJADOR_SEARCH); + } + + public BasePanel getView() { + return this.view; + } +} diff --git a/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorSearchController.java b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorSearchController.java new file mode 100644 index 0000000..e672184 --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorSearchController.java @@ -0,0 +1,125 @@ +package xyz.danielcortes.controllers.trabajador; + +import java.util.List; +import javax.swing.JOptionPane; +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.BaseTableModel; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.models.Trabajador; +import xyz.danielcortes.repository.TrabajadorRespository; +import xyz.danielcortes.repository.UsuarioRepository; +import xyz.danielcortes.validator.TrabajadorValidator; +import xyz.danielcortes.validator.UsuarioValidator; +import xyz.danielcortes.views.trabajador.TrabajadorSearchPanel; + +public class TrabajadorSearchController extends BaseController { + + private TrabajadorSearchPanel view; + private TrabajadorRespository trabajadorRespository; + private UsuarioRepository usuarioRepository; + private TrabajadorValidator trabajadorValidator; + private UsuarioValidator usuarioValidator; + + public TrabajadorSearchController(TrabajadorSearchPanel view, LaunchController parent) { + super(parent); + this.view = view; + this.trabajadorRespository = new TrabajadorRespository(); + this.usuarioRepository = new UsuarioRepository(); + this.trabajadorValidator = new TrabajadorValidator(this.trabajadorRespository); + this.usuarioValidator = new UsuarioValidator(this.usuarioRepository); + this.setupListeners(); + } + + public void show() { + this.reload(); + this.view.getTrabajadorTable().clearSelection(); + } + + private void reload() { + this.loadTrabajadorTable(); + } + + private void setupListeners() { + this.view.getCrearButton().addActionListener(e -> this.getParentController().showCard(PanelName.TRABAJADOR_CREATE)); + this.view.getSearchField().addActionListener(e -> this.search()); + this.view.getBuscarButton().addActionListener(e -> this.search()); + this.view.getVerButton().addActionListener(e -> this.view()); + this.view.getEditarButton().addActionListener(e -> this.edit()); + this.view.getEliminarButton().addActionListener(e -> this.delete()); + } + + private void edit() { + Trabajador trabajador = this.getSelectedTrabajador(); + if (trabajador != null) { + TrabajadorUpdateController controller = (TrabajadorUpdateController) this.getParentController().getCard(PanelName.TRABAJADOR_UPDATE); + controller.setTrabajador(trabajador); + this.getParentController().showCard(PanelName.TRABAJADOR_UPDATE); + } + } + + private void delete() { + Trabajador trabajador = this.getSelectedTrabajador(); + if (trabajador == null) + return; + + int option = JOptionPane.showConfirmDialog( + null, + "¿Estas seguro de que deseas eliminar el trabajador?", + "Confirmacion", + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE + ); + + if (option == JOptionPane.NO_OPTION) + return; + + this.trabajadorRespository.delete(trabajador); + this.reload(); + } + + private void view() { + Trabajador trabajador = this.getSelectedTrabajador(); + if (trabajador != null) { + TrabajadorViewController controller = (TrabajadorViewController) this.getParentController().getCard(PanelName.TRABAJADOR_VIEW); + controller.setTrabajador(trabajador); + this.getParentController().showCard(PanelName.TRABAJADOR_VIEW); + } + } + + private void search() { + String term = this.view.getSearchField().getText(); + List trabajadores = this.trabajadorRespository.search(term); + this.loadTrabajadorTable(trabajadores); + } + + private void loadTrabajadorTable() { + List trabajadores = this.trabajadorRespository.getAll(); + loadTrabajadorTable(trabajadores); + } + + private void loadTrabajadorTable(List trabajadores) { + BaseTableModel model = this.view.getTrabajadorModel(); + model.setRows(trabajadores); + } + + private Trabajador getSelectedTrabajador() { + int selectedRow = this.view.getTrabajadorTable().getSelectedRow(); + if (selectedRow == -1) { + JOptionPane.showMessageDialog( + null, + "No hay trabajador seleccionado", + "Error", + JOptionPane.ERROR_MESSAGE + ); + return null; + } + return this.view.getTrabajadorModel().getRow(selectedRow); + } + + public BasePanel getView() { + return this.view; + } + +} diff --git a/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorUpdateController.java b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorUpdateController.java new file mode 100644 index 0000000..1425892 --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorUpdateController.java @@ -0,0 +1,102 @@ +package xyz.danielcortes.controllers.trabajador; + +import java.time.LocalDate; +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.framework.ValidationResult; +import xyz.danielcortes.models.Trabajador; +import xyz.danielcortes.repository.TrabajadorRespository; +import xyz.danielcortes.validator.TrabajadorValidator; +import xyz.danielcortes.views.trabajador.TrabajadorUpdatePanel; + +public class TrabajadorUpdateController extends BaseController { + private Trabajador trabajador; + private TrabajadorUpdatePanel view; + private TrabajadorRespository trabajadorRespository; + private TrabajadorValidator trabajadorValidator; + + public TrabajadorUpdateController(TrabajadorUpdatePanel view, LaunchController parent){ + super(parent); + this.view = view; + this.trabajadorRespository = new TrabajadorRespository(); + this.trabajadorValidator = new TrabajadorValidator(this.trabajadorRespository); + this.setupListeners(); + } + + public void setTrabajador(Trabajador trabajador) { + this.trabajador = trabajador; + } + + public void show() { + this.fillTrabajador(); + this.view.getRutField().requestFocus(); + } + + private void fillTrabajador() { + if(trabajadorRespository == null) + return; + + this.view.getRutField().setText(this.trabajador.getRut()); + this.view.getNombreField().setText(this.trabajador.getNombre()); + this.view.getApellidoPaternoField().setText(this.trabajador.getApellidoPaterno()); + this.view.getApellidoMaternoField().setText(this.trabajador.getApellidoMaterno()); + this.view.getFechaContratoField().setDate(this.trabajador.getFechaContrato()); + } + + private void setupListeners() { + this.view.getActualizarButton().addActionListener(e -> update()); + this.view.getVolverButton().addActionListener(e -> this.getParentController().showCard(PanelName.TRABAJADOR_SEARCH)); + } + + private void update() { + String rut = this.view.getRutField().getText(); + ValidationResult rutValidation = this.trabajadorValidator.validateRut(rut); + if(rutValidation.hasError()){ + rutValidation.showErrorDialog(); + return; + } + + String nombre = this.view.getNombreField().getText(); + ValidationResult nombreValidation = this.trabajadorValidator.validateNombre(nombre); + if(nombreValidation.hasError()){ + nombreValidation.showErrorDialog(); + return; + } + + String apellidoPaterno = this.view.getApellidoPaternoField().getText(); + ValidationResult apellidoPaternoValidation = this.trabajadorValidator.validateApellidoPaterno(apellidoPaterno); + if(apellidoPaternoValidation.hasError()){ + apellidoPaternoValidation.showErrorDialog(); + return; + } + + String apellidoMaterno = this.view.getApellidoPaternoField().getText(); + ValidationResult apellidoMaternoValidation = this.trabajadorValidator.validateApellidoMaterno(apellidoMaterno); + if(apellidoMaternoValidation.hasError()){ + apellidoMaternoValidation.showErrorDialog(); + return; + } + + LocalDate fechaContrato = this.view.getFechaContratoField().getDate(); + ValidationResult fechaContratoValidation = this.trabajadorValidator.validateFechaContrato(fechaContrato); + if(fechaContratoValidation.hasError()){ + fechaContratoValidation.showErrorDialog(); + return; + } + + assert this.trabajador != null; + this.trabajador.setNombre(nombre); + this.trabajador.setApellidoPaterno(apellidoPaterno); + this.trabajador.setApellidoMaterno(apellidoMaterno); + this.trabajador.setFechaContrato(fechaContrato); + this.trabajador.setRut(rut); + this.trabajadorRespository.update(this.trabajador); + + this.getParentController().showCard(PanelName.TRABAJADOR_SEARCH); + } + + public BasePanel getView() { return view; } + +} diff --git a/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorViewController.java b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorViewController.java new file mode 100644 index 0000000..8083b01 --- /dev/null +++ b/src/main/java/xyz/danielcortes/controllers/trabajador/TrabajadorViewController.java @@ -0,0 +1,47 @@ +package xyz.danielcortes.controllers.trabajador; + +import xyz.danielcortes.controllers.LaunchController; +import xyz.danielcortes.framework.BaseController; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.PanelName; +import xyz.danielcortes.models.Trabajador; +import xyz.danielcortes.views.trabajador.TrabajadorViewPanel; + +public class TrabajadorViewController extends BaseController { + + private Trabajador trabajador; + private TrabajadorViewPanel view; + + public TrabajadorViewController(TrabajadorViewPanel view, LaunchController parent) { + super(parent); + this.view = view; + this.setupListeners(); + } + + public void show() { + this.fillTrabajador(); + } + + public void setTrabajador(Trabajador trabajador) { + this.trabajador = trabajador; + } + + private void setupListeners() { + this.view.getVolverButton().addActionListener(e -> this.getParentController().showCard(PanelName.TRABAJADOR_SEARCH)); + } + + private void fillTrabajador() { + if (trabajador == null) + return; + + this.view.getRutField().setText(this.trabajador.getNombre()); + this.view.getNombreField().setText(this.trabajador.getNombre()); + this.view.getApellidoPaternoField().setText(this.trabajador.getApellidoPaterno()); + this.view.getApellidoMaternoField().setText(this.trabajador.getApellidoMaterno()); + this.view.getFechaContratoPicker().setDate(this.trabajador.getFechaContrato()); + } + + public BasePanel getView() { + return view; + } +} diff --git a/src/main/java/xyz/danielcortes/framework/PanelName.java b/src/main/java/xyz/danielcortes/framework/PanelName.java index d7f0a8f..acf98ce 100644 --- a/src/main/java/xyz/danielcortes/framework/PanelName.java +++ b/src/main/java/xyz/danielcortes/framework/PanelName.java @@ -27,4 +27,9 @@ public enum PanelName { AUTOR_SEARCH, AUTOR_CREATE, AUTOR_UPDATE, + + TRABAJADOR_VIEW, + TRABAJADOR_SEARCH, + TRABAJADOR_CREATE, + TRABAJADOR_UPDATE, } diff --git a/src/main/java/xyz/danielcortes/models/Trabajador.java b/src/main/java/xyz/danielcortes/models/Trabajador.java new file mode 100644 index 0000000..6e94082 --- /dev/null +++ b/src/main/java/xyz/danielcortes/models/Trabajador.java @@ -0,0 +1,101 @@ +package xyz.danielcortes.models; + +import java.time.LocalDate; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "trabajador") +public class Trabajador { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "rut") + private String rut; + + @Column(name = "nombre") + private String nombre; + + @Column(name = "apellido_paterno") + private String apellidoPaterno; + + @Column(name = "apellido_materno") + private String apellidoMaterno; + + @Column(name = "fecha_contrato") + private LocalDate fechaContrato; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getRut() { + return rut; + } + + public void setRut(String rut) { + this.rut = rut; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellidoPaterno() { + return apellidoPaterno; + } + + public void setApellidoPaterno(String apellidoPaterno) { + this.apellidoPaterno = apellidoPaterno; + } + + public String getApellidoMaterno() { + return apellidoMaterno; + } + + public void setApellidoMaterno(String apellidoMaterno) { + this.apellidoMaterno = apellidoMaterno; + } + + public LocalDate getFechaContrato() { + return fechaContrato; + } + + public void setFechaContrato(LocalDate fechaContrato) { + this.fechaContrato = fechaContrato; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof Trabajador)) + return false; + Trabajador that = (Trabajador) o; + return Objects.equals(id, that.id) && + Objects.equals(rut, that.rut) && + Objects.equals(nombre, that.nombre) && + Objects.equals(apellidoPaterno, that.apellidoPaterno) && + Objects.equals(apellidoMaterno, that.apellidoMaterno) && + Objects.equals(fechaContrato, that.fechaContrato); + } + + @Override + public int hashCode() { + return Objects.hash(id, rut, nombre, apellidoPaterno, apellidoMaterno, fechaContrato); + } +} diff --git a/src/main/java/xyz/danielcortes/models/Usuario.java b/src/main/java/xyz/danielcortes/models/Usuario.java index 1c491db..a4c59a6 100644 --- a/src/main/java/xyz/danielcortes/models/Usuario.java +++ b/src/main/java/xyz/danielcortes/models/Usuario.java @@ -7,11 +7,14 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name = "usuario") public class Usuario { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @@ -22,6 +25,10 @@ public class Usuario { @Column(name = "password", columnDefinition = "varbinary(2000)") private byte[] password; + @OneToOne + @JoinColumn(name = "trabajador_id", referencedColumnName = "id") + private Trabajador trabajador; + public Integer getId() { return id; } @@ -46,6 +53,14 @@ public class Usuario { this.password = password; } + public Trabajador getTrabajador() { + return trabajador; + } + + public void setTrabajador(Trabajador trabajador) { + this.trabajador = trabajador; + } + @Override public boolean equals(Object o) { if (this == o) diff --git a/src/main/java/xyz/danielcortes/repository/TrabajadorRespository.java b/src/main/java/xyz/danielcortes/repository/TrabajadorRespository.java new file mode 100644 index 0000000..da37f04 --- /dev/null +++ b/src/main/java/xyz/danielcortes/repository/TrabajadorRespository.java @@ -0,0 +1,34 @@ +package xyz.danielcortes.repository; + +import java.util.List; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; +import xyz.danielcortes.framework.BaseRepository; +import xyz.danielcortes.models.Trabajador; + +public class TrabajadorRespository extends BaseRepository { + + public List getAll() { + TypedQuery query = em.createQuery("SELECT t FROM Trabajador t", Trabajador.class); + return query.getResultList(); + } + + public List search(String term) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(Trabajador.class); + Root r = query.from(Trabajador.class); + query.where( + cb.or( + cb.like(cb.lower(r.get("rut")), "%" + term.toLowerCase() + "%"), + cb.like(cb.lower(r.get("nombre")), "%" + term.toLowerCase() + "%"), + cb.like(cb.lower(r.get("apellidoPaterno")), "%" + term.toLowerCase() + "%"), + cb.like(cb.lower(r.get("apellidoMaterno")), "%" + term.toLowerCase() + "%"), + cb.like(r.get("fechaContrato"), "%" + term.toLowerCase() + "%") + ) + ); + return em.createQuery(query).getResultList(); + } + +} diff --git a/src/main/java/xyz/danielcortes/validator/TrabajadorValidator.java b/src/main/java/xyz/danielcortes/validator/TrabajadorValidator.java new file mode 100644 index 0000000..1724196 --- /dev/null +++ b/src/main/java/xyz/danielcortes/validator/TrabajadorValidator.java @@ -0,0 +1,85 @@ +package xyz.danielcortes.validator; + +import java.time.LocalDate; +import xyz.danielcortes.framework.ValidationResult; +import xyz.danielcortes.repository.TrabajadorRespository; + +public class TrabajadorValidator { + + private TrabajadorRespository trabajadorRespository; + + public TrabajadorValidator(TrabajadorRespository trabajadorRespository) { + this.trabajadorRespository = trabajadorRespository; + } + + public ValidationResult validateNombre(String nombre) { + if (nombre == null) { + return new ValidationResult("El nombre es nulo"); + } else if (nombre.isEmpty()) { + return new ValidationResult("El nombre esta vacío"); + } + return ValidationResult.NON_ERROR; + } + + public ValidationResult validateApellidoPaterno(String apellidoPaterno) { + if (apellidoPaterno == null) { + return new ValidationResult("El apellido paterno es nulo"); + } else if (apellidoPaterno.isEmpty()) { + return new ValidationResult("El apellido paterno esta vacío"); + } + return ValidationResult.NON_ERROR; + } + + public ValidationResult validateApellidoMaterno(String apellidoMaterno) { + if (apellidoMaterno == null) { + return new ValidationResult("El apellido materno es nulo"); + } else if (apellidoMaterno.isEmpty()) { + return new ValidationResult("El apellido materno esta vacío"); + } + return ValidationResult.NON_ERROR; + } + + public ValidationResult validateRut(String rut) { + if (rut == null) { + return new ValidationResult("El rut es nulo"); + } else if (rut.isEmpty()) { + return new ValidationResult("El rut esta vacío"); + } + if (!rutChecksum(rut)) { + return new ValidationResult("El rut es invalido"); + } + + return ValidationResult.NON_ERROR; + } + + public ValidationResult validateFechaContrato(LocalDate date) { + if (date == null) { + return new ValidationResult("La fecha es nula"); + } + return ValidationResult.NON_ERROR; + } + + private boolean rutChecksum(String rut) { + rut = rut.toLowerCase().replaceAll("[^\\dkK]", ""); + int sum = 0; + for (int i = rut.length() - 2, j = 2; i >= 0; i--, j++) { + int digit = rut.charAt(i) - '0'; + if (j == 8) + j = 2; + + sum += digit * j; + } + + int mod11 = 11 - (sum % 11); + char lastchar = rut.charAt(rut.length() - 1); + + char digitoVerificador = (char) (mod11 + '0'); + if (mod11 == 11) + digitoVerificador = '0'; + if (mod11 == 10) + digitoVerificador = 'k'; + + return lastchar == digitoVerificador; + } + +} diff --git a/src/main/java/xyz/danielcortes/validator/UsuarioValidator.java b/src/main/java/xyz/danielcortes/validator/UsuarioValidator.java new file mode 100644 index 0000000..18c4f27 --- /dev/null +++ b/src/main/java/xyz/danielcortes/validator/UsuarioValidator.java @@ -0,0 +1,35 @@ +package xyz.danielcortes.validator; + +import xyz.danielcortes.framework.ValidationResult; +import xyz.danielcortes.repository.UsuarioRepository; + +public class UsuarioValidator { + + private UsuarioRepository usuarioRepository; + + public UsuarioValidator(UsuarioRepository usuarioRepository) { + this.usuarioRepository = usuarioRepository; + } + + public ValidationResult validateUsername(String username) { + if (username == null) { + return new ValidationResult("El nombre de usuario es nulo"); + } else if (username.isEmpty()) { + return new ValidationResult("El nombre de usuario esta vacío"); + } + return ValidationResult.NON_ERROR; + } + + public ValidationResult validatePassword(char[] password) { + if (password == null) { + return new ValidationResult("La contraseña es nula"); + } else if (password.length == 0) { + return new ValidationResult("La contraseña esta vacia"); + } else if (password.length < 6) { + return new ValidationResult("La contraseña debe ser de al menos 6 caracteres"); + } + return ValidationResult.NON_ERROR; + } + + +} diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.form b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.form new file mode 100644 index 0000000..36271e5 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.form @@ -0,0 +1,170 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.java b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.java new file mode 100644 index 0000000..acbef83 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorCreatePanel.java @@ -0,0 +1,178 @@ +package xyz.danielcortes.views.trabajador; + +import com.github.lgooddatepicker.components.DatePicker; +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import com.intellij.uiDesigner.core.Spacer; +import java.awt.Dimension; +import java.awt.Insets; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JTextField; +import xyz.danielcortes.framework.BasePanel; + +public class TrabajadorCreatePanel extends BasePanel { + + private JTextField nombreField; + private JTextField apellidoPaternoField; + private JTextField apellidoMaternoField; + private JButton guardarButton; + private JPanel contentPane; + private JButton volverButton; + private JTextField rutField; + private DatePicker fechaContratoPicker; + private JTextField usernameField; + private JPasswordField passField; + + public JTextField getNombreField() { + return nombreField; + } + + public JTextField getApellidoPaternoField() { + return apellidoPaternoField; + } + + public JTextField getApellidoMaternoField() { + return apellidoMaternoField; + } + + public JButton getGuardarButton() { + return guardarButton; + } + + @Override + public JPanel getContentPane() { + return contentPane; + } + + public JButton getVolverButton() { + return volverButton; + } + + public JTextField getRutField() { + return rutField; + } + + public DatePicker getFechaContratoPicker() { + return fechaContratoPicker; + } + + public JTextField getUsernameField() { + return usernameField; + } + + public JPasswordField getPassField() { + return passField; + } + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + $$$setupUI$$$(); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + contentPane = new JPanel(); + contentPane.setLayout(new GridLayoutManager(16, 3, new Insets(20, 20, 20, 20), -1, -1)); + final JLabel label1 = new JLabel(); + label1.setText("Nombre:"); + contentPane.add(label1, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + nombreField = new JTextField(); + contentPane.add(nombreField, + new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label2 = new JLabel(); + label2.setText("Apellido Paterno:"); + contentPane.add(label2, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + apellidoPaternoField = new JTextField(); + contentPane.add(apellidoPaternoField, + new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label3 = new JLabel(); + label3.setText("Apellido Materno:"); + contentPane.add(label3, new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + apellidoMaternoField = new JTextField(); + contentPane.add(apellidoMaternoField, + new GridConstraints(7, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final Spacer spacer1 = new Spacer(); + contentPane.add(spacer1, + new GridConstraints(15, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, + null, null, 0, false)); + final Spacer spacer2 = new Spacer(); + contentPane.add(spacer2, + new GridConstraints(15, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final Spacer spacer3 = new Spacer(); + contentPane.add(spacer3, + new GridConstraints(15, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final JPanel panel1 = new JPanel(); + panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel1, new GridConstraints(14, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + guardarButton = new JButton(); + guardarButton.setText("Guardar"); + panel1.add(guardarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + volverButton = new JButton(); + volverButton.setText("Volver"); + panel1.add(volverButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + rutField = new JTextField(); + contentPane.add(rutField, + new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + final JLabel label4 = new JLabel(); + label4.setText("Rut:"); + contentPane.add(label4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label5 = new JLabel(); + label5.setText("Fecha Contrato:"); + contentPane.add(label5, new GridConstraints(8, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + fechaContratoPicker = new DatePicker(); + contentPane.add(fechaContratoPicker, + new GridConstraints(9, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label6 = new JLabel(); + label6.setText("Nombre de usuario:"); + contentPane.add(label6, new GridConstraints(10, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + usernameField = new JTextField(); + contentPane.add(usernameField, + new GridConstraints(11, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + passField = new JPasswordField(); + contentPane.add(passField, + new GridConstraints(13, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + final JLabel label7 = new JLabel(); + label7.setText("Contraseña:"); + contentPane.add(label7, new GridConstraints(12, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } + +} diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.form b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.form new file mode 100644 index 0000000..d20b423 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.form @@ -0,0 +1,96 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.java b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.java new file mode 100644 index 0000000..bd13f90 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorSearchPanel.java @@ -0,0 +1,154 @@ +package xyz.danielcortes.views.trabajador; + +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import java.awt.Dimension; +import java.awt.Insets; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import xyz.danielcortes.framework.BasePanel; +import xyz.danielcortes.framework.BaseTableModel; +import xyz.danielcortes.models.Trabajador; + +public class TrabajadorSearchPanel extends BasePanel { + + private JPanel contentPane; + private JTable trabajadorTable; + private JTextField searchField; + private JButton buscarButton; + private JButton verButton; + private JButton eliminarButton; + private JButton editarButton; + private JButton crearButton; + private BaseTableModel trabajadorModel; + + public JPanel getContentPane() { + return contentPane; + } + + public JTable getTrabajadorTable() { + return trabajadorTable; + } + + public JTextField getSearchField() { + return searchField; + } + + public JButton getBuscarButton() { + return buscarButton; + } + + public JButton getVerButton() { + return verButton; + } + + public JButton getEliminarButton() { + return eliminarButton; + } + + public JButton getEditarButton() { + return editarButton; + } + + public JButton getCrearButton() { + return crearButton; + } + + public BaseTableModel getTrabajadorModel() { + return trabajadorModel; + } + + private void createUIComponents() { + this.createTrabajadorTable(); + } + + private void createTrabajadorTable() { + // @formatter:off + this.trabajadorModel= new BaseTableModel<>( + new String[]{"Rut", "Nombre", "Apellido Paterno", "Apellido Materno", "Fecha Contrato"}, + (row, rowIndex, colIndex) -> { + switch (colIndex) { + case 0: return row.get(rowIndex).getRut(); + case 1: return row.get(rowIndex).getNombre(); + case 2: return row.get(rowIndex).getApellidoPaterno(); + case 3: return row.get(rowIndex).getApellidoMaterno(); + case 4: return row.get(rowIndex).getFechaContrato(); + default: return null; + } + } + ); + // @formatter:on + this.trabajadorTable = new JTable(this.trabajadorModel); + this.trabajadorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + } + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + $$$setupUI$$$(); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + createUIComponents(); + contentPane = new JPanel(); + contentPane.setLayout(new GridLayoutManager(3, 2, new Insets(20, 20, 20, 20), -1, -1)); + final JScrollPane scrollPane1 = new JScrollPane(); + contentPane.add(scrollPane1, new GridConstraints(1, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(400, -1), null, 0, false)); + scrollPane1.setViewportView(trabajadorTable); + searchField = new JTextField(); + contentPane.add(searchField, + new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + buscarButton = new JButton(); + buscarButton.setText("Buscar"); + contentPane.add(buscarButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + final JPanel panel1 = new JPanel(); + panel1.setLayout(new GridLayoutManager(1, 4, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel1, new GridConstraints(2, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + verButton = new JButton(); + verButton.setText("Ver"); + panel1.add(verButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + eliminarButton = new JButton(); + eliminarButton.setText("Eliminar"); + panel1.add(eliminarButton, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + editarButton = new JButton(); + editarButton.setText("Editar"); + panel1.add(editarButton, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + crearButton = new JButton(); + crearButton.setText("Crear"); + panel1.add(crearButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } + +} diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.form b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.form new file mode 100644 index 0000000..79b1884 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.form @@ -0,0 +1,138 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.java b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.java new file mode 100644 index 0000000..be32697 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorUpdatePanel.java @@ -0,0 +1,151 @@ +package xyz.danielcortes.views.trabajador; + +import com.github.lgooddatepicker.components.DatePicker; +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import com.intellij.uiDesigner.core.Spacer; +import java.awt.Dimension; +import java.awt.Insets; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import xyz.danielcortes.framework.BasePanel; + +public class TrabajadorUpdatePanel extends BasePanel { + + private JTextField nombreField; + private JTextField apellidoPaternoField; + private JTextField apellidoMaternoField; + private JButton actualizarButton; + private JPanel contentPane; + private JButton volverButton; + private JTextField rutField; + private DatePicker fechaContratoField; + + public JTextField getNombreField() { + return nombreField; + } + + public JTextField getApellidoPaternoField() { + return apellidoPaternoField; + } + + public JTextField getApellidoMaternoField() { + return apellidoMaternoField; + } + + public JButton getActualizarButton() { + return actualizarButton; + } + + @Override + public JPanel getContentPane() { + return contentPane; + } + + public JButton getVolverButton() { + return volverButton; + } + + public JTextField getRutField() { + return rutField; + } + + public DatePicker getFechaContratoField() { + return fechaContratoField; + } + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + $$$setupUI$$$(); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + contentPane = new JPanel(); + contentPane.setLayout(new GridLayoutManager(12, 3, new Insets(20, 20, 20, 20), -1, -1)); + nombreField = new JTextField(); + contentPane.add(nombreField, + new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label1 = new JLabel(); + label1.setText("Apellido Paterno:"); + contentPane.add(label1, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + apellidoPaternoField = new JTextField(); + contentPane.add(apellidoPaternoField, + new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + apellidoMaternoField = new JTextField(); + contentPane.add(apellidoMaternoField, + new GridConstraints(7, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label2 = new JLabel(); + label2.setText("Apellido Materno:"); + contentPane.add(label2, new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final Spacer spacer1 = new Spacer(); + contentPane.add(spacer1, + new GridConstraints(11, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, + null, null, 0, false)); + final Spacer spacer2 = new Spacer(); + contentPane.add(spacer2, + new GridConstraints(11, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final Spacer spacer3 = new Spacer(); + contentPane.add(spacer3, + new GridConstraints(11, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final JPanel panel1 = new JPanel(); + panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1)); + contentPane.add(panel1, new GridConstraints(10, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + volverButton = new JButton(); + volverButton.setText("Volver"); + panel1.add(volverButton, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + actualizarButton = new JButton(); + actualizarButton.setText("Actualizar"); + panel1.add(actualizarButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + final JLabel label3 = new JLabel(); + label3.setText("Nombre:"); + contentPane.add(label3, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label4 = new JLabel(); + label4.setText("Rut:"); + contentPane.add(label4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label5 = new JLabel(); + label5.setText("Fecha contrato:"); + contentPane.add(label5, new GridConstraints(8, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + fechaContratoField = new DatePicker(); + contentPane.add(fechaContratoField, + new GridConstraints(9, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + rutField = new JTextField(); + contentPane.add(rutField, + new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } + +} diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.form b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.form new file mode 100644 index 0000000..8ebe293 --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.form @@ -0,0 +1,141 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.java b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.java new file mode 100644 index 0000000..aa93b3e --- /dev/null +++ b/src/main/java/xyz/danielcortes/views/trabajador/TrabajadorViewPanel.java @@ -0,0 +1,155 @@ +package xyz.danielcortes.views.trabajador; + +import com.github.lgooddatepicker.components.DatePicker; +import com.intellij.uiDesigner.core.GridConstraints; +import com.intellij.uiDesigner.core.GridLayoutManager; +import com.intellij.uiDesigner.core.Spacer; +import java.awt.Dimension; +import java.awt.Insets; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import xyz.danielcortes.framework.BasePanel; + +public class TrabajadorViewPanel extends BasePanel { + + private JTextField nombreField; + private JTextField apellidoPaternoField; + private JTextField apellidoMaternoField; + private JButton volverButton; + private JPanel contentPane; + private JTextField rutField; + private DatePicker fechaContratoPicker; + private JTextField usernameField; + + public JTextField getNombreField() { + return nombreField; + } + + public JTextField getApellidoPaternoField() { + return apellidoPaternoField; + } + + public JTextField getApellidoMaternoField() { + return apellidoMaternoField; + } + + public JButton getVolverButton() { + return volverButton; + } + + @Override + public JPanel getContentPane() { + return contentPane; + } + + public JTextField getRutField() { + return rutField; + } + + public DatePicker getFechaContratoPicker() { + return fechaContratoPicker; + } + + public JTextField getUsernameField() { + return usernameField; + } + + { +// GUI initializer generated by IntelliJ IDEA GUI Designer +// >>> IMPORTANT!! <<< +// DO NOT EDIT OR ADD ANY CODE HERE! + $$$setupUI$$$(); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + contentPane = new JPanel(); + contentPane.setLayout(new GridLayoutManager(14, 3, new Insets(20, 20, 20, 20), -1, -1)); + final JLabel label1 = new JLabel(); + label1.setText("Nombre:"); + contentPane.add(label1, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + nombreField = new JTextField(); + nombreField.setEditable(false); + nombreField.setEnabled(true); + contentPane.add(nombreField, + new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label2 = new JLabel(); + label2.setText("Apellido Paterno:"); + contentPane.add(label2, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + apellidoPaternoField = new JTextField(); + apellidoPaternoField.setEditable(false); + apellidoPaternoField.setEnabled(true); + contentPane.add(apellidoPaternoField, + new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final JLabel label3 = new JLabel(); + label3.setText("Apellido Materno:"); + contentPane.add(label3, new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + apellidoMaternoField = new JTextField(); + apellidoMaternoField.setEditable(false); + apellidoMaternoField.setEnabled(true); + contentPane.add(apellidoMaternoField, + new GridConstraints(7, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(400, -1), null, 0, false)); + final Spacer spacer1 = new Spacer(); + contentPane.add(spacer1, + new GridConstraints(13, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, + null, null, 0, false)); + final Spacer spacer2 = new Spacer(); + contentPane.add(spacer2, + new GridConstraints(13, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + final Spacer spacer3 = new Spacer(); + contentPane.add(spacer3, + new GridConstraints(13, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, + null, null, null, 0, false)); + volverButton = new JButton(); + volverButton.setText("Volver"); + contentPane.add(volverButton, new GridConstraints(12, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, + GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), + null, 0, false)); + final JLabel label4 = new JLabel(); + label4.setText("Rut:"); + contentPane.add(label4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label5 = new JLabel(); + label5.setText("Fecha Contrato:"); + contentPane.add(label5, new GridConstraints(8, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + rutField = new JTextField(); + contentPane.add(rutField, + new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + fechaContratoPicker = new DatePicker(); + contentPane.add(fechaContratoPicker, + new GridConstraints(9, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JLabel label6 = new JLabel(); + label6.setText("Nombre de usuario:"); + contentPane.add(label6, new GridConstraints(10, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, + GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + usernameField = new JTextField(); + contentPane.add(usernameField, + new GridConstraints(11, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, + GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } + +}