usuario=$usuario; $this->oid = $oid; $this->locale = $locale; if(($oid == $this->oid) || ($this->usuario->tieneRol(1)) || ($this->usuario->tieneRol(4))){ if($mes < 10){ //Me aseguro de que no tenga cero delante $mes = $mes + 0; //Y le pongo el cero delante. $mes = "0".$mes; } $this->mes=$mes; $this->anio=$anio; $this->empleado = new Empleado($usuario, $oid); $this->horas = -1; $this->jornadas = -1; $this->nombreCompleto = ""; $this->vacaciones = null; $this->permisos = null; }else{ $error = $this->locale['3024']; throw new Exception($error); return false; exit; } } function getMes(){ return $this->mes; } function getAnio(){ return $this->anio; } /** * Acceso al parte de actividad del empleado */ function getParte(){ $parte=array(); //Comprobamos permisos: $oidP = $this->usuario->getValor("oid"); //Si no soy yo y no soy admin ni RRHH, no tengo permiso: if(($oidP != $this->oid) && (!$this->usuario->tieneRol(1)) && (!$this->usuario->tieneRol(4))){ $error = $this->locale['3002']; throw new Exception($error); return $parte; exit; }else{ //Busco el parte de actividad del presente mes: $fecha = $this->anio."-".$this->mes; $consulta = "SELECT dato, fecha FROM partes_actividad WHERE oid='".$this->oid."' AND fecha like '".$fecha."-%'"; $bd = new BD(); $array = $bd->keyValueQuery($consulta, "fecha", "dato"); //Nos quedamos sólo con el día: foreach($array as $key => $value){ $fecha_array = explode("-", $key); $search = array("."); $replace = array(","); $value = str_replace($search, $replace, $value); $parte[$fecha_array[2]+0] = $value; } } return $parte; } function rellenaParte($dias){ $dias_correctos = array(); $dias_fallidos = array(); //Comprobamos que estamos recibiendo el argumento bien formado. if(gettype($dias) == "array"){ //Si tiene rol técnico y es el que tiene la sesión activa o tiene permisos de admin o RRHH seguimos. $oidP = $this->usuario->getValor("oid"); if(($oidP == $this->oid) || ($this->usuario->tieneRol(1)) || ($this->usuario->tieneRol(4))){ foreach($dias as $dia => $parte){ if($this->esRellenableDia($dia) || $parte == "P"){ $dias_correctos[$dia] = $parte; }else{ $dias_fallidos[$dia] = $parte; } } //Comprobamos que todos son rellenables: if((count($dias_correctos) == count($dias)) && (count($dias_fallidos) == 0)){ //Si insertamos todos los días, enviamos el mail con la solicitud. if($this->insertarDias($dias_correctos)){ //TODO Duda } }else{ $error = $this->locale['3007']; throw new Exception($error); return false; exit; } //Si no, lanzamos excepción. }else{ $error = $this->locale['3008']; throw new Exception($error); return false; exit; } //Si no, lanzamos excepción. }else{ $error = $this->locale['3007']; throw new Exception($error); return false; exit; } } private function insertarDias($dias){ $oid = $this->oid; $partes = $this->getParte(); $bd = new BD(); foreach($dias as $dia => $parte){ if($parte != "P"){ //Verificamos cada valor del parte: if($this->verificarValorParte($parte)){ $search = array(","); $replace = array("."); $parte = str_replace($search, $replace, $parte); $fecha = $this->anio."-".$this->mes."-".$dia; //Comprobamos si ha cambiado el parte. if($partes[$dia] != $parte){ //Si ya existía actualizamos if(array_key_exists($dia, $partes)){ //Si es 0 lo borro en lugar de actualizar. if($parte != "0"){ $consulta = "UPDATE partes_actividad SET dato = '".$parte."' WHERE oid = '".$oid."' AND fecha = '".$fecha."'"; }else{ $consulta = "DELETE FROM partes_actividad WHERE oid = '".$oid."' AND fecha='".$fecha."'"; } }else{ //Si es 0 ni inserto. if($parte != "0"){ $consulta = "INSERT INTO partes_actividad (oid, fecha, dato) VALUES ('".$oid."', '".$fecha."', '".$parte."')"; } } //Hay casos en los que no hace falta tocar la base de datos. if($consulta != ""){ if(!$bd->execQuery($consulta)){ return false; }else{ $mensaje = "Modificado el parte del ".$dia."-".$this->mes."-".$this->anio." -> ".$parte; $this->empleado->actualizarHistorial($mensaje); } } } }else{ $error = $this->locale['3009']; throw new Exception($error); return false; exit; } } } } public function getDiasAntesAlta(){ $fecha_alta = $this->empleado->getValor("fecha_alta"); $fecha_alta = explode("-", $fecha_alta); $mes_alta = $fecha_alta[1]; $mes = $this->mes; $anio = $this->anio; $anio_alta = $fecha_alta[0]; //Si es un mes posterior al de alta, devolvemos vacío if(($anio > $anio_alta) || ($anio == $anio_alta && $mes > $mes_alta)){ return array(); //Si es un mes anterior al de alta, devolvemos todos }else if(($anio < $anio_alta) || ($anio == $anio_alta && $mes < $mes_alta)){ $total = verifica_long_mes($mes, $anio); $dias = array(); for($i = 1; $i <= $total; $i++){ $dias[] = $i; } return $dias; //Si estamos en el mismo mes, calculamos: }else{ $dia_alta = $fecha_alta[2]; $dias = array(); for($i = 1; $i <= $dia_alta; $i++){ $dias[] = $i; } return $dias; } } private function verificarValorParte($dato){ if ((ereg("^[0-9]+(,[0-9]+)*$",$dato) && ($dato < 25)) || ($dato == "A") || ($dato == "P")){ return true; }else{ $error = $this->locale['3009']." -> ".$dato; throw new Exception($error); return false; exit; } } /** * Comprueba si el mes es objeto de ser rellenable o no. */ public function esRellenable(){ //Si es administrador o RRHH puede rellenar todos. if(($this->usuario->tieneRol(1)) || ($this->usuario->tieneRol(4))){ return true; }else{ $mes = $this->mes; $anio = $this->anio; $dia_hoy = date("j"); $mes_hoy = date("n"); $anio_hoy = date("Y"); //Sólo podemos actualizar partes del mismo mes o del anterior (hasta el día 3). if($anio != $anio_hoy) return false; if(($mes+1 == $mes_hoy) && ($dia_hoy <= 3)) return true; if($mes != $mes_hoy) return false; return true; } } private function esRellenableDia($dia){ if(($this->usuario->tieneRol(1)) || ($this->usuario->tieneRol(4))){ return true; }else{ $mes = $this->mes; $anio = $this->anio; $dia_hoy = date("j"); $mes_hoy = date("n"); $anio_hoy = date("Y"); //No se puede rellenar parte de vacaciones solicitadas o aprobadas if($this->vacaciones == null){ $this->vacaciones = new Vacaciones($this->usuario, $this->oid, $this->mes, $this->anio, $this->locale); $this->vacaciones->setEmpleado($this->empleado, $this->oid); } if($this->vacaciones->getEstadoDia($dia) == 0) return false; if($this->vacaciones->getEstadoDia($dia) == 1) return false; //No se puede rellenar parte de permisos solicitados o aprobados if($this->permisos == null){ $this->permisos = new Permisos($this->usuario, $this->oid, $this->mes, $this->anio, $this->locale); $this->permisos->setEmpleado($this->empleado, $this->oid); } if($this->permisos->getEstadoDia($dia) == 0) return false; if($this->permisos->getEstadoDia($dia) == 1) return false; //Sólo podemos actualizar partes del mismo mes o del anterior (hasta el día 3). if($anio != $anio_hoy) return false; if(($mes+1 == $mes_hoy) && ($dia_hoy <= 3)) return true; if($mes != $mes_hoy) return false; return true; } } public function setHoras($horas){ $this->horas = $horas; return $this->horas; } public function setJornadas($horas){ $this->jornadas = $horas; return $this->jornadas; } /** * Calcula las horas totales trabajadas. * * @return Un entero con el número de horas. */ public function getHoras(){ if($this->horas == -1){ $parte = $this->getParte(); $suma = 0; foreach($parte as $dia){ if($this->haTrabajado($dia)){ $suma = $suma + $dia; } } $this->horas = $suma; } return $this->horas; } /** * Calcula las jornadas totales trabajadas. * * @return Un entero con el número de jornadas. */ public function getJornadas(){ if($this->jornadas == -1){ $parte = $this->getParte(); $suma = 0; foreach($parte as $dia){ if($this->haTrabajado($dia)){ $suma = $suma + 1; } } $this->jornadas = $suma; } return $this->jornadas; } /** * Comprueba si un día se ha trabajado o no. * * @return true si se trabajó y false en caso contrario. */ private function haTrabajado($dia){ if ((ereg("^[0-9]+(.[0-9]+)*$",$dia) && ($dia < 25) && ($dia > 0))){ return true; }else{ return false; } } public function setNombreCompleto($nombre){ $this->nombreCompleto = $nombre; } /** * Acceso al nombre del empleado. */ public function getNombreEmpleado(){ if($this->nombreCompleto == ""){ $this->nombreCompleto = $this->empleado->getValor("nombre")." ".$this->empleado->getValor("apellidos"); } return $this->nombreCompleto; } /** * Acceso al identificador del empleado. */ public function getOidEmpleado(){ return $this->oid; } function setObservacion($observaciones){ // //Comprobamos permisos: $oidP = $this->usuario->getValor("oid"); if(($oidP != $this->oid) && (!$this->usuario->tieneRol(1)) && (!$this->usuario->tieneRol(4))){ $error = $this->locale['3002']; throw new Exception($error); return false; exit; }else{ $fecha = $this->anio."-".$this->mes; if($observaciones==""){ // Eliminamos la observacion $consulta="DELETE FROM observaciones WHERE oid = '".$this->oid."' AND fecha = '".$fecha."'"; $this->observaciones = null; } else { $this->getObservacion(); //Si no había cliente insertamos. if(($this->observaciones == null)){ $consulta = "INSERT INTO observaciones (oid, fecha, fecha_mod, persona, observacion) VALUES ('".$this->oid."', '".$fecha."', curdate(),'".$this->usuario->getValor("nombre")."', '".$observaciones."')"; $this->observaciones = $observaciones; //Si se ha modificado el clientea actualizamos. }elseif($this->observaciones != $observaciones){ $consulta = "UPDATE observaciones SET observacion = '".$observaciones."', fecha_mod = curdate() WHERE oid = '".$this->oid."' AND fecha = '".$fecha."'"; $this->observaciones = $observaciones; } } //Si hay que actualizar, actualizo: if($consulta != ""){ $bd = new BD(); return $bd->execQuery($consulta); }else{ return true; } } } /** * Asigna el cliente del empleado. */ public function setCliente($cliente){ //Comprobamos permisos: $oidP = $this->usuario->getValor("oid"); if(($oidP != $this->oid) && (!$this->usuario->tieneRol(1)) && (!$this->usuario->tieneRol(4))){ $error = $this->locale['3002']; throw new Exception($error); return false; exit; }else{ $fecha = $this->anio."-".$this->mes; $this->getCliente(); //Si no había cliente insertamos. if(($this->observaciones == null) && ($this->cliente == null) && ($this->proyecto == null)){ $consulta = "INSERT INTO observaciones (oid, fecha, fecha_mod, persona, cliente) VALUES ('".$this->oid."', '".$fecha."', curdate(),'".$this->usuario->getValor("nombre")."', '".$cliente."')"; $this->cliente = $cliente; //Si se ha modificado el clientea actualizamos. }else if($this->cliente != $cliente){ $consulta = "UPDATE observaciones SET cliente = '".$cliente."', fecha_mod = curdate() WHERE persona = '".$this->usuario->getValor("nombre")."' AND fecha = '".$fecha."'"; $this->cliente = $cliente; } //Si hay que actualizar, actualizo: if($consulta != ""){ $bd = new BD(); return $bd->execQuery($consulta); }else{ return true; } } } /** * Asigna el proyecto del empleado. */ public function setProyecto($proyecto){ //Comprobamos permisos: $oidP = $this->usuario->getValor("oid"); if(($oidP != $this->oid) && (!$this->usuario->tieneRol(1)) && (!$this->usuario->tieneRol(4))){ $error = $this->locale['3002']; throw new Exception($error); return false; exit; }else{ $fecha = $this->anio."-".$this->mes; $this->getCliente(); //Si no había cliente insertamos. if(($this->observaciones == null) && ($this->cliente == null) && ($this->proyecto == null)){ $consulta = "INSERT INTO observaciones (oid, fecha, fecha_mod, persona, proyecto) VALUES ('".$this->oid."', '".$fecha."', curdate(),'".$this->usuario->getValor("nombre")."', '".$proyecto."')"; $this->proyecto = $proyecto; //Si se ha modificado el clientea actualizamos. }else if($this->proyecto != $proyecto){ $consulta = "UPDATE observaciones SET proyecto = '".$proyecto."', fecha_mod = curdate() WHERE persona = '".$this->usuario->getValor("nombre")."' AND fecha = '".$fecha."'"; $this->proyecto = $proyecto; } //Si hay que actualizar, actualizo: if($consulta != ""){ $bd = new BD(); return $bd->execQuery($consulta); }else{ return true; } } } function getObservacion(){ if(($this->observaciones == null) && ($this->cliente == null) && ($this->proyecto == null)){ $fecha = $this->anio."-".$this->mes; $consulta = "SELECT observacion, proyecto, cliente FROM observaciones WHERE oid='".$this->oid."' AND fecha = '".$fecha."'"; $bd = new BD(); $campos = $bd->getCampos($consulta); if(array_key_exists("observacion", $campos)){ $this->observaciones = $campos["observacion"][0]; } if(array_key_exists("proyecto", $campos)){ $this->proyecto = $campos["proyecto"][0]; } if(array_key_exists("cliente", $campos)){ $this->cliente = $campos["cliente"][0]; } } return $this->observaciones; } /** * Acceso al cliente del proyecto del empleado. */ public function getCliente(){ if(($this->observaciones == null) && ($this->cliente == null) && ($this->proyecto == null)){ $fecha = $this->anio."-".$this->mes; $consulta = "SELECT observacion, proyecto, cliente FROM observaciones WHERE oid='".$this->oid."' AND fecha = '".$fecha."'"; $bd = new BD(); $campos = $bd->getCampos($consulta); if(array_key_exists("observacion", $campos)){ $this->observaciones = $campos["observacion"][0]; } if(array_key_exists("proyecto", $campos)){ $this->proyecto = $campos["proyecto"][0]; } if(array_key_exists("cliente", $campos)){ $this->cliente = $campos["cliente"][0]; } } return $this->cliente; } /** * Acceso al cliente del proyecto del empleado. */ public function getProyecto(){ if(($this->observaciones == null) && ($this->cliente == null) && ($this->proyecto == null)){ $fecha = $this->anio."-".$this->mes; $consulta = "SELECT observacion, proyecto, cliente FROM observaciones WHERE oid='".$this->oid."' AND fecha = '".$fecha."'"; $bd = new BD(); $campos = $bd->getCampos($consulta); if(array_key_exists("observacion", $campos)){ $this->observaciones = $campos["observacion"][0]; } if(array_key_exists("proyecto", $campos)){ $this->proyecto = $campos["proyecto"][0]; } if(array_key_exists("cliente", $campos)){ $this->cliente = $campos["cliente"][0]; } } return $this->proyecto; } } ?>