Iteración 2 - AndresGutierrezCR/In4MatesSD_P1 GitHub Wiki

Iteración 2

En esta iteración se va a desarrollar el segundo caso de uso: Asignar una mesa.

Documento Resumen de la Iteración 2

Documento Resumen Iteración 2

Requisitos

El jefe de sala tiene a su disposición una pantalla donde aparece una sección de registro de comensales, donde podrá añadir el nombre del cliente que desea hacer la reserva, el numero de comensales que le acompañan incluido el mismo, la asignación de la mesa, el camarero asignado a atenderles, el horario si es comida o cena y el turno, a su vez incluirá un botón de aceptar para registrar los datos.

Análisis

Diagrama de analisis de la iteracion 2 V1.0.0

Image from Gyazo

A través de una interfaz IU_P_AsigMesas, diseñada para asignación de mesas por parte del jefe de sala, se accede a la funcionalidad controlReservas con la que se accede a la base de datos de mesas BBDD_Mesas.

Diagrama de secuencia de la iteracion 2 V1.0.0

Image from Gyazo

El Jefe de Sala envía datos sobre una determinada mesa y el sistema devuelve la confirmación de registro de dichos datos.

Diagrama de secuencia alternativo de la iteracion 2 V1.0.0

Image from Gyazo

El Jefe de Sala envía datos sobre una determinada mesa al sistema, pero este último falla a la hora de registrar los datos al producirse un error de envío de datos.

Diagrama de comunicación de la iteracion 2 V1.0.0

Image from Gyazo

El Jefe de Sala pulsa el botón Aceptar en la interfaz IU_P_AsigMesas, a través de la cual se envían los datos introducidos y se procesan en ControlReservas, para ser asignados en la base de datos de mesas BBDD_Mesas, desde la cual se envía la confirmación de la mesa hasta llegar de vuelta al Jefe de Sala a través de la interfaz.

Diagrama de comunicación alternativo de la iteracion 2 V1.0.0

Image from Gyazo

El Jefe de Sala pulsa el botón Aceptar en la interfaz IU_P_AsigMesas, a través de la cual se envían los datos introducidos y se procesan en ControlReservas, para ser asignados en la base de datos de mesas BBDD_Mesas, pero devuelve y muestra un error a través de la interfaz si no se pudo asignar la mesa.

Diseño

Diagrama de clases de la iteracion 2 V1.0.0

Image from Gyazo

En Presentación tendremos dos interfaces, IU_AsigMesa (destinada a las asignaciones de mesas) e IU_VerConfMesas (para visualizar la configuración de las mesas). Dichas interfaces se relacionarán con las clases Reserva y Mesa respectivamente, en el paquete de Dominio. Reserva se encarga de registrar los datos de las mesas reservadas por clientes, y Mesa de registrar los datos de cada una de las mesas independientemente de las reservas (aunque relacionadas, para compartir datos). La clase Mesa posee una clase de enumeración con los estados posibles de cada una de las mesas. Ambas clases se comunican a su vez con GestorMesa y GestorReserva del paquete de Persistencia, además del agente común para estas.

Diagrama de secuencia de la iteracion 2 V1.0.0

Image from Gyazo

El Jefe de Sala pulsa aceptar en IU_AsigMesa, a partir de la cual se crea una nueva reserva con los datos proporcionados, tras lo cual crea un objeto Mesa que al momento de recibir un identificador comienza a comunicarse con el AgenteMesa y el Agente para gestionar los nuevos datos. Al validar los datos podremos, a través de la interfaz de IU_AsigMesa, cambiar el estado de la mesa asignada y automáticamente la fecha y hora de la última modificación de estado y se actualizan los datos de la mesa. Por último se registra la nueva reserva de la mesa asignada y se recibe una confirmación positiva de vuelta si todo ha funcionado correctamente.

Tablas de la iteracion 2 V1.0.0

Image from Gyazo

En la clase Reserva tendremos los atributos Turno (uno de los tres posibles), TurnoComCen (comida o cena), Comensales (numero de clientes que se sentarán a la mesa), NombreCliente (nombre del cliente al cual se reserva la mesa), y por último IdReserva, siendo esta última la clave primaria.

Panel de la iteracion 2 V1.0.0

Image from Gyazo

El boceto del panel presenta un TitleBorder con el texto "Asignar Mesa", conteniendo unas etiquetas definidoras (Nombre Cliente, Mesa, Comensales, ...), seguidas de entradas de texto para el nombre del cliente, dos ComboBox para Mesa y Turno, un Spinner para el numero de comensales, y la posibilidad de elegir el turno de comida o el de cena; además también incluye el botón "Asignar" al fondo para confirmar la asignación de reserva a una mesa.

Implementación

Image from Gyazo

Al igual que en el boceto previo, la interfaz cuenta con un TitleBorder con el texto "Asignar Mesa", conteniendo unas etiquetas definidoras (Nombre Cliente, Mesa, Comensales, ...), seguidas de entradas de texto para el nombre del cliente, dos ComboBox para Mesa y Turno, un Spinner para el numero de comensales, y la posibilidad de elegir el turno de comida o el de cena; además también incluye el botón "Asignar" al fondo para confirmar la asignación de reserva a una mesa.

Presentación

Dominio

Clase Reserva

Clase reserva para la generacion de objetos de tipo reserva, para su creacion primero declaramos los distintos atributos y creamos un constructor vacio y otro con todos los atributos, a su vez creamos los distintos getters y setters.

package org.ReservaMesas.Dominio;

import org.ReservaMesas.Persistencia.GestorReserva;

