00001 <?php
00002
00003 class Evaluacion{
00004
00005 protected $eva_id;
00006 protected $eva_nombre;
00007 protected $eva_act_id;
00008 protected $eva_fecha_inicio;
00009 protected $eva_fecha_fin;
00010
00011 protected $eva_profesor_correo;
00012
00013 protected $eva_inventarios;
00014
00015 protected $eva_actividad;
00016
00017 public function __constructor( ){
00018 $this->eva_actividad = new Actividad( );
00019 $this->eva_inventarios = array( );
00020 }
00021
00027 private function limpiar( ){
00028 foreach( get_object_vars($this) as $name => $value )
00029 switch( $name ){
00030 default: $this->{$name} = NULL; break;
00031 }
00032
00033 $this->eva_actividad = new Actividad( );
00034 $this->eva_inventarios = array( );
00035 }
00036
00049 public function getEvaluacion( $data ){
00050
00051 $this->limpiar( );
00052
00053 try{
00054
00055 $db = Database::getInstance( );
00056
00057 $query =
00058 'SELECT eva_id, eva_nombre, eva_act_id, eva_fecha_inicio, eva_fecha_fin FROM evaluaciones WHERE '
00059 .$data['where'] ;
00060
00061 $consulta = $db->prepare( $query );
00062
00063 $consulta->execute( $data['data'] );
00064
00065 $resultado = $consulta->fetch( PDO::FETCH_ASSOC );
00066 unset( $consulta );
00067
00068 if( !$resultado )
00069 return false;
00070 else
00071 foreach( $resultado as $name => $value )
00072 $this->{$name} = $value;
00073
00074 $consulta = $db->prepare( 'SELECT inv_id FROM evaluaciones_inventarios WHERE eva_id = '.$this->getId( ) );
00075 $consulta->execute( );
00076
00077 $this->eva_inventarios = array( );
00078 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) )
00079 array_push( $this->eva_inventarios, $resultado['inv_id'] );
00080
00081 unset( $consulta );
00082
00083 return true;
00084 }catch( PDOException $e ){ unset($consulta); throw $e; }
00085
00086 }
00087
00100 public function getEvaluacionPorId( $id ){
00101 return $this->getEvaluacion( array(
00102 'where' => 'eva_id = :id',
00103 'data'=> array(
00104 ':id'=>$id
00105 )
00106 ));
00107 }
00108
00109 public function guardar( ){
00110
00111 $db = Database::getInstance( );
00112
00113 $data = array(
00114 ':eva_nombre'=>$this->eva_nombre,
00115 ':eva_act_id'=>$this->eva_act_id,
00116 ':eva_fecha_inicio'=>$this->eva_fecha_inicio,
00117 ':eva_fecha_fin'=>$this->eva_fecha_fin
00118 );
00119
00120 if( is_null( $this->eva_id ) ){
00121
00122 $query = 'INSERT INTO evaluaciones ( eva_nombre, eva_act_id, eva_fecha_inicio, eva_fecha_fin )VALUES'
00123 .'( '
00124 ." :eva_nombre, :eva_act_id, "
00125 .(
00126 Database::driver( ) == 'oci'?
00127 "to_date(:eva_fecha_inicio,'YYYY-MM-DD'), to_date(:eva_fecha_fin,'YYYY-MM-DD') "
00128 :
00129 ":eva_fecha_inicio, :eva_fecha_fin"
00130 )
00131 .' )';
00132
00133 }else{
00134
00135 $data[':eva_id']=$this->eva_id;
00136
00137 $query = 'UPDATE evaluaciones SET '
00138 .' eva_nombre = :eva_nombre, eva_act_id = :eva_act_id, '
00139 .(
00140 Database::driver( ) == 'oci'?
00141 "eva_fecha_inicio = to_date(:eva_fecha_inicio,'YYYY-MM-DD'), "
00142 ."eva_fecha_fin = to_date(:eva_fecha_fin,'YYYY-MM-DD') "
00143 :
00144 "eva_fecha_inicio = :eva_fecha_inicio, eva_fecha_fin = :eva_fecha_fin"
00145 )
00146 .' WHERE eva_id = :eva_id';
00147 }
00148
00149 $consulta = $db->prepare( $query );
00150 $consulta->execute( $data );
00151
00152 $consulta->closeCursor( );
00153 unset( $field, $value, $consulta );
00154
00155 unset( $this->eva_actividad );
00156 $this->eva_actividad = new Actividad( );
00157
00158 $Inventarios = $this->eva_inventarios;
00159
00160 if( !$this->getId( ) ){
00161 $this->getEvaluacionPorId( Database::lastInsertId( 'evaluaciones_seq' ) );
00162 $cue_demo_id = Utilitario::getCuestionarioDemografico( );
00163 if($cue_demo_id)
00164 $db->exec(
00165 'INSERT INTO evaluaciones_demograficos ( eva_id, cue_id )VALUES( '.$this->getId( ).', '.$cue_demo_id.' )'
00166 );
00167 }
00168
00169 $db->exec( 'DELETE FROM evaluaciones_inventarios WHERE eva_id = '.$this->getId( ) );
00170
00171 foreach( $Inventarios as $Inventario_id )
00172 $db->exec( 'INSERT INTO evaluaciones_inventarios ( eva_id, inv_id )VALUES( '.$this->getId( ).', '.$Inventario_id.' )' );
00173
00174 }
00175
00182 public function eliminar( ){
00183 if( !$this->getId( ) )
00184 return 0;
00185
00186 $db = Database::getInstance();
00187
00188 $db->exec( 'DELETE FROM evaluaciones_demograficos WHERE eva_id = '.$this->getId( ) );
00189
00190 $rt = $db->exec( 'DELETE FROM evaluaciones WHERE eva_id = '.$this->getId( ) );
00191
00192 $this->limpiar( );
00193
00194 return $rt ? $rt : 0;
00195 }
00196
00204 public function RegistrarProfesor( ){
00205
00206 if( !$this->getId( ) ) return false;
00207
00208 $Actividad = $this->getActividad( );
00209
00210 $Profesor = new Profesor( );
00211
00212 $success = $Profesor->getProfesorPorCuenta( $Actividad->getProfesor( )->Cuenta );
00213
00214 $db = Database::getInstance( );
00215
00216 if( !$success ){
00217 $nClave = substr( md5( rand(0,999) ), 10, 8 );
00218 $db->exec(
00219 "INSERT INTO profesores ( pro_cuenta, pro_clave )VALUES( '"
00220 .$Actividad->getProfesor( )->Cuenta."', '".$nClave."' )"
00221 );
00222 $Profesor->getProfesorPorId( Database::lastInsertId( 'profesores_seq' ) );
00223 }
00224
00225 $db->exec( 'DELETE FROM evaluaciones_profesores WHERE eva_id = '.$this->getId( ) );
00226 $db->exec( 'INSERT INTO evaluaciones_profesores ( eva_id, pro_id )VALUES( '.$this->getId( ).', '.$Profesor->getId( ).' )' );
00227
00228 return;
00229
00230 }
00231
00239 public function RegistrarParticipantes( ){
00240
00241 if( !$this->getId( ) ) return false;
00242
00243 $Actividad = $this->getActividad( );
00244
00245 $Participantes = $Actividad->getParticipantesConCorreo( );
00246
00247 $db = Database::getInstance( );
00248 $consulta = $db->prepare(
00249 'INSERT INTO participantes ( par_vista_id, par_tipo, par_clave )VALUES( :vista_id, :tipo, :clave )'
00250 );
00251
00252 foreach( $Participantes as $key => $Participante )
00253 if(!$Participante->Registrado)
00254 $consulta->execute(
00255 array(
00256 ':vista_id' => $Participante->VistaId,
00257 ':tipo' => $Participante->Tipo,
00258 ':clave' => substr( md5( rand(0,999) ), 10, 8 )
00259 )
00260 );
00261
00262 $consulta->closeCursor( ); unset( $consulta );
00263 $db->exec( 'DELETE FROM evaluaciones_participantes WHERE eva_id = '.$this->getId( ) );
00264
00265 $query ='INSERT INTO evaluaciones_participantes ( eva_id, par_id )VALUES( :eva_id, :par_id )' ;
00266 $consulta = $db->prepare( $query );
00267
00268 $Participantes = $Actividad->getParticipantesConCorreo( );
00269
00270 foreach( $Participantes as $key => $Participante )
00271 if( $Participante->Registrado )
00272 $consulta->execute( array( ':eva_id' => $this->getId( ), ':par_id' => $Participante->Id ) );
00273
00274
00275 $consulta->closeCursor( ); unset( $consulta ); unset( $Participantes );
00276
00277 return true;
00278
00279 }
00280
00295 public function NotificarParticipantes( $correo ){
00296
00297 if( !$this->getId( ) )
00298 return false;
00299
00300 set_time_limit( 0 );
00301
00302 $Actividad = $this->getActividad( );
00303
00304 $Participantes = $this->getParticipantes( );
00305
00306 $Inventarios = $this->GenerarListaInventarios( );
00307
00308 $correo = array(
00309 'subject'=>'IESA Feedback Gerencial - Nuevo proceso de Evaluación',
00310 'body'=>( !$Inventarios['Evaluadores'] ) ?
00311 file_get_contents( $_SERVER['DOCUMENT_ROOT'].'/plantillas/notificacion_participante.html' )
00312 :
00313 file_get_contents( $_SERVER['DOCUMENT_ROOT'].'/plantillas/notificacion_participante_360.html' )
00314 );
00315
00316 $transport = Swift_SmtpTransport::newInstance( Config::get('swiftmailer/uri'), Config::get('swiftmailer/port') )
00317 ->setUsername( Config::get('swiftmailer/account/user') )
00318 ->setPassword( Config::get('swiftmailer/account/password') );
00319
00320 $mailer = Swift_Mailer::newInstance($transport);
00321
00322 $message = Swift_Message::newInstance( $correo['subject'] )
00323 ->setFrom( array( Config::get('swiftmailer/from/mail') => Config::get('swiftmailer/from/name') ) );
00324
00325 $iesa_logo = $message->embed( Swift_Image::fromPath( $_SERVER['DOCUMENT_ROOT'].'/public/images/iesa_logo_90x90.jpg' ) );
00326
00327 $fallidos = array( );
00328 $numSent = 0;
00329
00330 $db = Database::getInstance( );
00331 $consulta = $db->prepare(
00332 'UPDATE evaluaciones_participantes SET par_notificado = 1 WHERE par_id = :par_id AND eva_id = :eva_id'
00333 );
00334
00335 foreach ($Participantes as $key => $Participante){
00336
00337 $variables = array(
00338 '%ACTIVIDAD_NOMBRE%',
00339 '%ACTIVIDAD_LOCALIDAD%',
00340 '%FECHA_ENVIO%',
00341 '%PARTICIPANTE_CORREO%',
00342 '%PARTICIPANTE_CLAVE%',
00343 '%PARTICIPANTE_NOMBRE%',
00344 '%FECHA_FINALIZACION%',
00345 '%LISTA_INVENTARIOS%',
00346 '%LISTA_CUESTIONARIOS_EVALUADORES%',
00347 '%IESA_LOGO%'
00348 );
00349 $valores = array(
00350 $Actividad->getNombre( ),
00351 htmlentities( $Actividad->getLocalidad( )->Nombre ),
00352 date('d/m/Y'),
00353 $Participante->Correo,
00354 $Participante->Clave,
00355 htmlentities( $Participante->Nombre ),
00356 $this->getFechaFin( ),
00357 $Inventarios['Participantes'],
00358 $Inventarios['Evaluadores'],
00359 $iesa_logo
00360 );
00361
00362 $message->setTo( array( $Participante->Correo => $Participante->Nombre ) )
00363 ->setBody( str_replace( $variables, $valores, $correo['body'] ), 'text/html' );
00364
00365 if( $success = $mailer->send( $message ) ){
00366 $numSent++;
00367 $consulta->execute( array( ':eva_id'=>$this->getId( ), ':par_id'=>$Participante->Id ) );
00368 }else{
00369 array_push( $fallidos,
00370 array(
00371 'correo'=>$Participante->Correo,
00372 'nombre'=> utf8_decode($Participante->Nombre)
00373 )
00374 );
00375 }
00376
00377 }
00378
00379 if( session_id( ) == '' )session_start( );
00380
00381 $_SESSION['timeout'] = time( ) + Config::get( 'security/session_timeout' );
00382
00383 unset( $consulta );
00384 return sizeof( $fallidos ) > 0 ? $fallidos : $numSent ;
00385
00386 }
00387
00402 public function NotificarParticipante( $id ){
00403
00404 if( !$this->getId( ) ) return false;
00405
00406 set_time_limit( 0 );
00407
00408 $Actividad = $this->getActividad( );
00409
00410 $Inventarios = $this->GenerarListaInventarios( );
00411
00412 $correo = array(
00413 'subject'=>'IESA Feedback Gerencial - Nuevo proceso de Evaluación',
00414 'body'=>( !$Inventarios['Evaluadores'] ) ?
00415 file_get_contents( $_SERVER['DOCUMENT_ROOT'].'/plantillas/notificacion_participante.html' )
00416 :
00417 file_get_contents( $_SERVER['DOCUMENT_ROOT'].'/plantillas/notificacion_participante_360.html' )
00418 );
00419
00420 $transport = Swift_SmtpTransport::newInstance( Config::get('swiftmailer/uri'), Config::get('swiftmailer/port') )
00421 ->setUsername( Config::get('swiftmailer/account/user') )
00422 ->setPassword( Config::get('swiftmailer/account/password') );
00423
00424 $mailer = Swift_Mailer::newInstance($transport);
00425
00426 $message = Swift_Message::newInstance( $correo['subject'] )
00427 ->setFrom( array( Config::get('swiftmailer/from/mail') => Config::get('swiftmailer/from/name') ) );
00428
00429 $iesa_logo = $message->embed( Swift_Image::fromPath( $_SERVER['DOCUMENT_ROOT'].'/public/images/iesa_logo_90x90.jpg' ) );
00430
00431 $db = Database::getInstance( );
00432
00433 if( $Actividad->getTipo( )->Id == 8 )
00434 $query =
00435 'SELECT par.par_id as ID,par.par_clave as CLAVE,eva_par.par_notificado as NOTIFICADO,vw_par.NOMBRECOMPLETO as NOMBRE,'
00436 .' vw_par.CEDULA as CEDULA, vw_par.CORREO_IESA as CORREO, par.par_clave'
00437 .' FROM evaluaciones_participantes eva_par'
00438 .' INNER JOIN participantes par ON ( par.par_id = eva_par.par_id ) '
00439 ." INNER JOIN VW_PARTICIPANTES_POST vw_par ON ( par.par_vista_id = vw_par.ID_UNICO AND par.par_tipo = 'POSTGRADO' ) "
00440 .' WHERE eva_par.eva_id = :eva_id AND vw_par.ID_UNICO = :vista_id GROUP BY eva_par.par_id';
00441 else
00442 $query =
00443 'SELECT par.par_id as ID, par.par_clave as CLAVE, eva_par.par_notificado as NOTIFICADO, vw_par.NOMBRE as NOMBRE,'
00444 .' vw_par.CEDULA as CEDULA, vw_par.CORREO_DESEADO as CORREO, par.par_clave'
00445 .' FROM evaluaciones_participantes eva_par'
00446 .' INNER JOIN participantes par ON ( par.par_id = eva_par.par_id ) '
00447 ." INNER JOIN VW_PARTICIPANTES_DDG vw_par ON ( par.par_vista_id = vw_par.ID_UNICO AND par.par_tipo = 'DDG' ) "
00448 .' WHERE eva_par.eva_id = :eva_id AND vw_par.ID_UNICO = :vista_id GROUP BY eva_par.par_id';
00449
00450 $consulta = $db->prepare( $query );
00451 $consulta->execute( array( ':eva_id'=>$this->getId( ), ':vista_id'=>$id ) );
00452
00453 $resultado = $consulta->fetch( PDO::FETCH_ASSOC );
00454 unset( $consulta );
00455
00456 if(!$resultado)
00457 return false;
00458
00459 $variables = array(
00460 '%ACTIVIDAD_NOMBRE%',
00461 '%ACTIVIDAD_LOCALIDAD%',
00462 '%FECHA_ENVIO%',
00463 '%PARTICIPANTE_CORREO%',
00464 '%PARTICIPANTE_CLAVE%',
00465 '%PARTICIPANTE_NOMBRE%',
00466 '%FECHA_FINALIZACION%',
00467 '%LISTA_INVENTARIOS%',
00468 '%LISTA_CUESTIONARIOS_EVALUADORES%',
00469 '%IESA_LOGO%'
00470 );
00471 $valores = array(
00472 $Actividad->getNombre( ),
00473 htmlentities( $Actividad->getLocalidad( )->Nombre ),
00474 date('d/m/Y'),
00475 $resultado['correo'],
00476 $resultado['clave'],
00477 htmlentities( $resultado['nombre'] ),
00478 $this->getFechaFin( ),
00479 $Inventarios['Participantes'],
00480 $Inventarios['Evaluadores'],
00481 $iesa_logo
00482 );
00483
00484 $message->setTo( array( $resultado['correo'] => $resultado['nombre'] ) )
00485 ->setBody( str_replace( $variables, $valores, $correo['body'] ), 'text/html' );
00486
00487 $success= $mailer->send( $message );
00488
00489 if( session_id( ) == '' ) session_start( );
00490
00491 $_SESSION['timeout'] = time( ) + Config::get( 'security/session_timeout' );
00492
00493 return $success;
00494
00495 }
00496
00497
00506 private function GenerarListaInventarios( ){
00507
00508 $Inventarios = $this->getInventarios( );
00509 $Participantes = '<ul>';
00510 $Evaluadores = '<ul>';
00511
00512 foreach( $Inventarios as $inv_key => $inv ){
00513 $Participantes .= '<li>'.htmlentities( utf8_decode($inv->Nombre) ).'<ul>';
00514 if( $inv->Tipo == 1 ){
00515 $Evaluadores .= '<li>'.htmlentities( utf8_decode($inv->Nombre) );
00516 $Evaluadores .= '<ul>';
00517 foreach( $inv->Cuestionarios as $cue_key => $cue ){
00518 if( $cue->Tipo == 1 ) $Evaluadores.= '<li>'.htmlentities( utf8_decode($cue->Nombre) .' - Otros' ).'</li>';
00519 else $Participantes.= '<li>'.htmlentities( utf8_decode($cue->Nombre) . ' - Auto Evaluación' ).'</li>';
00520 }
00521 $Evaluadores .= '</ul>';
00522 }else{
00523 foreach( $inv->Cuestionarios as $cue_key => $cue )
00524 $Participantes.= '<li>'.htmlentities( utf8_decode($cue->Nombre) ).'</li>';
00525 }
00526 $Participantes .= '</ul>';
00527 }
00528 $Participantes .= '</ul>';
00529 $Evaluadores .= '</ul>';
00530 unset( $Inventarios );
00531
00532 return array(
00533 'Participantes'=>$Participantes,
00534 'Evaluadores'=>$Evaluadores
00535 );
00536 }
00537
00549 public function NotificarProfesor( ){
00550
00551 if( !$this->getId( ) )
00552 return false;
00553
00554 set_time_limit( 0 );
00555
00556 $Profesor = $this->getProfesor( );
00557
00558 $transport = Swift_SmtpTransport::newInstance( Config::get('swiftmailer/uri'), Config::get('swiftmailer/port') )
00559 ->setUsername( Config::get('swiftmailer/account/user') )
00560 ->setPassword( Config::get('swiftmailer/account/password') );
00561
00562 $mailer = Swift_Mailer::newInstance($transport);
00563
00564 $message = Swift_Message::newInstance( 'IESA Feedback Gerencial - Nuevo proceso de evaluación' )
00565 ->setFrom( array( Config::get('swiftmailer/from/mail') => Config::get('swiftmailer/from/name') ) );
00566
00567 $variables = array(
00568 '%EVALUACION_NOMBRE%',
00569 '%PROFESOR_CUENTA%',
00570 '%PROFESOR_CLAVE%',
00571 '%PROFESOR_NOMBRE%'
00572 );
00573 $valores = array(
00574 $this->getNombre( ),
00575 $Profesor->getCuenta( ),
00576 $Profesor->getClave( ),
00577 $Profesor->getNombreCompleto( )
00578 );
00579
00580 $correo = str_replace(
00581 $variables,
00582 $valores,
00583 file_get_contents( $_SERVER['DOCUMENT_ROOT'].'/plantillas/notificacion_profesor.html' )
00584 );
00585
00586 $message->setTo( array( $Profesor->getCorreoElectronico( ) => $Profesor->getNombreCompleto( ) ) )
00587 ->setBody( $correo, 'text/html' );
00588
00589 $success = $mailer->send( $message );
00590
00591 if( session_id( ) == '' ) session_start( );
00592
00593 $_SESSION['timeout'] = time( ) + Config::get( 'security/session_timeout' );
00594
00595 unset( $consulta );
00596 return $success;
00597
00598 }
00599
00610 public function getProfesor( ){
00611
00612 if( !$this->getId( ) )
00613 return false;
00614
00615 $db = Database::getInstance( );
00616
00617 $consulta = $db->prepare( 'SELECT pro_id FROM evaluaciones_profesores WHERE eva_id = :eva_id' );
00618 $consulta->execute( array( ':eva_id'=>$this->getId( ) ) );
00619
00620 $resultado = $consulta->fetch( PDO::FETCH_ASSOC );
00621 unset( $consulta );
00622
00623 $Profesor = new Profesor( $resultado['pro_id'] );
00624
00625 return $Profesor;
00626 }
00627
00640 public function getParticipantes( $idLikeIndex=false, $use_entities=true ){
00641
00642 if( !$this->getId( ) )
00643 return false;
00644
00645 $Actividad = $this->getActividad( );
00646
00647 $db = Database::getInstance( );
00648
00649 if( $Actividad->getTipo( )->Id == 8 )
00650 $query =
00651 'SELECT par.par_id as ID,par.par_clave as CLAVE,eva_par.par_notificado as NOTIFICADO,vw_par.NOMBRECOMPLETO as NOMBRE,'
00652 .' vw_par.CEDULA as CEDULA, vw_par.CORREO_IESA as CORREO'
00653 .' FROM evaluaciones_participantes eva_par'
00654 .' INNER JOIN participantes par ON ( par.par_id = eva_par.par_id ) '
00655 ." INNER JOIN VW_PARTICIPANTES_POST vw_par ON ( par.par_vista_id = vw_par.ID_UNICO AND par.par_tipo = 'POSTGRADO' ) "
00656 .' WHERE eva_par.eva_id = :eva_id GROUP BY vw_par.CORREO_IESA';
00657 else
00658 $query =
00659 'SELECT par.par_id as ID, par.par_clave as CLAVE, eva_par.par_notificado as NOTIFICADO, vw_par.NOMBRE as NOMBRE,'
00660 .' vw_par.CEDULA as CEDULA, vw_par.CORREO_DESEADO as CORREO'
00661 .' FROM evaluaciones_participantes eva_par'
00662 .' INNER JOIN participantes par ON ( par.par_id = eva_par.par_id ) '
00663 ." INNER JOIN VW_PARTICIPANTES_DDG vw_par ON ( par.par_vista_id = vw_par.ID_UNICO AND par.par_tipo = 'DDG' ) "
00664 .' WHERE eva_par.eva_id = :eva_id GROUP BY vw_par.CORREO_DESEADO';
00665
00666 $consulta = $db->prepare( $query );
00667 $consulta->execute( array( ':eva_id'=>$this->getId( ) ) );
00668
00669 $Participantes = array( );
00670
00671 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ) {
00672 $item = new stdClass( );
00673 $item->Id = $resultado['id'];
00674 $item->Notificado = $resultado['notificado'];
00675 if( $use_entities )
00676 $item->Nombre = htmlentities( ucwords( strtolower( trim( $resultado['nombre'] ) ) ) );
00677 else
00678 $item->Nombre = ucwords( strtolower( trim( $resultado['nombre'] ) ) );
00679 $item->Cedula = $resultado['cedula'];
00680 $item->Correo = $resultado['correo'];
00681 $item->Clave = $resultado['clave'];
00682
00683 if( $idLikeIndex ) $Participantes[$item->Id]=$item;
00684 else array_push( $Participantes, $item );
00685 }
00686 $consulta->closeCursor( ); unset( $consulta );
00687
00688 return $Participantes;
00689 }
00690
00703 public function getInventarios( $simple=false ){
00704
00705 if( !$this->getId( ) )
00706 return false;
00707
00708 $db = Database::getInstance( );
00709
00710 $consulta = $db->prepare(
00711 'SELECT'
00712 .' inv.inv_id, inv.inv_nombre, inv.inv_tipo,'
00713 .' cue.cue_id, cue.cue_nombre, cue.cue_tipo, cue.cue_origen_id'
00714 .( !$simple ? ', inv.inv_descripcion, cue.cue_instrucciones' : '' )
00715 .' FROM evaluaciones_inventarios eva_inv'
00716 .' JOIN inventarios inv ON ( eva_inv.inv_id = inv.inv_id ) '
00717 .' JOIN cuestionarios cue ON ( cue.cue_inv_id = inv.inv_id ) '
00718 .' WHERE eva_inv.eva_id = :eva_id ORDER BY inv.inv_id'
00719 );
00720
00721 $consulta->execute( array( ':eva_id'=>$this->getId( ) ) );
00722
00723 $Inventarios = array( );
00724
00725 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
00726
00727 if( sizeof($Inventarios) == 0 || $Inventarios[sizeof($Inventarios)-1]->Id != $resultado['inv_id'] ){
00728 $item = new stdClass( );
00729 $item->Id = $resultado['inv_id'];
00730 $item->Nombre = $resultado['inv_nombre'];
00731 if( !$simple ) $item->Descripcion = $resultado['inv_descripcion'];
00732 $item->Cuestionarios = array( );
00733 $item->Tipo = $resultado['inv_tipo'];
00734 array_push( $Inventarios, $item );
00735 }
00736
00737 $sub_item = new stdClass( );
00738 $sub_item->Id = $resultado['cue_id'];
00739 $sub_item->Nombre = $resultado['cue_nombre'];
00740 if( !$simple ) $sub_item->Instrucciones = $resultado['cue_instrucciones'];
00741 $sub_item->Origen = $resultado['cue_origen_id'];
00742 $sub_item->Tipo = $resultado['cue_tipo'];
00743 array_push( $Inventarios[sizeof($Inventarios)-1]->Cuestionarios, $sub_item );
00744
00745 }
00746
00747 $consulta->closeCursor( ) ;unset( $consulta );
00748
00749 return $Inventarios;
00750
00751 }
00752
00763 public function getCuestionarioDemografico( ){
00764
00765 if( !$this->getId( ) )
00766 return false;
00767
00768 $db = Database::getInstance( );
00769
00770 $consulta = $db->prepare( 'SELECT cue_id FROM evaluaciones_demograficos WHERE eva_id = :eva_id' );
00771
00772 $consulta->execute( array( ':eva_id'=>$this->getId( ) ) );
00773
00774 $cue = $consulta->fetchall();
00775
00776 $consulta->CloseCursor( ); unset( $consulta );
00777
00778 return $cue ? $cue['inv_id'] : 0;
00779
00780 }
00781
00792 public function getId( ){ return $this->eva_id ? $this->eva_id : NULL; }
00793
00803 public function getNombre( ){ return $this->eva_nombre; }
00804
00814 public function setNombre( $val ){ $this->eva_nombre = $val; }
00815
00825 public function getActividadId( ){ return $this->eva_act_id; }
00826
00836 public function setActividadId( $val ){ $this->eva_act_id = $val; }
00837
00848 public function getActividad( ){
00849 $rt = NULL;
00850 if( !$this->eva_actividad->getId( ) )
00851 $rt = $this->getId( ) && $this->eva_actividad->getActividadPorId( $this->eva_act_id ) ? $this->eva_actividad : NULL ;
00852 else
00853 $rt = $this->eva_actividad;
00854
00855 return $rt;
00856 }
00857
00867 public function getFechaInicio( ){
00868 if(!$this->eva_fecha_inicio)
00869 return '';
00870 $date = preg_split( '[-]', $this->eva_fecha_inicio ); return $date[2].'/'.$date[1].'/'.$date[0];
00871 }
00872
00882 public function setFechaInicio( $val ){
00883 $date = preg_split( '[/]', $val ); $this->eva_fecha_inicio = $date[2].'-'.$date[1].'-'.$date[0];
00884 }
00885
00895 public function getFechaFin( ){
00896 if(!$this->eva_fecha_fin)
00897 return '';
00898 $date = preg_split( '[-]', $this->eva_fecha_fin ); return $date[2].'/'.$date[1].'/'.$date[0];
00899 }
00900
00910 public function setFechaFin( $val ){
00911 $date = preg_split( '[/]', $val ); $this->eva_fecha_fin = $date[2].'-'.$date[1].'-'.$date[0];
00912 }
00913
00924 public function setInventariosId( $val ){ $this->eva_inventarios = $val; }
00925
00936 public function getInventariosId( ){ return $this->eva_inventarios; }
00937
00938
00954 public function ExportarDatos( $inv_ids ){
00955
00956 if( !$this->getId( ) ) return;
00957
00958 $Participantes = $this->getParticipantes( true, false );
00959 $Inventarios = array( );
00960
00961 $db = Database::getInstance( );
00962
00963 $consulta = $db->prepare(
00964 'SELECT'
00965 .' inv.inv_id, inv.inv_nombre, inv.inv_tipo,'
00966 .' cue.cue_id, cue.cue_nombre, cue.cue_tipo, cue.cue_origen_id'
00967 .' FROM evaluaciones_inventarios eva_inv'
00968 .' JOIN inventarios inv ON ( eva_inv.inv_id = inv.inv_id ) '
00969 .' JOIN cuestionarios cue ON ( cue.cue_inv_id = inv.inv_id ) '
00970 .' WHERE eva_inv.eva_id = :eva_id AND inv.inv_id = :inv_id AND cue.cue_origen_id = 0 ORDER BY inv.inv_id '
00971 );
00972
00973 foreach( $inv_ids as $Inv ){
00974 $consulta->execute( array( ':eva_id'=>$this->getId( ), ':inv_id'=>$Inv ) );
00975 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
00976
00977 if( sizeof($Inventarios) == 0 || $Inventarios[sizeof($Inventarios)-1]->Id != $resultado['inv_id'] )
00978 array_push( $Inventarios, ( object ) array(
00979 'Id' => $resultado['inv_id'],
00980 'Nombre' => $resultado['inv_nombre'],
00981 'Tipo' => $resultado['inv_tipo'],
00982 'Cuestionarios' => array( )
00983 ));
00984
00985 array_push( $Inventarios[sizeof($Inventarios)-1]->Cuestionarios, ( object )array(
00986 'Id' => $resultado['cue_id'],
00987 'Nombre' => $resultado['cue_nombre'],
00988 'Origen' => $resultado['cue_origen_id'],
00989 'Tipo' => $resultado['cue_tipo']
00990 ) );
00991 }
00992 }
00993 $consulta->closeCursor( ) ;unset( $consulta );
00994
00995 $query = 'SELECT pre_orden FROM preguntas WHERE pre_cue_id = :cue_id ORDER BY pre_orden';
00996 $consulta = $db->prepare( $query );
00997
00998 foreach( $Inventarios as $i => &$Inv ){
00999 foreach( $Inv->Cuestionarios as $j => &$Cue ){
01000 $Cue->Preguntas = array( );
01001 $consulta->execute( array( ':cue_id'=>$Cue->Id ) );
01002 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) )
01003 $Cue->Preguntas[ $resultado['pre_orden'] ] = array( );
01004 }
01005 }
01006 $consulta->closeCursor( ); unset( $consulta );
01007
01008 $query =
01009 'SELECT '
01010 .'res.res_valor, res.res_valor_extendido, res.eval_tipo, pre.pre_orden, '
01011 .'cue.cue_id, cue.cue_nombre, cue.cue_origen_id '
01012 .'FROM respuestas res '
01013 .'JOIN preguntas pre ON ( pre.pre_id = res.pre_id ) '
01014 .'JOIN cuestionarios cue ON ( cue.cue_id = res.cue_id ) '
01015 .'JOIN inventarios inv ON ( inv.inv_id = cue.cue_inv_id ) '
01016 .'WHERE '
01017 .'res.par_id = :par_id AND res.eva_id = :eva_id AND inv.inv_id = :inv_id '
01018 .'AND cue.cue_id = :cue_id OR cue.cue_origen_id = :cue_id '
01019 .'ORDER BY cue.cue_id, pre.pre_orden ASC';
01020 $consulta = $db->prepare( $query );
01021
01022 foreach( $Participantes as $j => $Par ){
01023 foreach( $Inventarios as $j => &$Inv ){
01024 foreach( $Inv->Cuestionarios as $k => &$Cue ){
01025 $consulta->execute( array(
01026 ':par_id'=>$Par->Id, ':eva_id'=>$this->getId( ), ':inv_id'=>$Inv->Id, ':cue_id'=>$Cue->Id,
01027 ) );
01028 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01029 $valor = array( );
01030 if( $resultado['res_valor_extendido'] != '' ){
01031 foreach( json_decode( $resultado['res_valor_extendido'] ) as $x => $v ) array_push( $valor, $v->Valor );
01032 }else{ $valor = $resultado['res_valor']; }
01033
01034 if( !isset( $Cue->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id] ) )
01035 $Cue->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id] = ( object ) array(
01036 'Participante'=>0,
01037 'Jefes'=> array( ),
01038 'Pares'=> array( ),
01039 'Colaboradores'=> array( )
01040 );
01041
01042 if( $resultado[ 'eval_tipo' ] == 0 )
01043 $Cue->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id]->Participante = $valor;
01044 else if( $resultado[ 'eval_tipo' ] == 1 )
01045 array_push( $Cue->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id]->Jefes, $valor );
01046 else if( $resultado[ 'eval_tipo' ] == 2 )
01047 array_push( $Cue->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id]->Pares, $valor );
01048 else if( $resultado[ 'eval_tipo' ] == 3 )
01049 array_push( $Cue->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id]->Colaboradores, $valor );
01050 }
01051 }
01052 }
01053 }
01054 $consulta->closeCursor( ); unset( $consulta );
01055
01056
01057 $rt = array( );
01058 foreach( $Inventarios as $i => $I ){
01059 $Inventario = ( object ) array( 'Nombre'=>$I->Nombre, 'Cuestionarios'=>array( ) );
01060 foreach( $I->Cuestionarios as $j=>$C ){
01061 $Cuestionario = ( object ) array( 'Nombre'=>$C->Nombre, 'Filas'=>array( ) );
01062 foreach( $Participantes as $k=>$P ){
01063 $Fila = array(
01064 'Nombre'=>$P->Nombre, 'Documento de Identidad'=>$P->Cedula, 'Correo Electrónico'=>$P->Correo
01065 );
01066 foreach( $C->Preguntas as $l=>$Pre ){
01067 $Fila['P'.$l] = (object)array(
01068 'Participante' => 0,
01069 'Jefes' => array( ),
01070 'Pares' => array( ),
01071 'Colaboradores' => array( )
01072 );
01073 if( isset( $Pre[$P->Id] ) ){
01074 $Fila['P'.$l]->Participante = is_array( $Pre[$P->Id]->Participante )
01075 ? implode(" ; ",$Pre[$P->Id]->Participante )
01076 : $Pre[$P->Id]->Participante;
01077
01078 foreach( $Pre[$P->Id]->Jefes as $m=>$Jefe ){
01079 array_push(
01080 $Fila['P'.$l]->Jefes,
01081 is_array( $Jefe ) ? implode(" ; ",$Jefe ) : $Jefe
01082 );
01083 }
01084 foreach( $Pre[$P->Id]->Pares as $m=>$Par ){
01085 array_push(
01086 $Fila['P'.$l]->Pares,
01087 is_array( $Par ) ? implode(" ; ",$Par ) : $Par
01088 );
01089 }
01090 foreach( $Pre[$P->Id]->Colaboradores as $m=>$Colaborador ){
01091 array_push(
01092 $Fila['P'.$l]->Colaboradores,
01093 is_array( $Colaborador ) ? implode(" ; ",$Colaborador ) : $Colaborador
01094 );
01095 }
01096
01097 }else
01098 $Fila['P'.$l]->Participante = NULL;
01099
01100 }
01101 array_push( $Cuestionario->Filas, $Fila );
01102 }
01103 array_push( $Inventario->Cuestionarios, $Cuestionario );
01104 }
01105 array_push( $rt, $Inventario );
01106 }
01107 unset( $Inventarios, $Participantes );
01108
01109 return $rt;
01110
01111 }
01112
01123 public function ExportarDatosDemograficos( ){
01124
01125 if( !$this->getId( ) ) return;
01126
01127 $Participantes = $this->getParticipantes( true, false );
01128
01129 $db = Database::getInstance( );
01130
01131 $consulta = $db->prepare(
01132 'SELECT '
01133 .'cue.cue_id, cue.cue_nombre, '
01134 .'pre.pre_id, pre.pre_orden, pre.pre_enunciado '
01135 .'FROM evaluaciones_demograficos eva_dem '
01136 .'JOIN cuestionarios cue ON ( cue.cue_id = eva_dem.cue_id ) '
01137 .'JOIN preguntas pre ON ( pre.pre_cue_id = eva_dem.cue_id ) '
01138 .'WHERE eva_dem.eva_id = :eva_id ORDER BY pre.pre_orden ASC'
01139 );
01140 $consulta->execute( array( ':eva_id' => $this->getId( ) ) );
01141 $Cuestionario = NULL;
01142 $Enunciados = array( );
01143 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01144 if( $Cuestionario == NULL )
01145 $Cuestionario = (object)array(
01146 'Id' => $resultado['cue_id'], 'Nombre' => $resultado['cue_nombre'], 'Preguntas' => array( ), 'Filas' => array( )
01147 );
01148 $Cuestionario->Preguntas[$resultado['pre_orden']] = array( );
01149 $Enunciados[ $resultado['pre_orden'] ] = $resultado['pre_enunciado'];
01150 }
01151 $consulta->closeCursor( ) ;unset( $consulta );
01152
01153 if( $Cuestionario==NULL ) return false;
01154
01155 $query =
01156 'SELECT '
01157 .'res.res_valor_extendido, pre.pre_orden '
01158 .'FROM respuestas res '
01159 .'JOIN preguntas pre ON ( pre.pre_id = res.pre_id ) '
01160 .'JOIN cuestionarios cue ON ( cue.cue_id = res.cue_id ) '
01161 .'WHERE res.par_id = :par_id AND cue.cue_id = :cue_id '
01162 .'ORDER BY cue.cue_id, pre.pre_orden ASC';
01163 $consulta = $db->prepare( $query );
01164
01165 foreach( $Participantes as $j => $Par ){
01166 $consulta->execute( array( ':par_id'=>$Par->Id, ':cue_id'=>$Cuestionario->Id ) );
01167 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01168 $Cuestionario->Preguntas[ $resultado[ 'pre_orden' ] ][$Par->Id] =
01169 json_decode( $resultado[ 'res_valor_extendido' ] )->Valor;
01170 }
01171 }
01172 $consulta->closeCursor( ); unset( $consulta );
01173
01174 foreach( $Participantes as $k=>$P ){
01175 $Fila = array( 'Nombre'=>$P->Nombre, 'Documento de Identidad'=>$P->Cedula, 'Correo Electrónico'=>$P->Correo );
01176 foreach( $Cuestionario->Preguntas as $l=>$Pre ){
01177 if( isset( $Pre[$P->Id] ) )
01178 $Fila[ $Enunciados[$l] ] = $Pre[$P->Id];
01179 else
01180 $Fila[ $Enunciados[$l] ] = NULL;
01181 }
01182 array_push( $Cuestionario->Filas, $Fila );
01183 }
01184
01185 unset( $Cuestionario->Preguntas );
01186
01187 return $Cuestionario;
01188
01189 }
01190
01406 public function getResultadosPorParticipante( $par_id = 0, $inv_id = 0 ){
01407
01408 if( !$this->getId( ) )
01409 throw new Exception('Evaluación especificada no existe.');
01410
01411 if( $par_id == 0 ) return $this->getResultadosDummy( $inv_id );
01412
01413 $Participante = new Participante( );
01414 if( !$Participante->getParticipantePorId( $par_id ) )
01415 throw new Exception('El participante especificado no existe. Participante ID ( '.$par_id.' )');
01416
01417 $Inventario = new Inventario( );
01418 if( !$Inventario->getInventarioPorId( $inv_id ) )
01419 throw new Exception('El inventario especificado no existe. Inventario ID ( '.$inv_id.' )');
01420
01421 $Actividad = $this->getActividad( );
01422
01423 $rt = ( object ) array(
01424 'Participante' => ( object ) array(
01425 'Id' => $par_id,
01426 'Nombre' => $Participante->getNombreCompleto( ),
01427 'Correo' => $Participante->getCorreoElectronico( ),
01428 'Cedula' => $Participante->getCedula( ),
01429 'Evaluadores' => $Participante->getEvaluadoresAgrupados( )
01430 ),
01431 'Actividad' => ( object ) array(
01432 'Id' => $Actividad->getId( ),
01433 'Nombre' => $Actividad->getNombre( ),
01434 'FechaInicio' => $Actividad->getFechaInicio( ),
01435 'FechaFin' => $Actividad->getFechaFin( ),
01436 'Tipo' => $Actividad->getTipo( )->Nombre,
01437 'Profesor' => $Actividad->getProfesor( )->Nombre,
01438 'Localidad' => $Actividad->getLocalidad( )->Nombre,
01439 'Materia' => $Actividad->getMateria( )->Nombre,
01440 ),
01441 'Inventario' => ( object ) array(
01442 'Id' => $inv_id,
01443 'Nombre' => $Inventario->getNombre( ),
01444 'Descripcion' => $Inventario->getDescripcion( ),
01445 'Tipo' => $Inventario->getTipo( ),
01446 'Introduccion'=>$Inventario->getReporteIntroduccion( ),
01447 'Cuestionarios' => array( )
01448 )
01449 );
01450
01451 $db = Database::getInstance( );
01452
01453 $cue_match = array( );
01454
01455
01456 $query =
01457 'SELECT '
01458 .'cue.cue_id, cue.cue_tipo, cue.cue_nombre, cue.cue_origen_id, cue.cue_gra_rangos, cuesub.cue_id as cue_dep_id, '
01459 .'cue.cue_gra_tipo, cue.cue_gra_estadistico, cue.cue_gra_analisis, '
01460 .'pre.pre_id, pre.pre_orden, pre.pre_tipo, pre.pre_enunciado, pre.pre_enunciado_b '
01461 .'FROM cuestionarios cue '
01462 .'JOIN inventarios inv ON ( inv.inv_id = cue.cue_inv_id ) '
01463 .'JOIN preguntas pre ON ( pre.pre_cue_id = cue.cue_id ) '
01464 .'LEFT OUTER JOIN cuestionarios cuesub ON ( cuesub.cue_origen_id = cue.cue_id ) '
01465 .'WHERE inv.inv_id = :inv_id AND cue.cue_tipo = 0 '
01466 .'ORDER by cue.cue_id, pre.pre_orden';
01467 $consulta = $db->prepare( $query );
01468 $consulta->execute( array( ':inv_id'=>$inv_id ) );
01469 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01470 $cue_count = sizeof( $rt->Inventario->Cuestionarios );
01471 if( $cue_count == 0 || $rt->Inventario->Cuestionarios[$cue_count - 1]->Id != $resultado['cue_id'] ){
01472 $cue_match[ $resultado['cue_id'] ] = (object)array( 'Index'=>$cue_count, 'Dimensiones'=>array( ) );
01473 array_push($rt->Inventario->Cuestionarios, ( object ) array(
01474 'Id' => $resultado['cue_id'],
01475 'Nombre' => $resultado['cue_nombre'],
01476 'Dependiente'=> $resultado['cue_dep_id'],
01477 'Grafico' => ( object ) array(
01478 'Tipo' => $resultado['cue_gra_tipo'],
01479 'Estadistico' => $resultado['cue_gra_estadistico'],
01480 'Grupos' => ( object ) array(
01481 'Dimensiones' =>
01482 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_DIMENSIONES ? true: false,
01483 'SubDimensiones' =>
01484 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_SUBDIMENSIONES ? true: false,
01485 'PreguntasDimensiones' =>
01486 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_PREGUNTAS_DIMENSIONES ? true: false,
01487 'PreguntasSubDimensiones' =>
01488 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_PREGUNTAS_SUBDIMENSIONES ? true: false
01489 ),
01490 'Rangos'=> json_decode( $resultado['cue_gra_rangos'] ),
01491 'PromedioGrupal' => ( object ) array(
01492 'Dimensiones' =>
01493 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_DIM_PROMEDIO_GRUPAL ? true : false,
01494 'SubDimensiones' =>
01495 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_SUBDIM_PROMEDIO_GRUPAL ? true: false,
01496 )
01497 ),
01498 'Dimensiones' => array( ),
01499 'RespondidoPor' => (object)array(
01500 'Jefe' => 0,
01501 'Pares' => 0,
01502 'Colaboradores' => 0,
01503 'Otros' => 0
01504 ),
01505 'Preguntas' => array(
01506 (object)array(
01507 'Id' => $resultado['pre_id'],
01508 'Tipo' => $resultado['pre_tipo'],
01509 'Enunciado' => $resultado['pre_enunciado'],
01510 'EnunciadoB' => $resultado['pre_enunciado_b'],
01511 'Dimensiones' => array( )
01512 )
01513 )
01514 ) );
01515 }else{
01516 array_push($rt->Inventario->Cuestionarios[$cue_count - 1]->Preguntas, ( object ) array(
01517 'Tipo'=>$resultado['pre_tipo'],
01518 'Enunciado'=>$resultado['pre_enunciado'],
01519 'EnunciadoB'=>$resultado['pre_enunciado_b'],
01520 'Dimensiones'=>array( )
01521 ) );
01522 }
01523 }
01524 $consulta->closeCursor( ); unset( $consulta );
01525
01526
01527 $query =
01528 'SELECT '
01529 .'cue.cue_id, dim.dim_id, dim.dim_connotacion_negativa, dim.dim_nombre, dimp.dim_nombre as dim_nombre_padre, '
01530 .'dim.dim_rangos '
01531 .'FROM dimensiones dim '
01532 .'LEFT OUTER JOIN dimensiones dimp ON ( dimp.dim_id = dim.dim_padre_id ) '
01533 .'JOIN cuestionarios cue ON ( cue.cue_id = dim.dim_cue_id ) '
01534 .'WHERE cue.cue_id = :cue_id '
01535 .'ORDER by cue.cue_id, dim.dim_id';
01536 $consulta = $db->prepare( $query );
01537 foreach( $rt->Inventario->Cuestionarios as $key => &$Cue ){
01538 $consulta->execute( array( ':cue_id'=>$Cue->Id ) );
01539 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01540 $dim_count = sizeof( $Cue->Dimensiones );
01541 $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ] = $dim_count;
01542 array_push( $Cue->Dimensiones, (object)array(
01543 'Id' => $resultado['dim_id'],
01544 'Nombre' => $resultado['dim_nombre'],
01545 'Padre' => $resultado['dim_nombre_padre'],
01546 'Rangos' => $resultado[ 'dim_rangos' ] ? json_decode( $resultado[ 'dim_rangos' ] ): array( ),
01547 'ConnotacionNegativa' => $resultado['dim_connotacion_negativa'] == 0 ? false : true,
01548 'Ocurrencias' => 0,
01549 'Ponderacion' => 0,
01550 'ValoresPosibles' => (object)array(
01551 'PorPregunta' => (object)array(
01552 'Minimo'=> NULL,
01553 'Maximo'=> NULL
01554 ),
01555 'Sumatoria' => (object)array(
01556 'Minimo'=> 0,
01557 'Maximo'=> 0
01558 ),
01559 'Promedio' => (object)array(
01560 'Minimo'=> 0,
01561 'Maximo'=> 0
01562 ),
01563 'PromedioPonderado' => (object)array(
01564 'Minimo'=> 0,
01565 'Maximo'=> 0
01566 )
01567 ),
01568 'Jefe'=>(object)array( 'Individuales'=>array( ), 'Totales'=>(object)array(
01569 'Sumatoria'=>0, 'Promedio'=>0, 'PromedioPonderado'=>0,
01570 ) ),
01571 'Pares'=>(object)array( 'Individuales'=>array( ), 'Totales'=>(object)array(
01572 'Sumatoria'=>0, 'Promedio'=>0, 'PromedioPonderado'=>0,
01573 ) ),
01574 'Colaboradores'=>(object)array( 'Individuales'=>array( ), 'Totales'=>(object)array(
01575 'Sumatoria'=>0, 'Promedio'=>0, 'PromedioPonderado'=>0,
01576 ) )
01577 ) );
01578 }
01579 }
01580 $consulta->closeCursor( ); unset( $consulta );
01581
01582
01583 $query =
01584 'SELECT '
01585 .'cue.cue_id, '
01586 .'pre.pre_tipo, pre.pre_orden, '
01587 .'res.res_valor, res.res_valor_extendido, '
01588 .'dim.dim_id '
01589 .'FROM preguntas pre '
01590 .'JOIN respuestas res ON ( res.pre_id = pre.pre_id ) '
01591 .'JOIN cuestionarios cue ON ( cue.cue_id = pre.pre_cue_id ) '
01592 .'JOIN alternativas alt ON ( alt.alt_id = res.alt_id ) '
01593 .'LEFT OUTER JOIN dimensiones dim ON ( dim.dim_id = alt.alt_dim_id ) '
01594 .'WHERE '
01595 .'res.eva_id = :eva_id AND '
01596 .'res.par_id = :par_id AND '
01597 .'res.eval_tipo = :eval_tipo AND '
01598 .'cue.cue_inv_id = :inv_id '
01599 .'ORDER BY cue.cue_id, pre_orden ASC';
01600 $consulta = $db->prepare( $query );
01601 $consulta->execute( array( ':eva_id'=>$this->getId( ) ,':par_id'=>$par_id, ':eval_tipo'=>0, ':inv_id'=>$inv_id ) );
01602 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01603 $CUE = &$rt->Inventario->Cuestionarios[ $cue_match[ $resultado['cue_id'] ]->Index ];
01604 $PREGUNTA = &$CUE->Preguntas[ $resultado['pre_orden']-1 ];
01605 $ParRespuesta = NULL;
01606 if(
01607 $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_PARES
01608 ||$resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_MULTIDIMENSIONAL
01609 ){
01610 foreach( json_decode( $resultado['res_valor_extendido'] ) as $i => $v ){
01611 if( !isset( $PREGUNTA->Dimensiones[ $v->Dimension ] ) )
01612 $PREGUNTA->Dimensiones[ $v->Dimension ] = (object)array(
01613 'Nombre'=>
01614 $CUE->Dimensiones[ $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $v->Dimension ] ]->Nombre,
01615 'Padre'=>
01616 $CUE->Dimensiones[ $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $v->Dimension ] ]->Padre,
01617 'Participante'=>0,
01618 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01619 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01620 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
01621 );
01622
01623 $PREGUNTA->Dimensiones[ $v->Dimension ]->Participante = $v->Valor;
01624 }
01625 }else{
01626 if( !isset( $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] ) )
01627 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] = (object)array(
01628 'Nombre'=>
01629 $CUE->Dimensiones[ $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]->Nombre,
01630 'Padre'=>
01631 $CUE->Dimensiones[ $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]->Padre,
01632 'Participante'=>0,
01633 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01634 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01635 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
01636 );
01637
01638 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ]->Participante = $resultado['res_valor'];
01639 }
01640 }
01641 $consulta->closeCursor( ); unset( $consulta );
01642
01643
01644 $query =
01645 'SELECT '
01646 .'res.cue_id, res.par_id, dim.dim_id, res.eval_id, res.eval_tipo, '
01647 .'res.res_sumatoria, res.res_promedio, res.res_promedio_ponderado, '
01648 .'( SELECT sum( sum_res.res_sumatoria ) - res.res_sumatoria FROM resultados sum_res '
01649 .'WHERE sum_res.eva_id = :eva_id AND sum_res.eval_tipo = :eval_tipo AND sum_res.dim_id = dim.dim_id ) / '
01650 .'( SELECT count( sum_res.res_sumatoria ) FROM resultados sum_res '
01651 .'WHERE sum_res.par_id <> :par_id AND sum_res.eva_id = :eva_id AND sum_res.eval_tipo = :eval_tipo '
01652 .'AND sum_res.dim_id = dim.dim_id ) '
01653 .'as res_otros_sumatoria, '
01654 .'( SELECT sum( sum_res.res_promedio ) - res.res_promedio FROM resultados sum_res '
01655 .'WHERE sum_res.eva_id = :eva_id AND sum_res.eval_tipo = :eval_tipo AND sum_res.dim_id = dim.dim_id ) / '
01656 .'( SELECT count( sum_res.res_promedio ) FROM resultados sum_res '
01657 .'WHERE sum_res.par_id <> :par_id AND sum_res.eva_id = :eva_id AND sum_res.eval_tipo = :eval_tipo '
01658 .'AND sum_res.dim_id = dim.dim_id ) '
01659 .'as res_otros_promedio, '
01660 .'( SELECT sum( sum_res.res_promedio_ponderado ) - res.res_promedio_ponderado FROM resultados sum_res '
01661 .'WHERE sum_res.eva_id = :eva_id AND sum_res.eval_tipo = :eval_tipo AND sum_res.dim_id = dim.dim_id ) / '
01662 .'( SELECT count( sum_res.res_promedio_ponderado ) FROM resultados sum_res '
01663 .'WHERE sum_res.par_id <> :par_id AND sum_res.eva_id = :eva_id AND sum_res.eval_tipo = :eval_tipo '
01664 .'AND sum_res.dim_id = dim.dim_id ) '
01665 .'as res_otros_promedio_ponderado '
01666 .'FROM resultados res '
01667 .'JOIN cuestionarios cue ON ( cue.cue_id = res.cue_id ) '
01668 .'JOIN inventarios inv ON ( inv.inv_id = cue.cue_inv_id ) '
01669 .'JOIN dimensiones dim ON ( dim.dim_id = res.dim_id ) '
01670 .'LEFT OUTER JOIN dimensiones dimp ON ( dimp.dim_id = dim.dim_padre_id ) '
01671 .'WHERE res.par_id = :par_id AND inv.inv_id = :inv_id AND res.eva_id = :eva_id AND res.eval_tipo = :eval_tipo '
01672 .'AND cue.cue_origen_id = :cue_origen_id '
01673 .'ORDER BY cue.cue_id, dim.dim_id ASC';
01674 $consulta = $db->prepare( $query );
01675 $consulta->execute( array(
01676 ':par_id'=>$par_id, ':inv_id'=>$inv_id, ':eva_id'=>$this->getId( ) ,':eval_tipo'=>0, ':cue_origen_id' => 0
01677 ) );
01678 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01679 $CUE_IDX = $cue_match[ $resultado['cue_id'] ]->Index;
01680 $DIM_IDX = $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ];
01681 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Participante = (object)array(
01682 'Sumatoria' => (float)$resultado[ 'res_sumatoria' ],
01683 'Promedio' => (float)$resultado[ 'res_promedio' ],
01684 'PromedioPonderado' => (float)$resultado[ 'res_promedio_ponderado' ]
01685 );
01686 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Otros = (object)array(
01687 'Sumatoria' => (float)$resultado[ 'res_otros_sumatoria' ],
01688 'Promedio' => (float)$resultado[ 'res_otros_promedio' ],
01689 'PromedioPonderado' => (float)$resultado[ 'res_otros_promedio_ponderado' ]
01690 );
01691 }
01692 $consulta->closeCursor( ); unset( $consulta );
01693
01694
01695 $query =
01696 'SELECT '
01697 .'cue.cue_id, pre.pre_id, pre.pre_tipo, pre.pre_orden, pre.pre_dimension_a, pre.pre_dimension_b, '
01698 .'pre.pre_pp_peso, dim.dim_id, alt.alt_valor '
01699 .'FROM preguntas pre '
01700 .'JOIN cuestionarios cue ON ( cue.cue_id = pre.pre_cue_id ) '
01701 .'JOIN alternativas alt ON ( alt.alt_pre_id = pre.pre_id ) '
01702 .'LEFT OUTER JOIN dimensiones dim ON ( dim.dim_id = alt.alt_dim_id ) '
01703 .'WHERE cue.cue_id = :cue_id ORDER BY cue.cue_id, pre_orden ASC';
01704 $consulta = $db->prepare( $query );
01705 foreach($rt->Inventario->Cuestionarios as $key => &$Cue ){
01706 $consulta->execute( array( ':cue_id' => $Cue->Id ) );
01707 $pre_id_curr = 0;
01708 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01709 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_PARES ){
01710 $DimensionA = &$Cue->Dimensiones[ $cue_match[ $resultado['cue_id'] ]
01711 ->Dimensiones[ $resultado['pre_dimension_a'] ] ];
01712 $DimensionB = &$Cue->Dimensiones[ $cue_match[ $resultado['cue_id'] ]
01713 ->Dimensiones[ $resultado['pre_dimension_b'] ] ];
01714
01715
01716 if(
01717 $DimensionA->ValoresPosibles->PorPregunta->Minimo == NULL
01718 || $DimensionA->ValoresPosibles->PorPregunta->Minimo > $resultado['alt_valor']
01719 )
01720 $DimensionA->ValoresPosibles->PorPregunta->Minimo = $resultado['alt_valor'];
01721 if(
01722 $DimensionB->ValoresPosibles->PorPregunta->Minimo == NULL
01723 || $DimensionB->ValoresPosibles->PorPregunta->Minimo > $resultado['alt_valor']
01724 )
01725 $DimensionB->ValoresPosibles->PorPregunta->Minimo = $resultado['alt_valor'];
01726
01727
01728 if(
01729 $DimensionA->ValoresPosibles->PorPregunta->Maximo == NULL
01730 || $DimensionA->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
01731 )
01732 $DimensionA->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
01733 if(
01734 $DimensionB->ValoresPosibles->PorPregunta->Maximo == NULL
01735 || $DimensionB->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
01736 )
01737 $DimensionB->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
01738
01739 $DimensionA->Ocurrencias++; $DimensionB->Ocurrencias++;
01740
01741 $DimensionA->Ponderacion += (float)$resultado['pre_pp_peso'];
01742 $DimensionB->Ponderacion += (float)$resultado['pre_pp_peso'];
01743
01744 }else{
01745 $Dimension = &$Cue->Dimensiones[ $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ] ];
01746 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_MULTIDIMENSIONAL ){
01747
01748 if($Dimension->ValoresPosibles->PorPregunta->Minimo == NULL)
01749 $Dimension->ValoresPosibles->PorPregunta->Minimo = 1;
01750
01751 if(
01752 $Dimension->ValoresPosibles->PorPregunta->Maximo == NULL
01753 || $Dimension->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
01754 )
01755 $Dimension->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
01756 $Dimension->Ocurrencias++;
01757 $Dimension->Ponderacion+= $resultado['pre_pp_peso'];
01758 }else{
01759
01760 if(
01761 $Dimension->ValoresPosibles->PorPregunta->Minimo == NULL
01762 || $Dimension->ValoresPosibles->PorPregunta->Minimo > $resultado['alt_valor']
01763 )
01764 $Dimension->ValoresPosibles->PorPregunta->Minimo = $resultado['alt_valor'];
01765
01766 if(
01767 $Dimension->ValoresPosibles->PorPregunta->Maximo == NULL
01768 || $Dimension->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
01769 )
01770 $Dimension->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
01771
01772 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_BIDIMENSIONAL ){
01773 $Dimension->Ocurrencias++;
01774 $Dimension->Ponderacion+= $resultado['pre_pp_peso'];
01775 }
01776 }
01777 }
01778 if( $pre_id_curr != $resultado['pre_id'] ){
01779 $pre_id_curr = $resultado['pre_id'];
01780 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_UNIDIMENSIONAL ){
01781 $Dimension->Ocurrencias++;
01782 $Dimension->Ponderacion+= $resultado['pre_pp_peso'];
01783 }
01784 }
01785 }
01786 foreach($Cue->Dimensiones as $i => &$Dim ){
01787 $Valores = &$Dim->ValoresPosibles;
01788
01789 if( $Valores->PorPregunta->Minimo == NULL ) $Valores->PorPregunta->Minimo = 0;
01790 if( $Valores->PorPregunta->Maximo == NULL ) $Valores->PorPregunta->Maximo = 0;
01791
01792 $Valores->Sumatoria->Minimo = $Valores->PorPregunta->Minimo * $Dim->Ocurrencias;
01793 $Valores->Sumatoria->Maximo = $Valores->PorPregunta->Maximo * $Dim->Ocurrencias;
01794
01795 $Valores->Promedio->Minimo = $Dim->Ocurrencias > 0 ? $Valores->Sumatoria->Minimo / $Dim->Ocurrencias : 0;
01796 $Valores->Promedio->Maximo = $Dim->Ocurrencias > 0 ? $Valores->Sumatoria->Maximo / $Dim->Ocurrencias : 0;
01797
01798 $Valores->PromedioPonderado->Minimo = $Dim->Ponderacion > 0 ? $Valores->Sumatoria->Minimo / $Dim->Ponderacion : 0;
01799 $Valores->PromedioPonderado->Maximo = $Dim->Ponderacion > 0 ? $Valores->Sumatoria->Maximo / $Dim->Ponderacion : 0;
01800
01801 foreach( $Dim->Rangos as $j => $Rango ){
01802
01803 if(
01804 ( $Valores->Sumatoria->Minimo == $Rango->Minimo || $Valores->Sumatoria->Minimo > $Rango->Minimo )
01805 &&
01806 ( $Valores->Sumatoria->Minimo == $Rango->Maximo || $Valores->Sumatoria->Minimo < $Rango->Maximo )
01807 )
01808 $Valores->Sumatoria->Minimo = $Rango->Valor;
01809 if(
01810 ( $Valores->Sumatoria->Maximo == $Rango->Minimo || $Valores->Sumatoria->Maximo > $Rango->Minimo )
01811 &&
01812 ( $Valores->Sumatoria->Maximo == $Rango->Maximo || $Valores->Sumatoria->Maximo < $Rango->Maximo )
01813 )
01814 $Valores->Sumatoria->Maximo = $Rango->Valor;
01815
01816 if(
01817 ( $Valores->Promedio->Minimo == $Rango->Minimo || $Valores->Promedio->Minimo > $Rango->Minimo )
01818 &&
01819 ( $Valores->Promedio->Minimo == $Rango->Maximo || $Valores->Promedio->Minimo < $Rango->Maximo )
01820 )
01821 $Valores->Promedio->Minimo = $Rango->Valor;
01822 if(
01823 ( $Valores->Promedio->Maximo == $Rango->Minimo || $Valores->Promedio->Maximo > $Rango->Minimo )
01824 &&
01825 ( $Valores->Promedio->Maximo == $Rango->Maximo || $Valores->Promedio->Maximo < $Rango->Maximo )
01826 )
01827 $Valores->Promedio->Maximo = $Rango->Valor;
01828
01829 if(
01830 ($Valores->PromedioPonderado->Minimo==$Rango->Minimo || $Valores->PromedioPonderado->Minimo>$Rango->Minimo)
01831 &&
01832 ($Valores->PromedioPonderado->Minimo==$Rango->Maximo || $Valores->PromedioPonderado->Minimo<$Rango->Maximo)
01833 )
01834 $Valores->PromedioPonderado->Minimo = $Rango->Valor;
01835 if(
01836 ($Valores->PromedioPonderado->Maximo==$Rango->Minimo || $Valores->PromedioPonderado->Maximo>$Rango->Minimo)
01837 &&
01838 ($Valores->PromedioPonderado->Maximo==$Rango->Maximo || $Valores->PromedioPonderado->Maximo<$Rango->Maximo)
01839 )
01840 $Valores->PromedioPonderado->Maximo = $Rango->Valor;
01841
01842 }
01843
01844 }
01845 }
01846 $consulta->closeCursor( ); unset( $consulta );
01847
01848
01849 if( $rt->Inventario->Tipo == Inventario::TIPO_360 ){
01850
01851
01852 $query =
01853 'SELECT '
01854 .'cue.cue_id, cue.cue_origen_id, '
01855 .'pre.pre_tipo, pre.pre_orden, '
01856 .'res.res_valor, res.res_valor_extendido, '
01857 .'dim.dim_id '
01858 .'FROM preguntas pre '
01859 .'JOIN respuestas res ON ( res.pre_id = pre.pre_id ) '
01860 .'JOIN cuestionarios cue ON ( cue.cue_id = pre.pre_cue_id ) '
01861 .'JOIN alternativas alt ON ( alt.alt_id = res.alt_id ) '
01862 .'LEFT OUTER JOIN dimensiones dim ON ( dim.dim_id = alt.alt_dim_id ) '
01863 .'WHERE '
01864 .'res.eva_id = :eva_id AND '
01865 .'res.par_id = :par_id AND '
01866 .'res.eval_tipo = :eval_tipo AND '
01867 .'cue.cue_inv_id = :inv_id '
01868 .'ORDER BY cue.cue_id, pre_orden ASC';
01869 $consulta = $db->prepare( $query );
01870
01871
01872 $consulta->execute( array( ':eva_id'=>$this->getId( ) ,':par_id'=>$par_id, ':eval_tipo'=>1, ':inv_id'=>$inv_id ) );
01873 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01874 $CUE = &$rt->Inventario->Cuestionarios[ $cue_match[ $resultado['cue_origen_id'] ]->Index ];
01875 $PREGUNTA = &$CUE->Preguntas[ $resultado['pre_orden']-1 ];
01876 if(
01877 $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_PARES
01878 ||$resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_MULTIDIMENSIONAL
01879 ){
01880 foreach( json_decode( $resultado['res_valor_extendido'] ) as $i => $v ){
01881 if( !isset( $PREGUNTA->Dimensiones[ $v->Dimension ] ) )
01882 $PREGUNTA->Dimensiones[ $v->Dimension ] = (object)array(
01883 'Nombre'=>
01884 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $v->Dimension ] ]
01885 ->Nombre,
01886 'Padre'=>
01887 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $v->Dimension ] ]
01888 ->Padre,
01889 'Participante'=>0,
01890 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01891 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01892 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
01893 );
01894 array_push( $PREGUNTA->Dimensiones[ $v->Dimension ]->Jefe->Individuales, $v->Valor );
01895 }
01896 }else{
01897 if( !isset( $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] ) )
01898 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] = (object)array(
01899 'Nombre'=>
01900 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]
01901 ->Nombre,
01902 'Padre'=>
01903 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]
01904 ->Padre,
01905 'Participante'=>0,
01906 'Jefe'=>array( ),
01907 'Pares'=>array( ),
01908 'Colaboradores'=>array( )
01909 );
01910
01911 array_push(
01912 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ]->Jefe->Individuales,
01913 $resultado['res_valor']
01914 );
01915 }
01916 }
01917
01918
01919 $consulta->execute( array( ':eva_id'=>$this->getId( ) ,':par_id'=>$par_id, ':eval_tipo'=>2, ':inv_id'=>$inv_id ) );
01920 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01921 $CUE = &$rt->Inventario->Cuestionarios[ $cue_match[ $resultado['cue_origen_id'] ]->Index ];
01922 $PREGUNTA = &$CUE->Preguntas[ $resultado['pre_orden']-1 ];
01923 if(
01924 $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_PARES
01925 ||$resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_MULTIDIMENSIONAL
01926 ){
01927 foreach( json_decode( $resultado['res_valor_extendido'] ) as $i => $v ){
01928 if( !isset( $PREGUNTA->Dimensiones[ $v->Dimension ] ) )
01929 $PREGUNTA->Dimensiones[ $v->Dimension ] = (object)array(
01930 'Nombre'=>
01931 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $v->Dimension ] ]
01932 ->Nombre,
01933 'Padre'=>
01934 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $v->Dimension ] ]
01935 ->Padre,
01936 'Participante'=>0,
01937 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01938 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01939 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
01940 );
01941 array_push( $PREGUNTA->Dimensiones[ $v->Dimension ]->Pares->Individuales, $v->Valor );
01942 }
01943 }else{
01944 if( !isset( $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] ) )
01945 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] = (object)array(
01946 'Nombre'=>
01947 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]
01948 ->Nombre,
01949 'Padre'=>
01950 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]
01951 ->Padre,
01952 'Participante'=>0,
01953 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01954 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01955 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
01956 );
01957
01958 array_push( $PREGUNTA->Dimensiones[ $resultado['dim_id'] ]->Pares->Individuales, $resultado['res_valor'] );
01959 }
01960 }
01961
01962
01963 $consulta->execute( array( ':eva_id'=>$this->getId( ) ,':par_id'=>$par_id, ':eval_tipo'=>3, ':inv_id'=>$inv_id ) );
01964 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
01965 $CUE = &$rt->Inventario->Cuestionarios[ $cue_match[ $resultado['cue_origen_id'] ]->Index ];
01966 $PREGUNTA = &$CUE->Preguntas[ $resultado['pre_orden']-1 ];
01967 if(
01968 $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_PARES
01969 ||$resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_MULTIDIMENSIONAL
01970 ){
01971 foreach( json_decode( $resultado['res_valor_extendido'] ) as $i => $v ){
01972 if( !isset( $PREGUNTA->Dimensiones[ $v->Dimension ] ) )
01973 $PREGUNTA->Dimensiones[ $v->Dimension ] = (object)array(
01974 'Nombre'=>
01975 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $v->Dimension ] ]
01976 ->Nombre,
01977 'Padre'=>
01978 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $v->Dimension ] ]
01979 ->Padre,
01980 'Participante'=>0,
01981 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01982 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01983 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
01984 );
01985
01986 array_push( $PREGUNTA->Dimensiones[ $v->Dimension ]->Colaboradores->Individuales, $v->Valor );
01987 }
01988 }else{
01989 if( !isset( $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] ) )
01990 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ] = (object)array(
01991 'Nombre'=>
01992 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]
01993 ->Nombre,
01994 'Padre'=>
01995 $CUE->Dimensiones[ $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ] ]
01996 ->Padre,
01997 'Participante'=>0,
01998 'Jefe'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
01999 'Pares'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) ),
02000 'Colaboradores'=>(object)array( 'Promedio'=>0, 'Individuales'=>array( ) )
02001 );
02002
02003 array_push(
02004 $PREGUNTA->Dimensiones[ $resultado['dim_id'] ]->Colaboradores->Individuales,
02005 $resultado['res_valor']
02006 );
02007 }
02008 }
02009
02010 $consulta->closeCursor( ); unset( $consulta );
02011
02012
02013 $query =
02014 'SELECT '
02015 .'cue.cue_origen_id, res.cue_id, res.par_id, dim.dim_id, res.eval_id, res.eval_tipo, '
02016 .'res.res_sumatoria, res.res_promedio, res.res_promedio_ponderado '
02017 .'FROM resultados res '
02018 .'JOIN cuestionarios cue ON ( cue.cue_id = res.cue_id ) '
02019 .'JOIN inventarios inv ON ( inv.inv_id = cue.cue_inv_id ) '
02020 .'JOIN dimensiones dim ON ( dim.dim_id = res.dim_id ) '
02021 .'LEFT OUTER JOIN dimensiones dimp ON ( dimp.dim_id = dim.dim_padre_id ) '
02022 .'WHERE res.par_id = :par_id AND inv.inv_id = :inv_id AND res.eva_id = :eva_id AND res.eval_tipo = :eval_tipo '
02023 .'ORDER BY cue.cue_id, dim.dim_id, res.eval_id ASC';
02024 $consulta = $db->prepare( $query );
02025
02026
02027 $consulta->execute( array( ':par_id'=>$par_id, ':inv_id'=>$inv_id, ':eva_id'=>$this->getId( ), ':eval_tipo'=>1 ) );
02028 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02029 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Jefe
02030 ->Totales->Sumatoria+= (float)$resultado[ 'res_sumatoria' ];
02031 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Jefe
02032 ->Totales->Promedio+= (float)$resultado[ 'res_promedio' ];
02033 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Jefe
02034 ->Totales->PromedioPonderado+= (float)$resultado[ 'res_promedio_ponderado' ];
02035
02036 $CUE_IDX = $cue_match[ $resultado['cue_origen_id'] ]->Index;
02037 $DIM_IDX = $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ];
02038
02039 array_push(
02040 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Jefe->Individuales,
02041 (object)array(
02042 'Sumatoria' => (float)$resultado[ 'res_sumatoria' ],
02043 'Promedio' => (float)$resultado[ 'res_promedio' ],
02044 'PromedioPonderado' => (float)$resultado[ 'res_promedio_ponderado' ]
02045 )
02046 );
02047 }
02048
02049
02050 $consulta->execute( array( ':par_id'=>$par_id, ':inv_id'=>$inv_id, ':eva_id'=>$this->getId( ), ':eval_tipo'=>2 ) );
02051 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02052 $CUE_IDX = $cue_match[ $resultado['cue_origen_id'] ]->Index;
02053 $DIM_IDX = $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ];
02054
02055 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Pares
02056 ->Totales->Sumatoria+= (float)$resultado[ 'res_sumatoria' ];
02057 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Pares
02058 ->Totales->Promedio+= (float)$resultado[ 'res_promedio' ];
02059 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Pares
02060 ->Totales->PromedioPonderado+= (float)$resultado[ 'res_promedio_ponderado' ];
02061
02062 array_push(
02063 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Pares->Individuales,
02064 (object)array(
02065 'Sumatoria' => (float)$resultado[ 'res_sumatoria' ],
02066 'Promedio' => (float)$resultado[ 'res_promedio' ],
02067 'PromedioPonderado' => (float)$resultado[ 'res_promedio_ponderado' ]
02068 )
02069 );
02070 }
02071
02072
02073 $consulta->execute( array( ':par_id'=>$par_id, ':inv_id'=>$inv_id, ':eva_id'=>$this->getId( ), ':eval_tipo'=>3 ) );
02074 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02075
02076 $CUE_IDX = $cue_match[ $resultado['cue_origen_id'] ]->Index;
02077 $DIM_IDX = $cue_match[ $resultado['cue_origen_id'] ]->Dimensiones[ $resultado['dim_id'] ];
02078
02079 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Colaboradores
02080 ->Totales->Sumatoria+= (float)$resultado[ 'res_sumatoria' ];
02081 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Colaboradores
02082 ->Totales->Promedio+= (float)$resultado[ 'res_promedio' ];
02083 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Colaboradores
02084 ->Totales->PromedioPonderado+= (float)$resultado[ 'res_promedio_ponderado' ];
02085
02086 array_push(
02087 $rt->Inventario->Cuestionarios[ $CUE_IDX ]->Dimensiones[ $DIM_IDX ]->Colaboradores->Individuales,
02088 (object)array(
02089 'Sumatoria' => (float)$resultado[ 'res_sumatoria' ],
02090 'Promedio' => (float)$resultado[ 'res_promedio' ],
02091 'PromedioPonderado' => (float)$resultado[ 'res_promedio_ponderado' ]
02092 )
02093 );
02094 }
02095
02096 $consulta->closeCursor( ); unset( $consulta );
02097
02098
02099 foreach( $rt->Inventario->Cuestionarios as $i => &$Cue ){
02100 foreach( $Cue->Dimensiones as $j => &$Dim ){
02101 if( sizeof( $Dim->Jefe->Individuales )!=0 ){
02102 $Dim->Jefe->Totales->Sumatoria =
02103 $Dim->Jefe->Totales->Sumatoria / sizeof( $Dim->Jefe->Individuales );
02104 $Dim->Jefe->Totales->Promedio =
02105 $Dim->Jefe->Totales->Promedio / sizeof( $Dim->Jefe->Individuales );
02106 $Dim->Jefe->Totales->PromedioPonderado =
02107 $Dim->Jefe->Totales->PromedioPonderado / sizeof( $Dim->Jefe->Individuales );
02108 }
02109 if( sizeof( $Dim->Pares->Individuales )!=0 ){
02110 $Dim->Pares->Totales->Sumatoria =
02111 $Dim->Pares->Totales->Sumatoria / sizeof( $Dim->Pares->Individuales );
02112 $Dim->Pares->Totales->Promedio =
02113 $Dim->Pares->Totales->Promedio / sizeof( $Dim->Pares->Individuales );
02114 $Dim->Pares->Totales->PromedioPonderado =
02115 $Dim->Pares->Totales->PromedioPonderado / sizeof( $Dim->Pares->Individuales );
02116 }
02117 if( sizeof( $Dim->Colaboradores->Individuales )!=0 ){
02118 $Dim->Colaboradores->Totales->Sumatoria =
02119 $Dim->Colaboradores->Totales->Sumatoria / sizeof( $Dim->Colaboradores->Individuales );
02120 $Dim->Colaboradores->Totales->Promedio =
02121 $Dim->Colaboradores->Totales->Promedio / sizeof( $Dim->Colaboradores->Individuales );
02122 $Dim->Colaboradores->Totales->PromedioPonderado =
02123 $Dim->Colaboradores->Totales->PromedioPonderado / sizeof( $Dim->Colaboradores->Individuales );
02124 }
02125 }
02126 }
02127
02128
02129 foreach( $rt->Inventario->Cuestionarios as $i => &$Cue )
02130 foreach( $Cue->Preguntas as $j => &$Pre ){
02131 $Pre->Dimensiones = array_values( $Pre->Dimensiones );
02132 foreach( $Pre->Dimensiones as $k => &$Dim ){
02133 $Dim->Jefe->Promedio =
02134 ( sizeof( $Dim->Jefe->Individuales) > 0 ) ?
02135 array_sum( $Dim->Jefe->Individuales ) / sizeof( $Dim->Jefe->Individuales)
02136 :
02137 0;
02138 $Dim->Pares->Promedio =
02139 ( sizeof( $Dim->Pares->Individuales ) > 0 ) ?
02140 array_sum( $Dim->Pares->Individuales ) / sizeof( $Dim->Pares->Individuales )
02141 :
02142 0;
02143 $Dim->Colaboradores->Promedio =
02144 ( sizeof( $Dim->Colaboradores->Individuales) > 0 ) ?
02145 array_sum( $Dim->Colaboradores->Individuales ) / sizeof( $Dim->Colaboradores->Individuales)
02146 :
02147 0;
02148 }
02149 }
02150
02151 }
02152
02153
02154 foreach( $rt->Inventario->Cuestionarios as $key => &$Cue ){
02155
02156 $consulta = $db->prepare(
02157 'SELECT COUNT(*) FROM ( '
02158 .'SELECT par_id FROM resultados WHERE cue_id = :cue AND eva_id = :eva AND eval_tipo = 0 GROUP BY par_id '
02159 .') tbl'
02160 );
02161 $consulta->execute( array( ':cue'=>$Cue->Id, ':eva'=>$this->getId( ) ) );
02162 $resultado = $consulta->fetch( );
02163 $consulta->closeCursor( ); unset( $consulta );
02164 $Cue->RespondidoPor->Otros = $resultado[0] - 1;
02165
02166
02167 $consulta = $db->prepare(
02168 'SELECT COUNT(*) FROM ( SELECT eval_id FROM resultados WHERE '
02169 .' cue_id = :cue AND eva_id = :eva AND par_id = :par AND eval_tipo = :eval_tipo '
02170 .'GROUP BY eval_id ) tbl'
02171 );
02172
02173 if( $Cue->Dependiente ){
02174
02175 $consulta->execute( array( ':cue'=>$Cue->Dependiente, ':eva'=>$this->getId( ), ':par'=>$par_id, ':eval_tipo'=>1 ) );
02176 $resultado = $consulta->fetch( );
02177 $Cue->RespondidoPor->Jefe = $resultado[0];
02178
02179
02180 $consulta->execute( array( ':cue'=>$Cue->Dependiente, ':eva'=>$this->getId( ), ':par'=>$par_id, ':eval_tipo'=>2 ) );
02181 $resultado = $consulta->fetch( );
02182 $Cue->RespondidoPor->Pares = $resultado[0];
02183
02184
02185 $consulta->execute( array( ':cue'=>$Cue->Dependiente, ':eva'=>$this->getId( ), ':par'=>$par_id, ':eval_tipo'=>3 ) );
02186 $resultado = $consulta->fetch( );
02187 $Cue->RespondidoPor->Colaboradores = $resultado[0];
02188
02189 $consulta->closeCursor( ); unset( $consulta );
02190 }
02191 }
02192
02193 return $rt;
02194 }
02195
02196 public function getRespuestasPorParticipante( $par_id = 0, $inv_id = 0 ){
02197
02198 if( !$this->getId( ) ) throw new Exception('Evaluación especificada no existe.');
02199
02200 $Inventario = new Inventario( );
02201 if( !$Inventario->getInventarioPorId( $inv_id ) )
02202 throw new Exception('El inventario especificado no existe. Inventario ID ( '.$inv_id.' )');
02203
02204 $rt = array( );
02205
02206 $db = Database::getInstance( );
02207 $query =
02208 'SELECT '
02209 .'res.par_id, res.pre_id, res.res_valor, res.res_valor_extendido, pre.pre_orden, '
02210 .'cue.cue_id, cue.cue_nombre, cue.cue_origen_id '
02211 .'FROM respuestas res '
02212 .'JOIN preguntas pre ON ( pre.pre_id = res.pre_id ) '
02213 .'JOIN cuestionarios cue ON ( cue.cue_id = res.cue_id ) '
02214 .'JOIN inventarios inv ON ( inv.inv_id = cue.cue_inv_id ) '
02215 .'WHERE '
02216 .'res.par_id = :par_id AND res.eva_id = :eva_id AND inv.inv_id = :inv_id AND res.eval_tipo = :eval_tipo '
02217 .'AND cue.cue_origen_id = :cue_origen '
02218 .'ORDER BY cue.cue_id, pre.pre_orden ASC';
02219
02220 $consulta = $db->prepare( $query );
02221
02222 $consulta->execute( array(
02223 ':par_id'=>$par_id, ':eva_id'=>$this->getId( ), ':inv_id'=>$inv_id, ':eval_tipo'=>0, ':cue_origen'=>0
02224 ) );
02225
02226 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02227 $cue_count = sizeof( $rt ); $valor = array( );
02228
02229 if( $resultado['res_valor_extendido'] != '' ){
02230 foreach( json_decode( $resultado['res_valor_extendido'] ) as $x => $v ) array_push( $valor, $v->Valor );
02231 }else{ $valor = $resultado['res_valor']; }
02232
02233 if( $cue_count == 0 || $rt[$cue_count - 1]->Id != $resultado['cue_id'] ){
02234 array_push( $rt, ( object ) array(
02235 'Id' => $resultado['cue_id'],
02236 'Nombre' => $resultado['cue_nombre'],
02237 'Preguntas' => array(
02238 ( object )array(
02239 'Participante' => $valor,
02240 'Coordinadores' => array( ),
02241 'Pares' => array( ),
02242 'Colaboradores' => array( ),
02243 )
02244 )
02245 ) );
02246 }else{
02247 array_push( $rt[$cue_count-1]->Preguntas, ( object ) array(
02248 'Participante' => $valor,
02249 'Coordinadores' => array( ),
02250 'Pares' => array( ),
02251 'Colaboradores' => array( ),
02252 ) );
02253 }
02254 }
02255 $consulta->closeCursor( ); unset( $consulta );
02256
02257 return $rt;
02258 }
02259
02260 public function getResultadosDummy( $inv_id ){
02261
02262 $Inventario = new Inventario( );
02263 if( !$Inventario->getInventarioPorId( $inv_id ) )
02264 throw new Exception('El inventario especificado no existe. Inventario ID ( '.$inv_id.' )');
02265
02266 $Actividad = NULL;
02267 if( $this->getId( ) ){
02268 $Actividad = $this->getActividad( );
02269 $Actividad = ( object ) array(
02270 'Id' => $Actividad->getId( ),
02271 'Nombre' => $Actividad->getNombre( ),
02272 'FechaInicio' => $Actividad->getFechaInicio( ),
02273 'FechaFin' => $Actividad->getFechaFin( ),
02274 'Tipo' => $Actividad->getTipo( )->Nombre,
02275 'Profesor' => $Actividad->getProfesor( )->Nombre,
02276 'Localidad' => $Actividad->getLocalidad( )->Nombre,
02277 'Materia' => $Actividad->getMateria( )->Nombre,
02278 );
02279 }else
02280 $Actividad = ( object ) array(
02281 'Id' => 0,
02282 'Nombre' => 'Desconocida',
02283 'FechaInicio' => '01/01/1999',
02284 'FechaFin' => '01/01/1999',
02285 'Tipo' => 'Desconocido',
02286 'Profesor' => 'Desconocido',
02287 'Localidad' => 'Desconocida',
02288 'Materia' => 'Desconocida',
02289 );
02290
02291 $rt = ( object ) array(
02292 'Participante' => ( object ) array(
02293 'Id' => 0,
02294 'Nombre' => 'Participante, Prueba',
02295 'Correo' => 'participante.prueba@dominio.com',
02296 'Cedula' => 'X-00000000',
02297 'Evaluadores' => (object)array(
02298 'Jefe' => array(
02299 (object)array(
02300 'Id' => 0,
02301 'Nombre' => 'Jefe, Prueba',
02302 'Correo' => 'jefe.prueba@dominio.com'
02303 )
02304 ),
02305 'Pares' => array(
02306 (object)array(
02307 'Id' => 0,
02308 'Nombre' => 'Par1, Prueba',
02309 'Correo' => 'par1.prueba@dominio.com'
02310 ),
02311 (object)array(
02312 'Id' => 0,
02313 'Nombre' => 'Par2, Prueba',
02314 'Correo' => 'par2.prueba@dominio.com'
02315 ),
02316 (object)array(
02317 'Id' => 0,
02318 'Nombre' => 'Par3, Prueba',
02319 'Correo' => 'par3.prueba@dominio.com'
02320 )
02321 ),
02322 'Colaboradores' => array(
02323 (object)array(
02324 'Id' => 0,
02325 'Nombre' => 'Colaborador1, Prueba',
02326 'Correo' => 'colaborador1.prueba@dominio.com'
02327 ),
02328 (object)array(
02329 'Id' => 0,
02330 'Nombre' => 'Colaborador2, Prueba',
02331 'Correo' => 'colaborador2.prueba@dominio.com'
02332 ),
02333 (object)array(
02334 'Id' => 0,
02335 'Nombre' => 'Colaborador3, Prueba',
02336 'Correo' => 'colaborador3.prueba@dominio.com'
02337 )
02338 )
02339 )
02340 ),
02341 'Actividad' => $Actividad,
02342 'Inventario' => ( object ) array(
02343 'Id' => $inv_id,
02344 'Nombre' => $Inventario->getNombre( ),
02345 'Descripcion' => $Inventario->getDescripcion( ),
02346 'Tipo' => $Inventario->getTipo( ),
02347 'Introduccion'=>$Inventario->getReporteIntroduccion( ),
02348 'Cuestionarios' => array( )
02349 )
02350 );
02351
02352 $db = Database::getInstance( );
02353
02354 $cue_match = array( );
02355
02356
02357 $query =
02358 'SELECT '
02359 .'cue.cue_id, cue.cue_tipo, cue.cue_nombre, cue.cue_origen_id, cue.cue_gra_rangos, '
02360 .'cue.cue_gra_tipo, cue_gra_estadistico, cue.cue_gra_analisis, '
02361 .'pre.pre_id, pre.pre_orden, pre.pre_tipo, pre.pre_enunciado, pre.pre_enunciado_b '
02362 .'FROM cuestionarios cue '
02363 .'JOIN inventarios inv ON ( inv.inv_id = cue.cue_inv_id ) '
02364 .'JOIN preguntas pre ON ( pre.pre_cue_id = cue.cue_id ) '
02365 .'WHERE inv.inv_id = :inv_id AND cue.cue_tipo = 0 '
02366 .'ORDER by cue.cue_id, pre.pre_orden';
02367 $consulta = $db->prepare( $query );
02368 $consulta->execute( array( ':inv_id'=>$inv_id ) );
02369 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02370 $cue_count = sizeof( $rt->Inventario->Cuestionarios );
02371 if( $cue_count == 0 || $rt->Inventario->Cuestionarios[$cue_count - 1]->Id != $resultado['cue_id'] ){
02372 $cue_match[ $resultado['cue_id'] ] = (object)array( 'Index'=>$cue_count, 'Dimensiones'=>array( ) );
02373 array_push($rt->Inventario->Cuestionarios, ( object ) array(
02374 'Id' => $resultado['cue_id'],
02375 'Nombre' => $resultado['cue_nombre'],
02376 'Grafico' => ( object ) array(
02377 'Tipo' => $resultado['cue_gra_tipo'],
02378 'Estadistico' => $resultado['cue_gra_estadistico'],
02379 'Grupos' => ( object ) array(
02380 'Dimensiones' =>
02381 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_DIMENSIONES ? true: false,
02382 'SubDimensiones' =>
02383 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_SUBDIMENSIONES ? true: false,
02384 'PreguntasDimensiones' =>
02385 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_PREGUNTAS_DIMENSIONES ? true: false,
02386 'PreguntasSubDimensiones' =>
02387 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_PREGUNTAS_SUBDIMENSIONES ? true: false
02388 ),
02389 'Rangos'=> json_decode( $resultado['cue_gra_rangos'] ),
02390 'PromedioGrupal' => ( object ) array(
02391 'Dimensiones' =>
02392 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_DIM_PROMEDIO_GRUPAL ? true : false,
02393 'SubDimensiones' =>
02394 $resultado['cue_gra_analisis'] & Cuestionario::GRAFICO_ANALISIS_SUBDIM_PROMEDIO_GRUPAL ? true: false,
02395 )
02396 ),
02397 'Dimensiones' => array( ),
02398 'RespondidoPor' => (object)array(
02399 'Jefe' => 1,
02400 'Pares' => 3,
02401 'Colaboradores' => 3,
02402 'Otros' => 100
02403 ),
02404 'Preguntas' => array(
02405 (object)array(
02406 'Tipo'=>$resultado['pre_tipo'],
02407 'Enunciado'=>$resultado['pre_enunciado'],
02408 'EnunciadoB'=>$resultado['pre_enunciado_b'],
02409 'Dimensiones'=>array( )
02410 )
02411 )
02412 ) );
02413 }else{
02414 array_push($rt->Inventario->Cuestionarios[$cue_count - 1]->Preguntas, ( object ) array(
02415 'Tipo'=>$resultado['pre_tipo'],
02416 'Enunciado'=>$resultado['pre_enunciado'],
02417 'EnunciadoB'=>$resultado['pre_enunciado_b'],
02418 'Dimensiones'=>array( )
02419 ) );
02420 }
02421 }
02422 $consulta->closeCursor( ); unset( $consulta );
02423
02424
02425 $query =
02426 'SELECT '
02427 .'cue.cue_id, dim.dim_id, dim.dim_connotacion_negativa, dim.dim_nombre, dimp.dim_nombre as dim_nombre_padre, '
02428 .'dim.dim_rangos '
02429 .'FROM dimensiones dim '
02430 .'LEFT OUTER JOIN dimensiones dimp ON ( dimp.dim_id = dim.dim_padre_id ) '
02431 .'JOIN cuestionarios cue ON ( cue.cue_id = dim.dim_cue_id ) '
02432 .'WHERE cue.cue_id = :cue_id '
02433 .'ORDER by cue.cue_id, dim.dim_id';
02434 $consulta = $db->prepare( $query );
02435 foreach( $rt->Inventario->Cuestionarios as $key => &$Cue ){
02436 $consulta->execute( array( ':cue_id'=>$Cue->Id ) );
02437 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02438 $dim_count = sizeof( $Cue->Dimensiones );
02439 $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ] = $dim_count;
02440 array_push( $Cue->Dimensiones, (object)array(
02441 'Id' => $resultado['dim_id'],
02442 'Nombre' => $resultado['dim_nombre'],
02443 'Padre' => $resultado['dim_nombre_padre'],
02444 'Rangos' => $resultado[ 'dim_rangos' ] ? json_decode( $resultado[ 'dim_rangos' ] ): array( ),
02445 'ConnotacionNegativa' => $resultado['dim_connotacion_negativa'] == 0 ? false : true,
02446 'Ocurrencias' => 0,
02447 'Ponderacion' => 0,
02448 'ValoresPosibles' => (object)array(
02449 'PorPregunta' => (object)array(
02450 'Minimo'=> NULL,
02451 'Maximo'=> NULL
02452 ),
02453 'Sumatoria' => (object)array(
02454 'Minimo'=> 0,
02455 'Maximo'=> 0
02456 ),
02457 'Promedio' => (object)array(
02458 'Minimo'=> 0,
02459 'Maximo'=> 0
02460 ),
02461 'PromedioPonderado' => (object)array(
02462 'Minimo'=> 0,
02463 'Maximo'=> 0
02464 )
02465 ),
02466 'Participante' => (object)array(
02467 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02468 ),
02469 'Jefe'=>(object)array(
02470 'Individuales'=>array(
02471 (object)array(
02472 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02473 )
02474 ),
02475 'Totales'=>(object)array(
02476 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02477 )
02478 ),
02479 'Pares'=>(object)array(
02480 'Individuales'=>array(
02481 (object)array(
02482 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02483 ),
02484 (object)array(
02485 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02486 ),
02487 (object)array(
02488 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02489 )
02490 ),
02491 'Totales'=>(object)array(
02492 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02493 )
02494 ),
02495 'Colaboradores'=>(object)array(
02496 'Individuales'=>array(
02497 (object)array(
02498 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02499 ),
02500 (object)array(
02501 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02502 ),
02503 (object)array(
02504 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02505 )
02506 ),
02507 'Totales'=>(object)array(
02508 'Sumatoria' => rand( 0,100 ), 'Promedio'=>rand( 0,50 ), 'PromedioPonderado'=>rand( 0,50 )
02509 )
02510 )
02511 ) );
02512 }
02513 }
02514 $consulta->closeCursor( ); unset( $consulta );
02515
02516
02517 $query =
02518 'SELECT '
02519 .'cue.cue_id, pre.pre_tipo, pre.pre_orden, '
02520 .'dim.dim_id, dim.dim_nombre, pdim.dim_nombre as dim_nombre_padre, '
02521 .'( SELECT COUNT(*) FROM alternativas alt_c WHERE alt_c.alt_pre_id = pre.pre_id ) as num_alt '
02522 .'FROM preguntas pre '
02523 .'JOIN cuestionarios cue ON ( cue.cue_id = pre.pre_cue_id ) '
02524 .'JOIN alternativas alt ON ( alt.alt_pre_id = pre.pre_id ) '
02525 .'LEFT OUTER JOIN dimensiones dim ON ( dim.dim_id = alt.alt_dim_id ) '
02526 .'LEFT OUTER JOIN dimensiones pdim ON ( pdim.dim_id = dim.dim_padre_id ) '
02527 .'WHERE cue.cue_id = :cue_id '
02528 .'ORDER BY cue.cue_id, pre_orden ASC';
02529 $consulta = $db->prepare( $query );
02530 foreach( $rt->Inventario->Cuestionarios as $i => &$Cue ){
02531 $consulta->execute( array( ':cue_id'=>$Cue->Id ) );
02532 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02533 $Jefe = rand( 1, $resultado['num_alt'] );
02534 array_push(
02535 $Cue->Preguntas[ $resultado['pre_orden'] -1 ]->Dimensiones,
02536 (object)array(
02537 'Nombre' => $resultado['dim_nombre'],
02538 'Padre' => $resultado['dim_nombre_padre'],
02539 'Participante' => rand( 1, $resultado['num_alt'] ),
02540 'Jefe' => (object)array(
02541 'Promedio' => $Jefe,
02542 'Individuales' => array( $Jefe )
02543 ),
02544 'Pares' => (object)array(
02545 'Promedio' => rand( 1, $resultado['num_alt'] ),
02546 'Individuales' => array(
02547 rand( 1, $resultado['num_alt'] ), rand( 1, $resultado['num_alt'] ), rand( 1, $resultado['num_alt'] )
02548 )
02549 ),
02550 'Colaboradores' => (object)array(
02551 'Promedio' => rand( 1, $resultado['num_alt'] ),
02552 'Individuales' => array(
02553 rand( 1, $resultado['num_alt'] ), rand( 1, $resultado['num_alt'] ), rand( 1, $resultado['num_alt'] )
02554 )
02555 )
02556 )
02557 );
02558 }
02559 }
02560
02561
02562 $query =
02563 'SELECT '
02564 .'cue.cue_id, pre.pre_id, pre.pre_tipo, pre.pre_orden, pre.pre_dimension_a, pre.pre_dimension_b, '
02565 .'pre.pre_pp_peso, dim.dim_id, alt.alt_valor '
02566 .'FROM preguntas pre '
02567 .'JOIN cuestionarios cue ON ( cue.cue_id = pre.pre_cue_id ) '
02568 .'JOIN alternativas alt ON ( alt.alt_pre_id = pre.pre_id ) '
02569 .'LEFT OUTER JOIN dimensiones dim ON ( dim.dim_id = alt.alt_dim_id ) '
02570 .'WHERE cue.cue_id = :cue_id ORDER BY cue.cue_id, pre_orden ASC';
02571 $consulta = $db->prepare( $query );
02572 foreach($rt->Inventario->Cuestionarios as $key => &$Cue ){
02573 $consulta->execute( array( ':cue_id' => $Cue->Id ) );
02574 $pre_id_curr = 0;
02575 while( $resultado = $consulta->fetch( PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT ) ){
02576 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_PARES ){
02577 $DimensionA = &$Cue->Dimensiones[ $cue_match[ $resultado['cue_id'] ]
02578 ->Dimensiones[ $resultado['pre_dimension_a'] ] ];
02579 $DimensionB = &$Cue->Dimensiones[ $cue_match[ $resultado['cue_id'] ]
02580 ->Dimensiones[ $resultado['pre_dimension_b'] ] ];
02581
02582
02583 if(
02584 $DimensionA->ValoresPosibles->PorPregunta->Minimo == NULL
02585 || $DimensionA->ValoresPosibles->PorPregunta->Minimo > $resultado['alt_valor']
02586 )
02587 $DimensionA->ValoresPosibles->PorPregunta->Minimo = $resultado['alt_valor'];
02588 if(
02589 $DimensionB->ValoresPosibles->PorPregunta->Minimo == NULL
02590 || $DimensionB->ValoresPosibles->PorPregunta->Minimo > $resultado['alt_valor']
02591 )
02592 $DimensionB->ValoresPosibles->PorPregunta->Minimo = $resultado['alt_valor'];
02593
02594
02595 if(
02596 $DimensionA->ValoresPosibles->PorPregunta->Maximo == NULL
02597 || $DimensionA->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
02598 )
02599 $DimensionA->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
02600 if(
02601 $DimensionB->ValoresPosibles->PorPregunta->Maximo == NULL
02602 || $DimensionB->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
02603 )
02604 $DimensionB->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
02605
02606 $DimensionA->Ocurrencias++; $DimensionB->Ocurrencias++;
02607
02608 $DimensionA->Ponderacion += (float)$resultado['pre_pp_peso'];
02609 $DimensionB->Ponderacion += (float)$resultado['pre_pp_peso'];
02610
02611 }else{
02612 $Dimension = &$Cue->Dimensiones[ $cue_match[ $resultado['cue_id'] ]->Dimensiones[ $resultado['dim_id'] ] ];
02613 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_MULTIDIMENSIONAL ){
02614
02615 if($Dimension->ValoresPosibles->PorPregunta->Minimo == NULL)
02616 $Dimension->ValoresPosibles->PorPregunta->Minimo = 1;
02617
02618 if(
02619 $Dimension->ValoresPosibles->PorPregunta->Maximo == NULL
02620 || $Dimension->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
02621 )
02622 $Dimension->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
02623 $Dimension->Ocurrencias++;
02624 $Dimension->Ponderacion+= $resultado['pre_pp_peso'];
02625 }else{
02626
02627 if(
02628 $Dimension->ValoresPosibles->PorPregunta->Minimo == NULL
02629 || $Dimension->ValoresPosibles->PorPregunta->Minimo > $resultado['alt_valor']
02630 )
02631 $Dimension->ValoresPosibles->PorPregunta->Minimo = $resultado['alt_valor'];
02632
02633 if(
02634 $Dimension->ValoresPosibles->PorPregunta->Maximo == NULL
02635 || $Dimension->ValoresPosibles->PorPregunta->Maximo < $resultado['alt_valor']
02636 )
02637 $Dimension->ValoresPosibles->PorPregunta->Maximo = $resultado['alt_valor'];
02638
02639 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_BIDIMENSIONAL ){
02640 $Dimension->Ocurrencias++;
02641 $Dimension->Ponderacion+= $resultado['pre_pp_peso'];
02642 }
02643 }
02644 }
02645 if( $pre_id_curr != $resultado['pre_id'] ){
02646 $pre_id_curr = $resultado['pre_id'];
02647 if( $resultado['pre_tipo'] == Cuestionario::PREGUNTA_TIPO_UNIDIMENSIONAL ){
02648 $Dimension->Ocurrencias++;
02649 $Dimension->Ponderacion+= $resultado['pre_pp_peso'];
02650 }
02651 }
02652 }
02653 foreach($Cue->Dimensiones as $i => &$Dim ){
02654 $Valores = &$Dim->ValoresPosibles;
02655
02656 if( $Valores->PorPregunta->Minimo == NULL ) $Valores->PorPregunta->Minimo = 0;
02657 if( $Valores->PorPregunta->Maximo == NULL ) $Valores->PorPregunta->Maximo = 0;
02658
02659 $Valores->Sumatoria->Minimo = $Valores->PorPregunta->Minimo * $Dim->Ocurrencias;
02660 $Valores->Sumatoria->Maximo = $Valores->PorPregunta->Maximo * $Dim->Ocurrencias;
02661
02662 $Valores->Promedio->Minimo = $Dim->Ocurrencias > 0 ? $Valores->Sumatoria->Minimo / $Dim->Ocurrencias : 0;
02663 $Valores->Promedio->Maximo = $Dim->Ocurrencias > 0 ? $Valores->Sumatoria->Maximo / $Dim->Ocurrencias : 0;
02664
02665 $Valores->PromedioPonderado->Minimo = $Dim->Ponderacion > 0 ? $Valores->Sumatoria->Minimo / $Dim->Ponderacion : 0;
02666 $Valores->PromedioPonderado->Maximo = $Dim->Ponderacion > 0 ? $Valores->Sumatoria->Maximo / $Dim->Ponderacion : 0;
02667
02668 foreach( $Dim->Rangos as $j => $Rango ){
02669
02670 if(
02671 ( $Valores->Sumatoria->Minimo == $Rango->Minimo || $Valores->Sumatoria->Minimo > $Rango->Minimo )
02672 &&
02673 ( $Valores->Sumatoria->Minimo == $Rango->Maximo || $Valores->Sumatoria->Minimo < $Rango->Maximo )
02674 )
02675 $Valores->Sumatoria->Minimo = $Rango->Valor;
02676 if(
02677 ( $Valores->Sumatoria->Maximo == $Rango->Minimo || $Valores->Sumatoria->Maximo > $Rango->Minimo )
02678 &&
02679 ( $Valores->Sumatoria->Maximo == $Rango->Maximo || $Valores->Sumatoria->Maximo < $Rango->Maximo )
02680 )
02681 $Valores->Sumatoria->Maximo = $Rango->Valor;
02682
02683 if(
02684 ( $Valores->Promedio->Minimo == $Rango->Minimo || $Valores->Promedio->Minimo > $Rango->Minimo )
02685 &&
02686 ( $Valores->Promedio->Minimo == $Rango->Maximo || $Valores->Promedio->Minimo < $Rango->Maximo )
02687 )
02688 $Valores->Promedio->Minimo = $Rango->Valor;
02689 if(
02690 ( $Valores->Promedio->Maximo == $Rango->Minimo || $Valores->Promedio->Maximo > $Rango->Minimo )
02691 &&
02692 ( $Valores->Promedio->Maximo == $Rango->Maximo || $Valores->Promedio->Maximo < $Rango->Maximo )
02693 )
02694 $Valores->Promedio->Maximo = $Rango->Valor;
02695
02696 if(
02697 ($Valores->PromedioPonderado->Minimo==$Rango->Minimo || $Valores->PromedioPonderado->Minimo>$Rango->Minimo)
02698 &&
02699 ($Valores->PromedioPonderado->Minimo==$Rango->Maximo || $Valores->PromedioPonderado->Minimo<$Rango->Maximo)
02700 )
02701 $Valores->PromedioPonderado->Minimo = $Rango->Valor;
02702 if(
02703 ($Valores->PromedioPonderado->Maximo==$Rango->Minimo || $Valores->PromedioPonderado->Maximo>$Rango->Minimo)
02704 &&
02705 ($Valores->PromedioPonderado->Maximo==$Rango->Maximo || $Valores->PromedioPonderado->Maximo<$Rango->Maximo)
02706 )
02707 $Valores->PromedioPonderado->Maximo = $Rango->Valor;
02708
02709 }
02710
02711 }
02712 }
02713 $consulta->closeCursor( ); unset( $consulta );
02714
02715 return $rt;
02716
02717 }
02718
02719 }