package com.escuelademanejo.negocio;
import java.util.ArrayList;
import java.util.Date;
import java.util.TreeMap;
import com.escuelademanejo.persistencia.FactoryPersistencia;
import com.escuelademanejo.persistencia.IPersistenciaController;
public class UCController implements IUCController {
/**
* Esta clase implementa el patron Controller, el sistema es chico as� que
* usaremos un unico controlador de CU
*/
private CatalogoClientes catalogoClientes = null;
private CatalogoTurnos catalogoTurnos = null;
private Cliente cliReservaTurno = null;
private Instructor instructor_modif = null; // instructor del CU modificarHorarioInstructor
private CatalogoInstructores catalogoInstructores;
private FactoryPersistencia fp;
private IPersistenciaController ipc; /** cliente al que se le est� reservando el turno */
@Override
public void ingresarCliente(String username, String clave,
String nombre_completo, String telefono, String mail,
Date fecha_nacimiento) throws Exception {
// TODO Auto-generated method stub
if (catalogoClientes == null)
catalogoClientes = CatalogoClientes.getInstance();
catalogoClientes.addCliente(username, clave, nombre_completo, telefono,
mail, fecha_nacimiento);
}
@Override
public void ingresarTurno(int id_cliente, int id_horario_instructor, Date fecha_turno, String observacion) throws Exception {
// TODO Auto-generated method stub
if (catalogoTurnos == null)
catalogoTurnos = CatalogoTurnos.getInstance();
catalogoTurnos.addTurno(id_cliente, fecha_turno, id_horario_instructor, observacion);
}
@Override
public void modificarCliente(int id, String username, String clave,
String nombre_completo, String telefono, String mail,
Date fecha_nacimiento) throws Exception {
// TODO Auto-generated method stub
if (catalogoClientes == null)
catalogoClientes = CatalogoClientes.getInstance();
Cliente cli= catalogoClientes.getCliente(id);
if(clave != null && !clave.isEmpty())
cli.setClave(clave);
if(fecha_nacimiento!=null)
cli.setFecha_nacimiento(fecha_nacimiento);
if(mail != null && !mail.isEmpty())
cli.setMail(mail);
if(nombre_completo!=null && !nombre_completo.isEmpty())
cli.setNombre_completo(nombre_completo);
if(telefono!=null && !telefono.isEmpty())
cli.setTelefono(telefono);
if(username!=null && !username.isEmpty())
cli.setUserName(username);
cli.update(); // commiteamos los cambios en la persistencia
}
@Override
public void eliminarCliente(int id_cliente) throws Exception {
// TODO Auto-generated method stub
if (catalogoClientes == null)
catalogoClientes = CatalogoClientes.getInstance();
catalogoClientes.deleteCliente(id_cliente);
}
@Override
public void nuevoTurno(int id_Cliente, Date fecha, int id_hora_inst, String observacion) throws Exception {
// TODO Auto-generated method stub
if (catalogoClientes == null)
catalogoClientes = CatalogoClientes.getInstance();
cliReservaTurno = catalogoClientes.getCliente(id_Cliente);
if(cliReservaTurno == null)
throw new Exception("El cliente "+ id_Cliente +" no existe.");
if(! HorarioInstructor.existeId(id_hora_inst))
throw new Exception("El horario-instructor no existen.");
if (catalogoTurnos == null)
catalogoTurnos = CatalogoTurnos.getInstance();
int idTurno = catalogoTurnos.addTurno(id_Cliente, fecha, id_hora_inst, observacion);
cliReservaTurno.addNewTurno(idTurno);
}
@Override
public void modificarTurno(int idTurno, int id_Cliente, Date fecha, int id_hora_inst , String observacion) throws Exception {
// TODO Auto-generated method stub
if (catalogoTurnos == null)
catalogoTurnos = CatalogoTurnos.getInstance();
Turno t = catalogoTurnos.getTurno(idTurno);
if(t==null)
throw new Exception("El turno no existe:" + idTurno);
else{
if(t.getId_cliente() != id_Cliente){
throw new Exception("No se permite cambiar el cliente, por favor cree un nuevo turno para este cliente.");
}
t.setFecha(fecha);
t.setId_hi(id_hora_inst);
if(observacion!=null && !observacion.isEmpty())
t.setObservacion(observacion);
t.update();
}
}
@Override
public void eliminarturno(int id_turno) throws Exception {
// TODO Auto-generated method stub
if (catalogoTurnos == null)
catalogoTurnos = CatalogoTurnos.getInstance();
Turno t = catalogoTurnos.getTurno(id_turno);
if(t==null)
throw new Exception("El turno no existe.");
else{
/*Esto no es necesario hacerlo porque el turno no esta asociado
* al cliente en el actual modelo de datos.
*
* Cliente cli= catalogoClientes.getCliente(t.getId_cliente());
*
* cli.removeTurno(id_turno);
*/
t.delete();
}
}
/**
* @return Un Treemap donde la key es el id del cliente y el value una lista de string que contiene:
* id (el id va ac� tambi�n), username, clave, nombre_completo, telefono, mail, fecha_nacimiento
*/
@Override
public TreeMap<Integer, ArrayList<String>> listarClientes() throws Exception {
// TODO Auto-generated method stub
TreeMap<Integer, ArrayList<String>> lista = new TreeMap<Integer, ArrayList<String>>();
if (catalogoClientes == null)
catalogoClientes = CatalogoClientes.getInstance();
TreeMap<Integer, Cliente> clientes = catalogoClientes.getClientes();
if(clientes == null)
return null;
Iterable<Cliente> iteratorClientes = clientes.values();
for (Cliente cli : iteratorClientes) {
lista.put(cli.getId_cliente(), cli.getDatos());
}
return lista;
}
@Override
public TreeMap<Integer, ArrayList<String>> listarInstructores() throws Exception{
// TODO Auto-generated method stub
TreeMap<Integer, ArrayList<String>> lista = new TreeMap<Integer, ArrayList<String>>();
if (catalogoInstructores == null)
catalogoInstructores = CatalogoInstructores.getInstance();
TreeMap<Integer, Instructor> instructores = catalogoInstructores.getInstructores();
if(instructores == null)
return null;
Iterable<Instructor> iteratorInstructor = instructores.values();
for (Instructor inst : iteratorInstructor) {
lista.put(inst.getId_instructor(), inst.getDatos());
}
return lista;
}
@Override
public TreeMap<Integer, ArrayList<ArrayList<String>>> listarHorariosInstructores() throws Exception{
// TODO Auto-generated method stub
TreeMap<Integer, ArrayList<ArrayList<String>>> horarios_instructores= null;
FactoryPersistencia factp = FactoryPersistencia.getInstance();
IPersistenciaController ipc = factp.getIPersistenciaController();
try {
horarios_instructores = ipc.selectAllHorariosInstructores();
} catch ( Exception e ) {
throw e;
}
return horarios_instructores;
}
/**
* @see com.escuelademanejo.negocio.UCController#modificarHorarioInstructor(int, java.util.ArrayList)
* @param id_instructor es el id del instructor al que se le modifican los horarios de trabajo.
* @param ids_horarios es una lista de ids de horarios en los que trabaja el instructor con id = id_intructor.
* @return
* @return nada
*
* PRECOND: - el instructor con id = id_instructor existe
* - todos los horarios de ids_horarios existen
*
* POSCOND: Para cada id_horario de ids_horario si:
* - el instructor ya tiene ese horario no se hace nada.
* - el instructor no tiene ese horario asignado se le asigna.
* Si un horario asociado actualmente al instructor no est� en la lista ids_horarios se da de baja.
*
* @return los turnos que est�n asignados y por tanto sus horarios no se pueden borrar. La siguiente informaci�n es devuelta:
* para cada fila: turno.fecha, cliente.id, cliente.nombre_completo, instructor.id, instructor.nombre_completo,
* id_hora, hora.hora_desde, hora.hora_hasta, id_hora_instructor
*
* @throws Exception:
* - si el instructor con id = id_instructor no existe
* - si algun horario de ids_horarios no existe
*
* */
@Override
public ArrayList<ArrayList<String>> modificarHorarioInstructor(int id_instructor,
ArrayList<Integer> ids_horarios) throws Exception {
// TODO Auto-generated method stub
// si el instructor a modificar el horario es el mismo no lo volvemos a buscar
if(instructor_modif == null || instructor_modif.getId_instructor() != id_instructor){
if (catalogoInstructores == null)
catalogoInstructores = CatalogoInstructores.getInstance();
instructor_modif = catalogoInstructores.getInstructor(id_instructor);
}
if(instructor_modif == null)
throw new Exception("El instructor con id = " + id_instructor + "no existe.");
return instructor_modif.changeHorarios(ids_horarios);
}
/**
*
* @param id_cliente
* Es el id del cliente que se quiere buscar. Para indicar que no
* se quiere buscar por id se debe ingresar un numero menor o
* igual a cero
* @param username
* Es el nombre de usuario del cliente. Para indicar que no se
* quiere buscar por nombre de usuario poner username=null
*
* PRECOND: se debe ingresar correctamente alguno de los dos par�metros
*
* @return Un ArrayList de String que contiene: id, username,
* clave, nombre_completo, telefono, mail, fecha_nacimiento
* @throws Exception
*/
@Override
public ArrayList<String> getCliente(int id_cliente, String username) throws Exception {
// TODO Auto-generated method stub
if (catalogoClientes == null)
catalogoClientes = CatalogoClientes.getInstance();
return catalogoClientes.getCliente(id_cliente, username).getDatos();
}
@Override
public String validarAdmin(String username, String password) throws Exception {
// TODO Auto-generated method stub
fp = FactoryPersistencia.getInstance();
ipc = fp.getIPersistenciaController();
return ipc.validarAdmin(username, password);
}
@Override
public TreeMap<Integer,ArrayList<String>> reporte_clientes(Date desde, Date hasta) throws Exception {
// TODO Auto-generated method stub
FactoryPersistencia fp = FactoryPersistencia.getInstance();
IPersistenciaController ipc = fp.getIPersistenciaController();
return ipc.reporteClientes(desde, hasta);
}
@Override
public TreeMap<Integer,ArrayList<String>> reporte_instructores(Date desde, Date hasta) throws Exception {
// TODO Auto-generated method stub
FactoryPersistencia fp = FactoryPersistencia.getInstance();
IPersistenciaController ipc = fp.getIPersistenciaController();
return ipc.reporteInstructores(desde, hasta);
}
/**
*
* @return devuelve un Treemap con key= id del horario y value= (id_horario,hora_desde, hora_hasta)
* @throws Exception
*/
@Override
public TreeMap<Integer, ArrayList<String>> getHorarios() throws Exception{
if(ipc == null){
if(fp==null)
fp = FactoryPersistencia.getInstance();
ipc= fp.getIPersistenciaController();
}
return ipc.selectAllHorarios();
}
@Override
public TreeMap<Integer,ArrayList<String>> reporte_turnos(Date desde, Date hasta) throws Exception {
// TODO Auto-generated method stub
if(ipc == null){
if(fp==null)
fp = FactoryPersistencia.getInstance();
ipc= fp.getIPersistenciaController();
}
return ipc.reporteTurnos(desde, hasta);
}
/**
*
* @param id
* Es el id del instructor que se quiere buscar. Para indicar que no
* se quiere buscar por id se debe ingresar un numero menor o
* igual a cero
* @param username
* Es el nombre de usuario del instructor. Para indicar que no se
* quiere buscar por nombre de usuario poner username=null
*
* PRECOND: se debe ingresar correctamente alguno de los dos par�metros
*
* @return Un ArrayList de String que contiene: id, username,
* clave, nombre_completo, telefono, mail, modelo_auto, patente
* @throws Exception
*/
@Override
public ArrayList<String> getInstructor(int id, String username)
throws Exception {
// TODO Auto-generated method stub
if (catalogoInstructores == null)
catalogoInstructores = CatalogoInstructores.getInstance();
return catalogoInstructores.getInstructor(id, username).getDatos();
}
/**
*
* @param id_instructor el id del instructor al que le buscamos los horarios de trabajo
* @return una matriz donde cada fila es un horario de trabajo del instructor. Cada fila
* contiene: id horario-instructor, id del horario, hora desde, hora hasta
* @throws Exception si ocurre un error al conectarse a la BD o al hacer la consulta
*/
@Override
public ArrayList<ArrayList<String>> listarHorariosTrabajaInstructor(
int id_instructor) throws Exception{
if(ipc == null){
if(fp==null)
fp = FactoryPersistencia.getInstance();
ipc= fp.getIPersistenciaController();
}
return ipc.selectHorariosTrabajaInstructor(id_instructor);
}
@Override
public TreeMap<Integer, ArrayList<String>> listarTurnosCliente(int id_cliente) throws Exception {
ipc = FactoryPersistencia.getInstance().getIPersistenciaController();
try {
return ipc.selectTurnosCliente(id_cliente);
} catch (Exception e) {
throw e;
}
}
@Override
public int getIDHorarioInstructor(int id_horario, int id_instructor) throws Exception {
// TODO Auto-generated method stub
ArrayList<ArrayList<String>> hs = ipc.selectHorariosTrabajaInstructor(id_instructor);
for (ArrayList<String> h : hs) {
if(h.get(1).equals(""+ id_horario));
return Integer.parseInt(h.get(0));
}
return 0;
}
@Override
public String generarHorariosJSON ( TreeMap<Integer, ArrayList<ArrayList<String>>> data ) throws Exception {
// TODO Auto-generated method stub
String json = "";
for ( int id_inst : data.keySet() ) {
ArrayList<ArrayList<String>> value = data.get(id_inst);
String filas = "";
for (ArrayList<String> fila : value) {
filas += fila.get(0) + "-" + fila.get(1) + "-" + fila.get(2) + "/";
}
filas = filas.substring(0, filas.length()-1);
json += id_inst + "|" + filas + "#";
}
json = json.substring(0, json.length()-1);
return json;
}
}