git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk/src@25 e2b1556b-49f8-d141-9351-52d6861a72d9
1376 lines
40 KiB
PHP
1376 lines
40 KiB
PHP
<?php
|
|
/*
|
|
* Clase Pedido
|
|
*/
|
|
|
|
include_once("BD.php");
|
|
include_once("CandidatoPedido.php");
|
|
include_once("Candidato.php");
|
|
include_once("Empleado.php");
|
|
include_once("Afinidad.php");
|
|
include_once("Automata.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();
|
|
|
|
/* Lista de candidatos propuestos*/
|
|
private $listaPropuestos = null;
|
|
|
|
/* Lista de candidatos propuestos por RRHH*/
|
|
private $listaPropuestosRRHH = null;
|
|
|
|
/* Lista de candidatos aceptados*/
|
|
private $listaAceptados = null;
|
|
|
|
/* Lista de candidatos rechazados*/
|
|
private $listaRechazados = 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");
|
|
|
|
/* Booleano que indica si el cambio de un campo lo hace por razones automáticas y dejar realizar
|
|
* el camio */
|
|
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 del pedido.";
|
|
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<br>";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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 el pedido.";
|
|
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 el pedido $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 el pedido $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(){
|
|
$historial = "";
|
|
$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";
|
|
}
|
|
|
|
return $historial;
|
|
}
|
|
|
|
function getSiguientes(){
|
|
$estado = $this->getValor("estado");
|
|
$idioma = $this->usuario->getValor("idioma");
|
|
$rol = $this->usuario->getValor("rol");
|
|
$a = new Automata("pedidos", $idioma, $rol);
|
|
$siguientes = $a->getSiguientes($estado);
|
|
return $siguientes;
|
|
}
|
|
|
|
function transita($destino, $argumentos){
|
|
$origen = $this->getValor("estado");
|
|
$idioma = $this->usuario->getValor("idioma");
|
|
$rol = $this->usuario->getValor("rol");
|
|
$a = new Automata("pedidos", $idioma, $rol);
|
|
$transita = $a->getTransicion($origen,$destino);
|
|
|
|
if(($transita == "") || !($transita >= 0)){
|
|
return false;
|
|
}else{
|
|
$res = $this->ejecutaTransicion($transita, $argumentos);
|
|
if($res){
|
|
$this->setAutomatico=true;
|
|
$this->setCampo("msgEstado", $argumentos);
|
|
$this->setCampo("estado", $destino);
|
|
$this->setAutomatico=false;
|
|
}
|
|
return $res;
|
|
}
|
|
}
|
|
|
|
private function ejecutaTransicion($codigo, $argumentos){
|
|
//Si no hace nada al transitar salimos sin más.
|
|
if($codigo == 0) return true;
|
|
$funcion = "ejecutar$codigo";
|
|
$res = call_user_func(array("Pedido", $funcion), $argumentos);
|
|
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* Pendiente a asignado
|
|
* Admin, Gestor
|
|
SE LLEGA DESDE:
|
|
- Al aceptar al candidato (pedido.aceptar).
|
|
- Editar el número de empleados del pedido.
|
|
|
|
PRECONDICIONES:
|
|
- Comprobar que el número de candidatos aceptados es mayor o igual que el de candidatos necesarios.
|
|
|
|
POSTCONDICIONES:
|
|
- Ninguna.
|
|
*/
|
|
private function ejecutar1020(){
|
|
$necesarios = $this->getValor("empleados");
|
|
$actuales = count($this->listaAceptados);
|
|
|
|
//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;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Asignado a Pendiente
|
|
* Admin, Gestor
|
|
SE LLEGA DESDE:
|
|
- Al rechazar al candidato (pedido.rechazar).
|
|
- Editar el número de empleados del pedido.
|
|
|
|
PRECONDICIONES:
|
|
- Comprobar que el número de candidatos aceptados es menor que el de candidatos necesarios.
|
|
|
|
POSTCONDICIONES:
|
|
- Ninguna.
|
|
*/
|
|
private function ejecutar2010(){
|
|
$necesarios = $this->getValor("empleados");
|
|
$actuales = count($this->listaAceptados);
|
|
|
|
//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 este pedido";
|
|
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 = "<a href='".$path."/detalle_candidato.php?oid=".$oid."'>".$nombre."</a>";
|
|
$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 el pedido 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 '<script type="text/javascript">
|
|
// <!--
|
|
// if (confirm("Se acaba de crear un nuevo pedido con el codigo:'.$id.'. ¿Desea visualizar el nuevo pedido?")) {
|
|
// // Respuesta afirmativa...
|
|
// document.location="pedido.php?idPedido='.$id.'";
|
|
// }
|
|
// -->
|
|
// </script>';
|
|
$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;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
?>
|