Skip to content

Commit

Permalink
Merge pull request #6 from uo287568/HU08-DescargaDeEnvios
Browse files Browse the repository at this point in the history
HU de descarga de envíos realizada
  • Loading branch information
uo287568 authored Jun 14, 2024
2 parents 99cd995 + 347ea1b commit 8c63be0
Show file tree
Hide file tree
Showing 5 changed files with 268 additions and 17 deletions.
85 changes: 85 additions & 0 deletions src/main/java/giis/demo/tkrun/DescargaController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package giis.demo.tkrun;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import javax.swing.JOptionPane;

import giis.demo.util.SwingUtil;

public class DescargaController {
private DescargaModel model;
private DescargaView view;

public DescargaController(DescargaModel descargaModel, DescargaView descargaView) {
this.model = descargaModel;
this.view = descargaView;
//no hay inicializacion especifica del modelo, solo de la vista
this.initView();
}

public void initController() {
view.getBtCancelar().addActionListener(e -> SwingUtil.exceptionWrapper(() -> salir()));
view.getBtRegistrar().addActionListener(e -> realizarDescarga());
}

private void realizarDescarga() {
if (comprobarCampos()) {
int id = Integer.parseInt(view.getTfID().getText());
int nref = Integer.parseInt(view.getTfNRef().getText());
if (comprobarEnvio(id, nref)) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
String fechaHoraActual = dtf.format(now);
model.registrarDescarga(id, nref, "Descarga", view.getTfUbicacion().getText(), fechaHoraActual);
JOptionPane.showMessageDialog(null, "REGISTRO DE DESCARGA REALIZADO CORRECTAMENTE");
view.reset();
}
}
}

private boolean comprobarEnvio(int id, int nref) {
PedidosTransportistaDisplayDTO envio = model.getEnvio(id, nref);
if (envio==null) {
JOptionPane.showMessageDialog(null, "No existe un pedido con el número: " + nref + "\nasignado al repartidor con ID: " + id);
return false;
} else {
MovimientosDisplayDTO movimiento = model.getLastMov(id, nref);
if (movimiento != null) {
if (movimiento.getMovimiento().equals("Descarga")) {
JOptionPane.showMessageDialog(null, "No puede haber un movimiento de descarga seguido de otro de descarga. \nEl último movimiento debe ser de carga");
return false;
} else if (movimiento.getUbicacion().equals(view.getTfUbicacion().getText())) {
JOptionPane.showMessageDialog(null, "La ubicación de la descarga coincide con la de la última carga");
return false;
}
}
return true;
}
}

private boolean comprobarCampos() {
try {
if(view.getTfID().getText().isBlank() || view.getTfNRef().getText().isBlank() || view.getTfUbicacion().getText().isBlank()) {
JOptionPane.showMessageDialog(null, "Rellena todos los campos");
return false;
} else if(Integer.parseInt(view.getTfID().getText()) <= 0 || Integer.parseInt(view.getTfNRef().getText()) <= 0) {
JOptionPane.showMessageDialog(null, "Formato de ID o Número de referencia inválido");
return false;
} else return true;
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Formato de ID o Número de referencia inválido");
return false;
}
}

private void salir() {
int eleccion=JOptionPane.showConfirmDialog(null, "¿Está segur@ de cancelar la descarga del envío?");
if(eleccion==JOptionPane.YES_OPTION)
view.reset();
}

public void initView() {
view.getFrame().setVisible(true);
}
}
47 changes: 47 additions & 0 deletions src/main/java/giis/demo/tkrun/DescargaModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package giis.demo.tkrun;

import java.util.List;

import giis.demo.util.Database;
/**
* Acceso a los datos de carreras e inscripciones,
* utilizado como modelo para el ejemplo de swing y para las pruebas unitarias y de interfaz de usuario.
*
* <br/>En los metodos de este ejemplo toda la logica de negocio se realiza mediante una unica query sql por lo que siempre
* se utilizan los metodos de utilidad en la clase Database que usan apache commons-dbutils y controlan la conexion.
* En caso de que en un mismo metodo se realicen diferentes queries se deberia controlar la conexion desde esta clase
* (ver como ejemplo la implementacion en Database).
*
* <br/>Si utilizase algún otro framework para manejar la persistencia, la funcionalidad proporcionada por esta clase sería la asignada
* a los Servicios, Repositorios y DAOs.
*/
public class DescargaModel {

private Database db=new Database();

public PedidosTransportistaDisplayDTO getEnvio(int id, int nref) {
String sql = "select * from pedidosTransportista where id=? and nref=?";
List<PedidosTransportistaDisplayDTO> envios = db.executeQueryPojo(PedidosTransportistaDisplayDTO.class, sql, id, nref);
if(envios.isEmpty()) {
return null;
}
return envios.get(0);
}

public MovimientosDisplayDTO getLastMov(int id, int nref) {
String sql = "select * from movimientos where id=? and nref=? order by fechamov desc";
List<MovimientosDisplayDTO> movimientos = db.executeQueryPojo(MovimientosDisplayDTO.class, sql, id, nref);
if(movimientos.isEmpty()) {
return null;
}
return movimientos.get(0);
}

public void registrarDescarga(int id, int nref, String mov, String ubi, String fechaHoraActual) {
String sql="insert into movimientos (id,nref,movimiento,ubicacion,fechaMov) values (?,?,?,?,?)";
db.executeUpdate(sql,id,nref,mov,ubi,fechaHoraActual);
}



}
110 changes: 110 additions & 0 deletions src/main/java/giis/demo/tkrun/DescargaView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package giis.demo.tkrun;

