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 Candidato
*
* Contiene toda la informaci<EFBFBD> n relativa al candidato .
*
* 2008 - 10 - 06 ( diego ) : Se crea el objeto con los m<EFBFBD> todos necesarios para gestionar candidatos .
*
*/
2011-05-19 08:46:58 +00:00
include_once ( " BD.php " );
include_once ( " Persona.php " );
include_once ( " Automata.php " );
class Candidato extends Persona {
private $usuario ;
function Candidato ( $usuario , $oid ) {
$consulta = " SELECT oid FROM usuarios WHERE oid = ' " . $oid . " ' AND tipo='candidato' " ;
$bd = new BD ();
$num = $bd -> numFilas ( $consulta );
if ( $num > 0 ) {
parent :: Persona ( $oid );
$this -> usuario = $usuario ;
} else {
$error = " Candidato no encontrado. " ;
throw new Exception ( $error );
}
}
function setCampo ( $nombre , $valor ) {
//PERMISOS:
/*
* Admin ( 1 ) - Todos
* RRHH ( 4 ) - Todos
* Otro - Excepci<EFBFBD> n
*/
$sesion = $this -> usuario -> getValor ( " oid " );
if ( $this -> usuario -> tieneRol ( 1 ) || $this -> usuario -> tieneRol ( 4 )) {
return parent :: setCampo ( $nombre , $valor );
} else {
//Campos que se pueden editar por el gerente, ya sea directamente o mediante una transici<63> n.
if (( $nombre == " observaciones " || $nombre == " msgEstado " || $nombre = " diasEspera " || $nombre == " estado " ) && $this -> usuario -> tieneRol ( 3 )) {
return parent :: setCampo ( $nombre , $valor );
} else {
$error = " El usuario no tiene permisos para editar al candidato. " ;
throw new Exception ( $error );
return false ;
exit ;
}
}
}
function addCurriculum ( $fichero ) {
//PERMISOS:
/*
* Admin ( 1 ) - Todos
* RRHH ( 4 ) - Todos
* Otro - Excepci<EFBFBD> n
*/
$sesion = $this -> usuario -> getValor ( " oid " );
if ( $this -> usuario -> tieneRol ( 3 ) || $this -> usuario -> tieneRol ( 1 ) || $this -> usuario -> tieneRol ( 4 )) {
return parent :: addCurriculum ( $fichero , $this -> usuario -> getValor ( " nombre " ));
} else {
$error = " El usuario no tiene permisos para asociar CV al candidato. " ;
throw new Exception ( $error );
return false ;
exit ;
}
}
function removeCurriculum ( $curriculum , $fecha ) {
//PERMISOS:
/*
* Admin ( 1 ) - Todos
* RRHH ( 4 ) - Todos
* Otro - Excepci<EFBFBD> n
*/
$sesion = $this -> usuario -> getValor ( " oid " );
if ( $this -> usuario -> tieneRol ( 1 ) || $this -> usuario -> tieneRol ( 4 )) {
parent :: removeCurriculum ( $curriculum , $fecha , $this -> usuario -> getValor ( " nombre " ));
} else {
$error = " El usuario no tiene permisos para eliminar un CV al candidato. " ;
throw new Exception ( $error );
}
}
/* SQL que da los pedidos en el que est<EFBFBD> un candidato dependiendo del estado
En el ejemplo
estado -> 20
id Candidato -> 12
@ param $estado - Estado del pedido .
@ return array codPedido => nombre o vac<EFBFBD> o .
*/
function getPedidosByEstado ( $estado ) {
/* SELECT P . oid , P . nombre
FROM pedidos P , candidato_pedido CP
WHERE CP . candidato = '12'
AND CP . estado = '20'
AND P . oid = CP . pedido */
$idC = $this -> getValor ( " oid " );
$consulta = " SELECT P.oid as oid,P.nombre as nombre
2011-04-04 15:16:10 +00:00
FROM pedidos P , candidato_pedido CP
WHERE CP . candidato = '$idC'
AND CP . estado = '$estado'
AND P . oid = CP . pedido " ;
2011-05-19 08:46:58 +00:00
$bd = new BD ();
return $bd -> keyValueQuery ( $consulta , " oid " , " nombre " );
}
function eliminar () {
//PERMISOS:
/*
* Admin ( 1 ) - Todos
* Otro - Excepci<EFBFBD> n
*/
$sesion = $this -> usuario -> getValor ( " oid " );
//Nos declaramos un array de estados eliminables:
$estados_eliminables = array ( 10 , 20 , 50 , 40 , 60 );
if ( $this -> usuario -> tieneRol ( 1 ) || $this -> usuario -> tieneRol ( 4 )) {
$estado = $this -> getValor ( " estado " );
if ( in_array ( $estado , $estados_eliminables )) {
return parent :: eliminar ();
} else {
$nombre_estado = $this -> getValor ( " nombre_estado " );
$error = " No se pueden eliminar candidatos en estado " . $nombre_estado . " . " ;
throw new Exception ( $error );
return false ;
}
} else {
$error = " El usuario no tiene permisos para eliminar al candidato. " ;
throw new Exception ( $error );
return false ;
}
}
function actualizarHistorial ( $mensaje ) {
parent :: actualizarHistorial ( $mensaje , $this -> usuario -> getValor ( " nombre " ));
}
function getSiguientes () {
$estado = $this -> getValor ( " estado " );
$idioma = $this -> usuario -> getValor ( " idioma " );
$rol = $this -> usuario -> getValor ( " rol " );
$a = new Automata ( " candidatos " , $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 ( " candidatos " , $idioma , $rol );
$transita = $a -> getTransicion ( $origen , $destino );
if (( $transita == " " ) || ! ( $transita >= 0 )) {
return false ;
} else {
$res = $this -> ejecutaTransicion ( $transita , $argumentos );
if ( $res ) {
$total = explode ( " #&dias; " , $argumentos );
$msj = $total [ 0 ];
$diasEspera = $total [ 1 ];
$this -> setCampos ( array ( " msgEstado " => $msj , " diasEspera " => $diasEspera , " estado " => $destino ));
/* $this -> setCampo ( " msgEstado " , $msj );
$this -> setCampo ( " diasEspera " , $diasEspera );
$this -> setCampo ( " estado " , $destino ); */
}
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 ( " Candidato " , $funcion ), $argumentos );
return $res ;
}
/**
* Disponible a no disponible
* Entrevistado a no disponible ( entrevistado ) .
* Admin , RRHH
SE LLEGA DESDE :
- Editar el estado del candidato desde la vista .
PRECONDICIONES :
- Mensaje con texto .
POSTCONDICIONES :
- Eliminarle de candidaturas en las que no est<EFBFBD> rechazado
y el pedido est<EFBFBD> pendiente , asignado o contratado
y comprobar transiciones a otros pedidos .
*/
private function ejecutar1020 ( $mensaje ) {
if ( $mensaje == " " ) {
echo ' < script type = " text/javascript " >
2011-04-04 15:16:10 +00:00
<!--
alert ( " Debe introducir un motivo para pasar al candidato a No disponible " );
-->
</ script > ' ;
2011-05-19 08:46:58 +00:00
return false ;
}
return true ;
}
/**
* Disponible a Entrevistado
* En proceso a En proceso ( entrevistado )
* No disponible a No disponible ( entrevistado )
* Admin , RRHH
SE LLEGA DESDE :
- Editar el estado del candidato desde la vista .
PRECONDICIONES :
- Ninguna .
POSTCONDICIONES :
- Almacenar en la BD la fecha de la entrevista .
*/
private function ejecutar1050 ( $mensaje ) {
$fechaAntEntrevista = $this -> getValor ( " fecha_entrevista " );
if (( $fechaAntEntrevista == " 2008-1-1 " ) || ( $fechaAntEntrevista == " 0000-00-00 " )) {
$fecha = date ( Y . " - " . m . " - " . d );
$this -> setCampos ( array ( " fecha_entrevista " => $fecha ));
}
return true ;
}
/**
* En proceso a no disponible
* En proceso ( entrevistado ) a no disponible ( entrevistado ) .
* Admin , RRHH
SE LLEGA DESDE :
- Editar el estado del candidato desde la vista .
PRECONDICIONES :
- Mensaje con texto .
POSTCONDICIONES :
- Eliminarle de candidaturas en las que no est<EFBFBD> rechazado
y el pedido est<EFBFBD> pendiente , asignado o contratado
y comprobar transiciones a otros pedidos .
*/
private function ejecutar3020 ( $mensaje ) {
if ( $mensaje == " " ) {
echo ' < script type = " text/javascript " >
2011-04-04 15:16:10 +00:00
<!--
alert ( " Debe introducir un motivo para pasar al candidato a No disponible " );
-->
</ script > ' ;
2011-05-19 08:46:58 +00:00
return false ;
}
$oid = $this -> getValor ( " oid " );
$consulta = " SELECT pedido FROM candidato_pedido, pedidos WHERE candidato=' $oid ' AND estado <> '10' AND pedido.oid = candidato_pedido.pedido AND pedido.estado IN ('10', '20', '30') " ;
$bd = new BD ();
$pedidos = $bd -> arrayQuery ( $consulta , " pedido " );
//Elimino al usuario de todas las candidaturas en las que no est<73> rechazado y el pedido est<73> pendiente, asignado o contratado.
$consulta = " DELETE FROM candidato_pedido, pedidos WHERE candidato=' $oid ' AND estado <> '10' AND pedido.oid = candidato_pedido.pedido AND pedido.estado IN ('10', '20', '30') " ;
//Para cada candidatura en la que no est<73> rechazado compruebo si el sacarle
//de ella supone un cambio en el pedido:
foreach ( $pedidos as $idP ) {
$pedido = new Pedido ( $idP );
$estado = $pedido -> getEstado ( " estado " );
//Si est<73> asignado o contratado tiene que transitar a pendiente
//(la transici<63> n se encarga ya de comprobar si cumple las precondiciones
//de este cambio de estado)
if (( $estado == '20' ) || ( $estado == '30' )) {
$pedido -> transita ( 10 , " " );
}
}
return true ;
}
/**
* No disponible a Disponible
* Admin , RRHH
SE LLEGA DESDE :
- Editar el estado del candidato desde la vista .
POSTCONDICIONES :
- Calcular la afinidad del candidato con todos los pedidos para que
puedan aparecer en ellos como " Propuestos por el sistema " .
*/
private function ejecutar2010 () {
$this -> setCampos ( array ( " estado " => " 10 " ));
$this -> calculaAfinidad ();
return true ;
}
/**
* En proceso a disponible
* En proceso ( entrevistado ) a disponible
SE LLEGA DESDE :
- Rechazar a un candidato .
- Poner un pedido en el que se encontraba como " No contratado " .
PRECONDICIONES :
- El usuario no se encuentra aceptado en ning<EFBFBD> n proceso de selecci<EFBFBD> n .
*/
private function ejecutar3010 () {
$id = $this -> getValor ( " oid " );
$bd = new BD ();
$consulta = " SELECT * FROM candidato_pedido WHERE candidato='. $id .' AND estado='20' " ;
$res = $bd -> numFilas (( $consulta ));
//No se cambia si est<73> en m<> s procesos.
if ( $res > 0 ) {
return false ;
}
return true ;
}
/**
* Disponible a En proceso .
* Admin , RRHH
SE LLEGA DESDE :
- Al aceptar a un candidato disponible en un proceso de selecci<EFBFBD> n .
EFECTOS :
- Se env<EFBFBD> a un email a RRHH informando de que se ha aceptado en un proyecto a un
candidato que no ha sido entrevistado .
- Se cambia el estado del candidato de disponible a enproceso
*/
private function ejecutar1030 () {
//Enviar un mail a RRHH con los datos pidiendo incorporaci<63> n.
$nombre = $this -> getValor ( " nombre " ) . " " . $this -> getValor ( " apellidos " );
$oid = $this -> getValor ( " oid " );
$asunto = " Candidato aceptado por pedido no entrevistado " ;
$direccion = constante ( " email " );
$path = " http://portal.selforsistemas.net " ;
//$link = "<a href='".$path."/detalle_candidato.php?oid=".$oid."'>".$nombre."</a>";
$email = " El candidato " . $nombre . " no entrevistado ha sido aceptado para un pedido. " ;
envia_correo ( $direccion , $asunto , $email );
$this -> setCampos ( array ( " estado " => " 30 " ));
return true ;
}
/**
* Entrevistado a Incorporado
* En proceso ( entrevistado ) a Incorporado *
* Admin , RRHH
SE LLEGA DESDE :
- Editar el estado del candidato desde la vista .
PRECONDICIONES :
- Ninguna .
POSTCONDICIONES :
- Cambia el tipo a " usuario " y desaparece de la lista de candidatos .
- Se a<EFBFBD> ade el campo " Fecha alta " .
- Se transita autom<EFBFBD> ticamente a " Esperando proyecto " .
*/
private function ejecutar5080 ( $mensaje ) {
$fecha = date ( Y . " - " . m . " - " . d );
$nombre = md5 ( $this -> getValor ( " nombre " ));
$this -> setCampos ( array ( " tipo " => " usuario " , " estado " => " 90 " , " password " => $nombre , " rol " => 6 , " fecha_alta " => $fecha , " salario " => $mensaje ));
/* $this -> setCampo ( " estado " , " 90 " );
$this -> setCampo ( " password " , $nombre );
$this -> setCampo ( " rol " , 6 );
$this -> setCampo ( " fecha_alta " , $fecha );
$this -> setCampo ( " salario " , $mensaje ); */
return false ;
}
/**
* Entrevistado a En proceso ( entrevistado ) .
* Admin , RRHH
SE LLEGA DESDE :
- Al aceptar a un candidato disponible en un proceso de selecci<EFBFBD> n .
EFECTOS :
- Se cambia el estado del candidato de en proceso ( entrevistado )
*/
private function ejecutar5070 () {
$this -> setCampos ( array ( " estado " => " 70 " ));
$this -> campos [ " estado_usuario " ] = " 70 " ;
return true ;
}
}
2011-04-04 15:16:10 +00:00
?>