From 8e18fb286bec6c84c54767ae0744b636b727f6bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20Mu=C3=B1oz?= Date: Mon, 24 Mar 2025 13:02:40 +0100 Subject: [PATCH] feat(test 20230321): solved --- .../controlador/ConnectionManager.java | 22 ++ .../controlador/ControladorInquilino.java | 99 ++++++++ .../controlador/ControladorLocalidad.java | 46 ++++ .../controlador/ControladorTipoMorosidad.java | 47 ++++ .../controlador/ControladorVivienda.java | 56 +++++ .../{TipoLocalidad.java => Localidad.java} | 8 +- .../examen20250321/modelo/TipoMorosidad.java | 2 +- .../examen20250321/modelo/Vivienda.java | 2 +- .../vista/GestionAlquileres.java | 235 ++++++++++++++++-- 9 files changed, 497 insertions(+), 20 deletions(-) create mode 100644 src/tutorialJava/examenes/examen20250321/controlador/ConnectionManager.java create mode 100644 src/tutorialJava/examenes/examen20250321/controlador/ControladorInquilino.java create mode 100644 src/tutorialJava/examenes/examen20250321/controlador/ControladorLocalidad.java create mode 100644 src/tutorialJava/examenes/examen20250321/controlador/ControladorTipoMorosidad.java create mode 100644 src/tutorialJava/examenes/examen20250321/controlador/ControladorVivienda.java rename src/tutorialJava/examenes/examen20250321/modelo/{TipoLocalidad.java => Localidad.java} (71%) diff --git a/src/tutorialJava/examenes/examen20250321/controlador/ConnectionManager.java b/src/tutorialJava/examenes/examen20250321/controlador/ConnectionManager.java new file mode 100644 index 0000000..1f7755a --- /dev/null +++ b/src/tutorialJava/examenes/examen20250321/controlador/ConnectionManager.java @@ -0,0 +1,22 @@ +package tutorialJava.examenes.examen20250321.controlador; + +import java.sql.Connection; +import java.sql.DriverManager; + +public class ConnectionManager { + + private static Connection conn = null; + + + public static Connection getConnection() throws Exception { + if (conn == null) { + Class.forName("com.mysql.cj.jdbc.Driver"); + + conn = + (Connection) DriverManager.getConnection ( + "jdbc:mysql://localhost:3306/alquileres?serverTimezone=UTC", + "root", "1234"); + } + return conn; + } +} diff --git a/src/tutorialJava/examenes/examen20250321/controlador/ControladorInquilino.java b/src/tutorialJava/examenes/examen20250321/controlador/ControladorInquilino.java new file mode 100644 index 0000000..d6e224c --- /dev/null +++ b/src/tutorialJava/examenes/examen20250321/controlador/ControladorInquilino.java @@ -0,0 +1,99 @@ +package tutorialJava.examenes.examen20250321.controlador; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import tutorialJava.examenes.examen20250321.modelo.Inquilino; + + +public class ControladorInquilino { + + + public static Inquilino + findByIdVivienda(int idVivienda) { + + try { + Connection conn = ConnectionManager.getConnection(); + + String sql = "select * from inquilino where " + + "idVivienda = ?"; + PreparedStatement ps = conn.prepareStatement(sql); + ps.setInt(1, idVivienda); + + ResultSet rs = ps.executeQuery(); + + if (rs.next()) { + Inquilino i = new Inquilino(); + i.setId(rs.getInt("id")); + i.setDni(rs.getString("dni")); + i.setNombreCompleto(rs.getString("nombreCompleto")); + i.setFechaInicioAlquiler(rs.getDate("fechaInicioAlquiler")); + i.setFechaFinAlquiler(rs.getDate("fechaFinAlquiler")); + i.setIdVivienda(rs.getInt("idVivienda")); + i.setIdTipoMorosidad(rs.getInt("idTipoMorosidad")); + i.setCuotaMensual(rs.getFloat("cuotaMensual")); + return i; + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + return null; + } + + + /** + * + * @param i + * @return + */ + public static int guardaInquilino (Inquilino i) { + try { + Connection conn = ConnectionManager.getConnection(); + String sql = "Update inquilino set dni = ?, " + + "nombreCompleto = ?, fechaInicioAlquiler = ?, " + + "fechaFinAlquiler = ?, cuotaMensual = ?, " + + "idVivienda = ?, idTipoMorosidad = ? " + + "where id = ?"; + PreparedStatement ps = conn.prepareStatement(sql); + ps.setString(1, i.getDni()); + ps.setString(2, i.getNombreCompleto()); + if (i.getFechaInicioAlquiler() != null) { + ps.setDate(3, new java.sql.Date(i.getFechaInicioAlquiler().getTime())); + } + else { + ps.setDate(3, null); + } + if (i.getFechaFinAlquiler() != null) { + ps.setDate(4, new java.sql.Date(i.getFechaFinAlquiler().getTime())); + } + else { + ps.setDate(4, null); + } + ps.setFloat(5, i.getCuotaMensual()); + ps.setInt(6, i.getIdVivienda()); + ps.setInt(7, i.getIdTipoMorosidad()); + ps.setInt(8, i.getId()); + + return ps.executeUpdate(); + } + catch (Exception e) { + e.printStackTrace(); + } + return 0; + } +} + + + + + + + + + + diff --git a/src/tutorialJava/examenes/examen20250321/controlador/ControladorLocalidad.java b/src/tutorialJava/examenes/examen20250321/controlador/ControladorLocalidad.java new file mode 100644 index 0000000..b33cd49 --- /dev/null +++ b/src/tutorialJava/examenes/examen20250321/controlador/ControladorLocalidad.java @@ -0,0 +1,46 @@ +package tutorialJava.examenes.examen20250321.controlador; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import tutorialJava.examenes.examen20250321.modelo.Localidad; + +public class ControladorLocalidad { + + + public static List findAll() { + List lista = new ArrayList(); + try { + Connection conn = ConnectionManager.getConnection(); + + Statement s = conn.createStatement(); + ResultSet rs = + s.executeQuery("select * from localidad"); + + while (rs.next()) { + Localidad l = new Localidad(); + l.setId(rs.getInt("id")); + l.setDescripcion(rs.getString("descripcion")); + lista.add(l); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + return lista; + } + +} + + + + + + + + + + diff --git a/src/tutorialJava/examenes/examen20250321/controlador/ControladorTipoMorosidad.java b/src/tutorialJava/examenes/examen20250321/controlador/ControladorTipoMorosidad.java new file mode 100644 index 0000000..e1cb518 --- /dev/null +++ b/src/tutorialJava/examenes/examen20250321/controlador/ControladorTipoMorosidad.java @@ -0,0 +1,47 @@ +package tutorialJava.examenes.examen20250321.controlador; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import tutorialJava.examenes.examen20250321.modelo.TipoMorosidad; + + +public class ControladorTipoMorosidad { + + + public static List findAll() { + List lista = new ArrayList(); + try { + Connection conn = ConnectionManager.getConnection(); + + Statement s = conn.createStatement(); + ResultSet rs = + s.executeQuery("select * from tipo_morosidad"); + + while (rs.next()) { + TipoMorosidad l = new TipoMorosidad(); + l.setId(rs.getInt("id")); + l.setDescripcion(rs.getString("descripcion")); + lista.add(l); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + return lista; + } + +} + + + + + + + + + + diff --git a/src/tutorialJava/examenes/examen20250321/controlador/ControladorVivienda.java b/src/tutorialJava/examenes/examen20250321/controlador/ControladorVivienda.java new file mode 100644 index 0000000..60b92c4 --- /dev/null +++ b/src/tutorialJava/examenes/examen20250321/controlador/ControladorVivienda.java @@ -0,0 +1,56 @@ +package tutorialJava.examenes.examen20250321.controlador; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import tutorialJava.examenes.examen20250321.modelo.Vivienda; + + +public class ControladorVivienda { + + + public static List + findAllByLocalidadAndFilterDescription(int idLocalidad, + String filterDescription) { + + List lista = new ArrayList(); + try { + Connection conn = ConnectionManager.getConnection(); + + String sql = "select * from vivienda where " + + "idLocalidad = ? and descripcion like ?"; + PreparedStatement ps = conn.prepareStatement(sql); + ps.setInt(1, idLocalidad); + ps.setString(2, "%" + filterDescription + "%"); + + ResultSet rs = ps.executeQuery(); + + while (rs.next()) { + Vivienda v = new Vivienda(); + v.setId(rs.getInt("id")); + v.setDescripcion(rs.getString("descripcion")); + v.setIdLocalidad(rs.getInt("idLocalidad")); + lista.add(v); + } + } + catch (Exception ex) { + ex.printStackTrace(); + } + return lista; + } + +} + + + + + + + + + + diff --git a/src/tutorialJava/examenes/examen20250321/modelo/TipoLocalidad.java b/src/tutorialJava/examenes/examen20250321/modelo/Localidad.java similarity index 71% rename from src/tutorialJava/examenes/examen20250321/modelo/TipoLocalidad.java rename to src/tutorialJava/examenes/examen20250321/modelo/Localidad.java index 07beda3..628a38a 100644 --- a/src/tutorialJava/examenes/examen20250321/modelo/TipoLocalidad.java +++ b/src/tutorialJava/examenes/examen20250321/modelo/Localidad.java @@ -1,14 +1,14 @@ package tutorialJava.examenes.examen20250321.modelo; -public class TipoLocalidad { +public class Localidad { private int id; private String descripcion; - public TipoLocalidad() { + public Localidad() { super(); } - public TipoLocalidad(int id, String descripcion) { + public Localidad(int id, String descripcion) { super(); this.id = id; this.descripcion = descripcion; @@ -32,7 +32,7 @@ public class TipoLocalidad { @Override public String toString() { - return "TipoMorosidad [id=" + id + ", descripcion=" + descripcion + "]"; + return descripcion; } diff --git a/src/tutorialJava/examenes/examen20250321/modelo/TipoMorosidad.java b/src/tutorialJava/examenes/examen20250321/modelo/TipoMorosidad.java index 1c3fc88..f32561e 100644 --- a/src/tutorialJava/examenes/examen20250321/modelo/TipoMorosidad.java +++ b/src/tutorialJava/examenes/examen20250321/modelo/TipoMorosidad.java @@ -32,7 +32,7 @@ public class TipoMorosidad { @Override public String toString() { - return "TipoMorosidad [id=" + id + ", descripcion=" + descripcion + "]"; + return descripcion; } diff --git a/src/tutorialJava/examenes/examen20250321/modelo/Vivienda.java b/src/tutorialJava/examenes/examen20250321/modelo/Vivienda.java index 6a4e0ec..e3c53aa 100644 --- a/src/tutorialJava/examenes/examen20250321/modelo/Vivienda.java +++ b/src/tutorialJava/examenes/examen20250321/modelo/Vivienda.java @@ -42,7 +42,7 @@ public class Vivienda { @Override public String toString() { - return "Vivienda [id=" + id + ", descripcion=" + descripcion + ", idLocalidad=" + idLocalidad + "]"; + return descripcion; } diff --git a/src/tutorialJava/examenes/examen20250321/vista/GestionAlquileres.java b/src/tutorialJava/examenes/examen20250321/vista/GestionAlquileres.java index f8e807f..0fbbede 100644 --- a/src/tutorialJava/examenes/examen20250321/vista/GestionAlquileres.java +++ b/src/tutorialJava/examenes/examen20250321/vista/GestionAlquileres.java @@ -5,16 +5,34 @@ import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; + +import tutorialJava.examenes.examen20250321.controlador.ControladorInquilino; +import tutorialJava.examenes.examen20250321.controlador.ControladorLocalidad; +import tutorialJava.examenes.examen20250321.controlador.ControladorTipoMorosidad; +import tutorialJava.examenes.examen20250321.controlador.ControladorVivienda; +import tutorialJava.examenes.examen20250321.modelo.Inquilino; +import tutorialJava.examenes.examen20250321.modelo.Localidad; +import tutorialJava.examenes.examen20250321.modelo.TipoMorosidad; +import tutorialJava.examenes.examen20250321.modelo.Vivienda; + import java.awt.GridBagLayout; import javax.swing.JLabel; +import javax.swing.JOptionPane; + import java.awt.GridBagConstraints; import java.awt.Insets; +import java.util.Date; +import java.util.List; + import javax.swing.JCheckBox; import java.awt.Font; import javax.swing.JComboBox; import javax.swing.JTextField; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; +import java.awt.event.ActionListener; +import java.text.SimpleDateFormat; +import java.awt.event.ActionEvent; public class GestionAlquileres extends JFrame { @@ -27,7 +45,13 @@ public class GestionAlquileres extends JFrame { private JTextField jtfFechaFin; private JTextField jtfCuotaMensual; private JTextField jtfFiltroVivienda; - + private JComboBox jcbLocalidad; + private JComboBox jcbTipoMorosidad; + private JComboBox jcbVivienda; + private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + private JLabel jlblCuotaConIva; + private JCheckBox chkActivo; + /** * Launch the application. */ @@ -36,6 +60,7 @@ public class GestionAlquileres extends JFrame { public void run() { try { GestionAlquileres frame = new GestionAlquileres(); + frame.pack(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); @@ -49,7 +74,6 @@ public class GestionAlquileres extends JFrame { */ public GestionAlquileres() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); @@ -78,14 +102,14 @@ public class GestionAlquileres extends JFrame { gbc_lblNewLabel_1.gridy = 1; contentPane.add(lblNewLabel_1, gbc_lblNewLabel_1); - JComboBox jcbLocalidades = new JComboBox(); - GridBagConstraints gbc_jcbLocalidades = new GridBagConstraints(); - gbc_jcbLocalidades.gridwidth = 2; - gbc_jcbLocalidades.insets = new Insets(0, 0, 5, 0); - gbc_jcbLocalidades.fill = GridBagConstraints.HORIZONTAL; - gbc_jcbLocalidades.gridx = 1; - gbc_jcbLocalidades.gridy = 1; - contentPane.add(jcbLocalidades, gbc_jcbLocalidades); + jcbLocalidad = new JComboBox(); + GridBagConstraints gbc_jcbLocalidad = new GridBagConstraints(); + gbc_jcbLocalidad.gridwidth = 2; + gbc_jcbLocalidad.insets = new Insets(0, 0, 5, 0); + gbc_jcbLocalidad.fill = GridBagConstraints.HORIZONTAL; + gbc_jcbLocalidad.gridx = 1; + gbc_jcbLocalidad.gridy = 1; + contentPane.add(jcbLocalidad, gbc_jcbLocalidad); JLabel lblNewLabel_12 = new JLabel("Filtro de vivienda"); GridBagConstraints gbc_lblNewLabel_12 = new GridBagConstraints(); @@ -105,6 +129,11 @@ public class GestionAlquileres extends JFrame { jtfFiltroVivienda.setColumns(10); JButton btnFiltroVivienda = new JButton("Filtrar viviendas"); + btnFiltroVivienda.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + filtrarViviendas(); + } + }); GridBagConstraints gbc_btnFiltroVivienda = new GridBagConstraints(); gbc_btnFiltroVivienda.insets = new Insets(0, 0, 5, 0); gbc_btnFiltroVivienda.gridx = 2; @@ -119,7 +148,12 @@ public class GestionAlquileres extends JFrame { gbc_lblNewLabel_2.gridy = 3; contentPane.add(lblNewLabel_2, gbc_lblNewLabel_2); - JComboBox jcbVivienda = new JComboBox(); + jcbVivienda = new JComboBox(); + jcbVivienda.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + cargarInquilino(); + } + }); GridBagConstraints gbc_jcbVivienda = new GridBagConstraints(); gbc_jcbVivienda.gridwidth = 2; gbc_jcbVivienda.insets = new Insets(0, 0, 5, 0); @@ -210,7 +244,12 @@ public class GestionAlquileres extends JFrame { contentPane.add(jtfFechaInicio, gbc_jtfFechaInicio); jtfFechaInicio.setColumns(10); - JCheckBox chkActivo = new JCheckBox("Alquiler en activo"); + chkActivo = new JCheckBox("Alquiler en activo"); + chkActivo.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkAlquierActivo(); + } + }); GridBagConstraints gbc_chkActivo = new GridBagConstraints(); gbc_chkActivo.gridwidth = 3; gbc_chkActivo.insets = new Insets(0, 0, 5, 0); @@ -245,7 +284,7 @@ public class GestionAlquileres extends JFrame { gbc_lblNewLabel_13.gridy = 11; contentPane.add(lblNewLabel_13, gbc_lblNewLabel_13); - JComboBox jcbTipoMorosidad = new JComboBox(); + jcbTipoMorosidad = new JComboBox(); GridBagConstraints gbc_jcbTipoMorosidad = new GridBagConstraints(); gbc_jcbTipoMorosidad.gridwidth = 2; gbc_jcbTipoMorosidad.insets = new Insets(0, 0, 5, 5); @@ -279,7 +318,7 @@ public class GestionAlquileres extends JFrame { gbc_lblNewLabel_10.gridy = 13; contentPane.add(lblNewLabel_10, gbc_lblNewLabel_10); - JLabel jlblCuotaConIva = new JLabel("??? €"); + jlblCuotaConIva = new JLabel("??? €"); GridBagConstraints gbc_jlblCuotaConIva = new GridBagConstraints(); gbc_jlblCuotaConIva.gridwidth = 2; gbc_jlblCuotaConIva.insets = new Insets(0, 0, 5, 0); @@ -288,11 +327,179 @@ public class GestionAlquileres extends JFrame { contentPane.add(jlblCuotaConIva, gbc_jlblCuotaConIva); JButton btnGuardar = new JButton("Guardar cambios"); + btnGuardar.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + guardarInquilino(); + } + }); GridBagConstraints gbc_btnGuardar = new GridBagConstraints(); gbc_btnGuardar.gridwidth = 3; gbc_btnGuardar.gridx = 0; gbc_btnGuardar.gridy = 14; contentPane.add(btnGuardar, gbc_btnGuardar); + + // Carga de todas las localidades y tipos de morosidad + cargarLocalidades(); + cargarTiposMorosidad(); } + /** + * + */ + private void cargarLocalidades() { + for(Localidad l : ControladorLocalidad.findAll()) { + jcbLocalidad.addItem(l); + } + } + + + /** + * + */ + private void cargarTiposMorosidad() { + for(TipoMorosidad l : ControladorTipoMorosidad.findAll()) { + jcbTipoMorosidad.addItem(l); + } + } + + /** + * + */ + private void filtrarViviendas() { + Localidad localidadSeleccionada = + (Localidad) this.jcbLocalidad.getSelectedItem(); + int idLocalidadSeleccionada = localidadSeleccionada.getId(); + String filtroVivienda = this.jtfFiltroVivienda.getText(); + + List viviendas = ControladorVivienda + .findAllByLocalidadAndFilterDescription( + idLocalidadSeleccionada, filtroVivienda); + + this.jcbVivienda.removeAllItems(); + for (Vivienda v : viviendas) { + this.jcbVivienda.addItem(v); + } + } + + /** + * + */ + private void cargarInquilino() { + if (jcbVivienda.getItemCount() > 0) { + Vivienda viviendaSeleccionada = + (Vivienda) jcbVivienda.getSelectedItem(); + int idVivienda = viviendaSeleccionada.getId(); + + Inquilino i = ControladorInquilino + .findByIdVivienda(idVivienda); + + if (i != null) { + this.jtfId.setText("" + i.getId()); + this.jtfDni.setText(i.getDni()); + this.jtfNombreInquilino.setText(i.getNombreCompleto()); + if (i.getFechaInicioAlquiler() != null) { + this.jtfFechaInicio.setText( + sdf.format(i.getFechaInicioAlquiler())); + } + else { + this.jtfFechaInicio.setText(""); + } + if (i.getFechaFinAlquiler() != null) { + this.jtfFechaFin.setText( + sdf.format(i.getFechaFinAlquiler())); + } + else { + this.jtfFechaFin.setText(""); + } + // Tipo de morosidad + for(int j = 0; j < this.jcbTipoMorosidad.getItemCount(); j++) { + if (this.jcbTipoMorosidad.getItemAt(j).getId() == + i.getIdTipoMorosidad()) { + this.jcbTipoMorosidad.setSelectedIndex(j); + } + } + // Cuota mensual + this.jtfCuotaMensual.setText("" + i.getCuotaMensual()); + this.jlblCuotaConIva.setText("" + (i.getCuotaMensual() * 1.21)); + } + } + } + + /** + * + */ + private void checkAlquierActivo() { + if (chkActivo.isSelected()) { + this.jtfFechaFin.setEnabled(false); + this.jtfFechaFin.setText(""); + } + else { + this.jtfFechaFin.setEnabled(true); + } + } + + /** + * + */ + private void guardarInquilino() { + Inquilino i = new Inquilino(); + i.setId(Integer.parseInt(this.jtfId.getText())); + i.setDni(this.jtfDni.getText()); + if (this.jtfNombreInquilino.getText().trim().equals("")) { + JOptionPane.showMessageDialog(null, "Introduzca un nombre para el inquilino"); + return; + } + i.setNombreCompleto(this.jtfNombreInquilino.getText()); + Date fechaInicio = getFechaFromString(this.jtfFechaInicio.getText()); + if (!jtfFechaInicio.getText().trim().equals("") && + fechaInicio == null) { + JOptionPane.showMessageDialog(null, "Fecha de inicio no válida, use formato dd/MM/yyyy"); + return; + } + else { + i.setFechaInicioAlquiler(fechaInicio); + } + Date fechaFin = getFechaFromString(this.jtfFechaFin.getText()); + if (!jtfFechaFin.getText().trim().equals("") && + fechaFin == null) { + JOptionPane.showMessageDialog(null, "Fecha de fin no válida, use formato dd/MM/yyyy"); + return; + } + else { + i.setFechaFinAlquiler(fechaFin); + } + TipoMorosidad morosidadSeleccionada = + (TipoMorosidad) this.jcbTipoMorosidad.getSelectedItem(); + i.setIdTipoMorosidad(morosidadSeleccionada.getId()); + Vivienda viviendaSeleccionada = + (Vivienda) this.jcbVivienda.getSelectedItem(); + i.setIdVivienda(viviendaSeleccionada.getId()); + i.setCuotaMensual(Float.parseFloat(this.jtfCuotaMensual.getText())); + + if (ControladorInquilino.guardaInquilino(i) > 0) { + JOptionPane.showMessageDialog(null, "Inquilino almacenado"); + } + else { + JOptionPane.showMessageDialog(null, "Algo ha fallado"); + } + } + + + + private Date getFechaFromString(String strDate) { + try { + return sdf.parse(strDate); + } catch (Exception e) { + return null; + } + } } + + + + + + + + +