1288 lines
38 KiB
PHP
1288 lines
38 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<73>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 tecnolog<6F>as*/
|
|||
|
|
private $listaTecnologias = null;
|
|||
|
|
|
|||
|
|
/* Lista de idiomas*/
|
|||
|
|
private $listaIdiomas = null;
|
|||
|
|
|
|||
|
|
/* Lista de provincias*/
|
|||
|
|
private $listaProvincias = null;
|
|||
|
|
|
|||
|
|
/* Par<61>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<EFBFBD>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<EFBFBD>mero de candidatos asociados al pedido.
|
|||
|
|
* @param tipo - estado del candidato en el pedido.
|
|||
|
|
* @return n<EFBFBD>mero de candidatos asociados a ese pedido.
|
|||
|
|
*/
|
|||
|
|
function dameNumCand($tipo){
|
|||
|
|
//PERMISOS:
|
|||
|
|
/*
|
|||
|
|
* Admin (1) - Todos
|
|||
|
|
* Selecci<EFBFBD>n (4) - Todos
|
|||
|
|
* Gestor (3) - Los suyos
|
|||
|
|
* Otro - Excepci<EFBFBD>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<EFBFBD>adir campos al pedido.
|
|||
|
|
* @param array - datos a a<EFBFBD>adir al pedido.
|
|||
|
|
*/
|
|||
|
|
private function parseaArray($array){
|
|||
|
|
foreach($array as $campo){
|
|||
|
|
//echo "$campo<br>";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Procesa el resultado de una query para a<EFBFBD>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<61>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<EFBFBD>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<6F>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<EFBFBD>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){
|
|||
|
|
$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<73> 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<6F>ticamente el estado del pedido
|
|||
|
|
switch ($estado) {
|
|||
|
|
case 10:
|
|||
|
|
if($actuales >= $necesarios){
|
|||
|
|
$this->transita(20, "");
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$estadoC = $usuario->getValor("estado");
|
|||
|
|
//Actualizo autom<6F>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<61>
|
|||
|
|
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<61>
|
|||
|
|
}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<6F>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<6F>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<EFBFBD>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 provincias asociadas al pedido.
|
|||
|
|
*/
|
|||
|
|
function getProvincias(){
|
|||
|
|
if($this->listasProvincias == 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->listasProvincias = $bd->keyValueQuery($consulta, "id", "provincia");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->listasProvincias;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
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();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Asocia una nueva tecnolog<EFBFBD>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 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<EFBFBD>n entre una tecnolog<EFBFBD>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<EFBFBD>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<EFBFBD>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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 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<73> 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();
|
|||
|
|
$perfilPedido = $this->getValor("perfil");
|
|||
|
|
$perfilUsuario = $usuario->getPerfiles();
|
|||
|
|
$provinciasPedido = $this->getProvincias();
|
|||
|
|
$provinciasDeseadas = $usuario->getProvinciasDeseadas();
|
|||
|
|
$afinidad = new Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido,
|
|||
|
|
$tecnologiasUsuario, $perfilPedido, $perfilUsuario, $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<65>a entrar aqu<71>.
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
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<EFBFBD>mero de empleados del pedido.
|
|||
|
|
|
|||
|
|
PRECONDICIONES:
|
|||
|
|
- Comprobar que el n<EFBFBD>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<EFBFBD>mero de empleados del pedido.
|
|||
|
|
|
|||
|
|
PRECONDICIONES:
|
|||
|
|
- Comprobar que el n<EFBFBD>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<EFBFBD>n a No contratado
|
|||
|
|
* Admin, Gestor
|
|||
|
|
SE LLEGA DESDE:
|
|||
|
|
- La vista del pedido al pulsar el bot<EFBFBD>n de <EFBFBD>Cambiar a No contratado<EFBFBD>.
|
|||
|
|
|
|||
|
|
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<EFBFBD>n a Contratado.
|
|||
|
|
* Admin, Gestor
|
|||
|
|
SE LLEGA DESDE:
|
|||
|
|
- La vista del pedido, al pulsar el bot<EFBFBD>n de <EFBFBD>Cambiar a cerrado<EFBFBD>.
|
|||
|
|
|
|||
|
|
PRECONDICIONES:
|
|||
|
|
|
|||
|
|
- Todos los candidatos aceptados est<EFBFBD>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<EFBFBD>
|
|||
|
|
una alarma en forma de correo electr<EFBFBD>nico al personal de recursos humanos para que le incorpore.
|
|||
|
|
|
|||
|
|
*/
|
|||
|
|
private function ejecutar3040(){
|
|||
|
|
$lista = $this->getCandidatosAceptados();
|
|||
|
|
$ok = true;
|
|||
|
|
|
|||
|
|
//Si encontramos alg<6C>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<63>n.
|
|||
|
|
$asunto = "Solicitud de contrataci<63>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<63>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<EFBFBD>n de <EFBFBD>Cambiar a pendiente<EFBFBD>.
|
|||
|
|
|
|||
|
|
POSTCONDICIONES:
|
|||
|
|
- Crea un nuevo pedido con los mismos datos cambiando el c<EFBFBD>digo y lo pone en <EFBFBD>Pendiente<EFBFBD>.
|
|||
|
|
- Calcula las afinidades para ese nuevo pedido que est<EFBFBD> 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.'. <20>Desea visualizar el nuevo pedido?")) {
|
|||
|
|
// // Respuesta afirmativa...
|
|||
|
|
// document.location="pedido.php?idPedido='.$id.'";
|
|||
|
|
// }
|
|||
|
|
// -->
|
|||
|
|
// </script>';
|
|||
|
|
$this->calculaAfinidad();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* A<EFBFBD>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<EFBFBD>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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
?>
|