示例#1
0
 function vista_excel(toba_vista_excel $salida)
 {
     $excel = $salida->get_excel();
     $excel->setActiveSheetIndex(0);
     $excel->getActiveSheet()->setTitle('Principal');
     $salida->titulo('Filtro', 3);
     $this->dependencia('filtro')->vista_excel($salida);
     $salida->separacion(2);
     $salida->titulo('Multilínea', 3);
     $this->dependencia('ml')->vista_excel($salida);
     $salida->separacion(2);
     $this->dependencia('cuadro')->vista_excel($salida);
     $salida->separacion(2);
     $salida->titulo('Formulario', 2);
     $this->dependencia('formulario')->vista_excel($salida);
     $salida->crear_hoja('Copia');
     $excel->setActiveSheetIndex(1);
     $salida->titulo('Copia del filtro en hoja 2', 3);
     $this->dependencia('filtro')->vista_excel($salida);
     $salida->separacion(2);
     $salida->titulo('Multilínea', 3);
     $this->dependencia('ml')->vista_excel($salida);
     $salida->separacion(2);
     $this->dependencia('cuadro')->vista_excel($salida);
     $salida->separacion(2);
     $salida->titulo('Formulario', 2);
     $this->dependencia('formulario')->vista_excel($salida);
 }
 function vista_excel(toba_vista_excel $salida)
 {
     $salida->set_nombre_archivo($this->s__sigla . ".xls");
     $this->s__datos_filtro['sigla']['valor'] = $this->s__sigla;
     $excel = $salida->get_excel();
     $cabecera = false;
     //para determinar si escribir los nombre de campo en la fila 1
     $fila = 2;
     $columna = 65;
     //caracter A
     //chr(66) devuelve letra de ascii
     $datos = $this->dep('datos')->tabla('plan_estudio')->listar_planes($this->s__datos_filtro);
     //print_r($datos[1]);
     foreach ($datos as $key => $valor) {
         //Itera sobre los planes
         $salida->set_hoja_nombre('Planes');
         foreach ($valor as $campo => $dato) {
             //Itera sobre los campos de un plan
             if (!$cabecera) {
                 //aun no se escribieron los nombres de campos
                 $celda = chr($columna) . '1';
                 $excel->setActiveSheetIndex(0)->setCellValue($celda, mb_convert_encoding($campo, "UTF8"));
                 //con utf8_decode no se visualiza bien
             }
             $celda = chr($columna) . $fila;
             if (strcasecmp($campo, 'nivel') == 0) {
                 switch ($dato) {
                     case 0:
                         //grado
                         $excel->setActiveSheetIndex(0)->setCellValue($celda, "Grado");
                         break;
                     case 1:
                         //posgrado
                         $excel->setActiveSheetIndex(0)->setCellValue($celda, "Posgrado");
                         break;
                     case -1:
                         //pregrado
                         $excel->setActiveSheetIndex(0)->setCellValue($celda, "Pregrado");
                         break;
                     case 2:
                         //ciclo de licenciatura
                         $excel->setActiveSheetIndex(0)->setCellValue($celda, "Ciclo de Licenciatura");
                         break;
                 }
             } else {
                 //demas campos
                 $excel->setActiveSheetIndex(0)->setCellValue($celda, mb_convert_encoding($dato, "UTF8"));
             }
             //con utf8_decode no se visualiza bien
             $columna++;
         }
         $fila++;
         $columna = 65;
         $cabecera = true;
     }
     //Los vuelvo a obtener porque en la otra consulta traia las sedes entonces repetia registros para distintas sedes
     $datos = $this->dep('datos')->tabla('plan_estudio')->get_ids($this->s__datos_filtro);
     $hoja = 1;
     $cabecera = false;
     foreach ($datos as $key => $valor) {
         //Itera sobre los planes
         $nombre_hoja = is_null($valor['iniciales_siu']) ? "Plan" : $valor['iniciales_siu'];
         $salida->crear_hoja($nombre_hoja);
         $fila = 2;
         //Coloca el nombre de la carrera en fila 1
         $excel->setActiveSheetIndex($hoja)->setCellValue("A1", mb_convert_encoding($valor['nombre'], "UTF8"));
         //con utf8_decode no se visualiza bien
         //Coloca la/s descripcion/es del plan
         $filtro['id_plan']['valor'] = $valor['id_plan'];
         $descr = $this->dep('datos')->tabla('seccion')->get_listado($filtro);
         foreach ($descr as $key => $una_descripcion) {
             $celda = 'A' . $fila;
             $excel->setActiveSheetIndex($hoja)->setCellValue($celda, mb_convert_encoding($una_descripcion['titulo'], "UTF8"));
             //con utf8_decode no se visualiza bien
             $celda = 'B' . $fila;
             $excel->setActiveSheetIndex($hoja)->setCellValue($celda, mb_convert_encoding($una_descripcion['contenido'], "UTF8"));
             //con utf8_decode no se visualiza bien
             $fila++;
         }
         $fila += 2;
         //Separación extra entre descripciones y materias
         //Coloca las materias del plan, una por fila
         $datos = $this->dep('datos')->tabla('materia')->listar_materias($valor['id_plan']);
         foreach ($datos as $key => $valor) {
             //Itera sobre las materias
             foreach ($valor as $campo => $dato) {
                 //Itera sobre los campos de una materia
                 if (!$cabecera) {
                     //aun no se escribieron los nombres de campos
                     $celda = chr($columna) . ($fila - 1);
                     $excel->setActiveSheetIndex($hoja)->setCellValue($celda, mb_convert_encoding($campo, "UTF8"));
                     //con utf8_decode no se visualiza bien
                 }
                 $celda = chr($columna) . $fila;
                 $excel->setActiveSheetIndex($hoja)->setCellValue($celda, mb_convert_encoding($dato, "UTF8"));
                 //con utf8_decode no se visualiza bien
                 $columna++;
             }
             $fila++;
             $columna = 65;
             $cabecera = true;
         }
         $fila++;
         //Coloca la observación del plan
         $obs = $this->dep('datos')->tabla('obs_plan')->get_listado($filtro);
         if (count($obs) > 0) {
             $excel->setActiveSheetIndex($hoja)->setCellValue("A{$fila}", "Observaciones:");
             $excel->setActiveSheetIndex($hoja)->setCellValue("B{$fila}", mb_convert_encoding($obs[0]['descripcion'], "UTF8"));
         }
         $cabecera = false;
         $hoja++;
     }
 }
 function vista_excel(toba_vista_excel $salida)
 {
     $salida->set_nombre_archivo("Resultados_Encuesta.xls");
     $excel = $salida->get_excel();
     //recuperamos el objeto
     $salida->titulo("Resultados de la Encuesta");
     $sql = "select titulo,estado from encuesta where id_encuesta=" . $this->s__encuesta;
     $res = toba::db('encuesta')->consultar($sql);
     $tit = utf8_decode($res[0]['titulo']);
     $estado = $res[0]['titulo'];
     if ($estado == 'A') {
         $tit = $tit . '-' . 'Resultados Parciales';
     } else {
         $tit = $tit . '-' . 'Resultados Finales';
     }
     $salida->set_hoja_nombre("Hoja 1");
     $excel->setActiveSheetIndex(0)->setCellValue('A1', $tit);
     //recorro las secciones
     $sql = "select t_s.* from seccion t_s where t_s.id_enc=" . $this->s__encuesta . " order by t_s.id_seccion";
     $res = toba::db('encuesta')->consultar($sql);
     $seccion_nro = 1;
     $fila = 2;
     foreach ($res as $sec) {
         $s = $sec['id_seccion'];
         $consulta = "select count(t_c.id_opcion) as cant from pregunta t_p JOIN seccion t_s ON (t_p.id_sec=t_s.id_seccion)   RIGHT OUTER JOIN opcion_comun t_c ON (t_p.id_pregunta=t_c.id_preg) where t_s.id_seccion=" . $s;
         $resultado = toba::db('encuesta')->consultar($consulta);
         if ($resultado[0]['cant'] != 0) {
             //solo muestro las secciones que tienen al menos una pregunta con opciones comunes
             $dato = $seccion_nro . '. ' . utf8_decode($sec['titulo']);
             //inserto el titulo de la seccion
             $excel->setActiveSheetIndex(0)->setCellValue('A' . $fila, $dato);
             $fila = $fila + 1;
             //recupero los datos de las preguntas de la seccion
             $sql2 = "select t_p.* from pregunta t_p where t_p.id_sec=" . $s . " order by t_p.id_pregunta";
             $datos_preguntas = toba::db('encuesta')->consultar($sql2);
             $preg_nro = 1;
             foreach ($datos_preguntas as $pregunta) {
                 $p = $pregunta['id_pregunta'];
                 $estilo = $pregunta['estilo'];
                 $dato = $preg_nro . '. ' . utf8_decode($pregunta['descripcion']);
                 if ($estilo == 'VR' or $estilo == '1R') {
                     $excel->setActiveSheetIndex(0)->setCellValue('A' . $fila, $dato);
                     $fila = $fila + 1;
                     $preg_nro = $preg_nro + 1;
                     //recupero los datos de las opciones comunes de la pregunta
                     $sql4 = "select t_o.* from opcion_comun t_o where t_o.id_preg=" . $p . " order by t_o.id_opcion";
                     $datos_opciones = toba::db('encuesta')->consultar($sql4);
                     foreach ($datos_opciones as $opcion) {
                         $dato1 = utf8_decode($opcion['nombre']);
                         $dato2 = $opcion['cantidad_respuestas'];
                         //inserto el nombre de la opcion
                         $excel->setActiveSheetIndex(0)->setCellValue('A' . $fila, $dato1);
                         //inserto la cantidad de respuestas de la opcion
                         $excel->setActiveSheetIndex(0)->setCellValue('B' . $fila, $dato2);
                         $fila = $fila + 1;
                     }
                 }
             }
             $seccion_nro = $seccion_nro + 1;
         }
         //fin del if
     }
     //for de las secciones
     //agrego una nueva hoja al excel
     $salida->crear_hoja('Hoja 2');
     $salida->set_hoja_nombre("Hoja 2");
     //inicializo nuevamente para comenzar desde la fila 1
     $seccion_nro = 1;
     $fila = 1;
     //recorro de nuevo todas las secciones
     foreach ($res as $sec) {
         $s = $sec['id_seccion'];
         $consulta = "select count(t_l.id_opcion) as cant from pregunta t_p JOIN seccion t_s ON (t_p.id_sec=t_s.id_seccion)   RIGHT OUTER JOIN opcion_libre t_l ON (t_p.id_pregunta=t_l.id_preg) where t_s.id_seccion=" . $s;
         $resultado = toba::db('encuesta')->consultar($consulta);
         if ($resultado[0]['cant'] != 0) {
             //solo muestro las secciones que tienen al menos una pregunta con opciones libres. Si la seccion no tiene preguntas libres entonces no muestro nada
             $dato = $seccion_nro . '. ' . utf8_decode($sec['titulo']);
             //inserto el titulo de la seccion
             $excel->setActiveSheetIndex(1)->setCellValue('A' . $fila, $dato);
             $fila = $fila + 1;
             //recupero los datos de las preguntas que tienen opciones libre de la seccion
             $sql2 = "select distinct t_p.* from pregunta t_p, opcion_libre t_l where t_p.id_sec=" . $s . " and t_p.id_pregunta=t_l.id_preg order by t_p.id_pregunta";
             $datos_preguntas = toba::db('encuesta')->consultar($sql2);
             $preg_nro = 1;
             foreach ($datos_preguntas as $pregunta) {
                 $p = $pregunta['id_pregunta'];
                 $estilo = $pregunta['estilo'];
                 $dato = $preg_nro . '. ' . utf8_decode($pregunta['descripcion']);
                 //inserto el nombre de la pregunta
                 $excel->setActiveSheetIndex(1)->setCellValue('A' . $fila, $dato);
                 $preg_nro = $preg_nro + 1;
                 //recupero los datos de las opciones libres de la pregunta
                 $sql4 = "select t_l.* from opcion_libre t_l where t_l.id_preg=" . $p . " order by t_l.id_opcion";
                 $datos_opciones = toba::db('encuesta')->consultar($sql4);
                 foreach ($datos_opciones as $opcion) {
                     $dato2 = utf8_decode($opcion['observacion']);
                     //inserto la respuesta de la pregunta
                     $excel->setActiveSheetIndex(1)->setCellValue('B' . $fila, $dato2);
                     $fila = $fila + 1;
                 }
             }
             $seccion_nro = $seccion_nro + 1;
         }
         //fin del if
     }
     //for de las secciones
 }