numFilas($consulta); if ($num > 0) { parent::Persona($oid); $this->usuario = $usuario; } else { $error = "Candidato no encontrado."; throw new Exception($error); } } function getCapacidadesProfesionales(){ return new ListaCapacidadesProfesionales($this->getValor("oid"),"candidato"); } 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("510","521","522","523","540"); 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; } } ?>