import javax.swing.JFrame;
import net.miginfocom.swing.MigLayout;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;

import javax.swing.JPanel;
import java.awt.Font;
import java.awt.FlowLayout;
import java.awt.Color;

public class DescargaView {

private JFrame frmDescargaEnvios;
private JLabel lbTítulo;
private JButton btnCancelar;
private JButton btRegistro;
private JLabel lbID;
private JTextField tfID;
private JLabel lbNRef;
private JTextField tfNRef;
private JLabel lbUbicacion;
private JTextField tfUbicacion;
private JLabel lbFecha;

/**
* Create the application.
*/
public DescargaView() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmDescargaEnvios = new JFrame();
frmDescargaEnvios.getContentPane().setFont(new Font("Tahoma", Font.PLAIN, 13));
frmDescargaEnvios.setTitle("DescargaEnvíos");
frmDescargaEnvios.setName("DescargaEnvíos");
frmDescargaEnvios.setBounds(0, 0, 374, 231);
frmDescargaEnvios.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frmDescargaEnvios.getContentPane().setLayout(new MigLayout("", "[grow]", "[][10.00][][][][][16.00][]"));

lbTítulo = new JLabel("Registro de descarga de envíos:");
lbTítulo.setFont(new Font("Tahoma", Font.BOLD, 15));
frmDescargaEnvios.getContentPane().add(lbTítulo, "cell 0 0");

lbID = new JLabel("ID del transportista: ");
lbID.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmDescargaEnvios.getContentPane().add(lbID, "flowx,cell 0 2");

lbNRef = new JLabel("Número de referencia del envío: ");
lbNRef.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmDescargaEnvios.getContentPane().add(lbNRef, "flowx,cell 0 3");

lbUbicacion = new JLabel("Ubicación de la descarga:");
lbUbicacion.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmDescargaEnvios.getContentPane().add(lbUbicacion, "flowx,cell 0 4");

lbFecha = new JLabel("Se registrará la fecha y hora de la descarga (hora actual)");
lbFecha.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmDescargaEnvios.getContentPane().add(lbFecha, "cell 0 5");

tfID = new JTextField();
frmDescargaEnvios.getContentPane().add(tfID, "cell 0 2");
tfID.setColumns(10);

tfNRef = new JTextField();
frmDescargaEnvios.getContentPane().add(tfNRef, "cell 0 3");
tfNRef.setColumns(10);

tfUbicacion = new JTextField();
frmDescargaEnvios.getContentPane().add(tfUbicacion, "cell 0 4");
tfUbicacion.setColumns(10);

JPanel pnBotones = new JPanel();
FlowLayout fl_pnBotones = (FlowLayout) pnBotones.getLayout();
fl_pnBotones.setAlignment(FlowLayout.RIGHT);
frmDescargaEnvios.getContentPane().add(pnBotones, "cell 0 7,grow");

btnCancelar = new JButton("Cancelar");
btnCancelar.setForeground(Color.WHITE);
btnCancelar.setBackground(Color.RED);
btnCancelar.setFont(new Font("Tahoma", Font.BOLD, 12));
pnBotones.add(btnCancelar);

btRegistro = new JButton("Registrar descarga");
btRegistro.setBackground(Color.GREEN);
btRegistro.setFont(new Font("Tahoma", Font.BOLD, 12));
pnBotones.add(btRegistro);
}

public void reset() {
this.tfID.setText("");
this.tfNRef.setText("");
this.tfUbicacion.setText("");
this.getFrame().setVisible(false);
}

