From fa8b5a87144ceb9d81944769a1895e629b58500f Mon Sep 17 00:00:00 2001 From: david Date: Thu, 19 May 2011 08:46:58 +0000 Subject: [PATCH] =?UTF-8?q?Tarea=20#647=20->=20Nueva=20entrada=20de=20men?= =?UTF-8?q?=C3=BA=20para=20ver=20la=20lista=20de=20ofertas=20Tarea=20#646?= =?UTF-8?q?=20->=20Crear=20la=20acci=C3=B3n=20"Creaci=C3=B3n=20de=20oferta?= =?UTF-8?q?"=20que=20cree=20una=20oferta=20relacionada=20con=20la=20solici?= =?UTF-8?q?tud=20de=20oferta=20que=20se=20est=C3=A1=20mostrando.=20Tarea?= =?UTF-8?q?=20#607=20->=20Nueva=20entidad=20'Oferta'=20con=20estados=20nue?= =?UTF-8?q?vos=20Tarea=20#606=20->=20Nuevos=20estados=20y=20transiciones?= =?UTF-8?q?=20para=20una=20solicitud=20de=20oferta=20Tarea=20#601=20->=20N?= =?UTF-8?q?uevos=20estados=20y=20transiciones=20para=20un=20candidato=20Ta?= =?UTF-8?q?rea=20#599=20->=20Repasar=20los=20registros=20que=20se=20meten?= =?UTF-8?q?=20en=20el=20historial=20de=20cambios=20Tarea=20#586=20->=20Cua?= =?UTF-8?q?ndo=20una=20solicitud=20tiene=20varios=20perfiles,=20hay=20que?= =?UTF-8?q?=20visualizarlos=20ocupando=20las=20menos=20filas=20posibles=20?= =?UTF-8?q?Tarea=20#585=20->=20Cuando=20un=20candidato=20tiene=20varios=20?= =?UTF-8?q?perfiles,=20hay=20que=20visualizarlos=20ocupando=20las=20menos?= =?UTF-8?q?=20filas=20posibles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk@65 e2b1556b-49f8-d141-9351-52d6861a72d9 --- src/Objects/Automata.php | 2 +- src/Objects/BD.php | 12 +- src/Objects/Candidato.php | 659 ++++----- src/Objects/HTML.php | 33 +- src/Objects/ListaCandidatos.php | 134 +- src/Objects/ListaOfertas.php | 150 ++ src/Objects/ListaPedido.php | 5 +- src/Objects/ListaPersonas.php | 2 +- src/Objects/Oferta.php | 298 ++++ src/Objects/Pedido.php | 2410 ++++++++++++++----------------- src/addOferta.php | 133 ++ src/addPedido.php | 7 +- src/candidaturas.php | 2 +- src/control.php | 2 +- src/database/selfor.sql | 54 +- src/functions_get.php | 157 +- src/functions_rrhh.php | 4 +- src/functions_sistema.php | 41 +- src/functions_util.php | 1033 ++++++------- src/idiomas/sp/lenguaje.php | 12 +- src/js/comunes.js | 9 + src/lista_ofertas.php | 41 + src/lista_pedidos.php | 2 +- src/oferta.php | 15 + src/pedido.php | 6 +- src/seguridad.php | 1 - src/ver_lista_ofertas.php | 155 ++ src/ver_lista_pedidos.php | 24 +- src/ver_oferta.php | 271 ++++ src/ver_pedido.php | 1044 +++++-------- 30 files changed, 3693 insertions(+), 3025 deletions(-) create mode 100644 src/Objects/ListaOfertas.php create mode 100644 src/Objects/Oferta.php create mode 100644 src/addOferta.php create mode 100644 src/lista_ofertas.php create mode 100644 src/oferta.php create mode 100644 src/ver_lista_ofertas.php create mode 100644 src/ver_oferta.php diff --git a/src/Objects/Automata.php b/src/Objects/Automata.php index b05061a..72fdf61 100644 --- a/src/Objects/Automata.php +++ b/src/Objects/Automata.php @@ -29,7 +29,7 @@ function getSiguientes($estado){ $consulta = "SELECT final, nombre, rol FROM ".$this->objeto."_transiciones, ".$this->objeto."_estados WHERE inicial='$estado' AND idioma='$this->idioma'" . " AND ".$this->objeto."_transiciones.final = ".$this->objeto."_estados.cod AND ".$this->objeto."_transiciones.rol <> ''"; - $bd = new BD(); + $bd = new BD(); $resultado = $bd->execQuery($consulta); diff --git a/src/Objects/BD.php b/src/Objects/BD.php index 3f3091c..ec2ed90 100644 --- a/src/Objects/BD.php +++ b/src/Objects/BD.php @@ -15,12 +15,14 @@ include_once("Conexion.php"); $this->conexion = new Conexion(); } - function execQuery($query){ + function execQuery($query){ $res = mysql_query($query); - //$mensaje = $query." - ".$res."\r\n"; - //$fichero = fopen("querys.log","a"); - //fputs($fichero,$mensaje); - //fclose($fichero); + + /*$mensaje = $query." - ".$res."\r\n"; + $fichero = fopen("querys.log","a"); + fputs($fichero,$mensaje); + fclose($fichero);*/ + return $res; } diff --git a/src/Objects/Candidato.php b/src/Objects/Candidato.php index f62fd9d..d36c732 100644 --- a/src/Objects/Candidato.php +++ b/src/Objects/Candidato.php @@ -1,4 +1,5 @@ numFilas($consulta); - if($num > 0){ - parent::Persona($oid); - $this->usuario = $usuario; - }else{ - $error = "Candidato no encontrado."; - throw new Exception($error); - } - } + private $usuario; - 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 Candidato($usuario, $oid) { + $consulta = "SELECT oid FROM usuarios WHERE oid = '" . $oid . "' AND tipo='candidato'"; + $bd = new BD(); + $num = $bd->numFilas($consulta); + if ($num > 0) { + parent::Persona($oid); + $this->usuario = $usuario; + } else { + $error = "Candidato no encontrado."; + throw new Exception($error); + } + } - 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 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 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); - } - } + 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; + } + } - /*SQL que da los pedidos en el que está un candidato dependiendo del estado + 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); + } + } - 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 + /* 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"); - } + $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 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 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 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); + function transita($destino, $argumentos) { + $origen = $this->getValor("estado"); + $idioma = $this->usuario->getValor("idioma"); + $rol = $this->usuario->getValor("rol"); + $a = new Automata("candidatos", $idioma, $rol); - 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; - } - } + $transita = $a->getTransicion($origen, $destino); - 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); + 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; + } + } - 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); - /** - * Disponible a no disponible - * Entrevistado a no disponible (entrevistado). - * Admin, RRHH - SE LLEGA DESDE: - - Editar el estado del candidato desde la vista. + return $res; + } - PRECONDICIONES: - - Mensaje con texto. + /** + * Disponible a no disponible + * Entrevistado a no disponible (entrevistado). + * Admin, RRHH + SE LLEGA DESDE: + - Editar el estado del candidato desde la vista. - 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){ + PRECONDICIONES: + - Mensaje con texto. - if($mensaje == ""){ - echo ''; - return false; - } + return false; + } - return true; - } + 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. + /** + * 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. + 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)); - } + 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; - } + 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. + /** + * 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. + 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')"; + 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, ""); - } - } + //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; - } + return true; + } - /** - * No disponible a Disponible - * Admin, RRHH - SE LLEGA DESDE: - - Editar el estado del candidato desde la vista. + /** + * 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; - } + 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". + /** + * 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. + 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; - } + */ + 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. + /** + * 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")); + 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; - } + return true; + } - /** - * Entrevistado a Incorporado - * En proceso (entrevistado) a Incorporado * - * Admin, RRHH - SE LLEGA DESDE: - - Editar el estado del candidato desde la vista. + /** + * Entrevistado a Incorporado + * En proceso (entrevistado) a Incorporado * + * Admin, RRHH + SE LLEGA DESDE: + - Editar el estado del candidato desde la vista. - PRECONDICIONES: - - Ninguna. + 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);*/ + 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. + return false; + } - EFECTOS: - - Se cambia el estado del candidato de en proceso(entrevistado) - */ + /** + * Entrevistado a En proceso(entrevistado). + * Admin, RRHH + SE LLEGA DESDE: + - Al aceptar a un candidato disponible en un proceso de selección. - private function ejecutar5070(){ - $this->setCampos(array("estado" => "70")); - $this->campos["estado_usuario"]="70"; - return true; - } + 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; + } + +} - } ?> diff --git a/src/Objects/HTML.php b/src/Objects/HTML.php index 1900564..f9df8cb 100644 --- a/src/Objects/HTML.php +++ b/src/Objects/HTML.php @@ -81,8 +81,34 @@ echo ''.$this->locale['1077'].''; } } + if(in_array("nueva_oferta",$opcionesThis)){ + echo ''.'Nueva oferta'.''; + } } + + function menuOfertas($usuario, $opciones){ + if(!is_array($opciones)){ + $opcionesThis = array(); + } else { + $opcionesThis = $opciones; + } + echo ''.$this->locale['5100'].''; + if($usuario->tieneRol("3") ||$usuario->tieneRol("1")){ + echo ''.$this->locale['5101'].''; + } + /*echo ''.$this->locale['5102'].'';*/ + + if(!in_array("gestionar", $opcionesThis)){ + if(substr_count($_SERVER['REQUEST_URI'],"/oferta.php?idOferta")==1){ + echo ''.$this->locale['284'].''; + } + if(substr_count($_SERVER['REQUEST_URI'],"/gestion_oferta.php?idOferta")==1){ + echo ''.$this->locale['5103'].''; + } + } + } + function menuCandidatos(){ // Lista de candidatos echo ''.$this->locale['801'].''; @@ -211,10 +237,15 @@ if (!strcmp($opcion, "Gestión de candidatos")) { echo '
  • '.$opcion.'
  • '; } elseif (!strcmp($opcion, "Mis datos")) { - $PonerAlFinal = '
  • '.$opcion.'
  • '; + $PonerAlFinal .= '
  • '.$opcion.'
  • '; + } elseif (!strcmp($opcion, "Mantenimiento del sistema")) { + $PonerAlFinal .= '
  • '.$opcion.'
  • '; } elseif (!strcmp($opcion, "Solicitudes de oferta")) { // Ticket 640 -> Entrada automatica a la lista de solicitudes de oferta. echo '
  • '.$opcion.'
  • '; + } elseif (!strcmp($opcion, "Ofertas")) { + // Ticket 647 -> Nueva entrada de menú para ver la lista de ofertas + echo '
  • '.$opcion.'
  • '; } else { echo '
  • '.$opcion.'
  • '; } diff --git a/src/Objects/ListaCandidatos.php b/src/Objects/ListaCandidatos.php index f24d647..dc9b9ec 100644 --- a/src/Objects/ListaCandidatos.php +++ b/src/Objects/ListaCandidatos.php @@ -1,4 +1,5 @@ tipo = "candidato"; + $this->estado = $estado; + } - //Constructor: + /** + * Devuelve la query de la consulta usada en la búsqueda para crear la lista. + * @return una cadena de texto con la query. + */ + function getSQL() { + return $this->sql; + } - //Funciones: + /** + * Devuelve una lista de los posibles estados en los que se puede encontrar un candidato + * como Key => value, donde key es el cod del estado y value es el nombre del estado. + */ + function getEstados() { + $consulta = "SELECT cod, nombre FROM candidatos_estados WHERE tipo='candidato'"; + $bd = new BD(); + return $bd->keyValueQuery($consulta, "cod", "nombre"); + } - /** - * Crea una lista de candidatos. - * @param usuario - dueño de la sesión. - * @param orden - parámetros por los que ordenar la lista. - * @param sql - consulta de búsqueda. - */ - function ListaCandidatos($usuario,$orden,$sql,$estado){ - parent::ListaPersonas($usuario, $orden, $sql); - $this->tipo = "candidato"; - $this->estado=$estado; - } + /** + * Inserta un nuevo candidato en la lista de candidatos. + * @param campos - datos del candidato. + */ + function addCandidato($campos) { + $campos["estado"] = 510; + $id = parent::addPersona($campos); + $candidato = new Candidato($this->usuario, $id); + $mensaje = "Nuevo candidato"; + $candidato->actualizarHistorial($mensaje); + return $id; + } - /** - * Devuelve la query de la consulta usada en la búsqueda para crear la lista. - * @return una cadena de texto con la query. - */ - function getSQL(){ - return $this->sql; - } + /** + * Devuelve los candidatos + */ + function getCandidatos() { + $candidatos = array(); - /** - * Devuelve una lista de los posibles estados en los que se puede encontrar un candidato - * como Key => value, donde key es el cod del estado y value es el nombre del estado. - */ - function getEstados(){ - $consulta = "SELECT cod, nombre FROM candidatos_estados WHERE tipo='candidato'"; - $bd = new BD(); - return $bd->keyValueQuery($consulta, "cod", "nombre"); - } + if ($this->sql != "") { + // metemos el estado si es > 0 + if ($this->estado > 0) { + if (stripos($this->sql, "WHERE") > 0) { + $sqlAntesWhere = substr($this->sql, 0, stripos($this->sql, "WHERE")); + $sqlDespuesWhere = substr($this->sql, stripos($this->sql, "WHERE") + 5, strlen($this->sql)); + $sqlConEstado = "WHERE usuarios.estado='" . $this->estado . "' and "; + $sqlNueva = $sqlAntesWhere . $sqlConEstado . $sqlDespuesWhere; + } else { + $sqlConEstado = "WHERE usuarios.estado='" . $this->estado . "' "; + $sqlNueva = $this->sql . $sqlConEstado; + } + } else { + $sqlNueva = $this->sql; + } + $consulta = $sqlNueva . " " . $this->order_by; + } else { + if ($this->estado > 0) { + $consulta = "SELECT oid from usuarios WHERE tipo='" . $this->tipo . "' and estado='" . $this->estado . "'" . $this->orden; + } else { + $consulta = "SELECT oid from usuarios WHERE tipo='" . $this->tipo . "'" . $this->orden . ""; + } + } + + + $bd = new BD(); + $resultado = $bd->execQuery($consulta); + + //Procesamos los candidatos. + if (mysql_num_rows($resultado) != 0) { + while ($rows = mysql_fetch_array($resultado)) { + $p = new Candidato($this->usuario, $rows["oid"]); + $candidatos[] = $p; + } + } + return $candidatos; + } + +} - /** - * Inserta un nuevo candidato en la lista de candidatos. - * @param campos - datos del candidato. - */ - function addCandidato($campos){ - $campos["estado"] = 510; - $id = parent::addPersona($campos); - $candidato = new Candidato($this->usuario, $id); - $mensaje = "Nuevo candidato"; - $candidato->actualizarHistorial($mensaje); - return $id; - } - } ?> diff --git a/src/Objects/ListaOfertas.php b/src/Objects/ListaOfertas.php new file mode 100644 index 0000000..86d7cbd --- /dev/null +++ b/src/Objects/ListaOfertas.php @@ -0,0 +1,150 @@ +gestor = $usuario; + $this->orden = $orden; + $this->condiciones = $condiciones; + } + + /** + * Busca y devuelve todos los pedidos del usuario. + */ + function getOfertas() { + // sacado de http://patrickallaert.blogspot.com/2007/09/building-dynamic-sql-queries-elegant.html + + $consulta = "SELECT * FROM candidato_pedido"; + + if (count($this->condiciones)) { + $consulta .= ' WHERE ' . implode(' AND ', $this->condiciones); + } + + if (count($this->orden)) { + $consulta .= ' ORDER BY ' . implode(' , ', $this->orden); + } + + $bd = new BD(); + $resultado = $bd->execQuery($consulta); + // Procesamos las ofertas. + if (mysql_num_rows($resultado) == 0) { + $this->ofertas = array(); + } else { + while ($rows = mysql_fetch_array($resultado)) { + $p = new Oferta($rows["oid"], $this->gestor); + $this->ofertas[] = $p; + } + } + + return $this->ofertas; + } + + /** + * Devuelve una lista de los posibles estados en los que se puede encontrar un pedido + * como Key => value, donde key es el cod del estado y value es el nombre del estado. + */ + function getEstadosOfertas() { + $consulta = "SELECT cod, nombre FROM candidaturas_estados"; + $bd = new BD(); + return $bd->keyValueQuery($consulta, "cod", "nombre"); + } + + /** + * Busca una oferta en función de su identificador. + * + * @return el pedido, en caso de encontrarlo y null en + * caso contrario. + */ + function buscarOferta($id) { + $lista = $this->getOfertas(); + if ($lista) { + foreach ($lista as $elem) { + if ($elem->getValor("oid") == $id) { + return $elem; + } + } + } + return null; + } + + function addOferta($campos) { + if (!$this->gestor->tieneRol(1) && !$this->gestor->tieneRol(3)) { + $error = "El usuario no tiene permisos para crear ofertas."; + throw new Exception($error); + } + // Calculamos el id + $referencia = $this->calculaReferencia($campos["pedido"]); + $inserto = "fecha, referencia"; + $fecha = "'" . date("Y-m-d") . "'"; + $valores = "$fecha, $referencia"; + // Procesamos los datos + foreach ($campos as $key => $value) { + $inserto .= ", $key"; + $valores .= ", '$value'"; + } + // Insertamos en la BD + $consulta = "INSERT INTO candidato_pedido ($inserto) VALUES ($valores)"; + + $bd = new BD(); + if (!$bd->execQuery($consulta)) { + return "-1"; + } else { + $id = mysql_insert_id(); + $p = new Oferta($id, $this->gestor); + $mensaje = "Nueva oferta"; + $p->actualizarHistorial($mensaje); + } + return $id; + } + + function calculaReferencia($solicitud) { + $bd = new BD(); + $consulta = "select referencia from candidato_pedido where pedido = '$solicitud' order by oid desc limit 1"; + + if ($resultado = $bd->execQuery($consulta)) { + $rows = mysql_fetch_array($resultado); + echo "########################
    "; + print_r($rows); + echo "########################
    "; + + $num = 1; + if (!empty($rows[0])) { + $num = substr($rows[0], strpos($rows[0], '/') + 1, strlen($rows[0])); + $num += 1; + } + return sprintf('\'%s/%s\'', $solicitud, $num); + } else { + return sprintf('\'%s/%s\'', $solicitud, 1); + } + } + +} + +?> diff --git a/src/Objects/ListaPedido.php b/src/Objects/ListaPedido.php index a32b917..d8d8bbb 100644 --- a/src/Objects/ListaPedido.php +++ b/src/Objects/ListaPedido.php @@ -96,7 +96,7 @@ include_once("Objects/Pedido.php"); if($estado > 0){ $consulta = "SELECT * from pedidos WHERE estado='".$estado."'".$this->orden ; }else{ - $consulta = "SELECT * from pedidos WHERE estado IN (10, 20, 30) ".$this->orden.""; + $consulta = "SELECT * from pedidos ".$this->orden.""; } } }else if($this->gestor->tieneRol(3)){ @@ -123,7 +123,7 @@ include_once("Objects/Pedido.php"); if($estado > 0){ $consulta = "SELECT * FROM pedidos WHERE gerente = '$id' AND estado='$estado'".$this->orden; }else{ - $consulta = "SELECT * FROM pedidos WHERE estado IN (10, 20, 30) AND gerente = '$id'".$this->orden; + $consulta = "SELECT * FROM pedidos WHERE gerente = '$id'".$this->orden; } } }else{ @@ -188,6 +188,7 @@ include_once("Objects/Pedido.php"); //Insertamos en la BD $consulta = "INSERT INTO pedidos ($inserto) VALUES ($valores)"; + $bd = new BD(); if(!$bd->execQuery($consulta)){ return -1; diff --git a/src/Objects/ListaPersonas.php b/src/Objects/ListaPersonas.php index 67eb137..3397911 100644 --- a/src/Objects/ListaPersonas.php +++ b/src/Objects/ListaPersonas.php @@ -154,7 +154,7 @@ include_once("Empleado.php"); //Insertamos en la BD $consulta = "INSERT INTO usuarios ($inserto) VALUES ($valores)"; - echo $consulta; + $bd = new BD(); if(!$bd->execQuery($consulta)){ $error = "Campos del candidato incorrectos. Por favor, avise al webmaster de este error."; diff --git a/src/Objects/Oferta.php b/src/Objects/Oferta.php new file mode 100644 index 0000000..0116f60 --- /dev/null +++ b/src/Objects/Oferta.php @@ -0,0 +1,298 @@ +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"); + if (!empty($idCand)) { + if (!$this->quitarCandidato()) { + return false; + } + } + + $candidato = new Candidato($this->usuario, $idCandidato); + $estadoCand = $candidato->getValor("estado"); + + 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; + } + else { + dbug("error"); + } + break; + + default: + $error = "El candidato tiene un estado no permitido ('" . $candidato->getValor("estado") . "')"; + throw new Exception($error); + } + echo dbug('print'); + } + +} + +?> diff --git a/src/Objects/Pedido.php b/src/Objects/Pedido.php index 01fe98e..fc55cce 100644 --- a/src/Objects/Pedido.php +++ b/src/Objects/Pedido.php @@ -1,1375 +1,1093 @@ 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
    "; - } - } - - /** - * 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; - } - - /** - * 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); - if($viejo == "" && $valor != ""){ - $historial = "$nombre (de - a $valor)"; - }else{ - $historial = "$nombre (de $viejo a $valor)"; - } - //$this->actualizarHistorial($historial); - //Si hago un update del perfil tengo que actualizar la afinidad: - if(in_array($nombre, $this->listaAfinidad)){ - $this->calculaAfinidad(); - //En este caso tengo que comprobar si cambio de estado - }else if($nombre == "empleados"){ - $necesarios = $valor; - - $actuales = count($this->getCandidatosAceptados()); - $estado = $this->getValor("estado"); - //Actualizo automáticamente el estado del pedido - switch($estado){ - case 10: - if($actuales >= $necesarios){ - $this->transita("20", ""); - } - break; - case 20: - if($actuales < $necesarios){ - $this->transita("10", ""); - } - break; - case 30: - if($actuales < $necesarios){ - $this->transita("10", ""); - } - break; - default: - } - } - } - } - }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; - } - - - /** - * Devuelve una lista de candidatos propuestos para el pedido. - */ - function getCandidatosPropuestos(){ - if($this->listaPropuestos == null){ - $this->listaPropuestos = $this->getCandidatos("30"); - } - return $this->listaPropuestos; - } - - /** - * Devuelve una lista de candidatos aceptados para el pedido. - */ - function getCandidatosAceptados(){ - if($this->listaAceptados == null){ - $this->listaAceptados = $this->getCandidatos("20"); - } - return $this->listaAceptados; - } - - /** - * Devuelve una lista de candidatos rechazados para el pedido. - */ - function getCandidatosRechazados(){ - if($this->listaRechazados == null){ - $this->listaRechazados = $this->getCandidatos("10"); - } - return $this->listaRechazados; - } - - /** - * Devuelve una lista de candidatos propuestos por RRHH. - */ - function getCandidatosPropuestosRRHH(){ - if($this->listaPropuestosRRHH == null){ - $this->listaPropuestosRRHH = $this->getCandidatos("40"); - } - return $this->listaPropuestosRRHH; - } - - 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 el pedido $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 == 40 || $estadoP == 50){ - 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 = '20', 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 10: - $usuario->transita(30, ""); - break; - case 50: - $usuario->transita(70, ""); - break; - default: - break; - } - - return true; - } - return false; - } - - /** - * Rechaza un candidato para el pedido. - */ - function rechazarCandidato($id){ - $estadoP = $this->getValor("estado"); - if($estadoP == 40 || $estadoP == 50){ - 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); - } - $this->calculaAfinidad(); - } - - function addIdiomas($array){ - - foreach($array as $elem){ - $this->addIdioma($elem); - } - $this->calculaAfinidad(); - } - - function addProvincias($array){ - foreach($array as $elem){ - $this->addProvincia($elem); - } - $this->calculaAfinidad(); - } - - function addPerfiles($array){ - if(gettype($array) == "array"){ - foreach($array as $elem){ - $this->addPerfil($elem); - } - $this->calculaAfinidad(); - } - } - - /** - * 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->listasProvincias)){ - $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->listasProvincias[$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; - } - - $this->calculaAfinidad(); - 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; - } - - $this->calculaAfinidad(); - 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->listasProvincias)){ - $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->listasProvincias; - $this->listasProvincias = null; - foreach($lista as $key => $value){ - if($value != $id){ - $this->listasProvincias[$key] = $value; - } - } - }else{ - return false; - } - }else{ - return false; - } - - $this->calculaAfinidad(); - 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; - } - - $this->calculaAfinidad(); - 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='30'"; - $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: Todos menos cerrado (Pendiente). - if($estado == 10){ - $consulta = "SELECT email FROM usuarios WHERE tipo='candidato' AND estado IN ('10', '30', '50', '70')"; - $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(); - $afinidad = new Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido, - $tecnologiasUsuario, $perfilesPedido, $perfilesUsuario, $provinciasPedido, $provinciasDeseadas); - $afi = $afinidad->calculaAfinidad($pesoIdioma, $pesoPerfil, $pesoTecno); - if($afi > 0){ - $consulta = "INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, fecha) VALUES('$idUsuario', '$id', '$afi', '30', 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(){ +include_once("Objects/BD.php"); +include_once("Objects/CandidatoPedido.php"); +include_once("Objects/Candidato.php"); +include_once("Objects/Empleado.php"); +include_once("Objects/Afinidad.php"); +include_once("Objects/Automata.php"); +include_once("Objects/Oferta.php"); + +class Pedido { + + // Atributos: + /* Usuario que tiene activa la sesión. */ + private $usuario; + + /* Contiene una lista con todos los atributos y su valor */ + private $campos = array(); + private $listaOfertas = null; + + + /* Lista de perfiles */ + private $listaPerfiles = null; + + /* Lista de tecnologías */ + private $listaTecnologias = null; + + /* Lista de idiomas */ + private $listaIdiomas = null; + + /* Lista de provincias */ + private $listaProvincias = null; + + /* Parámetros que si se cambian recalculan la afinidad */ + private $listaAfinidad = array("nombre", "perfil", "pesoTecno", "pesoIdioma", "pesoPerfil", "estado"); + + /* Booleano que indica si el cambio de un campo lo hace por razones automáticas y dejar realizar + * el cambio */ + private $setAutomatico = false; + + // Constructor: + /** + * Recupera un pedido a partir de su identificador. + * + * @param id $ - datos necesarios para crear un pedido. + */ + function Pedido($id, $usuario) { + $this->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
    "; + } + } + + /** + * 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; + } + + /** + * 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); + if ($viejo == "" && $valor != "") { + $historial = "$nombre (de - a $valor)"; + } else { + $historial = "$nombre (de $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"); + $oid = $this->getValor("oid"); $consulta = "SELECT * FROM historial_pedido 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"; + 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 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); + 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; - } - } + 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); + 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; - } + return $res; + } - /** - * Pendiente a asignado - * Admin, Gestor - SE LLEGA DESDE: - - Al aceptar al candidato (pedido.aceptar). - - Editar el número de empleados del pedido. + /** + * Sin calificar -> En configuración + */ + private function ejecutar110130() { + return true; + } - PRECONDICIONES: - - Comprobar que el número de candidatos aceptados es mayor o igual que el de candidatos necesarios. + /** + * En configuración ->Sin calificar + */ + private function ejecutar130110() { // De *En configuración* a *Sin calificar* + $id = $this->getValor("oid"); - POSTCONDICIONES: - - Ninguna. - */ - private function ejecutar1020(){ - $necesarios = $this->getValor("empleados"); - $actuales = count($this->listaAceptados); + $bd = new BD(); - //PRECONDICIONES: - //- Comprobar que el número de candidatos aceptados es mayor o igual que el de candidatos necesarios. - if($actuales >= $necesarios){ - return true; - }else{ - return false; - } - } + // Borro la tabla de ofertas de este pedido + $consulta = "DELETE FROM candidato_pedido WHERE pedido='$id'"; + $bd->execQuery($consulta); - /** - * Asignado a Pendiente - * Admin, Gestor - SE LLEGA DESDE: - - Al rechazar al candidato (pedido.rechazar). - - Editar el número de empleados del pedido. + return true; + } - PRECONDICIONES: - - Comprobar que el número de candidatos aceptados es menor que el de candidatos necesarios. + /** + * 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; + } + } - POSTCONDICIONES: - - Ninguna. - */ - private function ejecutar2010(){ - $necesarios = $this->getValor("empleados"); - $actuales = count($this->listaAceptados); + /** + * 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; + } + } - //Comprobamos que se dan las condiciones para transitar. - if($actuales < $necesarios){ - return true; - }else{ - return false; - } - } - - /** - * Asignado a No contratado - * Pendiente a No contratado - * Tramitando contratación a No contratado - * Admin, Gestor - SE LLEGA DESDE: - - La vista del pedido al pulsar el botón de “Cambiar a No contratado”. - - PRECONDICIONES: - - Mensaje indicando el motivo del cambio a No contratado. - - POSTCONDICIONES: - - Se borra la lista de usuarios aceptados, rechazados y en proceso para este pedido y - para cada candidato cambia a su estado previo de disponible o entrevistado. - */ - private function ejecutar2050($mensaje){ - if($mensaje == ""){ - $error = "Debe introducir un motivo para pasar el pedido a Desactivado"; - throw new Exception($error); - return false; - exit; - } - $id = $this->getValor("oid"); - - $bd = new BD(); - //Borro la tabla de candidaturas para este pedido. - $consulta = "DELETE FROM candidato_pedido WHERE pedido='$id'"; - $bd->execQuery($consulta); - - //Cojo los candidatos y limpio las listas del pedido. - $candidatos = $this->getCandidatosAceptados(); - - if(count($candidatos) > 0){ - //Voy empleado por empleado comprobando su estado y transitando. - foreach($candidatos as $c){ - $candidato = new Candidato($this->usuario, $c->getValor("oid")); - $estado = $candidato->getValor("estado"); - switch ($estado) { - case 30: - $candidato->transita(10, ""); - break; - case 70: - $candidato->transita(50, ""); - break; - default: - break; - } - } - } - - $this->listaPropuestos = null; - $this->listaPropuestosRRHH = null; - $this->listaAceptados = null; - $this->listaRechazados = null; - - return true; - } - - /** - * Tramitando contratación a Contratado. - * Admin, Gestor - SE LLEGA DESDE: - - La vista del pedido, al pulsar el botón de “Cambiar a cerrado”. - - PRECONDICIONES: - - - Todos los candidatos aceptados están incorporados a la empresa. - - POSTCONDICIONES: - - - Se eliminan todos los candidatos propuestos por el sistema y por RRHH y rechazados - - ESCENARIO ALTERNATIVO: - - - Por cada candidato aceptado no incorporado a la empresa se generará - una alarma en forma de correo electrónico al personal de recursos humanos para que le incorpore. - - */ - private function ejecutar3040(){ - $lista = $this->getCandidatosAceptados(); - $ok = true; - - //Si encontramos algún aceptado que sea candidato tenemos error. - if(count($lista) <= 0){ - $error = "No hay candidados aceptados para esta solicitud de oferta"; - throw new Exception($error); - return false; - exit; - } - - foreach($lista as $candidato){ - $tipo = $candidato->getValor("tipo"); - //Escenario alternativo - if($tipo != "usuario"){ - $nombre = $candidato->getValor("nombre"); - $oid = $candidato->getValor("oid"); - //Enviar un mail a RRHH con los datos pidiendo incorporación. - $asunto = "Solicitud de contratación"; - $direccion = constante("email"); - $path = "http://portal.selforsistemas.net"; - $link = "".$nombre.""; - $email = "Se solicita la contratación para el candidato ".$link; - envia_correo($direccion, $asunto, $email); - $ok = false; - } - } - - if($ok){ - $bd = new BD(); - //Borro la tabla de candidaturas para este pedido. - $consulta = "DELETE FROM candidato_pedido WHERE pedido='$id' AND estado IN ('10', '30', '40')"; - $bd->execQuery($consulta); - $this->listaPropuestos = null; - $this->listaPropuestosRRHH = null; - }else{ - $error = "No se puede contratar aprobar la oferta hasta que todos los candidatos hayan sido contratados."; - throw new Exception($error); - return false; - exit; - } - - return $ok; - } - - /** - * No contratado a Pendiente - * Admin, Gestor - SE LLEGA DESDE: - - La vista del pedido, al pulsar el botón de “Cambiar a pendiente”. - - POSTCONDICIONES: - - Crea un nuevo pedido con los mismos datos cambiando el código y lo pone en “Pendiente”. - - Calcula las afinidades para ese nuevo pedido que está en "Pendiente". - */ - private function ejecutar5010(){ - $l = new ListaPedido($this->usuario, "", "", ""); - $this->getValor("procedencia"); - $this->getValor("cliente"); - $bd = new BD(); - $miId = $this->getValor("oid"); - $consulta = "SELECT * FROM pedidos WHERE oid='$miId'"; - $res = $bd->execQuery($consulta); - $this->parseaResource($res); - $campos = array(); - foreach($this->campos as $campo => $valor){ - if($campo != "oid" && $campo != "fecha") - $campos[$campo] = $valor; - } - $campos["estado"] = 10; - $campos["msgEstado"] = ""; - $id = $l->addPedido($campos); - $p = new Pedido($id, $this->usuario); - $p->addTecnologias($this->getTecnologias()); - $p->addIdiomas($this->getIdiomas()); - $p->addProvincias($this->getProvincias()); - - -// echo ''; - $this->calculaAfinidad(); - return false; - } - - /** - * 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; - } - } - - } +} ?> diff --git a/src/addOferta.php b/src/addOferta.php new file mode 100644 index 0000000..da7200d --- /dev/null +++ b/src/addOferta.php @@ -0,0 +1,133 @@ +tieneRol("1")){ + $gerente=$_POST['gerente']; + } else { + $gerente=$usuario->getValor("oid"); + } + */ + if ($_POST['action'] == "add") { + // Comprobamos campos obligatorios + if (empty($solicitud)) { + $errores[] = "1"; + } + + // Si no hay errores insertamos el pedido + if (count($errores) == 0) { + $listaOfertas = new ListaOfertas($usuario, "", "", "0"); + $arrayInsert = array(); + $arrayInsert["pedido"] = $solicitud; + $arrayInsert["obsGerente"] = $observaciones; + $arrayInsert["estado"] = "110"; + + /* $arrayInsert["prioridad"]= $prioridad; + $arrayInsert["empleados"]=$empleados; + $arrayInsert["duracion"]=$duracion; + $arrayInsert["gerente"]=$gerente; + $arrayInsert["cliente"]=$clientes; + $arrayInsert["salario_min"]=$salario_min; + $arrayInsert["salario_max"]=$salario_max; + $arrayInsert["procedencia"]=$procedencia; + + $arrayInsert["estado"]="110"; + $arrayInsert["pesoIdioma"]=$pesoIdi; + $arrayInsert["pesoPerfil"]=$pesoPer; + $arrayInsert["pesoTecno"]=$pesoTec; */ + + $idOferta = $listaOfertas->addOferta($arrayInsert); + + if ($idOferta == "-1") { + // Se he producido un fallo al insertar + $errores[] = "0"; + $msg = "No se ha podido agregar la oferta"; + $tipo = "error"; + } else { + $oferta = $listaOfertas->buscarOferta($idOferta); + header("Location: oferta.php?idOferta=" . $idOferta . "&msg=1"); + } + } + } +} else { + $referencia = ""; + $solicitud = ""; + $observaciones = ""; +} + +include("html/cabecera.php"); + +echo $html->menuOfertas($usuario, ""); + +echo "

    " . $locale['5105'] . "

    "; + +if (isset($msg) && ($msg != "")) { + echo "
    " . $msg . "
    "; +} + +echo '
    '; +echo ""; +echo "" . + "" . + " " . $locale['1025'] . ":
    "; + +rellena_desplegable_pedidos_estado("solicitud", "130", array($solicitud)); + +echo " "; + +echo "
    "; +echo ""; + +echo ""; +echo '' . + '' . + ''; +// Botones de guardar y restablecer +echo "'; +echo "
    ' . $locale['135'] . + '
    "; +echo ''; +echo '
    "; +echo "
    "; +include_once("html/pie.php"); +?> \ No newline at end of file diff --git a/src/addPedido.php b/src/addPedido.php index e3a5749..37efc26 100644 --- a/src/addPedido.php +++ b/src/addPedido.php @@ -84,7 +84,7 @@ if(!empty($_POST)) { $arrayInsert["salario_max"]=$salario_max; $arrayInsert["procedencia"]=$procedencia; $arrayInsert["observaciones"]=$observaciones; - $arrayInsert["estado"]="10"; + $arrayInsert["estado"]="110"; $arrayInsert["pesoIdioma"]=$pesoIdi; $arrayInsert["pesoPerfil"]=$pesoPer; $arrayInsert["pesoTecno"]=$pesoTec; @@ -94,9 +94,8 @@ if(!empty($_POST)) { $errores[]= "0"; $msg="No se ha podido agregar el pedido"; $tipo="error"; - } else { + } else { $pedido=$listaPedidos->buscarPedido($idPedido); - print_r($perfiles); $pedido->addPerfiles($perfiles); $pedido->addTecnologias($tecnologias); $pedido->addIdiomas($idiomas); @@ -172,7 +171,7 @@ echo "".$locale['121']."
    "; // Ticket #565 -> En una solicitud de oferta, se deben poder indicar varios perfiles técnicos - echo $html->listaSelect("perfil","oid","id","perfil",array("",$locale['ns']),$tecnologias,true,true,"15"); + echo $html->listaSelect("perfil","oid","id","perfil",array("",$locale['ns']),$perfiles,true,true,"15"); echo "".$locale['132'].": ".$locale['2100']; echo ""; diff --git a/src/candidaturas.php b/src/candidaturas.php index 6383ec6..020c5b8 100644 --- a/src/candidaturas.php +++ b/src/candidaturas.php @@ -8,7 +8,7 @@ if(!$_SESSION["oid"]){ //$consulta = "select usuarios.nombre as nombre,usuarios.apellidos as apellidos, pedidos.nombre as pedido, estado_candidatura.id as estado from usuarios,candidato_pedido,pedidos,estado_candidatura where usuarios.oid='".$persona->getValor("oid")."' and candidato_pedido.candidato='".$persona->getValor("oid")."' and candidato_pedido.pedido = pedidos.oid and candidato_pedido.estado <> 6 "; $consulta = "SELECT U.oid as idCandidato,P.oid as idPedido, U.nombre,U.apellidos,P.nombre AS pedido, CE.nombre AS estado, P.oid,CP.obsRRHH,CP.obsGerente -FROM usuarios U,pedidos P,candidato_pedido CP,candidaturas_estado CE +FROM usuarios U,pedidos P,candidato_pedido CP,candidaturas_estados CE WHERE U.oid='".$persona->getValor("oid")."' AND CP.candidato=U.oid AND P.oid=CP.pedido diff --git a/src/control.php b/src/control.php index 8a231cb..6d0e123 100644 --- a/src/control.php +++ b/src/control.php @@ -75,6 +75,6 @@ if ($link=conectar()){ } }else { //si no existe le mando otra vez a la portada - header("Location: index.php?errorusuario=si"); + // header("Location: index.php?errorusuario=si"); } ?> diff --git a/src/database/selfor.sql b/src/database/selfor.sql index 6759685..13a132b 100644 --- a/src/database/selfor.sql +++ b/src/database/selfor.sql @@ -102,15 +102,30 @@ INSERT INTO `candidatos_estados` (`cod`, `idioma`, `nombre`, `tipo`) VALUES (523, 'sp', 'Rechazado 3', 'candidato'), (530, 'sp', 'No disponible', 'candidato'), (540, 'sp', 'Disponible sin asignar', 'candidato'), -(550, 'sp', 'Disponible asignado a solicitud histórica', 'candidato'), +(550, 'sp', 'Disponible asignado a solicitud cerrada', 'candidato'), (560, 'sp', 'Disponible asignado a solicitud abierta', 'candidato'); -- -------------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `candidaturas_transiciones` ( + `inicial` int(10) unsigned NOT NULL, + `final` int(10) unsigned NOT NULL, + `transicion` bigint(20) unsigned NOT NULL, + `rol` text NOT NULL, + PRIMARY KEY (`inicial`,`final`), + KEY `final` (`final`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +ALTER TABLE `candidaturas_transiciones` + ADD CONSTRAINT `candidaturas_transiciones_ibfk_1` FOREIGN KEY (`inicial`) REFERENCES `candidaturas_estado` (`cod`), + ADD CONSTRAINT `candidaturas_transiciones_ibfk_2` FOREIGN KEY (`final`) REFERENCES `candidaturas_estado` (`cod`); + -- -- Estructura de tabla para la tabla `candidatos_transiciones` -- + CREATE TABLE IF NOT EXISTS `candidatos_transiciones` ( `inicial` int(10) NOT NULL, `final` int(10) NOT NULL, @@ -167,7 +182,8 @@ INSERT INTO `candidatos_transiciones` (`inicial`, `final`, `transicion`, `rol`) CREATE TABLE IF NOT EXISTS `candidato_pedido` ( `oid` int(10) unsigned NOT NULL AUTO_INCREMENT, - `candidato` bigint(20) unsigned NOT NULL, + `referencia` varchar(12) COLLATE latin1_spanish_ci NOT NULL, + `candidato` bigint(20) unsigned, `pedido` varchar(8) COLLATE latin1_spanish_ci NOT NULL, `afinidad` float NOT NULL, `estado` int(10) unsigned NOT NULL, @@ -190,10 +206,10 @@ CREATE TABLE IF NOT EXISTS `candidato_pedido` ( -- -------------------------------------------------------- -- --- Estructura de tabla para la tabla `candidaturas_estado` +-- Estructura de tabla para la tabla `candidaturas_estados` -- -CREATE TABLE IF NOT EXISTS `candidaturas_estado` ( +CREATE TABLE IF NOT EXISTS `candidaturas_estados` ( `cod` int(10) unsigned NOT NULL, `idioma` varchar(3) COLLATE latin1_spanish_ci NOT NULL, `nombre` varchar(50) COLLATE latin1_spanish_ci NOT NULL, @@ -201,10 +217,10 @@ CREATE TABLE IF NOT EXISTS `candidaturas_estado` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci; -- --- Volcar la base de datos para la tabla `candidaturas_estado` +-- Volcar la base de datos para la tabla `candidaturas_estados` -- -INSERT INTO `candidaturas_estado` (`cod`, `idioma`, `nombre`) VALUES +INSERT INTO `candidaturas_estados` (`cod`, `idioma`, `nombre`) VALUES (10, 'sp', 'Descartado'), (20, 'sp', 'Aceptado'), (30, 'sp', 'En proceso'), @@ -359,10 +375,6 @@ CREATE TABLE IF NOT EXISTS `historial_pedido` ( KEY `oid_h` (`oid_h`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci; --- --- Volcar la base de datos para la tabla `historial_pedido` --- - -- -------------------------------------------------------- @@ -378,10 +390,22 @@ CREATE TABLE IF NOT EXISTS `historial_usuario` ( KEY `oid_h` (`oid_h`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + -- --- Volcar la base de datos para la tabla `historial_usuario` +-- Estructura de tabla para la tabla `historial_oferta` -- +CREATE TABLE IF NOT EXISTS `historial_oferta` ( + `oid_h` bigint(20) unsigned NOT NULL, + `fecha_h` varchar(20) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL, + `persona_h` varchar(20) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL, + `texto_h` text CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL, + KEY `oid_h` (`oid_h`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + -- -------------------------------------------------------- @@ -759,9 +783,9 @@ INSERT INTO `pedidos_transiciones` (`inicial`, `final`, `transicion`, `rol`) VAL (110, 120, 0, '1.3'), (110, 130, 110130, '1.3'), (120, 110, 0, '1.3'), -(130, 110, 0, '1.3'), -(130, 140, 0, ''), -(140, 130, 0, ''); +(130, 110, 130110, '1.3'), +(130, 140, 130140, ''), +(140, 130, 140130, ''); -- -------------------------------------------------------- @@ -1469,7 +1493,7 @@ ALTER TABLE `candidatos_estados` ALTER TABLE `candidato_pedido` ADD CONSTRAINT `candidato_pedido_ibfk_1` FOREIGN KEY (`candidato`) REFERENCES `usuarios` (`oid`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `candidato_pedido_ibfk_2` FOREIGN KEY (`pedido`) REFERENCES `pedidos` (`oid`) ON DELETE CASCADE ON UPDATE CASCADE, - ADD CONSTRAINT `candidato_pedido_ibfk_3` FOREIGN KEY (`estado`) REFERENCES `candidaturas_estado` (`cod`) ON UPDATE CASCADE; + ADD CONSTRAINT `candidato_pedido_ibfk_3` FOREIGN KEY (`estado`) REFERENCES `candidaturas_estados` (`cod`) ON UPDATE CASCADE; -- -- Filtros para la tabla `clientes` diff --git a/src/functions_get.php b/src/functions_get.php index 9e208a0..4013013 100644 --- a/src/functions_get.php +++ b/src/functions_get.php @@ -1,110 +1,131 @@ diff --git a/src/functions_rrhh.php b/src/functions_rrhh.php index 7fccf88..b275b5a 100644 --- a/src/functions_rrhh.php +++ b/src/functions_rrhh.php @@ -201,7 +201,7 @@ carpeta antiword en el ra /* Devuelve la lista de currículums */ function menu_curriculums($oid, $tipo){ - include LOCALE.LOCALESET."lenguaje.php"; + include_once LOCALE.LOCALESET."lenguaje.php"; $consulta = "select * from curriculum_usuario where oid='$oid' order by fecha"; $resultado = mysql_query($consulta); $num = @mysql_num_rows($resultado); @@ -224,7 +224,7 @@ function menu_curriculums($oid, $tipo){ /* Muestra la lista de currículums */ function ver_curriculums($oid, $tipo){ - include LOCALE.LOCALESET."lenguaje.php"; + include_once LOCALE.LOCALESET."lenguaje.php"; $consulta = "select * from curriculum_usuario where oid='$oid' order by fecha"; $resultado = mysql_query($consulta); $num = @mysql_num_rows($resultado); diff --git a/src/functions_sistema.php b/src/functions_sistema.php index e03f21f..b689223 100644 --- a/src/functions_sistema.php +++ b/src/functions_sistema.php @@ -3,10 +3,45 @@ ini_set("memory_limit", "32M"); //require_once ('Excel/reader.php'); +// Función para imprimir cosas +// Sacado de http://php.net/manual/de/debugger.php +// USO: +// > dbug(); +// > " " +// > echo dbug('print'); +function dbug() { + static $output = '', $doc_root; + $args = func_get_args(); + if (!empty($args) && $args[0] === 'print') { + $_output = $output; + $output = ''; + return $_output; + } + // do not repeat the obvious (matter of taste) + if (!isset($doc_root)) { + $doc_root = str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']); + } + $backtrace = debug_backtrace(); + // you may want not to htmlspecialchars here + $line = htmlspecialchars($backtrace[0]['line']); + $file = htmlspecialchars(str_replace(array('\\', $doc_root), array('/', ''), $backtrace[0]['file'])); + $class = !empty($backtrace[1]['class']) ? htmlspecialchars($backtrace[1]['class']) . '::' : ''; + $function = !empty($backtrace[1]['function']) ? htmlspecialchars($backtrace[1]['function']) . '() ' : ''; + $output .= "$class$function =>$file #$line
    ";
    +    ob_start();
    +    foreach ($args as $arg) {
    +        var_dump($arg);
    +    }
    +    $output .= htmlspecialchars(ob_get_contents(), ENT_COMPAT, 'UTF-8');
    +    ob_end_clean();
    +    $output .= '
    '; +} + + /* Conexión a la base de datos */ function conectar() { - include LOCALE.LOCALESET."lenguaje.php"; + include_once LOCALE.LOCALESET."lenguaje.php"; if (!($puntero=mysql_connect("localhost","root","password"))) { echo $locale['bd']; @@ -24,8 +59,8 @@ function conectar() /* Conexión a la base de datos de tablas */ function conectar_info() { - include LOCALE.LOCALESET."lenguaje.php"; - if (!($puntero=mysql_connect("localhost","root","0selfor0"))) + include_once LOCALE.LOCALESET."lenguaje.php"; + if (!($puntero=mysql_connect("localhost","root","password"))) { echo $locale['bd']; return false; diff --git a/src/functions_util.php b/src/functions_util.php index 771b19b..02e1f34 100644 --- a/src/functions_util.php +++ b/src/functions_util.php @@ -1,55 +1,55 @@ '; +function rellena_desplegable_color($name) { + + echo ''; } +/* Rellena una lista desplegable con los empleados con un permiso concreto */ -/* Rellena una lista desplegable con los empleados con un permiso concreto*/ -function rellena_personal_permiso($nombre, $permiso, $auxiliar, $empleado){ - include LOCALE.LOCALESET."lenguaje.php"; - $consulta = "select usuarios.oid as oid,nombre from usuarios,rol where usuarios.tipo='usuario' and usuarios.rol = rol.oid and (usuarios.permisos like '%.$permiso%' or usuarios.permisos like '%$permiso.%' or usuarios.permisos = '$permiso' or rol.permisos like '%.$permiso%' or rol.permisos like '%$permiso.%' or rol.permisos = '$permiso')"; - echo ''; + if ($link = conectar()) { + if ($resultado = consultar($consulta, $link)) { + echo $auxiliar; + while ($row = mysql_fetch_array($resultado)) { + if ($empleado == $row["oid"]) { + echo ''; + } else { + echo ''; } - } - } - echo ''; -} - -/* Rellena una lista desplegable con los pedidos que puede ver el usuario*/ -function rellena_desplegable_pedidos($nombre){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; -} - -/* Rellena una lista desplegable con los pedidos que puede ver el usuario*/ -function rellena_desplegable_pedidos_ConParametros($nombre,$seleccionadas){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; } -/* Rellena una lista desplegable con las localidades de una provincia seleccionando una provincia concreta*/ -function rellena_desplegable_localidad($localidad, $nombre){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; + if ($link = conectar()) { + if (comprobar_permisos("SP")) { + $consulta = "select * from pedidos order by prioridad DESC"; + } else { + $mioid = $_SESSION["oid"]; + $consulta = "select * from pedidos where gerente='$mioid' order by prioridad DESC"; + } + if ($resultado = consultar($consulta, $link)) { + echo ''; + while ($row = mysql_fetch_array($resultado)) { + echo ''; + } } } echo ''; } -function rellena_desplegable_localidad_mult($localidad, $nombre){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; + if ($link = conectar()) { + if (comprobar_permisos("SP")) { + $consulta = "select * from pedidos order by prioridad DESC"; + } else { + $mioid = $_SESSION["oid"]; + $consulta = "select * from pedidos where gerente='$mioid' order by prioridad DESC"; + } + if ($resultado = consultar($consulta, $link)) { + if ($seleccionadas[0] == "") + echo ''; + else + echo ''; + while ($row = mysql_fetch_array($resultado)) { + if (in_array($row["oid"], $seleccionadas)) { + echo ''; + } else { + echo ''; } + } } } echo ''; } -function rellena_desplegable_localidad_multSel($localidad, $nombre){ - include LOCALE.LOCALESET."lenguaje.php"; - if ($link = conectar()){ - echo ''; - } +/* Rellena una lista desplegable con los pedidos con un estado */ +function rellena_desplegable_pedidos_estado($nombre, $estado, $seleccionadas) { + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; +} + +/* Rellena una lista desplegable con las localidades de una provincia seleccionando una provincia concreta */ + +function rellena_desplegable_localidad($localidad, $nombre) { + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; +} + +function rellena_desplegable_localidad_mult($localidad, $nombre) { + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; +} + +function rellena_desplegable_localidad_multSel($localidad, $nombre) { + include LOCALE . LOCALESET . "lenguaje.php"; + if ($link = conectar()) { + echo ''; + } } /* Rellena una lista desplegable */ -function rellena_desplegable($tabla,$name,$auxiliar){ - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar("select * from ".$tabla,$link)){ + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla, $link)) { while ($row = mysql_fetch_array($resultado)) - echo ''; + echo ''; } } echo ''; } -/* Rellena una lista desplegable con oid e id*/ -function rellena_desplegable_oid($tabla,$name,$auxiliar){ +/* Rellena una lista desplegable con oid e id */ - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar("select * from ".$tabla,$link)){ + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla, $link)) { while ($row = mysql_fetch_array($resultado)) - echo ''; + echo ''; } } echo ''; } -/* Rellena una lista desplegable de perfiles*/ -function rellena_perfiles($tabla,$name,$auxiliar){ - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar("select * from ".$tabla,$link)){ + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla, $link)) { while ($row = mysql_fetch_array($resultado)) - echo ''; - } - } - echo ''; -} - - -/* Rellena una lista desplegable tipo orden-id */ -function rellena_desplegable_orden($tabla,$name,$auxiliar){ - - echo ''; } /* Rellena una lista desplegable tipo orden-id */ -function rellena_desplegable_select_orden($tabla,$name,$auxiliar,$opcion){ - echo ''; + echo $auxiliar; + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla . " order by orden", $link)) { + while ($row = mysql_fetch_array($resultado)) + echo ''; + } + } + echo ''; +} + +/* Rellena una lista desplegable tipo orden-id */ + +function rellena_desplegable_select_orden($tabla, $name, $auxiliar, $opcion) { + echo ''; } - /* Rellena una lista desplegable */ -function rellena_desplegable_multi($tabla,$name,$auxiliar){ - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar("select * from ".$tabla,$link)){ + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla, $link)) { while ($row = mysql_fetch_array($resultado)) - echo ''; + echo ''; } } echo ''; @@ -356,31 +390,31 @@ function rellena_desplegable_multi($tabla,$name,$auxiliar){ // echo ''; //} -/* Convierte un array en una cadena de texto separada por el valor indicado en separador*/ -function expande($array, $separador){ - $cadena = ""; +/* Convierte un array en una cadena de texto separada por el valor indicado en separador */ +function expande($array, $separador) { + $cadena = ""; - foreach($array as $elem){ - $cadena .= $elem.$separador; - } + foreach ($array as $elem) { + $cadena .= $elem . $separador; + } - //Remueve el último separador: - if ($valores{strlen($valores) - 2} == $separador) - $valores = substr($valores,0,strlen($valores) - 2); + //Remueve el último separador: + if ($valores{strlen($valores) - 2} == $separador) + $valores = substr($valores, 0, strlen($valores) - 2); } - /* Rellena una lista desplegable seleccionando una opción */ -function rellena_desplegable_select($tabla,$name,$auxiliar,$opcion){ - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar("select * from ".$tabla,$link)){ + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla, $link)) { while ($row = mysql_fetch_array($resultado)) - if($opcion == $row["id"]){ - echo ''; - }else{ - echo ''; + if ($opcion == $row["id"]) { + echo ''; + } else { + echo ''; } } } @@ -388,35 +422,37 @@ function rellena_desplegable_select($tabla,$name,$auxiliar,$opcion){ } /* Rellena una lista desplegable tipo oid id seleccionando una opción */ -function rellena_desplegable_select_oid($tabla,$name,$auxiliar,$opcion){ - $consulta="select * from ".$tabla; - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar($consulta,$link)){ + if ($link = conectar()) { + if ($resultado = consultar($consulta, $link)) { while ($row = mysql_fetch_array($resultado)) - if($opcion == $row["oid"]){ - echo ''; - }else{ - echo ''; + if ($opcion == $row["oid"]) { + echo ''; + } else { + echo ''; } } } echo ''; } + // Rellena una lista desplegable dando una tabla, el id que quieres sacar, el valor por defecto // y la opción que hay ahora seleccionada -function rellena_desplegable_select_oidCol($tabla,$Ccod,$Cnombre,$name,$auxiliar,$opcion){ - $consulta="select * from ".$tabla; - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar($consulta,$link)){ + if ($link = conectar()) { + if ($resultado = consultar($consulta, $link)) { while ($row = mysql_fetch_array($resultado)) - if($opcion == $row[$Ccod]){ - echo ''; - }else{ - echo ''; + if ($opcion == $row[$Ccod]) { + echo ''; + } else { + echo ''; } } } @@ -424,36 +460,37 @@ function rellena_desplegable_select_oidCol($tabla,$Ccod,$Cnombre,$name,$auxiliar } /* Rellena una lista desplegable de procedencias */ -function rellena_procedencias($name, $auxiliar, $opcion){ - echo ''; echo $auxiliar; - if ($link = conectar()){ - if ($resultado = consultar("select * from procedencia", $link)){ + if ($link = conectar()) { + if ($resultado = consultar("select * from procedencia", $link)) { while ($row = mysql_fetch_array($resultado)) - if (($opcion == $row["num"]) || ($opcion == '')) { - echo ''; + if (($opcion == $row["num"]) || ($opcion == '')) { + echo ''; $opcion = $row["num"]; - }else{ - echo ''; + } else { + echo ''; } } } echo ''; } +/* Rellena una lista desplegable con más datos */ -/* Rellena una lista desplegable con más datos*/ -function rellena_desplegable_datos($tabla,$name,$aux1, $aux2){ +function rellena_desplegable_datos($tabla, $name, $aux1, $aux2) { - echo ''; + if ($link = conectar()) { + if ($resultado = consultar("select * from " . $tabla, $link)) { while ($row = mysql_fetch_array($resultado)) - if($aux1 != ""){ - echo ''; - }else{ - echo ''; + if ($aux1 != "") { + echo ''; + } else { + echo ''; } } } @@ -461,85 +498,96 @@ function rellena_desplegable_datos($tabla,$name,$aux1, $aux2){ } /* Rellena una lista numérica desplegable */ -function rellena_numerico($name, $menor, $num){ - echo ''; + for ($i = 0; $i < $num; $i++) { + echo ''; } echo ''; } -/* Rellena una lista numérica desplegable seleccionando opción*/ -function rellena_prioridad_select($name, $op){ - echo ''; + for ($i = 0; $i < 3; $i++) { + echo ''; } echo ''; } -/* Rellena una lista numérica desplegable seleccionando opción*/ -function rellena_numerico_select($name, $menor, $num, $op){ - echo ''; + for ($i = 0; $i < $num; $i++) { + echo ''; } echo ''; } +/* Rellena una lista desplegable con los días de la semana seleccionando */ -/* Rellena una lista desplegable con los días de la semana seleccionando*/ -function rellena_semana_select($name, $activacion){ - echo ''; + for ($i = 0; $i < 7; $i++) { + echo ''; } echo ''; } -/* Rellena un desplegable para elegir fecha*/ -function rellena_fecha(){ +/* Rellena un desplegable para elegir fecha */ + +function rellena_fecha() { $dia = date("j"); $mes = date("n"); $anyo = date('Y'); echo $locale['318']; - rellena_numerico_select("dia",0,31, $dia); + rellena_numerico_select("dia", 0, 31, $dia); echo $locale['328']; - rellena_numerico_select("mes",0,12, $mes); + rellena_numerico_select("mes", 0, 12, $mes); echo $locale['329']; - rellena_numerico_select("anyo",($anyo-100),100, $anyo); + rellena_numerico_select("anyo", ($anyo - 100), 100, $anyo); } -/* Rellena un desplegable para elegir fecha seleccionando la fecha parámetro*/ -function rellena_fecha_nombre_select($fecha){ - rellena_fecha_select($fecha, ""); +/* Rellena un desplegable para elegir fecha seleccionando la fecha parámetro */ + +function rellena_fecha_nombre_select($fecha) { + rellena_fecha_select($fecha, ""); } -/* Rellena un desplegable para elegir fecha seleccionando la fecha parámetro y nombre del select*/ -function rellena_fecha_select($fecha, $nombre){ - include LOCALE.LOCALESET."lenguaje.php"; - $tiempo =explode("-",$fecha); +/* Rellena un desplegable para elegir fecha seleccionando la fecha parámetro y nombre del select */ + +function rellena_fecha_select($fecha, $nombre) { + include LOCALE . LOCALESET . "lenguaje.php"; + $tiempo = explode("-", $fecha); $dia = $tiempo[2]; $mes = $tiempo[1]; $anyo = $tiempo[0]; - if($anyo <= 0) $anyo = date('Y'); + if ($anyo <= 0) + $anyo = date('Y'); echo $locale['318']; - rellena_numerico_select("dia".$nombre,0,31, $dia); + rellena_numerico_select("dia" . $nombre, 0, 31, $dia); echo $locale['328']; - rellena_numerico_select("mes".$nombre,0,12, $mes); + rellena_numerico_select("mes" . $nombre, 0, 12, $mes); echo $locale['329']; - rellena_numerico_select("anyo".$nombre,($anyo-100),100, $anyo); + rellena_numerico_select("anyo" . $nombre, ($anyo - 100), 100, $anyo); } /* Rellena una lista a borrar */ + //function rellena_borrable($tabla, $tabla2, $nombre, $oid){ // if ($link = conectar()){ // $consulta = "select * from ".$tabla.",".$tabla2." where $tabla.$nombre = $tabla2.oid and oid_i = ".$oid.""; @@ -552,191 +600,200 @@ function rellena_fecha_select($fecha, $nombre){ // echo ''; //} -function rellena_borrable_ConDestino($tabla, $tabla2, $nombre, $oid,$destino){ - if ($link = conectar()){ - $consulta = "select * from ".$tabla.",".$tabla2." where $tabla.$nombre = $tabla2.oid and oid_i = ".$oid.""; - if ($resultado = consultar($consulta,$link)){ - while ($row = mysql_fetch_array($resultado)){ - echo '
    '.$row["id"].' - Borrar'; - } +function rellena_borrable_ConDestino($tabla, $tabla2, $nombre, $oid, $destino) { + if ($link = conectar()) { + $consulta = "select * from " . $tabla . "," . $tabla2 . " where $tabla.$nombre = $tabla2.oid and oid_i = " . $oid . ""; + if ($resultado = consultar($consulta, $link)) { + while ($row = mysql_fetch_array($resultado)) { + echo '
    ' . $row["id"] . ' - Borrar'; + } } } echo ''; } /* Rellena una lista */ -function rellena_lista($tabla, $nombre, $oid){ - if ($link = conectar()){ - $consulta = "select * from ".$tabla." where oid_i = ".$oid.""; - if ($resultado = consultar($consulta,$link)){ - while ($row = mysql_fetch_array($resultado)){ - $res[] = $row[$nombre]; - echo $row[$nombre].'
    '; - } + +function rellena_lista($tabla, $nombre, $oid) { + $res = array(); + if ($link = conectar()) { + $consulta = "select * from " . $tabla . " where oid_i = " . $oid . ""; + if ($resultado = consultar($consulta, $link)) { + while ($row = mysql_fetch_array($resultado)) { + $res[] = $row[$nombre]; + echo $row[$nombre] . '
    '; + } } } return $res; } /* Rellena una lista */ -function rellena_lista_oid($tabla, $tabla2, $nombre, $oid){ - if ($link = conectar()){ - $consulta = "select * from ".$tabla.",".$tabla2." where $tabla.$nombre = $tabla2.oid and oid_i = ".$oid.""; - if ($resultado = consultar($consulta,$link)){ - while ($row = mysql_fetch_array($resultado)){ - $res[] = $row["id"]; - //echo $row["id"].'
    '; - } + +function rellena_lista_oid($tabla, $tabla2, $nombre, $oid) { + $res = array(); + if ($link = conectar()) { + $consulta = "select * from " . $tabla . "," . $tabla2 . " where $tabla.$nombre = $tabla2.oid and oid_i = " . $oid . ""; + + if ($resultado = consultar($consulta, $link)) { + while ($row = mysql_fetch_array($resultado)) { + $res[] = $row["id"]; + //echo $row["id"].'
    '; + } } } return $res; } /* Muestra los resultados */ -function mostrar_resultados($errores, $aciertos){ - $oid = $_SESSION["oid"]; - $errores = explode(".", $errores); - $aciertos = explode(".", $aciertos); - if ($link = conectar()){ - foreach($errores as $error){ - if($error != ""){ - $consulta = "insert into resultado_acciones values ('', '$oid', '$error', curdate(), '0')"; - $resultado = mysql_query($consulta, $link); - } - } - foreach($aciertos as $acierto){ - if($acierto != ""){ - $consulta = "insert into resultado_acciones values ('', '$oid', '$acierto', curdate(), '1')"; - $resultado = mysql_query($consulta, $link); - } - } - $consulta = "select fifo, resultado, tipo from resultado_acciones where oid='$oid' order by fifo DESC limit 0, 5"; - $resultado = mysql_query($consulta, $link); - if($resultado){ - while($rows = mysql_fetch_array($resultado)){ - $res = $rows["resultado"]; - $tipo = $rows["tipo"]; - $fifo = $rows["fifo"]; - if($tipo == 0){ - echo '

    '.$res.'

    '; - }else if($tipo == 1){ - echo '

    '.$res.'

    '; - } - } - } - $consulta = "delete from resultado_acciones where fecha < curdate()"; - $resultado = mysql_query($consulta, $link); - } + +function mostrar_resultados($errores, $aciertos) { + $oid = $_SESSION["oid"]; + $errores = explode(".", $errores); + $aciertos = explode(".", $aciertos); + if ($link = conectar()) { + foreach ($errores as $error) { + if ($error != "") { + $consulta = "insert into resultado_acciones values ('', '$oid', '$error', curdate(), '0')"; + $resultado = mysql_query($consulta, $link); + } + } + foreach ($aciertos as $acierto) { + if ($acierto != "") { + $consulta = "insert into resultado_acciones values ('', '$oid', '$acierto', curdate(), '1')"; + $resultado = mysql_query($consulta, $link); + } + } + $consulta = "select fifo, resultado, tipo from resultado_acciones where oid='$oid' order by fifo DESC limit 0, 5"; + $resultado = mysql_query($consulta, $link); + if ($resultado) { + while ($rows = mysql_fetch_array($resultado)) { + $res = $rows["resultado"]; + $tipo = $rows["tipo"]; + $fifo = $rows["fifo"]; + if ($tipo == 0) { + echo '

    ' . $res . '

    '; + } else if ($tipo == 1) { + echo '

    ' . $res . '

    '; + } + } + } + $consulta = "delete from resultado_acciones where fecha < curdate()"; + $resultado = mysql_query($consulta, $link); + } } /* Muestra los errores */ -function mostrar_errores($errores){ - $errores = explode(".", $errores); - foreach($errores as $error){ - echo '

    '.$error.'

    '; - } + +function mostrar_errores($errores) { + $errores = explode(".", $errores); + foreach ($errores as $error) { + echo '

    ' . $error . '

    '; + } } /* Muestra los aciertos */ -function mostrar_aciertos($aciertos){ - $aciertos = explode(".", $aciertos); - foreach($aciertos as $acierto){ - echo '

    '.$acierto.'

    '; - } + +function mostrar_aciertos($aciertos) { + $aciertos = explode(".", $aciertos); + foreach ($aciertos as $acierto) { + echo '

    ' . $acierto . '

    '; + } } /* Devuelve un array con los valores de un campo de una tabla */ -function input_array_tabla($nombre, $tabla, $campo, $oid){ - $consulta = "select ".$campo." from ".$tabla." where oid_i=".$oid.""; - //echo ($consulta); - if ($resultado = consultar($consulta)) - while ($row = mysql_fetch_array($resultado)){ - echo ''; - } + +function input_array_tabla($nombre, $tabla, $campo, $oid) { + $consulta = "select " . $campo . " from " . $tabla . " where oid_i=" . $oid . ""; + //echo ($consulta); + if ($resultado = consultar($consulta)) + while ($row = mysql_fetch_array($resultado)) { + echo ''; + } } /* Devuelve el color de una procedencia */ -function color_procedencia($procedencia){ - if ($link = conectar()){ - if ($resultado = consultar("select * from procedencia where num='$procedencia'",$link)){ +function color_procedencia($procedencia) { + + if ($link = conectar()) { + if ($resultado = consultar("select * from procedencia where num='$procedencia'", $link)) { while ($row = mysql_fetch_array($resultado)) - return $row["color"]; + return $row["color"]; } } - } // Strip Input Function, prevents HTML in unwanted places -/*function stripinput($text) { - include_once("Objects/BD.php"); - $bd = new BD(); - $link = $bd->getLink(); - mysql_real_escape_string($text,$link); - return $text; -}*/ +/* function stripinput($text) { + include_once("Objects/BD.php"); + $bd = new BD(); + $link = $bd->getLink(); + mysql_real_escape_string($text,$link); + return $text; + } */ -function stripinput($text) { - - include_once("Objects/BD.php"); - $bd = new BD(); - $link = $bd->getLink(); - return mysql_real_escape_string($text, $link); - - /* if(gettype($text) == "string"){ - $text = mysql_real_escape_string($text,$link); - } - if (QUOTES_GPC) $text = stripslashes($text); - $search = array("\"", "'", "\\", '\"', "\'", "<", ">", " "); - $replace = array(""", "'", "\", """, "'", "<", ">", " "); - $text = str_replace($search, $replace, $text); - return $text;*/ +function stripinput($text) { + + include_once("Objects/BD.php"); + $bd = new BD(); + $link = $bd->getLink(); + return mysql_real_escape_string($text, $link); + + /* if(gettype($text) == "string"){ + $text = mysql_real_escape_string($text,$link); + } + if (QUOTES_GPC) $text = stripslashes($text); + $search = array("\"", "'", "\\", '\"', "\'", "<", ">", " "); + $replace = array(""", "'", "\", """, "'", "<", ">", " "); + $text = str_replace($search, $replace, $text); + return $text; */ } /* -function menu_candidatos($oid, $pagina, $tabla_cond, $condicion){ - $tabla = "usuarios"; - include LOCALE.LOCALESET."lenguaje.php"; -echo ''; - if(!strpos($pagina, "?")) $pagina .= '.php?liberar=si'; - echo ''; - if(comprobar_permisos("LC")) - echo ""; - if(comprobar_permisos("AC")) - echo ""; - if(comprobar_permisos("SP")) - echo ""; - if(comprobar_permisos("LC")) - echo ""; - echo '
    '; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo '
    -
    - - - -
    -
    - - - -
    -
    - - - -
    -
    - - - -
    '; -} -*/ + function menu_candidatos($oid, $pagina, $tabla_cond, $condicion){ + $tabla = "usuarios"; + include LOCALE.LOCALESET."lenguaje.php"; + echo ''; + if(!strpos($pagina, "?")) $pagina .= '.php?liberar=si'; + echo ''; + if(comprobar_permisos("LC")) + echo ""; + if(comprobar_permisos("AC")) + echo ""; + if(comprobar_permisos("SP")) + echo ""; + if(comprobar_permisos("LC")) + echo ""; + echo '
    '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    '; + } + */ //function menu_usuarios($oid){ // $tabla = "usuarios"; @@ -766,85 +823,85 @@ echo ''; // echo '
    '; //} -function menu_clientes($oid){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; - if(comprobar_permisos("GP") || comprobar_permisos("SP")){ - echo "
    +function menu_clientes($oid) { + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; + if (comprobar_permisos("GP") || comprobar_permisos("SP")) { + echo ""; - echo ""; - } - echo '
    - +
    + echo "
    - +
    '; + } + echo '
    '; } -function menu_alarmas($oid){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; - if(comprobar_permisos("GP") || comprobar_permisos("SP")){ - echo "
    +function menu_alarmas($oid) { + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; + if (comprobar_permisos("GP") || comprobar_permisos("SP")) { + echo ""; - echo ""; - } - echo '
    - +
    + echo "
    - +
    '; + } + echo '
    '; } -function menu_informes($oid){ - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; - if(comprobar_permisos("AF")){ - echo "
    +function menu_informes($oid) { + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; + if (comprobar_permisos("AF")) { + echo ""; - echo ""; - } - echo '
    - +
    + echo "
    - +
    '; + } + echo '
    '; } -function menu_pedidos($oid){ - $tabla = "pedidos"; - include LOCALE.LOCALESET."lenguaje.php"; - echo ''; - if(comprobar_permisos("GP") || comprobar_permisos("SP")){ - echo ""; + } + echo '
    +function menu_pedidos($oid) { + $tabla = "pedidos"; + include LOCALE . LOCALESET . "lenguaje.php"; + echo ''; + if (comprobar_permisos("GP") || comprobar_permisos("SP")) { + echo ""; - echo ""; - echo ""; - echo " + "; - } - echo '
    - +
    + echo "
    - +
    + echo "
    - +
    + echo "
    -
    -
    '; +
    '; } //function volver($pagina, $tabla, $oid, $condicion){ @@ -857,13 +914,13 @@ function menu_pedidos($oid){ // echo ''; //} -function consulta($tabla, $campo, $condicion){ - if($link = conectar()){ - $consulta = "select $campo from $tabla where $condicion"; - $resultado = mysql_query($consulta, $link); - $rows = mysql_fetch_array($resultado); - return $rows[$campo]; - } +function consulta($tabla, $campo, $condicion) { + if ($link = conectar()) { + $consulta = "select $campo from $tabla where $condicion"; + $resultado = mysql_query($consulta, $link); + $rows = mysql_fetch_array($resultado); + return $rows[$campo]; + } } ?> diff --git a/src/idiomas/sp/lenguaje.php b/src/idiomas/sp/lenguaje.php index 6a016e8..dc74ae5 100644 --- a/src/idiomas/sp/lenguaje.php +++ b/src/idiomas/sp/lenguaje.php @@ -294,7 +294,7 @@ $locale['283'] = "Selección solicitudes de oferta"; $locale['284'] = "Editar"; $locale['285'] = "Mostrar"; $locale['286'] = "Nota: los campos marcados con * son obligatorios."; -$locale['287'] = "Candidatos
    asignados"; +$locale['287'] = "Número
    de ofertas"; $locale['288'] = "Actualizar parte"; $locale['289'] = "Solicitar vacaciones"; $locale['290'] = "Se ha solicitado correctamente los días "; @@ -1013,4 +1013,14 @@ $locale['4048'] = "Cualquier perfil técnico"; $locale['5001'] = "Provincia no deseada:"; $locale['5002'] = "Se ha eliminado la provincia no deseada correctamente"; $locale['5003'] = "Estado"; + +$locale['5100'] = "Lista de ofertas"; +$locale['5101'] = "Nueva oferta"; +$locale['5102'] = "Buscar oferta"; +$locale['5103'] = "Ver oferta"; +$locale['5104'] = "Afinidad"; +$locale['5105'] = "Añadir nueva oferta"; +$locale['5106'] = "Referencia"; +$locale['5107'] = "Candidato"; + ?> diff --git a/src/js/comunes.js b/src/js/comunes.js index 9b21283..e28242a 100644 --- a/src/js/comunes.js +++ b/src/js/comunes.js @@ -139,6 +139,15 @@ function eliminaCapa(idCapa) { function mostrarCapa(idCapa){ document.getElementById(idCapa).style.visibility="visible"; } + function ocultarCapa(idCapa){ document.getElementById(idCapa).style.visibility="hidden"; +} + + +function cambiarCandidato(lugar) { +var mensaje="Esta oferta ya tiene asignada un candidato. \xbfEst\xe1 seguro que desea sustituirlo?"; + if(confirm(mensaje)){ + document.location=lugar; + } } \ No newline at end of file diff --git a/src/lista_ofertas.php b/src/lista_ofertas.php new file mode 100644 index 0000000..3b6330b --- /dev/null +++ b/src/lista_ofertas.php @@ -0,0 +1,41 @@ +tieneRol("4") && !$usuario->tieneRol("1") && !$usuario->tieneRol("3")) { + header("Location: aplicacion.php?e=permiso&rol=" . $usuario->getValor("rol")); + exit; +} +include_once("html/cabecera.php"); + +/* LISTA_PROYECTOS.PHP */ + +$consulta = ""; +include_once("Objects/ListaOfertas.php"); +include_once("Objects/HTML.php"); +$html = new HTML($locale); + +echo $html->menuOfertas($usuario, ""); +echo "

    " . "Lista de ofertas" . "

    "; + +$tipoOfertas = (!empty($_GET["byEstado"])) ? $_GET['byEstado'] : ""; +$order_by = (!empty($_GET['order'])) ? $_GET['order'] : ""; +$modo = (!empty($_GET['modo'])) ? $_GET["modo"] : ""; + +// sacado de http://patrickallaert.blogspot.com/2007/09/building-dynamic-sql-queries-elegant.html +$cond = array(); +if ($tipoOfertas != "") { + $cond[] = "estado = '$tipoOfertas'"; +} + +$orden = array(); +if ($order_by != "") { + $orden[] = $order_by.' '.$modo; +} + +$listaOfertas = new ListaOfertas($usuario, $cond, $orden); + +include_once("ver_lista_ofertas.php"); + +include_once("html/pie.php"); +?> diff --git a/src/lista_pedidos.php b/src/lista_pedidos.php index 285efc1..59c3a75 100644 --- a/src/lista_pedidos.php +++ b/src/lista_pedidos.php @@ -30,7 +30,7 @@ if (isset($_GET["order"]) && ($_GET["order"]!="")) { $modo = (isset($_GET["modo"])) ? stripinput($_GET["modo"]) : ""; -$tipoPedidos = (isset($_GET["byEstado"]) && ($_GET['byEstado'] != "")) ? $_GET['byEstado'] : "10"; +$tipoPedidos = (isset($_GET["byEstado"]) && ($_GET['byEstado'] != "")) ? $_GET['byEstado'] : "0"; $listaPedidos=new ListaPedido($usuario,$order_by,"",$tipoPedidos); diff --git a/src/oferta.php b/src/oferta.php new file mode 100644 index 0000000..a1ba26e --- /dev/null +++ b/src/oferta.php @@ -0,0 +1,15 @@ + diff --git a/src/pedido.php b/src/pedido.php index 344acdc..1c6548a 100644 --- a/src/pedido.php +++ b/src/pedido.php @@ -4,9 +4,9 @@ include("seguridad.php"); include("functions.php"); $idPedido = isset($_GET["idPedido"]) ? stripinput($_GET["idPedido"]) : ""; -if(!isset($tabla)) $tabla = stripinput($_POST["tabla"]); -if(!isset($where)) $where = stripinput($_POST["where"]); -if(!isset($condicion)) $condicion = stripinput($_POST["condicion"]); +$tabla = isset($_POST["tabla"]) ? stripinput($_POST["tabla"]) : ""; +$where = isset($_POST["where"]) ? stripinput($_POST["where"]) : ""; +$condicion = isset($_POST["condicion"]) ? stripinput($_POST["condicion"]) : ""; include_once("ver_pedido.php"); diff --git a/src/seguridad.php b/src/seguridad.php index ded9a08..a77926c 100644 --- a/src/seguridad.php +++ b/src/seguridad.php @@ -6,7 +6,6 @@ ini_set("session.use_trans_sid","0"); //iniciamos la sesión session_name("loginUsuario"); include_once("Objects/Usuario.php"); -include_once("Objects/ListaPedido.php"); include_once("Objects/Semaforo.php"); session_start(); //FICHERO DE IDIOMAS diff --git a/src/ver_lista_ofertas.php b/src/ver_lista_ofertas.php new file mode 100644 index 0000000..b536d4f --- /dev/null +++ b/src/ver_lista_ofertas.php @@ -0,0 +1,155 @@ + 0) { + $destinoURL = substr($destinoURL, 0, stripos($destinoURL, "?")); +} +// Comprobamos mensajes que pueden llegar hasta aqui +if (isset($_GET['msg'])) { + switch ($_GET['msg']) { + case "1":$mensaje = "
    " . $locale['1059'] . "
    "; + break; + case "2":$mensaje = "
    " . $locale['1060'] . "
    "; + break; + default: + break; + } +} +if (isset($mensaje)) echo $mensaje; +if (!isset($variablesExtra)) $variablesExtra = ""; + +?> +
    + +
    +
    +
    +'; +// CABECERAS +echo " "; +// Acciones +echo ""; +echo " "; +// denominacion +$orderView = "denominacion"; +echo " "; +// Fecha +$orderView = "fecha"; +echo " " ; +// estado +$orderView = "estado"; +echo " "; +// solicitud +$orderView = "solicitud"; +echo " "; +// Cliente +$orderView = "candidato"; +echo " "; +// Afinidad +/*$orderView = "afinidad"; +echo " "; + */ + +echo ""; +// Vamos mostrando ofertas +$listadeOfertas = $listaOfertas->getOfertas(); + + +$pagLista = "1"; +if (!empty($_GET['pagLista']) && ($_GET['pagLista'] > 0)) { + $pagLista = $_GET['pagLista']; +} + +// Vemos si tiene ofertas +if (count($listadeOfertas) == 0) { + echo "
    " . $locale['2014'] . "" . $locale['1042'].":" . "
    " . +" " . +"
    " . $locale['1021'] . "
    " . +" " . +"
    " . $locale['1102'] . "
    " . +" " . +"
    " . $locale['278'].":" . "
    " . +" " . +"
    " . $locale['704'].":" . "
    " . +" " . +"
    " . $locale['5104'] . "
    " . +" " . +"
    no hay ofertas
    "; +} else { + $inicio = ($pagLista - 1) * constante("lista"); + if (count($listadeOfertas) > ($inicio + constante("lista"))) { + $final = $inicio + constante("lista"); + } else { + $final = count($listadeOfertas); + } + for ($i = $inicio;$i < $final;$i++) { + // foreach($listadeOfertas as $ofertaAct){ + $ofertaAct = $listadeOfertas[$i]; + + echo ""; + if (($ofertaAct->getValor("gerente") == $usuario->getValor("oid")) || $usuario->tieneRol("1")) { + // Es el gerente de ese pedido, puede editarlo y eliminarlo + echo ''; + echo "getValor("oid") . "') >"; + } else { + // No es el gerente no puede ni editarlo ni eliminarlo + echo ''; + } + echo ''; + echo '' . $ofertaAct->getValor("referencia") . ''; + echo '' . $ofertaAct->getValor("fecha") . ''; + echo '' . $ofertaAct->getValor("nombre_estado") . ''; + echo '' . $ofertaAct->getValor("nombre_solicitud") . ''; + echo '' . $ofertaAct->getValor("nombre_candidato") . ''; + //echo '' . $ofertaAct->getValor("afinidad") . ''; + echo ""; + } + // Comprobamos si tenemos que mostar una paginación + $numPaginas = ceil(count($listadeOfertas) / constante("lista")); + echo "
    "; + if (isset($_GET["order"]) && ($_GET["order"] != "")) { + if ($variablesExtra != "") { + $variablesExtra = "&" . $variablesExtra; + } + $variables = "byEstado=" . $tipoOfertas . "order=" . $_GET["order"] . "&modo=" . $_GET["modo"] . $variablesExtra; + echo $html->paginacion($numPaginas, $pagLista, $destinoURL, $variables, "pagLista"); + } else { + $variables = "byEstado=" . $tipoOfertas . $variablesExtra; + echo $html->paginacion($numPaginas, $pagLista, $destinoURL, $variables, "pagLista"); + } + + echo "
    "; + echo " "; +} + +echo ''; + +?> diff --git a/src/ver_lista_pedidos.php b/src/ver_lista_pedidos.php index 4ff2ae4..49ed6e1 100644 --- a/src/ver_lista_pedidos.php +++ b/src/ver_lista_pedidos.php @@ -33,9 +33,10 @@ if (!isset($variablesExtra)) $variablesExtra = "";
    @@ -113,24 +114,22 @@ echo " ".$locale['1524']."
    " . " " . " "; -// Número de personas +// Número de ofertas $orderView="empleados"; -echo " ".$locale['1024']."
    " . +echo " ".$locale['287']."
    " . " " . " "; -// Candidatos asignados -echo " ".$locale['287'].""; - echo ""; // Vamos mostrando petición por petición $listadePedidos=$listaPedidos->getPedidos(); -if($_GET['pagLista']>0){ - $pagLista=$_GET['pagLista']; -}else{ - $pagLista="1"; + +$pagLista = "1"; +if (!empty($_GET['pagLista']) && ($_GET['pagLista'] > 0)) { + $pagLista = $_GET['pagLista']; } + // Vemos si tiene pedidos if(count($listadePedidos)==0){ echo "no tiene solicitudes de oferta"; @@ -172,7 +171,6 @@ if(count($listadePedidos)==0){ echo ''; echo ''.$pedidoAct->getValor("empleados").''; - echo ''.$pedidoAct->dameNumCand("Aceptado").''; echo ""; } // Comprobamos si tenemos que mostar una paginación diff --git a/src/ver_oferta.php b/src/ver_oferta.php new file mode 100644 index 0000000..5154dcc --- /dev/null +++ b/src/ver_oferta.php @@ -0,0 +1,271 @@ +getItem("constantes"); +$mostrarTabla = $constantes['candPagina']; +$altoScroll = 83 / 2 * $mostrarTabla; +?> + +getMensaje($_GET["msgSem"]); + echo "
    " . $mensajeSemaforo . "
    "; +} + + + +$action = (isset($_GET['action']) && ($_GET['action'] != "")) ? $_GET['action'] : ""; + +if (!empty($action)) { + $error = false; + $mensaje = ""; + + switch ($action) { + case "aceptar": + if (!empty($_GET['idCand'])) { + try { + $idCand = $_GET['idCand']; + $estado = $oferta->colocarCandidato($idCand); + + if ($estado) { + $tipo = "ok"; + $mensaje = "El candidato se ha asignado a la oferta"; + } else { + $tipo = "error"; + $mensaje = "No se ha podido asignar el candidato a la oferta"; + } + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } else { + $tipo = "error"; + $mensaje = $locale['1053']; + } + + break; + + + case "cambEst": if (!empty($_GET['idEst'])) { + $idEstado = $_GET['idEst']; + try { + $camb = $oferta->transita($idEstado, ""); + if ($camb) { + $tipo = "ok"; + $mensaje = $locale['1072']; + } else { + $tipo = "error"; + $mensaje = $locale['1073']; + } + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } + break; + default: $error = true; + $mensaje = $locale['1057']; + break; + } + if ($mensaje != "") { + // Mostramos el mensaje + echo "
    " . $mensaje . "
    "; + } +} + + + +if (($oferta->getValor("estado") == 110) || ($oferta->getValor("estado") == 120)) { + echo $html->menuOfertas($usuario, array("")); +} else + echo $html->menuOfertas($usuario, "gestionar"); +?> + +

    getValor("nombre"); ?>

    + +" . $locale['1061'] . "
    "; + break; + default: + break; + } +} else { + $mensaje = ""; +} +echo $mensaje; +?> + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    getValor("referencia"); ?>
    getValor("nombre_solicitud"); ?>
    getValor("nombre_estado"); ?> +
    +
    &action=cambEstObs" method="post" > + + +
    +
    + getValor("msgEstado") != "") { + echo " -> " . $oferta->getValor("msgEstado"); + } + echo "
    "; + $estadosSiguientes = $oferta->getSiguientes(); + foreach ($estadosSiguientes as $codEstado => $nombreEstado) { + ?> + &action=cambEst&idEst='" + style="width:200px; margin-bottom:5px">
    + +
    getValor("nombre_candidato")); ?>
    getValor("observaciones")); ?>
    +
    + +
    + +getValor("estado") == 110)) { +?> + + getCandidatosDisponibles()->getCandidatos(); + if (!empty($listaCandidatos)) { + ?> + + + + + + + + + + + + + +
    +

    Candidatos disponibles

    + + + + + + + + + + + + "; + $final = count($listaCandidatos); + for ($i = 0; $i < $final; $i++) { + $candidato = $listaCandidatos[$i]; + ?> + + + + + + + + + + + + + +
    + getValor("candidato"); + if (!empty($candActual)) { + echo "getValor("oid")."&action=aceptar&idCand=".$candidato->getValor("oid")."')\">"; + } + else { + echo ""; + } + ?> + + + + + " target=popup onclick=window.open('', 'popup', ',',',',',',',','width = 600, height = 800')>getValor("nombre") . " " . $candidato->getValor("apellidos"); ?> + + getPerfiles(); + $keylocalidades = array_values($perfiles); + // Mostramos la lista para borrar + foreach ($perfiles as $nombre => $valor) { + echo "- " . $nombre . "
    "; + } + ?> +
    getValor("nombre_estado"); ?>getValor("oid")); + if (gettype($tecnologias) != "NULL") { + foreach ($tecnologias as $tecno) { + echo $tecno . ","; + } + } + ?> getValor("oid")); + if (gettype($idiomas) != "NULL") { + foreach ($idiomas as $tecno) { + echo $tecno . ","; + } + } + ?>
    +
    paginacion($numPaginas, $pagAcept, "pedido.php", "idPedido=" . $oferta->getValor("oid"), "pagAcept"); ?>
    +

    + +
    + + + diff --git a/src/ver_pedido.php b/src/ver_pedido.php index 30ab23e..7134b59 100644 --- a/src/ver_pedido.php +++ b/src/ver_pedido.php @@ -1,731 +1,381 @@ getValor("gerente")!=$usuario->getValor("oid")) - && !$usuario->tieneRol("4") - && !$usuario->tieneRol("1")){ - header("Location: aplicacion.php?e=permiso"); - exit; +if (($pedido->getValor("gerente") != $usuario->getValor("oid")) + && !$usuario->tieneRol("4") + && !$usuario->tieneRol("1")) { + header("Location: aplicacion.php?e=permiso"); + exit; } include_once("html/cabecera.php"); include_once("Objects/Administracion.php"); -$administracion=new Administracion($usuario,$locale); -$constantes=$administracion->getItem("constantes"); +$administracion = new Administracion($usuario, $locale); +$constantes = $administracion->getItem("constantes"); $mostrarTabla = $constantes['candPagina']; -$altoScroll=83/2 * $mostrarTabla; +$altoScroll = 83 / 2 * $mostrarTabla; ?> + + getMensaje($_GET["msgSem"]); - echo "
    ".$mensajeSemaforo."
    "; +if (isset($_GET["msgSem"]) && ($_GET["msgSem"] != "")) { + $mensajeSemaforo = $semaforo->getMensaje($_GET["msgSem"]); + echo "
    " . $mensajeSemaforo . "
    "; } - -/* PROYECTOS.PHP */ - -//menu_pedidos(""); -// MEN� -if($pedido->getValor("estado")==40){ - echo $html->menuPedidos($usuario,array("gestionar")); -} elseif (!$usuario->tieneRol("3")) { - echo $html->menuPedidos($usuario,array("gestionar")); - }else - echo $html->menuPedidos($usuario,""); - -// Comprobamos mensajes que pueden llegar hasta aqui -if (isset($_GET["msg"])) { - switch ($_GET['msg']) { - case "1": $mensaje="
    ".$locale['1061']."
    "; - break; - default: - break; - } -} else { - $mensaje = ""; -} - ?> - -

    getValor("nombre"); ?>

    -aceptarCandidato($_GET['idCand']); - if($estado){ - $tipo="ok"; - $mensaje=$locale['1055']; - }else{ - $tipo="error"; - $mensaje=$locale['1053']; - } - } catch (Exception $e){ - $mensaje=$e->getMessage(); - $tipo="error"; - } - } else { - $tipo="error"; - $mensaje=$locale['1053']; - } +if ($action != "") { + $error = false; + $mensaje = ""; + switch ($action) { + case "aceptar": if ($_GET['idCand'] != "") { + try { + $estado = $pedido->aceptarCandidato($_GET['idCand']); + if ($estado) { + $tipo = "ok"; + $mensaje = $locale['1055']; + } else { + $tipo = "error"; + $mensaje = $locale['1053']; + } + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } else { + $tipo = "error"; + $mensaje = $locale['1053']; + } - break; - case "dell": if($_GET['idCand']!=""){ - try{ - $estado=$pedido->rechazarCandidato($_GET['idCand']); - if($estado){ - $tipo="ok"; - $mensaje=$locale['1056']; - }else{ - $tipo="error"; - $mensaje=$locale['1054']; - } - } catch (Exception $e){ - $mensaje=$e->getMessage(); - $tipo="error"; - } - } else { - $tipo="error"; - $mensaje=$locale['1053']; - } + break; + case "dell": if ($_GET['idCand'] != "") { + try { + $estado = $pedido->rechazarCandidato($_GET['idCand']); + if ($estado) { + $tipo = "ok"; + $mensaje = $locale['1056']; + } else { + $tipo = "error"; + $mensaje = $locale['1054']; + } + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } else { + $tipo = "error"; + $mensaje = $locale['1053']; + } - break; - case "cambEst": if($_GET['idEst']!=""){ - try{ - $camb=$pedido->transita($_GET['idEst'], ""); - if($camb){ - $tipo="ok"; - $mensaje=$locale['1072']; - }else{ - $tipo="error"; - $mensaje=$locale['1073']; - } - } catch (Exception $e){ - $mensaje=$e->getMessage(); - $tipo="error"; - } - } - break; - case "cambEstObs": if($_POST['idEstado']!=""){ - try{ - $camb=$pedido->transita($_POST['idEstado'], $_POST['txtObsCamb']); - if($camb){ - $tipo="ok"; - $mensaje=$locale['1087']; - }else{ - $tipo="error"; - $mensaje=$locale['1088']; - } - } catch (Exception $e){ - $mensaje=$e->getMessage(); - $tipo="error"; - } - } - break; - case "addComent": if(($_POST['obs']!="") && ($_POST['idCandidato']!="")){ - // Agregamso comentario al candidato sobre el pedido - try{ - $pedido->addComentarioPropuesta($_POST['idCandidato'],$_POST['obs']); - $mensaje=$locale['4047']; - $tipo="ok"; - } catch(Exception $e){ - $mensaje=$e->getMessage(); - $tipo="error"; - } - } - break; - default: $error=true; - $mensaje=$locale['1057']; - break; - } -if($mensaje!=""){ - // Mostramos el mensaje - echo "
    ".$mensaje."
    "; -} + break; + case "cambEst": if ($_GET['idEst'] != "") { + try { + $camb = $pedido->transita($_GET['idEst'], ""); + if ($camb) { + $tipo = "ok"; + $mensaje = $locale['1072']; + } else { + $tipo = "error"; + $mensaje = $locale['1073']; + } + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } + break; + case "cambEstObs": if ($_POST['idEstado'] != "") { + try { + $camb = $pedido->transita($_POST['idEstado'], $_POST['txtObsCamb']); + if ($camb) { + $tipo = "ok"; + $mensaje = $locale['1087']; + } else { + $tipo = "error"; + $mensaje = $locale['1088']; + } + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } + break; + case "addComent": if (($_POST['obs'] != "") && ($_POST['idCandidato'] != "")) { + // Agregamso comentario al candidato sobre el pedido + try { + $pedido->addComentarioPropuesta($_POST['idCandidato'], $_POST['obs']); + $mensaje = $locale['4047']; + $tipo = "ok"; + } catch (Exception $e) { + $mensaje = $e->getMessage(); + $tipo = "error"; + } + } + break; + default: $error = true; + $mensaje = $locale['1057']; + break; + } + if ($mensaje != "") { + // Mostramos el mensaje + echo "
    " . $mensaje . "
    "; + } } ?> - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - + + + +getValor("estado") == 130) { + echo $html->menuPedidos($usuario, array("gestionar", "nueva_oferta")); +} elseif (!$usuario->tieneRol("3")) { + echo $html->menuPedidos($usuario, array("gestionar")); +} else + echo $html->menuPedidos($usuario, ""); +?> + +

    getValor("nombre"); ?>

    + +" . $locale['1061'] . ""; + break; + default: + break; + } +} else { + $mensaje = ""; +} +echo $mensaje; +?> + +
    getValor("fecha")); ?>getValor("prioridad")); ?> - getPerfiles(); - if(count($perfiles)>0){ - foreach($perfiles as $nombre => $codigo){ - echo $nombre."
    "; - } - } else { - ?> - - -
    getValor("nombre_cliente");?>
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    getValor("fecha")); ?>getValor("prioridad")); ?> + getPerfiles(); + if (count($perfiles) > 0) { + foreach ($perfiles as $nombre => $codigo) { + echo $nombre . "
    "; + } + } else { + ?> + + +
    getValor("nombre_cliente"); ?>
    getValor("duracion"); ?>getValor("empleados"); ?>getValor("nombre_gerente"); ?>getValor("nombre_salario_min") . " - " . $pedido->getValor("nombre_salario_max"); ?>
    getValor("nombre_estado"); ?> +
    +
    &action=cambEstObs" method="post" > + + +
    +
    + getValor("msgEstado") != "") { + echo " -> " . $pedido->getValor("msgEstado"); + } + echo "
    "; + $estadosSiguientes = $pedido->getSiguientes(); + foreach ($estadosSiguientes as $codEstado => $nombreEstado) { + // En estados 50 se necesita mensaj obs + if ($codEstado == "50") { + ?> + ','','txt')" style="margin-bottom:5px"> + + &action=cambEst&idEst='" style="width:200px; margin-bottom:5px">
    + +
    getIdiomas(); + if (count($idiomas) > 0) { + foreach ($idiomas as $nombre => $codigo) { + echo $nombre . "
    "; + } + } else { + ?> + getValor("pesoIdioma") > 0) + echo $locale['1097']; ?>
    +
    getTecnologias(); + if (count($tecnologias) > 0) { + foreach ($tecnologias as $nombre => $codigo) { + echo $nombre . "
    "; + } + } else { + ?> + getValor("pesoTecno") > 0) + echo $locale['1097']; ?>
    +
    getProvincias(); + if (count($tecnologias) > 0) { + foreach ($tecnologias as $nombre => $codigo) { + echo $nombre . "
    "; + } + } else { + ?> + +
    + getValor("pesoTecno") . "% ) - "; + echo $locale['1079'] . "( " . $pedido->getValor("pesoIdioma") . "% ) - "; + echo $locale['1080'] . "( " . $pedido->getValor("pesoPerfil") . "% )"; + ?>
    getValor("observaciones")); ?>
    +
    + +
    + +

    + + + + + + + + + - - - - - - - - - + + + getValor("oid"); + + // sacado de http://patrickallaert.blogspot.com/2007/09/building-dynamic-sql-queries-elegant.html + $cond = array(); + $cond[] = "pedido = '$oidPedido'"; + + $orden = array(); + $orden[] = "referencia"; + + $listaOfertas = new ListaOfertas($usuario, $cond, $orden); + $ofertas = $listaOfertas->getOfertas(); + +// Vemos si tiene ofertas +$totalOfertas = count($ofertas); +if ($totalOfertas == 0) { + echo ""; +} else { + for ($i = 0; $i < $totalOfertas; $i++) { + $ofertaAct = $ofertas[$i]; + + echo ""; + + /*if (($ofertaAct->getValor("gerente") == $usuario->getValor("oid")) || $usuario->tieneRol("1")) { + // Es el gerente de ese pedido, puede editarlo y eliminarlo + echo ''; + echo ""; + } else { + // No es el gerente no puede ni editarlo ni eliminarlo + echo ''; + }*/ + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ""; + } +} +?> +
    getValor("duracion");?>getValor("empleados");?>getValor("nombre_gerente");?>getValor("nombre_salario_min")." - ".$pedido->getValor("nombre_salario_max");?>
    Esta solicitud no tiene ofertas
    getValor("oid") . "') >'.$ofertaAct->getValor("referencia").'' . $ofertaAct->getValor("fecha") . '' . $ofertaAct->getValor("nombre_estado") . '' . $ofertaAct->getValor("nombre_candidato") . '
    +
    + + + + - - - - - - - - - - - - - - - - - - -

    + +
    getValor("nombre_estado");?> -
    -
    &action=cambEstObs" method="post" > - - -
    -
    - getValor("msgEstado")!=""){ - echo " -> ".$pedido->getValor("msgEstado"); - } - echo "
    "; - $estadosSiguientes=$pedido->getSiguientes(); - foreach($estadosSiguientes as $codEstado => $nombreEstado){ - // En estados 50 se necesita mensaj obs - if($codEstado=="50"){ - ?> - ','','txt')" style="margin-bottom:5px"> - - &action=cambEst&idEst='" style="width:200px; margin-bottom:5px">
    - -
    getIdiomas(); - if(count($idiomas)>0){ - foreach($idiomas as $nombre => $codigo){ - echo $nombre."
    "; - } - } else { - ?> - getValor("pesoIdioma") > 0) echo $locale['1097'];?>
    -
    getTecnologias(); - if(count($tecnologias)>0){ - foreach($tecnologias as $nombre => $codigo){ - echo $nombre."
    "; - } - } else { - ?> - getValor("pesoTecno") > 0) echo $locale['1097'];?>
    -
    getProvincias(); - if(count($tecnologias)>0){ - foreach($tecnologias as $nombre => $codigo){ - echo $nombre."
    "; - } - } else { - ?> - -
    - getValor("pesoTecno")."% ) - "; - echo $locale['1079']."( ".$pedido->getValor("pesoIdioma")."% ) - "; - echo $locale['1080']."( ".$pedido->getValor("pesoPerfil")."% )"; - - ?>
    getValor("observaciones")); ?>
    -
    - -

    - - - - - - - - - - - - - - getCandidatosAceptados(); - if(gettype($listaCandidatos)=="NULL"){ - ?> - - - - - "; - /*if(count($listaCandidatos)<$mostrarTabla) - echo ""; - else - echo ""; - */ - $final=count($listaCandidatos); - for($i=0;$i<$final;$i++){ - $candidato=$listaCandidatos[$i]; - ?> - - - - - - - - - - - - - -
    - ')" ondblclick="ocultarCapa('obs-getValor("oid"); ?>')"> - getValor("obsRRHH")!=""))? "css/coment.png" : "css/add_coment.png"; ?>" /> -
    " class="capaObs" onmouseover="mostrarCapa('obs-getValor("oid"); ?>')"> - ')" style="padding:2px 10px 2px 0px "> - - - - - - - - - -
    Comentario de RRHHComentario del Gerente
    -
    - - "> - - -
    -
    -
    - " target=popup onclick=window.open('', 'popup', ',',',',',',',','width = 600, height = 800')>getValor("nombre")." ".$candidato->getValor("apellidos"); ?>
      - getPerfiles(); - $keylocalidades=array_values($perfiles); - // Mostramos la lista para borrar - foreach ($perfiles as $nombre =>$valor) { - echo "- ".$nombre."
    "; - } - ?> -
     getValor("estado_usuario"); ?> getValor("fecha"); ?> getValor("oid")); - if(gettype($tecnologias)!="NULL"){ - foreach($tecnologias as $tecno){ - echo $tecno.","; - } - } - ?> getValor("oid")); - if(gettype($idiomas)!="NULL"){ - foreach($idiomas as $tecno){ - echo $tecno.","; - } - } - ?> getValor("afinidad"); ?>&action=dell&idCand=getValor("oid"); ?>" > -
    -
    paginacion($numPaginas, $pagAcept,"pedido.php","idPedido=".$pedido->getValor("oid"),"pagAcept"); ?>
    -
    - -

    - - - - - - - - - - - - - - getCandidatosPropuestosRRHH(); - if(gettype($listaCandidatos)=="NULL"){ - ?> - - - - - "; - /*if(count($listaCandidatos)<$mostrarTabla) - echo ""; - else - echo ""; - */ - $final=count($listaCandidatos); - for($i=0;$i<$final;$i++){ - $candidato=$listaCandidatos[$i]; - ?> - - - - - - - - - - - - - - -
      - ')" ondblclick="ocultarCapa('obs-getValor("oid"); ?>')"> - getValor("obsRRHH")!=""))? "css/coment.png" : "css/add_coment.png"; ?>" /> -
    " class="capaObs" onmouseover="mostrarCapa('obs-getValor("oid"); ?>')"> - ')" style="padding:2px 10px 2px 0px "> - - - - - - - - - -
    Comentario de RRHHComentario del Gerente
    -
    - - "> - - -
    -
    -
    - " target=popup onclick=window.open('', 'popup', ',',',',',',',','width = 600, height = 800')>getValor("nombre")." ".$candidato->getValor("apellidos"); ?>
      - getPerfiles(); - $keylocalidades=array_values($perfiles); - // Mostramos la lista para borrar - foreach ($perfiles as $nombre =>$valor) { - echo "- ".$nombre."
    "; - } - ?> -
     getValor("estado_usuario"); ?> getValor("fecha"); ?> getValor("oid")); - if(gettype($tecnologias)!="NULL"){ - foreach($tecnologias as $tecno){ - echo $tecno.","; - } - } - ?> getValor("oid")); - if(gettype($idiomas)!="NULL"){ - foreach($idiomas as $tecno){ - echo $tecno.","; - } - } - ?> getValor("afinidad"); ?> - &action=aceptar&idCand=getValor("oid"); ?>" > - &action=dell&idCand=getValor("oid"); ?>" > -
    -
    - -

    - - - - - - - - - - - - - - getCandidatosPropuestos(); - if(gettype($listaCandidatos)=="NULL"){ - ?> - - - - - "; - /*if(count($listaCandidatos)<$mostrarTabla) - echo ""; - else - echo ""; - */ - $final=count($listaCandidatos); - for($i=0;$i<$final;$i++){ - $candidato=$listaCandidatos[$i]; - ?> - - - - - - - - - - - - - -
      - ')" ondblclick="ocultarCapa('obs-getValor("oid"); ?>')"> - getValor("obsRRHH")!=""))? "css/coment.png" : "css/add_coment.png"; ?>" /> -
    " class="capaObs" onmouseover="mostrarCapa('obs-getValor("oid"); ?>')"> - ')" style="padding:2px 10px 2px 0px "> - - - - - - - - - -
    Comentario de RRHHComentario del Gerente
    -
    - - "> - - -
    -
    -
    - " target=popup onclick=window.open('', 'popup', ',',',',',',',','width = 600, height = 800')>getValor("nombre")." ".$candidato->getValor("apellidos"); ?>
    - getPerfiles(); - $keylocalidades=array_values($perfiles); - // Mostramos la lista para borrar - foreach ($perfiles as $nombre =>$valor) { - echo "- ".$nombre."
    "; - } - ?> -
     getValor("estado_usuario"); ?> getValor("fecha"); ?> getValor("oid")); - if(gettype($tecnologias)!="NULL"){ - foreach($tecnologias as $tecno){ - echo $tecno.","; - } - } - ?> getValor("oid")); - if(gettype($idiomas)!="NULL"){ - foreach($idiomas as $tecno){ - echo $tecno.","; - } - } - ?> getValor("afinidad"); ?> - &action=aceptar&idCand=getValor("oid"); ?>" > - &action=dell&idCand=getValor("oid"); ?>" > -
    -
    - - -

    - - - - - - - - - - - - - - getCandidatosRechazados(); - if(gettype($listaCandidatos)=="NULL"){ - ?> - - - - - "; - /*if(count($listaCandidatos)<$mostrarTabla) - echo ""; - else - echo ""; - */ - $final=count($listaCandidatos); - for($i=0;$i<$final;$i++){ - $candidato=$listaCandidatos[$i]; - ?> - - - - - - - - - - - - - -
      - ')" ondblclick="ocultarCapa('obs-getValor("oid"); ?>')"> - getValor("obsRRHH")!=""))? "css/coment.png" : "css/add_coment.png"; ?>" /> -
    " class="capaObs" onmouseover="mostrarCapa('obs-getValor("oid"); ?>')"> - ')" style="padding:2px 10px 2px 0px "> - - - - - - - - - -
    Comentario de RRHHComentario del Gerente
    -
    - - "> - - -
    -
    -
    - " target=popup onclick=window.open('', 'popup', ',',',',',',',','width = 600, height = 800')>getValor("nombre")." ".$candidato->getValor("apellidos"); ?>
      - getPerfiles(); - $keylocalidades=array_values($perfiles); - // Mostramos la lista para borrar - foreach ($perfiles as $nombre =>$valor) { - echo "- ".$nombre."
    "; - } - ?> -
     getValor("estado_usuario"); ?> getValor("fecha"); ?> getValor("oid")); - if(gettype($tecnologias)!="NULL"){ - foreach($tecnologias as $tecno){ - echo $tecno.","; - } - } - ?> getValor("oid")); - if(gettype($idiomas)!="NULL"){ - foreach($idiomas as $tecno){ - echo $tecno.","; - } - } - ?> getValor("afinidad"); ?> - &action=aceptar&idCand=getValor("oid"); ?>" > -
    - -

    - -