Subversion Repositories bacoAlunos

Rev

Rev 1572 | Rev 1576 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries;

import jomm.dao.impl.AbstractDao;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.OlapStarFactQuestionarioAnswer;
import pt.estgp.estgweb.services.questionarios.PedagogicoAlunosProcessor;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.DocenteReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.EntityEvaluated;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.QuestionariosAlunosReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.ChartBuilderUtil;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.DataTable;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.MediasGrupo;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.ReportUtils;

import java.text.DecimalFormat;
import java.util.List;

/**
 * Created by jorgemachado on 07/12/16.
 */

public class PerguntasGrupoQueryDao
{
    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_DOCENTE_CODE_PERGUNTAS = "Docente";
    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_UNIDADE_CODE_PERGUNTAS = "Unidade";

    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS = "D_RelAluno";
    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS = "D_ProfissRigorDocente";

    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_SALAS_CODE_PERGUNTAS = "Salas";
    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_ESTAGIO_CODE_PERGUNTAS = "EstagioProj";
    public static final 1.5.0/docs/api/java/lang/String.html">String GRUPO_ENSINO_CLINICO_CODE_PERGUNTAS = "PraEnsinoCliPraEnsinoSupervisionado";


    public static void getMediasGrupo(1.5.0/docs/api/java/lang/String.html">String[] codes,
                                      EntityEvaluated entityEvaluated,
                                      1.5.0/docs/api/java/lang/String.html">String anoLectivo,
                                      QuestionariosAlunosReport report,
                                      List<String> codigosCurso,
                                      List<String> codigosEscola,
                                      1.5.0/docs/api/java/lang/String.html">String grupo,
                                      1.5.0/docs/api/java/lang/String.html">String subGrupo,
                                      MediasGrupo medias,
                                      1.5.0/docs/api/java/lang/String.html">String[] periodos,
                                      1.5.0/docs/api/java/lang/String.html">String[] degrees
                                      )
    {
        1.5.0/docs/api/javax/management/Query.html">Query query;

        1.5.0/docs/api/java/lang/String.html">String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
        1.5.0/docs/api/java/lang/String.html">String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
        1.5.0/docs/api/java/lang/String.html">String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes,entityEvaluated);

        query = AbstractDao.getCurrentSession().createQuery("" +
                "SELECT " +
                "avg(fc.intResposta) as media," +
                "std(fc.intResposta) as desvio," +
                "count(fc.id) as total " +

                "FROM  " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
                "JOIN fc.olapTipologia tipo " +
                "JOIN fc.olapQuestionario quest " +
                "JOIN fc.olapPergunta prgp " +
                "JOIN fc.olapCurso curso " +
                "JOIN fc.olapTimeLine timeLine " +

                "where " +
                " quest.ano = :ano " +
                whereFragmentEntity +
                "and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
                periodosQuery +
                degreesQuery +
                (grupo == null ? "" : " and prgp.grupoCode = :grupoCode ") +
                (subGrupo == null ? "" : " and prgp.subGrupoCode = :subGrupoCode ")
        );
        if(grupo != null)
            query.setString("grupoCode",grupo);
        if(subGrupo != null)
            query.setString("subGrupoCode",subGrupo);
        //query.setString("codigoSiges",teacherCode);
        query.setString("ano",anoLectivo);

        DataTable mediasGlobaisTable = new DataTable();


        DataTable.Row header = mediasGlobaisTable.addRowHeader();
        header.addColTextCenter("Resps.");
        header.addColTextCenter("Média");
        header.addColTextCenter("Desvio Padrão");
        header.addColTextCenter("95% Resps no intervalo");
        if(entityEvaluated == EntityEvaluated.DOCENTE)
        {
            header.addColTextCenter("Média dos Cursos em que Lecciona");
            header.addColTextCenter("Média das Escolas em que Lecciona");
        }
        else if(entityEvaluated == EntityEvaluated.CURSO)
        {
            header.addColTextCenter("Média da Escola");
        }
        else
        {
            throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Não implementado");
        }



        5+0%2Fdocs%2Fapi+Object">Object[] result = (5+0%2Fdocs%2Fapi+Object">Object[]) query.uniqueResult();


