2011-04-04 15:16:10 +00:00
< ? php
2011-05-19 08:46:58 +00:00
2011-04-04 15:16:10 +00:00
/*
* Clase Pedido
*/
2011-05-19 08:46:58 +00:00
include_once ( " Objects/BD.php " );
include_once ( " Objects/CandidatoPedido.php " );
include_once ( " Objects/Candidato.php " );
include_once ( " Objects/Empleado.php " );
include_once ( " Objects/Afinidad.php " );
include_once ( " Objects/Automata.php " );
include_once ( " Objects/Oferta.php " );
class Pedido {
// Atributos:
/* Usuario que tiene activa la sesi<73> n. */
private $usuario ;
/* Contiene una lista con todos los atributos y su valor */
private $campos = array ();
private $listaOfertas = null ;
/* Lista de perfiles */
private $listaPerfiles = null ;
/* Lista de tecnolog<6F> as */
private $listaTecnologias = null ;
/* Lista de idiomas */
private $listaIdiomas = null ;
/* Lista de provincias */
private $listaProvincias = null ;
/* Par<61> metros que si se cambian recalculan la afinidad */
private $listaAfinidad = array ( " nombre " , " perfil " , " pesoTecno " , " pesoIdioma " , " pesoPerfil " , " estado " );
/* Booleano que indica si el cambio de un campo lo hace por razones autom<EFBFBD> ticas y dejar realizar
* el cambio */
private $setAutomatico = false ;
// Constructor:
/**
* Recupera un pedido a partir de su identificador .
*
* @ param id $ - datos necesarios para crear un pedido .
*/
function Pedido ( $id , $usuario ) {
$this -> usuario = $usuario ;
switch ( gettype ( $id )) {
case " string " : $this -> campos [ 'oid' ] = $id ;
break ;
case " array " : $this -> parseaArray ( $id );
break ;
case " resource " : $this -> parseaResource ( $id );
break ;
default : echo gettype ( $id );
break ;
}
}
// Funciones:
/**
* Calcula el n<EFBFBD> mero de candidatos asociados al pedido .
*
* @ param tipo $ - estado del candidato en el pedido .
* @ return n<EFBFBD> mero de candidatos asociados a ese pedido .
*/
function dameNumCand ( $tipo ) {
// PERMISOS:
/*
* Admin ( 1 ) - Todos
* Selecci<EFBFBD> n ( 4 ) - Todos
* Gestor ( 3 ) - Los suyos
* Otro - Excepci<EFBFBD> n
*/
$gerente = $this -> getValor ( " gerente " );
$sesion = $this -> usuario -> getValor ( " oid " );
if ( $this -> usuario -> tieneRol ( 1 ) || $this -> usuario -> tieneRol ( 4 ) || ( $this -> usuario -> tieneRol ( 3 ) && $sesion == $gerente )) {
$tipoUpper = strtoupper ( $tipo );
$bd = new BD ();
$consulta = " SELECT count(*) FROM candidaturas_estado es, candidato_pedido ca WHERE UPPER(es.nombre)= \" " . $tipoUpper . " \" AND ca.estado =es.cod AND ca.pedido= \" " . $this -> getValor ( " oid " ) . " \" " ;
$numero = $bd -> getCampo ( $consulta );
} else {
$error = " El usuario no tiene permisos para obtener el n<> mero de candidatos de la solicitud de oferta. " ;
throw new Exception ( $error );
}
return $numero ;
}
/**
* Procesa un array para a<EFBFBD> adir campos al pedido .
*
* @ param array $ - datos a a<EFBFBD> adir al pedido .
*/
private function parseaArray ( $array ) {
foreach ( $array as $campo ) {
// echo "$campo<br>";
}
}
/**
* Procesa el resultado de una query para a<EFBFBD> adir campos al pedido .
*
* @ param resource $ - el resultado de la query .
*/
private function parseaResource ( $resource ) {
$fila = mysql_fetch_array ( $resource );
for ( $i = 0 ; $i < mysql_num_fields ( $resource ); $i ++ ) {
if ( ! in_array ( mysql_field_name ( $resource , $i ), $this -> campos )) {
$arrayAct = array ( mysql_field_name ( $resource , $i ) => $fila [ $i ]);
$this -> campos = $this -> campos + $arrayAct ;
}
}
}
/**
* Devuelve el valor de un campo .
*
* @ param nombre $ - nombre del campo por el que buscar .
* @ return valor del campo buscado .
*/
function getValor ( $nombre ) {
// No se controlan permisos porque se tienen que recuperar datos como el oid del gerente
// para verificar el resto de permisos.
if ( array_key_exists ( $nombre , $this -> campos )) {
// El campo ya lo habíamos recuperamos, lo mostramos
return $this -> campos [ $nombre ];
} else {
switch ( $nombre ) {
case " nombre_gerente " : $idGerente = $this -> getValor ( " gerente " );
$consulta = " SELECT CONCAT(nombre, \" \" ,apellidos) FROM usuarios WHERE oid= \" " . $idGerente . " \" " ;
break ;
case " nombre_estado " : $idEstado = $this -> getValor ( " estado " );
$idioma = $this -> usuario -> getValor ( " idioma " );
$consulta = " SELECT nombre FROM pedidos_estados WHERE cod= \" " . $idEstado . " \" AND idioma= \" " . $idioma . " \" " ;
break ;
case " nombre_cliente " : $idCliente = $this -> getValor ( " cliente " );
$consulta = " SELECT id FROM clientes WHERE oid= \" " . $idCliente . " \" " ;
break ;
case " nombre_salario_min " :
$consulta = " SELECT salario.nombre FROM salario, pedidos WHERE salario.id=pedidos.salario_min AND pedidos.oid= \" " . $this -> getValor ( " oid " ) . " \" " ;
$especial = true ;
break ;
case " nombre_salario_max " :
$consulta = " SELECT salario.nombre FROM salario, pedidos WHERE salario.id=pedidos.salario_max AND pedidos.oid= \" " . $this -> getValor ( " oid " ) . " \" " ;
$especial = true ;
break ;
default : $consulta = " SELECT " . $nombre . " FROM pedidos WHERE oid= \" " . $this -> campos [ 'oid' ] . " \" " ;
break ;
}
// Lo insertamos para nosotros
$bd = new BD ();
$valor = $bd -> getCampo ( $consulta );
// Lo insertamos para nosotros
$arrayAct = array ( $nombre => $valor );
$this -> campos = $this -> campos + $arrayAct ;
return $valor ;
}
}
/**
* Acceso a los campos del pedido .
*
* @ return los campos del pedido .
*/
function getCampos () {
return $this -> campos ;
}
/**
* Asigna un nuevo campo al pedido .
*
* @ param nombre $ - nombre del campo a asignar .
* @ param valor $ - valor del campo .
*/
function setCampo ( $nombre , $valor ) {
// PERMISOS:
/*
* Admin ( 1 ) - Todos
* Gestor ( 3 ) - Los suyos
* Otro - Excepci<EFBFBD> n
*/
$gerente = $this -> getValor ( " gerente " );
$sesion = $this -> usuario -> getValor ( " oid " );
if ( $this -> usuario -> tieneRol ( 1 ) || ( $this -> usuario -> tieneRol ( 3 ) && $sesion == $gerente ) || $this -> setAutomatico ) {
$viejo = $this -> getValor ( $nombre );
if ( $viejo != $valor ) {
// Comprobamos multivaluado y casos especiales antes del cambio:
$viejo = $this -> getValorMulti ( $nombre , $viejo );
$this -> campos [ $nombre ] = $valor ;
$oid = $this -> getValor ( " oid " );
$consulta = " UPDATE pedidos SET $nombre = ' $valor ' WHERE oid=' $oid ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
// Comprobamos multivaluado y casos especiales:
$valor = $this -> getValorMulti ( $nombre , $valor );
if ( $viejo == " " && $valor != " " ) {
$historial = " $nombre (de - a $valor ) " ;
} else {
$historial = " $nombre (de $viejo a $valor ) " ;
}
//$this->actualizarHistorial($historial);
}
}
} else {
$error = " El usuario no tiene permisos para editar la solicitud de oferta. " ;
throw new Exception ( $error );
}
}
private function getValorMulti ( $nombre , $antiguo ) {
switch ( $nombre ) {
case " procedencia " :
$valor = nombre_procedencia ( $antiguo );
break ;
case " estado " :
$valor = nombre_estado_pedido ( $antiguo );
break ;
case " localidad " :
$valor = nombre_localidad ( $antiguo );
break ;
case " perfil " :
$valor = nombre_perfil ( $antiguo );
break ;
case " cliente " :
$valor = nombre_cliente ( $antiguo );
break ;
default :
$valor = $antiguo ;
break ;
}
return $valor ;
}
/**
* Asigna nuevos campos al pedido .
*
* @ param array $ - lista de campos a asignar de la forma campo => valor .
*/
function setCampos ( $array ) {
foreach ( $array as $key => $value ) {
$this -> setCampo ( $key , $value );
}
}
/**
* Elimina un pedido de la base de datos .
*/
function eliminar () {
// PERMISOS:
/*
* Admin ( 1 ) - Todos
* Gestor ( 3 ) - Los suyos
* Otro - Excepci<EFBFBD> n
*/
$gerente = $this -> getValor ( " gerente " );
$sesion = $this -> usuario -> getValor ( " oid " );
if ( $this -> usuario -> tieneRol ( 1 ) || ( $this -> usuario -> tieneRol ( 3 ) && $sesion == $gerente )) {
$oid = $this -> getValor ( " oid " );
$consulta = " DELETE FROM pedidos WHERE oid=' $oid ' " ;
$bd = new BD ();
return $bd -> execQuery ( $consulta );
} else {
return false ;
}
}
/**
* Calcula una lista de candidatos de un estado .
*/
private function getCandidatos ( $estado ) {
$lista = array ();
$pedido = $this -> getValor ( " oid " );
$consulta = " SELECT A.*,B.*,C.email,C.oid,C.nombre,C.apellidos,C.fecha_alta, D.nombre as estado_usuario FROM candidato_pedido as A, candidaturas_estado as B, usuarios as C, candidatos_estados as D WHERE A.pedido = ' $pedido ' and A.estado = B.cod and B.cod=' $estado ' and C.oid=A.candidato and D.cod = C.estado ORDER BY A.afinidad DESC " ;
$bd = new BD ();
$resultado = $bd -> execQuery ( $consulta );
while ( $rows = mysql_fetch_assoc ( $resultado )) {
$candidato = new CandidatoPedido ( $rows );
$lista [] = $candidato ;
}
return $lista ;
}
function proponerCandidato ( $id , $observacion ) {
$estadoP = $this -> getValor ( " estado " );
if ( $estadoP == 40 ) {
return false ;
}
$this -> getCandidatosPropuestosRRHH ();
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosPropuestos ());
$oid = $this -> getValor ( " oid " );
// Si est<73> en la lista de propuestos por el sistema lo cambio a la de propuestos por RRHH
if ( $candidato != null ) {
$candidato -> modFechaCandidatura ();
$consulta = " UPDATE candidato_pedido SET estado = '40', fecha = curdate(),obsRRHH = ' $observacion ' where candidato = ' $id ' AND pedido = ' $oid ' " ;
$lista = $this -> listaPropuestos ;
$this -> listaPropuestos = null ;
foreach ( $lista as $elem ) {
if ( $elem -> getValor ( " candidato " ) != $id ) {
$this -> listaPropuestos [] = $elem ;
}
}
// Si no, lo mete directamente en la lista de propuestos por RRHH
} else {
$idPedido = $this -> getValor ( " oid " );
$idRRHH = $this -> usuario -> getValor ( " oid " );
$consulta = " INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, RRHH, fecha,obsRRHH) VALUES(' $id ', ' $idPedido ', '0', '40', ' $idRRHH ', curdate(),' $observacion ') " ;
try {
$candidato = new Candidato ( $this -> usuario , $id );
} catch ( Exception $e ) {
$candidato = new Empleado ( $this -> usuario , $id );
}
}
// Actualizamos la BD y las listas;
$nombre_candidato = $candidato -> getValor ( " nombre " ) . " " . $candidato -> getValor ( " apellidos " );
$nombre_usuario = $this -> usuario -> getValor ( " nombre " );
$mensaje = " El candidato $nombre_candidato ha sido propuesto por RRHH ( $nombre_usuario ) " ;
$this -> actualizarHistorial ( $mensaje );
$mensaje = " Propuesto en la solicitud $oid por RRHH ( $nombre_usuario ) " ;
try {
$usuario = new Candidato ( $this -> usuario , $id );
} catch ( Exception $e ) {
$usuario = new Empleado ( $this -> usuario , $id );
}
$usuario -> actualizarHistorial ( $mensaje );
$bd = new BD ();
$bd -> execQuery ( $consulta );
$this -> listaPropuestosRRHH [] = $candidato ;
return false ;
}
/**
* Acepta un candidato para el pedido .
*/
function aceptarCandidato ( $id ) {
$estadoP = $this -> getValor ( " estado " );
if ( $estadoP != 130 ) {
return false ;
}
$this -> getCandidatosAceptados ();
// Podemos aceptar a candidatos propuestos por el sistema...
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosPropuestos ());
// a candidatos propuestos por RRHH...
/* $rrhh = false ;
$rechazado = false ;
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosPropuestosRRHH ());
$rrhh = true ;
} */
// Y a candidatos rechazados.
if ( $candidato == null ) {
$rrhh = false ;
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosRechazados ());
$rechazado = true ;
}
$oid = $this -> getValor ( " oid " );
if ( $candidato != null ) {
$nombre_candidato = $candidato -> getValor ( " nombre " ) . " " . $candidato -> getValor ( " apellidos " );
$mensaje = " Aceptado el candidato $nombre_candidato " ;
$this -> actualizarHistorial ( $mensaje );
$mensaje = " Aceptado en la solicitud de oferta $oid " ;
// Contemplo si es candidato o empleado.
try {
$usuario = new Candidato ( $this -> usuario , $candidato -> getValor ( " oid " ));
} catch ( Exception $e ) {
$usuario = new Empleado ( $this -> usuario , $candidato -> getValor ( " oid " ));
}
$usuario -> actualizarHistorial ( $mensaje );
$candidato -> modFechaCandidatura ();
$consulta = " UPDATE candidato_pedido SET estado = '120', fecha = curdate() WHERE candidato = ' $id ' AND pedido = ' $oid ' " ;
$bd = new BD ();
$bd -> execQuery ( $consulta );
$lista_antigua = array ();
if ( $rrhh ) {
$lista_antigua = $this -> listaPropuestosRRHH ;
$this -> listaPropuestosRRHH = null ;
} else if ( $rechazado ) {
$lista_antigua = $this -> listaRechazados ;
$this -> listaRechazados = null ;
} else {
$lista_antigua = $this -> listaPropuestos ;
$this -> listaPropuestos = null ;
}
$lista_final = array ();
foreach ( $lista_antigua as $elem ) {
if ( $elem -> getValor ( " oid " ) != $id ) {
$lista_final [] = $elem ;
}
}
if ( $rrhh == true ) {
$this -> listaPropuestosRRHH = $lista_final ;
} else if ( $rechazado == true ) {
$this -> listaRechazados = $lista_final ;
} else {
$this -> listaPropuestos = $lista_final ;
}
$this -> listaAceptados [] = $candidato ;
// Compruebo el n<> mero de empleados:
/* $necesarios = $this -> getValor ( " empleados " );
$actuales = count ( $this -> listaAceptados );
$estado = $this -> getValor ( " estado " );
//Actualizo autom<6F> ticamente el estado del pedido
switch ( $estado ) {
case 10 :
if ( $actuales >= $necesarios ){
$this -> transita ( 20 , " " );
}
break ;
default :
break ;
} */
$estadoC = $usuario -> getValor ( " estado " );
// Actualizo autom<6F> ticamente el estado del candidato
// Cambiar el estado del candidato.
switch ( $estadoC ) {
case 540 :
$usuario -> transita ( 560 , " " );
break ;
default :
break ;
}
return true ;
}
return false ;
}
/**
* Rechaza un candidato para el pedido .
*/
function rechazarCandidato ( $id ) {
$estadoP = $this -> getValor ( " estado " );
if ( $estadoP != 130 ) {
return false ;
}
$this -> getCandidatosRechazados ();
$oid = $this -> getValor ( " oid " );
$antiguo = 0 ;
// Buscamos al candidato en la lista de propuestos o de aceptados...
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosPropuestos ());
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosAceptados ());
$antiguo = 1 ;
}
// Si no en la candidatos propuestos por RRHH...
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $id , $this -> getCandidatosPropuestosRRHH ());
$antiguo = 2 ;
}
if ( $candidato != null ) {
$nombre_candidato = $candidato -> getValor ( " nombre " ) . " " . $candidato -> getValor ( " apellidos " );
$mensaje = " Rechazado el candidato $nombre_candidato " ;
$this -> actualizarHistorial ( $mensaje );
$mensaje = " Rechazado en la solicitud de oferta $oid " ;
try {
$usuario = new Candidato ( $this -> usuario , $candidato -> getValor ( " oid " ));
} catch ( Exception $e ) {
$usuario = new Empleado ( $this -> usuario , $candidato -> getValor ( " oid " ));
}
$usuario -> actualizarHistorial ( $mensaje );
$candidato -> modFechaCandidatura ();
$consulta = " UPDATE candidato_pedido SET estado = '10', fecha = curdate() where candidato = ' $id ' AND pedido = ' $oid ' " ;
$bd = new BD ();
$bd -> execQuery ( $consulta );
// Si estaba en la lista de propuestos lo sacamos de ahí
if ( $antiguo == 0 ) {
$lista = $this -> listaPropuestos ;
$this -> listaPropuestos = null ;
foreach ( $lista as $elem ) {
if ( $elem -> getValor ( " candidato " ) != $id ) {
$this -> listaPropuestos [] = $elem ;
}
}
// Si no, si estaba en la lista de aceptados lo sacamos de ahí
} else if ( $antiguo == 1 ) {
$lista = $this -> listaAceptados ;
$this -> listaAceptados = null ;
foreach ( $lista as $elem ) {
if ( $elem -> getValor ( " candidato " ) != $id ) {
$this -> listaAceptados [] = $elem ;
}
}
} else if ( $antiguo == 2 ) {
$lista = $this -> listaPropuestosRRHH ;
$this -> listaPropuestosRRHH = null ;
foreach ( $lista as $elem ) {
if ( $elem -> getValor ( " candidato " ) != $id ) {
$this -> listaPropuestosRRHH [] = $elem ;
}
}
}
$this -> listaRechazados [] = $candidato ;
// Compruebo el n<> mero de empleados:
$necesarios = $this -> getValor ( " empleados " );
$actuales = count ( $this -> listaAceptados );
$estado = $this -> getValor ( " estado " );
// Actualizo autom<6F> ticamente el estado del pedido
switch ( $estado ) {
case 20 :
if ( $actuales < $necesarios ) {
$this -> transita ( 10 , " " );
}
case 30 :
if ( $actuales < $necesarios ) {
$this -> transita ( 10 , " " );
}
break ;
default :
}
$estadoC = $usuario -> getValor ( " estado " );
// Actualizo autom<6F> ticamente el estado del candidato
// Cambiar el estado del candidato.
switch ( $estadoC ) {
case 30 :
$usuario -> transita ( 10 , " " );
break ;
case 70 :
$usuario -> transita ( 50 , " " );
break ;
default :
break ;
}
return true ;
}
return false ;
}
/**
* Busca un candidato en una lista .
*
* @ param id $ - identificador del candidato a buscar .
* @ param lista $ - lista en la que buscar al candidato .
*/
function buscarCandidatoLista ( $id , $lista ) {
if ( $lista ) {
foreach ( $lista as $elem ) {
if ( $elem -> getValor ( " oid " ) == $id ) {
return $elem ;
}
}
}
return null ;
}
/**
* Devuelve una lista de tecnologías asociadas al pedido .
*/
function getTecnologias () {
if ( $this -> listaTecnologias == null ) {
$oid = $this -> getValor ( " oid " );
$consulta = " SELECT tecnologia, id FROM tecnologia_pedido, tecnologia WHERE oid_i = ' $oid ' and tecnologia_pedido.tecnologia = tecnologia.oid " ;
$bd = new BD ();
$this -> listaTecnologias = $bd -> keyValueQuery ( $consulta , " id " , " tecnologia " );
}
return $this -> listaTecnologias ;
}
/**
* Devuelve una lista de idiomas asociados al pedido .
*/
function getIdiomas () {
if ( $this -> listaIdiomas == null ) {
$oid = $this -> getValor ( " oid " );
$consulta = " SELECT idioma, id FROM idioma_pedido, idiomas WHERE oid_i = ' $oid ' and idioma_pedido.idioma = idiomas.oid " ;
$bd = new BD ();
$this -> listaIdiomas = $bd -> keyValueQuery ( $consulta , " id " , " idioma " );
}
return $this -> listaIdiomas ;
}
/**
* Devuelve una lista de perfiles asociados al pedido .
*/
function getPerfiles () {
if ( $this -> listaPerfiles == null ) {
$oid = $this -> getValor ( " oid " );
$consulta = " SELECT perfil, id FROM perfil_pedido, perfil WHERE oid_i = ' $oid ' and perfil_pedido.perfil = perfil.oid " ;
$bd = new BD ();
$this -> listaPerfiles = $bd -> keyValueQuery ( $consulta , " id " , " perfil " );
}
return $this -> listaPerfiles ;
}
/**
* Devuelve una lista de provincias asociadas al pedido .
*/
function getProvincias () {
if ( $this -> listaProvincias == null ) {
$oid = $this -> getValor ( " oid " );
$consulta = " SELECT provincia, id FROM provincia_pedido, provincias WHERE oid_i = ' $oid ' and provincia_pedido.provincia = provincias.oid " ;
$bd = new BD ();
$this -> listaProvincias = $bd -> keyValueQuery ( $consulta , " id " , " provincia " );
}
return $this -> listaProvincias ;
}
function addTecnologias ( $array ) {
foreach ( $array as $elem ) {
$this -> addTecnologia ( $elem );
}
}
function addIdiomas ( $array ) {
foreach ( $array as $elem ) {
$this -> addIdioma ( $elem );
}
}
function addProvincias ( $array ) {
foreach ( $array as $elem ) {
$this -> addProvincia ( $elem );
}
}
function addPerfiles ( $array ) {
if ( gettype ( $array ) == " array " ) {
foreach ( $array as $elem ) {
$this -> addPerfil ( $elem );
}
}
}
/**
* Asocia una nueva tecnología en la base de datos .
*/
private function addTecnologia ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getTecnologias ();
if ( ! in_array ( $id , $this -> listaTecnologias )) {
$consulta = " SELECT id FROM tecnologia WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_tecno = $bd -> getCampo ( $consulta );
$consulta = " INSERT INTO tecnologia_pedido VALUES(' $id ', ' $oid ') " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Nueva tecno: $nombre_tecno " ;
//$this->actualizarHistorial($mensaje);
$this -> listaTecnologias [ $nombre_tecno ] = $id ;
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Asocia un nuevo idioma en la base de datos .
*/
private function addIdioma ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getIdiomas ();
if ( ! in_array ( $id , $this -> listaIdiomas )) {
$consulta = " SELECT id FROM idiomas WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_idioma = $bd -> getCampo ( $consulta );
$consulta = " INSERT INTO idioma_pedido VALUES(' $id ', ' $oid ') " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Nuevo idioma: $nombre_idioma " ;
//$this->actualizarHistorial($mensaje);
$this -> listaIdiomas [ $nombre_idioma ] = $id ;
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Asocia un nuevo perfil en la base de datos .
*/
private function addPerfil ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getPerfiles ();
if ( ! in_array ( $id , $this -> listaPerfiles )) {
$consulta = " SELECT id FROM perfil WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_perfil = $bd -> getCampo ( $consulta );
$consulta = " INSERT INTO perfil_pedido VALUES(' $id ', ' $oid ') " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Nuevo perfil: $nombre_perfil " ;
//$this->actualizarHistorial($mensaje);
$this -> listaPerfiles [ $nombre_perfil ] = $id ;
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Asocia una nueva provincia en la base de datos .
*/
private function addProvincia ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getProvincias ();
if ( ! in_array ( $id , $this -> listaProvincias )) {
$consulta = " SELECT id FROM provincias WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_provincia = $bd -> getCampo ( $consulta );
$consulta = " INSERT INTO provincia_pedido VALUES(' $id ', ' $oid ') " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Nueva provincia: $nombre_provincia " ;
//$this->actualizarHistorial($mensaje);
$this -> listaProvincias [ $nombre_provincia ] = $id ;
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Elimina la asociaci<EFBFBD> n entre una tecnolog<EFBFBD> a y un pedido .
*/
function removeTecnologia ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getTecnologias ();
if ( in_array ( $id , $this -> listaTecnologias )) {
$consulta = " SELECT id FROM tecnologia WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_tecno = $bd -> getCampo ( $consulta );
$consulta = " DELETE FROM tecnologia_pedido WHERE tecnologia=' $id ' and oid_i=' $oid ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Eliminada tecno: $nombre_tecno " ;
//$this->actualizarHistorial($mensaje);
$lista = $this -> listaTecnologias ;
$this -> listaTecnologias = null ;
foreach ( $lista as $key => $value ) {
if ( $value != $id ) {
$this -> listaTecnologias [ $key ] = $value ;
}
}
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Elimina la asociaci<EFBFBD> n entre un idioma y un pedido .
*/
function removeIdioma ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getIdiomas ();
if ( in_array ( $id , $this -> listaIdiomas )) {
$consulta = " SELECT id FROM idiomas WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_idioma = $bd -> getCampo ( $consulta );
$consulta = " DELETE FROM idioma_pedido WHERE idioma=' $id ' and oid_i=' $oid ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Eliminado idioma: $nombre_idioma " ;
//$this->actualizarHistorial($mensaje);
$lista = $this -> listaIdiomas ;
$this -> listaIdiomas = null ;
foreach ( $lista as $key => $value ) {
if ( $value != $id ) {
$this -> listaIdiomas [ $key ] = $value ;
}
}
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Elimina la asociaci<EFBFBD> n entre una provincia y un pedido .
*/
function removeProvincia ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getProvincias ();
if ( in_array ( $id , $this -> listaProvincias )) {
$consulta = " SELECT id FROM provincias WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_provincia = $bd -> getCampo ( $consulta );
$consulta = " DELETE FROM provincia_pedido WHERE provincia=' $id ' and oid_i=' $oid ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Eliminada provicia: $nombre_provincia " ;
//$this->actualizarHistorial($mensaje);
$lista = $this -> listaProvincias ;
$this -> listaProvincias = null ;
foreach ( $lista as $key => $value ) {
if ( $value != $id ) {
$this -> listaProvincias [ $key ] = $value ;
}
}
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Elimina la asociaci<EFBFBD> n entre un perfil y un pedido .
*/
function removePerfil ( $id ) {
$oid = $this -> getValor ( " oid " );
$this -> getPerfiles ();
if ( in_array ( $id , $this -> listaPerfiles )) {
$consulta = " SELECT id FROM perfil WHERE oid=' $id ' " ;
$bd = new BD ();
$nombre_perfil = $bd -> getCampo ( $consulta );
$consulta = " DELETE FROM perfil_pedido WHERE perfil=' $id ' and oid_i=' $oid ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
$mensaje = " Eliminado perfil: $nombre_perfil " ;
//$this->actualizarHistorial($mensaje);
$lista = $this -> listaPerfiles ;
$this -> listaPerfiles = null ;
foreach ( $lista as $key => $value ) {
if ( $value != $id ) {
$this -> listaPerfiles [ $key ] = $value ;
}
}
} else {
return false ;
}
} else {
return false ;
}
return true ;
}
/**
* Calcula la afinidad del pedido con todos los candidatos del sistema .
*
* @ param id $ - identificador del usuario .
*/
function calculaAfinidad () {
// Recuperamos al pedido:
$id = $this -> getValor ( " oid " );
$pesoIdioma = $this -> getValor ( " pesoIdioma " );
$pesoTecno = $this -> getValor ( " pesoTecno " );
$pesoPerfil = $this -> getValor ( " pesoPerfil " );
// Eliminamos a los usuario de la tabla de candidatos en pedido que se encuentren
// en proceso para este pedido.
$consulta = " DELETE FROM candidato_pedido WHERE pedido=' $id ' AND estado='110' " ;
$bd = new BD ();
$bd -> execQuery ( $consulta );
// Si el pedido no est<73> cerrado calculamos su afinidad para los usuarios:
$estado = $this -> getValor ( " estado " );
// Estados v<> lidos: En configuraci<63> n
if ( $estado == " 130 " ) {
$consulta = " SELECT email FROM usuarios WHERE tipo='candidato' AND estado IN ('540', '560') " ;
$bd = new BD ();
$listaUsuarios = $bd -> arrayQuery ( $consulta , " email " );
// Calculamos la afinidad de cada usuario.
foreach ( $listaUsuarios as $emailUsuario ) {
try {
$usuario = new Usuario ( $emailUsuario , $this -> usuario );
$idUsuario = $usuario -> getValor ( " oid " );
$idiomasPedido = $this -> getIdiomas ();
$idiomasUsuario = $usuario -> getidiomas ();
$tecnologiasPedido = $this -> getTecnologias ();
$tecnologiasUsuario = $usuario -> getTecnologias ();
$perfilesPedido = $this -> getPerfiles ();
$perfilesUsuario = $usuario -> getPerfiles ();
$provinciasPedido = $this -> getProvincias ();
$provinciasDeseadas = $usuario -> getProvinciasDeseadas ();
$provinciasNoDeseadas = $usuario -> getProvinciasNoDeseadas ();
$afinidad = new Afinidad ( $idiomasPedido , $idiomasUsuario , $tecnologiasPedido ,
$tecnologiasUsuario , $perfilesPedido , $perfilesUsuario , $provinciasPedido , $provinciasDeseadas , $provinciasNoDeseadas );
$afi = $afinidad -> calculaAfinidad ( $pesoIdioma , $pesoPerfil , $pesoTecno );
echo $afi . " <br/> " ;
if ( $afi > 0 ) {
$consulta = " INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, fecha) VALUES(' $idUsuario ', ' $id ', ' $afi ', '110', curdate()) " ;
$bd = new BD ();
$bd -> execQuery ( $consulta );
}
} catch ( Exception $e ) {
// Nunca debería entrar aquí.
}
}
}
}
function actualizarHistorial ( $mensaje ) {
$oid = $this -> getValor ( " oid " );
$usuario = $this -> usuario -> getValor ( " nombre " );
$consulta = " INSERT INTO historial_pedido (oid_h, fecha_h, persona_h, texto_h) VALUES(' $oid ', now(), ' $usuario ', ' $mensaje ') " ;
$bd = new BD ();
return $bd -> execQuery ( $consulta );
}
function getHistorial () {
2011-04-04 15:16:10 +00:00
$historial = " " ;
2011-05-19 08:46:58 +00:00
$oid = $this -> getValor ( " oid " );
2011-04-04 15:16:10 +00:00
$consulta = " SELECT * FROM historial_pedido WHERE oid_h=' $oid ' ORDER BY fecha_h DESC " ;
$bd = new BD ();
$resultado = $bd -> execQuery ( $consulta );
2011-05-19 08:46:58 +00:00
while ( $rows = mysql_fetch_array ( $resultado )) {
$fecha = $rows [ " fecha_h " ];
$persona = $rows [ " persona_h " ];
$texto = $rows [ " texto_h " ];
$historial .= " [ $fecha ] $persona - $texto\n " ;
2011-04-04 15:16:10 +00:00
}
return $historial ;
2011-05-19 08:46:58 +00:00
}
function getSiguientes () {
$estado = $this -> getValor ( " estado " );
$idioma = $this -> usuario -> getValor ( " idioma " );
$rol = $this -> usuario -> getValor ( " rol " );
$a = new Automata ( " pedidos " , $idioma , $rol );
$siguientes = $a -> getSiguientes ( $estado );
return $siguientes ;
}
function transita ( $destino , $argumentos ) {
$origen = $this -> getValor ( " estado " );
$idioma = $this -> usuario -> getValor ( " idioma " );
$rol = $this -> usuario -> getValor ( " rol " );
$a = new Automata ( " pedidos " , $idioma , $rol );
$transita = $a -> getTransicion ( $origen , $destino );
if (( $transita == " " ) || ! ( $transita >= 0 )) {
return false ;
} else {
$res = $this -> ejecutaTransicion ( $transita , $argumentos );
if ( $res ) {
$this -> setAutomatico = true ;
$this -> setCampo ( " msgEstado " , $argumentos );
$this -> setCampo ( " estado " , $destino );
$this -> setAutomatico = false ;
}
return $res ;
}
}
private function ejecutaTransicion ( $codigo , $argumentos ) {
// Si no hace nada al transitar salimos sin m<> s.
if ( $codigo == 0 )
return true ;
$funcion = " ejecutar $codigo " ;
$res = call_user_func ( array ( " Pedido " , $funcion ), $argumentos );
return $res ;
}
/**
* Sin calificar -> En configuraci<EFBFBD> n
*/
private function ejecutar110130 () {
return true ;
}
/**
* En configuraci<EFBFBD> n -> Sin calificar
*/
private function ejecutar130110 () { // De *En configuraci<63> n* a *Sin calificar*
$id = $this -> getValor ( " oid " );
$bd = new BD ();
// Borro la tabla de ofertas de este pedido
$consulta = " DELETE FROM candidato_pedido WHERE pedido=' $id ' " ;
$bd -> execQuery ( $consulta );
return true ;
}
/**
* A<EFBFBD> ade un comentario por parte de un gerente hacia un candidato
*
* @ param idCandidato $ : oid del candidato
* @ param observacion $ : observacion a proponer
*/
function addComentarioPropuesta ( $idCandidato , $observacion ) {
// S<> lo lo puede hacer los gerentes
if ( ! $this -> usuario -> tieneRol ( " 3 " )) {
$error = " No tiene permisos para editar la candidatura " ;
throw new Exception ( $error );
return false ;
exit ;
}
$consulta = " UPDATE candidato_pedido SET obsGerente=' " . $observacion . " ' WHERE pedido=' " . $this -> getValor ( " oid " ) . " ' AND candidato=' " . $idCandidato . " ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
// Nos actualizamos
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosPropuestos ());
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosPropuestosRRHH ());
}
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosRechazados ());
}
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosAceptados ());
}
$candidato -> modObsGerente ( $observacion );
} else {
$error = " No se ha podido actualiar la observación " ;
throw new Exception ( $error );
return false ;
exit ;
}
}
/**
* A<EFBFBD> ade un comentario por parte de un RRHH hacia un candidato
*
* @ param idCandidato $ : oid del candidato
* @ param observacion $ : observacion a proponer
*/
function addComentarioPropuestaRRHH ( $idCandidato , $observacion ) {
// S<> lo lo puede hacer los RRHH
if ( ! $this -> usuario -> tieneRol ( " 4 " )) {
$error = " No tiene permisos para editar la candidatura " ;
throw new Exception ( $error );
return false ;
exit ;
}
$consulta = " UPDATE candidato_pedido SET obsRRHH=' " . $observacion . " ' WHERE pedido=' " . $this -> getValor ( " oid " ) . " ' AND candidato=' " . $idCandidato . " ' " ;
$bd = new BD ();
if ( $bd -> execQuery ( $consulta )) {
// Nos actualizamos
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosPropuestos ());
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosPropuestosRRHH ());
}
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosRechazados ());
}
if ( $candidato == null ) {
$candidato = $this -> buscarCandidatoLista ( $idCandidato , $this -> getCandidatosAceptados ());
}
$candidato -> modObsRRHH ( $observacion );
} else {
$error = " No se ha podido actualiar la observación " ;
throw new Exception ( $error );
return false ;
exit ;
}
}
}
2011-04-04 15:16:10 +00:00
?>