usuario = $usuario; $consulta = "SELECT oid FROM candidato_pedido WHERE oid = '$oid'"; $bd = new BD(); $num = $bd->numFilas($consulta); if ($num > 0) { $this->campos['oid'] = $oid; } else { $error = "Oferta no encontrada."; throw new Exception($error); } } function eliminar() { //Antes de nada quitamos el candidato asociado a la oferta para que se haga la lógica que corresponda $idCand = $this->getValor("candidato"); if (!empty($idCand)) { if (!$this->quitarCandidato()) { return false; } } // eliminamos en la oferta de la BD $consulta = "DELETE FROM candidato_pedido WHERE oid = ".$this->campos['oid']; $bd = new BD(); if (!$bd->execQuery($consulta)) { return false; } else { $mensaje = "Oferta eliminada"; $this->actualizarHistorial($mensaje); return true; } } function actualizarHistorial($mensaje) { $oid = $this->getValor("oid"); $usuario = $this->usuario->getValor("nombre"); $consulta = "INSERT INTO historial_oferta (oid_h, fecha_h, persona_h, texto_h) VALUES('$oid', now(), '$usuario', '$mensaje')"; $bd = new BD(); return $bd->execQuery($consulta); } function getValor($nombre) { 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_estado": $idEstado = $this->getValor("estado"); $idioma = $this->usuario->getValor("idioma"); $consulta = "SELECT nombre FROM candidaturas_estados WHERE cod=\"" . $idEstado . "\" AND idioma=\"" . $idioma . "\""; break; case "nombre_solicitud": $oidPedido = $this->getValor("pedido"); $consulta = "SELECT nombre FROM pedidos WHERE oid=\"" . $oidPedido . "\""; break; case "nombre_candidato": $oidCandidato = $this->getValor("candidato"); $consulta = "SELECT concat(nombre, ' ', apellidos) FROM usuarios WHERE oid=\"" . $oidCandidato . "\""; break; default: $consulta = "SELECT " . $nombre . " FROM candidato_pedido 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; } function getSiguientes() { $estado = $this->getValor("estado"); $idioma = $this->usuario->getValor("idioma"); $rol = $this->usuario->getValor("rol"); $a = new Automata("candidaturas", $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("candidaturas", $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("Oferta", $funcion), $argumentos); return $res; } /** * En configuración -> Configurada */ private function ejecutar110120() { // Comprobamos que haya un candidato asignado. $candidato = $this->getValor("candidato"); if (!empty($candidato)) { return true; } else { $error = "No se puede cambiar de estado porque no hay ningún candidato asignado a esta oferta"; throw new Exception($error); return false; exit; } } function setCampo($nombre, $valor) { // PERMISOS: /* * Admin (1) - Todos * Gestor (3) - Los suyos * Otro - Excepció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 candidato_pedido SET $nombre = '$valor' WHERE oid='$oid'"; $bd = new BD(); if ($bd->execQuery($consulta)) { // Guardar en el historial $valor = $this->getValorMulti($nombre, $valor); if ($viejo == "" && $valor != "") { $historial = "$nombre (de - a $valor)"; } else { $historial = "$nombre (de $viejo a $valor)"; } if ($nombre = "estado") { $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; } /** * Devuelve una lista de candidatos disponibles para una oferta, que son todos menos los no disponibles #679 Peticion */ function getCandidatosDisponibles() { return $this->getCandidatos("510,521,522,523,540,550,560"); } /** * Devuelve una lista de candidatos de un estado dado */ private function getCandidatos($estado) { $lista = new ListaCandidatos($this->usuario, "", "", $estado); return $lista; } function getHistorial() { $historial = ""; $oid = $this->getValor("oid"); $consulta = "SELECT * FROM historial_oferta WHERE oid_h='$oid' ORDER BY fecha_h DESC"; $bd = new BD(); $resultado = $bd->execQuery($consulta); while ($rows = mysql_fetch_array($resultado)) { $fecha = $rows["fecha_h"]; $persona = $rows["persona_h"]; $texto = $rows["texto_h"]; $historial .= "[$fecha] $persona - $texto\n"; } return $historial; } function getOfertasCandidato($oid) { $consulta = "SELECT * FROM candidato_pedido WHERE candidato='$oid' ORDER BY fecha DESC"; $bd = new BD(); $resultado = $bd->execQuery($consulta); return $resultado; } function quitarCandidato() { $idCand = $this->getValor("candidato"); if (!empty($idCand)) { $candidato = new Candidato($this->usuario, $idCand); $estadoCand = $candidato->getValor("estado"); $numOfertasCandidato = $this->getOfertasCandidato($idCand); switch ($estadoCand) { //TODO CANDIDATO ASOCIADO A UNA OFERTA (este como este su situación) pasará a disponible si no tiene alguna otra oferta, //si tiene alguna otra oferta asociada se deja tal cual esta su situación //El estado del candidato no cambia si está asociado a alguna otra oferta, sino pasará a Disponible case 560: return true; break; case 510:; case 521:; case 522:; case 523:; case 530:; case 540:; case 550: if (count($numOfertasCandidato) <= 1) { $candidato->transita("540", ""); $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "El candidato ".$nombre_candidato." pasa a estado Disponible"; $this->actualizarHistorial($mensaje); } return true; break; default: $error = "[quitarCandidato]. El candidato tiene un estado no permitido ('" . $estadoCand . "')"; throw new Exception($error); } } } function asignarCandidato($idCandidato) { //Lo primero es tratar el candidato asociado actualmente antes de asignar el pasado por parametro $idCand = $this->getValor("candidato"); if (!empty($idCand)) { if (!$this->quitarCandidato()) { return false; } } $candidato = new Candidato($this->usuario, $idCandidato); $estadoCand = $candidato->getValor("estado"); $numOfertasCandidato = $this->getOfertasCandidato($idCand); switch ($estadoCand) { //Disponible asignado, el estado del candidato no cambia, solo se asigna a la oferta y ya está. case 560: $this->setCampo("candidato", $idCandidato); return true; break; //Pendiente de clasificar, Rechazados tipo1, tipo2, tipo3, Disponible. Todos los candidatos con alguno de estos estados cambiarán a Disponible asignado (560) case 510:; case 521:; case 522:; case 523:; case 540: $this->setCampo("candidato", $idCandidato); if ($candidato->transita("560", "")){ $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "Asignado el candidato ".$nombre_candidato. "-->".$candidato->getValor("estado"); $this->actualizarHistorial($mensaje); return true; } else { $error = "ERROR: El candidato no ha podido cambiar de estado"; throw new Exception($error); } break; //Asignado exlusivo sin ofertas asociada se asigna y ya esta case 550: if ($numOfertasCandidato > 0) { $error = "El candidato tiene un estado no permitido ('" . $candidato->getValor("estado") . "')"; throw new Exception($error); } else { $this->setCampo("candidato", $idCandidato); return true; } break; //("530") No Disponible default: $error = "El candidato tiene un estado no permitido ('" . $candidato->getValor("nombre_estado") . "')"; throw new Exception($error); } } } ?>