        1.5.0/docs/api/java/lang/Double.html">Double mediaGrupo = (1.5.0/docs/api/java/lang/Double.html">Double) result[0];
        1.5.0/docs/api/java/lang/Double.html">Double desvio = (1.5.0/docs/api/java/lang/Double.html">Double) result[1];
        long total = report.getInquiridosComResposta();
        double min = mediaGrupo - (desvio*2);
        double max = mediaGrupo + (desvio*2);
        if(max > 5) max = 5;
        1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat df = new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.##");
        1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat df2 = new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.#");

        DataTable.Row row = mediasGlobaisTable.addRowNormal();
        row.addColTextCenter(""+total);
        row.addColPercentageDefinedCenter(df.format(mediaGrupo),"" + ((int)((mediaGrupo/5.0)*100.0)), true);
        row.addColTextCenter(df.format(desvio));
        row.addColTextCenter("[" + df2.format(min) + "<->" + df2.format(max) + "]");


        double mediaCursos = QueryDaoUtils.getMediaCursos(codigosCurso, anoLectivo, grupo, subGrupo, periodos, degrees);
        double mediaEscolas = QueryDaoUtils.getMediaEscolas(codigosEscola, anoLectivo, grupo,subGrupo, periodos, degrees);


        if(entityEvaluated == EntityEvaluated.DOCENTE)
        {
            row.addColPercentageDefinedCenter(df.format(mediaCursos), "" + ((int) ((mediaCursos / 5.0) * 100.0)), true);
        }
        else if(entityEvaluated == EntityEvaluated.CURSO)
        {

        }
        else
        {
            throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Não implementado");
        }

        row.addColPercentageDefinedCenter(df.format(mediaEscolas),"" + ((int)((mediaEscolas/5.0)*100.0)),true);



        medias.setAvaliacaoMediaArredondada((int) ReportUtils.round(mediaGrupo, 0));
        medias.setAvaliacaoMedia(mediaGrupo);
        medias.setDesvioPadrao(desvio);
        medias.setMediaGlobalNasEscolas(mediaEscolas);
        medias.setMediaGlobalNosCursos(mediaCursos);
        medias.setTotal((int) total);

        medias.setMediasGlobaisTable(mediasGlobaisTable);

        if(medias.getAvaliacaoMediaArredondada() == 1)
            medias.setColorMedia(ChartBuilderUtil.COLOR_1_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 2)
            medias.setColorMedia(ChartBuilderUtil.COLOR_2_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 3)
            medias.setColorMedia(ChartBuilderUtil.COLOR_3_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 4)
            medias.setColorMedia(ChartBuilderUtil.COLOR_4_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 5)
            medias.setColorMedia(ChartBuilderUtil.COLOR_5_HEX);
    }




    public static void getMediasGrupo(1.5.0/docs/api/java/lang/String.html">String teacherCode,
                                         1.5.0/docs/api/java/lang/String.html">String anoLectivo,
                                         DocenteReport docenteReport,
                                         List<String> codigosCurso,
                                         List<String> codigosEscola,
                                         1.5.0/docs/api/java/lang/String.html">String grupo,
                                         1.5.0/docs/api/java/lang/String.html">String subGrupo,
                                         MediasGrupo medias
                                        ,1.5.0/docs/api/java/lang/String.html">String[] periodos
                                        ,1.5.0/docs/api/java/lang/String.html">String[] degrees)
    {
        1.5.0/docs/api/javax/management/Query.html">Query query;

        1.5.0/docs/api/java/lang/String.html">String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
        1.5.0/docs/api/java/lang/String.html">String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);

        query = AbstractDao.getCurrentSession().createQuery("" +
                "SELECT " +
                "avg(fc.intResposta) as media," +
                "std(fc.intResposta) as desvio," +
                "count(fc.id) as total " +

                "FROM  " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
                "JOIN fc.olapTipologia tipo " +
                "JOIN fc.olapQuestionario quest " +
                "JOIN fc.olapPergunta prgp " +
                "JOIN fc.olapCurso curso " +
                "JOIN fc.olapTimeLine timeLine " +

                "where " +
                " quest.ano = :ano " +
                "and tipo.codigoSiges = :codigoSiges " +
                "and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
                periodosQuery +
                degreesQuery +
                (grupo == null ? "" : " and prgp.grupoCode = :grupoCode ") +
                (subGrupo == null ? "" : " and prgp.subGrupoCode = :subGrupoCode ")
                );
        if(grupo != null)
            query.setString("grupoCode",grupo);
        if(subGrupo != null)
            query.setString("subGrupoCode",subGrupo);
        query.setString("codigoSiges",teacherCode);
        query.setString("ano",anoLectivo);

        DataTable mediasGlobaisTable = new DataTable();


        DataTable.Row header = mediasGlobaisTable.addRowHeader();
        header.addColTextCenter("Resps.");
        header.addColTextCenter("Média");
        header.addColTextCenter("Desvio Padrão");
        header.addColTextCenter("95% Resps no intervalo");
        header.addColTextCenter("Média dos Cursos em que Lecciona");
        header.addColTextCenter("Média das Escolas em que Lecciona");


        5+0%2Fdocs%2Fapi+Object">Object[] result = (5+0%2Fdocs%2Fapi+Object">Object[]) query.uniqueResult();


        1.5.0/docs/api/java/lang/Double.html">Double mediaGrupo = (1.5.0/docs/api/java/lang/Double.html">Double) result[0];
        1.5.0/docs/api/java/lang/Double.html">Double desvio = (1.5.0/docs/api/java/lang/Double.html">Double) result[1];
        long total = docenteReport.getInquiridosComResposta();
        double min = mediaGrupo - (desvio*2);
        double max = mediaGrupo + (desvio*2);
        if(max > 5) max = 5;
        1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat df = new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.##");
        1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat df2 = new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.#");

        DataTable.Row row = mediasGlobaisTable.addRowNormal();
        row.addColTextCenter(""+total);
        row.addColPercentageDefinedCenter(df.format(mediaGrupo),"" + ((int)((mediaGrupo/5.0)*100.0)), true);
        row.addColTextCenter(df.format(desvio));
        row.addColTextCenter("[" + df2.format(min) + "<->" + df2.format(max) + "]");


        double mediaCursos = QueryDaoUtils.getMediaCursos(codigosCurso, anoLectivo, grupo, subGrupo, periodos, degrees);
        double mediaEscolas = QueryDaoUtils.getMediaEscolas(codigosEscola, anoLectivo, grupo,subGrupo, periodos, degrees);


        row.addColPercentageDefinedCenter(df.format(mediaCursos),"" + ((int)((mediaCursos/5.0)*100.0)),true);
        row.addColPercentageDefinedCenter(df.format(mediaEscolas),"" + ((int)((mediaEscolas/5.0)*100.0)),true);



        medias.setAvaliacaoMediaArredondada((int) ReportUtils.round(mediaGrupo, 0));
        medias.setAvaliacaoMedia(mediaGrupo);
        medias.setDesvioPadrao(desvio);
        medias.setMediaGlobalNasEscolas(mediaEscolas);
        medias.setMediaGlobalNosCursos(mediaCursos);
        medias.setTotal((int) total);

        medias.setMediasGlobaisTable(mediasGlobaisTable);

        if(medias.getAvaliacaoMediaArredondada() == 1)
            medias.setColorMedia(ChartBuilderUtil.COLOR_1_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 2)
            medias.setColorMedia(ChartBuilderUtil.COLOR_2_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 3)
            medias.setColorMedia(ChartBuilderUtil.COLOR_3_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 4)
            medias.setColorMedia(ChartBuilderUtil.COLOR_4_HEX);
        else if(medias.getAvaliacaoMediaArredondada() == 5)
            medias.setColorMedia(ChartBuilderUtil.COLOR_5_HEX);
    }

    public static MediaGlobalCursoPergunta getMediaCursoPergunta(QuestionariosAlunosReport report,1.5.0/docs/api/java/lang/String.html">String codigoCurso, 1.5.0/docs/api/java/lang/String.html">String anoLectivo, 1.5.0/docs/api/java/lang/String.html">String numeroPergunta,1.5.0/docs/api/java/lang/String.html">String[] periodos)
    {

        1.5.0/docs/api/java/lang/String.html">String key = codigoCurso + "-" + anoLectivo + "-" + numeroPergunta;
        if(report.getMediasPerguntaNoCurso().get(key) != null)
            return report.getMediasPerguntaNoCurso().get(key);

        //String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
        1.5.0/docs/api/java/lang/String.html">String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);


        MediaGlobalCursoPergunta mediaGlobalCursoPergunta = new MediaGlobalCursoPergunta();
        report.getMediasPerguntaNoCurso().put(key,mediaGlobalCursoPergunta);

        1.5.0/docs/api/javax/management/Query.html">Query query;//*****CRIAR REPOSTAS DO GRUPO DOCENTE*****///

        query = AbstractDao.getCurrentSession().createQuery("" +
                "SELECT " +
                "avg(fc.intResposta) as media," +
                "std(fc.intResposta) as desvio," +
                "count(fc.id) as total, " +
                "avg(fc.tempoLevado) as tempoMedioLevado," +
                "prgp.pergunta, " +
                "curso.nomeCurso, " +
                "count(distinct unit.codigo) " +



                "FROM  " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
                "JOIN fc.olapPergunta prgp " +
                "JOIN fc.olapTipologia tipo " +
                "JOIN fc.olapQuestionario quest " +
                "JOIN fc.olapCurso curso " +
                "JOIN fc.olapUnidade unit " +
                "JOIN fc.olapTimeLine timeLine " +

                "where " +
                "    curso.codigoCurso = :codigoCurso " +
                //"and quest.semestre = :semestre " +
                "and quest.ano = :ano " +
                "and prgp.numero = :numero " +
                "and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
                //degreesQuery +
                periodosQuery);


        query.setString("codigoCurso",codigoCurso);
        //query.setString("semestre",semestre);
        query.setString("ano",anoLectivo);
        query.setString("numero",numeroPergunta);

        5+0%2Fdocs%2Fapi+Object">Object[] result = (5+0%2Fdocs%2Fapi+Object">Object[]) query.uniqueResult();


        mediaGlobalCursoPergunta.numeroPergunta = numeroPergunta;
        mediaGlobalCursoPergunta.pergunta = (1.5.0/docs/api/java/lang/String.html">String) result[4];
        mediaGlobalCursoPergunta.codigoCurso = codigoCurso;
        mediaGlobalCursoPergunta.nomeCurso = (1.5.0/docs/api/java/lang/String.html">String) result[5];
        mediaGlobalCursoPergunta.media = (1.5.0/docs/api/java/lang/Double.html">Double) result[0];
        mediaGlobalCursoPergunta.desvio = (1.5.0/docs/api/java/lang/Double.html">Double) result[1];
        mediaGlobalCursoPergunta.total = ((1.5.0/docs/api/java/lang/Long.html">Long) result[2]).intValue();
        mediaGlobalCursoPergunta.tempoLevadoMedia = (1.5.0/docs/api/java/lang/Double.html">Double) result[3];
        mediaGlobalCursoPergunta.numeroUnidades = ((1.5.0/docs/api/java/lang/Long.html">Long) result[6]).intValue();


        return mediaGlobalCursoPergunta;
    }

    public static MediaGlobalCursoGrupo getMediaCursoGrupo(QuestionariosAlunosReport report,1.5.0/docs/api/java/lang/String.html">String codigoCurso, 1.5.0/docs/api/java/lang/String.html">String anoLectivo, 1.5.0/docs/api/java/lang/String.html">String grupo,1.5.0/docs/api/java/lang/String.html">String subGrupo,
                                                           1.5.0/docs/api/java/lang/String.html">String[] periodos)
    {

        1.5.0/docs/api/java/lang/String.html">String key = codigoCurso + "-" + anoLectivo + "-" + (grupo == null ? "_" : grupo) + "-" + (subGrupo == null ? "_" : subGrupo);
        if(report.getMediasGrupoNoCurso().get(key) != null)
            return report.getMediasGrupoNoCurso().get(key);

        //String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
        1.5.0/docs/api/java/lang/String.html">String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);


        MediaGlobalCursoGrupo mediaGlobalCursoGrupo = new MediaGlobalCursoGrupo();
        report.getMediasGrupoNoCurso().put(key,mediaGlobalCursoGrupo);

        1.5.0/docs/api/javax/management/Query.html">Query query;//*****CRIAR REPOSTAS DO GRUPO DOCENTE*****///

        query = AbstractDao.getCurrentSession().createQuery("" +
                "SELECT " +
                "avg(fc.intResposta) as media," +
                "std(fc.intResposta) as desvio," +
                "count(fc.id) as total, " +
                "avg(fc.tempoLevado) as tempoMedioLevado," +
                "curso.nomeCurso, " +
                "count(distinct unit.codigo) " +

                "FROM  " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
                "JOIN fc.olapPergunta prgp " +
                "JOIN fc.olapTipologia tipo " +
                "JOIN fc.olapQuestionario quest " +
                "JOIN fc.olapCurso curso " +
                "JOIN fc.olapUnidade unit " +
                "JOIN fc.olapTimeLine timeLine " +

                "where " +
                " curso.codigoCurso = :codigoCurso " +
                //"and quest.semestre = :semestre " +
                "and quest.ano = :ano " +
                "and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
                (grupo == null ? "" : " and prgp.grupoCode = :grupoCode ") +
                (subGrupo == null ? "" : " and prgp.subGrupoCode = :subGrupoCode ") +
                //degreesQuery +
                periodosQuery);


        query.setString("codigoCurso",codigoCurso);
        //query.setString("semestre",semestre);
        query.setString("ano",anoLectivo);
        if(grupo != null)
            query.setString("grupoCode",grupo);
        if(subGrupo != null)
            query.setString("subGrupoCode",subGrupo);

        5+0%2Fdocs%2Fapi+Object">Object[] result = (5+0%2Fdocs%2Fapi+Object">Object[]) query.uniqueResult();


        mediaGlobalCursoGrupo.grupo = grupo;
        mediaGlobalCursoGrupo.codigoCurso = codigoCurso;
        mediaGlobalCursoGrupo.nomeCurso = (1.5.0/docs/api/java/lang/String.html">String) result[4];
        mediaGlobalCursoGrupo.media = (1.5.0/docs/api/java/lang/Double.html">Double) result[0];
        mediaGlobalCursoGrupo.desvio = (1.5.0/docs/api/java/lang/Double.html">Double) result[1];
        mediaGlobalCursoGrupo.total = ((1.5.0/docs/api/java/lang/Long.html">Long) result[2]).intValue();
        mediaGlobalCursoGrupo.tempoLevadoMedia = (1.5.0/docs/api/java/lang/Double.html">Double) result[3];
        mediaGlobalCursoGrupo.numeroUnidades = ((1.5.0/docs/api/java/lang/Long.html">Long) result[5]).intValue();


        return mediaGlobalCursoGrupo;
    }
    public static MediaGlobalEscolaPergunta getMediaEscolaPergunta(QuestionariosAlunosReport report,1.5.0/docs/api/java/lang/String.html">String codigoEscola, 1.5.0/docs/api/java/lang/String.html">String anoLectivo, 1.5.0/docs/api/java/lang/String.html">String numeroPergunta,
                                                                   1.5.0/docs/api/java/lang/String.html">String[] periodos ,1.5.0/docs/api/java/lang/String.html">String[] degrees)
    {
        1.5.0/docs/api/java/lang/String.html">String key = codigoEscola + "-" + anoLectivo + "-" + numeroPergunta;
        if(report.getMediasGrupoNaEscola().get(key) != null)
            return report.getMediasPerguntaNaEscola().get(key);

        1.5.0/docs/api/java/lang/String.html">String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
        1.5.0/docs/api/java/lang/String.html">String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);


        MediaGlobalEscolaPergunta mediaGlobalEscolaPergunta = new MediaGlobalEscolaPergunta();
        report.getMediasPerguntaNaEscola().put(key,mediaGlobalEscolaPergunta);

        1.5.0/docs/api/javax/management/Query.html">Query query;//*****CRIAR REPOSTAS DO GRUPO DOCENTE*****///

        query = AbstractDao.getCurrentSession().createQuery("" +
                "SELECT " +
                "avg(fc.intResposta) as media," +
                "std(fc.intResposta) as desvio," +
                "count(fc.id) as total, " +
                "avg(fc.tempoLevado) as tempoMedioLevado," +
                "curso.nomeInstituicao, " +
                "prgp.pergunta," +
                "count(distinct unit.codigo) " +

                "FROM  " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
                "JOIN fc.olapPergunta prgp " +
                "JOIN fc.olapTipologia tipo " +
                "JOIN fc.olapQuestionario quest " +
                "JOIN fc.olapCurso curso " +
                "JOIN fc.olapUnidade unit " +
                "JOIN fc.olapTimeLine timeLine " +

                "where " +
                "    curso.codigoInstituicao = :codigoInstituicao " +
                //"and quest.semestre = :semestre " +
                "and quest.ano = :ano " +
                "and prgp.numero = :numero " +
                "and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
                degreesQuery +
                periodosQuery);


        query.setString("codigoInstituicao",codigoEscola);
        //query.setString("semestre",semestre);
        query.setString("ano",anoLectivo);
        query.setString("numero",numeroPergunta);

        5+0%2Fdocs%2Fapi+Object">Object[] result = (5+0%2Fdocs%2Fapi+Object">Object[]) query.uniqueResult();


        mediaGlobalEscolaPergunta.numeroPergunta = numeroPergunta;
        mediaGlobalEscolaPergunta.pergunta = (1.5.0/docs/api/java/lang/String.html">String) result[5];
        mediaGlobalEscolaPergunta.codigoEscola = codigoEscola;
        mediaGlobalEscolaPergunta.nomeDaEscola = (1.5.0/docs/api/java/lang/String.html">String) result[4];
        mediaGlobalEscolaPergunta.media = (1.5.0/docs/api/java/lang/Double.html">Double) result[0];
        mediaGlobalEscolaPergunta.desvio = (1.5.0/docs/api/java/lang/Double.html">Double) result[1];
        mediaGlobalEscolaPergunta.total = ((1.5.0/docs/api/java/lang/Long.html">Long) result[2]).intValue();
        mediaGlobalEscolaPergunta.tempoLevadoMedia = (1.5.0/docs/api/java/lang/Double.html">Double) result[3];
        mediaGlobalEscolaPergunta.numeroUnidades = ((1.5.0/docs/api/java/lang/Long.html">Long) result[6]).intValue();


        return mediaGlobalEscolaPergunta;
    }

    public static MediaGlobalEscolaGrupo getMediaEscolaGrupo(QuestionariosAlunosReport report,1.5.0/docs/api/java/lang/String.html">String codigoEscola, 1.5.0/docs/api/java/lang/String.html">String anoLectivo, 1.5.0/docs/api/java/lang/String.html">String grupo,1.5.0/docs/api/java/lang/String.html">String subGrupo,
                                                             1.5.0/docs/api/java/lang/String.html">String[] periodos ,1.5.0/docs/api/java/lang/String.html">String[] degrees)
    {
        1.5.0/docs/api/java/lang/String.html">String key = codigoEscola + "-" + anoLectivo + "-" + (grupo == null ? "_" : grupo) + "-" + (subGrupo == null ? "_" : subGrupo);
        if(report.getMediasGrupoNaEscola().get(key) != null)
            return report.getMediasGrupoNaEscola().get(key);

        1.5.0/docs/api/java/lang/String.html">String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
        1.5.0/docs/api/java/lang/String.html">String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);

        MediaGlobalEscolaGrupo mediaGlobalEscolaGrupo = new MediaGlobalEscolaGrupo();
        report.getMediasGrupoNaEscola().put(key,mediaGlobalEscolaGrupo);

        1.5.0/docs/api/javax/management/Query.html">Query query;//*****CRIAR REPOSTAS DO GRUPO DOCENTE*****///

        query = AbstractDao.getCurrentSession().createQuery("" +
                "SELECT " +
                "avg(fc.intResposta) as media," +
                "std(fc.intResposta) as desvio," +
                "count(fc.id) as total, " +
                "avg(fc.tempoLevado) as tempoMedioLevado," +
                "curso.nomeInstituicao, " +
                "count(distinct unit.codigo) " +

                "FROM  " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
                "JOIN fc.olapPergunta prgp " +
                "JOIN fc.olapTipologia tipo " +
                "JOIN fc.olapQuestionario quest " +
                "JOIN fc.olapCurso curso " +
                "JOIN fc.olapUnidade unit " +
                "JOIN fc.olapTimeLine timeLine " +
                "where " +
                "curso.codigoInstituicao = :codigoInstituicao " +
                //"and quest.semestre = :semestre " +
                "and quest.ano = :ano " +
                "and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
                (grupo == null ? "" : " and prgp.grupoCode = :grupoCode ") +
                (subGrupo == null ? "" : " and prgp.subGrupoCode = :subGrupoCode ") +
                degreesQuery +
                periodosQuery);

        query.setString("codigoInstituicao",codigoEscola);
        //query.setString("semestre",semestre);
        query.setString("ano",anoLectivo);
        if(grupo != null)
            query.setString("grupoCode",grupo);
        if(subGrupo != null)
            query.setString("subGrupoCode",subGrupo);

        5+0%2Fdocs%2Fapi+Object">Object[] result = (5+0%2Fdocs%2Fapi+Object">Object[]) query.uniqueResult();


        mediaGlobalEscolaGrupo.grupo = grupo;
        mediaGlobalEscolaGrupo.codigoEscola = codigoEscola;
        mediaGlobalEscolaGrupo.nomeDaEscola = (1.5.0/docs/api/java/lang/String.html">String) result[4];
        mediaGlobalEscolaGrupo.media = (1.5.0/docs/api/java/lang/Double.html">Double) result[0];
        mediaGlobalEscolaGrupo.desvio = (1.5.0/docs/api/java/lang/Double.html">Double) result[1];
        mediaGlobalEscolaGrupo.total = ((1.5.0/docs/api/java/lang/Long.html">Long) result[2]).intValue();
        mediaGlobalEscolaGrupo.tempoLevadoMedia = (1.5.0/docs/api/java/lang/Double.html">Double) result[3];
        mediaGlobalEscolaGrupo.numeroUnidades = ((1.5.0/docs/api/java/lang/Long.html">Long) result[5]).intValue();

        return mediaGlobalEscolaGrupo;
    }





    public static class MediaGlobalCurso extends MediaGlobalResult
    {
        public 1.5.0/docs/api/java/lang/String.html">String nomeCurso;
        public 1.5.0/docs/api/java/lang/String.html">String codigoCurso;
        public int numeroUnidades;
    }

    public static class MediaGlobalEscola extends MediaGlobalResult
    {
        public 1.5.0/docs/api/java/lang/String.html">String nomeDaEscola;
        public 1.5.0/docs/api/java/lang/String.html">String codigoEscola;
        public int numeroUnidades;
    }

    public static class MediaGlobalEscolaPergunta extends MediaGlobalEscola
    {
        public 1.5.0/docs/api/java/lang/String.html">String numeroPergunta;
        public 1.5.0/docs/api/java/lang/String.html">String pergunta;
    }

    public static class MediaGlobalEscolaGrupo extends MediaGlobalEscola
    {
        public 1.5.0/docs/api/java/lang/String.html">String grupo;
    }

    public static class MediaGlobalCursoPergunta extends MediaGlobalCurso
    {
        public 1.5.0/docs/api/java/lang/String.html">String numeroPergunta;
        public 1.5.0/docs/api/java/lang/String.html">String pergunta;
    }

    public static class MediaGlobalCursoGrupo extends MediaGlobalCurso
    {
        public 1.5.0/docs/api/java/lang/String.html">String grupo;
    }

    public static class MediaGlobalResult
    {
        public double media;
        public double desvio;
        public int total;
        public double tempoLevadoMedia;
    }
}