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 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 */ function getCandidatosDisponibles() { return $this->getCandidatos("540"); } /** * 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 quitarCandidato() { $idCand = $this->getValor("candidato"); if (!empty($idCand)) { $candidato = new Candidato($this->usuario, $idCand); $estadoCand = $candidato->getValor("estado"); switch ($estadoCand) { case "560": $candidato->transita("540", ""); $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "Eliminado el candidato ".$nombre_candidato; $this->actualizarHistorial($mensaje); return true; break; default: $error = "[quitarCandidato]. El candidato tiene un estado no permitido ('" . $estadoCand . "')"; throw new Exception($error); } } } function colocarCandidato($idCandidato) { $idCand = $this->getValor("candidato"); dbug($idCand); echo dbug('print'); if (!empty($idCand)) { if (!$this->quitarCandidato()) { return false; } } $candidato = new Candidato($this->usuario, $idCandidato); $estadoCand = $candidato->getValor("estado"); dbug($estadoCand); echo dbug('print'); switch ($estadoCand) { case "540": if ($candidato->transita("560", "")) { $this->setCampo("candidato", $idCandidato); $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "Asignado el candidato ".$nombre_candidato; $this->actualizarHistorial($mensaje); return true; } break; case "560": $this->setCampo("candidato", $idCandidato); $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "Asignado el candidato ".$nombre_candidato; $this->actualizarHistorial($mensaje); return true; break; default: $error = "El candidato tiene un estado no permitido ('" . $candidato->getValor("estado") . "')"; throw new Exception($error); } } } ?>