2011-04-04 15:16:10 +00:00
< ? php
/*
* Created on 20 / 10 / 2008
*
* Representa el parte de actividad de un empleado y comprende toda su gesti<EFBFBD> n .
*
* 2008 - 10 - 20 ( diego ) : Se crea la clase .
*/
include_once ( " Empleado.php " );
include_once ( " Objects/Permisos.php " );
class ParteActividad {
/* 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 due<75> o del parte*/
private $oid ;
/* Empleado due<75> o del parte. */
private $empleado ;
/* N<> mero de horas trabajadas. */
private $horas ;
/* N<> mero de jornadas trabajadas. */
private $jornadas ;
/* Nombre y apellidos del empleado. */
private $nombreCompleto ;
/* Vacaciones asociadas al parte de actividad. */
private $vacaciones ;
/* Permisos asociados al parte de actividad. */
private $permisos ;
/* Idioma */
private $locale ;
/* Observaciones del mes */
private $observaciones = null ;
/* Proyecto del parte*/
private $proyecto = null ;
/* Cliente */
private $cliente = null ;
/**
* Crea un objeto Parte de Actividad para un empleado para un mes y a<EFBFBD> o concreto .
* @ param usuario - Due<EFBFBD> o de la sesi<EFBFBD> n .
* @ param oid - Identificador del due<EFBFBD> o del parte de actividad .
* @ param mes - Mes que contempla el parte .
* @ param anio - A<EFBFBD> o que contempla el parte .
* @ param locale - Contenido del fichero de idioma .
*/
function ParteActividad ( $usuario , $oid , $mes , $anio , $locale ){
$this -> 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<73> 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<63> n.
} else {
$error = $this -> locale [ '3008' ];
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 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<73> 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 ;
2011-05-16 11:50:04 +00:00
//$this->empleado->actualizarHistorial($mensaje);
2011-04-04 15:16:10 +00:00
}
}
}
} 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<61> 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<EFBFBD> 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<EFBFBD> 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<EFBFBD> a se ha trabajado o no .
*
* @ return true si se trabaj<EFBFBD> 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<61> 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<61> 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<61> 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 ;
}
}
?>