//Getters y Setters anyadidos para acceso desde el controlador (repersentacion compacta)
public JFrame getFrame() { return this.frmDescargaEnvios; }
public JButton getBtCancelar() { return this.btnCancelar; }
public JButton getBtRegistrar() { return this.btRegistro; }
public JTextField getTfID() { return tfID; }
public JTextField getTfNRef() { return tfNRef; }
public JTextField getTfUbicacion() { return tfUbicacion; }
}
34 changes: 17 additions & 17 deletions src/main/java/giis/demo/tkrun/LocalizacionEnvioView.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
*/
public class LocalizacionEnvioView {

private JFrame frmTransportista;
private JFrame frmLocalizacion;
private JLabel lbTítulo;
private JTextField tfNRef;
private JPanel pnEnvio;
Expand All @@ -51,21 +51,21 @@ public LocalizacionEnvioView() {
* Initialize the contents of the frame.
*/
private void initialize() {
frmTransportista = new JFrame();
frmTransportista.setTitle("EnvíosTransportista");
frmTransportista.setName("EnvíosTransportista");
frmTransportista.setBounds(0, 0, 577, 438);
frmTransportista.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frmTransportista.getContentPane().setLayout(new MigLayout("", "[grow]", "[][][][][][grow][][grow][][]"));
frmLocalizacion = new JFrame();
frmLocalizacion.setTitle("LocalizaciónEnvíos");
frmLocalizacion.setName("LocalizaciónEnvíos");
frmLocalizacion.setBounds(0, 0, 577, 438);
frmLocalizacion.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frmLocalizacion.getContentPane().setLayout(new MigLayout("", "[grow]", "[][][][][][grow][][grow][][]"));

lbTítulo = new JLabel("Localización de un envío:");
lbTítulo.setFont(new Font("Tahoma", Font.BOLD, 15));
frmTransportista.getContentPane().add(lbTítulo, "cell 0 0");
frmLocalizacion.getContentPane().add(lbTítulo, "cell 0 0");

pnEnvio = new JPanel();
FlowLayout fl_pnEnvio = (FlowLayout) pnEnvio.getLayout();
fl_pnEnvio.setAlignment(FlowLayout.LEFT);
frmTransportista.getContentPane().add(pnEnvio, "cell 0 2,grow");
frmLocalizacion.getContentPane().add(pnEnvio, "cell 0 2,grow");

lbNRef = new JLabel("Número de referencia del envío: ");
lbNRef.setFont(new Font("Tahoma", Font.PLAIN, 13));
Expand All @@ -82,25 +82,25 @@ private void initialize() {

lbEstado = new JLabel("El envío se encuentra en el estado: ");
lbEstado.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmTransportista.getContentPane().add(lbEstado, "flowx,cell 0 3");
frmLocalizacion.getContentPane().add(lbEstado, "flowx,cell 0 3");

lbInfo = new JLabel("Información general del envío:");
lbInfo.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmTransportista.getContentPane().add(lbInfo, "cell 0 4");
frmLocalizacion.getContentPane().add(lbInfo, "cell 0 4");

pnInfo = new JScrollPane();
frmTransportista.getContentPane().add(pnInfo, "cell 0 5,grow");
frmLocalizacion.getContentPane().add(pnInfo, "cell 0 5,grow");

tbInfo = new JTable();
tbInfo.setDefaultEditor(Object.class, null); //readonly
pnInfo.setViewportView(tbInfo);

lbMovimientos = new JLabel("Movimientos del envío:");
lbMovimientos.setFont(new Font("Tahoma", Font.PLAIN, 13));
frmTransportista.getContentPane().add(lbMovimientos, "cell 0 6");
frmLocalizacion.getContentPane().add(lbMovimientos, "cell 0 6");

pnMovimientos = new JScrollPane();
frmTransportista.getContentPane().add(pnMovimientos, "cell 0 7,grow");
frmLocalizacion.getContentPane().add(pnMovimientos, "cell 0 7,grow");

tbMovimientos = new JTable();
tbMovimientos.setDefaultEditor(Object.class, null); //readonly
Expand All @@ -109,7 +109,7 @@ private void initialize() {
JPanel pnSalir = new JPanel();
FlowLayout fl_pnSalir = (FlowLayout) pnSalir.getLayout();
fl_pnSalir.setAlignment(FlowLayout.RIGHT);
frmTransportista.getContentPane().add(pnSalir, "cell 0 9,grow");
frmLocalizacion.getContentPane().add(pnSalir, "cell 0 9,grow");

btnSalir = new JButton("Salir");
btnSalir.setForeground(Color.WHITE);
Expand All @@ -120,7 +120,7 @@ private void initialize() {
tfEstado = new JTextField();
tfEstado.setFont(new Font("Tahoma", Font.BOLD, 13));
tfEstado.setEditable(false);
frmTransportista.getContentPane().add(tfEstado, "cell 0 3");
frmLocalizacion.getContentPane().add(tfEstado, "cell 0 3");
tfEstado.setColumns(10);
}

Expand All @@ -131,7 +131,7 @@ public void reset() {
}

//Getters y Setters anyadidos para acceso desde el controlador (repersentacion compacta)
public JFrame getFrame() { return this.frmTransportista; }
public JFrame getFrame() { return this.frmLocalizacion; }
public JButton getBtSalir() { return this.btnSalir; }
public JButton getBtBuscar() { return this.btBuscar; }
public JTextField getTfNRef() { return tfNRef; }
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/giis/demo/util/SwingMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,15 @@ public void actionPerformed(ActionEvent e) {
}
});
frame.getContentPane().add(btnCarga);

JButton btnDescarga = new JButton("Descarga de envíos");
btnDescarga.addActionListener(new ActionListener() { //NOSONAR codigo autogenerado
public void actionPerformed(ActionEvent e) {
DescargaController controller=new DescargaController(new DescargaModel(), new DescargaView());
controller.initController();
}
});
frame.getContentPane().add(btnDescarga);
}

public JFrame getFrame() { return this.frame; }
Expand Down

0 comments on commit 8c63be0

Please sign in to comment.