package com.escuelademanejo.negocio;
import java.util.ArrayList;
import com.escuelademanejo.persistencia.FactoryPersistencia;
import com.escuelademanejo.persistencia.IPersistenciaController;
public class Instructor extends Usuario {
private int id_instructor;
private String modelo_auto;
private String patente;
private ArrayList<Integer> horarios;
private IPersistenciaController iPersistController = null;
public Instructor(String nombre, String clave, String nombre_completo,
String telefono, String mail, String modelo_auto, String patente) throws Exception {
super(nombre, clave, "", nombre_completo, telefono, mail);
FactoryPersistencia factPersistencia = FactoryPersistencia
.getInstance();
iPersistController = factPersistencia.getIPersistenciaController();
this.setTipo(iPersistController.get_TIPO_INSTRUCTOR());
this.id_instructor = -1; // se setea al persistirlo
this.modelo_auto = modelo_auto;
this.patente = patente;
this.horarios= new ArrayList<Integer>();
//cargamos los id horario en que trabaja este instructor
ArrayList<ArrayList<String>> horas = iPersistController.selectHorariosTrabajaInstructor(this.id_instructor);
for (ArrayList<String> hs : horas) {
this.horarios.add(Integer.parseInt(hs.get(1)));
}
}
/**
* @param datos_cli
* = lista de string que contiene: id , username, clave,
* nombre_completo, telefono, mail, modelo_auto, patente
* @throws Exception
*
*/
public Instructor(ArrayList<String> datos_inst) throws Exception {
// TODO Auto-generated constructor stub
super(datos_inst.get(1), datos_inst.get(2), "", datos_inst.get(3),
datos_inst.get(4), datos_inst.get(5));
FactoryPersistencia factPersistencia = FactoryPersistencia
.getInstance();
iPersistController = factPersistencia.getIPersistenciaController();
this.setTipo(iPersistController.get_TIPO_INSTRUCTOR());
if (!datos_inst.get(0).isEmpty())
this.id_instructor = Integer.valueOf(datos_inst.get(0));
this.modelo_auto = datos_inst.get(6);
this.patente = datos_inst.get(7);
this.horarios= new ArrayList<Integer>();
//cargamos los id horario en que trabaja este instructor
ArrayList<ArrayList<String>> horas = iPersistController.selectHorariosTrabajaInstructor(this.id_instructor);
for (ArrayList<String> hs : horas) {
this.horarios.add(Integer.parseInt(hs.get(1)));
}
}
public int getId_instructor() {
return id_instructor;
}
public void setId_instructor(int id_instructor) {
this.id_instructor = id_instructor;
}
public String getModelo_auto() {
return modelo_auto;
}
public void setModelo_auto(String modelo_auto) {
this.modelo_auto = modelo_auto;
}
public String getPatente() {
return patente;
}
public void setPatente(String patente) {
this.patente = patente;
}
public void delete() {
// TODO Auto-generated method stub
/**
* FUERA DEL ALCANCE
*/
}
public int save() {
// TODO Auto-generated method stub
/**
* FUERA DEL ALCANCE
*/
return 0;
}
/**
*
* @return una lista con los id de los horarios en los que trabaja
*/
public ArrayList<Integer> getHorarios() {
return horarios;
}
/**
*
* @param nuevos_horarios
* ids de horarios en los que trabaja el instructor.
*
* PRECOND: No deben existir ninguno de estos horarios para el instructor.
*
* POSCOND: se agregan estos horarios de trabajo al instructor
* @throws Exception Eror al agregar horarios de trabajo nuevos al instructor
*/
public void addHorariosDeTrabajo(ArrayList<Integer> nuevos_horarios) throws Exception{
if(nuevos_horarios!= null && ! nuevos_horarios.isEmpty())
{
// confirmamos el alta de los nuevos horarios para el instructor en la persistencia
try{
iPersistController.addHorariosInstructor(this.getId_instructor(), nuevos_horarios);
this.horarios.addAll(nuevos_horarios);
}catch (Exception e) {
// TODO: handle exception
throw new Exception("Eror al agregar horarios de trabajo nuevos al instructor " + this.getNombre_completo() + "... " + e.getMessage());
}
}
}
/**
*
* @param hs_a_borrar lista de ids de horarios a borrar
*
* POSCOND: los horarios son borrables (no tienen turno asignado) se quitan de los
* horarios de trabajo del instructor los otros no
*
* @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 Error borrando horarios del instructor
*/
public ArrayList<ArrayList<String>> borrarHorariosDeTrabajo(ArrayList<Integer> hs_a_borrar) throws Exception
{
/* Averiguamos Cuales de los horarios a borrar tinen turno ya asignado para ese horario. La consulta devuelve:
* turno.fecha, cliente.id, cliente.nombre_completo, instructor.id, instructor.nombre_completo, id_hora, hora.hora_desde, hora.hora_hasta, id_hora_instructor
* */
ArrayList<ArrayList<String>> turnos_asignados= iPersistController.selectTurnos(this.id_instructor, hs_a_borrar);
//ALBERTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
System.out.println("TURNOS ASIGNADOS= " + turnos_asignados.toString());
/* Ahora vemos cuales de los horarios a borrar son borrables, es decir, no tienen turno asignado */
ArrayList<Integer> horarios_borrables = new ArrayList<Integer>();
for (Integer id_hora : hs_a_borrar) {
boolean es_borrable= true;
for (ArrayList<String> tur : turnos_asignados) {
if(tur.get(5).equals(String.valueOf(id_hora))){
es_borrable= false;
break;
}
}
if(es_borrable)
horarios_borrables.add(id_hora);
}
//ALBERTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
System.out.println("HORARIOS BORRABLES: " + horarios_borrables.toString());
if ((horarios_borrables!=null) && !horarios_borrables.isEmpty())
{
/* confirmamos el borrado de los horarios en la persistencia */
try{
iPersistController.deleteHorariosInstructor(this.id_instructor, horarios_borrables);
this.horarios.removeAll(horarios_borrables);
}catch (Exception e){
// TODO: handle exception
throw new Exception("Error borrando horarios del instructor " + this.getNombre_completo() +"... "+ e.getMessage());
}
}
return turnos_asignados;
}
/**
*
* @param nuevos_horarios
* ids de horarios en los que trabaja el instructor
*
* 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 (si no tiene un turno asociado).
*
* @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
*/
public ArrayList<ArrayList<String>> changeHorarios(ArrayList<Integer> nuevos_horarios)
throws Exception {
// TODO Auto-generated method stub
//ALBERTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
System.out.println("HORARIOS INICIALES= " + nuevos_horarios.toString());
/* guardamos los horarios a borrar en un nuevo arreglo */
ArrayList<Integer> hs_a_borrar = new ArrayList<Integer>();
for (Integer id_h : this.horarios) {
if( ! nuevos_horarios.contains(id_h) ){
hs_a_borrar.add(id_h);
}else{
nuevos_horarios.remove(id_h); // no es nuevo as� que lo quitamos
}
}
//ALBERTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
System.out.println("HORARIOS A BORRAR= " + hs_a_borrar.toString());
ArrayList<ArrayList<String>> turnos = new ArrayList<ArrayList<String>>();
// borramos los horarios en la persistencia
if ( hs_a_borrar != null && !hs_a_borrar.isEmpty() ){
turnos = borrarHorariosDeTrabajo(hs_a_borrar);
}
//ALBERTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
System.out.println("NUEVOS HORARIOS= " + nuevos_horarios.toString());
// persistimos los nuevos horarios
if(nuevos_horarios!=null && !nuevos_horarios.isEmpty()){
addHorariosDeTrabajo(nuevos_horarios);
}
return turnos;
}
/**
* @return una lista de strings que contiene: id , username, clave,
* nombre_completo, telefono, mail, modelo_auto, patente
*/
public ArrayList<String> getDatos() {
// TODO Auto-generated method stub
ArrayList<String> datos = new ArrayList<String>();
datos.add(Integer.toString(getId_instructor()));
datos.add(getUserName());
datos.add(getClave());
datos.add(getNombre_completo());
datos.add(getTelefono());
datos.add(getMail());
datos.add(getModelo_auto());
datos.add(getPatente());
return datos;
}
}