868 lines
26 KiB
PHP
868 lines
26 KiB
PHP
|
|
<?php
|
|||
|
|
/*
|
|||
|
|
* Created on 20/10/2008
|
|||
|
|
*
|
|||
|
|
* Representa la vacaciones de un empleado y comprende toda su gesti<EFBFBD>n.
|
|||
|
|
*
|
|||
|
|
* 2008-10-20 (diego): Se crea la clase.
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
include_once("Empleado.php");
|
|||
|
|
include_once("ParteActividad.php");
|
|||
|
|
include_once("./functions_sistema.php");
|
|||
|
|
include_once("Calendario.php");
|
|||
|
|
|
|||
|
|
class Permisos{
|
|||
|
|
|
|||
|
|
/* Lista de vacaciones */
|
|||
|
|
private $vacaciones;
|
|||
|
|
|
|||
|
|
/* Lista de vacaciones solicitadas */
|
|||
|
|
private $vacacionesSolicitadas = null;
|
|||
|
|
|
|||
|
|
/* Lista de vacaciones aprobadas*/
|
|||
|
|
private $vacacionesAprobadas = null;
|
|||
|
|
|
|||
|
|
/* Lista de vacaciones rechazadas*/
|
|||
|
|
private $vacacionesRechazadas = null;
|
|||
|
|
|
|||
|
|
/* Lista de vacaciones pendientes de anulaci<63>n */
|
|||
|
|
private $vacacionesAnulables = null;
|
|||
|
|
|
|||
|
|
/* Usuario de la sesi<73>n activa */
|
|||
|
|
private $usuario;
|
|||
|
|
|
|||
|
|
/* Mes del calendario a considerar. */
|
|||
|
|
private $mes;
|
|||
|
|
|
|||
|
|
/* A<>o del calendario a considerar. */
|
|||
|
|
private $anio;
|
|||
|
|
|
|||
|
|
/* Identificador del solicitante de vacaciones*/
|
|||
|
|
private $oid;
|
|||
|
|
|
|||
|
|
/* Empleado solicitante de vacaciones */
|
|||
|
|
private $empleado;
|
|||
|
|
|
|||
|
|
/* Calendario para calcular d<>as especiales. */
|
|||
|
|
private $calendario;
|
|||
|
|
|
|||
|
|
/** Idioma */
|
|||
|
|
private $locale;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Crea un objeto que representa las vacaciones de un usuario.
|
|||
|
|
* @param usuario - Usuario con la sesi<EFBFBD>n activa.
|
|||
|
|
* @param oid - Identificador del propietario de las vacaciones.
|
|||
|
|
* @param mes - Mes del a<EFBFBD>o en que se gestionan las vacaciones.
|
|||
|
|
* @param anio - A<EFBFBD>o para el que se gestionan las vacaciones.
|
|||
|
|
* @param locale - Idioma en el que mostrar los mensajes.
|
|||
|
|
*/
|
|||
|
|
function Permisos($usuario,$oid,$mes,$anio, $locale){
|
|||
|
|
$this->usuario=$usuario;
|
|||
|
|
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->oid = $oid;
|
|||
|
|
$this->locale = $locale;
|
|||
|
|
$this->calendario = new Calendario($this->usuario, $this->mes, $this->anio, array(), "", $this->locale);
|
|||
|
|
if($oid > 0){
|
|||
|
|
$this->empleado = new Empleado($usuario, $oid);
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['1534'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return array();
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Obtiene una lista de todas las vacaciones del usuario en el mes y a<EFBFBD>o que
|
|||
|
|
* est<EFBFBD>n en un determinado estado.
|
|||
|
|
*
|
|||
|
|
* @param estado - Estado en el que se busca que est<EFBFBD>n las vacaciones.
|
|||
|
|
* @return Una lista con las vacaciones en ese estado.
|
|||
|
|
* @throws Lanza excepciones si el usuario no tiene permisos.
|
|||
|
|
*/
|
|||
|
|
private function cargaPermisos(){
|
|||
|
|
if($this->vacaciones == null){
|
|||
|
|
$this->vacacionesSolicitadas = array();
|
|||
|
|
$this->vacacionesAprobadas = array();
|
|||
|
|
$this->vacacionesRechazadas = array();
|
|||
|
|
$this->vacacionesAnulables = 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['3031'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return array();
|
|||
|
|
exit;
|
|||
|
|
//Permisos correctos, sigo.
|
|||
|
|
}else{
|
|||
|
|
//Cargo la lista de d<>as:
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-";
|
|||
|
|
$consulta = "SELECT fecha, aprobada FROM permisos WHERE oid='".$this->oid."' AND fecha like '".$fecha."%'";
|
|||
|
|
$bd = new BD();
|
|||
|
|
$array = $bd->keyValueQuery($consulta, "fecha", "aprobada");
|
|||
|
|
$this->vacaciones = array();
|
|||
|
|
foreach($array as $fecha => $estado){
|
|||
|
|
$dia = explode("-", $fecha);
|
|||
|
|
$dia = $dia[2]+0;
|
|||
|
|
$this->vacaciones[$dia] = $estado;
|
|||
|
|
switch($estado){
|
|||
|
|
case 0:
|
|||
|
|
$this->vacacionesSolicitadas[] = $dia;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
$this->vacacionesAprobadas[] = $dia;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
$this->vacacionesRechazadas[] = $dia;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
$this->vacacionesAnulables[] = $dia;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// $dias=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['3031'];
|
|||
|
|
// throw new Exception($error);
|
|||
|
|
// return $dias;
|
|||
|
|
// exit;
|
|||
|
|
// }else{
|
|||
|
|
// //Busco los d<>as solicitados:
|
|||
|
|
// $fecha = $this->anio."-".$this->mes."-";
|
|||
|
|
// $consulta = "SELECT fecha FROM vacaciones WHERE oid='".$this->oid."' AND aprobada = '".$estado."' AND fecha like '".$fecha."%'";
|
|||
|
|
// $bd = new BD();
|
|||
|
|
// $array = $bd->arrayQuery($consulta, "fecha");
|
|||
|
|
// foreach($array as $elem){
|
|||
|
|
// $dia = explode("-", $elem);
|
|||
|
|
// $dias[] = $dia[2]+0;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
//
|
|||
|
|
// return $dias;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Obtiene una lista de todas las vacaciones del usuario en el mes y a<EFBFBD>o que
|
|||
|
|
* est<EFBFBD>n solicitadas.
|
|||
|
|
*
|
|||
|
|
* @return Una lista con las vacaciones aprobadas.
|
|||
|
|
* @throws Lanza excepciones si el usuario no tiene permisos.
|
|||
|
|
*/
|
|||
|
|
function getPermisosSolicitados(){
|
|||
|
|
if($this->vacacionesSolicitadas == null){
|
|||
|
|
$this->cargaPermisos();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->vacacionesSolicitadas;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Obtiene una lista de todas las vacaciones del usuario en el mes y a<EFBFBD>o que
|
|||
|
|
* est<EFBFBD>n aprobadas.
|
|||
|
|
*
|
|||
|
|
* @return Una lista con las vacaciones aprobadas.
|
|||
|
|
* @throws Lanza excepciones si el usuario no tiene permisos.
|
|||
|
|
*/
|
|||
|
|
function getPermisosAprobados(){
|
|||
|
|
if($this->vacacionesAprobadas == null){
|
|||
|
|
$this->cargaPermisos();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->vacacionesAprobadas;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Obtiene una lista de todas las vacaciones del usuario en el mes y a<EFBFBD>o que
|
|||
|
|
* est<EFBFBD>n rechazadas.
|
|||
|
|
*
|
|||
|
|
* @return Una lista con las vacaciones rechazadas.
|
|||
|
|
* @throws Lanza excepciones si el usuario no tiene permisos.
|
|||
|
|
*/
|
|||
|
|
function getPermisosRechazados(){
|
|||
|
|
if($this->vacacionesRechazadas == null){
|
|||
|
|
$this->cargaPermisos();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->vacacionesRechazadas;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Obtiene una lista de todas las vacaciones del usuario en el mes y a<EFBFBD>o que
|
|||
|
|
* est<EFBFBD>n pendientes de anulaci<EFBFBD>n.
|
|||
|
|
*
|
|||
|
|
* @return Una lista con las vacaciones pendientes de anulaci<EFBFBD>n.
|
|||
|
|
* @throws Lanza excepciones si el usuario no tiene permisos.
|
|||
|
|
*/
|
|||
|
|
function getPermisosPendientes(){
|
|||
|
|
if($this->vacacionesAnulables == null){
|
|||
|
|
$this->cargaPermisos();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $this->vacacionesAnulables;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Acceso al mes.
|
|||
|
|
* @return El mes.
|
|||
|
|
*/
|
|||
|
|
function getMes(){
|
|||
|
|
return $this->mes;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Acceso al a<EFBFBD>o.
|
|||
|
|
* @return El a<EFBFBD>o.
|
|||
|
|
*/
|
|||
|
|
function getAnio(){
|
|||
|
|
return $this->anio;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Calcula el estado en el que se encuentra un d<EFBFBD>a.
|
|||
|
|
*
|
|||
|
|
* @param dia - D<EFBFBD>a dentro del mes y a<EFBFBD>o de las vacaciones.
|
|||
|
|
* @return El c<EFBFBD>digo de estado si se encuentra el d<EFBFBD>a, -1 en caso contrario.
|
|||
|
|
*/
|
|||
|
|
public function getEstadoDia($dia){
|
|||
|
|
$this->cargaPermisos();
|
|||
|
|
$estado = $this->vacaciones[$dia];
|
|||
|
|
|
|||
|
|
if($estado == "" || $estado < 0){
|
|||
|
|
$estado = -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $estado;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
private function insertarDias($dias, $estado){
|
|||
|
|
$oid = $this->oid;
|
|||
|
|
$bd = new BD();
|
|||
|
|
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
//En el caso de solicitud de permisos o solicitud de anulaci<63>n de permisos es t<>cnico.
|
|||
|
|
if($estado == 0 || $estado == 3){
|
|||
|
|
$observacion = "observacion_tecnico";
|
|||
|
|
$observacion2 = "observacion_rrhh";
|
|||
|
|
$mensaje2 = $this->getObservacionRRHH($dia);
|
|||
|
|
//En caso de aprobaci<63>n o rechace de permisos es RRHH
|
|||
|
|
}else if($estado == 1 || $estado == 2){
|
|||
|
|
$observacion = "observacion_rrhh";
|
|||
|
|
$observacion2 = "observacion_tecnico";
|
|||
|
|
$mensaje2 = $this->getObservacionTecnico($dia);
|
|||
|
|
}
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$consulta = "DELETE FROM permisos WHERE oid = '".$oid."' AND fecha='".$fecha."'";
|
|||
|
|
$bd->execQuery($consulta);
|
|||
|
|
$consulta = "INSERT INTO permisos (oid, fecha, aprobada,f_mod , ".$observacion.", ".$observacion2.") VALUES ('".$oid."', '".$fecha."', '".$estado."',curdate(), '".$mensaje."', '".$mensaje2."')";
|
|||
|
|
if(!$bd->execQuery($consulta)){
|
|||
|
|
return false;
|
|||
|
|
//Si todo ha ido bien comprobamos el estado a ver si hay que actualizar
|
|||
|
|
//las vacaciones restantes.
|
|||
|
|
}else{
|
|||
|
|
$estadoPrevio = $this->vacaciones[$dia];
|
|||
|
|
$this->cambiaEstado($dia, $estado);
|
|||
|
|
$consulta = "";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function eliminaDia($dia){
|
|||
|
|
$this->vacaciones = array_diff($this->vacaciones, array($dia));
|
|||
|
|
$estadoPrevio = $this->vacaciones[$dia];
|
|||
|
|
//Lo eliminamos de la lista donde estuviera:
|
|||
|
|
switch($estadoPrevio){
|
|||
|
|
case 0:
|
|||
|
|
$this->vacacionesSolicitadas = array_diff($this->vacacionesSolicitadas, array($dia));
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
$this->vacacionesAprobadas = array_diff($this->vacacionesAprobadas, array($dia));
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
$this->vacacionesRechazadas = array_diff($this->vacacionesRechazadas, array($dia));
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
$this->vacacionesAnulables = array_diff($this->vacacionesAnulables, array($dia));
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function cambiaEstado($dia, $estado){
|
|||
|
|
$this->cargaPermisos();
|
|||
|
|
$estadoPrevio = $this->vacaciones[$dia];
|
|||
|
|
if($estadoPrevio == "") $estadoPrevio = -1;
|
|||
|
|
$this->vacaciones[$dia] = $estado;
|
|||
|
|
//Actuamos s<>lo si hay cambio de estado.
|
|||
|
|
if($estadoPrevio != $estado){
|
|||
|
|
//Lo eliminamos de la lista donde estuviera:
|
|||
|
|
switch($estadoPrevio){
|
|||
|
|
case 0:
|
|||
|
|
$this->vacacionesSolicitadas = array_diff($this->vacacionesSolicitadas, array($dia));
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
$this->vacacionesAprobadas = array_diff($this->vacacionesAprobadas, array($dia));
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
$this->vacacionesRechazadas = array_diff($this->vacacionesRechazadas, array($dia));
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
$this->vacacionesAnulables = array_diff($this->vacacionesAnulables, array($dia));
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
//Y lo insertamos en la correspondiente:
|
|||
|
|
switch($estado){
|
|||
|
|
case 0:
|
|||
|
|
$this->vacacionesSolicitadas[] = $dia;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
$this->vacacionesAprobadas[] = $dia;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
$this->vacacionesRechazadas[] = $dia;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
$this->vacacionesAnulables[] = $dia;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getObservacionTecnico($dia){
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$consulta = "SELECT observacion_tecnico FROM permisos WHERE fecha = '".$fecha."' AND oid = ".$this->oid."";
|
|||
|
|
$bd = new BD();
|
|||
|
|
return $bd->getCampo($consulta);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getObservacionRRHH($dia){
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$consulta = "SELECT observacion_rrhh FROM permisos WHERE fecha = '".$fecha."' AND oid = ".$this->oid."";
|
|||
|
|
$bd = new BD();
|
|||
|
|
return $bd->getCampo($consulta);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Solicita unos d<EFBFBD>as de vacaciones. Si alguno falla no se solicita ninguno.
|
|||
|
|
* @return true si se pudieron solicitar todos y false si falla alguno.
|
|||
|
|
*/
|
|||
|
|
public function solicitar($dias){
|
|||
|
|
if(count($dias) <= 0){
|
|||
|
|
$error = $this->locale['3027'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
//Si tiene rol t<>cnico seguimos.
|
|||
|
|
if((($this->usuario->tieneRol(6)) && ($this->usuario->getValor("oid") == $this->oid))
|
|||
|
|
|| $this->usuario->tieneRol(4)){
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
if(($this->esSolicitable($dia)) and ($mensaje != "")){
|
|||
|
|
$dias_correctos[$dia] = $mensaje;
|
|||
|
|
$solicitud = $dia.",";
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son solicitables:
|
|||
|
|
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, 0)){
|
|||
|
|
$nombre = $this->usuario->getValor("nombre");
|
|||
|
|
$apellidos = $this->usuario->getValor("apellidos");
|
|||
|
|
$oid = $this->usuario->getValor("oid");
|
|||
|
|
$email = $this->locale['620']." $nombre $apellidos.\n\n";
|
|||
|
|
$email .= $solicitud."\n\n";
|
|||
|
|
$email = $email."\n\n";
|
|||
|
|
$direccion = constante("email_rrhh");
|
|||
|
|
if(!envia_correo_empleados($direccion, $this->locale['621'], $email)){
|
|||
|
|
//TODO <20>Excepci<63>n?
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3033'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3032'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Comprueba si se puede solicitar un d<EFBFBD>a como vacaciones.
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function esSolicitable($dia){
|
|||
|
|
if($this->usuario->tieneRol("4")){
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
$plazo = constante("antelacion_permisos");
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$estado = $this->getEstadoDia($dia);
|
|||
|
|
$localidad = $this->empleado->getValor("localidad");
|
|||
|
|
$oid = $this->oid;
|
|||
|
|
//Si el plazo es correcto seguimos:
|
|||
|
|
if(fecha_valida($fecha) > $plazo){
|
|||
|
|
//Si no est<73>n ya solicitadas ni el d<>a es festivo seguimos:
|
|||
|
|
$c = $this->calendario;
|
|||
|
|
|
|||
|
|
if(($estado == -1) && (!$c->esFestivo($localidad, $dia))){
|
|||
|
|
//Si se solicita para este a<>o o para el pr<70>ximo dentro del plazo, todo ok:
|
|||
|
|
if(($this->anio == date("Y")) || (($this->anio == date("Y") + 1) && (fecha_valida(date("Y")."-12-15") <= 0))){
|
|||
|
|
return true;
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
//D<>a solicitado o festivo
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
//Fecha fuera de plazo.
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Aprobaci<EFBFBD>n de una solicitud de vacaciones.
|
|||
|
|
*/
|
|||
|
|
public function aprobar($dias){
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
//Si tiene rol t<>cnico seguimos.
|
|||
|
|
if($this->usuario->tieneRol(1) || $this->usuario->tieneRol(4)){
|
|||
|
|
$muestra_dias = "";
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
//S<>lo puedo aprobar vacaciones solicitadas.
|
|||
|
|
if($this->getEstadoDia($dia) == 0){
|
|||
|
|
$dias_correctos[$dia] = $mensaje;
|
|||
|
|
$muestra_dias .= $dia."-".$this->mes."-".$this->anio." ";
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son aprobables:
|
|||
|
|
if((count($dias_correctos) == count($dias)) && (count($dias_fallidos) == 0)){
|
|||
|
|
//Si insertamos todos los d<>as, enviamos el mail con la aprobaci<63>n e insertamos
|
|||
|
|
//una P en el parte de actividad.
|
|||
|
|
if($this->insertarDias($dias_correctos, 1)){
|
|||
|
|
$bd = new BD();
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$consulta = "DELETE FROM partes_actividad WHERE oid = '".$this->oid."' AND fecha='".$fecha."'";
|
|||
|
|
$bd->execQuery($consulta);
|
|||
|
|
$consulta = "INSERT INTO partes_actividad (oid, fecha, dato) VALUES ('".$this->oid."', '".$fecha."', 'P')";
|
|||
|
|
if(!$bd->execQuery($consulta)){
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
$nombre = $this->usuario->getValor("nombre");
|
|||
|
|
$apellidos = $this->usuario->getValor("apellidos");
|
|||
|
|
$direccion = $this->empleado->getValor("email");
|
|||
|
|
$email = $this->locale['617']." ".$muestra_dias.$this->locale['623'];
|
|||
|
|
|
|||
|
|
if(!envia_correo_empleados($direccion, $this->locale['622'], $email)){
|
|||
|
|
//TODO <20>Excepci<63>n?
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3035'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no son todos aprobables.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3035'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3034'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Rechace de una solicitud de vacaciones.
|
|||
|
|
*/
|
|||
|
|
function rechazar($dias){
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
//Si tiene rol t<>cnico seguimos.
|
|||
|
|
if($this->usuario->tieneRol(1) || $this->usuario->tieneRol(4)){
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
//S<>lo puedo rechazar vacaciones solicitadas.
|
|||
|
|
if($this->getEstadoDia($dia) == 0){
|
|||
|
|
$dias_correctos[$dia] = $mensaje;
|
|||
|
|
$muestra_dias .= $dia."-".$this->mes."-".$this->anio." ";
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son rechazables:
|
|||
|
|
if((count($dias_correctos) == count($dias)) && (count($dias_fallidos) == 0)){
|
|||
|
|
//Si insertamos todos los d<>as, enviamos el mail con las rechazadas.
|
|||
|
|
if($this->insertarDias($dias_correctos, 2)){
|
|||
|
|
$nombre = $this->usuario->getValor("nombre");
|
|||
|
|
$apellidos = $this->usuario->getValor("apellidos");
|
|||
|
|
$email = $this->locale['617']." ".$muestra_dias.$this->locale['624'];
|
|||
|
|
$direccion = $this->empleado->getValor("email");
|
|||
|
|
if(!envia_correo_empleados($direccion, $this->locale['622'], $email)){
|
|||
|
|
//TODO <20>Excepci<63>n?
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3036'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no son todos rechazables.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3036'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3037'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Rechace de una solicitud de anulaci<EFBFBD>n de vacaciones.
|
|||
|
|
*/
|
|||
|
|
function rechazarAnulacion($dias){
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
//Si tiene rol t<>cnico seguimos.
|
|||
|
|
if($this->usuario->tieneRol(1) || $this->usuario->tieneRol(4)){
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
//S<>lo puedo rechazar vacaciones pendientes de anulaci<63>n.
|
|||
|
|
if($this->getEstadoDia($dia) == 3){
|
|||
|
|
$dias_correctos[$dia] = $mensaje;
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son rechazables:
|
|||
|
|
if((count($dias_correctos) == count($dias)) && (count($dias_fallidos) == 0)){
|
|||
|
|
//Si insertamos todos los d<>as, enviamos el mail con las rechazadas.
|
|||
|
|
if($this->insertarDias($dias_correctos, 1)){
|
|||
|
|
//TODO <20>Necesario?
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3038'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no son todos rechazables.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3038'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3037'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Anulaci<EFBFBD>n de unas permisos aprobados.
|
|||
|
|
*/
|
|||
|
|
function anular($dias){
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
//Si tiene rol t<>cnico seguimos.
|
|||
|
|
if($this->usuario->tieneRol(1) || $this->usuario->tieneRol(4)){
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
//S<>lo puedo anular las pendientes de anulaci<63>n.
|
|||
|
|
if($this->getEstadoDia($dia) == 3){
|
|||
|
|
$solicitud = $dia.",";
|
|||
|
|
$dias_correctos[] = $dia;
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son aprobables:
|
|||
|
|
if((count($dias_correctos) == count($dias)) && (count($dias_fallidos) == 0)){
|
|||
|
|
//Si insertamos todos los d<>as, enviamos el mail con las anuladas.
|
|||
|
|
if($this->anularDias($dias_correctos)){
|
|||
|
|
$nombre = $this->usuario->getValor("nombre");
|
|||
|
|
$apellidos = $this->usuario->getValor("apellidos");
|
|||
|
|
$oid = $this->usuario->getValor("oid");
|
|||
|
|
$email = $this->locale['618']." $nombre $apellidos.\n\n";
|
|||
|
|
$email .= $solicitud."\n\n";
|
|||
|
|
$path = "http://portal.selforsistemas.net";
|
|||
|
|
$link = "<a href='".$path."/detalle_empleado.php?oid=".$oid."'>".$nombre."</a>";
|
|||
|
|
$email = $email.$link."\n\n";
|
|||
|
|
$direccion = constante("email_rrhh");
|
|||
|
|
if(!envia_correo_empleados($direccion, $this->locale['619'], $email)){
|
|||
|
|
//TODO <20>Excepci<63>n?
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3039'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no son todos anulables.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3039'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3040'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function eliminarSolicitud($dias){
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
//S<>lo puedo eliminar vacaciones solicitadas.
|
|||
|
|
if($this->getEstadoDia($dia) == 0){
|
|||
|
|
$dias_correctos[] = $dia;
|
|||
|
|
$muestra_dias .= $dia."-".$this->mes."-".$this->anio." ";
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son rechazables:
|
|||
|
|
if((count($dias_correctos) == count($dias)) && (count($dias_fallidos) == 0)){
|
|||
|
|
//Si insertamos todos los d<>as, enviamos el mail con las rechazadas.
|
|||
|
|
if($this->anularDias($dias_correctos)){
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
//Si no son todos rechazables.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3012'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private function anularDias($dias){
|
|||
|
|
$oid = $this->oid;
|
|||
|
|
$bd = new BD();
|
|||
|
|
foreach($dias as $dia){
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$consulta = "DELETE FROM permisos WHERE oid = '".$oid."' AND fecha='".$fecha."'";
|
|||
|
|
if(!$bd->execQuery($consulta)){
|
|||
|
|
return false;
|
|||
|
|
//Si todo ha ido bien comprobamos el estado a ver si hay que actualizar
|
|||
|
|
//las vacaciones restantes.
|
|||
|
|
}else{
|
|||
|
|
$this->eliminaDia($dia);
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$consulta = "DELETE FROM partes_actividad WHERE oid = '".$oid."' AND fecha='".$fecha."'";
|
|||
|
|
$bd->execQuery($consulta);
|
|||
|
|
// $consulta = "INSERT INTO partes_actividad (oid, fecha, dato) VALUES ('".$oid."', '".$fecha."', '0')";
|
|||
|
|
// if(!$bd->execQuery($consulta)){
|
|||
|
|
// return false;
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Solicitud de anulaci<EFBFBD>n de unas vacaciones aprobadas.
|
|||
|
|
*/
|
|||
|
|
function solicitarAnulacion($dias){
|
|||
|
|
if(count($dias) <= 0){
|
|||
|
|
$error = $this->locale['3027'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
$dias_correctos = array();
|
|||
|
|
$dias_fallidos = array();
|
|||
|
|
//Comprobamos que estamos recibiendo el argumento bien formado.
|
|||
|
|
if(gettype($dias) == "array"){
|
|||
|
|
//Si tiene rol t<>cnico seguimos.
|
|||
|
|
if(($this->usuario->tieneRol(6)) && ($this->usuario->getValor("oid") == $this->oid)){
|
|||
|
|
foreach($dias as $dia => $mensaje){
|
|||
|
|
if($this->esAnulable($dia)){
|
|||
|
|
$dias_correctos[$dia] = $mensaje;
|
|||
|
|
}else{
|
|||
|
|
$dias_incorrectos[] = $dia;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Comprobamos que todos son solicitables:
|
|||
|
|
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, 3)){
|
|||
|
|
//TODO
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3041'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3041'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
//Si no, lanzamos excepci<63>n.
|
|||
|
|
}else{
|
|||
|
|
$error = $this->locale['3007'];
|
|||
|
|
throw new Exception($error);
|
|||
|
|
return false;
|
|||
|
|
exit;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function setEmpleado($empleado, $oid){
|
|||
|
|
$this->empleado = $empleado;
|
|||
|
|
$this->oid = $oid;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Comprueba si se puede solicitar un d<EFBFBD>a como vacaciones.
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
public function esAnulable($dia){
|
|||
|
|
$plazo = constante("antelacion_permisos");
|
|||
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|||
|
|
$estado = $this->getEstadoDia($dia);
|
|||
|
|
$localidad = $this->empleado->getValor("localidad");
|
|||
|
|
$oid = $this->oid;
|
|||
|
|
//Si el plazo es correcto seguimos:
|
|||
|
|
if(fecha_valida($fecha) > $plazo){
|
|||
|
|
//Si est<73>n aprobadas y el d<>a es festivo seguimos:
|
|||
|
|
$c = $this->calendario;
|
|||
|
|
if(($estado == 1) && (!$c->esFestivo($localidad, $dia))){
|
|||
|
|
//Si se solicita para este a<>o o para el pr<70>ximo dentro del plazo, todo ok:
|
|||
|
|
if(($this->anio == date("Y")) || (($this->anio == date("Y") + 1) && (fecha_valida(date("Y")."-12-15") <= 0))){
|
|||
|
|
return true;
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
//D<>a solicitado o festivo
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
//Fecha fuera de plazo.
|
|||
|
|
}else{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getOidPersona(){
|
|||
|
|
return $this->empleado->getValor("oid");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getNombrePersona(){
|
|||
|
|
return $this->empleado->getValor("nombre")." ".$this->empleado->getValor("apellidos");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
?>
|