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 '
';
}
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 '";
+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
';
+}
+
+
/* 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 '