usuario = $usuario; switch (gettype($id)) { case "string":$this->campos['oid'] = $id; break; case "array": $this->parseaArray($id); break; case "resource": $this->parseaResource($id); break; default: echo gettype($id); break; } } // Funciones: /** * Calcula el número de candidatos asociados al pedido. * * @param tipo $ - estado del candidato en el pedido. * @return número de candidatos asociados a ese pedido. */ function dameNumCand($tipo) { // PERMISOS: /* * Admin (1) - Todos * Selección (4) - 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(4) || ($this->usuario->tieneRol(3) && $sesion == $gerente)) { $tipoUpper = strtoupper($tipo); $bd = new BD(); $consulta = "SELECT count(*) FROM candidaturas_estado es, candidato_pedido ca WHERE UPPER(es.nombre)=\"" . $tipoUpper . "\" AND ca.estado =es.cod AND ca.pedido=\"" . $this->getValor("oid") . "\""; $numero = $bd->getCampo($consulta); } else { $error = "El usuario no tiene permisos para obtener el número de candidatos de la solicitud de oferta."; throw new Exception($error); } return $numero; } /** * Procesa un array para añadir campos al pedido. * * @param array $ - datos a añadir al pedido. */ private function parseaArray($array) { foreach ($array as $campo) { // echo "$campo
"; } } function getCapacidadesProfesionales(){ return new ListaCapacidadesProfesionales($this->getValor("oid"),"solicitud"); } /** * Procesa el resultado de una query para añadir campos al pedido. * * @param resource $ - el resultado de la query. */ private function parseaResource($resource) { $fila = mysql_fetch_array($resource); for ($i = 0; $i < mysql_num_fields($resource); $i++) { if (!in_array(mysql_field_name($resource, $i), $this->campos)) { $arrayAct = array(mysql_field_name($resource, $i) => $fila[$i]); $this->campos = $this->campos + $arrayAct; } } } /** * Devuelve el valor de un campo. * * @param nombre $ - nombre del campo por el que buscar. * @return valor del campo buscado. */ function getValor($nombre) { // No se controlan permisos porque se tienen que recuperar datos como el oid del gerente // para verificar el resto de permisos. 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_gerente":$idGerente = $this->getValor("gerente"); $consulta = "SELECT CONCAT(nombre,\" \",apellidos) FROM usuarios WHERE oid=\"" . $idGerente . "\""; break; case "nombre_estado":$idEstado = $this->getValor("estado"); $idioma = $this->usuario->getValor("idioma"); $consulta = "SELECT nombre FROM pedidos_estados WHERE cod=\"" . $idEstado . "\" AND idioma=\"" . $idioma . "\""; break; case "nombre_cliente":$idCliente = $this->getValor("cliente"); $consulta = "SELECT id FROM clientes WHERE oid=\"" . $idCliente . "\""; break; case "nombre_salario_min": $consulta = "SELECT salario.nombre FROM salario, pedidos WHERE salario.id=pedidos.salario_min AND pedidos.oid=\"" . $this->getValor("oid") . "\""; $especial = true; break; case "nombre_salario_max": $consulta = "SELECT salario.nombre FROM salario, pedidos WHERE salario.id=pedidos.salario_max AND pedidos.oid=\"" . $this->getValor("oid") . "\""; $especial = true; break; default: $consulta = "SELECT " . $nombre . " FROM pedidos 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 darNombreEstado($cod, $idioma) { $consulta = "SELECT NOMBRE from pedidos_estados WHERE cod=\"" . $cod . "\" AND idioma=\"" . $idioma . "\""; $bd = new BD(); echo $consulta; return $bd->getCampo($consulta); } /** * Asigna un nuevo campo al pedido. * * @param nombre $ - nombre del campo a asignar. * @param valor $ - valor del campo. */ 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 pedidos SET $nombre = '$valor' WHERE oid='$oid'"; $bd = new BD(); if ($bd->execQuery($consulta)) { // Comprobamos multivaluado y casos especiales: $valor = $this->getValorMulti($nombre, $valor); /////////////////////////////////////////////////// //SOLO ACTUALIZA EL HISTORIAL LOS CAMBIOS DE ESTADO /////////////////////////////////////////////////// if ($nombre == "estado") { $historial = "Cambio de estado (". $viejo ." a ". $valor .")"; $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; } /** * Asigna nuevos campos al pedido. * * @param array $ - lista de campos a asignar de la forma campo => valor. */ function setCampos($array) { foreach ($array as $key => $value) { $this->setCampo($key, $value); } } /** * Elimina un pedido de la base de datos. */ function eliminar() { // 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)) { $oid = $this->getValor("oid"); $consulta = "DELETE FROM pedidos WHERE oid='$oid'"; $bd = new BD(); return $bd->execQuery($consulta); } else { return false; } } /** * Calcula una lista de candidatos de un estado. */ private function getCandidatos($estado) { $lista = array(); $pedido = $this->getValor("oid"); $consulta = "SELECT A.*,B.*,C.email,C.oid,C.nombre,C.apellidos,C.fecha_alta, D.nombre as estado_usuario FROM candidato_pedido as A, candidaturas_estado as B, usuarios as C, candidatos_estados as D WHERE A.pedido = '$pedido' and A.estado = B.cod and B.cod='$estado' and C.oid=A.candidato and D.cod = C.estado ORDER BY A.afinidad DESC"; $bd = new BD(); $resultado = $bd->execQuery($consulta); while ($rows = mysql_fetch_assoc($resultado)) { $candidato = new CandidatoPedido($rows); $lista[] = $candidato; } return $lista; } function proponerCandidato($id, $observacion) { $estadoP = $this->getValor("estado"); if ($estadoP == 40) { return false; } $this->getCandidatosPropuestosRRHH(); $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosPropuestos()); $oid = $this->getValor("oid"); // Si está en la lista de propuestos por el sistema lo cambio a la de propuestos por RRHH if ($candidato != null) { $candidato->modFechaCandidatura(); $consulta = "UPDATE candidato_pedido SET estado = '40', fecha = curdate(),obsRRHH = '$observacion' where candidato = '$id' AND pedido = '$oid'"; $lista = $this->listaPropuestos; $this->listaPropuestos = null; foreach ($lista as $elem) { if ($elem->getValor("candidato") != $id) { $this->listaPropuestos[] = $elem; } } // Si no, lo mete directamente en la lista de propuestos por RRHH } else { $idPedido = $this->getValor("oid"); $idRRHH = $this->usuario->getValor("oid"); $consulta = "INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, RRHH, fecha,obsRRHH) VALUES('$id', '$idPedido', '0', '40', '$idRRHH', curdate(),'$observacion')"; try { $candidato = new Candidato($this->usuario, $id); } catch (Exception $e) { $candidato = new Empleado($this->usuario, $id); } } // Actualizamos la BD y las listas; $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $nombre_usuario = $this->usuario->getValor("nombre"); $mensaje = "El candidato $nombre_candidato ha sido propuesto por RRHH ($nombre_usuario)"; $this->actualizarHistorial($mensaje); $mensaje = "Propuesto en la solicitud $oid por RRHH ($nombre_usuario)"; try { $usuario = new Candidato($this->usuario, $id); } catch (Exception $e) { $usuario = new Empleado($this->usuario, $id); } $usuario->actualizarHistorial($mensaje); $bd = new BD(); $bd->execQuery($consulta); $this->listaPropuestosRRHH[] = $candidato; return false; } /** * Acepta un candidato para el pedido. */ function aceptarCandidato($id) { $estadoP = $this->getValor("estado"); if ($estadoP != 130) { return false; } $this->getCandidatosAceptados(); // Podemos aceptar a candidatos propuestos por el sistema... $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosPropuestos()); // a candidatos propuestos por RRHH... /* $rrhh = false; $rechazado = false; if ($candidato == null) { $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosPropuestosRRHH()); $rrhh = true; } */ // Y a candidatos rechazados. if ($candidato == null) { $rrhh = false; $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosRechazados()); $rechazado = true; } $oid = $this->getValor("oid"); if ($candidato != null) { $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "Aceptado el candidato $nombre_candidato"; $this->actualizarHistorial($mensaje); $mensaje = "Aceptado en la solicitud de oferta $oid"; // Contemplo si es candidato o empleado. try { $usuario = new Candidato($this->usuario, $candidato->getValor("oid")); } catch (Exception $e) { $usuario = new Empleado($this->usuario, $candidato->getValor("oid")); } $usuario->actualizarHistorial($mensaje); $candidato->modFechaCandidatura(); $consulta = "UPDATE candidato_pedido SET estado = '120', fecha = curdate() WHERE candidato = '$id' AND pedido = '$oid'"; $bd = new BD(); $bd->execQuery($consulta); $lista_antigua = array(); if ($rrhh) { $lista_antigua = $this->listaPropuestosRRHH; $this->listaPropuestosRRHH = null; } else if ($rechazado) { $lista_antigua = $this->listaRechazados; $this->listaRechazados = null; } else { $lista_antigua = $this->listaPropuestos; $this->listaPropuestos = null; } $lista_final = array(); foreach ($lista_antigua as $elem) { if ($elem->getValor("oid") != $id) { $lista_final[] = $elem; } } if ($rrhh == true) { $this->listaPropuestosRRHH = $lista_final; } else if ($rechazado == true) { $this->listaRechazados = $lista_final; } else { $this->listaPropuestos = $lista_final; } $this->listaAceptados[] = $candidato; // Compruebo el número de empleados: /* $necesarios = $this->getValor("empleados"); $actuales = count($this->listaAceptados); $estado = $this->getValor("estado"); //Actualizo automáticamente el estado del pedido switch ($estado) { case 10: if($actuales >= $necesarios){ $this->transita(20, ""); } break; default: break; } */ $estadoC = $usuario->getValor("estado"); // Actualizo automáticamente el estado del candidato // Cambiar el estado del candidato. switch ($estadoC) { case 540: $usuario->transita(560, ""); break; default: break; } return true; } return false; } /** * Rechaza un candidato para el pedido. */ function rechazarCandidato($id) { $estadoP = $this->getValor("estado"); if ($estadoP != 130) { return false; } $this->getCandidatosRechazados(); $oid = $this->getValor("oid"); $antiguo = 0; // Buscamos al candidato en la lista de propuestos o de aceptados... $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosPropuestos()); if ($candidato == null) { $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosAceptados()); $antiguo = 1; } // Si no en la candidatos propuestos por RRHH... if ($candidato == null) { $candidato = $this->buscarCandidatoLista($id, $this->getCandidatosPropuestosRRHH()); $antiguo = 2; } if ($candidato != null) { $nombre_candidato = $candidato->getValor("nombre") . " " . $candidato->getValor("apellidos"); $mensaje = "Rechazado el candidato $nombre_candidato"; $this->actualizarHistorial($mensaje); $mensaje = "Rechazado en la solicitud de oferta $oid"; try { $usuario = new Candidato($this->usuario, $candidato->getValor("oid")); } catch (Exception $e) { $usuario = new Empleado($this->usuario, $candidato->getValor("oid")); } $usuario->actualizarHistorial($mensaje); $candidato->modFechaCandidatura(); $consulta = "UPDATE candidato_pedido SET estado = '10', fecha = curdate() where candidato = '$id' AND pedido = '$oid'"; $bd = new BD(); $bd->execQuery($consulta); // Si estaba en la lista de propuestos lo sacamos de ahí if ($antiguo == 0) { $lista = $this->listaPropuestos; $this->listaPropuestos = null; foreach ($lista as $elem) { if ($elem->getValor("candidato") != $id) { $this->listaPropuestos[] = $elem; } } // Si no, si estaba en la lista de aceptados lo sacamos de ahí } else if ($antiguo == 1) { $lista = $this->listaAceptados; $this->listaAceptados = null; foreach ($lista as $elem) { if ($elem->getValor("candidato") != $id) { $this->listaAceptados[] = $elem; } } } else if ($antiguo == 2) { $lista = $this->listaPropuestosRRHH; $this->listaPropuestosRRHH = null; foreach ($lista as $elem) { if ($elem->getValor("candidato") != $id) { $this->listaPropuestosRRHH[] = $elem; } } } $this->listaRechazados[] = $candidato; // Compruebo el número de empleados: $necesarios = $this->getValor("empleados"); $actuales = count($this->listaAceptados); $estado = $this->getValor("estado"); // Actualizo automáticamente el estado del pedido switch ($estado) { case 20: if ($actuales < $necesarios) { $this->transita(10, ""); } case 30: if ($actuales < $necesarios) { $this->transita(10, ""); } break; default: } $estadoC = $usuario->getValor("estado"); // Actualizo automáticamente el estado del candidato // Cambiar el estado del candidato. switch ($estadoC) { case 30: $usuario->transita(10, ""); break; case 70: $usuario->transita(50, ""); break; default: break; } return true; } return false; } /** * Busca un candidato en una lista. * * @param id $ - identificador del candidato a buscar. * @param lista $ - lista en la que buscar al candidato. */ function buscarCandidatoLista($id, $lista) { if ($lista) { foreach ($lista as $elem) { if ($elem->getValor("oid") == $id) { return $elem; } } } return null; } /** * Devuelve una lista de tecnologías asociadas al pedido. */ function getTecnologias() { if ($this->listaTecnologias == null) { $oid = $this->getValor("oid"); $consulta = "SELECT tecnologia, id FROM tecnologia_pedido, tecnologia WHERE oid_i = '$oid' and tecnologia_pedido.tecnologia = tecnologia.oid"; $bd = new BD(); $this->listaTecnologias = $bd->keyValueQuery($consulta, "id", "tecnologia"); } return $this->listaTecnologias; } /** * Devuelve una lista de idiomas asociados al pedido. */ function getIdiomas() { if ($this->listaIdiomas == null) { $oid = $this->getValor("oid"); $consulta = "SELECT idioma, id FROM idioma_pedido, idiomas WHERE oid_i = '$oid' and idioma_pedido.idioma = idiomas.oid"; $bd = new BD(); $this->listaIdiomas = $bd->keyValueQuery($consulta, "id", "idioma"); } return $this->listaIdiomas; } /** * Devuelve una lista de perfiles asociados al pedido. */ function getPerfiles() { if ($this->listaPerfiles == null) { $oid = $this->getValor("oid"); $consulta = "SELECT perfil, id FROM perfil_pedido, perfil WHERE oid_i = '$oid' and perfil_pedido.perfil = perfil.oid"; $bd = new BD(); $this->listaPerfiles = $bd->keyValueQuery($consulta, "id", "perfil"); } return $this->listaPerfiles; } /** * Devuelve una lista de provincias asociadas al pedido. */ function getProvincias() { if ($this->listaProvincias == null) { $oid = $this->getValor("oid"); $consulta = "SELECT provincia, id FROM provincia_pedido, provincias WHERE oid_i = '$oid' and provincia_pedido.provincia = provincias.oid"; $bd = new BD(); $this->listaProvincias = $bd->keyValueQuery($consulta, "id", "provincia"); } return $this->listaProvincias; } function addTecnologias($array) { foreach ($array as $elem) { $this->addTecnologia($elem); } } function addIdiomas($array) { foreach ($array as $elem) { $this->addIdioma($elem); } } function addProvincias($array) { foreach ($array as $elem) { $this->addProvincia($elem); } } function addPerfiles($array) { if (gettype($array) == "array") { foreach ($array as $elem) { $this->addPerfil($elem); } } } /** * Asocia una nueva tecnología en la base de datos. */ private function addTecnologia($id) { $oid = $this->getValor("oid"); $this->getTecnologias(); if (!in_array($id, $this->listaTecnologias)) { $consulta = "SELECT id FROM tecnologia WHERE oid='$id'"; $bd = new BD(); $nombre_tecno = $bd->getCampo($consulta); $consulta = "INSERT INTO tecnologia_pedido VALUES('$id', '$oid')"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Nueva tecno: $nombre_tecno"; //$this->actualizarHistorial($mensaje); $this->listaTecnologias[$nombre_tecno] = $id; } else { return false; } } else { return false; } return true; } /** * Asocia un nuevo idioma en la base de datos. */ private function addIdioma($id) { $oid = $this->getValor("oid"); $this->getIdiomas(); if (!in_array($id, $this->listaIdiomas)) { $consulta = "SELECT id FROM idiomas WHERE oid='$id'"; $bd = new BD(); $nombre_idioma = $bd->getCampo($consulta); $consulta = "INSERT INTO idioma_pedido VALUES('$id', '$oid')"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Nuevo idioma: $nombre_idioma"; //$this->actualizarHistorial($mensaje); $this->listaIdiomas[$nombre_idioma] = $id; } else { return false; } } else { return false; } return true; } /** * Asocia un nuevo perfil en la base de datos. */ private function addPerfil($id) { $oid = $this->getValor("oid"); $this->getPerfiles(); if (!in_array($id, $this->listaPerfiles)) { $consulta = "SELECT id FROM perfil WHERE oid='$id'"; $bd = new BD(); $nombre_perfil = $bd->getCampo($consulta); $consulta = "INSERT INTO perfil_pedido VALUES('$id', '$oid')"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Nuevo perfil: $nombre_perfil"; //$this->actualizarHistorial($mensaje); $this->listaPerfiles[$nombre_perfil] = $id; } else { return false; } } else { return false; } return true; } /** * Asocia una nueva provincia en la base de datos. */ private function addProvincia($id) { $oid = $this->getValor("oid"); $this->getProvincias(); if (!in_array($id, $this->listaProvincias)) { $consulta = "SELECT id FROM provincias WHERE oid='$id'"; $bd = new BD(); $nombre_provincia = $bd->getCampo($consulta); $consulta = "INSERT INTO provincia_pedido VALUES('$id', '$oid')"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Nueva provincia: $nombre_provincia"; //$this->actualizarHistorial($mensaje); $this->listaProvincias[$nombre_provincia] = $id; } else { return false; } } else { return false; } return true; } /** * Elimina la asociación entre una tecnología y un pedido. */ function removeTecnologia($id) { $oid = $this->getValor("oid"); $this->getTecnologias(); if (in_array($id, $this->listaTecnologias)) { $consulta = "SELECT id FROM tecnologia WHERE oid='$id'"; $bd = new BD(); $nombre_tecno = $bd->getCampo($consulta); $consulta = "DELETE FROM tecnologia_pedido WHERE tecnologia='$id' and oid_i='$oid'"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Eliminada tecno: $nombre_tecno"; //$this->actualizarHistorial($mensaje); $lista = $this->listaTecnologias; $this->listaTecnologias = null; foreach ($lista as $key => $value) { if ($value != $id) { $this->listaTecnologias[$key] = $value; } } } else { return false; } } else { return false; } return true; } /** * Elimina la asociación entre un idioma y un pedido. */ function removeIdioma($id) { $oid = $this->getValor("oid"); $this->getIdiomas(); if (in_array($id, $this->listaIdiomas)) { $consulta = "SELECT id FROM idiomas WHERE oid='$id'"; $bd = new BD(); $nombre_idioma = $bd->getCampo($consulta); $consulta = "DELETE FROM idioma_pedido WHERE idioma='$id' and oid_i='$oid'"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Eliminado idioma: $nombre_idioma"; //$this->actualizarHistorial($mensaje); $lista = $this->listaIdiomas; $this->listaIdiomas = null; foreach ($lista as $key => $value) { if ($value != $id) { $this->listaIdiomas[$key] = $value; } } } else { return false; } } else { return false; } return true; } /** * Elimina la asociación entre una provincia y un pedido. */ function removeProvincia($id) { $oid = $this->getValor("oid"); $this->getProvincias(); if (in_array($id, $this->listaProvincias)) { $consulta = "SELECT id FROM provincias WHERE oid='$id'"; $bd = new BD(); $nombre_provincia = $bd->getCampo($consulta); $consulta = "DELETE FROM provincia_pedido WHERE provincia='$id' and oid_i='$oid'"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Eliminada provicia: $nombre_provincia"; //$this->actualizarHistorial($mensaje); $lista = $this->listaProvincias; $this->listaProvincias = null; foreach ($lista as $key => $value) { if ($value != $id) { $this->listaProvincias[$key] = $value; } } } else { return false; } } else { return false; } return true; } /** * Elimina la asociación entre un perfil y un pedido. */ function removePerfil($id) { $oid = $this->getValor("oid"); $this->getPerfiles(); if (in_array($id, $this->listaPerfiles)) { $consulta = "SELECT id FROM perfil WHERE oid='$id'"; $bd = new BD(); $nombre_perfil = $bd->getCampo($consulta); $consulta = "DELETE FROM perfil_pedido WHERE perfil='$id' and oid_i='$oid'"; $bd = new BD(); if ($bd->execQuery($consulta)) { $mensaje = "Eliminado perfil: $nombre_perfil"; //$this->actualizarHistorial($mensaje); $lista = $this->listaPerfiles; $this->listaPerfiles = null; foreach ($lista as $key => $value) { if ($value != $id) { $this->listaPerfiles[$key] = $value; } } } else { return false; } } else { return false; } return true; } /** * Calcula la afinidad del pedido con todos los candidatos del sistema. * * @param id $ - identificador del usuario. */ function calculaAfinidad() { // Recuperamos al pedido: $id = $this->getValor("oid"); $pesoIdioma = $this->getValor("pesoIdioma"); $pesoTecno = $this->getValor("pesoTecno"); $pesoPerfil = $this->getValor("pesoPerfil"); // Eliminamos a los usuario de la tabla de candidatos en pedido que se encuentren // en proceso para este pedido. $consulta = "DELETE FROM candidato_pedido WHERE pedido='$id' AND estado='110'"; $bd = new BD(); $bd->execQuery($consulta); // Si el pedido no está cerrado calculamos su afinidad para los usuarios: $estado = $this->getValor("estado"); // Estados válidos: En configuración if ($estado == "130") { $consulta = "SELECT email FROM usuarios WHERE tipo='candidato' AND estado IN ('540', '560')"; $bd = new BD(); $listaUsuarios = $bd->arrayQuery($consulta, "email"); // Calculamos la afinidad de cada usuario. foreach ($listaUsuarios as $emailUsuario) { try { $usuario = new Usuario($emailUsuario, $this->usuario); $idUsuario = $usuario->getValor("oid"); $idiomasPedido = $this->getIdiomas(); $idiomasUsuario = $usuario->getidiomas(); $tecnologiasPedido = $this->getTecnologias(); $tecnologiasUsuario = $usuario->getTecnologias(); $perfilesPedido = $this->getPerfiles(); $perfilesUsuario = $usuario->getPerfiles(); $provinciasPedido = $this->getProvincias(); $provinciasDeseadas = $usuario->getProvinciasDeseadas(); $provinciasNoDeseadas = $usuario->getProvinciasNoDeseadas(); $afinidad = new Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido, $tecnologiasUsuario, $perfilesPedido, $perfilesUsuario, $provinciasPedido, $provinciasDeseadas, $provinciasNoDeseadas); $afi = $afinidad->calculaAfinidad($pesoIdioma, $pesoPerfil, $pesoTecno); echo $afi . "
"; if ($afi > 0) { $consulta = "INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, fecha) VALUES('$idUsuario', '$id', '$afi', '110', curdate())"; $bd = new BD(); $bd->execQuery($consulta); } } catch (Exception $e) { // Nunca debería entrar aquí. } } } } function actualizarHistorial($mensaje) { $oid = $this->getValor("oid"); $usuario = $this->usuario->getValor("nombre"); $consulta = "INSERT INTO historial_pedido (oid_h, fecha_h, persona_h, texto_h) VALUES('$oid', now(), '$usuario', '$mensaje')"; $bd = new BD(); return $bd->execQuery($consulta); } function getHistorial() { $historial = ""; $oid = $this->getValor("oid"); $consulta = "SELECT * FROM historial_pedido WHERE oid_h='$oid' ORDER BY id 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 getSiguientes() { $estado = $this->getValor("estado"); $idioma = $this->usuario->getValor("idioma"); $rol = $this->usuario->getValor("rol"); $a = new Automata("pedidos", $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("pedidos", $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("Pedido", $funcion), $argumentos); return $res; } /** * Sin calificar -> En configuración */ private function ejecutar110130() { return true; } /** * En configuración ->Sin calificar */ private function ejecutar130110() { // De *En configuración* a *Sin calificar* $id = $this->getValor("oid"); $bd = new BD(); // Borro la tabla de ofertas de este pedido $consulta = "DELETE FROM candidato_pedido WHERE pedido='$id'"; $bd->execQuery($consulta); return true; } /** * Añade un comentario por parte de un gerente hacia un candidato * * @param idCandidato $ : oid del candidato * @param observacion $ : observacion a proponer */ function addComentarioPropuesta($idCandidato, $observacion) { // Sólo lo puede hacer los gerentes if (!$this->usuario->tieneRol("3")) { $error = "No tiene permisos para editar la candidatura"; throw new Exception($error); return false; exit; } $consulta = "UPDATE candidato_pedido SET obsGerente='" . $observacion . "' WHERE pedido='" . $this->getValor("oid") . "' AND candidato='" . $idCandidato . "'"; $bd = new BD(); if ($bd->execQuery($consulta)) { // Nos actualizamos $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosPropuestos()); if ($candidato == null) { $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosPropuestosRRHH()); } if ($candidato == null) { $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosRechazados()); } if ($candidato == null) { $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosAceptados()); } $candidato->modObsGerente($observacion); } else { $error = "No se ha podido actualiar la observación"; throw new Exception($error); return false; exit; } } /** * Añade un comentario por parte de un RRHH hacia un candidato * * @param idCandidato $ : oid del candidato * @param observacion $ : observacion a proponer */ function addComentarioPropuestaRRHH($idCandidato, $observacion) { // Sólo lo puede hacer los RRHH if (!$this->usuario->tieneRol("4")) { $error = "No tiene permisos para editar la candidatura"; throw new Exception($error); return false; exit; } $consulta = "UPDATE candidato_pedido SET obsRRHH='" . $observacion . "' WHERE pedido='" . $this->getValor("oid") . "' AND candidato='" . $idCandidato . "'"; $bd = new BD(); if ($bd->execQuery($consulta)) { // Nos actualizamos $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosPropuestos()); if ($candidato == null) { $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosPropuestosRRHH()); } if ($candidato == null) { $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosRechazados()); } if ($candidato == null) { $candidato = $this->buscarCandidatoLista($idCandidato, $this->getCandidatosAceptados()); } $candidato->modObsRRHH($observacion); } else { $error = "No se ha podido actualiar la observación"; throw new Exception($error); return false; exit; } } function setOfertaElaborada() { $resultado = false; $estado = $this->getValor("estado"); switch ($estado) { case 120; case 140; case 150: $resultado=true; break; case 110; case 130: $consulta = "UPDATE pedidos SET estado=140 where oid='".$this->getValor("oid")."'"; $bd = new BD(); return $bd->execQuery($consulta); break; default: $resultado=false; break; } return $resultado; } } ?>