diff --git a/src/Objects/Afinidad.php b/src/Objects/Afinidad.php index 38f66b4..d0047b6 100644 --- a/src/Objects/Afinidad.php +++ b/src/Objects/Afinidad.php @@ -26,10 +26,10 @@ private $tecnologiasUsuario; /* Perfil que requiere el pedido. */ - private $perfilPedido; + private $perfilesPedido; /* Perfiles que posee el usuario. */ - private $perfilUsuario; + private $perfilesUsuario; /* Provincias donde se desarrollará el proyecto del pedido. */ private $provinciasPedido; @@ -39,13 +39,13 @@ //Constructores function Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido, - $tecnologiasUsuario, $perfilPedido, $perfilUsuario, $provinciasPedido, $provinciaDeseada){ + $tecnologiasUsuario, $perfilesPedido, $perfilesUsuario, $provinciasPedido, $provinciaDeseada){ $this->idiomasPedido = $idiomasPedido; $this->idiomasUsuario = $idiomasUsuario; $this->tecnologiasPedido = $tecnologiasPedido; $this->tecnologiasUsuario = $tecnologiasUsuario; - $this->perfilPedido = $perfilPedido; - $this->perfilUsuario = $perfilUsuario; + $this->perfilesPedido = $perfilesPedido; + $this->perfilesUsuario = $perfilesUsuario; $this->provinciasPedido = $provinciasPedido; $this->provinciaDeseada = $provinciaDeseada; @@ -59,7 +59,11 @@ * @param pedido - pedido para el que calcular la afinidad. */ function calculaAfinidad($pI, $pP, $pT){ - + $vL = 0; + $vI = 0; + $vP = 0; + $vT = 0; + //Si no coincide alguna provincia deseada no nos vale. if($this->provinciasPedido != ""){ foreach($this->provinciasPedido as $provincia){ @@ -74,8 +78,8 @@ $afi = 0; //Afinidad con los perfiles: - if(count($this->perfilUsuario) > 0){ - if(in_array($this->perfilPedido, $this->perfilUsuario)){ + if(count($this->perfilesUsuario) > 0){ + if(in_array($this->perfilesPedido, $this->perfilesUsuario)){ $vP = 1; } } diff --git a/src/Objects/ListaPedido.php b/src/Objects/ListaPedido.php index a8287b2..b969b92 100644 --- a/src/Objects/ListaPedido.php +++ b/src/Objects/ListaPedido.php @@ -177,7 +177,7 @@ include_once("Objects/Pedido.php"); //Calculamos el id $id = $this->calculaIdProyecto($campos["procedencia"], $campos["cliente"]); $inserto = "oid, fecha"; - $fecha = "'".date(Y."-".m."-".d)."'"; + $fecha = "'".date("Y-m-d")."'"; $valores = "$id, $fecha"; //Procesamos los datos diff --git a/src/Objects/Pedido.php b/src/Objects/Pedido.php index 66a9cf9..6194843 100644 --- a/src/Objects/Pedido.php +++ b/src/Objects/Pedido.php @@ -33,6 +33,9 @@ include_once("Automata.php"); /* Lista de candidatos rechazados*/ private $listaRechazados = null; + /* Lista de perfiles*/ + private $listaPerfiles = null; + /* Lista de tecnologías*/ private $listaTecnologias = null; @@ -306,6 +309,8 @@ include_once("Automata.php"); * 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(); @@ -660,18 +665,32 @@ include_once("Automata.php"); 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->listasProvincias == null){ + 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->listasProvincias = $bd->keyValueQuery($consulta, "id", "provincia"); + $this->listaProvincias = $bd->keyValueQuery($consulta, "id", "provincia"); } - return $this->listasProvincias; + return $this->listaProvincias; } function addTecnologias($array){ @@ -696,6 +715,15 @@ include_once("Automata.php"); $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. */ @@ -748,6 +776,32 @@ include_once("Automata.php"); 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. */ @@ -873,6 +927,40 @@ include_once("Automata.php"); 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. @@ -904,12 +992,12 @@ include_once("Automata.php"); $idiomasUsuario = $usuario->getidiomas(); $tecnologiasPedido = $this->getTecnologias(); $tecnologiasUsuario = $usuario->getTecnologias(); - $perfilPedido = $this->getValor("perfil"); - $perfilUsuario = $usuario->getPerfiles(); + $perfilesPedido = $this->getPerfiles(); + $perfilesUsuario = $usuario->getPerfiles(); $provinciasPedido = $this->getProvincias(); $provinciasDeseadas = $usuario->getProvinciasDeseadas(); $afinidad = new Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido, - $tecnologiasUsuario, $perfilPedido, $perfilUsuario, $provinciasPedido, $provinciasDeseadas); + $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())"; diff --git a/src/addPedido.php b/src/addPedido.php index f52e505..3081aee 100644 --- a/src/addPedido.php +++ b/src/addPedido.php @@ -14,105 +14,128 @@ if(!$usuario->tieneRol("3")&&!$usuario->tieneRol("1")){ $errores = array(); // Todas las variables -$nombre=$_POST['nombre']; -$prioridad=$_POST['prioridad']; -$empleados=$_POST['empleados']; -$duracion=$_POST['duracion']; -$clientes=$_POST['clientes']; -$perfil=$_POST['perfil']; -$salario_min=$_POST['salario_min']; -$salario_max=$_POST['salario_max']; -$procedencia=$_POST['procedencia']; -$tecnologias=$_POST['tecnologia']; -$idiomas=$_POST['idiomas']; -$provincias=$_POST['provincias']; -$observaciones=$_POST['observaciones']; -$pesoTec=$_POST['pesoTec']; -$pesoIdi=$_POST['pesoIdi']; -$pesoPer=$_POST['pesoPer']; +if(!empty($_POST)) { + $nombre=$_POST['nombre']; + $prioridad=$_POST['prioridad']; + $empleados=$_POST['empleados']; + $duracion=$_POST['duracion']; + $clientes=$_POST['clientes']; + $perfiles=$_POST['perfil']; + $salario_min=$_POST['salario_min']; + $salario_max=$_POST['salario_max']; + $procedencia=$_POST['procedencia']; + $tecnologias=$_POST['tecnologia']; + $idiomas=$_POST['idiomas']; + $provincias=$_POST['provincias']; + $observaciones=$_POST['observaciones']; + $pesoTec=$_POST['pesoTec']; + $pesoIdi=$_POST['pesoIdi']; + $pesoPer=$_POST['pesoPer']; -if($usuario->tieneRol("1")){ - $gerente=$_POST['gerente']; + + if($usuario->tieneRol("1")){ + $gerente=$_POST['gerente']; + } else { + $gerente=$usuario->getValor("oid"); + } + + if($_POST['action']=="add"){ + // Comprobamos campos obligatorios + if($nombre==""){ + $errores[]= "1"; + } + if(($prioridad=="") ||($empleados=="") || ($duracion=="") || (!($empleados>0)) ||(!($duracion>0))){ + $errores[]= "2"; + } + if($gerente==""){ + $errores[]= "3"; + } + if($clientes==""){ + $errores[]= "4"; + } + if($perfiles==""){ + $errores[]= "5"; + } + if(($salario_min=="") ||($salario_max=="") || ($salario_min>$salario_max)){ + $errores[]= "6"; + } + if($procedencia==""){ + $errores[]= "7"; + } + + if(($pesoTec=="") ||($pesoIdi=="") || ($pesoPer=="") + || !is_numeric($pesoTec) || !is_numeric($pesoIdi) || !is_numeric($pesoPer) + || (!($pesoTec>=0)) ||(!($pesoIdi>=0)) || (!($pesoPer>=0)) + || ($pesoTec + $pesoIdi + $pesoPer != 100)){ + $errores[]="8"; + } + // Si no hay errores insertamos el pedido + if(count($errores)==0){ + include_once("Objects/ListaPedido.php"); + $listaPedidos=new ListaPedido($usuario,"","","0"); + $arrayInsert=array(); + $arrayInsert["nombre"]=$nombre; + $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["observaciones"]=$observaciones; + $arrayInsert["estado"]="10"; + $arrayInsert["pesoIdioma"]=$pesoIdi; + $arrayInsert["pesoPerfil"]=$pesoPer; + $arrayInsert["pesoTecno"]=$pesoTec; + $idPedido=$listaPedidos->addPedido($arrayInsert); + if($idPedido=="-1"){ + // Se he producido un fallo al insertar + $errores[]= "0"; + $msg="No se ha podido agregar el pedido"; + $tipo="error"; + } else { + $pedido=$listaPedidos->buscarPedido($idPedido); + print_r($perfiles); + $pedido->addPerfiles($perfiles); + $pedido->addTecnologias($tecnologias); + $pedido->addIdiomas($idiomas); + $pedido->addProvincias($provincias); + header("Location: pedido.php?idPedido=".$idPedido."&msg=1"); + } + } + } } else { - $gerente=$usuario->getValor("oid"); -} -if($_POST['action']=="add"){ - // Comprobamos campos obligatorios - if($nombre==""){ - $errores[]= "1"; - } - if(($prioridad=="") ||($empleados=="") || ($duracion=="") || (!($empleados>0)) ||(!($duracion>0))){ - $errores[]= "2"; - } - if($gerente==""){ - $errores[]= "3"; - } - if($clientes==""){ - $errores[]= "4"; - } - if($perfil==""){ - $errores[]= "5"; - } - if(($salario_min=="") ||($salario_max=="") || ($salario_min>$salario_max)){ - $errores[]= "6"; - } - if($procedencia==""){ - $errores[]= "7"; - } - - if(($pesoTec=="") ||($pesoIdi=="") || ($pesoPer=="") - || !is_numeric($pesoTec) || !is_numeric($pesoIdi) || !is_numeric($pesoPer) - || (!($pesoTec>=0)) ||(!($pesoIdi>=0)) || (!($pesoPer>=0)) - || ($pesoTec + $pesoIdi + $pesoPer != 100)){ - $errores[]="8"; - } - // Si no hay errores insertamos el pedido - if(count($errores)==0){ - include_once("Objects/ListaPedido.php"); - $listaPedidos=new ListaPedido($usuario,"","","0"); - $arrayInsert=array(); - $arrayInsert["nombre"]=$nombre; - $arrayInsert["prioridad"]= $prioridad; - $arrayInsert["empleados"]=$empleados; - $arrayInsert["duracion"]=$duracion; - $arrayInsert["gerente"]=$gerente; - $arrayInsert["perfil"]=$perfil; - $arrayInsert["cliente"]=$clientes; - $arrayInsert["salario_min"]=$salario_min; - $arrayInsert["salario_max"]=$salario_max; - $arrayInsert["procedencia"]=$procedencia; - $arrayInsert["observaciones"]=$observaciones; - $arrayInsert["estado"]="10"; - $arrayInsert["pesoIdioma"]=$pesoIdi; - $arrayInsert["pesoPerfil"]=$pesoPer; - $arrayInsert["pesoTecno"]=$pesoTec; - $idPedido=$listaPedidos->addPedido($arrayInsert); - if($idPedido=="-1"){ - // Se he producido un fallo al insertar - $errores[]= "0"; - $msg="No se ha podido agregar el pedido"; - $tipo="error"; - } else { - $pedido=$listaPedidos->buscarPedido($idPedido); - $pedido->addTecnologias($tecnologias); - $pedido->addIdiomas($idiomas); - $pedido->addProvincias($provincias); - header("Location: pedido.php?idPedido=".$idPedido."&msg=1"); - } - } + $nombre=""; + $prioridad=""; + $empleados=""; + $duracion=""; + $clientes=""; + $perfiles=array(); + $salario_min=""; + $salario_max=""; + $procedencia=""; + $tecnologias=array(); + $idiomas=array(); + $provincias=array(); + $observaciones=""; + $pesoTec=""; + $pesoIdi=""; + $pesoPer=""; } include("html/cabecera.php"); -if($pesoTec=="") $pesoTec="40"; -if($pesoIdi=="") $pesoIdi="10"; -if($pesoPer=="") $pesoPer="50"; +if ((isset($pesoTec)) && ($pesoTec=="")) $pesoTec="40"; +if ((isset($pesoIdi)) && ($pesoIdi=="")) $pesoIdi="10"; +if ((isset($pesoPer)) && ($pesoPer=="")) $pesoPer="50"; echo $html->menuPedidos($usuario,""); echo "