package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.OlapStarFactQuestionario;
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.*;
import java.text.DecimalFormat;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Created by jorgemachado on 07/12/16.
*/
public class UnidadesQueryDao
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(UnidadesQueryDao.
class);
public static void getMediasCadeira
(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,
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 codigoUnidade,
1.5.0/docs/api/java/lang/String.html">String codigoCurso,
1.5.0/docs/api/java/lang/String.html">String codigoInstituicao,
1.5.0/docs/api/java/lang/String.html">String semestre,
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 whereFragmentEntity = QuestionariosQueryDao.
getWhereEntityCodesFragment(codes,entityEvaluated
);
query = AbstractDao.
getCurrentSession().
createQuery("" +
"SELECT " +
"avg(fc.intResposta) as media," +
"std(fc.intResposta) as desvio," +
"count(distinct perfil.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.olapUnidade unit " +
"JOIN fc.olapTimeLine timeLine " +
"JOIN fc.olapPerfilUser perfil " +
"where " +
" quest.ano = :ano " +
whereFragmentEntity +
"and unit.codigo = :codigoUnidade " +
"and curso.codigoCurso = :codigoCurso " +
"and quest.semestre = :semestre " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.
getHistoryDriveConstraintStatic() +
"' " +
(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
);
query.
setString("semestre",semestre
);
query.
setString("codigoUnidade",codigoUnidade
);
query.
setString("codigoCurso",codigoCurso
);
DataTable mediasGlobaisTable =
new DataTable
();
medias.
setMediasGlobaisTable(mediasGlobaisTable
);
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("Curso");
header.
addColTextCenter("Escola");
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
];
if(mediaGrupo ==
null || mediaGrupo == 0.0
)
{
mediaGrupo =
0.0;
DataTable.
Row row = mediasGlobaisTable.
addRowNormal();
row.
addColTextCenter("Sem resultados para apresentar").
setColspan(6
);
return;
}
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 =
(1.5.0/docs/api/java/lang/Long.html">Long) result
[2
];
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("#.#");
1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat df4 =
new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.####");
DataTable.
Row row = mediasGlobaisTable.
addRowNormal();
row.
addColTextCenter(""+total
);
row.
addColPercentageDefinedCenter(df4.
format(mediaGrupo
),
"" +
((int)((mediaGrupo/5.0
)*100.0
)),
true);
row.
addColTextCenter(df.
format(desvio
));
row.
addColTextCenter("[" + df2.
format(min
) +
"<->" + df2.
format(max
) +
"]");
PerguntasGrupoQueryDao.
MediaGlobalEscolaGrupo mediaGlobalEscolaGrupo = PerguntasGrupoQueryDao.
getMediaEscolaGrupo(report, codigoInstituicao, anoLectivo, grupo, subGrupo, periodos, degrees
);
PerguntasGrupoQueryDao.
MediaGlobalCursoGrupo mediaGlobalCursoGrupo = PerguntasGrupoQueryDao.
getMediaCursoGrupo(report, codigoCurso, anoLectivo, grupo, subGrupo, periodos
);
medias.
setAvaliacaoMediaArredondada((int) ReportUtils.
round(mediaGrupo, 0
));
medias.
setAvaliacaoMedia(mediaGrupo
);
medias.
setDesvioPadrao(desvio
);
medias.
setMediaGlobalNosCursos(mediaGlobalCursoGrupo.
media);
medias.
setMediaGlobalNasEscolas(mediaGlobalEscolaGrupo.
media);
medias.
setTotal((int) total
);
row.
addColPercentageDefinedCenter(df.
format(mediaGlobalCursoGrupo.
media),
"" +
((int)((mediaGlobalCursoGrupo.
media/5.0
)*100.0
)),
true);
row.
addColPercentageDefinedCenter(df.
format(mediaGlobalEscolaGrupo.
media),
"" +
((int)((mediaGlobalEscolaGrupo.
media/5.0
)*100.0
)),
true);
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 criarTabelasCadeirasCurso
(1.5.0/docs/api/java/lang/String.html">String courseCode,
1.5.0/docs/api/java/lang/String.html">String anoLectivo, QuestionariosAlunosReport cursoReport,
int tempoLevadoMinimo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees,List
<UnidadeStats
> unidadeStatsList
)
{
criarTabelasCadeiras
(new 1.5.0/docs/api/java/lang/String.html">String[]{courseCode
},EntityEvaluated.
CURSO,anoLectivo,cursoReport,tempoLevadoMinimo,
periodos,degrees,unidadeStatsList
);
}
public static void criarTabelasCadeirasDocente
(1.5.0/docs/api/java/lang/String.html">String teacherCode,
1.5.0/docs/api/java/lang/String.html">String anoLectivo, QuestionariosAlunosReport docenteReport,
int tempoLevadoMinimo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees,List
<UnidadeStats
> unidadeStatsList
)
{
criarTabelasCadeiras
(new 1.5.0/docs/api/java/lang/String.html">String[]{teacherCode
},EntityEvaluated.
DOCENTE,anoLectivo,docenteReport,tempoLevadoMinimo,
periodos,degrees,unidadeStatsList
);
}
/**
*
* @param codes
* @param entityEvaluated
* @param anoLectivo
* @param report
* @param tempoLevadoMinimo
* @param periodos
* @param degrees
*/
public static void criarTabelasCadeiras
(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,
int tempoLevadoMinimo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees,List
<UnidadeStats
> unidadeStatsList
)
{
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
);
1.5.0/docs/api/javax/management/Query.html">Query query = AbstractDao.
getCurrentSession().
createQuery(
"select unit.nome, " +
"unit.codigo, " +
"quest.semestre, " +
"curso.codigoCurso, " +
"curso.nomeCurso, " +
"curso.codigoInstituicao, " +
"curso.nomeInstituicao, " +
"sum(case when fc.respondido = true then 1 else 0 end) as respondido, " +
"sum(case when fc.respondido = false then 1 else 0 end) as naoRespondido, " +
"count(user.sigesCode) " +
"from " + OlapStarFactQuestionario.
class.
getName() +
" fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapUnidade unit " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"quest.ano = :ano " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.
getHistoryDriveConstraintStatic() +
"' " +
whereFragmentEntity +
periodosQuery +
degreesQuery +
" group by unit.codigo, quest.semestre, curso.codigoCurso");
//query.setString("codigoSiges",teacherCode);
query.
setString("ano",anoLectivo
);
List
<Object
[]> cadeiras = query.
list();
for(5+0%2Fdocs%2Fapi+Object">Object[] cadeira : cadeiras
)
{
1.5.0/docs/api/java/lang/String.html">String nomeUnidade =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[0
];
1.5.0/docs/api/java/lang/String.html">String codigoUnidade =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[1
];
1.5.0/docs/api/java/lang/String.html">String semestreUnidade =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[2
];
1.5.0/docs/api/java/lang/String.html">String codigoCurso =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[3
];
1.5.0/docs/api/java/lang/String.html">String nomeCurso =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[4
];
1.5.0/docs/api/java/lang/String.html">String codigoInstituicao =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[5
];
1.5.0/docs/api/java/lang/String.html">String nomeInstituicao =
(1.5.0/docs/api/java/lang/String.html">String) cadeira
[6
];
1.5.0/docs/api/java/lang/Long.html">Long respostas =
(1.5.0/docs/api/java/lang/Long.html">Long) cadeira
[7
];
1.5.0/docs/api/java/lang/Long.html">Long inscritos =
(1.5.0/docs/api/java/lang/Long.html">Long) cadeira
[9
];
logger.
info("Encontrada cadeira: " + nomeUnidade +
" de " + nomeCurso +
" (" + codigoUnidade +
";" + semestreUnidade +
";" + codigoCurso +
")");
UnidadeStats statsUnidade =
new UnidadeStats
();
statsUnidade.
setNomeCurso(nomeCurso
);
statsUnidade.
setNomeUnidade(nomeUnidade
);
statsUnidade.
setSemestre(semestreUnidade
);
statsUnidade.
setCodigoCurso(codigoCurso
);
statsUnidade.
setCodigoUnidade(codigoUnidade
);
statsUnidade.
setNomeEscola(nomeInstituicao
);
statsUnidade.
setCodigoEscola(codigoInstituicao
);
statsUnidade.
setInscritos(inscritos.
intValue());
statsUnidade.
setRespostas(respostas.
intValue());
if(entityEvaluated == EntityEvaluated.
DOCENTE)
{
UnidadeStats.
UnidadeStatsGrupo dataDocente = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_DOCENTE_CODE_PERGUNTAS,
null,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
UnidadeStats.
UnidadeStatsGrupo dataUnidade = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_UNIDADE_CODE_PERGUNTAS,
null,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
UnidadeStats.
UnidadeStatsGrupo dataDrelDocenteAluno = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_DOCENTE_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.
GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
UnidadeStats.
UnidadeStatsGrupo dataDdocenteProf = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_DOCENTE_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.
GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
UnidadeStats.
UnidadeStatsGrupo dataEstagio = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_ESTAGIO_CODE_PERGUNTAS,
null,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
UnidadeStats.
UnidadeStatsGrupo dataEnsinoClinico = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_ENSINO_CLINICO_CODE_PERGUNTAS,
null,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
statsUnidade.
setUnidadeStatsGrupoDocente(dataDocente
);
statsUnidade.
setUnidadeStatsGrupoUnidade(dataUnidade
);
statsUnidade.
setUnidadeStatsGrupoDrelDocenteAluno(dataDrelDocenteAluno
);
statsUnidade.
setUnidadeStatsGrupoDdocenteProf(dataDdocenteProf
);
statsUnidade.
setUnidadeStatsGrupoEstagio(dataEstagio
);
statsUnidade.
setUnidadeStatsGrupoPraticaEnsinoClinico(dataEnsinoClinico
);
}else if(entityEvaluated == EntityEvaluated.
CURSO)
{
UnidadeStats.
UnidadeStatsGrupo dataSalas = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_SALAS_CODE_PERGUNTAS,
null,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
UnidadeStats.
UnidadeStatsGrupo dataUnidade = criarTabelasRespostasCadeira
(codes,entityEvaluated,anoLectivo,report,tempoLevadoMinimo,
PerguntasGrupoQueryDao.
GRUPO_UNIDADE_CODE_PERGUNTAS,
null,
codigoUnidade,codigoCurso,semestreUnidade,codigoInstituicao,periodos,degrees
);
statsUnidade.
setUnidadeStatsGrupoUnidade(dataUnidade
);
statsUnidade.
setUnidadeStatsGrupoSalas(dataSalas
);
}else
{
throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Nao implementado");
}
unidadeStatsList.
add(statsUnidade
);
}
}
public static UnidadeStats.
UnidadeStatsGrupo criarTabelasRespostasCadeira
(1.5.0/docs/api/java/lang/String.html">String teacherCode,
1.5.0/docs/api/java/lang/String.html">String anoLectivo,
DocenteReport docenteReport,
double tempoMinimo,
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 codigoUnidade,
1.5.0/docs/api/java/lang/String.html">String codigoCurso,
1.5.0/docs/api/java/lang/String.html">String semestre,
1.5.0/docs/api/java/lang/String.html">String codigoInstituicao,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees
)
{
return criarTabelasRespostasCadeira
(new 1.5.0/docs/api/java/lang/String.html">String[]{teacherCode
},EntityEvaluated.
DOCENTE, anoLectivo,
docenteReport,tempoMinimo,grupo,subGrupo,codigoUnidade,codigoCurso,semestre,codigoInstituicao,
periodos,degrees
);
}
/**
* Gera um gráfico com todas as respostas agregadas por questao para um professor
*
* Gera as medias por pergunta em cada cadeira e as medias dos seu curso e
* da sua escola
* @param codes
* @param entityEvaluated
* @param anoLectivo
* @param docenteReport
*/
public static UnidadeStats.
UnidadeStatsGrupo criarTabelasRespostasCadeira
(
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 docenteReport,
double tempoMinimo,
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 codigoUnidade,
1.5.0/docs/api/java/lang/String.html">String codigoCurso,
1.5.0/docs/api/java/lang/String.html">String semestre,
1.5.0/docs/api/java/lang/String.html">String codigoInstituicao,
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 whereFragmentEntity = QuestionariosQueryDao.
getWhereEntityCodesFragment(codes, entityEvaluated
);
UnidadeStats.
UnidadeStatsGrupo unidadeData =
new UnidadeStats.
UnidadeStatsGrupo(grupo,subGrupo
);
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," +
"sum(case when fc.intResposta = 1 then 1 else 0 end) as r1," +
"sum(case when fc.intResposta = 2 then 1 else 0 end) as r2," +
"sum(case when fc.intResposta = 3 then 1 else 0 end) as r3," +
"sum(case when fc.intResposta = 4 then 1 else 0 end) as r4," +
"sum(case when fc.intResposta = 5 then 1 else 0 end) as r5," +
"std(fc.intResposta) as desvio," +
"count(fc.id) as total, " +
"prgp.pergunta as pergunta, " +
"prgp.numero as numero, " +
"avg(fc.tempoLevado) as tempoMedioLevado " +
"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 " +
" quest.ano = :ano " +
whereFragmentEntity +
"and unit.codigo = :codigoUnidade " +
"and curso.codigoCurso = :codigoCurso " +
"and quest.semestre = :semestre " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.
getHistoryDriveConstraintStatic() +
"' " +
(tempoMinimo
> 0 ? " and fc.tempoLevado > :tempoLevado " :
"" ) +
(grupo ==
null ? "" :
" and prgp.grupoCode = :grupoCode ") +
(subGrupo ==
null ? "" :
" and prgp.subGrupoCode = :subGrupoCode ") +
"group by prgp.numero " +
"order by prgp.numero ");
if(grupo
!=
null)
query.
setString("grupoCode",grupo
);
if(subGrupo
!=
null)
query.
setString("subGrupoCode",subGrupo
);
//query.setString("codigoSiges",teacherCode);
query.
setString("ano",anoLectivo
);
query.
setString("codigoUnidade",codigoUnidade
);
query.
setString("codigoCurso",codigoCurso
);
query.
setString("semestre",semestre
);
if(tempoMinimo
> 0)
{
query.
setDouble("tempoLevado",tempoMinimo
);
}
DataTable tableRespostasAgregadas =
new DataTable
();
unidadeData.
setRespostasTable(tableRespostasAgregadas
);
getMediasCadeira
(codes, entityEvaluated, anoLectivo, docenteReport, grupo, subGrupo, unidadeData.
getMediasGrupo(), codigoUnidade, codigoCurso, codigoInstituicao, semestre, periodos, degrees
);
DataTable.
Row header = tableRespostasAgregadas.
addRowHeader();
header.
addColTextCenter("Questão");
header.
addColTextCenter("Resps.");
header.
addColTextCenter("Tempo Médio de Resposta (seg.)");
header.
addColTextCenter("Nada Satisf. %");
header.
addColTextCenter("Pouco Satisf. %");
header.
addColTextCenter("Satisf. %");
header.
addColTextCenter("Bastante Satisf. %");
header.
addColTextCenter("Muito Satisf. %");
header.
addColTextCenter("Média");
header.
addColTextCenter("Desvio Padrão");
header.
addColTextCenter("Curso");
header.
addColTextCenter("Diff Curso");
header.
addColTextCenter("Escola");
header.
addColTextCenter("Diff Escola");
List
<Object
[]> resultsTest = query.
list();
for(5+0%2Fdocs%2Fapi+Object">Object[] resultTest : resultsTest
)
{
1.5.0/docs/api/java/lang/Double.html">Double tempoMedioLevado =
(1.5.0/docs/api/java/lang/Double.html">Double) resultTest
[10
];
1.5.0/docs/api/java/lang/Double.html">Double mediaDocente =
(1.5.0/docs/api/java/lang/Double.html">Double) resultTest
[0
];
1.5.0/docs/api/java/lang/Double.html">Double desvio =
(1.5.0/docs/api/java/lang/Double.html">Double) resultTest
[6
];
1.5.0/docs/api/java/lang/Long.html">Long total =
(1.5.0/docs/api/java/lang/Long.html">Long) resultTest
[7
];
double min = mediaDocente -
(desvio
*2
);
double max = mediaDocente +
(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/lang/String.html">String pergunta = resultTest
[8
].
toString();
1.5.0/docs/api/java/lang/String.html">String numero = resultTest
[9
].
toString();
DataTable.
Row rowUnidade = tableRespostasAgregadas.
addRowNormal();
rowUnidade.
addColLabelCenter(pergunta
);
rowUnidade.
addColTextCenter(""+total
);
rowUnidade.
addColTextCenter(df.
format(tempoMedioLevado/1000.0
));
DataTable.
Row.
Col colResposta1 = rowUnidade.
addColTextCenter(resultTest
[1
].
toString());
DataTable.
Row.
Col colResposta2 = rowUnidade.
addColTextCenter(resultTest
[2
].
toString());
DataTable.
Row.
Col colResposta3 = rowUnidade.
addColTextCenter(resultTest
[3
].
toString());
DataTable.
Row.
Col colResposta4 = rowUnidade.
addColTextCenter(resultTest
[4
].
toString());
DataTable.
Row.
Col colResposta5 = rowUnidade.
addColTextCenter(resultTest
[5
].
toString());
1.5.0/docs/api/java/lang/Long.html">Long respostas1 =
(1.5.0/docs/api/java/lang/Long.html">Long) resultTest
[1
];
1.5.0/docs/api/java/lang/Long.html">Long respostas2 =
(1.5.0/docs/api/java/lang/Long.html">Long) resultTest
[2
];
1.5.0/docs/api/java/lang/Long.html">Long respostas3 =
(1.5.0/docs/api/java/lang/Long.html">Long) resultTest
[3
];
1.5.0/docs/api/java/lang/Long.html">Long respostas4 =
(1.5.0/docs/api/java/lang/Long.html">Long) resultTest
[4
];
1.5.0/docs/api/java/lang/Long.html">Long respostas5 =
(1.5.0/docs/api/java/lang/Long.html">Long) resultTest
[5
];
if(respostas1
>= respostas2
&& respostas1
>= respostas3
&& respostas1
>= respostas4
&& respostas1
>= respostas5
)
{
colResposta1.
setBackgroundColor(ChartBuilderUtil.
COLOR_1_HEX);
}else if(respostas2
>= respostas1
&& respostas2
>= respostas3
&& respostas2
>= respostas4
&& respostas2
>= respostas5
)
{
colResposta2.
setBackgroundColor(ChartBuilderUtil.
COLOR_2_HEX);
}else if(respostas3
>= respostas1
&& respostas3
>= respostas2
&& respostas3
>= respostas4
&& respostas3
>= respostas5
)
{
colResposta3.
setBackgroundColor(ChartBuilderUtil.
COLOR_3_HEX);
}else if(respostas4
>= respostas1
&& respostas4
>= respostas2
&& respostas4
>= respostas3
&& respostas4
>= respostas5
)
{
colResposta4.
setBackgroundColor(ChartBuilderUtil.
COLOR_4_HEX);
}else if(respostas5
>= respostas1
&& respostas5
>= respostas2
&& respostas5
>= respostas3
&& respostas5
>= respostas4
)
{
colResposta5.
setBackgroundColor(ChartBuilderUtil.
COLOR_5_HEX);
}
1.5.0/docs/api/java/lang/String.html">String percentagemDocente = ChartBuilderUtil.
getPercentagemPrint0Slots(mediaDocente, 5
);
1.5.0/docs/api/java/lang/String.html">String mediaDocentePrint = df.
format(mediaDocente
);
rowUnidade.
addColPercentageDefinedCenter(mediaDocentePrint,percentagemDocente,
true);
rowUnidade.
addColTextCenter(df.
format(desvio
));
//So preenchemos as perguntas para o
PerguntaStats perguntaStats =
new PerguntaStats
();
perguntaStats.
setGrupo(grupo
);
perguntaStats.
setDesvio(df.
format(desvio
));
perguntaStats.
setMediaEntidadeEmAvaliacaoPrint(mediaDocentePrint
);
perguntaStats.
setMediaEntidadeEmAvaliacao(mediaDocente
);
perguntaStats.
setPercentMediaEntidadeEmAvaliacao(ChartBuilderUtil.
getPercentagemPrint0Slots(mediaDocente, 5
));
perguntaStats.
setNumero(numero
);
perguntaStats.
setPergunta(pergunta
);
//Aqui a media dos cursos é a media do curso da Unidade, curso unico
//A PerguntaStats é usada também nas respostas agregadas ai a media dos cursos é a de todos os cursos do docente
//onde ele tem participacao
PerguntasGrupoQueryDao.
MediaGlobalEscolaPergunta mediaGlobalEscolaPergunta = PerguntasGrupoQueryDao.
getMediaEscolaPergunta(docenteReport, codigoInstituicao, anoLectivo, numero,periodos,degrees
);
PerguntasGrupoQueryDao.
MediaGlobalCursoPergunta mediaGlobalCursoPergunta = PerguntasGrupoQueryDao.
getMediaCursoPergunta(docenteReport, codigoCurso, anoLectivo, numero,periodos
);
if(unidadeData.
getUnidadesNaEscola() <=
0)
{
//so faz na primeira passagem e igual para todas
unidadeData.
setUnidadesNaEscola(mediaGlobalEscolaPergunta.
numeroUnidades);
unidadeData.
setUnidadesNoCurso(mediaGlobalCursoPergunta.
numeroUnidades);
}
perguntaStats.
setMediaCursos(mediaGlobalCursoPergunta.
media);
perguntaStats.
setMediaCursosPrint(df.
format(mediaGlobalCursoPergunta.
media));
perguntaStats.
setMediaEscolas(mediaGlobalEscolaPergunta.
media);
perguntaStats.
setMediaEscolasPrint(df.
format(mediaGlobalEscolaPergunta.
media));
perguntaStats.
setPercentMediaCursos(ChartBuilderUtil.
getPercentagemPrint0Slots(mediaGlobalCursoPergunta.
media, 5
));
perguntaStats.
setPercentMediaEscolas(ChartBuilderUtil.
getPercentagemPrint0Slots(mediaGlobalEscolaPergunta.
media, 5
));
perguntaStats.
setPercentMediaEntidadeEmAvaliacao(ChartBuilderUtil.
getPercentagemPrint0Slots(mediaDocente, 5
));
perguntaStats.
setDiffMediaCurso((mediaDocente - mediaGlobalCursoPergunta.
media));
perguntaStats.
setDiffMediaEscola((mediaDocente - mediaGlobalEscolaPergunta.
media));
double diffCurso = mediaDocente - mediaGlobalCursoPergunta.
media;
double diffEscola = mediaDocente - mediaGlobalEscolaPergunta.
media;
perguntaStats.
setDiffMediaCursoPrint(df.
format(mediaDocente - mediaGlobalCursoPergunta.
media));
unidadeData.
getPerguntasStats().
add(perguntaStats
);
rowUnidade.
addColPercentageDefinedCenter(perguntaStats.
getMediaCursosPrint(),perguntaStats.
getPercentMediaCursos(),
true);
DataTable.
Row.
Col difCurso = rowUnidade.
addColNumberCenter(perguntaStats.
getDiffMediaCursoPrint());
difCurso.
setBackgroundColor(ChartBuilderUtil.
getBackgroundColorDiff(diffCurso
));
rowUnidade.
addColPercentageDefinedCenter(perguntaStats.
getMediaEscolasPrint(),perguntaStats.
getPercentMediaEscolas(),
true);
DataTable.
Row.
Col difEscola = rowUnidade.
addColNumberCenter(df.
format(diffEscola
));
difEscola.
setBackgroundColor(ChartBuilderUtil.
getBackgroundColorDiff(diffEscola
));
}
return unidadeData
;
}
public static void createTableTaxaRespostaUnidadeAoDocente
(QuestionariosAlunosReport docenteReport,
1.5.0/docs/api/java/lang/String.html">String teacherCode,
1.5.0/docs/api/java/lang/String.html">String anoLectivo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees
) {
createTableTaxaRespostaUnidadeGen
(docenteReport,
new 1.5.0/docs/api/java/lang/String.html">String[]{teacherCode
},EntityEvaluated.
DOCENTE,anoLectivo,periodos,degrees
);
}
public static void createTableTaxaRespostaUnidadeAoCurso
(QuestionariosAlunosReport report,
1.5.0/docs/api/java/lang/String.html">String courseCode,
1.5.0/docs/api/java/lang/String.html">String anoLectivo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees
) {
createTableTaxaRespostaUnidadeGen
(report,
new 1.5.0/docs/api/java/lang/String.html">String[]{courseCode
},EntityEvaluated.
CURSO,anoLectivo,periodos,degrees
);
}
public static void createTableTaxaRespostaUnidadeAoCurso
(QuestionariosAlunosReport report,
1.5.0/docs/api/java/lang/String.html">String[] courseCodes,
1.5.0/docs/api/java/lang/String.html">String anoLectivo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees
) {
createTableTaxaRespostaUnidadeGen
(report,courseCodes,EntityEvaluated.
CURSOS,anoLectivo,periodos,degrees
);
}
public static void createTableTaxaRespostaUnidadeAoCurso
(QuestionariosAlunosReport report, List
<String
> courseCodes,
1.5.0/docs/api/java/lang/String.html">String anoLectivo,
1.5.0/docs/api/java/lang/String.html">String[] periodos,
1.5.0/docs/api/java/lang/String.html">String[] degrees
) {
createTableTaxaRespostaUnidadeGen
(report,
(1.5.0/docs/api/java/lang/String.html">String[]) courseCodes.
toArray(),EntityEvaluated.
CURSOS,anoLectivo,periodos,degrees
);
}
/**REFATORIZAR ISTO, este metodo não precisa de uma query pode perfeitamente usar a lista de UnitStats*/
public static void createTableTaxaRespostaUnidadeGen
(QuestionariosAlunosReport report,
1.5.0/docs/api/java/lang/String.html">String[] codes, EntityEvaluated entityEvaluated,
1.5.0/docs/api/java/lang/String.html">String anoLectivo,
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 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
);
1.5.0/docs/api/javax/management/Query.html">Query query = AbstractDao.
getCurrentSession().
createQuery("" +
"SELECT " +
"unidade.nome, " +
"sum(case when fc.respondido = true then 1 else 0 end) as respondido, " +
"sum(case when fc.respondido = false then 1 else 0 end) as naoRespondido, " +
"count(user.sigesCode), " +
"unidade.codigo " +
"FROM " + OlapStarFactQuestionario.
class.
getName() +
" fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapUnidade unidade " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where quest.ano = :ano " +
whereFragmentEntity +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.
getHistoryDriveConstraintStatic() +
"' " +
periodosQuery +
degreesQuery +
" group by unidade.codigo, quest.semestre, curso.codigoCurso " +
"order by unidade.nome asc");
//query.setString("codigoSiges",teacherCode);
query.
setString("ano",anoLectivo
);
List
<Object
[]> result =
(List
<Object
[]>) query.
list();
DataTable dTableOrderByNome = criarTabelaTaxas
(report,result,report.
getQuestionariosReqRespondidos(),
true);
report.
setTabelaTaxaRespostaUnidade( dTableOrderByNome
);
1.5.0/docs/api/java/util/Collections.html">Collections.
sort(result,
new Comparator
<Object
[]>() {
@
1.5.0/docs/api/java/lang/Override.html">Override
public int compare
(5+0%2Fdocs%2Fapi+Object">Object[] o1,
5+0%2Fdocs%2Fapi+Object">Object[] o2
)
{
1.5.0/docs/api/java/lang/Long.html">Long respondidos2 =
(1.5.0/docs/api/java/lang/Long.html">Long) o2
[1
];
1.5.0/docs/api/java/lang/Long.html">Long inscritos2 =
(1.5.0/docs/api/java/lang/Long.html">Long) o2
[3
];
int respondidosInt2 = respondidos2
!=
null ? ((1.5.0/docs/api/java/lang/Long.html">Long) respondidos2
).
intValue() :
0;
int inscritosInt2 = inscritos2
!=
null ? ((1.5.0/docs/api/java/lang/Long.html">Long) inscritos2
).
intValue() :
0;
1.5.0/docs/api/java/lang/Long.html">Long respondidos1 =
(1.5.0/docs/api/java/lang/Long.html">Long) o1
[1
];
1.5.0/docs/api/java/lang/Long.html">Long inscritos1 =
(1.5.0/docs/api/java/lang/Long.html">Long) o1
[3
];
int respondidosInt1 = respondidos1
!=
null ? ((1.5.0/docs/api/java/lang/Long.html">Long) respondidos1
).
intValue() :
0;
int inscritosInt1 = inscritos1
!=
null ? ((1.5.0/docs/api/java/lang/Long.html">Long) inscritos1
).
intValue() :
0;
int percentage1 =
(int)(((float)(respondidosInt1
) /
((float)inscritosInt1
) * 100.0
));
int percentage2 =
(int)(((float)(respondidosInt2
) /
((float)inscritosInt2
) * 100.0
));
return percentage2 - percentage1
;
}
});
DataTable dTableOrderByTaxa = criarTabelaTaxas
(report,result,report.
getQuestionariosReqRespondidos(),
false);
report.
setTabelaTaxaRespostaUnidadeOrderTaxa(dTableOrderByTaxa
);
}
/**REFATORIZAR ISTO, este metodo não precisa de uma query pode perfeitamente usar a lista de UnitStats*/
private static DataTable criarTabelaTaxas
(QuestionariosAlunosReport alunosReport, List
<Object
[]> result,
int totalRespondidosCadeirasTodas,
boolean fillParticipacoesEmUnidades
)
{
DataTable tableTaxaRespostaUnidade =
new DataTable
();
DataTable.
Row header = tableTaxaRespostaUnidade.
addRowHeader();
header.
addColTextCenter("Unidade Curricular");
header.
addColTextCenter("Insc.");
header.
addColTextCenter("Resp.");
header.
addColTextCenter("% Respostas");
int totalParticiparam =
0;
int totalInscritos =
0;
for(5+0%2Fdocs%2Fapi+Object">Object[] unidade: result
)
{
DataTable.
Row rowUnidade = tableTaxaRespostaUnidade.
addRowNormal();
1.5.0/docs/api/java/lang/String.html">String unidadeNome =
(1.5.0/docs/api/java/lang/String.html">String) unidade
[0
];
1.5.0/docs/api/java/lang/Long.html">Long respondidos =
(1.5.0/docs/api/java/lang/Long.html">Long) unidade
[1
];
1.5.0/docs/api/java/lang/Long.html">Long naoRespondidos =
(1.5.0/docs/api/java/lang/Long.html">Long) unidade
[2
];
1.5.0/docs/api/java/lang/Long.html">Long inscritos =
(1.5.0/docs/api/java/lang/Long.html">Long) unidade
[3
];
1.5.0/docs/api/java/lang/String.html">String codigo =
(1.5.0/docs/api/java/lang/String.html">String) unidade
[4
];
int respondidosInt = respondidos
!=
null ? ((1.5.0/docs/api/java/lang/Long.html">Long) respondidos
).
intValue() :
0;
int inscritosInt = inscritos
!=
null ? ((1.5.0/docs/api/java/lang/Long.html">Long) inscritos
).
intValue() :
0;
totalInscritos += inscritosInt
;
totalParticiparam += respondidosInt
;
rowUnidade.
addColLabelCenter(unidadeNome
);
rowUnidade.
addColTextCenter(""+inscritosInt
);
rowUnidade.
addColTextCenter(""+respondidosInt
);
int percentage =
(int)(((float)(respondidosInt
) /
((float)inscritosInt
) * 100.0
));
rowUnidade.
addColPercentageCenter("" + percentage,
true);
if(fillParticipacoesEmUnidades
)
{
QuestionariosAlunosReport.
ParticipacaoUnidade participacoesUnidades =
new QuestionariosAlunosReport.
ParticipacaoUnidade();
participacoesUnidades.
setCodigoUnidade(codigo
);
participacoesUnidades.
setNomeUnidade(unidadeNome
);
participacoesUnidades.
setInscritos(inscritosInt
);
participacoesUnidades.
setParticiparam(respondidosInt
);
participacoesUnidades.
setParticiparamPercentagem(percentage
);
participacoesUnidades
.
setPercentagemContribuicaoDaUnidadeNoUniversoUnidades(
ChartBuilderUtil.
getPercentagem(
respondidosInt,
totalRespondidosCadeirasTodas
)
);
participacoesUnidades
.
setPercentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint(
ChartBuilderUtil.
getPercentagemPrint1Slots(
respondidosInt,
totalRespondidosCadeirasTodas
)
);
alunosReport.
getParticipacoesUnidades().
add(participacoesUnidades
);
}
}
return tableTaxaRespostaUnidade
;
}
}