public class Reserva {

private int idReserva;
private String nombreCliente;
private int comensales;
private String turnoComCen;
private int turno;

private Mesa mesa;
private GestorReserva gestorReserva;

public Reserva(int idReserva, String nombreCliente, int comensales, String turnoComCen, int turno, Mesa mesa) {
	
	this.idReserva = idReserva;
	this.nombreCliente = nombreCliente;
	this.comensales = comensales;
	this.turnoComCen = turnoComCen;
	this.turno = turno;
	this.mesa = mesa;
	this.gestorReserva=new GestorReserva();
}

public Reserva() {
	this.gestorReserva=new GestorReserva();
}

public void asignarIDUltimo() {
	gestorReserva.lastID(this);
}

public void eliminar() {
	gestorReserva.delete(this);
}

public void modificar() {
	gestorReserva.update(this);
}

public void insertar() {
	gestorReserva.insert(this);
}
public void leer() {
	gestorReserva.read(this);
}
public void leerTodo() {
	gestorReserva.readAll();
}

public GestorReserva getGestorReserva() {
	return this.gestorReserva;
}


public int getIdReserva() {
	return idReserva;
}

public void setIdReserva(int idReserva) {
	this.idReserva = idReserva;
}

public String getNombreCliente() {
	return nombreCliente;
}

public void setNombreCliente(String nombreCliente) {
	this.nombreCliente = nombreCliente;
}

public int getComensales() {
	return comensales;
}

public void setComensales(int comensales) {
	this.comensales = comensales;
}

public String getTurnoComCen() {
	return turnoComCen;
}

public void setTurnoComCen(String turnoComCen) {
	this.turnoComCen = turnoComCen;
}

public int getTurno() {
	return turno;
}

public void setTurno(int turno) {
	this.turno = turno;
}

public Mesa getMesa() {
	return mesa;
}

public void setMesa(Mesa mesa) {
	this.mesa = mesa;
}

}

Persistencia

Clase Gestor Reserva

El gestor de reserva nos servira de intermediario ente el agente de la base de datos y la capa de dominio, para ello crearemos una lista de reservas donde se recogeran las distintas reservas que esten registradas en la BBDD, este gestor nos permitira, añadir, leer, eliminar y modificar reservas en nuestra BBDD.

package org.ReservaMesas.Persistencia;

import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList;

import org.Autenticacion.Persistencia.Agente; import org.ReservaMesas.Dominio.Estados; import org.ReservaMesas.Dominio.Mesa; import org.ReservaMesas.Dominio.Reserva;

public class GestorReserva { private ArrayList listaReserva;

public GestorReserva() {
	listaReserva=new ArrayList <Reserva>();
}

public ArrayList<Reserva> getListaReserva() {
	return listaReserva;
}

public void setListaReserva(ArrayList<Reserva> listaReserva) {
	this.listaReserva = listaReserva;
}

public void delete(Reserva reserva) {
	try {
		Agente.getAgente().modificar("DELETE FROM reserva WHERE idReserva = "+reserva.getIdReserva()+"");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void update(Reserva reserva) {
	try {
		Agente.getAgente().modificar("UPDATE reserva SET nombrecliente='"+reserva.getNombreCliente()+"', "
				+ "comensales="+reserva.getComensales()+", turnocomcen ='"+reserva.getTurnoComCen()+"'"
						+ ", turno="+reserva.getTurno()+", idMesa="+reserva.getMesa().getIdMesa()+" WHERE idReserva = "+reserva.getIdReserva()+"");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void insert(Reserva reserva) {
	try {
		Agente.getAgente().modificar("INSERT INTO reserva VALUES("+reserva.getIdReserva()+",'"+reserva.getNombreCliente()+
				"',"+reserva.getComensales()+",'"+reserva.getTurnoComCen()+"',"+
				reserva.getTurno()+","+reserva.getMesa().getIdMesa()+")");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public void read(Reserva reserva) {
	ResultSet resultado;
	try {
		resultado = Agente.getAgente().leer("SELECT * FROM reserva WHERE idReserva="+reserva.getIdReserva()+"");
		while(resultado.next()) {
			
			reserva.setNombreCliente(resultado.getString(2));
			reserva.setComensales(resultado.getInt(3));
			reserva.setTurnoComCen(resultado.getString(4));
			reserva.setTurno(resultado.getInt(5));
			
			Mesa m = new Mesa();
			m.setIdMesa(resultado.getInt(6));
			
			m.leer();
			
			reserva.setMesa(m);
		}
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

public void lastID(Reserva reserva) {
	ResultSet resultado;
	try {
		
		resultado = Agente.getAgente().leer("SELECT MAX(idReserva) FROM reserva");
		//resultado = Agente.getAgente().leer("SELECT * FROM reserva;");
		
		while(resultado.next()) {
			reserva.setIdReserva(resultado.getInt(1)+1);
		
		}
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		System.out.println("Excepcion SQL");
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		System.out.println("Excepcion general");
		//e.printStackTrace();
	}
}

public void readAll() {
	ResultSet resultado;
	
	try {
		resultado = Agente.getAgente().leer("SELECT * FROM reserva ORDER BY idReserva");
		Reserva reserva;
		
		while (resultado.next()){
			Mesa m = new Mesa();
			m.setIdMesa(resultado.getInt(6));
			reserva=new Reserva(resultado.getInt(1),resultado.getString(2),resultado.getInt(3),
					resultado.getString(4),resultado.getInt(5),m);
			
			listaReserva.add(reserva);
		}
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

}

⚠️ **GitHub.com Fallback** ⚠️