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ó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ó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ó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ó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á un candidato dependiendo del estado En el ejemplo estado -> 20 id Candidato ->12 @param $estado - Estado del pedido. @return array codPedido => nombre o vací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 FROM pedidos P,candidato_pedido CP WHERE CP.candidato='$idC' AND CP.estado='$estado' AND P.oid=CP.pedido"; $bd = new BD(); return $bd->keyValueQuery($consulta, "oid", "nombre"); } function eliminar(){ //PERMISOS: /* * Admin (1) - Todos * Otro - Excepció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é rechazado y el pedido esté pendiente, asignado o contratado y comprobar transiciones a otros pedidos. */ private function ejecutar1020($mensaje){ if($mensaje == ""){ echo ''; 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é rechazado y el pedido esté pendiente, asignado o contratado y comprobar transiciones a otros pedidos. */ private function ejecutar3020($mensaje){ if($mensaje == ""){ echo ''; 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é rechazado y el pedido esté 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é 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á asignado o contratado tiene que transitar a pendiente //(la transició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ún proceso de selecció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á 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ón. EFECTOS: - Se enví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ó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 = "".$nombre.""; $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ñade el campo "Fecha alta". - Se transita automá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ó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; } } ?>