Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1573 → Rev 1574

/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/report.fo.xsl
File deleted
\ No newline at end of file
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/docenteReportGuiaoAvaliacaoDesempenho.fo.xsl
File deleted
\ No newline at end of file
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/docenteReport.fo.xsl
File deleted
\ No newline at end of file
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/utilsReports.fo.xsl
File deleted
\ No newline at end of file
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/cursoPublicReport.fo.xsl
File deleted
\ No newline at end of file
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/ReportGenerator.java
File deleted
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/CursoPublicReportGenerator.java
File deleted
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/ChartWithDataTable.java
New file
0,0 → 1,25
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
 
/**
* Created by jorgemachado on 14/12/16.
*/
public class ChartWithDataTable extends ChartWithTitleTemp implements Serializable
{
DataTable dataTable;
 
public ChartWithDataTable(String chartTitle, String subTitle, String path, DataTable dataTable)
{
super(chartTitle, subTitle, path);
this.dataTable = dataTable;
}
 
public DataTable getDataTable() {
return dataTable;
}
 
public void setDataTable(DataTable dataTable) {
this.dataTable = dataTable;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/MediasGrupo.java
New file
0,0 → 1,122
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class MediasGrupo implements Serializable
{
String grupo;
String subGrupo;
double avaliacaoMedia;
int avaliacaoMediaArredondada;
double desvioPadrao;
public double mediaGlobalNosCursos;
public double mediaGlobalNasEscolas;
String colorMedia;
int total;
 
DataTable mediasGlobaisTable;
 
public MediasGrupo(String grupo,String subGrupo) {
this.grupo = grupo;
this.subGrupo = subGrupo;
}
 
public int getTotal() {
return total;
}
 
public void setTotal(int total) {
this.total = total;
}
 
public String getPercentAvaliacaoMediaForTables()
{
return "" + ((int)(100.0*(avaliacaoMedia/5.0)));
}
 
public String getPercentMediaGlobalNosCursosForTables()
{
return "" + ((int)(100.0*(mediaGlobalNosCursos/5.0)));
}
 
public String getPercentMediaGlobalNasEscolasForTables()
{
return "" + ((int)(100.0*(mediaGlobalNasEscolas/5.0)));
}
 
 
public String getGrupo() {
return grupo;
}
 
public String getSubGrupo() {
return subGrupo;
}
 
public void setSubGrupo(String subGrupo) {
this.subGrupo = subGrupo;
}
 
public void setGrupo(String grupo) {
this.grupo = grupo;
}
 
public DataTable getMediasGlobaisTable() {
return mediasGlobaisTable;
}
 
public void setMediasGlobaisTable(DataTable mediasGlobaisTable) {
this.mediasGlobaisTable = mediasGlobaisTable;
}
 
public double getAvaliacaoMedia() {
return avaliacaoMedia;
}
 
public void setAvaliacaoMedia(double avaliacaoMedia) {
this.avaliacaoMedia = avaliacaoMedia;
}
 
public int getAvaliacaoMediaArredondada() {
return avaliacaoMediaArredondada;
}
 
public void setAvaliacaoMediaArredondada(int avaliacaoMediaArredondada) {
this.avaliacaoMediaArredondada = avaliacaoMediaArredondada;
}
 
public double getDesvioPadrao() {
return desvioPadrao;
}
 
public void setDesvioPadrao(double desvioPadrao) {
this.desvioPadrao = desvioPadrao;
}
 
public double getMediaGlobalNosCursos() {
return mediaGlobalNosCursos;
}
 
public void setMediaGlobalNosCursos(double mediaGlobalNosCursos) {
this.mediaGlobalNosCursos = mediaGlobalNosCursos;
}
 
public double getMediaGlobalNasEscolas() {
return mediaGlobalNasEscolas;
}
 
public void setMediaGlobalNasEscolas(double mediaGlobalNasEscolas) {
this.mediaGlobalNasEscolas = mediaGlobalNasEscolas;
}
 
public String getColorMedia() {
return colorMedia;
}
 
public void setColorMedia(String colorMedia) {
this.colorMedia = colorMedia;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/UnidadePergunta.java
New file
0,0 → 1,31
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
/**
* Created by jorgemachado on 21/12/16.
*/
public class UnidadePergunta
{
public UnidadePergunta(UnidadeStats unidadeStats, PerguntaStats perguntaStats) {
this.unidadeStats = unidadeStats;
this.perguntaStats = perguntaStats;
}
 
UnidadeStats unidadeStats;
PerguntaStats perguntaStats;
 
public UnidadeStats getUnidadeStats() {
return unidadeStats;
}
 
public void setUnidadeStats(UnidadeStats unidadeStats) {
this.unidadeStats = unidadeStats;
}
 
public PerguntaStats getPerguntaStats() {
return perguntaStats;
}
 
public void setPerguntaStats(PerguntaStats perguntaStats) {
this.perguntaStats = perguntaStats;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/DataTable.java
New file
0,0 → 1,421
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import org.dom4j.DocumentException;
import org.w3c.dom.Document;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import javax.xml.transform.TransformerException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 11/11/16.
*/
public class DataTable implements Serializable
{
 
 
 
public DataTable() {
 
setRows(new ArrayList<Row>());
}
 
 
private ArrayList<Row> rows;
 
public Row addRow()
{
Row row = new Row();
rows.add(row);
return row;
}
public Row addRowHeader()
{
Row row = new Row();
row.setTypeHeader();
rows.add(row);
return row;
}
public Row addRowNormal()
{
Row row = new Row();
row.setTypeNormal();
rows.add(row);
return row;
}
public Row addRowFooter()
{
Row row = new Row();
row.setTypeFooter();
rows.add(row);
return row;
}
 
public ArrayList<Row> getRows() { return rows; }
 
public void setRows(ArrayList<Row> rows) {
this.rows = rows;
}
 
public static class Row implements Serializable
{
//header, footer, normal
String type = null;
boolean invisible = false;
private ArrayList<Col> cols;
 
 
public Row() {
setCols(new ArrayList<Col>());
}
 
public boolean isInvisible() {
return invisible;
}
 
public void setInvisible(boolean invisible) {
this.invisible = invisible;
}
 
public void setCols(ArrayList<Col> cols) {
this.cols = cols;
}
 
public void setTypeNormal() { type = "normal"; }
public void setTypeHeader() { type = "header"; }
public void setTypeFooter() { type = "footer"; }
 
 
 
public Col addCol()
{
Col col = new Col();
cols.add(col);
return col;
}
 
public Col addColNumberLeft(String value)
{ Col col = new Col(value);
col.setTypeNumber();
col.setAlignLeft();
cols.add(col);
return col;
}
public Col addColNumberRight(String value)
{ Col col = new Col(value);
col.setTypeNumber();
col.setAlignRight();
cols.add(col);
return col;
}
public Col addColNumberCenter(String value)
{ Col col = new Col(value);
col.setTypeNumber();
col.setAlignCenter();
cols.add(col);
return col;
}
 
public Col addColTextLeft(String value)
{ Col col = new Col(value);
col.setTypeText();
col.setAlignLeft();
cols.add(col);
return col;
}
public Col addColTextRight(String value)
{ Col col = new Col(value);
col.setTypeText();
col.setAlignRight();
cols.add(col);
return col;
}
 
public Col addColTextCenter(String value)
{ Col col = new Col(value);
col.setTypeText();
col.setAlignCenter();
cols.add(col);
return col;
}
 
public Col addColInvisible()
{ Col col = new Col();
col.setTypeInvisible();
cols.add(col);
return col;
}
 
public Col addColPercentageLeft(String value)
{ Col col = new Col(value);
col.setTypePercentage();
col.setAlignLeft();
cols.add(col);
return col;
}
public Col addColPercentageRight(String value)
{ Col col = new Col(value);
col.setTypePercentage();
col.setAlignRight();
cols.add(col);
return col;
}
public Col addColPercentageCenter(String value)
{ Col col = new Col(value);
col.setTypePercentage();
col.setAlignCenter();
cols.add(col);
return col;
}
 
public Col addColPercentageLeft(String value,boolean usePercentageColors)
{ Col col = new Col(value);
col.setTypePercentage();
col.setAlignLeft();
col.setUsePercentageColor(usePercentageColors);
cols.add(col);
return col;
}
public Col addColPercentageRight(String value,boolean usePercentageColors)
{ Col col = new Col(value);
col.setTypePercentage();
col.setAlignRight();
col.setUsePercentageColor(usePercentageColors);
cols.add(col);
return col;
}
public Col addColPercentageCenter(String value,boolean usePercentageColors)
{ Col col = new Col(value);
col.setTypePercentage();
col.setAlignCenter();
col.setUsePercentageColor(usePercentageColors);
cols.add(col);
return col;
}
 
 
public Col addColPercentageDefinedLeft(String value,String percent,boolean usePercentageColors)
{ Col col = new Col(value);
col.setPercentDefined(percent);
col.setTypePercentageDefined();
col.setAlignLeft();
col.setUsePercentageColor(usePercentageColors);
cols.add(col);
return col;
}
public Col addColPercentageDefinedRight(String value,String percent,boolean usePercentageColors)
{ Col col = new Col(value);
col.setPercentDefined(percent);
col.setTypePercentageDefined();
col.setAlignRight();
col.setUsePercentageColor(usePercentageColors);
cols.add(col);
return col;
}
public Col addColPercentageDefinedCenter(String value,String percent,boolean usePercentageColors)
{ Col col = new Col(value);
col.setPercentDefined(percent);
col.setTypePercentageDefined();
col.setAlignCenter();
col.setUsePercentageColor(usePercentageColors);
cols.add(col);
return col;
}
 
public Col addColPercentageDefinedProgressCenter(String value,String percent)
{ Col col = new Col(value);
col.setPercentDefined(percent);
col.setTypePercentageDefinedProgress();
col.setAlignCenter();
cols.add(col);
return col;
}
public Col addColPercentageProgressCenter(String value)
{ Col col = new Col(value);
col.setTypePercentageProgress();
col.setAlignCenter();
cols.add(col);
return col;
}
 
 
public Col addColLabelLeft(String value)
{ Col col = new Col(value);
col.setTypeLabel();
col.setAlignLeft();
cols.add(col);
return col;
}
public Col addColLabelRight(String value)
{ Col col = new Col(value);
col.setTypeLabel();
col.setAlignRight();
cols.add(col);
return col;
}
public Col addColLabelCenter(String value)
{ Col col = new Col(value);
col.setTypeLabel();
col.setAlignCenter();
cols.add(col);
return col;
}
 
public String getType() { return type; }
public ArrayList<Col> getCols() { return cols; }
 
public void setType(String type) {
this.type = type;
}
 
 
public static class Col implements Serializable
{
public Col(String value) {
this.value = value;
}
public Col() {
}
 
 
//center, left, right
String width = "";
String align = null;
String value = null;
String percentDefined = null;
//number, percentage, percentageDefined, text, label
String type = null;
boolean usePercentageColor = false;
String backgroundColor = "";
String backgroundColorPercentage = "";
String fontWeight = "";
int colspan = 0;
 
public String getWidth() {
return width;
}
 
public void setWidth(String width) {
this.width = width;
}
 
public String getFontWeight() {
return fontWeight;
}
 
public void setFontWeight(String fontWeight) {
this.fontWeight = fontWeight;
}
 
public int getColspan() {
return colspan;
}
 
public void setColspan(int colspan) {
this.colspan = colspan;
}
 
public String getBackgroundColor() {
return backgroundColor;
}
 
public void setBackgroundColor(String backgroundColor) {
this.backgroundColor = backgroundColor;
}
 
public String getBackgroundColorPercentage() {
return backgroundColorPercentage;
}
 
public void setBackgroundColorPercentage(String backgroundColorPercentage) {
this.backgroundColorPercentage = backgroundColorPercentage;
}
 
public void setAlignLeft() { align = "left"; }
public void setAlignRight() { align = "right"; }
public void setAlignCenter() { align = "center"; }
public void setTypeNumber() { type = "number"; }
public void setTypeText() { type = "text"; }
public void setTypeInvisible() { type = "invisible"; }
public void setTypePercentage() { type = "percentage"; }
public void setTypePercentageDefined() { type = "percentageDefined"; }
public void setTypePercentageDefinedProgress() { type = "percentageDefinedProgress"; }
public void setTypePercentageProgress() { type = "percentageProgress"; }
public void setTypeLabel() { type = "label"; }
 
public boolean isUsePercentageColor() {
return usePercentageColor;
}
 
public void setUsePercentageColor(boolean usePercentageColor)
{
this.usePercentageColor = usePercentageColor;
//new Approach for percentage color using degrade
if(usePercentageColor)
{
double percentage = type.equals("percentageDefined") ? Double.parseDouble(percentDefined.replace(",",".")) : Double.parseDouble(value.replace(",","."));
percentage = percentage / 100.0;
 
setBackgroundColorPercentage(getColorGradientForPercentage(percentage));
}
 
}
 
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
 
public String getPercentDefined() {
return percentDefined;
}
 
public void setPercentDefined(String percentDefined) {
if(percentDefined.contains("."))
this.percentDefined = percentDefined.substring(0,percentDefined.indexOf("."));
else if(percentDefined.contains(","))
this.percentDefined = percentDefined.substring(0,percentDefined.indexOf(","));
this.percentDefined = percentDefined;
}
}
}
 
/**
*
* @param percentageDecimal between 0 and 1
* @return
*/
public static String getColorGradientForPercentage(double percentageDecimal)
{
if(percentageDecimal < 0.5)
{
int green = ChartBuilderUtil.getGreenComponentGradient(percentageDecimal);
return "rgb(255," + green + ",0)";
}
else
{
 
int red = ChartBuilderUtil.getRedComponentGradient(percentageDecimal);
//int red = (int) (255.0*((1.0-percentageDecimal)*2));
return "rgb(" + red + ",255,0)";
}
}
 
 
 
public Document serialize() throws DocumentException, TransformerException, IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
//fos1 = new FileOutputStream("/Volumes/Home/jorgemachado/Desktop/docenteReport.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(out);
 
 
xe1.writeObject(this);
xe1.flush();
xe1.close();
//Dom4jUtil.writeSout(Dom4jUtil.parse(out.toString()));
return Dom4jUtil.toW3c(Dom4jUtil.parse(out.toString()));
 
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/TabelaPerguntaComparativosUnidades.java
New file
0,0 → 1,37
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
 
/**
* Created by jorgemachado on 21/12/16.
*/
public class TabelaPerguntaComparativosUnidades implements Serializable
{
public String perguntaNumero;
public String pergunta;
public DataTable tabelaComparativaUnidades;
 
public String getPerguntaNumero() {
return perguntaNumero;
}
 
public void setPerguntaNumero(String perguntaNumero) {
this.perguntaNumero = perguntaNumero;
}
 
public String getPergunta() {
return pergunta;
}
 
public void setPergunta(String pergunta) {
this.pergunta = pergunta;
}
 
public DataTable getTabelaComparativaUnidades() {
return tabelaComparativaUnidades;
}
 
public void setTabelaComparativaUnidades(DataTable tabelaComparativaUnidades) {
this.tabelaComparativaUnidades = tabelaComparativaUnidades;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/PerguntaStats.java
New file
0,0 → 1,181
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class PerguntaStats extends ChartTemp
{
String pergunta;
String numero;
String grupo;
String subGrupo;
 
String desvio;
 
String mediaEntidadeEmAvaliacaoPrint;
String mediaCursosPrint;
String mediaEscolasPrint;
 
Double mediaEntidadeEmAvaliacao;
Double mediaCursos;
Double mediaEscolas;
 
String percentMediaEntidadeEmAvaliacao;
String percentMediaCursos;
String percentMediaEscolas;
 
double diffMediaCurso;
String diffMediaCursoPrint;
 
double diffMediaEscola;
String diffMediaEscolaPrint;
 
public String getDesvio() {
return desvio;
}
 
public void setDesvio(String desvio) {
this.desvio = desvio;
}
 
public double getDiffMediaEscola() {
return diffMediaEscola;
}
 
public void setDiffMediaEscola(double diffMediaEscola) {
this.diffMediaEscola = diffMediaEscola;
}
 
public String getDiffMediaEscolaPrint() {
return diffMediaEscolaPrint;
}
 
public void setDiffMediaEscolaPrint(String diffMediaEscolaPrint) {
if(diffMediaEscolaPrint.trim().equals("-0"))
diffMediaEscolaPrint = "0";
this.diffMediaEscolaPrint = diffMediaEscolaPrint;
}
 
public String getSubGrupo() {
return subGrupo;
}
 
public void setSubGrupo(String subGrupo) {
this.subGrupo = subGrupo;
}
 
public double getDiffMediaCurso() {
return diffMediaCurso;
}
 
public void setDiffMediaCurso(double diffMediaCurso) {
this.diffMediaCurso = diffMediaCurso;
}
 
public String getDiffMediaCursoPrint() {
return diffMediaCursoPrint;
}
 
public void setDiffMediaCursoPrint(String diffMediaCursoPrint)
{
if(diffMediaCursoPrint.trim().equals("-0"))
diffMediaCursoPrint = "0";
this.diffMediaCursoPrint = diffMediaCursoPrint;
}
 
public String getMediaCursosPrint() {
return mediaCursosPrint;
}
 
public void setMediaCursosPrint(String mediaCursosPrint) {
this.mediaCursosPrint = mediaCursosPrint;
}
 
public String getMediaEscolasPrint() {
return mediaEscolasPrint;
}
 
public void setMediaEscolasPrint(String mediaEscolasPrint) {
this.mediaEscolasPrint = mediaEscolasPrint;
}
 
public String getGrupo() {
return grupo;
}
 
public void setGrupo(String grupo) {
this.grupo = grupo;
}
 
public String getPergunta() {
return pergunta;
}
 
public void setPergunta(String pergunta) {
this.pergunta = pergunta;
}
 
public Double getMediaCursos() {
return mediaCursos;
}
 
public void setMediaCursos(Double mediaCursos) {
this.mediaCursos = mediaCursos;
}
 
public Double getMediaEscolas() {
return mediaEscolas;
}
 
public void setMediaEscolas(Double mediaEscolas) {
this.mediaEscolas = mediaEscolas;
}
 
public String getPercentMediaCursos() {
return percentMediaCursos;
}
 
public void setPercentMediaCursos(String percentMediaCursos) {
this.percentMediaCursos = percentMediaCursos;
}
 
public String getPercentMediaEscolas() {
return percentMediaEscolas;
}
 
public Double getMediaEntidadeEmAvaliacao() {
return mediaEntidadeEmAvaliacao;
}
 
public void setMediaEntidadeEmAvaliacao(Double mediaEntidadeEmAvaliacao) {
this.mediaEntidadeEmAvaliacao = mediaEntidadeEmAvaliacao;
}
 
public String getMediaEntidadeEmAvaliacaoPrint() {
return mediaEntidadeEmAvaliacaoPrint;
}
 
public void setMediaEntidadeEmAvaliacaoPrint(String mediaEntidadeEmAvaliacaoPrint) {
this.mediaEntidadeEmAvaliacaoPrint = mediaEntidadeEmAvaliacaoPrint;
}
 
public String getPercentMediaEntidadeEmAvaliacao() {
return percentMediaEntidadeEmAvaliacao;
}
 
public void setPercentMediaEntidadeEmAvaliacao(String percentMediaEntidadeEmAvaliacao) {
this.percentMediaEntidadeEmAvaliacao = percentMediaEntidadeEmAvaliacao;
}
 
public void setPercentMediaEscolas(String percentMediaEscolas) {
this.percentMediaEscolas = percentMediaEscolas;
}
 
public String getNumero() {
return numero;
}
 
public void setNumero(String numero) {
this.numero = numero;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/ChartWithTitleTemp.java
New file
0,0 → 1,36
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
 
/**
* Created by jorgemachado on 08/12/16.
*/
public class ChartWithTitleTemp extends ChartTemp implements Serializable
{
private String chartTitle;
private String subTitle;
 
public String getChartTitle() {
return chartTitle;
}
 
public void setChartTitle(String chartTitle) {
this.chartTitle = chartTitle;
}
 
public String getSubTitle() {
return subTitle;
}
 
public void setSubTitle(String subTitle) {
this.subTitle = subTitle;
}
 
public ChartWithTitleTemp(String chartTitle,String subTitle,String path) {
super(path);
this.chartTitle = chartTitle;
this.subTitle = subTitle;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/ChartBuilderUtil.java
New file
0,0 → 1,1276
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.*;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.xy.XYDifferenceRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.chart.title.Title;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.DefaultValueDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.Week;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.TextAnchor;
import org.jfree.util.ShapeUtilities;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.QuestionariosAlunosReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.QuestionariosReport;
 
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
 
/**
* Created by jorgemachado on 28/11/16.
*/
public class ChartBuilderUtil
{
 
private static final Logger logger = Logger.getLogger(ChartBuilderUtil.class);
 
public static Color GREEN_OK = new Color(223,253,184);
public static Color RED_NOT_OK = new Color(255,200, 164);
public static Color NEUTRAL_TOTAL = new Color(83,83,84);
 
 
public static Color COLOR_SECTION_BLUE = new Color(178,230,254);
public static Color COLOR_SECTION_BLUE_DARK = new Color(82, 162,254);
public static Color COLOR_SECTION_GREEN = new Color(221,253,177);
public static Color COLOR_SECTION_GREEN_DARK = new Color(130,253, 89);
public static Color COLOR_SECTION_ROSE = new Color(255, 157, 169);
public static Color COLOR_SECTION_ROSE_DARK = new Color(223, 116, 128);
 
public static Color COLOR_SECTION_DIM = new Color(255, 200, 237);
public static Color COLOR_SECTION_DIM_DARK = new Color(255, 86, 241);
 
 
public static Color TRANSPARENT = new Color(0xFF, 0xFF, 0xFF, 0);
 
public static Color COLOR_1 = new Color(253, 11, 0);
public static Color COLOR_2 = new Color(255, 190, 0);
public static Color COLOR_3 = new Color(255, 254, 0);
public static Color COLOR_4 = new Color(188, 255, 0);
public static Color COLOR_5 = new Color(32, 255, 5);
 
public static String COLOR_1_HEX = String.format("#%02x%02x%02x", 253, 11, 0);
public static String COLOR_2_HEX = String.format("#%02x%02x%02x", 255, 190, 0);
public static String COLOR_3_HEX = String.format("#%02x%02x%02x", 255, 254, 0);
public static String COLOR_4_HEX = String.format("#%02x%02x%02x", 188, 255, 0);
public static String COLOR_5_HEX = String.format("#%02x%02x%02x", 32, 255, 5);
 
/**
* Util to create Bar Charts
*
* @param pergunta
* @param respostas
* @param pathTmp
* @return
* @throws java.io.IOException
*/
public static PerguntaStats createChartRespostasPergunta(String pergunta,java.util.List<String> subtitles, int[] respostas, String pathTmp,int maxValue) throws IOException {
//TESTE BARRAS LATERAIS
 
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
 
 
categoryDataset.addValue(respostas[0]," 1 ",pergunta);
categoryDataset.addValue(respostas[1]," 2 ",pergunta);
categoryDataset.addValue(respostas[2]," 3 ",pergunta);
categoryDataset.addValue(respostas[3]," 4 ",pergunta);
categoryDataset.addValue(respostas[4]," 5 ",pergunta);
 
 
 
JFreeChart chart = ChartFactory.createBarChart(pergunta, "", "Respostas", categoryDataset, PlotOrientation.VERTICAL, true, false, false);
chart.setBorderVisible(false);
 
chart.setTitle(new TextTitle(pergunta,new Font("Helvetica",Font.BOLD, 40)));
 
java.util.List<Title> subTitles = new ArrayList<Title>();
for(String subtitle: subtitles)
{
TextTitle t = new TextTitle(subtitle,new Font(
"Helvetica", Font.PLAIN, 40));
t.setHorizontalAlignment(HorizontalAlignment.LEFT);
chart.addSubtitle(t);
}
 
 
 
chart.setAntiAlias(true);
chart.setTextAntiAlias(true);
CategoryPlot barChartPlot = (CategoryPlot) chart.getPlot();
 
 
//barChartPlot.getRangeAxis().setRange(0,100);
//barChartPlot.setDrawingSupplier(new ChartDrawingSupplier());
barChartPlot.setBackgroundPaint(new Color(255, 255, 255));
//barChartPlot.setOutlineVisible(false);
 
 
barChartPlot.setRenderer(new BarRenderer()
{
public Paint getItemPaint(int row, int col) {
switch (row){
case 0:return COLOR_1 ;
case 1: return COLOR_2;
case 2:return COLOR_3 ;
case 3:return COLOR_4 ;
case 4:return COLOR_5 ;
default: return NEUTRAL_TOTAL;
}
 
}
public Paint getItemLabelPaint(int row, int col)
{
switch (col){
case 0:return Color.black ;
case 1:return Color.black ;
case 2:return Color.black ;
case 3:return Color.black ;
case 4: return Color.black;
default: return Color.black;
}
}
 
 
}
);
barChartPlot.getRenderer().setSeriesPaint(0,COLOR_1);
barChartPlot.getRenderer().setSeriesPaint(1,COLOR_2);
barChartPlot.getRenderer().setSeriesPaint(2,COLOR_3);
barChartPlot.getRenderer().setSeriesPaint(3,COLOR_4);
barChartPlot.getRenderer().setSeriesPaint(4,COLOR_5);
 
 
 
java.util.List categories = barChartPlot.getCategories();
barChartPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}({3})", NumberFormat.getInstance(),NumberFormat.getPercentInstance()));
 
 
(((CategoryPlot) chart.getPlot()).getRangeAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 40));
(((CategoryPlot) chart.getPlot()).getDomainAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 40));
((BarRenderer)((CategoryPlot) chart.getPlot()).getRenderer()).setBaseLegendTextFont(new Font(
"Helvetica", Font.PLAIN, 40));
((CategoryPlot) chart.getPlot()).getRenderer().setBaseItemLabelFont(new Font(
"Helvetica", Font.PLAIN, 43));
 
((BarRenderer)((CategoryPlot) chart.getPlot()).getRenderer()).setBaseLegendTextFont(new Font(
"Helvetica", Font.PLAIN, 40));
 
//barChartPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
 
 
//((BarRenderer) barChartPlot.getRenderer()).setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE12, TextAnchor.TOP_CENTER));
barChartPlot.getRenderer().setBaseItemLabelsVisible(true);
barChartPlot.getRenderer().setItemLabelsVisible(true);
 
//barChartPlot.getDomainAxis().setLabel("d");
 
 
 
 
//((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1.0);
((BarRenderer)barChartPlot.getRenderer()).setItemMargin(0);
((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1);
((BarRenderer)barChartPlot.getRenderer()).setMinimumBarLength(10);
//System.out.println(((BarRenderer)barChartPlot.getRenderer()).getMaximumBarWidth());
//System.out.println(((BarRenderer)barChartPlot.getRenderer()).getMinimumBarLength());
 
//NOVO
 
NumberAxis rangeAxis = (NumberAxis) barChartPlot.getRangeAxis();
rangeAxis.setUpperMargin(0.15);
rangeAxis.setRange(0,maxValue);
org.jfree.chart.axis.CategoryAxis categoryAxis = barChartPlot.getDomainAxis();
categoryAxis.setVisible(false);
//categoryAxis.setTickLabelsVisible(true);
 
 
 
((BarRenderer)barChartPlot.getRenderer()).setShadowVisible(false);
 
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
 
 
String pathGraficoRespostas = Globals.TMP_DIR + File.separator + "graficoRespostas" + pathTmp + ".png";
//String pathGraficoRespostas = "/Volumes/Home/jorgemachado/Desktop/graficoRespostas.png";
ChartUtilities.saveChartAsPNG(new File(pathGraficoRespostas), chart, 1200, 1000, info);
PerguntaStats respostasChart = new PerguntaStats();
respostasChart.setTempFile(pathGraficoRespostas);
respostasChart.setPergunta(pergunta);
return respostasChart;
}
 
public static void createRespostasDispersao()
{
 
/*****
*
*
*
*/
/*
BufferedImage image = null;
try {
 
image = ImageIO.read(Thread.currentThread().getContextClassLoader().getResource("pt/estgp/estgweb/services/questionarios/utils/fundoDispersao.png"));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
barChartPlot.setBackgroundImage(image);*/
/****
*
*/
}
 
/**
*
* @param questionariosReport
* @throws IOException
*/
public static void createChartTiposAlunos(QuestionariosAlunosReport questionariosReport, String pathTemplate) throws IOException {
DefaultPieDataset data = new DefaultPieDataset();
if(questionariosReport.getTipoAlunosNormalComResposta() > 0)
data.setValue("Regime Normal " + questionariosReport.getTipoAlunosNormalComResposta() + " = " + questionariosReport.getTipoAlunosNormalComRespostaPercent() + "%", new Double(questionariosReport.getTipoAlunosNormalComResposta()));
if(questionariosReport.getTipoAlunosTrabalhadorEstudanteComResposta() > 0)
data.setValue("Trabalhador Estudante " + questionariosReport.getTipoAlunosTrabalhadorEstudanteComResposta() + " = " + questionariosReport.getTipoAlunosTrabalhadorEstudanteComRespostaPercent() + "%", new Double(questionariosReport.getTipoAlunosTrabalhadorEstudanteComResposta()));
if(questionariosReport.getTipoAlunosErasmusComResposta() > 0)
data.setValue("Erasmus " + questionariosReport.getTipoAlunosErasmusComResposta() + " = " + questionariosReport.getTipoAlunosErasmusComRespostaPercent() + "%", new Double(questionariosReport.getTipoAlunosErasmusComResposta()));
JFreeChart chart = ChartFactory.createPieChart3D(null, data, false, true, false);
chart.setBackgroundPaint(new Color(255,255,255));
PiePlot plot = (PiePlot) chart.getPlot();
plot.setLabelBackgroundPaint(new Color(255, 249, 235));
plot.setLabelPaint(new Color(88, 88, 90));
plot.setDrawingSupplier(new ChartDrawingSupplier());
//CategoryItemRenderer render = chart.getCategoryPlot().getRenderer();
//render.setSeriesPaint(0,new Color(255,201,92));
plot.setBackgroundPaint(new Color(255, 255, 255));
plot.setOutlineVisible(false);
 
 
 
plot.setLabelFont(new Font(
"Helvetica", Font.PLAIN, 50));
 
 
BufferedImage image = chart.createBufferedImage( 300*4, 200*4);
String pathGraficoTiposAlunos = Globals.TMP_DIR + File.separator + pathTemplate + "graficoTiposAlunos.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoTiposAlunos));
questionariosReport.setPathGraficoTiposAlunosComResposta(pathGraficoTiposAlunos);
}
 
 
/**
*
* @param questionariosReport
* @throws IOException
*
*/
public static void createChartUnidadesContribuicao(QuestionariosAlunosReport questionariosReport, String pathTemplate) throws IOException {
DefaultPieDataset data = new DefaultPieDataset();
 
 
for(QuestionariosAlunosReport.ParticipacaoUnidade p: questionariosReport.getParticipacoesUnidades())
{
if(p.getPercentagemContribuicaoDaUnidadeNoUniversoUnidades() > 0)
data.setValue(p.getNomeUnidade() + " " + p.getPercentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint() + "%", new Double(p.getParticiparam()));
}
 
JFreeChart chart = ChartFactory.createRingChart(null, data, false, true, false);
chart.setBackgroundPaint(new Color(255,255,255));
RingPlot plot = (RingPlot) chart.getPlot();
 
plot.setLabelBackgroundPaint(new Color(255, 249, 235));
plot.setLabelPaint(new Color(88, 88, 90));
plot.setDrawingSupplier(new ChartDrawingSupplier());
//CategoryItemRenderer render = chart.getCategoryPlot().getRenderer();
//render.setSeriesPaint(0,new Color(255,201,92));
plot.setBackgroundPaint(new Color(255, 255, 255));
plot.setOutlineVisible(false);
 
plot.setCenterTextMode(CenterTextMode.FIXED);
plot.setCenterText("" + questionariosReport.getQuestionariosReqRespondidos() + " Resp.");
plot.setCenterTextColor(Color.black);
plot.setCenterTextFont(new Font(Font.SANS_SERIF, Font.BOLD, 24));
 
plot.setLabelFont(new Font("Helvetica", Font.PLAIN, 70));
plot.setCenterTextFont(new Font("Helvetica", Font.PLAIN, 100));
 
BufferedImage image = chart.createBufferedImage( 500*4, 300*4);
String pathGraficoTiposAlunos = Globals.TMP_DIR + File.separator + pathTemplate + "graficoContribuicaoUnidades.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoTiposAlunos));
questionariosReport.setPathGraficoContribuicaoUnidades(pathGraficoTiposAlunos);
}
 
 
/**
*
* @param questionariosReport
* @throws IOException
*/
public static void createChartTaxaRespostas(QuestionariosReport questionariosReport, String pathTemplate) throws IOException {
//TESTE BARRAS LATERAIS
 
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
DefaultValueDataset a = new DefaultValueDataset();
 
//categoryDataset.addValue(1,"Alunos","Respostas1");
categoryDataset.addValue(questionariosReport.questionariosReqRespondidos,"Questionarios","Respondidos");
categoryDataset.addValue(questionariosReport.questionariosReqNaoRespondidos,"Questionarios","S/Resposta");
categoryDataset.addValue(questionariosReport.questionariosReqTotal,"Questionarios","Questionarios");
 
 
JFreeChart chart = ChartFactory.createBarChart(null, null, null, categoryDataset, PlotOrientation.HORIZONTAL, false, true, false);
chart.setAntiAlias(true);
chart.setTextAntiAlias(false);
CategoryPlot barChartPlot = (CategoryPlot) chart.getPlot();
 
 
barChartPlot.setDrawingSupplier(new ChartBuilderUtil.ChartDrawingSupplier());
barChartPlot.setBackgroundPaint(new Color(255, 255, 255));
barChartPlot.setOutlineVisible(false);
barChartPlot.setRenderer(new BarRenderer() {
@Override
public Paint getItemPaint(int row, int col) {
switch (col) {
case 0:
return GREEN_OK;
case 1:
return RED_NOT_OK;
default:
return NEUTRAL_TOTAL;
}
 
}
 
public Paint getItemLabelPaint(int row, int col) {
switch (col) {
case 0:
return Color.black;
case 1:
return Color.black;
default:
return Color.white;
}
}
}
);
 
(((CategoryPlot) chart.getPlot()).getRangeAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 80));
(((CategoryPlot) chart.getPlot()).getDomainAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 80));
((BarRenderer)((CategoryPlot) chart.getPlot()).getRenderer()).setBaseLegendTextFont(new Font(
"Helvetica", Font.PLAIN, 80));
((CategoryPlot) chart.getPlot()).getRenderer().setBaseItemLabelFont(new Font(
"Helvetica", Font.PLAIN, 80));
barChartPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//barChartPlot.getRendererForDataset(barChartPlot.getDataset(0)).setSeriesPaint(0,Color.red);
//barChartPlot.getRendererForDataset(barChartPlot.getDataset(0)).setSeriesPaint(1,Color.blue);
// barChartPlot.getRendererForDataset(barChartPlot.getDataset(1)).setSeriesPaint(0,Color.blue);
 
((BarRenderer)barChartPlot.getRenderer()).setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE3, TextAnchor.CENTER_RIGHT));
barChartPlot.getRenderer().setBaseItemLabelsVisible(true);
barChartPlot.getRenderer().setItemLabelsVisible(true);
//((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1.0);
 
((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1);
((BarRenderer)barChartPlot.getRenderer()).setMinimumBarLength(10);
 
//CategoryItemLabelGenerator generator = new StandardCategoryItemLabelGenerator(
// "{2}", new DecimalFormat("0.00"));
((BarRenderer)barChartPlot.getRenderer()).setItemLabelPaint(null);
// add settings for individual series...
 
 
((BarRenderer)barChartPlot.getRenderer()).setShadowVisible(false);
barChartPlot.getRangeAxis().setVisible(false);
barChartPlot.getRangeAxis().setUpperMargin(0.15);
((BarRenderer)barChartPlot.getRenderer()).setItemMargin(0.2);
 
BufferedImage image = chart.createBufferedImage( 550*4, 300*4);
String pathGraficoRespostas = Globals.TMP_DIR + File.separator + pathTemplate + "graficoRespostas.png";
//String pathGraficoRespostas = "/Volumes/Home/jorgemachado/Desktop/graficoRespostas.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoRespostas));
 
questionariosReport.setPathGraficoTaxaRespostaQuestionarios(pathGraficoRespostas);
}
 
 
/**
*
* @param questionariosReport
* @throws IOException
*/
public static void createChartTaxaParticipacao(QuestionariosAlunosReport questionariosReport, String pathTemplate) throws IOException {
//TESTE BARRAS LATERAIS
 
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
DefaultValueDataset a = new DefaultValueDataset();
 
//categoryDataset.addValue(1,"Alunos","Respostas1");
categoryDataset.addValue(questionariosReport.getInquiridosComResposta(),"Alunos","Participaram");
categoryDataset.addValue(questionariosReport.getInquiridosNaoResponderam(),"Alunos","N/Participaram");
categoryDataset.addValue(questionariosReport.getInquiridosTotal(),"Alunos","Alunos");
 
 
JFreeChart chart = ChartFactory.createBarChart(null, null, null, categoryDataset, PlotOrientation.HORIZONTAL, false, true, false);
chart.setAntiAlias(true);
chart.setTextAntiAlias(true);
CategoryPlot barChartPlot = (CategoryPlot) chart.getPlot();
 
 
barChartPlot.setDrawingSupplier(new ChartDrawingSupplier());
barChartPlot.setBackgroundPaint(new Color(255, 255, 255));
barChartPlot.setOutlineVisible(false);
barChartPlot.setRenderer(new BarRenderer() {
@Override
public Paint getItemPaint(int row, int col) {
switch (col) {
case 0:
return GREEN_OK;
case 1:
return RED_NOT_OK;
default:
return NEUTRAL_TOTAL;
}
 
}
 
public Paint getItemLabelPaint(int row, int col) {
switch (col) {
case 0:
return Color.black;
case 1:
return Color.black;
default:
return Color.white;
 
}
}
}
);
 
(((CategoryPlot) chart.getPlot()).getRangeAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 80));
(((CategoryPlot) chart.getPlot()).getDomainAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 80));
((BarRenderer)((CategoryPlot) chart.getPlot()).getRenderer()).setBaseLegendTextFont(new Font(
"Helvetica", Font.PLAIN, 80));
((CategoryPlot) chart.getPlot()).getRenderer().setBaseItemLabelFont(new Font(
"Helvetica", Font.PLAIN, 80));
barChartPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
 
((BarRenderer)barChartPlot.getRenderer()).setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE3, TextAnchor.CENTER_RIGHT));
barChartPlot.getRenderer().setBaseItemLabelsVisible(true);
barChartPlot.getRenderer().setItemLabelsVisible(true);
//((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1.0);
((BarRenderer)barChartPlot.getRenderer()).setItemMargin(0.2);
((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1);
((BarRenderer)barChartPlot.getRenderer()).setMinimumBarLength(10);
 
 
((BarRenderer)barChartPlot.getRenderer()).setShadowVisible(false);
barChartPlot.getRangeAxis().setVisible(false);
barChartPlot.getRangeAxis().setUpperMargin(0.15);
((BarRenderer)barChartPlot.getRenderer()).setItemMargin(0.2);
 
BufferedImage image = chart.createBufferedImage( 550*4, 300*4);
String pathGraficoRespostas = Globals.TMP_DIR + File.separator + pathTemplate + "graficoTaxaParticipacao.png";
//String pathGraficoRespostas = "/Volumes/Home/jorgemachado/Desktop/graficoTaxaParticipacao.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoRespostas));
 
questionariosReport.setPathGraficoTaxaRespostaAlunos(pathGraficoRespostas);
}
 
public static String getRgbXslColor(Color color)
{
return "rgb(" + color.getRed() + "," + color.getGreen() + "," + color.getBlue() + ")";
}
 
 
/**
* Gerador de Cores para as Barras
*/
 
public static class ChartDrawingSupplier extends DefaultDrawingSupplier {
 
public Paint[] paintSequence;
public int paintIndex;
public int fillPaintIndex;
 
{
paintSequence = new Paint[] {
new Color(255, 235, 166),
new Color(141,141, 144),
new Color(255,200, 164),
new Color(198,198,202),
new Color(197,130,107),
new Color(217,199,140),
new Color(172,164,140),
new Color(155,91,58),
new Color(83,83,84),
new Color(255,196,76),
new Color(40,40,40),
new Color(255,108,51),
new Color(229,229,223),
new Color(167,120,51),
};
}
 
public ChartDrawingSupplier() {
 
}
 
public ChartDrawingSupplier(Paint[] paintSequence) {
this.paintSequence = paintSequence;
}
 
@Override
public Paint getNextPaint() {
Paint result
= paintSequence[paintIndex % paintSequence.length];
paintIndex++;
return result;
}
 
 
@Override
public Paint getNextFillPaint() {
Paint result
= paintSequence[fillPaintIndex % paintSequence.length];
fillPaintIndex++;
return result;
}
}
 
 
private static class CustomToolTipGenerator implements CategoryToolTipGenerator {
CategoryDataset dataset;
java.util.List categories;
 
public CustomToolTipGenerator(CategoryDataset dataset, java.util.List categories) {
this.dataset = dataset;
this.categories = categories;
}
 
@Override
public String generateToolTip(CategoryDataset arg0, int arg1, int arg2) {
String categoryName = (String) categories.get(arg2);
return categoryName + " = " + arg0.getValue(arg1, arg2);
}
}
 
static DecimalFormat df2 = new DecimalFormat("#.##");
static DecimalFormat df1 = new DecimalFormat("#.#");
public static double getPercentagem(int parcela, int total)
{
if(total == 0)
return 0;
return 100.0 * ((double)((double)parcela/(double)total));
}
 
public static double getPercentagem(double parcela, int total)
{
if(total == 0)
return 0;
return 100.0 * ((double)(parcela/(double)total));
}
 
public static String getPercentagemPrint0Slots(double parcela, int total)
{
double percent = getPercentagem(parcela,total);
return "" + (int) percent;
}
public static String getPercentagemPrint2Slots(double parcela, int total)
{
double percent = getPercentagem(parcela,total);
return df2.format(percent);
}
public static String getPercentagemPrint2Slots(int parcela, int total)
{
double percent = getPercentagem(parcela,total);
return df2.format(percent);
}
 
public static String getPercentagemPrint1Slots(int parcela, int total)
{
double percent = getPercentagem(parcela,total);
return df1.format(percent);
}
 
 
 
 
public static String createBarChartTwoBars(String name1, String name2,final Color color1, final Color color2, double value1, double value2, double max, String pathTemplate) throws IOException
{
 
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
DefaultValueDataset a = new DefaultValueDataset();
 
categoryDataset.addValue(value1,"Valor",name1);
categoryDataset.addValue(value2,"Valor",name2);
 
 
JFreeChart chart = ChartFactory.createBarChart(null, null, null, categoryDataset, PlotOrientation.HORIZONTAL, false, true, false);
chart.setAntiAlias(true);
chart.setTextAntiAlias(true);
chart.setBackgroundPaint(TRANSPARENT);
CategoryPlot barChartPlot = (CategoryPlot) chart.getPlot();
 
 
barChartPlot.setDrawingSupplier(new ChartBuilderUtil.ChartDrawingSupplier());
barChartPlot.setBackgroundPaint(TRANSPARENT);
barChartPlot.setOutlineVisible(false);
barChartPlot.setRenderer(new BarRenderer() {
@Override
public Paint getItemPaint(int row, int col) {
switch (col) {
case 0:
return color1;
case 1:
return color2;
default:
return NEUTRAL_TOTAL;
}
 
}
 
public Paint getItemLabelPaint(int row, int col) {
switch (col) {
case 0:
return Color.black;
case 1:
return Color.black;
default:
return Color.white;
}
}
}
);
 
barChartPlot.getRangeAxis().setUpperMargin(0.3);
barChartPlot.getRangeAxis().setRange(0,7);
barChartPlot.getRangeAxis().setVisible(false);
 
(((CategoryPlot) chart.getPlot()).getRangeAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 55));
(((CategoryPlot) chart.getPlot()).getDomainAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 55));
((BarRenderer)((CategoryPlot) chart.getPlot()).getRenderer()).setBaseLegendTextFont(new Font(
"Helvetica", Font.BOLD, 55));
((CategoryPlot) chart.getPlot()).getRenderer().setBaseItemLabelFont(new Font(
"Helvetica", Font.PLAIN, 55));
DecimalFormat dfKey = new DecimalFormat("#.##");
barChartPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",dfKey));
 
((BarRenderer)barChartPlot.getRenderer()).setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE3, TextAnchor.CENTER_LEFT));
((BarRenderer)barChartPlot.getRenderer()).setShadowVisible(false);
barChartPlot.getRenderer().setBaseItemLabelsVisible(true);
barChartPlot.getRenderer().setItemLabelsVisible(true);
//((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1.0);
((BarRenderer)barChartPlot.getRenderer()).setItemMargin(0.7);
((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(0.5);
((BarRenderer)barChartPlot.getRenderer()).setMinimumBarLength(5);
((BarRenderer)barChartPlot.getRenderer()).setItemLabelPaint(null);
// add settings for individual series...
 
//PINTAR LETRAS DAS LABELS POR CATGORIA SE FOR APENAS UMA CATEGORIA PINTA TUDO IGUAL com red
//((BarRenderer)barChartPlot.getRenderer()).setSeriesItemLabelPaint(0, Color.red);
//((BarRenderer)barChartPlot.getRenderer()) .setSeriesItemLabelPaint(1, Color.green);
//((BarRenderer)barChartPlot.getRenderer()) .setSeriesItemLabelPaint(1, Color.blue);
 
//((BarRenderer)barChartPlot.getRenderer()).set;
 
 
//chart2.getCategoryPlot().getRangeAxis().setLabelInsets(new RectangleInsets(UnitType.ABSOLUTE, 0, 0, 25, 25));
 
 
 
 
BufferedImage image = chart.createBufferedImage( 300*4, 150*4);
String pathGraficoRespostas = Globals.TMP_DIR + File.separator + pathTemplate + "twoBars.png";
//String pathGraficoRespostas = "/Volumes/Home/jorgemachado/Desktop/graficoRespostas.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoRespostas));
 
return pathGraficoRespostas;
 
}
 
 
public static void main(String[] args) throws IOException
{
//createTimeSeries();
/* for(int i = 1; i < 100;i++)
{
createChartRingOneDimension(i, 100, true, true,true,"ring" + i);
}
 
createBarChartTwoBars("Docente","Curso",COLOR_SECTION_BLUE_DARK, COLOR_SECTION_GREEN,4.2,3.8,5,"mediaDoc");*/
 
String[] categories = new String[]{"Engenharia do Software","Teoria da Computação","Analise e Concepção de Sistemas","Programação WEB com Bases de Dados"};
String[] series = new String[]{"Média Docente","Média Unidade"};
Color[] colors = new Color[]{COLOR_SECTION_BLUE_DARK,COLOR_SECTION_BLUE};
Color[] colorsLabels = new Color[]{Color.black,Color.black};
double[][] values = new double[][]{
new double[]{4.6,4.2},
new double[]{3.4,3.5},
new double[]{4.2,3.8},
new double[]{4.5,5.0},
};
createBarChartBarsCategories(series,categories,colors,colorsLabels,values,0,5,"testeBarras",300,40);
}
 
/**
*
* @param series valores a considerar, exemplo Media Docente, Media Unidade
* @param categories objectos a considerar exemplo Cadeiras
* @param seriesColors cores das series nas series
* @param seriesLabelColors cores das letras nas series
* @param values matrix de valores exemplo double[10][2] para dois valores em 10 objectos
* @param min minimo da escala
* @param max máximo da escala
* @param pathTemplate caminho prefixo para o grafico gerado
* @return devolve caminho final do grafico gerado
* @throws IOException
*/
public static String createBarChartBarsCategories(String[]series, String[] categories,final Color[] seriesColors,final Color[] seriesLabelColors,double[][] values, double min, double max, String pathTemplate,int width,int heightPerCategory) throws IOException
{
 
//Exemplo Series são as unidades
//categorias é a media docente, media unidade, media curso
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
 
for(int s = 0; s< series.length; s++)
{
String serie = series[s];
for(int c = 0; c< categories.length; c++)
{
String category = categories[c];
double value = values[c][s];
categoryDataset.addValue(value,serie,category);
}
}
 
JFreeChart chart = ChartFactory.createBarChart(null, null, null, categoryDataset, PlotOrientation.HORIZONTAL, true, true, false);
chart.setAntiAlias(true);
chart.setTextAntiAlias(true);
chart.setBackgroundPaint(TRANSPARENT);
CategoryPlot barChartPlot = (CategoryPlot) chart.getPlot();
 
 
 
 
 
//PARA BATER CERTO TEMOS DE DAR AS CORES EM DOIS SITIOS, AQUI E NO METODO DO RENDER
barChartPlot.setDrawingSupplier(new ChartBuilderUtil.ChartDrawingSupplier(
seriesColors
));
 
 
barChartPlot.setBackgroundPaint(TRANSPARENT);
barChartPlot.setOutlineVisible(false);
barChartPlot.setRenderer(new BarRenderer() {
@Override
public Paint getItemPaint(int row, int col) {
return seriesColors[row];
}
 
public Paint getItemLabelPaint(int row, int col) {
return seriesLabelColors[row];
}
}
);
((BarRenderer)barChartPlot.getRenderer()).setLegendShape(0,new Rectangle(60,60));
((BarRenderer)barChartPlot.getRenderer()).setLegendShape(1,new Rectangle(60,60));
 
 
barChartPlot.getDomainAxis().setMaximumCategoryLabelLines(2);
barChartPlot.getRangeAxis().setUpperMargin(0.15);
barChartPlot.getRangeAxis().setRange(min, max);
barChartPlot.getRangeAxis().setVisible(false);
 
 
DecimalFormat dfKey = new DecimalFormat("#.##");
barChartPlot.getRenderer().setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",dfKey));
(((CategoryPlot) chart.getPlot()).getRangeAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 65));
(((CategoryPlot) chart.getPlot()).getDomainAxis()).setTickLabelFont(new Font(
"Helvetica", Font.PLAIN, 60));
((BarRenderer)((CategoryPlot) chart.getPlot()).getRenderer()).setBaseLegendTextFont(new Font(
"Helvetica", Font.BOLD, 60));
((CategoryPlot) chart.getPlot()).getRenderer().setBaseItemLabelFont(new Font(
"Helvetica", Font.PLAIN, 60));
((BarRenderer)barChartPlot.getRenderer()).setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE3, TextAnchor.CENTER_RIGHT));
((BarRenderer)barChartPlot.getRenderer()).setShadowVisible(false);
barChartPlot.getRenderer().setBaseItemLabelsVisible(true);
barChartPlot.getRenderer().setBaseSeriesVisible(true);
barChartPlot.getRenderer().setItemLabelsVisible(true);
//((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(1.0);
((BarRenderer)barChartPlot.getRenderer()).setItemMargin(0);
((BarRenderer)barChartPlot.getRenderer()).setMaximumBarWidth(0.5);
((BarRenderer)barChartPlot.getRenderer()).setMinimumBarLength(5);
((BarRenderer)barChartPlot.getRenderer()).setItemLabelPaint(null);
 
 
BufferedImage image = chart.createBufferedImage( width*8, categories.length * heightPerCategory * 8);
String pathGraficoRespostas = Globals.TMP_DIR + File.separator + pathTemplate + "categoriesBars.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoRespostas));
return pathGraficoRespostas;
 
}
 
public static String getBackgroundColorDiff(double diff)
{
if(diff > 0)
{
if(diff < 1.0)
return COLOR_4_HEX;
else
return COLOR_5_HEX;
}
else {
if(diff > -1.0)
return COLOR_3_HEX;
else if(diff > -2.0)
return COLOR_2_HEX;
else
return COLOR_1_HEX;
}
}
 
public static int getGreenComponentGradient(double percentageDecimal)
{
return (int) (255.0*(percentageDecimal*2));
}
public static int getRedComponentGradient(double percentageDecimal)
{//Tirando um numero onde esta 1 e metendo 1 estamos a aprocimar o amarelo mais depressa
return (int)( 1 + (255.0-1.0)*(-(((percentageDecimal -0.5)*(percentageDecimal -0.5))*4.0)+1.0));
}
public static String createChartRingOneDimension(double value, double max,boolean colorsPercent,boolean degrade,boolean putPercentInCenter, String pathTemplate) throws IOException {
 
DefaultPieDataset data = new DefaultPieDataset();
 
 
Number n;
 
data.setValue("A", value);
data.setValue("B", max-value);
 
 
 
 
JFreeChart chart = ChartFactory.createRingChart(null, data, false, false, false);
chart.setBackgroundPaint(TRANSPARENT);
 
RingPlot plot = (RingPlot) chart.getPlot();
 
 
//plot.setLabelBackgroundPaint(new Color(255, 249, 235));
//plot.setLabelPaint(new Color(88, 88, 90));
plot.setLabelGenerator(null);
plot.setDrawingSupplier(new ChartDrawingSupplier());
//CategoryItemRenderer render = chart.getCategoryPlot().getRenderer();
//render.setSeriesPaint(0,new Color(255,201,92));
plot.setBackgroundPaint(TRANSPARENT);
plot.setOutlineVisible(false);
plot.setSectionDepth(0.12);
if(degrade)
{
double percent = (value/max);
if(percent < 0.5)
{
plot.setSectionPaint("A", new Color(255,getGreenComponentGradient(percent), 0));
}
else
{
//plot.setSectionPaint("A", new Color((int) (255.0*((1.0-percent)*2)), 255, 0));
plot.setSectionPaint("A", new Color((int) getRedComponentGradient(percent), 255, 0));
}
 
}
else if(colorsPercent)
{
double fraction = max / 5.0;
if(value < fraction)
plot.setSectionPaint("A", COLOR_1);
else if(value < fraction*2)
plot.setSectionPaint("A", COLOR_2);
else if(value < fraction*3)
plot.setSectionPaint("A", COLOR_3);
else if(value < fraction*4)
plot.setSectionPaint("A", COLOR_4);
else
plot.setSectionPaint("A", COLOR_5);
}
else
plot.setSectionPaint("A", new Color(113, 154, 181));
plot.setSectionPaint("B", new Color(100, 100, 100));
 
plot.setCenterTextMode(CenterTextMode.FIXED);
plot.setCenterText("" + df1.format(value) + (putPercentInCenter?" %":""));
plot.setCenterTextColor(Color.black);
plot.setCenterTextFont(new Font(Font.SANS_SERIF, Font.BOLD, 100));
 
 
BufferedImage image = chart.createBufferedImage( 300*2, 300*2);
String pathRing = Globals.TMP_DIR + File.separator + pathTemplate + "Ring.png";
ImageIO.write(image, "png", new FileOutputStream(pathRing));
return pathRing;
}
 
public static String createTimeSeriesDiffArea(String tmpName,String serie1Name,String serie2Name,java.util.List<Object[]> series1,java.util.List<Object[]> series2) throws IOException
{
final XYDataset dataset = createDataset(serie1Name, serie2Name, series1, series2);
final JFreeChart chart = createChart(dataset);
BufferedImage image = chart.createBufferedImage( 600*4, 400*4);
String path = Globals.TMP_DIR + File.separator + tmpName + "timeSeries.png";
ImageIO.write(image, "png", new FileOutputStream(path));
return path;
}
 
private static JFreeChart createChart(final XYDataset dataset) {
 
final JFreeChart chart = ChartFactory.createTimeSeriesChart(
"",
"",
"",
dataset,
true,
false,
false
);
 
chart.setBackgroundPaint(Color.white);//light gray
 
final XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.lightGray);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(false);
 
//plot.setRenderer(0, new XYDifferenceRenderer(GREEN_OK,COLOR_3,true));
plot.setRenderer(0, new XYLineAndShapeRenderer(true,true));
plot.setRenderer(1, new XYLineAndShapeRenderer(true,true));
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
 
//renderer.setLegendShape(0,new Rectangle(60,60));
//renderer.setLegendShape(1,new Rectangle(60,60));
renderer.setBaseLegendTextFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 80));
 
renderer.setBaseItemLabelsVisible(true);
renderer.setItemLabelsVisible(true);
 
renderer.setSeriesPaint(0,COLOR_SECTION_BLUE_DARK);
renderer.setSeriesPaint(1,NEUTRAL_TOTAL);
renderer.setSeriesStroke(0,new BasicStroke(20.0f));
renderer.setSeriesStroke(1,new BasicStroke(20.0f));
 
 
DecimalFormat dfKey = new DecimalFormat("#.##");
 
StandardXYItemLabelGenerator labelGenerator = new StandardXYItemLabelGenerator("{2}", dfKey, dfKey);
 
/*
* {0} - label would be equal to Series expression,
* {1} - label would be equal to Category expression,
* {2} - label would be equal to Value expression
*
*/
 
 
 
renderer.setBaseItemLabelsVisible(true);
 
renderer.setBaseItemLabelGenerator(labelGenerator);
 
renderer.setBaseItemLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 70));
plot.getDomainAxis().setLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 70));
plot.getDomainAxis().setTickLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 70));
plot.getRangeAxis().setLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 80));
plot.getRangeAxis().setTickLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 80));
 
//plot.getRangeAxis().setUpperMargin(0.10);
plot.getDomainAxis().setUpperMargin(0.05);
plot.getDomainAxis().setLowerMargin(0.05);
/*
renderer.setSeriesPositiveItemLabelPosition(0,
new ItemLabelPosition(ItemLabelAnchor.OUTSIDE3,
TextAnchor.BOTTOM_LEFT,
TextAnchor.BOTTOM_LEFT,
Math.PI));*/
renderer.setSeriesShape(0, ShapeUtilities.createDiamond(20F));
 
DateAxis dateaxis = (DateAxis) plot.getDomainAxis();
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.MONTH,1,new SimpleDateFormat("dd-MMM")));
 
//plot.setRenderer(1,new XYLineAndShapeRenderer());
 
/*final XYItemRenderer xyitemrenderer = plot.getRenderer();
if (xyitemrenderer instanceof XYLineAndShapeRenderer) {
final XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) xyitemrenderer;
renderer.setBaseShapesFilled(true);
renderer.setBaseShapesVisible(true);
renderer.setShapesVisible( true );
renderer.setDrawOutlines( true );
 
//sets the joint level size means the dot size which join two points on a graph 2f,3f
Stroke stroke = new BasicStroke(
3f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);
renderer.setBaseOutlineStroke(stroke);
 
}*/
 
 
final DateAxis xaxis = (DateAxis) plot.getDomainAxis();
//Change domain axis lable by 180/4=45 degree
//xaxis.setLabelAngle(Math.PI / 4.0);
 
//Sets the Tick Labels means domain value labels by 90 degree
xaxis.setVerticalTickLabels(true);
 
 
//Try to play with it. It will work only in case of horizontal tick mark
 
xaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
 
//set date format
xaxis.setDateFormatOverride(new SimpleDateFormat("MM-yy"));
 
final NumberAxis yaxis = (NumberAxis) plot.getRangeAxis();
yaxis.setTickLabelsVisible(true);
yaxis.setVisible(true);
//yaxis.setRange(0,5);
yaxis.setUpperMargin(0.15);
//To set range values integer only. Default are float
//yaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
 
return chart;
 
}
 
private static XYDataset createDataset(String series1Name, String series2Name, java.util.List<Object[]> series1, java.util.List<Object[]> series2)
{
final TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.setDomainIsPointsInTime(true);
 
 
final TimeSeries s1 = new TimeSeries(series1Name, Day.class);
final TimeSeries s2 = new TimeSeries(series2Name, Day.class);
 
if(series1.size() == 1 && series2.size() == 1)
{
Date firstDate1 = (Date) series1.get(0)[1];
Date firstDate2 = (Date) series2.get(0)[1];
 
long threeMonthsMilis = (long) (60000.0*60.0*24.0*30.0*1.5);
if(firstDate1.getTime() < firstDate2.getTime())
firstDate1 = new Date(firstDate1.getTime() - threeMonthsMilis);
else
firstDate1 = new Date(firstDate2.getTime() - threeMonthsMilis);
 
s1.add(new Day(firstDate1), (Double) series1.get(0)[0]);
s2.add(new Day(firstDate1), (Double) series1.get(0)[0]);
 
}
 
for (Object[] timeValue : series1) {
s1.add(new Day((Date) timeValue[1]), (Double) timeValue[0]);
}
 
 
for (Object[] timeValue : series2) {
s2.add(new Day((Date) timeValue[1]), (Double) timeValue[0]);
}
 
 
 
dataset.addSeries(s1);
dataset.addSeries(s2);
return dataset;
}
 
/**
*
* @param series1Name
* @param series2Name
* @param series1 List<Integer count,Integer week Integer year>
* @param series2 List<Integer count,Integer week, Integer year>
* @return
*/
private static XYDataset createWeekDataset(String series1Name, String series2Name, java.util.List<Object[]> series1, java.util.List<Object[]> series2)
{
final TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.setDomainIsPointsInTime(true);
 
 
final TimeSeries s1 = new TimeSeries(series1Name, Week.class);
final TimeSeries s2 = new TimeSeries(series2Name, Week.class);
 
for (Object[] timeValue : series1) {
s1.add(new Week((Integer)timeValue[1],(Integer)timeValue[2]),(Long) timeValue[0]);
}
for (Object[] timeValue : series2) {
s2.add(new Week((Integer)timeValue[1],(Integer)timeValue[2]),(Long) timeValue[0]);
}
dataset.addSeries(s1);
dataset.addSeries(s2);
return dataset;
}
 
 
 
/**
*
* @param series1Name
* @param series1 List<Integer count,Integer week Integer year>
* @return
*/
private static XYDataset createWeekDatasetDiffPercent(String series1Name,String seriesName2, java.util.List<Object[]> series1,int totalAAtingir)
{
final TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.setDomainIsPointsInTime(true);
 
 
final TimeSeries s1 = new TimeSeries(series1Name, Week.class);
final TimeSeries s2 = new TimeSeries(seriesName2, Week.class);
 
for (Object[] timeValue : series1) {
s1.add(new Week((Integer)timeValue[1],(Integer)timeValue[2]),(Long) timeValue[0]);
}
for (Object[] timeValue : series1) {
s2.add(new Week((Integer)timeValue[1],(Integer)timeValue[2]),totalAAtingir - (Long) timeValue[0]);
}
dataset.addSeries(s1);
dataset.addSeries(s2);
return dataset;
}
public static String createTimeSeriesCursoRepostas(String tmpName,String nomeCurso,String nomeEscola,java.util.List<Object[]> series1,java.util.List<Object[]> series2) throws IOException {
XYDataset dataset = createWeekDataset(nomeCurso,nomeEscola,series1,series2);
return createTimeSeriesLines("Nº Respostas","",dataset,tmpName,nomeCurso,nomeEscola,series1,series2);
 
}
 
public static String createTimeSeriesLines(String vtitle,String timetitle, XYDataset dataset,String tmpName,String serie1Name,String serie2Name,java.util.List<Object[]> series1,java.util.List<Object[]> series2) throws IOException
{
 
final JFreeChart chart = ChartFactory.createTimeSeriesChart(
"",
timetitle,
vtitle,
dataset,
true,
false,
false
);
 
chart.setBackgroundPaint(Color.white);//light gray
 
final XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.lightGray);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(false);
 
plot.setRenderer(0, new XYDifferenceRenderer(GREEN_OK,COLOR_3,true));
plot.setRenderer(0, new XYLineAndShapeRenderer(true,true));
plot.setRenderer(1, new XYLineAndShapeRenderer(true,true));
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
 
//renderer.setLegendShape(0,new Rectangle(60,60));
//renderer.setLegendShape(1,new Rectangle(60,60));
renderer.setBaseLegendTextFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 80));
 
renderer.setBaseItemLabelsVisible(true);
renderer.setItemLabelsVisible(true);
 
renderer.setSeriesPaint(0,COLOR_SECTION_BLUE_DARK);
renderer.setSeriesPaint(1,NEUTRAL_TOTAL);
renderer.setSeriesStroke(0,new BasicStroke(20.0f));
renderer.setSeriesStroke(1,new BasicStroke(20.0f));
 
 
DecimalFormat dfKey = new DecimalFormat("#.##");
 
StandardXYItemLabelGenerator labelGenerator = new StandardXYItemLabelGenerator("{2}", dfKey, dfKey);
 
renderer.setBaseItemLabelsVisible(true);
 
renderer.setBaseItemLabelGenerator(labelGenerator);
 
renderer.setBaseItemLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 70));
plot.getDomainAxis().setLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 70));
plot.getDomainAxis().setTickLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 70));
plot.getRangeAxis().setLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 80));
plot.getRangeAxis().setTickLabelFont(new java.awt.Font("Helvetica", java.awt.Font.PLAIN, 80));
 
plot.getDomainAxis().setUpperMargin(0.05);
plot.getDomainAxis().setLowerMargin(0.05);
 
renderer.setSeriesShape(0, ShapeUtilities.createDownTriangle(20F));
renderer.setSeriesShape(1, ShapeUtilities.createDiamond(30F));
 
DateAxis dateaxis = (DateAxis) plot.getDomainAxis();
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.MONTH,1,new SimpleDateFormat("dd-MMM")));
 
final DateAxis xaxis = (DateAxis) plot.getDomainAxis();
xaxis.setVerticalTickLabels(true);
 
xaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
 
//set date format
xaxis.setDateFormatOverride(new SimpleDateFormat("dd-MMM-yy"));
 
final NumberAxis yaxis = (NumberAxis) plot.getRangeAxis();
yaxis.setTickLabelsVisible(true);
yaxis.setVisible(true);
//yaxis.setRange(0,5);
yaxis.setUpperMargin(0.15);
 
 
BufferedImage image = chart.createBufferedImage( 800*4, 400*4);
String path = Globals.TMP_DIR + File.separator + tmpName + "timeSeries.png";
ImageIO.write(image, "png", new FileOutputStream(path));
return path;
}
 
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/ChartTemp.java
New file
0,0 → 1,28
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class ChartTemp implements Serializable{
 
 
public ChartTemp() {
}
 
String tempFile;
 
public ChartTemp(String tempFile) {
this.tempFile = tempFile;
}
 
public String getTempFile() {
return tempFile;
}
 
public void setTempFile(String tempFile) {
this.tempFile = tempFile;
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/UnidadeStats.java
New file
0,0 → 1,305
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class UnidadeStats implements Serializable
{
String nomeUnidade;
String codigoUnidade;
String codigoCurso;
String nomeCurso;
String codigoEscola;
String nomeEscola;
String semestre;
int inscritos;
int respostas;
 
 
 
UnidadeStatsGrupo unidadeStatsGrupoDocente;
UnidadeStatsGrupo unidadeStatsGrupoUnidade;
UnidadeStatsGrupo unidadeStatsGrupoDrelDocenteAluno;
UnidadeStatsGrupo unidadeStatsGrupoDdocenteProf;
 
UnidadeStatsGrupo unidadeStatsGrupoSalas;
UnidadeStatsGrupo unidadeStatsGrupoEstagio;
UnidadeStatsGrupo unidadeStatsGrupoPraticaEnsinoClinico;
 
public String getTaxaRespostaPrint0Slots()
{
return ChartBuilderUtil.getPercentagemPrint0Slots(respostas,inscritos);
}
 
public String getNomeCursoAbreviado()
{
String abreviatura = "";
String[] fields = nomeCurso.split(" ");
for(String field: fields)
{
if(field.trim().length() > 2)
{
abreviatura+=field.charAt(0);
}
}
return abreviatura.toUpperCase();
}
 
public UnidadeStatsGrupo findUnidadeStatsGrupo(String grupo,String subgrupo)
{
List<UnidadeStatsGrupo> unidadeStatsGrupos = new ArrayList<UnidadeStatsGrupo>();
Method[] methods = this.getClass().getMethods();
for(Method m:methods)
{
if(m.getName().startsWith("getUnidadeStatsGrupo"))
{
try {
UnidadeStatsGrupo unidadeStatsGrupo = (UnidadeStatsGrupo) m.invoke(this,null);
 
if(unidadeStatsGrupo != null)
{
boolean grupoOk = grupo == null;
if(grupo != null && unidadeStatsGrupo.getGrupo() != null && unidadeStatsGrupo.getGrupo().equals(grupo))
{
grupoOk = true;
}
if(!grupoOk)
continue;
boolean subGrupoOk = subgrupo == null;
if(subgrupo != null && unidadeStatsGrupo.getSubGrupo() != null && unidadeStatsGrupo.getSubGrupo().equals(subgrupo))
{
subGrupoOk = true;
}
if(subGrupoOk)
{
return unidadeStatsGrupo;
}
}
 
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
//Nao pode chegar aqui
throw new RuntimeException("UnidadeStats " + grupo + " - " + subgrupo + " nao existe ");
}
 
 
public UnidadeStatsGrupo getUnidadeStatsGrupoSalas() {
return unidadeStatsGrupoSalas;
}
 
public void setUnidadeStatsGrupoSalas(UnidadeStatsGrupo unidadeStatsGrupoSalas) {
this.unidadeStatsGrupoSalas = unidadeStatsGrupoSalas;
}
 
public UnidadeStatsGrupo getUnidadeStatsGrupoEstagio() {
return unidadeStatsGrupoEstagio;
}
 
public void setUnidadeStatsGrupoEstagio(UnidadeStatsGrupo unidadeStatsGrupoEstagio) {
this.unidadeStatsGrupoEstagio = unidadeStatsGrupoEstagio;
}
 
public UnidadeStatsGrupo getUnidadeStatsGrupoPraticaEnsinoClinico() {
return unidadeStatsGrupoPraticaEnsinoClinico;
}
 
public void setUnidadeStatsGrupoPraticaEnsinoClinico(UnidadeStatsGrupo unidadeStatsGrupoPraticaEnsinoClinico) {
this.unidadeStatsGrupoPraticaEnsinoClinico = unidadeStatsGrupoPraticaEnsinoClinico;
}
 
public UnidadeStatsGrupo getUnidadeStatsGrupoDrelDocenteAluno() {
return unidadeStatsGrupoDrelDocenteAluno;
}
 
public void setUnidadeStatsGrupoDrelDocenteAluno(UnidadeStatsGrupo unidadeStatsGrupoDrelDocenteAluno) {
this.unidadeStatsGrupoDrelDocenteAluno = unidadeStatsGrupoDrelDocenteAluno;
}
 
public UnidadeStatsGrupo getUnidadeStatsGrupoDdocenteProf() {
return unidadeStatsGrupoDdocenteProf;
}
 
public void setUnidadeStatsGrupoDdocenteProf(UnidadeStatsGrupo unidadeStatsGrupoDdocenteProf) {
this.unidadeStatsGrupoDdocenteProf = unidadeStatsGrupoDdocenteProf;
}
 
public int getInscritos() {
return inscritos;
}
 
public void setInscritos(int inscritos) {
this.inscritos = inscritos;
}
 
public int getRespostas() {
return respostas;
}
 
public void setRespostas(int respostas) {
this.respostas = respostas;
}
 
public UnidadeStatsGrupo getUnidadeStatsGrupoDocente() {
return unidadeStatsGrupoDocente;
}
 
public void setUnidadeStatsGrupoDocente(UnidadeStatsGrupo unidadeStatsGrupoDocente) {
this.unidadeStatsGrupoDocente = unidadeStatsGrupoDocente;
}
 
public UnidadeStatsGrupo getUnidadeStatsGrupoUnidade() {
return unidadeStatsGrupoUnidade;
}
 
public void setUnidadeStatsGrupoUnidade(UnidadeStatsGrupo unidadeStatsGrupoUnidade) {
this.unidadeStatsGrupoUnidade = unidadeStatsGrupoUnidade;
}
 
public String getNomeUnidade() {
return nomeUnidade;
}
 
public String getNomeUnidadeComCursoAbreviado() {
return nomeUnidade + "(" + getNomeCursoAbreviado() + ")";
}
 
public void setNomeUnidade(String nomeUnidade) {
this.nomeUnidade = nomeUnidade;
}
 
public String getCodigoUnidade() {
return codigoUnidade;
}
 
public void setCodigoUnidade(String codigoUnidade) {
this.codigoUnidade = codigoUnidade;
}
 
public String getCodigoCurso() {
return codigoCurso;
}
 
public void setCodigoCurso(String codigoCurso) {
this.codigoCurso = codigoCurso;
}
 
public String getNomeCurso() {
return nomeCurso;
}
 
public void setNomeCurso(String nomeCurso) {
this.nomeCurso = nomeCurso;
}
 
public String getSemestre() {
return semestre;
}
 
public void setSemestre(String semestre) {
this.semestre = semestre;
}
 
public String getCodigoEscola() {
return codigoEscola;
}
 
public void setCodigoEscola(String codigoEscola) {
this.codigoEscola = codigoEscola;
}
 
public String getNomeEscola() {
return nomeEscola;
}
 
public void setNomeEscola(String nomeEscola) {
this.nomeEscola = nomeEscola;
}
 
public static class UnidadeStatsGrupo implements Serializable
{
public String grupo;
public String subGrupo;
public DataTable respostasTable;
public MediasGrupo mediasGrupo;
public int unidadesNoCurso;
public int unidadesNaEscola;
 
//criadas no metodo DocenteReportGenerator call UnidadesQueryDao.criarTabelasCadeirasDocente
// >>>UnidadeQueryDao.criarTabelasRespostasCadeira
private ArrayList<PerguntaStats> perguntasStats = new ArrayList<PerguntaStats>();
 
 
public int getUnidadesNoCurso() {
return unidadesNoCurso;
}
 
public void setUnidadesNoCurso(int unidadesNoCurso) {
this.unidadesNoCurso = unidadesNoCurso;
}
 
public int getUnidadesNaEscola() {
return unidadesNaEscola;
}
 
public void setUnidadesNaEscola(int unidadesNaEscola) {
this.unidadesNaEscola = unidadesNaEscola;
}
 
public UnidadeStatsGrupo(String grupo,String subGrupo) {
this.grupo = grupo;
this.subGrupo = subGrupo;
mediasGrupo = new MediasGrupo(grupo,subGrupo);
}
 
public String getSubGrupo() {
return subGrupo;
}
 
public void setSubGrupo(String subGrupo) {
this.subGrupo = subGrupo;
}
 
public String getGrupo() {
return grupo;
}
 
public void setGrupo(String grupo) {
this.grupo = grupo;
}
 
public ArrayList<PerguntaStats> getPerguntasStats() {
return perguntasStats;
}
 
public void setPerguntasStats(ArrayList<PerguntaStats> perguntasStats) {
this.perguntasStats = perguntasStats;
}
 
public DataTable getRespostasTable() {
return respostasTable;
}
 
public void setRespostasTable(DataTable respostasTable) {
this.respostasTable = respostasTable;
}
 
public MediasGrupo getMediasGrupo() {
return mediasGrupo;
}
 
public void setMediasGrupo(MediasGrupo mediasGrupo) {
this.mediasGrupo = mediasGrupo;
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/fundoDispersao.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/ChartTable.java
New file
0,0 → 1,57
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.io.Serializable;
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class ChartTable implements Serializable{
 
public static int NUMBER_CHARTS_ROW = 3;
 
ArrayList<ChartsRow> chartsRow = new ArrayList<ChartsRow>();
 
/*public List<PerguntaStats> generateCompleteListPerguntas()
{
List<PerguntaStats> perguntas = new ArrayList<PerguntaStats>();
for(ChartsRow row: chartsRow)
{
for(PerguntaStats p : row.getPerguntaStats())
perguntas.add(p);
}
return perguntas;
}*/
 
public void addChart(PerguntaStats chart)
{
if(chartsRow.size() == 0 || chartsRow.get(chartsRow.size() - 1).getPerguntaStats().size() >= NUMBER_CHARTS_ROW)
{
chartsRow.add(new ChartsRow());
}
chartsRow.get(chartsRow.size() - 1).getPerguntaStats().add(chart);
}
 
public ArrayList<ChartsRow> getChartsRow() {
return chartsRow;
}
 
public void setChartsRow(ArrayList<ChartsRow> chartsRow) {
this.chartsRow = chartsRow;
}
 
public static class ChartsRow implements Serializable
{
ArrayList<PerguntaStats> perguntaStats = new ArrayList<PerguntaStats>();
 
public ArrayList<PerguntaStats> getPerguntaStats() {
return perguntaStats;
}
 
public void setPerguntaStats(ArrayList<PerguntaStats> perguntaStats) {
this.perguntaStats = perguntaStats;
}
}
}
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/CursoStats.java
New file
0,0 → 1,204
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.PerguntasGrupoQueryDao;
 
import java.io.Serializable;
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 15/12/16.
*/
public class CursoStats implements Serializable
{
String nomeCurso;
String codigoCurso;
String nomeInstituicao;
String codigoInstituicao;
String codigoNacionalInstituicao;
String abreviaturaInstituicao;
 
 
 
 
int inscritos;
int responderam;
int questionarios;
int respostas;
 
int docentesDoCurso;
int docentesDaEscola;
int unidadesDoCurso;
int unidadesDaEscola;
 
RespostasAgregadasGrupoStats respostasAgregadasGrupoUnidade = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,null);
RespostasAgregadasGrupoStats respostasAgregadasGrupoDocente = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,null);
RespostasAgregadasGrupoStats respostasAgregadasGrupoSalas = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS,null);
RespostasAgregadasGrupoStats respostasAgregadasGrupoEstagio = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_ESTAGIO_CODE_PERGUNTAS,null);
RespostasAgregadasGrupoStats respostasAgregadasGrupoPraticaEnsinoClinico = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_ENSINO_CLINICO_CODE_PERGUNTAS,null);
 
public ArrayList<UnidadeStats> unidadesStats = new ArrayList<UnidadeStats>();
 
 
public int getUnidadesDoCurso() {
return unidadesDoCurso;
}
 
public void setUnidadesDoCurso(int unidadesDoCurso) {
this.unidadesDoCurso = unidadesDoCurso;
}
 
public int getUnidadesDaEscola() {
return unidadesDaEscola;
}
 
public void setUnidadesDaEscola(int unidadesDaEscola) {
this.unidadesDaEscola = unidadesDaEscola;
}
 
public int getDocentesDoCurso() {
return docentesDoCurso;
}
 
public void setDocentesDoCurso(int docentesDoCurso) {
this.docentesDoCurso = docentesDoCurso;
}
 
public int getDocentesDaEscola() {
return docentesDaEscola;
}
 
public void setDocentesDaEscola(int docentesDaEscola) {
this.docentesDaEscola = docentesDaEscola;
}
 
 
 
public String getAbreviaturaInstituicao() {
return abreviaturaInstituicao;
}
 
public void setAbreviaturaInstituicao(String abreviaturaInstituicao) {
this.abreviaturaInstituicao = abreviaturaInstituicao;
}
 
public String getCodigoNacionalInstituicao() {
return codigoNacionalInstituicao;
}
 
public void setCodigoNacionalInstituicao(String codigoNacionalInstituicao) {
this.codigoNacionalInstituicao = codigoNacionalInstituicao;
}
 
public String getNomeCurso()
{
return nomeCurso;
}
 
public void setNomeCurso(String nomeCurso) {
this.nomeCurso = nomeCurso;
}
 
public String getCodigoCurso() {
return codigoCurso;
}
 
public void setCodigoCurso(String codigoCurso) {
this.codigoCurso = codigoCurso;
}
 
public String getNomeInstituicao() {
return nomeInstituicao;
}
 
public void setNomeInstituicao(String nomeInstituicao) {
this.nomeInstituicao = nomeInstituicao;
}
 
public String getCodigoInstituicao() {
return codigoInstituicao;
}
 
public void setCodigoInstituicao(String codigoInstituicao) {
this.codigoInstituicao = codigoInstituicao;
}
 
public int getInscritos() {
return inscritos;
}
 
public void setInscritos(int inscritos) {
this.inscritos = inscritos;
}
 
public int getResponderam() {
return responderam;
}
 
public void setResponderam(int responderam) {
this.responderam = responderam;
}
 
public int getQuestionarios() {
return questionarios;
}
 
public void setQuestionarios(int questionarios) {
this.questionarios = questionarios;
}
 
public int getRespostas() {
return respostas;
}
 
public void setRespostas(int respostas) {
this.respostas = respostas;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoUnidade() {
return respostasAgregadasGrupoUnidade;
}
 
public void setRespostasAgregadasGrupoUnidade(RespostasAgregadasGrupoStats respostasAgregadasGrupoUnidade) {
this.respostasAgregadasGrupoUnidade = respostasAgregadasGrupoUnidade;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoDocente() {
return respostasAgregadasGrupoDocente;
}
 
public void setRespostasAgregadasGrupoDocente(RespostasAgregadasGrupoStats respostasAgregadasGrupoDocente) {
this.respostasAgregadasGrupoDocente = respostasAgregadasGrupoDocente;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoSalas() {
return respostasAgregadasGrupoSalas;
}
 
public void setRespostasAgregadasGrupoSalas(RespostasAgregadasGrupoStats respostasAgregadasGrupoSalas) {
this.respostasAgregadasGrupoSalas = respostasAgregadasGrupoSalas;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoEstagio() {
return respostasAgregadasGrupoEstagio;
}
 
public void setRespostasAgregadasGrupoEstagio(RespostasAgregadasGrupoStats respostasAgregadasGrupoEstagio) {
this.respostasAgregadasGrupoEstagio = respostasAgregadasGrupoEstagio;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoPraticaEnsinoClinico() {
return respostasAgregadasGrupoPraticaEnsinoClinico;
}
 
public void setRespostasAgregadasGrupoPraticaEnsinoClinico(RespostasAgregadasGrupoStats respostasAgregadasGrupoPraticaEnsinoClinico) {
this.respostasAgregadasGrupoPraticaEnsinoClinico = respostasAgregadasGrupoPraticaEnsinoClinico;
}
 
public ArrayList<UnidadeStats> getUnidadesStats() {
return unidadesStats;
}
 
public void setUnidadesStats(ArrayList<UnidadeStats> unidadesStats) {
this.unidadesStats = unidadesStats;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/ReportUtils.java
New file
0,0 → 1,43
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import pt.estgp.estgweb.utils.ConfigProperties;
 
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 16/12/16.
*/
public class ReportUtils
{
public static ArrayList<String> getFormatedDegrees(String[] degrees) {
ArrayList<String> degreesList = new ArrayList<String>();
if(degrees != null)
{
for(String d: degrees)
degreesList.add(ConfigProperties.getProperty("course." + d));
}
return degreesList;
 
}
 
public static ArrayList<String> getFormatedSemestres(String[] periodos)
{
ArrayList<String> semestres = new ArrayList<String>();
if(periodos != null)
{
for(String p: periodos)
semestres.add(p);
}
return semestres;
}
 
 
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
 
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/utils/RespostasAgregadasGrupoStats.java
New file
0,0 → 1,129
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils;
 
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class RespostasAgregadasGrupoStats
{
 
String grupo;
String subGrupo;
 
public RespostasAgregadasChartTable respostasAgregadasChartTable = new RespostasAgregadasChartTable();
public RespostasAgregadasChartTable respostasAgregadasChartTable2Secs = new RespostasAgregadasChartTable();
 
//Apenas para as perguntas de tempoMinimo = 0
//criadas no metodo DocenteReportGenerator.criarGraficosRespostasAgregadas
private ArrayList<PerguntaStats> perguntasStats = new ArrayList<PerguntaStats>();
 
public MediasGrupo mediasGrupo;
 
public RespostasAgregadasGrupoStats(String grupo,String subGrupo) {
this.grupo = grupo;
this.subGrupo = subGrupo;
mediasGrupo = new MediasGrupo(grupo,subGrupo);
}
 
public String getSubGrupo() {
return subGrupo;
}
 
public void setSubGrupo(String subGrupo) {
this.subGrupo = subGrupo;
}
 
public String getGrupo() {
return grupo;
}
 
public void setGrupo(String grupo) {
this.grupo = grupo;
}
 
public ArrayList<PerguntaStats> getPerguntasStats() {
return perguntasStats;
}
 
public void setPerguntasStats(ArrayList<PerguntaStats> perguntasStats) {
this.perguntasStats = perguntasStats;
}
 
public RespostasAgregadasChartTable getRespostasAgregadasChartTable() {
return respostasAgregadasChartTable;
}
 
public void setRespostasAgregadasChartTable(RespostasAgregadasChartTable respostasAgregadasChartTable) {
this.respostasAgregadasChartTable = respostasAgregadasChartTable;
}
 
public RespostasAgregadasChartTable getRespostasAgregadasChartTable2Secs() {
return respostasAgregadasChartTable2Secs;
}
 
public void setRespostasAgregadasChartTable2Secs(RespostasAgregadasChartTable respostasAgregadasChartTable2Secs) {
this.respostasAgregadasChartTable2Secs = respostasAgregadasChartTable2Secs;
}
 
public MediasGrupo getMediasGrupo() {
return mediasGrupo;
}
 
public void setMediasGrupo(MediasGrupo mediasGrupo) {
this.mediasGrupo = mediasGrupo;
}
 
 
/*
public void addRespostasAgregadasChart(RespostasChart chart)
{
respostasAgregadasCharts.addChart(chart);
numeroPerguntaRespostasChart.put(chart.getNumero(),chart);
}
 
public void addRespostasAgregadasChartGt2Secs(RespostasChart chart)
{
respostasAgregadasChartsGt2Secs.addChart(chart);
}
 
public void addRespostasAgregadasUnidadesChartGt2Secs(RespostasChart chart)
{
respostasAgregadasUnidadesChartsGt2Secs.addChart(chart);
}
 
public void addRespostasAgregadasUnidadesChart(RespostasChart chart)
{
respostasAgregadasUnidadesCharts.addChart(chart);
}
 
*/
public static class RespostasAgregadasChartTable
{
public ChartTable respostasAgregadasCharts = new ChartTable();
 
public DataTable respostasTable;
 
/*public List<PerguntaStats> generateCompleteListPerguntas()
{
return respostasAgregadasCharts.generateCompleteListPerguntas();
}*/
 
public ChartTable getRespostasAgregadasCharts() {
return respostasAgregadasCharts;
}
 
public void setRespostasAgregadasCharts(ChartTable respostasAgregadasCharts) {
this.respostasAgregadasCharts = respostasAgregadasCharts;
}
 
public DataTable getRespostasTable() {
return respostasTable;
}
 
public void setRespostasTable(DataTable respostasTable) {
this.respostasTable = respostasTable;
}
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/DocenteReportGenerator.java
New file
0,0 → 1,817
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.PdfUtils;
import org.apache.fop.apps.FOPException;
import org.apache.log4j.Logger;
import org.dom4j.DocumentException;
import org.hibernate.Query;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.OlapStarFactQuestionarioAnswer;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
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.queries.*;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.*;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.*;
import java.util.List;
 
 
/**
* Created by jorgemachado on 05/11/16.
*/
public class DocenteReportGenerator extends ReportAlunosGenerator
{
 
 
 
 
private static final Logger logger = Logger.getLogger(DocenteReportGenerator.class);
 
public DocenteReportGenerator(String anoLectivo, String[] periodos, String[] degrees) {
super(anoLectivo, periodos, degrees);
 
}
 
 
public static void main(String[] args) throws IOException, DocumentException, TransformerException, FOPException
{
 
//String teacherCode = "44451";
//String teacherCode = "20122";
String teacherCode = "20128";
String anoLectivo = "201516";
//String[] periodos = new String[]{"S2","T3","T4","A"};
String[] periodos = new String[]{"S1"};
String[] degrees = new String[]{"L","M","T","E"};
new DocenteReportGenerator(anoLectivo,periodos,degrees).processTeacher(teacherCode);
 
//teacherCode = "20122";
 
//processTeacher(teacherCode,anoLectivo,periodos,degrees);
 
//teacherCode = "20051";
 
//processTeacher(teacherCode,anoLectivo,periodos,degrees);
 
//teacherCode = "66587";
 
//processTeacher(teacherCode,anoLectivo,periodos,degrees);
 
//teacherCode = "20114";
//processTeacher(teacherCode,anoLectivo,periodos,degrees);
}
public void processTeacher(String teacherCode) throws IOException, DocumentException, TransformerException, FOPException
{
 
 
//todo ver se ha ocorrencias de respostas do docente neste ano se não houver devolver questionario com info de nao haver resultados para este docente
DocenteReport docenteReport = getDocenteReport(teacherCode);
if(docenteReport == null)
{
serviceLogInfo(" Docente " + teacherCode + " nao tem respostas nestas condições ");
return;
}
 
ChartBuilderUtil.createChartTiposAlunos(docenteReport,"tiposAlunosTmp");
ChartBuilderUtil.createChartTaxaRespostas(docenteReport, "taxaRespostasTmp");
ChartBuilderUtil.createChartTaxaParticipacao(docenteReport, "taxaParticipacaoTmp");
ChartBuilderUtil.createChartUnidadesContribuicao(docenteReport,"unidadesContribuicao");
 
//DocenteReport.RespostasChart respostasChart = ChartBuilderUtil.createChartRespostasPergunta("A sua pontualidade", new int[]{2, 4, 5, 3, 1}, "pontualidadeTmp");
//docenteReport.getRespostasCharts().add(respostasChart);
 
 
String path = generatePdfReport(docenteReport);
 
}
 
private String generatePdfReport(DocenteReport docenteReport) throws DocumentException, TransformerException, IOException, FOPException
{
String path = Globals.TMP_DIR + File.separator + "reportDocente" + docenteReport.getNumeroDocente() + ".pdf";
 
FileOutputStream out = new FileOutputStream(path);
Map<String,Object> params = new HashMap<String,Object>();
params.put("site", Globals.SITE_URL);
params.put("updateDate", pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDate(new Date() ));
 
 
org.w3c.dom.Document dom2 = docenteReport.serialize();
Dom4jUtil.writeSout(dom2);
 
PdfUtils.setAuthority("Relatório de Avaliação Pedagógica - Relatório Docente - " +
docenteReport.getNomeDocente() + " (" + docenteReport.getNumeroDocente() + " ) " +
"- Ano letivo " + docenteReport.getAnoLectivo() + " - Periodos " + docenteReport.getSemestres().toString() + "" +
" Tipos de Curso - " + docenteReport.getDegrees().toString(),
docenteReport.getNomeDocente(), "Avaliação Pedagógica Docentes, Inqueritos aos Alunos");
PdfUtils.createPdfFromXml(new DOMSource(dom2), "pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/docenteReport.fo.xsl", out, params);
out.flush();
out.close();
return path;
}
 
 
private DocenteReport getDocenteReport(String teacherCode)
{
 
AbstractDao.getCurrentSession().beginTransaction();
 
User u = DaoFactory.getUserDaoImpl().loadBySigesCode(Integer.parseInt(teacherCode));
 
DocenteReport docenteReport = new DocenteReport();
 
docenteReport.setNomeDocente(u.getName());
docenteReport.setNumeroDocente(teacherCode);
docenteReport.setAnoLectivo(DatesUtils.getImportYearFormatted(anoLectivo));
docenteReport.setSemestres(ReportUtils.getFormatedSemestres(periodos));
docenteReport.setDegrees(ReportUtils.getFormatedDegrees(degrees));
 
AlunosQueryDao.countAlunosQueResponderamAoDocente(teacherCode, anoLectivo, docenteReport, periodos, degrees);
/*if(docenteReport.getInquiridosTotal() == 0 || docenteReport.getAlunosComResposta() == 0)
{
return null;
}*/
QuestionariosQueryDao.countQuestionariosRespostasAoDocente(teacherCode, anoLectivo, docenteReport, periodos, degrees);
AlunosQueryDao.countTiposAlunosComRespostasAoDocente(teacherCode, anoLectivo, docenteReport, periodos, degrees);
AlunosQueryDao.countIdadesAlunosComRespostasAoDocente(teacherCode, anoLectivo, docenteReport, periodos, degrees);
 
//TABELAS
QuestionariosQueryDao.createDataTableIdades(docenteReport, "Alunos");
QuestionariosQueryDao.createDataTableLocalidadesAoDocente(docenteReport, teacherCode, anoLectivo, periodos, degrees, "Alunos");
UnidadesQueryDao.createTableTaxaRespostaUnidadeAoDocente(docenteReport, teacherCode, anoLectivo, periodos, degrees);
 
 
List<String> codigosCurso = QueryDaoUtils.getCodigosCursoDocente(teacherCode, anoLectivo, periodos, degrees);
List<String> codigosEscola = QueryDaoUtils.getCodigosEscolaDocente(teacherCode, anoLectivo, periodos, degrees);
 
docenteReport.setDocentesNosCursos((int) QueryDaoUtils.countDocentesNosCursos(codigosCurso, anoLectivo, periodos, degrees));
docenteReport.setDocentesNasEscolas((int) QueryDaoUtils.countDocentesNasEscolas(codigosEscola, anoLectivo, periodos, degrees));
 
docenteReport.setUnidadesNosCursos((int) QueryDaoUtils.countUnidadesNosCursos(codigosCurso, anoLectivo, periodos, degrees));
docenteReport.setUnidadesNasEscolas((int) QueryDaoUtils.countUnidadesNasEscolas(codigosEscola, anoLectivo, periodos, degrees));
 
 
super.criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
0,
docenteReport.getRespostasAgregadasGrupoDocente().getRespostasAgregadasChartTable(),
docenteReport.getRespostasAgregadasGrupoDocente(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,null,
periodos,degrees,true);
 
criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
0,
docenteReport.getRespostasAgregadasGrupoDocente().getRespostasAgregadasChartTable(),
docenteReport.getRespostasAgregadasGrupoDocente(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,null,
periodos,degrees,true);
 
 
criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
2000,
docenteReport.getRespostasAgregadasGrupoDocente().getRespostasAgregadasChartTable2Secs(),
docenteReport.getRespostasAgregadasGrupoDocente(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,null,
periodos,degrees,false);
 
criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
0,
docenteReport.getRespostasAgregadasGrupoUnidade().getRespostasAgregadasChartTable(),
docenteReport.getRespostasAgregadasGrupoUnidade(),
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,null,
periodos,degrees,true);
 
criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
2000,
docenteReport.getRespostasAgregadasGrupoUnidade().getRespostasAgregadasChartTable2Secs(),
docenteReport.getRespostasAgregadasGrupoUnidade(),
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,null,
periodos,degrees,false);
 
criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
0,
docenteReport.getRespostasAgregadasGrupoDrelDocenteAluno().getRespostasAgregadasChartTable(),
docenteReport.getRespostasAgregadasGrupoDrelDocenteAluno(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS,periodos,degrees,true);
 
criarGraficosRespostasAgregadas(
new String[]{teacherCode},
EntityEvaluated.DOCENTE,
anoLectivo,
docenteReport,
codigosCurso,
codigosEscola,
0,
docenteReport.getRespostasAgregadasGrupoDdocenteProf().getRespostasAgregadasChartTable(),
docenteReport.getRespostasAgregadasGrupoDdocenteProf(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS,periodos,degrees,true);
 
 
 
UnidadesQueryDao.criarTabelasCadeirasDocente(teacherCode,
anoLectivo,
docenteReport,
0, periodos, degrees, docenteReport.getUnidadesStats());
 
 
criaExtremeCharts(docenteReport);
 
criarProgressoesCharts(docenteReport,codigosCurso,codigosEscola,degrees,periodos);
 
criarAnaliseConjuntaDeUnidades(docenteReport);
 
criarAnaliseDimensionalGeral(docenteReport);
 
criarAvaliacaoGuiaoDesempenho(docenteReport);
 
AbstractDao.getCurrentSession().getTransaction().commit();
 
 
 
return docenteReport;
}
 
private void criarAnaliseDimensionalGeral(DocenteReport report)
{
 
 
 
String grupoRelAlunopropertyIndex = ConfigProperties.getProperty("questionario.group.inverse." + PerguntasGrupoQueryDao.GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS);
String grupoRelAlunoLabel = ConfigProperties.getProperty("questionario.group" + grupoRelAlunopropertyIndex + ".title");
 
String grupoProfDocentepropertyIndex = ConfigProperties.getProperty("questionario.group.inverse." + PerguntasGrupoQueryDao.GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS);
String grupoProfDocenteLabel = ConfigProperties.getProperty("questionario.group" + grupoProfDocentepropertyIndex + ".title");
 
double valores[][] = new double[][]
{
new double[]{
report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getAvaliacaoMedia(),
report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getMediaGlobalNosCursos() },
new double[]{
report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getAvaliacaoMedia(),
report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getMediaGlobalNosCursos() }
};
 
DecimalFormat df =new DecimalFormat("#.##");
DataTable tabelaDimensoesGeral = new DataTable();
DataTable.Row header = tabelaDimensoesGeral.addRowHeader();
 
header.addColTextCenter("Dimensão");
header.addColTextCenter("Média");
header.addColTextCenter("Desvio");
header.addColTextCenter("Cursos");
header.addColTextCenter("Escolas");
 
 
 
DataTable.Row rowRelAluno = tabelaDimensoesGeral.addRowNormal();
rowRelAluno.addColTextCenter(grupoRelAlunoLabel);
rowRelAluno.addColPercentageDefinedCenter(
df.format(report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getAvaliacaoMedia()),
report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getPercentAvaliacaoMediaForTables(),true);
 
rowRelAluno.addColTextCenter(df.format(report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getDesvioPadrao()));
 
rowRelAluno.addColPercentageDefinedCenter(
df.format(report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getMediaGlobalNosCursos()),
report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getPercentMediaGlobalNosCursosForTables(), true);
 
rowRelAluno.addColPercentageDefinedCenter(
df.format(report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getMediaGlobalNasEscolas()),
report.getRespostasAgregadasGrupoDrelDocenteAluno().getMediasGrupo().getPercentMediaGlobalNasEscolasForTables(),true);
 
DataTable.Row rowProfissionalismo = tabelaDimensoesGeral.addRowNormal();
rowProfissionalismo.addColTextCenter(grupoProfDocenteLabel);
rowProfissionalismo.addColPercentageDefinedCenter(
df.format(report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getAvaliacaoMedia()),
report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getPercentAvaliacaoMediaForTables(),true);
 
rowProfissionalismo.addColTextCenter(df.format(report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getDesvioPadrao()));
 
rowProfissionalismo.addColPercentageDefinedCenter(
df.format(report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getMediaGlobalNosCursos()),
report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getPercentMediaGlobalNosCursosForTables(),true);
 
rowProfissionalismo.addColPercentageDefinedCenter(
df.format(report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getMediaGlobalNasEscolas()),
report.getRespostasAgregadasGrupoDdocenteProf().getMediasGrupo().getPercentMediaGlobalNasEscolasForTables(),true);
 
 
try {
String path = ChartBuilderUtil.createBarChartBarsCategories(
new String[]{"Docente","Curso"},
new String[]{grupoRelAlunoLabel,grupoProfDocenteLabel},
new Color[]{ChartBuilderUtil.COLOR_SECTION_DIM_DARK,ChartBuilderUtil.COLOR_SECTION_DIM},
new Color[]{Color.black,Color.black},
valores,
0,5, "dimensoesGeral",300,40);
report.setDimensoesGeralChartAndTable(new ChartWithDataTable("Dimensões Geral", "", path, tabelaDimensoesGeral));
} catch (IOException e)
{
e.printStackTrace();
}
 
 
}
private void criarAnaliseConjuntaDeUnidades(DocenteReport report)
{
 
String grupoRelAlunopropertyIndex = ConfigProperties.getProperty("questionario.group.inverse." + PerguntasGrupoQueryDao.GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS);
String grupoRelAlunoLabel = ConfigProperties.getProperty("questionario.group" + grupoRelAlunopropertyIndex + ".title");
 
String grupoProfDocentepropertyIndex = ConfigProperties.getProperty("questionario.group.inverse." + PerguntasGrupoQueryDao.GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS);
String grupoProfDocenteLabel = ConfigProperties.getProperty("questionario.group" + grupoProfDocentepropertyIndex + ".title");
 
 
DataTable tabelaDocenteUnidade = new DataTable();
DataTable tabelaRelDocenteProfDocente = new DataTable();
try {
 
String docenteUnidadePath = super.criarChartETabelaMediaGruposPorUnidade(
400,
40,
report.getUnidadesStats(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,
null,
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,
null,
tabelaDocenteUnidade,
"docenteUnidade",
new Color[]{ChartBuilderUtil.COLOR_SECTION_BLUE_DARK, ChartBuilderUtil.COLOR_SECTION_GREEN_DARK},
new Color[]{Color.black, Color.black}
);
 
String relDocenteProfDocentePath = criarChartETabelaMediaGruposPorUnidade(
400,
40,
report.getUnidadesStats(),
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,
PerguntasGrupoQueryDao.GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS,
tabelaRelDocenteProfDocente,
"relAlunoDocenteProfDocentePath",
new Color[]{ChartBuilderUtil.COLOR_SECTION_DIM_DARK, ChartBuilderUtil.COLOR_SECTION_DIM},
new Color[]{Color.black, Color.black}
 
);
 
report.setUnidadesAnalGrDocenteGrUnidadeChartAndTable(
new ChartWithDataTable(
"Analise Conjunta de Unidades",
"Docente VS Unidade",
docenteUnidadePath,
tabelaDocenteUnidade));
report.setUnidadesAnalGrRelAlunoGrProfDoceChartAndTable(
new ChartWithDataTable("Analise Conjunta de Unidades",
grupoRelAlunoLabel + "VS" + grupoProfDocenteLabel,
relDocenteProfDocentePath,
tabelaRelDocenteProfDocente));
 
} catch (IOException e) {
e.printStackTrace();
}
 
}
 
 
 
private void criarAvaliacaoGuiaoDesempenho(DocenteReport docenteReport)
{
List<UnidadeStats> unidadeStatses = docenteReport.getUnidadesStats();
 
DataTable dataTable = new DataTable();
 
DataTable.Row rowHeader = dataTable.addRowHeader();
rowHeader.addColTextCenter("Cód. Unidade");
rowHeader.addColTextCenter("Unidade Curricular").setWidth("20%");
rowHeader.addColTextCenter("Cód. Curso");
rowHeader.addColTextCenter("Curso").setWidth("20%");
rowHeader.addColTextCenter("Ano");
rowHeader.addColTextCenter("Periodo");
rowHeader.addColTextCenter("resposta média (RM)");
rowHeader.addColTextCenter("Número de inscritos");
rowHeader.addColTextCenter("Número de respostas");
rowHeader.addColTextCenter("Taxa de resposta (TR)");
rowHeader.addColTextCenter("Taxa de resposta (RMxTR)");
 
DecimalFormat df = new DecimalFormat("#.######");
Collections.sort(unidadeStatses,new Comparator<UnidadeStats>(){
 
@Override
public int compare(UnidadeStats o1, UnidadeStats o2)
{
int curso = o1.getNomeCurso().compareTo(o2.getNomeCurso());
if(curso == 0)
return o1.getNomeUnidade().compareTo(o2.getNomeUnidade());
else return curso;
}
});
 
double sumRMTR = 0;
double sumTR = 0;
 
for(UnidadeStats stats: unidadeStatses)
{
double TR = (((double)stats.getRespostas()/(double)stats.getInscritos()));
double RM = stats.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia();
double RMTR = RM * TR;
sumRMTR += RMTR;
sumTR += TR;
DataTable.Row rowUnit = dataTable.addRowNormal();
rowUnit.addColTextCenter(stats.getCodigoUnidade());
rowUnit.addColTextCenter(stats.getNomeUnidade());
rowUnit.addColTextCenter(stats.getCodigoCurso());
rowUnit.addColTextCenter(stats.getNomeCurso());
rowUnit.addColTextCenter(docenteReport.getAnoLectivo());
rowUnit.addColTextCenter(stats.getSemestre());
rowUnit.addColNumberRight(df.format(RM));
rowUnit.addColNumberRight("" + stats.getInscritos());
rowUnit.addColNumberRight("" + stats.getRespostas());
rowUnit.addColNumberRight(df.format(TR));
rowUnit.addColNumberRight(df.format(RMTR));
}
 
double media = sumRMTR/sumTR;
 
DataTable.Row rowFooter = dataTable.addRowFooter();
DataTable.Row.Col soma = rowFooter.addColTextRight("Somatório das Parcelas");
soma.setColspan(9);
soma.setFontWeight("bold");
 
DataTable.Row.Col sumTRCol = rowFooter.addColNumberRight(df.format(sumTR));
sumTRCol.setFontWeight("bold");
DataTable.Row.Col sumRMTRCol = rowFooter.addColNumberRight(df.format(sumRMTR));
sumRMTRCol.setFontWeight("bold");
 
 
docenteReport.setDocenteAvaliacaoDesempenhoTR(sumTR);
docenteReport.setDocenteAvaliacaoDesempenhoRMTR(sumRMTR);
docenteReport.setDocenteAvaliacaoDesempenhoMediaPeriodo(media);
 
docenteReport.setDocenteAvaliacaoDesempenhoTRPrint(df.format(sumTR));
docenteReport.setDocenteAvaliacaoDesempenhoRMTRPrint(df.format(sumRMTR));
docenteReport.setDocenteAvaliacaoDesempenhoMediaPeriodoPrint(df.format(media));
 
docenteReport.setDocenteAvaliacaoDesempenhoTable(dataTable);
}
 
private void criarProgressoesCharts(DocenteReport docenteReport, List<String> codigosCursos, List<String> codigosEscolas,String[] degrees,String[] periodos)
{
docenteReport.progressaoAgregadasDocentesVsCurso = criarProgressoChartGrupo(docenteReport, codigosCursos,PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,null,degrees,periodos);
docenteReport.progressaoAgregadasUnidadesVsCurso = criarProgressoChartGrupo(docenteReport, codigosCursos,PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,null,degrees,periodos);
 
docenteReport.progressaoAgregadasDocentesDrelAlunoVsCurso = criarProgressoChartGrupo(docenteReport, codigosCursos,PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,PerguntasGrupoQueryDao.GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS,degrees,periodos);
docenteReport.progressaoAgregadasDocentesDprofDocenteVsCurso = criarProgressoChartGrupo(docenteReport, codigosCursos,PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,PerguntasGrupoQueryDao.GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS,degrees,periodos);
 
}
 
private String criarProgressoChartGrupo(DocenteReport docenteReport, List<String> codigosCursos,String grupo,String subGrupo,String[] degrees,String[] periodos) {
 
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
//Media do Docente face ao curso Docente
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"avg(fc.intResposta) as media, " +
"quest.generatedTime as date " +
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"tipo.codigoSiges = :codigoSiges " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
(grupo != null ? " and prgp.grupoCode = :grupoCode " : "" ) +
(subGrupo != null ? " and prgp.subGrupoCode = :subGrupoCode " : "" ) +
degreesQuery +
periodosQuery +
" group by quest.generatedTime " +
"order by quest.generatedTime asc ");
if(grupo != null)
query.setString("grupoCode",grupo);
if(subGrupo != null)
query.setString("subGrupoCode",subGrupo);
query.setString("codigoSiges",docenteReport.getNumeroDocente());
 
List<Object[]> timeSeriesAvgDocente = query.list();
if(timeSeriesAvgDocente.size()>0)
{
Date firstOcurrence = (Date) timeSeriesAvgDocente.get(0)[1];
Date lastOcurrence = (Date) timeSeriesAvgDocente.get(timeSeriesAvgDocente.size()-1)[1];
 
String cursosQuery = QueryDaoUtils.createCursosQuery(codigosCursos, true);
Query queryCursos = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"avg(fc.intResposta) as media, " +
"quest.generatedTime as date " +
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.generatedTime >= :minDate and quest.generatedTime <= :maxDate " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
cursosQuery +
degreesQuery +
periodosQuery +
(grupo != null ? " and prgp.grupoCode = :grupoCode " : "" ) +
(subGrupo != null ? " and prgp.subGrupoCode = :subGrupoCode " : "" ) +
" group by quest.generatedTime " +
"order by quest.generatedTime asc ");
if(grupo != null)
queryCursos.setString("grupoCode",grupo);
if(subGrupo != null)
queryCursos.setString("subGrupoCode",subGrupo);
queryCursos.setTimestamp("minDate", firstOcurrence);
queryCursos.setTimestamp("maxDate",lastOcurrence);
List<Object[]> timeSeriesAvgCursosDocente = queryCursos.list();
 
try {
String chart = ChartBuilderUtil.createTimeSeriesDiffArea((grupo!=null?grupo:"") + (subGrupo!=null?subGrupo:""), " Docente ", " Curso ", timeSeriesAvgDocente, timeSeriesAvgCursosDocente);
return chart;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
 
 
private void criaExtremeCharts(DocenteReport docenteReport)
{
{
DocenteReport.PerguntaUnidadeStatAux perguntaMaxDocente = docenteReport.extremePerguntaMaxDocente();
DocenteReport.PerguntaUnidadeStatAux perguntaMinDocente = docenteReport.extremePerguntaMinDocente();
DocenteReport.PerguntaUnidadeStatAux perguntaMaxUnidade = docenteReport.extremePerguntaMaxUnidade();
DocenteReport.PerguntaUnidadeStatAux perguntaMinUnidade = docenteReport.extremePerguntaMinUnidade();
 
try {
 
if(perguntaMaxDocente != null)
{
String pathExtremePerguntaMaxDocente = ChartBuilderUtil.createChartRingOneDimension(perguntaMaxDocente.pergunta.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaMaxDocente");
String pathExtremePerguntaMinDocente = ChartBuilderUtil.createChartRingOneDimension(perguntaMinDocente.pergunta.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaMinDocente");
ChartWithTitleTemp chartPerguntaMaxDocenteChart = new ChartWithTitleTemp(perguntaMaxDocente.pergunta.getPergunta(),perguntaMaxDocente.nomeUnidade,pathExtremePerguntaMaxDocente);
ChartWithTitleTemp chartPerguntaMinDocenteChart = new ChartWithTitleTemp(perguntaMinDocente.pergunta.getPergunta(),perguntaMinDocente.nomeUnidade,pathExtremePerguntaMinDocente);
 
docenteReport.extremePerguntaAbsolutaAvgMaxDocente = chartPerguntaMaxDocenteChart;
docenteReport.extremePerguntaAbsolutaAvgMinDocente = chartPerguntaMinDocenteChart;
}
if(perguntaMaxUnidade != null)
{
String pathExtremePerguntaMaxUnidade = ChartBuilderUtil.createChartRingOneDimension(perguntaMaxUnidade.pergunta.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaMaxUnidade");
String pathExtremePerguntaMinUnidade = ChartBuilderUtil.createChartRingOneDimension(perguntaMinUnidade.pergunta.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaMinUnidade");
ChartWithTitleTemp chartPerguntaMaxUnidade = new ChartWithTitleTemp(perguntaMaxUnidade.pergunta.getPergunta(),perguntaMaxUnidade.nomeUnidade,pathExtremePerguntaMaxUnidade);
ChartWithTitleTemp chartPerguntaMinUnidade = new ChartWithTitleTemp(perguntaMinUnidade.pergunta.getPergunta(),perguntaMinUnidade.nomeUnidade,pathExtremePerguntaMinUnidade);
 
docenteReport.extremePerguntaAbsolutaAvgMaxUnidade = chartPerguntaMaxUnidade;
docenteReport.extremePerguntaAbsolutaAvgMinUnidade = chartPerguntaMinUnidade;
}
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
{
PerguntaStats perguntaAgregadaMaxDocente = docenteReport.extremeDocentePerguntaAgregadasMax();
PerguntaStats perguntaAgregadaMinDocente = docenteReport.extremeDocentePerguntaAgregadasMin();
PerguntaStats perguntaAgregadaMaxUnidade = docenteReport.extremeUnidadePerguntaAgregadaMax();
PerguntaStats perguntaAgregadaMinUnidade = docenteReport.extremeUnidadePerguntaAgregadaMin();
 
try {
if(perguntaAgregadaMaxDocente != null)
{
String pathExtremePerguntaMaxDocente = ChartBuilderUtil.createChartRingOneDimension(perguntaAgregadaMaxDocente.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaAgregadaMaxDocente");
String pathExtremePerguntaMinDocente = ChartBuilderUtil.createChartRingOneDimension(perguntaAgregadaMinDocente.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaAgregadaMinDocente");
ChartWithTitleTemp chartPerguntaMaxDocente = new ChartWithTitleTemp(perguntaAgregadaMaxDocente.getPergunta(),"",pathExtremePerguntaMaxDocente);
ChartWithTitleTemp chartPerguntaMinDocente = new ChartWithTitleTemp(perguntaAgregadaMinDocente.getPergunta(),"",pathExtremePerguntaMinDocente);
 
docenteReport.extremePerguntaAgregadaAvgMaxDocente = chartPerguntaMaxDocente;
docenteReport.extremePerguntaAgregadaAvgMinDocente = chartPerguntaMinDocente;
}
if(perguntaAgregadaMaxUnidade != null)
{
String pathExtremePerguntaMaxUnidade = ChartBuilderUtil.createChartRingOneDimension(perguntaAgregadaMaxUnidade.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaAgregadaMaxUnidade");
String pathExtremePerguntaMinUnidade = ChartBuilderUtil.createChartRingOneDimension(perguntaAgregadaMinUnidade.getMediaEntidadeEmAvaliacao(),5,true,true,false,"extremePerguntaAgregadaMinUnidade");
ChartWithTitleTemp chartPerguntaMaxUnidade = new ChartWithTitleTemp(perguntaAgregadaMaxUnidade.getPergunta(),"",pathExtremePerguntaMaxUnidade);
ChartWithTitleTemp chartPerguntaMinUnidade = new ChartWithTitleTemp(perguntaAgregadaMinUnidade.getPergunta(),"",pathExtremePerguntaMinUnidade);
 
docenteReport.extremePerguntaAgregadaAvgMaxUnidade = chartPerguntaMaxUnidade;
docenteReport.extremePerguntaAgregadaAvgMinUnidade = chartPerguntaMinUnidade;
}
 
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
{
UnidadeStats unidadeMaxDocente = docenteReport.extremeDocenteUnidadeMax();
UnidadeStats unidadeMinDocente = docenteReport.extremeDocenteUnidadeMin();
UnidadeStats unidadeMaxUnidade = docenteReport.extremeUnidadeUnidadeMax();
UnidadeStats unidadeMinUnidade = docenteReport.extremeUnidadeUnidadeMin();
 
try {
if(unidadeMaxDocente != null)
{
String pathExtremePerguntaMaxDocente = ChartBuilderUtil.createChartRingOneDimension(unidadeMaxDocente.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia(),5,true,true,false,"extremeUnidadeMaxDocente");
String pathExtremePerguntaMinDocente = ChartBuilderUtil.createChartRingOneDimension(unidadeMinDocente.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia(),5,true,true,false,"extremeUnidadeMinDocente");
ChartWithTitleTemp chartPerguntaMaxDocente = new ChartWithTitleTemp(unidadeMaxDocente.getNomeUnidade(),"",pathExtremePerguntaMaxDocente);
ChartWithTitleTemp chartPerguntaMinDocente = new ChartWithTitleTemp(unidadeMinDocente.getNomeUnidade(),"",pathExtremePerguntaMinDocente);
 
docenteReport.extremeUnitAvgMaxDocente = chartPerguntaMaxDocente;
docenteReport.extremeUnitAvgMinDocente = chartPerguntaMinDocente;
}
if(unidadeMaxUnidade != null)
{
String pathExtremePerguntaMaxUnidade = ChartBuilderUtil.createChartRingOneDimension(unidadeMaxUnidade.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia(),5,true,true,false,"extremeUnidadeMaxUnidade");
String pathExtremePerguntaMinUnidade = ChartBuilderUtil.createChartRingOneDimension(unidadeMinUnidade.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia(),5,true,true,false,"extremeUnidadeMinUnidade");
ChartWithTitleTemp chartPerguntaMaxUnidade = new ChartWithTitleTemp(unidadeMaxUnidade.getNomeUnidade(),"",pathExtremePerguntaMaxUnidade);
ChartWithTitleTemp chartPerguntaMinUnidade = new ChartWithTitleTemp(unidadeMinUnidade.getNomeUnidade(),"",pathExtremePerguntaMinUnidade);
 
docenteReport.extremeUnitAvgMaxUnidade = chartPerguntaMaxUnidade;
docenteReport.extremeUnitAvgMinUnidade = chartPerguntaMinUnidade;
}
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
{
DocenteReport.PerguntaUnidadeStatAux perguntaDiffMaxDocente = docenteReport.extremeDiffMediaPerguntaMaxDocente();
DocenteReport.PerguntaUnidadeStatAux perguntaDiffMinDocente = docenteReport.extremeDiffMediaPerguntaMinDocente();
DocenteReport.PerguntaUnidadeStatAux perguntaDiffMaxUnidade = docenteReport.extremeDiffMediaPerguntaMaxUnidade();
DocenteReport.PerguntaUnidadeStatAux perguntaDiffMinUnidade = docenteReport.extremeDiffMediaPerguntaMinUnidade();
 
try {
if(perguntaDiffMaxDocente != null)
{
String pathExtremePerguntaMaxDocente = ChartBuilderUtil.createBarChartTwoBars("Docente","Curso",ChartBuilderUtil.COLOR_SECTION_BLUE_DARK,ChartBuilderUtil.COLOR_SECTION_GREEN, perguntaDiffMaxDocente.pergunta.getMediaEntidadeEmAvaliacao(),perguntaDiffMaxDocente.pergunta.getMediaCursos(),5,"extremeDiffMaxDocente");
String pathExtremePerguntaMinDocente = ChartBuilderUtil.createBarChartTwoBars("Docente", "Curso", ChartBuilderUtil.COLOR_SECTION_BLUE_DARK, ChartBuilderUtil.COLOR_SECTION_GREEN, perguntaDiffMinDocente.pergunta.getMediaEntidadeEmAvaliacao(), perguntaDiffMinDocente.pergunta.getMediaCursos(), 5, "extremeDiffMinDocente");
ChartWithTitleTemp chartPerguntaMaxDocente = new ChartWithTitleTemp(perguntaDiffMaxDocente.pergunta.getPergunta() + " ( " + perguntaDiffMaxDocente.pergunta.getDiffMediaCursoPrint() + ")",perguntaDiffMaxDocente.nomeUnidade,pathExtremePerguntaMaxDocente);
ChartWithTitleTemp chartPerguntaMinDocente = new ChartWithTitleTemp(perguntaDiffMinDocente.pergunta.getPergunta() + " ( " + perguntaDiffMinDocente.pergunta.getDiffMediaCursoPrint() + ")",perguntaDiffMinDocente.nomeUnidade,pathExtremePerguntaMinDocente);
 
docenteReport.extremePerguntaAbsolutaDiffAvgMaxDocente = chartPerguntaMaxDocente;
docenteReport.extremePerguntaAbsolutaDiffAvgMinDocente = chartPerguntaMinDocente;
}
if(perguntaDiffMaxUnidade != null)
{
String pathExtremePerguntaMaxUnidade = ChartBuilderUtil.createBarChartTwoBars("Docente", "Curso", ChartBuilderUtil.COLOR_SECTION_BLUE_DARK, ChartBuilderUtil.COLOR_SECTION_GREEN, perguntaDiffMaxUnidade.pergunta.getMediaEntidadeEmAvaliacao(), perguntaDiffMaxUnidade.pergunta.getMediaCursos(), 5, "extremeDiffMaxUnidade");
String pathExtremePerguntaMinUnidade = ChartBuilderUtil.createBarChartTwoBars("Docente", "Curso", ChartBuilderUtil.COLOR_SECTION_BLUE_DARK, ChartBuilderUtil.COLOR_SECTION_GREEN, perguntaDiffMinUnidade.pergunta.getMediaEntidadeEmAvaliacao(), perguntaDiffMinUnidade.pergunta.getMediaCursos(), 5, "extremeDiffMinUnidade");
ChartWithTitleTemp chartPerguntaMaxUnidade = new ChartWithTitleTemp(perguntaDiffMaxUnidade.pergunta.getPergunta() + " ( " + perguntaDiffMaxUnidade.pergunta.getDiffMediaCursoPrint() + ")",perguntaDiffMaxUnidade.nomeUnidade,pathExtremePerguntaMaxUnidade);
ChartWithTitleTemp chartPerguntaMinUnidade = new ChartWithTitleTemp(perguntaDiffMinUnidade.pergunta.getPergunta() + " ( " + perguntaDiffMinUnidade.pergunta.getDiffMediaCursoPrint() + ")",perguntaDiffMinUnidade.nomeUnidade,pathExtremePerguntaMinUnidade);
 
docenteReport.extremePerguntaAbsolutaDiffAvgMaxUnidade = chartPerguntaMaxUnidade;
docenteReport.extremePerguntaAbsolutaDiffAvgMinUnidade = chartPerguntaMinUnidade;
}
 
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
 
{
QuestionariosAlunosReport.ParticipacaoUnidade perguntaDiffMax = docenteReport.extremeParticipacaoUnidadeMax();
QuestionariosAlunosReport.ParticipacaoUnidade perguntaDiffMin = docenteReport.extremeParticipacaoUnidadeMin();
 
try {
if(perguntaDiffMax != null)
{
String pathExtremePerguntaMaxDocente = ChartBuilderUtil.createChartRingOneDimension(perguntaDiffMax.getParticiparam(),perguntaDiffMax.getInscritos(),true,true,false,"extremeParticipacaoMax");
String pathExtremePerguntaMinDocente = ChartBuilderUtil.createChartRingOneDimension(perguntaDiffMin.getParticiparam(),perguntaDiffMin.getInscritos(),true,true,false,"extremeParticipacaoMin");
 
ChartWithTitleTemp chartPerguntaMaxDocente = new ChartWithTitleTemp(perguntaDiffMax.getNomeUnidade() + " (inscritos: " + perguntaDiffMax.getInscritos() + ")","",pathExtremePerguntaMaxDocente);
ChartWithTitleTemp chartPerguntaMinDocente = new ChartWithTitleTemp(perguntaDiffMin.getNomeUnidade() + " (inscritos: " + perguntaDiffMin.getInscritos() + ")","",pathExtremePerguntaMinDocente);
 
docenteReport.extremeParticipacaoMax = chartPerguntaMaxDocente;
docenteReport.extremeParticipacaoMin = chartPerguntaMinDocente;
}
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
 
 
 
}
 
 
/**
*
* GET PARAMETERS
* FILE_GROUP_ID
* LOAD FILE GROUP GET ANO, PERIODOS, DEGREES
* GET ALL DOCENTES
* GENERATE REPORT
* UPLOAD FILE REPOSITORY WITH PERMISSIONS
* QUESTIONARIOS_FILE_GROUP_DOCENTE_REPORT
* DELETE TMP
* GENERATE CSV FILE
* PUT STREAM IN FILE GROUP
* QUESTIONARIOS_FILE_GROUP_DOCENTE_ALL
* CREATE ZIP WITH ALL REPORTS PUT IN FILE GROUP
* DELETE TMP
* PUT STREAM IN FILE GROUP
* QUESTIONARIOS_FILE_GROUP_DOCENTE_ALL
* DELETE TMP
*
* @return
* @throws Throwable
*/
@Override
protected ILogMessages runJobServiceTask() throws Throwable
{
long questionarioReportId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_report_id_KEY).getObject());
DefaultLogMessages logMessages = new DefaultLogMessages();
 
int docentesEncontrados = 0;
int docentesProcessados = 0;
int docentesFalhados = 0;
 
serviceLogInfo("######################################");
serviceLogInfo("######################################");
serviceLogInfo("#Docentes Encontrados:" + docentesEncontrados);
serviceLogInfo("#Docentes Processados:" + docentesProcessados);
serviceLogInfo("#Docentes Falhados:" + docentesFalhados);
 
logger.info("######################################");
logger.info("######################################");
logger.info("#Docentes Encontrados:" + docentesEncontrados);
logger.info("#Docentes Processados:" + docentesProcessados);
logger.info("#Docentes Falhados:" + docentesFalhados);
return logMessages;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/ReportAlunosGenerator.java
New file
0,0 → 1,389
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors;
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.OlapStarFactQuestionarioAnswer;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.questionarios.PedagogicoAlunosProcessor;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.PerguntasGrupoQueryDao;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.QueryDaoUtils;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.QuestionariosQueryDao;
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 pt.estgp.estgweb.utils.ConfigProperties;
 
import java.awt.*;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 16/12/16.
*/
public abstract class ReportAlunosGenerator extends ServiceJob
{
 
private static final Logger logger = Logger.getLogger(ReportAlunosGenerator.class);
 
protected String anoLectivo;
protected String[] periodos;
protected String[] degrees;
 
public ReportAlunosGenerator(String anoLectivo, String[] periodos, String[] degrees) {
this.anoLectivo = anoLectivo;
this.periodos = periodos;
this.degrees = degrees;
}
 
 
/**
* Gera um gráfico com todas as respostas agregadas por questao para um professor
* @param codes
* @param anoLectivo
* @param report
*/
public static void criarGraficosRespostasAgregadas(String[] codes,
EntityEvaluated entityEvaluated,
String anoLectivo,
QuestionariosAlunosReport report,
List<String> codigosCurso,
List<String> codigosEscola,
double tempoMinimo,
RespostasAgregadasGrupoStats.RespostasAgregadasChartTable respostasAgregadasChartTable,
RespostasAgregadasGrupoStats respostasAgregadasGrupo,
String grupo,
String subGrupo,
String[] periodos,
String[] degrees,
boolean generateChart)
{
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
 
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes,entityEvaluated);
 
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.olapTimeLine timeLine " +
 
"where " +
 
" quest.ano = :ano " +
whereFragmentEntity +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
(tempoMinimo > 0 ? " and fc.tempoLevado > :tempoLevado " : "" ) +
periodosQuery +
degreesQuery +
(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);
if(tempoMinimo > 0)
{
query.setDouble("tempoLevado",tempoMinimo);
}
 
 
DataTable tableRespostasAgregadas = new DataTable();
 
 
 
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");
 
if(entityEvaluated == EntityEvaluated.DOCENTE)
{
header.addColTextCenter("Média dos Cursos em que Lecciona");
header.addColTextCenter("Diff Cursos");
header.addColTextCenter("Média das Escolas em que Lecciona");
header.addColTextCenter("Diff Escolas");
}
else if(entityEvaluated == EntityEvaluated.CURSO)
{
header.addColTextCenter("Média da Escola");
header.addColTextCenter("Diff Escola");
}
else
{
throw new RuntimeException("Não implementado");
}
 
 
 
List<Object[]> resultsTest = query.list();
for(Object[] resultTest : resultsTest)
{
Double tempoMedioLevado = (Double) resultTest[10];
Double mediaDocente = (Double) resultTest[0];
Double desvio = (Double) resultTest[6];
Long total = (Long) resultTest[7];
double min = mediaDocente - (desvio*2);
double max = mediaDocente + (desvio*2);
if(max > 5) max = 5;
DecimalFormat df = new DecimalFormat("#.##");
 
String questao = resultTest[8].toString();
String numero = resultTest[9].toString();
 
 
DataTable.Row rowUnidade = tableRespostasAgregadas.addRowNormal();
rowUnidade.addColLabelCenter(questao);
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());
 
Long respostas1 = (Long) resultTest[1];
Long respostas2 = (Long) resultTest[2];
Long respostas3 = (Long) resultTest[3];
Long respostas4 = (Long) resultTest[4];
Long respostas5 = (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);
}
 
 
 
 
 
double mediaCursos = QueryDaoUtils.getMediaCursos(codigosCurso, anoLectivo, numero, tempoMinimo, grupo,subGrupo, periodos, degrees);
double mediaEscolas = QueryDaoUtils.getMediaEscolas(codigosEscola, anoLectivo, numero, tempoMinimo, grupo,subGrupo, periodos, degrees);
 
 
 
try {
PerguntaStats perguntaStatsAndChart;
 
if(tempoMinimo <= 0 && generateChart)
{
List<String> info = new ArrayList<String>();
info.add("Desvio Padrão: " + df.format(desvio));
info.add("Média: " + df.format(mediaDocente));
info.add("Respostas: " + total);
info.add("95% respostas entre: " + df.format(min) + " e " + df.format(max));
perguntaStatsAndChart = ChartBuilderUtil.createChartRespostasPergunta(questao, info,
new int[]{
((Long) resultTest[1]).intValue(),
((Long) resultTest[2]).intValue(),
((Long) resultTest[3]).intValue(),
((Long) resultTest[4]).intValue(),
((Long) resultTest[5]).intValue(),
}, "resposta" + tempoMinimo + numero, report.getQuestionariosReqRespondidos());
 
}
else
perguntaStatsAndChart = new PerguntaStats();
 
perguntaStatsAndChart.setPergunta(questao);
perguntaStatsAndChart.setNumero(numero);
perguntaStatsAndChart.setGrupo(grupo);
perguntaStatsAndChart.setSubGrupo(subGrupo);
perguntaStatsAndChart.setDesvio(df.format(desvio));
perguntaStatsAndChart.setMediaCursosPrint(df.format(mediaCursos));
perguntaStatsAndChart.setMediaEscolasPrint(df.format(mediaEscolas));
perguntaStatsAndChart.setMediaCursos(mediaCursos);
perguntaStatsAndChart.setMediaEscolas(mediaEscolas);
perguntaStatsAndChart.setMediaEntidadeEmAvaliacao(mediaDocente);
perguntaStatsAndChart.setMediaEntidadeEmAvaliacaoPrint(df.format(mediaDocente));
perguntaStatsAndChart.setPercentMediaCursos("" + ((int) ((mediaCursos / 5.0) * 100.0)));
perguntaStatsAndChart.setPercentMediaEscolas("" + ((int) ((mediaEscolas / 5.0) * 100.0)));
perguntaStatsAndChart.setPercentMediaEntidadeEmAvaliacao("" + ((int)((mediaDocente/5.0)*100.0)));
 
perguntaStatsAndChart.setDiffMediaCurso(mediaDocente - mediaCursos);
perguntaStatsAndChart.setDiffMediaEscola(mediaDocente - mediaEscolas);
perguntaStatsAndChart.setDiffMediaCursoPrint(df.format(mediaDocente - mediaCursos));
perguntaStatsAndChart.setDiffMediaEscolaPrint(df.format(mediaDocente - mediaEscolas));
 
rowUnidade.addColPercentageDefinedCenter(perguntaStatsAndChart.getMediaEntidadeEmAvaliacaoPrint(), perguntaStatsAndChart.getPercentMediaEntidadeEmAvaliacao(), true);
rowUnidade.addColTextCenter(df.format(desvio));
if(entityEvaluated == EntityEvaluated.DOCENTE)
{
rowUnidade.addColPercentageDefinedCenter(perguntaStatsAndChart.getMediaCursosPrint(),perguntaStatsAndChart.getPercentMediaCursos(),true);
rowUnidade.addColNumberRight(perguntaStatsAndChart.getDiffMediaCursoPrint()).setBackgroundColor(ChartBuilderUtil.getBackgroundColorDiff(perguntaStatsAndChart.getDiffMediaCurso()));
}
else if(entityEvaluated == EntityEvaluated.CURSO)
{
 
}
else
{
throw new RuntimeException("Não implementado"); //para lembrar se implementar o de cima e esquecer este
}
rowUnidade.addColPercentageDefinedCenter(perguntaStatsAndChart.getMediaEscolasPrint(),perguntaStatsAndChart.getPercentMediaEscolas(),true);
rowUnidade.addColNumberRight(perguntaStatsAndChart.getDiffMediaEscolaPrint()).setBackgroundColor(ChartBuilderUtil.getBackgroundColorDiff(perguntaStatsAndChart.getDiffMediaEscola()));
 
respostasAgregadasChartTable.getRespostasAgregadasCharts().addChart(perguntaStatsAndChart);
respostasAgregadasChartTable.setRespostasTable(tableRespostasAgregadas);
 
if(tempoMinimo <= 0)
{
//adicionada segunda vez para ficar na classe de agregação de respostas e medias
//legadamente ja estavam no chart mas metem-se aqui tambem pois estavam em rows e afins
respostasAgregadasGrupo.getPerguntasStats().add(perguntaStatsAndChart);
PerguntasGrupoQueryDao.getMediasGrupo(codes,entityEvaluated, anoLectivo, report, codigosCurso, codigosEscola, grupo, subGrupo, respostasAgregadasGrupo.getMediasGrupo(), periodos, degrees);
}
 
} catch (IOException e) {
logger.error(e,e);
}
}
 
 
}
 
 
protected String criarChartETabelaMediaGruposPorUnidade(int width,int heightCategory,List<UnidadeStats> unidadesStats,String grupo1,String subgrupo1, String grupo2,String subgrupo2,DataTable table,String tmpPathPrefix,Color[] barColors,Color[] labelsColors) throws IOException
{
//Se houver subgrupo usa-se a label do subgrupo
String grupo1propertyIndex = subgrupo1 != null ? ConfigProperties.getProperty("questionario.group.inverse." + subgrupo1) : ConfigProperties.getProperty("questionario.group.inverse." + grupo1);
String grupo1Label = ConfigProperties.getProperty("questionario.group" + grupo1propertyIndex + ".title");
String grupo2propertyIndex = subgrupo2 != null ? grupo2propertyIndex = ConfigProperties.getProperty("questionario.group.inverse." + subgrupo2) : ConfigProperties.getProperty("questionario.group.inverse." + grupo2);
String grupo2Label = ConfigProperties.getProperty("questionario.group" + grupo2propertyIndex + ".title");
 
if(table != null)
{
DataTable.Row headerDefinition = table.addRowHeader();
headerDefinition.setInvisible(true);
headerDefinition.addColTextCenter("Unidade Inv").setWidth("20%");
headerDefinition.addColTextCenter("Código Inv");
headerDefinition.addColTextCenter("Curso Inv").setWidth("20%");
headerDefinition.addColTextCenter("Código Curso Inv");
headerDefinition.addColTextCenter("Respostas Inv");
headerDefinition.addColTextCenter("Média Inv");
headerDefinition.addColTextCenter("Desvio Inv");
headerDefinition.addColTextCenter("Média Curso Inv");
headerDefinition.addColTextCenter("Média Escola Inv");
headerDefinition.addColTextCenter("Média Inv");
headerDefinition.addColTextCenter("Desvio Inv");
headerDefinition.addColTextCenter("Média Curso Inv");
headerDefinition.addColTextCenter("Média Escola Inv");
 
DataTable.Row header = table.addRowHeader();
 
 
header.addColInvisible().setColspan(5);
DataTable.Row.Col colgrupo1 = header.addColTextCenter(grupo1Label);
DataTable.Row.Col colgrupo2 = header.addColTextCenter(grupo2Label);
colgrupo1.setColspan(4);
colgrupo2.setColspan(4);
 
colgrupo1.setBackgroundColor(ChartBuilderUtil.getRgbXslColor(barColors[0]));
colgrupo2.setBackgroundColor(ChartBuilderUtil.getRgbXslColor(barColors[1]));
 
DataTable.Row header2 = table.addRowHeader();
header2.addColTextCenter("Unidade");
header2.addColTextCenter("Código");
header2.addColTextCenter("Curso");
header2.addColTextCenter("Código Curso");
header2.addColTextCenter("Resps");
header2.addColTextCenter("Média").setBackgroundColor(colgrupo1.getBackgroundColor());
header2.addColTextCenter("Desvio").setBackgroundColor(colgrupo1.getBackgroundColor());
header2.addColTextCenter("Média Curso").setBackgroundColor(colgrupo1.getBackgroundColor());
header2.addColTextCenter("Média Escola").setBackgroundColor(colgrupo1.getBackgroundColor());
header2.addColTextCenter("Média").setBackgroundColor(colgrupo2.getBackgroundColor());
header2.addColTextCenter("Desvio").setBackgroundColor(colgrupo2.getBackgroundColor());
header2.addColTextCenter("Média Curso").setBackgroundColor(colgrupo2.getBackgroundColor());
header2.addColTextCenter("Média Escola").setBackgroundColor(colgrupo2.getBackgroundColor());
}
 
double valores[][] = new double[unidadesStats.size()][2];
String [] categories = new String[unidadesStats.size()];
int i = 0;
 
DecimalFormat df =new DecimalFormat("#.##");
for(UnidadeStats unidadeStats : unidadesStats)
{
UnidadeStats.UnidadeStatsGrupo unidadeStatsGrupo1 = unidadeStats.findUnidadeStatsGrupo(grupo1,subgrupo1);
UnidadeStats.UnidadeStatsGrupo unidadeStatsGrupo2 = unidadeStats.findUnidadeStatsGrupo(grupo2,subgrupo2);
valores[i][0] = unidadeStatsGrupo1.getMediasGrupo().getAvaliacaoMedia();
valores[i][1] = unidadeStatsGrupo2.getMediasGrupo().getAvaliacaoMedia();
categories[i] = unidadeStats.getNomeUnidadeComCursoAbreviado();
i++;
 
if(table != null)
{
DataTable.Row rowUnit = table.addRowNormal();
rowUnit.addColTextCenter(unidadeStats.getNomeUnidade());
rowUnit.addColTextCenter(unidadeStats.getCodigoUnidade());
rowUnit.addColTextCenter(unidadeStats.getNomeCurso());
rowUnit.addColTextCenter(unidadeStats.getCodigoCurso());
rowUnit.addColNumberRight("" + unidadeStats.getRespostas());
 
rowUnit.addColPercentageDefinedCenter(df.format(unidadeStatsGrupo1.getMediasGrupo().getAvaliacaoMedia()), unidadeStatsGrupo1.getMediasGrupo().getPercentAvaliacaoMediaForTables(), true);
rowUnit.addColNumberRight(df.format(unidadeStatsGrupo1.getMediasGrupo().getDesvioPadrao()));
rowUnit.addColPercentageDefinedCenter(df.format(unidadeStatsGrupo1.getMediasGrupo().getMediaGlobalNosCursos()), unidadeStatsGrupo1.getMediasGrupo().getPercentMediaGlobalNosCursosForTables(), true);
rowUnit.addColPercentageDefinedCenter(df.format(unidadeStatsGrupo1.getMediasGrupo().getMediaGlobalNasEscolas()), unidadeStatsGrupo1.getMediasGrupo().getPercentMediaGlobalNasEscolasForTables(), true);
 
rowUnit.addColPercentageDefinedCenter(df.format(unidadeStatsGrupo2.getMediasGrupo().getAvaliacaoMedia()), unidadeStatsGrupo2.getMediasGrupo().getPercentAvaliacaoMediaForTables(), true);
rowUnit.addColNumberRight(df.format(unidadeStatsGrupo2.getMediasGrupo().getDesvioPadrao()));
rowUnit.addColPercentageDefinedCenter(df.format(unidadeStatsGrupo2.getMediasGrupo().getMediaGlobalNosCursos()), unidadeStatsGrupo2.getMediasGrupo().getPercentMediaGlobalNosCursosForTables(), true);
rowUnit.addColPercentageDefinedCenter(df.format(unidadeStatsGrupo2.getMediasGrupo().getMediaGlobalNasEscolas()), unidadeStatsGrupo2.getMediasGrupo().getPercentMediaGlobalNasEscolasForTables(), true);
}
 
}
 
String path = ChartBuilderUtil.createBarChartBarsCategories(
new String[]{grupo1Label,grupo2Label},
categories,
barColors,
labelsColors,
valores,
0,5, tmpPathPrefix + "unidadesConjuntas",width,heightCategory);
return path;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/reportdomains/QuestionariosReport.java
New file
0,0 → 1,315
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain;
 
import org.dom4j.DocumentException;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
import org.w3c.dom.Document;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.ChartBuilderUtil;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.DataTable;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import javax.xml.transform.TransformerException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
 
/**
* Created by jorgemachado on 07/11/16.
*/
public class QuestionariosReport implements Serializable
{
 
public String color1Hex = ChartBuilderUtil.COLOR_1_HEX;
public String color2Hex = ChartBuilderUtil.COLOR_2_HEX;
public String color3Hex = ChartBuilderUtil.COLOR_3_HEX;
public String color4Hex = ChartBuilderUtil.COLOR_4_HEX;
public String color5Hex = ChartBuilderUtil.COLOR_5_HEX;
 
 
/**
* CARACTERIZACAO DA AMOSTRA
*/
public int questionariosReqRespondidos;
public int questionariosReqNaoRespondidos;
public int questionariosReqTotal;
 
public int questionariosReqRespondidosPercentagem;
public String questionariosReqRespondidosPercentagemColor;
 
public int inquiridosTotal;
public int inquiridosNaoResponderam;
public int inquiridosComResposta;
 
 
//Genero
public int masculinoComResposta;
public int femininoComResposta;
 
public int masculinoComRespostaPercent;
public int femininoComRespostaPercent;
 
public int idade17_22;
public int idade23_25;
public int idade26_30;
public int idadeM30;
 
public int idade17_22Percent;
public int idade23_25Percent;
public int idade26_30Percent;
public int idadeM30Percent;
 
//GRAFICOS
public String pathGraficoTaxaRespostaQuestionarios;
 
 
//TABELAS
public DataTable tabelaIdades;
public DataTable tabelaDistritos;
 
public String getQuestionariosReqRespondidosPercentagemColor() {
return questionariosReqRespondidosPercentagemColor;
}
 
public void setQuestionariosReqRespondidosPercentagemColor(String questionariosReqRespondidosPercentagemColor) {
this.questionariosReqRespondidosPercentagemColor = questionariosReqRespondidosPercentagemColor;
}
 
public String getColor1Hex() {
return color1Hex;
}
 
public void setColor1Hex(String color1Hex) {
this.color1Hex = color1Hex;
}
 
public String getColor2Hex() {
return color2Hex;
}
 
public void setColor2Hex(String color2Hex) {
this.color2Hex = color2Hex;
}
 
public String getColor3Hex() {
return color3Hex;
}
 
public void setColor3Hex(String color3Hex) {
this.color3Hex = color3Hex;
}
 
public String getColor4Hex() {
return color4Hex;
}
 
public void setColor4Hex(String color4Hex) {
this.color4Hex = color4Hex;
}
 
public String getColor5Hex() {
return color5Hex;
}
 
public void setColor5Hex(String color5Hex) {
this.color5Hex = color5Hex;
}
 
public int getInquiridosTotal() {
return inquiridosTotal;
}
 
public void setInquiridosTotal(int inquiridosTotal) {
this.inquiridosTotal = inquiridosTotal;
}
 
public int getInquiridosNaoResponderam() {
return inquiridosNaoResponderam;
}
 
public void setInquiridosNaoResponderam(int inquiridosNaoResponderam) {
this.inquiridosNaoResponderam = inquiridosNaoResponderam;
}
 
public int getInquiridosComResposta() {
return inquiridosComResposta;
}
 
public void setInquiridosComResposta(int inquiridosComResposta) {
this.inquiridosComResposta = inquiridosComResposta;
}
 
public DataTable getTabelaDistritos() {
return tabelaDistritos;
}
 
public void setTabelaDistritos(DataTable tabelaDistritos) {
this.tabelaDistritos = tabelaDistritos;
}
 
public DataTable getTabelaIdades() {
return tabelaIdades;
}
 
public int getQuestionariosReqRespondidosPercentagem() {
return questionariosReqRespondidosPercentagem;
}
 
public void setQuestionariosReqRespondidosPercentagem(int questionariosReqRespondidosPercentagem) {
this.questionariosReqRespondidosPercentagem = questionariosReqRespondidosPercentagem;
}
 
public void setTabelaIdades(DataTable tabelaIdades) {
this.tabelaIdades = tabelaIdades;
}
 
public int getIdade17_22Percent() {
return idade17_22Percent;
}
 
public void setIdade17_22Percent(int idade17_22Percent) {
this.idade17_22Percent = idade17_22Percent;
}
 
public int getIdade23_25Percent() {
return idade23_25Percent;
}
 
public void setIdade23_25Percent(int idade23_25Percent) {
this.idade23_25Percent = idade23_25Percent;
}
 
public int getIdade26_30Percent() {
return idade26_30Percent;
}
 
public void setIdade26_30Percent(int idade26_30Percent) {
this.idade26_30Percent = idade26_30Percent;
}
 
public int getIdadeM30Percent() {
return idadeM30Percent;
}
 
public void setIdadeM30Percent(int idadeM30Percent) {
this.idadeM30Percent = idadeM30Percent;
}
 
 
 
public String getPathGraficoTaxaRespostaQuestionarios() {
return pathGraficoTaxaRespostaQuestionarios;
}
 
public void setPathGraficoTaxaRespostaQuestionarios(String pathGraficoTaxaRespostaQuestionarios) {
this.pathGraficoTaxaRespostaQuestionarios = pathGraficoTaxaRespostaQuestionarios;
}
 
 
 
public int getQuestionariosReqRespondidos() {
return questionariosReqRespondidos;
}
 
public void setQuestionariosReqRespondidos(int questionariosReqRespondidos) {
this.questionariosReqRespondidos = questionariosReqRespondidos;
}
 
public int getQuestionariosReqNaoRespondidos() {
return questionariosReqNaoRespondidos;
}
 
public void setQuestionariosReqNaoRespondidos(int questionariosReqNaoRespondidos) {
this.questionariosReqNaoRespondidos = questionariosReqNaoRespondidos;
}
 
public int getQuestionariosReqTotal() {
return questionariosReqTotal;
}
 
public void setQuestionariosReqTotal(int questionariosReqTotal) {
this.questionariosReqTotal = questionariosReqTotal;
}
 
 
 
public int getMasculinoComResposta() {
return masculinoComResposta;
}
 
public void setMasculinoComResposta(int masculinoComResposta) {
this.masculinoComResposta = masculinoComResposta;
}
 
public int getFemininoComResposta() {
return femininoComResposta;
}
 
public void setFemininoComResposta(int femininoComResposta) {
this.femininoComResposta = femininoComResposta;
}
 
public int getMasculinoComRespostaPercent() {
return masculinoComRespostaPercent;
}
 
public void setMasculinoComRespostaPercent(int masculinoComRespostaPercent) {
this.masculinoComRespostaPercent = masculinoComRespostaPercent;
}
 
public int getFemininoComRespostaPercent() {
return femininoComRespostaPercent;
}
 
public void setFemininoComRespostaPercent(int femininoComRespostaPercent) {
this.femininoComRespostaPercent = femininoComRespostaPercent;
}
 
 
public int getIdade17_22() {
return idade17_22;
}
 
public void setIdade17_22(int idade17_22) {
this.idade17_22 = idade17_22;
}
 
public int getIdade23_25() {
return idade23_25;
}
 
public void setIdade23_25(int idade23_25) {
this.idade23_25 = idade23_25;
}
 
public int getIdade26_30() {
return idade26_30;
}
 
public void setIdade26_30(int idade26_30) {
this.idade26_30 = idade26_30;
}
 
public int getIdadeM30() {
return idadeM30;
}
 
public void setIdadeM30(int idadeM30) {
this.idadeM30 = idadeM30;
}
 
 
public Document serialize() throws DocumentException, TransformerException, IOException
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
Serializer serializer = new Persister();
try {
serializer.write(this,out);
} catch (Exception e) {
e.printStackTrace();
}
return Dom4jUtil.toW3c(Dom4jUtil.parse(out.toString()));
}
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/reportdomains/QuestionariosAlunosReport.java
New file
0,0 → 1,357
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain;
 
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.PerguntasGrupoQueryDao;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.DataTable;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.TabelaPerguntaComparativosUnidades;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class QuestionariosAlunosReport extends QuestionariosReport implements Serializable
{
 
ArrayList<String> semestres;
ArrayList<String> degrees;
String anoLectivo;
 
//Tipos de Alunos
public int tipoAlunosNormalComResposta;
public int tipoAlunosTrabalhadorEstudanteComResposta;
public int tipoAlunosErasmusComResposta;
public int tipoAlunosOutros;
 
public int tipoAlunosNormalComRespostaPercent;
public int tipoAlunosTrabalhadorEstudanteComRespostaPercent;
public int tipoAlunosErasmusComRespostaPercent;
public int tipoAlunosOutrosPercent;
 
//GRAFICOS
public String pathGraficoTaxaRespostaAlunos;
public String pathGraficoTiposAlunosComResposta;
public String pathGraficoContribuicaoUnidades;
 
//TABELAS
public DataTable tabelaTaxaRespostaUnidade;
public DataTable tabelaTaxaRespostaUnidadeOrderTaxa;
 
public ArrayList<ParticipacaoUnidade> participacoesUnidades = new ArrayList<ParticipacaoUnidade>();
 
public ArrayList<TabelaPerguntaComparativosUnidades> listaUnidadesComprativasPergunta = new ArrayList<TabelaPerguntaComparativosUnidades>();
public ArrayList<TabelaPerguntaComparativosUnidades> listaUnidadesComprativasPerguntaSalas = new ArrayList<TabelaPerguntaComparativosUnidades>();
 
public ArrayList<TabelaPerguntaComparativosUnidades> getListaUnidadesComprativasPerguntaSalas() {
return listaUnidadesComprativasPerguntaSalas;
}
 
public void setListaUnidadesComprativasPerguntaSalas(ArrayList<TabelaPerguntaComparativosUnidades> listaUnidadesComprativasPerguntaSalas) {
this.listaUnidadesComprativasPerguntaSalas = listaUnidadesComprativasPerguntaSalas;
}
 
public ArrayList<TabelaPerguntaComparativosUnidades> getListaUnidadesComprativasPergunta() {
return listaUnidadesComprativasPergunta;
}
 
public void setListaUnidadesComprativasPergunta(ArrayList<TabelaPerguntaComparativosUnidades> listaUnidadesComprativasPergunta) {
this.listaUnidadesComprativasPergunta = listaUnidadesComprativasPergunta;
}
 
//MEDIAS GLOBAIS
//Preenchidas no UnidadeQueryDao durante o preenchimento das unidadesCurriculares porque sao necessarias as
//medias dos grupos e das perguntas nas escolas e nos cursos das perguntas
//Obtem-se o valor no PerguntaGrupoQueryDao pode-se invocar os metodos por aqui com este proxy
private HashMap<String,PerguntasGrupoQueryDao.MediaGlobalCursoPergunta> mediasPerguntaNoCurso = new HashMap<String, PerguntasGrupoQueryDao.MediaGlobalCursoPergunta>();
private HashMap<String,PerguntasGrupoQueryDao.MediaGlobalEscolaPergunta> mediasPerguntaNaEscola = new HashMap<String, PerguntasGrupoQueryDao.MediaGlobalEscolaPergunta>();
private HashMap<String,PerguntasGrupoQueryDao.MediaGlobalCursoGrupo> mediasGrupoNoCurso = new HashMap<String, PerguntasGrupoQueryDao.MediaGlobalCursoGrupo>();
private HashMap<String,PerguntasGrupoQueryDao.MediaGlobalEscolaGrupo> mediasGrupoNaEscola = new HashMap<String, PerguntasGrupoQueryDao.MediaGlobalEscolaGrupo>();
 
public PerguntasGrupoQueryDao.MediaGlobalCursoPergunta mediaPerguntaNoCurso(String codigoCurso, String anoLectivo, String numeroPergunta,String[] periodos,String[]degrees)
{
return PerguntasGrupoQueryDao.getMediaCursoPergunta(this,codigoCurso,anoLectivo,numeroPergunta,periodos);
}
public PerguntasGrupoQueryDao.MediaGlobalCursoGrupo mediaGrupoNoCurso(String codigoCurso, String anoLectivo, String grupo,String subGrupo,String[] periodos,String[]degrees)
{
return PerguntasGrupoQueryDao.getMediaCursoGrupo(this, codigoCurso,anoLectivo,grupo,subGrupo,periodos);
}
public PerguntasGrupoQueryDao.MediaGlobalEscolaPergunta mediaPerguntaNaEscola(String codigoEscola, String anoLectivo, String numeroPergunta,String[] periodos,String[]degrees)
{
return PerguntasGrupoQueryDao.getMediaEscolaPergunta(this, codigoEscola, anoLectivo, numeroPergunta,periodos,degrees);
}
public PerguntasGrupoQueryDao.MediaGlobalEscolaGrupo mediaGrupoNaEscola(String codigoEscola, String anoLectivo, String grupo,String subGrupo,String[] periodos,String[]degrees)
{
return PerguntasGrupoQueryDao.getMediaEscolaGrupo(this, codigoEscola, anoLectivo, grupo,subGrupo, periodos,degrees);
}
 
public HashMap<String, PerguntasGrupoQueryDao.MediaGlobalCursoPergunta> getMediasPerguntaNoCurso() {
return mediasPerguntaNoCurso;
}
 
public void setMediasPerguntaNoCurso(HashMap<String, PerguntasGrupoQueryDao.MediaGlobalCursoPergunta> mediasPerguntaNoCurso) {
this.mediasPerguntaNoCurso = mediasPerguntaNoCurso;
}
 
public HashMap<String, PerguntasGrupoQueryDao.MediaGlobalEscolaPergunta> getMediasPerguntaNaEscola() {
return mediasPerguntaNaEscola;
}
 
public void setMediasPerguntaNaEscola(HashMap<String, PerguntasGrupoQueryDao.MediaGlobalEscolaPergunta> mediasPerguntaNaEscola) {
this.mediasPerguntaNaEscola = mediasPerguntaNaEscola;
}
 
public HashMap<String, PerguntasGrupoQueryDao.MediaGlobalCursoGrupo> getMediasGrupoNoCurso() {
return mediasGrupoNoCurso;
}
 
public void setMediasGrupoNoCurso(HashMap<String, PerguntasGrupoQueryDao.MediaGlobalCursoGrupo> mediasGrupoNoCurso) {
this.mediasGrupoNoCurso = mediasGrupoNoCurso;
}
 
public HashMap<String, PerguntasGrupoQueryDao.MediaGlobalEscolaGrupo> getMediasGrupoNaEscola() {
return mediasGrupoNaEscola;
}
 
public void setMediasGrupoNaEscola(HashMap<String, PerguntasGrupoQueryDao.MediaGlobalEscolaGrupo> mediasGrupoNaEscola) {
this.mediasGrupoNaEscola = mediasGrupoNaEscola;
}
 
 
 
 
 
 
 
 
public DataTable getTabelaTaxaRespostaUnidadeOrderTaxa() {
return tabelaTaxaRespostaUnidadeOrderTaxa;
}
 
public void setTabelaTaxaRespostaUnidadeOrderTaxa(DataTable tabelaTaxaRespostaUnidadeOrderTaxa) {
this.tabelaTaxaRespostaUnidadeOrderTaxa = tabelaTaxaRespostaUnidadeOrderTaxa;
}
 
public String getAnoLectivo() {
return anoLectivo;
}
 
public void setAnoLectivo(String anoLectivo) {
this.anoLectivo = anoLectivo;
}
 
public ArrayList<String> getSemestres() {
return semestres;
}
 
public void setSemestres(ArrayList<String> semestres) {
this.semestres = semestres;
}
 
public ArrayList<String> getDegrees() {
return degrees;
}
 
public void setDegrees(ArrayList<String> degrees) {
this.degrees = degrees;
}
 
public ArrayList<ParticipacaoUnidade> getParticipacoesUnidades() {
return participacoesUnidades;
}
 
public void setParticipacoesUnidades(ArrayList<ParticipacaoUnidade> participacoesUnidades) {
this.participacoesUnidades = participacoesUnidades;
}
 
public String getPathGraficoContribuicaoUnidades() {
return pathGraficoContribuicaoUnidades;
}
 
public void setPathGraficoContribuicaoUnidades(String pathGraficoContribuicaoUnidades) {
this.pathGraficoContribuicaoUnidades = pathGraficoContribuicaoUnidades;
}
 
public DataTable getTabelaTaxaRespostaUnidade() {
return tabelaTaxaRespostaUnidade;
}
 
public void setTabelaTaxaRespostaUnidade(DataTable tabelaTaxaRespostaUnidade) {
this.tabelaTaxaRespostaUnidade = tabelaTaxaRespostaUnidade;
}
 
 
public int getAlunosTotal() {
return inquiridosTotal;
}
 
public void setAlunosTotal(int alunosTotal) {
this.inquiridosTotal = alunosTotal;
}
 
public String getPathGraficoTaxaRespostaAlunos() {
return pathGraficoTaxaRespostaAlunos;
}
 
public void setPathGraficoTaxaRespostaAlunos(String pathGraficoTaxaRespostaAlunos) {
this.pathGraficoTaxaRespostaAlunos = pathGraficoTaxaRespostaAlunos;
}
 
public String getPathGraficoTiposAlunosComResposta() {
return pathGraficoTiposAlunosComResposta;
}
 
public void setPathGraficoTiposAlunosComResposta(String pathGraficoTiposAlunosComResposta) {
this.pathGraficoTiposAlunosComResposta = pathGraficoTiposAlunosComResposta;
}
 
public int getAlunosComResposta() {
return inquiridosComResposta;
}
 
public void setAlunosComResposta(int alunosComResposta) {
this.inquiridosComResposta = alunosComResposta;
}
 
 
public int getAlunosNaoResponderam() {
return inquiridosNaoResponderam;
}
 
public void setAlunosNaoResponderam(int alunosNaoResponderam) {
this.inquiridosNaoResponderam = alunosNaoResponderam;
}
 
public int getTipoAlunosNormalComResposta() {
return tipoAlunosNormalComResposta;
}
 
public void setTipoAlunosNormalComResposta(int tipoAlunosNormalComResposta) {
this.tipoAlunosNormalComResposta = tipoAlunosNormalComResposta;
}
 
public int getTipoAlunosTrabalhadorEstudanteComResposta() {
return tipoAlunosTrabalhadorEstudanteComResposta;
}
 
public void setTipoAlunosTrabalhadorEstudanteComResposta(int tipoAlunosTrabalhadorEstudanteComResposta) {
this.tipoAlunosTrabalhadorEstudanteComResposta = tipoAlunosTrabalhadorEstudanteComResposta;
}
 
public int getTipoAlunosErasmusComResposta() {
return tipoAlunosErasmusComResposta;
}
 
public void setTipoAlunosErasmusComResposta(int tipoAlunosErasmusComResposta) {
this.tipoAlunosErasmusComResposta = tipoAlunosErasmusComResposta;
}
 
public int getTipoAlunosOutros() {
return tipoAlunosOutros;
}
 
public void setTipoAlunosOutros(int tipoAlunosOutros) {
this.tipoAlunosOutros = tipoAlunosOutros;
}
 
public int getTipoAlunosNormalComRespostaPercent() {
return tipoAlunosNormalComRespostaPercent;
}
 
public void setTipoAlunosNormalComRespostaPercent(int tipoAlunosNormalComRespostaPercent) {
this.tipoAlunosNormalComRespostaPercent = tipoAlunosNormalComRespostaPercent;
}
 
public int getTipoAlunosTrabalhadorEstudanteComRespostaPercent() {
return tipoAlunosTrabalhadorEstudanteComRespostaPercent;
}
 
public void setTipoAlunosTrabalhadorEstudanteComRespostaPercent(int tipoAlunosTrabalhadorEstudanteComRespostaPercent) {
this.tipoAlunosTrabalhadorEstudanteComRespostaPercent = tipoAlunosTrabalhadorEstudanteComRespostaPercent;
}
 
public int getTipoAlunosErasmusComRespostaPercent() {
return tipoAlunosErasmusComRespostaPercent;
}
 
public void setTipoAlunosErasmusComRespostaPercent(int tipoAlunosErasmusComRespostaPercent) {
this.tipoAlunosErasmusComRespostaPercent = tipoAlunosErasmusComRespostaPercent;
}
 
public int getTipoAlunosOutrosPercent() {
return tipoAlunosOutrosPercent;
}
 
public void setTipoAlunosOutrosPercent(int tipoAlunosOutrosPercent) {
this.tipoAlunosOutrosPercent = tipoAlunosOutrosPercent;
}
 
 
 
public static class ParticipacaoUnidade
{
int participaram;
int inscritos;
int participaramPercentagem;
String nomeUnidade;
String codigoUnidade;
double percentagemContribuicaoDaUnidadeNoUniversoUnidades;
String percentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint;
 
public int getParticiparam() {
return participaram;
}
 
public void setParticiparam(int participaram) {
this.participaram = participaram;
}
 
public int getInscritos() {
return inscritos;
}
 
public void setInscritos(int inscritos) {
this.inscritos = inscritos;
}
 
public int getParticiparamPercentagem() {
return participaramPercentagem;
}
 
public void setParticiparamPercentagem(int participaramPercentagem) {
this.participaramPercentagem = participaramPercentagem;
}
 
public String getNomeUnidade() {
return nomeUnidade;
}
 
public void setNomeUnidade(String nomeUnidade) {
this.nomeUnidade = nomeUnidade;
}
 
public String getCodigoUnidade() {
return codigoUnidade;
}
 
public void setCodigoUnidade(String codigoUnidade) {
this.codigoUnidade = codigoUnidade;
}
 
public double getPercentagemContribuicaoDaUnidadeNoUniversoUnidades() {
return percentagemContribuicaoDaUnidadeNoUniversoUnidades;
}
 
public void setPercentagemContribuicaoDaUnidadeNoUniversoUnidades(double percentagemContribuicaoDaUnidadeNoUniversoUnidades) {
this.percentagemContribuicaoDaUnidadeNoUniversoUnidades = percentagemContribuicaoDaUnidadeNoUniversoUnidades;
}
 
public String getPercentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint() {
return percentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint;
}
 
public void setPercentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint(String percentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint) {
this.percentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint = percentagemContribuicaoDaUnidadeNoUniversoUnidadesPrint;
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/reportdomains/CursoPublicReport.java
New file
0,0 → 1,87
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain;
 
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.ChartWithDataTable;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.CursoStats;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.DataTable;
 
import java.io.Serializable;
 
/**
* Created by jorgemachado on 16/12/16.
*/
public class CursoPublicReport extends QuestionariosAlunosReport implements Serializable
{
CursoStats cursoStats = new CursoStats();
 
String pathDistribuicaoRespostasSemanalChart;
DataTable tabelaEvolucaoRespostas;
 
ChartWithDataTable analiseConjuntaChartWithTable;
String analiseConjuntaChartOrderMediaUnidades;
String analiseConjuntaChartOrderMediaSalas;
 
DataTable todasAsRespostasMediasGruposUnidadesESalas;
 
 
public DataTable getTodasAsRespostasMediasGruposUnidadesESalas() {
return todasAsRespostasMediasGruposUnidadesESalas;
}
 
public void setTodasAsRespostasMediasGruposUnidadesESalas(DataTable todasAsRespostasMediasGruposUnidadesESalas) {
this.todasAsRespostasMediasGruposUnidadesESalas = todasAsRespostasMediasGruposUnidadesESalas;
}
 
public String getAnaliseConjuntaChartOrderMediaUnidades() {
return analiseConjuntaChartOrderMediaUnidades;
}
 
public void setAnaliseConjuntaChartOrderMediaUnidades(String analiseConjuntaChartOrderMediaUnidades) {
this.analiseConjuntaChartOrderMediaUnidades = analiseConjuntaChartOrderMediaUnidades;
}
 
public String getAnaliseConjuntaChartOrderMediaSalas() {
return analiseConjuntaChartOrderMediaSalas;
}
 
public void setAnaliseConjuntaChartOrderMediaSalas(String analiseConjuntaChartOrderMediaSalas) {
this.analiseConjuntaChartOrderMediaSalas = analiseConjuntaChartOrderMediaSalas;
}
 
public ChartWithDataTable getAnaliseConjuntaChartWithTable() {
return analiseConjuntaChartWithTable;
}
 
public void setAnaliseConjuntaChartWithTable(ChartWithDataTable analiseConjuntaChartWithTable) {
this.analiseConjuntaChartWithTable = analiseConjuntaChartWithTable;
}
 
public DataTable getTabelaEvolucaoRespostas() {
return tabelaEvolucaoRespostas;
}
 
public void setTabelaEvolucaoRespostas(DataTable tabelaEvolucaoRespostas) {
this.tabelaEvolucaoRespostas = tabelaEvolucaoRespostas;
}
 
public String getPathDistribuicaoRespostasSemanalChart() {
return pathDistribuicaoRespostasSemanalChart;
}
 
public void setPathDistribuicaoRespostasSemanalChart(String pathDistribuicaoRespostasSemanalChart) {
this.pathDistribuicaoRespostasSemanalChart = pathDistribuicaoRespostasSemanalChart;
}
 
public CursoStats getCursoStats() {
return cursoStats;
}
 
public void setCursoStats(CursoStats cursoStats) {
this.cursoStats = cursoStats;
}
 
 
 
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/reportdomains/EntityEvaluated.java
New file
0,0 → 1,12
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain;
 
/**
* Created by jorgemachado on 16/12/16.
*/
public enum EntityEvaluated
{
CURSO,
DOCENTE,
CURSOS,
ESCOLA
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/reportdomains/DocenteReport.java
New file
0,0 → 1,882
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain;
 
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.PerguntasGrupoQueryDao;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.*;
 
import java.io.Serializable;
import java.util.*;
 
/**
* Created by jorgemachado on 07/11/16.
*/
public class DocenteReport extends QuestionariosAlunosReport implements Serializable{
 
 
 
//Evoluir para ter um DocenteStats com tudo isto
String nomeDocente;
String numeroDocente;
 
 
 
//Respostas Agregadas com medias de Grupo
//Tem as perguntas Todas numa lista de PerguntaStats
public RespostasAgregadasGrupoStats respostasAgregadasGrupoDocente = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,null);
public RespostasAgregadasGrupoStats respostasAgregadasGrupoUnidade = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,null);
public RespostasAgregadasGrupoStats respostasAgregadasGrupoDrelDocenteAluno = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,PerguntasGrupoQueryDao.GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS);
public RespostasAgregadasGrupoStats respostasAgregadasGrupoDdocenteProf = new RespostasAgregadasGrupoStats(PerguntasGrupoQueryDao.GRUPO_DOCENTE_CODE_PERGUNTAS,PerguntasGrupoQueryDao.GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS);
 
//Respostas por unidade com medias de Grupo
//Cada cadeira tem as perguntas todas numa lista de PerguntaStats
public ArrayList<UnidadeStats> unidadesStats = new ArrayList<UnidadeStats>();
 
//AVALIACAO DE DESEMPENHO
public double docenteAvaliacaoDesempenhoRMTR;
public double docenteAvaliacaoDesempenhoTR;
public double docenteAvaliacaoDesempenhoMediaPeriodo;
 
public String docenteAvaliacaoDesempenhoRMTRPrint;
public String docenteAvaliacaoDesempenhoTRPrint;
public String docenteAvaliacaoDesempenhoMediaPeriodoPrint;
 
public DataTable docenteAvaliacaoDesempenhoTable;
 
//TOTAIS PARA MEDIAS
public int docentesNosCursos;
public int docentesNasEscolas;
 
public int unidadesNosCursos;
public int unidadesNasEscolas;
 
 
public ChartWithTitleTemp extremePerguntaAbsolutaAvgMaxDocente;
public ChartWithTitleTemp extremePerguntaAbsolutaAvgMinDocente;
public ChartWithTitleTemp extremePerguntaAbsolutaAvgMaxUnidade;
public ChartWithTitleTemp extremePerguntaAbsolutaAvgMinUnidade;
 
public ChartWithTitleTemp extremePerguntaAgregadaAvgMaxDocente;
public ChartWithTitleTemp extremePerguntaAgregadaAvgMinDocente;
public ChartWithTitleTemp extremePerguntaAgregadaAvgMaxUnidade;
public ChartWithTitleTemp extremePerguntaAgregadaAvgMinUnidade;
 
public ChartWithTitleTemp extremeUnitAvgMaxDocente;
public ChartWithTitleTemp extremeUnitAvgMinDocente;
public ChartWithTitleTemp extremeUnitAvgMaxUnidade;
public ChartWithTitleTemp extremeUnitAvgMinUnidade;
 
public ChartWithTitleTemp extremeParticipacaoMax;
public ChartWithTitleTemp extremeParticipacaoMin;
 
public ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMaxDocente;
public ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMinDocente;
public ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMaxUnidade;
public ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMinUnidade;
 
 
 
ChartWithDataTable dimensoesGeralChartAndTable;
ChartWithDataTable unidadesAnalGrDocenteGrUnidadeChartAndTable;
ChartWithDataTable unidadesAnalGrRelAlunoGrProfDoceChartAndTable;
 
 
public String progressaoAgregadasDocentesVsCurso;
public String progressaoAgregadasUnidadesVsCurso;
 
public String progressaoAgregadasDocentesDrelAlunoVsCurso;
public String progressaoAgregadasDocentesDprofDocenteVsCurso;
 
 
 
 
 
 
 
public ChartWithDataTable getDimensoesGeralChartAndTable() {
return dimensoesGeralChartAndTable;
}
 
public void setDimensoesGeralChartAndTable(ChartWithDataTable dimensoesGeralChartAndTable) {
this.dimensoesGeralChartAndTable = dimensoesGeralChartAndTable;
}
 
public ChartWithDataTable getUnidadesAnalGrDocenteGrUnidadeChartAndTable() {
return unidadesAnalGrDocenteGrUnidadeChartAndTable;
}
 
public void setUnidadesAnalGrDocenteGrUnidadeChartAndTable(ChartWithDataTable unidadesAnalGrDocenteGrUnidadeChartAndTable) {
this.unidadesAnalGrDocenteGrUnidadeChartAndTable = unidadesAnalGrDocenteGrUnidadeChartAndTable;
}
 
public ChartWithDataTable getUnidadesAnalGrRelAlunoGrProfDoceChartAndTable() {
return unidadesAnalGrRelAlunoGrProfDoceChartAndTable;
}
 
public void setUnidadesAnalGrRelAlunoGrProfDoceChartAndTable(ChartWithDataTable unidadesAnalGrRelAlunoGrProfDoceChartAndTable) {
this.unidadesAnalGrRelAlunoGrProfDoceChartAndTable = unidadesAnalGrRelAlunoGrProfDoceChartAndTable;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoDrelDocenteAluno() {
return respostasAgregadasGrupoDrelDocenteAluno;
}
 
public void setRespostasAgregadasGrupoDrelDocenteAluno(RespostasAgregadasGrupoStats respostasAgregadasGrupoDrelDocenteAluno) {
this.respostasAgregadasGrupoDrelDocenteAluno = respostasAgregadasGrupoDrelDocenteAluno;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoDdocenteProf() {
return respostasAgregadasGrupoDdocenteProf;
}
 
public void setRespostasAgregadasGrupoDdocenteProf(RespostasAgregadasGrupoStats respostasAgregadasGrupoDdocenteProf) {
this.respostasAgregadasGrupoDdocenteProf = respostasAgregadasGrupoDdocenteProf;
}
 
public String getProgressaoAgregadasDocentesDrelAlunoVsCurso() {
return progressaoAgregadasDocentesDrelAlunoVsCurso;
}
 
public void setProgressaoAgregadasDocentesDrelAlunoVsCurso(String progressaoAgregadasDocentesDrelAlunoVsCurso) {
this.progressaoAgregadasDocentesDrelAlunoVsCurso = progressaoAgregadasDocentesDrelAlunoVsCurso;
}
 
public String getProgressaoAgregadasDocentesDprofDocenteVsCurso() {
return progressaoAgregadasDocentesDprofDocenteVsCurso;
}
 
public void setProgressaoAgregadasDocentesDprofDocenteVsCurso(String progressaoAgregadasDocentesDprofDocenteVsCurso) {
this.progressaoAgregadasDocentesDprofDocenteVsCurso = progressaoAgregadasDocentesDprofDocenteVsCurso;
}
 
public DataTable getDocenteAvaliacaoDesempenhoTable() {
return docenteAvaliacaoDesempenhoTable;
}
 
public void setDocenteAvaliacaoDesempenhoTable(DataTable docenteAvaliacaoDesempenhoTable) {
this.docenteAvaliacaoDesempenhoTable = docenteAvaliacaoDesempenhoTable;
}
 
public String getDocenteAvaliacaoDesempenhoRMTRPrint() {
return docenteAvaliacaoDesempenhoRMTRPrint;
}
 
public void setDocenteAvaliacaoDesempenhoRMTRPrint(String docenteAvaliacaoDesempenhoRMTRPrint) {
this.docenteAvaliacaoDesempenhoRMTRPrint = docenteAvaliacaoDesempenhoRMTRPrint;
}
 
public String getDocenteAvaliacaoDesempenhoTRPrint() {
return docenteAvaliacaoDesempenhoTRPrint;
}
 
public void setDocenteAvaliacaoDesempenhoTRPrint(String docenteAvaliacaoDesempenhoTRPrint) {
this.docenteAvaliacaoDesempenhoTRPrint = docenteAvaliacaoDesempenhoTRPrint;
}
 
public String getDocenteAvaliacaoDesempenhoMediaPeriodoPrint() {
return docenteAvaliacaoDesempenhoMediaPeriodoPrint;
}
 
public void setDocenteAvaliacaoDesempenhoMediaPeriodoPrint(String docenteAvaliacaoDesempenhoMediaPeriodoPrint) {
this.docenteAvaliacaoDesempenhoMediaPeriodoPrint = docenteAvaliacaoDesempenhoMediaPeriodoPrint;
}
 
public double getDocenteAvaliacaoDesempenhoRMTR() {
return docenteAvaliacaoDesempenhoRMTR;
}
 
public void setDocenteAvaliacaoDesempenhoRMTR(double docenteAvaliacaoDesempenhoRMTR) {
this.docenteAvaliacaoDesempenhoRMTR = docenteAvaliacaoDesempenhoRMTR;
}
 
public double getDocenteAvaliacaoDesempenhoTR() {
return docenteAvaliacaoDesempenhoTR;
}
 
public void setDocenteAvaliacaoDesempenhoTR(double docenteAvaliacaoDesempenhoTR) {
this.docenteAvaliacaoDesempenhoTR = docenteAvaliacaoDesempenhoTR;
}
 
public double getDocenteAvaliacaoDesempenhoMediaPeriodo() {
return docenteAvaliacaoDesempenhoMediaPeriodo;
}
 
public void setDocenteAvaliacaoDesempenhoMediaPeriodo(double docenteAvaliacaoDesempenhoMediaPeriodo) {
this.docenteAvaliacaoDesempenhoMediaPeriodo = docenteAvaliacaoDesempenhoMediaPeriodo;
}
 
public String getProgressaoAgregadasDocentesVsCurso() {
return progressaoAgregadasDocentesVsCurso;
}
 
public void setProgressaoAgregadasDocentesVsCurso(String progressaoAgregadasDocentesVsCurso) {
this.progressaoAgregadasDocentesVsCurso = progressaoAgregadasDocentesVsCurso;
}
 
public String getProgressaoAgregadasUnidadesVsCurso() {
return progressaoAgregadasUnidadesVsCurso;
}
 
public void setProgressaoAgregadasUnidadesVsCurso(String progressaoAgregadasUnidadesVsCurso) {
this.progressaoAgregadasUnidadesVsCurso = progressaoAgregadasUnidadesVsCurso;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaAvgMaxDocente() {
return extremePerguntaAbsolutaAvgMaxDocente;
}
 
public void setExtremePerguntaAbsolutaAvgMaxDocente(ChartWithTitleTemp extremePerguntaAbsolutaAvgMaxDocente) {
this.extremePerguntaAbsolutaAvgMaxDocente = extremePerguntaAbsolutaAvgMaxDocente;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaAvgMinDocente() {
return extremePerguntaAbsolutaAvgMinDocente;
}
 
public void setExtremePerguntaAbsolutaAvgMinDocente(ChartWithTitleTemp extremePerguntaAbsolutaAvgMinDocente) {
this.extremePerguntaAbsolutaAvgMinDocente = extremePerguntaAbsolutaAvgMinDocente;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaAvgMaxUnidade() {
return extremePerguntaAbsolutaAvgMaxUnidade;
}
 
public void setExtremePerguntaAbsolutaAvgMaxUnidade(ChartWithTitleTemp extremePerguntaAbsolutaAvgMaxUnidade) {
this.extremePerguntaAbsolutaAvgMaxUnidade = extremePerguntaAbsolutaAvgMaxUnidade;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaAvgMinUnidade() {
return extremePerguntaAbsolutaAvgMinUnidade;
}
 
public void setExtremePerguntaAbsolutaAvgMinUnidade(ChartWithTitleTemp extremePerguntaAbsolutaAvgMinUnidade) {
this.extremePerguntaAbsolutaAvgMinUnidade = extremePerguntaAbsolutaAvgMinUnidade;
}
 
public ChartWithTitleTemp getExtremePerguntaAgregadaAvgMaxDocente() {
return extremePerguntaAgregadaAvgMaxDocente;
}
 
public void setExtremePerguntaAgregadaAvgMaxDocente(ChartWithTitleTemp extremePerguntaAgregadaAvgMaxDocente) {
this.extremePerguntaAgregadaAvgMaxDocente = extremePerguntaAgregadaAvgMaxDocente;
}
 
public ChartWithTitleTemp getExtremePerguntaAgregadaAvgMinDocente() {
return extremePerguntaAgregadaAvgMinDocente;
}
 
public void setExtremePerguntaAgregadaAvgMinDocente(ChartWithTitleTemp extremePerguntaAgregadaAvgMinDocente) {
this.extremePerguntaAgregadaAvgMinDocente = extremePerguntaAgregadaAvgMinDocente;
}
 
public ChartWithTitleTemp getExtremePerguntaAgregadaAvgMaxUnidade() {
return extremePerguntaAgregadaAvgMaxUnidade;
}
 
public void setExtremePerguntaAgregadaAvgMaxUnidade(ChartWithTitleTemp extremePerguntaAgregadaAvgMaxUnidade) {
this.extremePerguntaAgregadaAvgMaxUnidade = extremePerguntaAgregadaAvgMaxUnidade;
}
 
public ChartWithTitleTemp getExtremePerguntaAgregadaAvgMinUnidade() {
return extremePerguntaAgregadaAvgMinUnidade;
}
 
public void setExtremePerguntaAgregadaAvgMinUnidade(ChartWithTitleTemp extremePerguntaAgregadaAvgMinUnidade) {
this.extremePerguntaAgregadaAvgMinUnidade = extremePerguntaAgregadaAvgMinUnidade;
}
 
public ChartWithTitleTemp getExtremeUnitAvgMaxDocente() {
return extremeUnitAvgMaxDocente;
}
 
public void setExtremeUnitAvgMaxDocente(ChartWithTitleTemp extremeUnitAvgMaxDocente) {
this.extremeUnitAvgMaxDocente = extremeUnitAvgMaxDocente;
}
 
public ChartWithTitleTemp getExtremeUnitAvgMinDocente() {
return extremeUnitAvgMinDocente;
}
 
public void setExtremeUnitAvgMinDocente(ChartWithTitleTemp extremeUnitAvgMinDocente) {
this.extremeUnitAvgMinDocente = extremeUnitAvgMinDocente;
}
 
public ChartWithTitleTemp getExtremeUnitAvgMaxUnidade() {
return extremeUnitAvgMaxUnidade;
}
 
public void setExtremeUnitAvgMaxUnidade(ChartWithTitleTemp extremeUnitAvgMaxUnidade) {
this.extremeUnitAvgMaxUnidade = extremeUnitAvgMaxUnidade;
}
 
public ChartWithTitleTemp getExtremeUnitAvgMinUnidade() {
return extremeUnitAvgMinUnidade;
}
 
public void setExtremeUnitAvgMinUnidade(ChartWithTitleTemp extremeUnitAvgMinUnidade) {
this.extremeUnitAvgMinUnidade = extremeUnitAvgMinUnidade;
}
 
public ChartWithTitleTemp getExtremeParticipacaoMax() {
return extremeParticipacaoMax;
}
 
public void setExtremeParticipacaoMax(ChartWithTitleTemp extremeParticipacaoMax) {
this.extremeParticipacaoMax = extremeParticipacaoMax;
}
 
public ChartWithTitleTemp getExtremeParticipacaoMin() {
return extremeParticipacaoMin;
}
 
public void setExtremeParticipacaoMin(ChartWithTitleTemp extremeParticipacaoMin) {
this.extremeParticipacaoMin = extremeParticipacaoMin;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaDiffAvgMaxDocente() {
return extremePerguntaAbsolutaDiffAvgMaxDocente;
}
 
public void setExtremePerguntaAbsolutaDiffAvgMaxDocente(ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMaxDocente) {
this.extremePerguntaAbsolutaDiffAvgMaxDocente = extremePerguntaAbsolutaDiffAvgMaxDocente;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaDiffAvgMinDocente() {
return extremePerguntaAbsolutaDiffAvgMinDocente;
}
 
public void setExtremePerguntaAbsolutaDiffAvgMinDocente(ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMinDocente) {
this.extremePerguntaAbsolutaDiffAvgMinDocente = extremePerguntaAbsolutaDiffAvgMinDocente;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaDiffAvgMaxUnidade() {
return extremePerguntaAbsolutaDiffAvgMaxUnidade;
}
 
public void setExtremePerguntaAbsolutaDiffAvgMaxUnidade(ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMaxUnidade) {
this.extremePerguntaAbsolutaDiffAvgMaxUnidade = extremePerguntaAbsolutaDiffAvgMaxUnidade;
}
 
public ChartWithTitleTemp getExtremePerguntaAbsolutaDiffAvgMinUnidade() {
return extremePerguntaAbsolutaDiffAvgMinUnidade;
}
 
public void setExtremePerguntaAbsolutaDiffAvgMinUnidade(ChartWithTitleTemp extremePerguntaAbsolutaDiffAvgMinUnidade) {
this.extremePerguntaAbsolutaDiffAvgMinUnidade = extremePerguntaAbsolutaDiffAvgMinUnidade;
}
 
public MediasGrupo mediasGrupoDocenteAgregada()
{
return respostasAgregadasGrupoDocente.getMediasGrupo();
}
 
public MediasGrupo mediasGrupoUnidadeAgregada()
{
return respostasAgregadasGrupoUnidade.getMediasGrupo();
}
 
public MediasGrupo mediaGrupoDocenteNaUnidade(String codigoUnidade, String codigoCurso, String semestre)
{
for(UnidadeStats unidadeStats :unidadesStats)
{
if( unidadeStats.getCodigoUnidade().equals(codigoUnidade) &&
unidadeStats.getCodigoCurso().equals(codigoCurso) &&
unidadeStats.getSemestre().equals(semestre))
{
return unidadeStats.getUnidadeStatsGrupoDocente().getMediasGrupo();
}
}
return null;
}
 
public MediasGrupo mediaGrupoUnidadeNaUnidade(String codigoUnidade, String codigoCurso, String semestre)
{
for(UnidadeStats unidadeStats :unidadesStats)
{
if( unidadeStats.getCodigoUnidade().equals(codigoUnidade) &&
unidadeStats.getCodigoCurso().equals(codigoCurso) &&
unidadeStats.getSemestre().equals(semestre))
{
return unidadeStats.getUnidadeStatsGrupoUnidade().getMediasGrupo();
}
}
return null;
}
 
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoDocente() {
return respostasAgregadasGrupoDocente;
}
 
public void setRespostasAgregadasGrupoDocente(RespostasAgregadasGrupoStats respostasAgregadasGrupoDocente) {
this.respostasAgregadasGrupoDocente = respostasAgregadasGrupoDocente;
}
 
public RespostasAgregadasGrupoStats getRespostasAgregadasGrupoUnidade() {
return respostasAgregadasGrupoUnidade;
}
 
public void setRespostasAgregadasGrupoUnidade(RespostasAgregadasGrupoStats respostasAgregadasGrupoUnidade) {
this.respostasAgregadasGrupoUnidade = respostasAgregadasGrupoUnidade;
}
 
public int getUnidadesNosCursos() {
return unidadesNosCursos;
}
 
public void setUnidadesNosCursos(int unidadesNosCursos) {
this.unidadesNosCursos = unidadesNosCursos;
}
 
public int getUnidadesNasEscolas() {
return unidadesNasEscolas;
}
 
public void setUnidadesNasEscolas(int unidadesNasEscolas) {
this.unidadesNasEscolas = unidadesNasEscolas;
}
 
public int getDocentesNosCursos() {
return docentesNosCursos;
}
 
public void setDocentesNosCursos(int docentesNosCursos) {
this.docentesNosCursos = docentesNosCursos;
}
 
public int getDocentesNasEscolas() {
return docentesNasEscolas;
}
 
public void setDocentesNasEscolas(int docentesNasEscolas) {
this.docentesNasEscolas = docentesNasEscolas;
}
 
 
 
public ArrayList<UnidadeStats> getUnidadesStats() {
return unidadesStats;
}
 
public void setUnidadesStats(ArrayList<UnidadeStats> unidadesStats) {
this.unidadesStats = unidadesStats;
}
 
public String getNomeDocente() {
return nomeDocente;
}
 
public void setNomeDocente(String nome) {
this.nomeDocente = nome;
}
 
public String getNumeroDocente() {
return numeroDocente;
}
 
public void setNumeroDocente(String numero) {
this.numeroDocente = numero;
}
 
 
 
 
 
/********************************************
* CACHE DE MEDIAS PARA OUTROS GRAFICOS
* PRIVADO
********************************************/
/*
private HashMap<String,PerguntaStats> numeroPerguntaRespostasChart = new HashMap<String, PerguntaStats>();
 
 
public void addNumeroPerguntaChartCache(PerguntaStats chart)
{
numeroPerguntaRespostasChart.put(chart.getNumero(),chart);
}
 
public PerguntaStats getRespostasChart(String numero)
{
return numeroPerguntaRespostasChart.get(numero);
}
 
public String getRespostasChartMediaCursos(String numero)
{
PerguntaStats r = numeroPerguntaRespostasChart.get(numero);
return r == null ? "0" : r.getMediaCursos();
}
 
public String getRespostasChartMediaEscolas(String numero)
{
PerguntaStats r = numeroPerguntaRespostasChart.get(numero);
return r == null ? "0" : r.getMediaEscolas();
}
 
public String getRespostasChartMediaEntidadeEmAvaliacao(String numero)
{
PerguntaStats r = numeroPerguntaRespostasChart.get(numero);
return r == null ? "0" : r.getMediaEntidadeEmAvaliacao();
}
 
public String getRespostasChartMediaCursosPercent(String numero)
{
PerguntaStats r = numeroPerguntaRespostasChart.get(numero);
return r == null ? "0" : r.getPercentMediaCursos();
}
 
public String getRespostasChartMediaEscolasPercent(String numero)
{
PerguntaStats r = numeroPerguntaRespostasChart.get(numero);
return r == null ? "0" : r.getPercentMediaEscolas();
}
 
public String getRespostasChartMediaEntidadeEmAvaliacaoPercent(String numero)
{
PerguntaStats r = numeroPerguntaRespostasChart.get(numero);
return r == null ? "0" : r.getPercentMediaEntidadeEmAvaliacao();
}
*/
 
 
/**************************************************
* ***** EXTREME MEDIAS CALCULATIONS *****
* ************************************************/
 
public PerguntaUnidadeStatAux extremePerguntaMaxDocente()
{
List<PerguntaUnidadeStatAux> perguntas = getPerguntaUnidadeStatAuxesDocenteSortedMedia();
if(perguntas.size() > 0)
return perguntas.get(0);
return null;
}
 
public PerguntaUnidadeStatAux extremePerguntaMinDocente()
{
List<PerguntaUnidadeStatAux> perguntas = getPerguntaUnidadeStatAuxesDocenteSortedMedia();
if(perguntas.size() > 0)
return perguntas.get(perguntas.size() - 1);
return null;
}
 
public PerguntaUnidadeStatAux extremePerguntaMaxUnidade()
{
List<PerguntaUnidadeStatAux> perguntas = getPerguntaUnidadeStatAuxesUnidadeSortedMedia();
if(perguntas.size() > 0)
return perguntas.get(0);
return null;
}
 
public PerguntaUnidadeStatAux extremePerguntaMinUnidade()
{
List<PerguntaUnidadeStatAux> perguntas = getPerguntaUnidadeStatAuxesUnidadeSortedMedia();
if(perguntas.size() > 0)
return perguntas.get(perguntas.size() - 1);
return null;
}
 
private List<PerguntaUnidadeStatAux> getPerguntaUnidadeStatAuxesDocenteSortedMedia() {
List<PerguntaUnidadeStatAux> perguntas = new ArrayList<PerguntaUnidadeStatAux>();
for(UnidadeStats unidadeStats : unidadesStats)
{
for(PerguntaStats ps : unidadeStats.getUnidadeStatsGrupoDocente().getPerguntasStats())
{
cloneAndAddPerguntaAuxToList(perguntas, unidadeStats, ps);
}
}
sortPerguntaAuxesMedia(perguntas);
return perguntas;
}
 
private void sortPerguntaAuxesMedia(List<PerguntaUnidadeStatAux> perguntas) {
Collections.sort(perguntas, new Comparator<PerguntaUnidadeStatAux>() {
@Override
public int compare(PerguntaUnidadeStatAux o1, PerguntaUnidadeStatAux o2) {
double diff = o2.pergunta.getMediaEntidadeEmAvaliacao() - o1.pergunta.getMediaEntidadeEmAvaliacao();
if (diff < 0) return -1;
if (diff > 0) return 1;
return 0;
}
});
}
 
private List<PerguntaUnidadeStatAux> getPerguntaUnidadeStatAuxesUnidadeSortedMedia() {
List<PerguntaUnidadeStatAux> perguntas = new ArrayList<PerguntaUnidadeStatAux>();
for(UnidadeStats unidadeStats : unidadesStats)
{
for(PerguntaStats ps : unidadeStats.getUnidadeStatsGrupoUnidade().getPerguntasStats())
{
cloneAndAddPerguntaAuxToList(perguntas, unidadeStats, ps);
}
}
sortPerguntaAuxesMedia(perguntas);
return perguntas;
}
 
private void cloneAndAddPerguntaAuxToList(List<PerguntaUnidadeStatAux> perguntas, UnidadeStats unidadeStats, PerguntaStats ps) {
PerguntaUnidadeStatAux aux = new PerguntaUnidadeStatAux();
aux.pergunta = ps;
aux.codigoCurso = unidadeStats.getCodigoCurso();
aux.nomeCurso = unidadeStats.getNomeCurso();
aux.codigoEscola = unidadeStats.getCodigoEscola();
aux.nomeEscola = unidadeStats.getNomeEscola();
aux.codigoUnidade = unidadeStats.getCodigoUnidade();
aux.nomeUnidade = unidadeStats.getNomeUnidade();
aux.semestre = unidadeStats.getSemestre();
aux.difMedia = ps.getMediaEntidadeEmAvaliacao() - ps.getMediaCursos();
perguntas.add(aux);
}
 
public static class PerguntaUnidadeStatAux
{
 
public String nomeUnidade;
public String codigoUnidade;
public String codigoCurso;
public String nomeCurso;
public String codigoEscola;
public String nomeEscola;
public String semestre;
 
public PerguntaStats pergunta;
 
public double difMedia;
}
 
/**************************************************
* ***** EXTREME AGREGADAS MEDIAS CALCULATIONS *****
* ************************************************/
 
public PerguntaStats extremeDocentePerguntaAgregadasMax()
{
List<PerguntaStats> perguntas = getPerguntasAgregadasStatsSorted();
if(perguntas.size() > 0)
return perguntas.get(0);
return null;
}
 
public PerguntaStats extremeDocentePerguntaAgregadasMin()
{
List<PerguntaStats> perguntas = getPerguntasAgregadasStatsSorted();
if(perguntas.size() > 0)
return perguntas.get(perguntas.size()-1);
return null;
}
 
private List<PerguntaStats> getPerguntasAgregadasStatsSorted() {
List<PerguntaStats> perguntas = getRespostasAgregadasGrupoDocente().getPerguntasStats();
sortPerguntasStatsMedia(perguntas);
return perguntas;
}
 
public PerguntaStats extremeUnidadePerguntaAgregadaMax()
{
List<PerguntaStats> perguntas = getPerguntasUnidadesAgregadasStatsSorted();
if(perguntas.size() > 0)
return perguntas.get(0);
return null;
}
 
public PerguntaStats extremeUnidadePerguntaAgregadaMin()
{
List<PerguntaStats> perguntas = getPerguntasUnidadesAgregadasStatsSorted();
if(perguntas.size() > 0)
return perguntas.get(perguntas.size()-1);
return null;
}
 
private List<PerguntaStats> getPerguntasUnidadesAgregadasStatsSorted() {
List<PerguntaStats> perguntas = getRespostasAgregadasGrupoUnidade().getPerguntasStats();
sortPerguntasStatsMedia(perguntas);
return perguntas;
}
 
private void sortPerguntasStatsMedia(List<PerguntaStats> perguntas) {
Collections.sort(perguntas, new Comparator<PerguntaStats>() {
@Override
public int compare(PerguntaStats o1, PerguntaStats o2) {
double diff = o2.getMediaEntidadeEmAvaliacao() - o1.getMediaEntidadeEmAvaliacao();
if (diff < 0) return -1;
if (diff > 0) return 1;
return 0;
}
});
}
 
 
/**************************************************
* ***** EXTREME UNIDADE MEDIAS CALCULATIONS *****
* ************************************************/
public UnidadeStats extremeDocenteUnidadeMax()
{
List<UnidadeStats> unidadeStatses = getUnidadeStatsesDocenteSortedMedia();
if(unidadeStatses.size() > 0)
return unidadeStatses.get(0);
return null;
}
 
public UnidadeStats extremeDocenteUnidadeMin()
{
List<UnidadeStats> unidadeStatses = getUnidadeStatsesDocenteSortedMedia();
if(unidadeStatses.size() > 0)
return unidadeStatses.get(unidadeStatses.size()-1);
return null;
}
 
public UnidadeStats extremeUnidadeUnidadeMax()
{
List<UnidadeStats> unidadeStatses = getUnidadeStatsesUnidadeSortedMedia();
if(unidadeStatses.size() > 0)
return unidadeStatses.get(0);
return null;
}
 
public UnidadeStats extremeUnidadeUnidadeMin()
{
List<UnidadeStats> unidadeStatses = getUnidadeStatsesUnidadeSortedMedia();
if(unidadeStatses.size() > 0)
return unidadeStatses.get(unidadeStatses.size()-1);
return null;
}
 
private List<UnidadeStats> getUnidadeStatsesUnidadeSortedMedia() {
List<UnidadeStats> unidadeStatses = getUnidadesStats();
Collections.sort(unidadeStatses, new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
double diff = o2.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia() - o1.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia();
if (diff < 0)
return -1;
if (diff > 0)
return 1;
return 0;
}
});
return unidadeStatses;
}
 
private List<UnidadeStats> getUnidadeStatsesDocenteSortedMedia() {
List<UnidadeStats> unidadeStatses = getUnidadesStats();
Collections.sort(unidadeStatses, new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
double diff = o2.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia() - o1.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia();
if (diff < 0)
return -1;
if (diff > 0)
return 1;
return 0;
}
});
return unidadeStatses;
}
 
/**************************************************
* ***** EXTREME Participacao Unidades *****
* ************************************************/
 
public ParticipacaoUnidade extremeParticipacaoUnidadeMax()
{
List<ParticipacaoUnidade> participacoes = getParticipacaoUnidadesSortedPercentagem();
if(participacoes.size() > 0)
return participacoes.get(0);
return null;
}
 
public ParticipacaoUnidade extremeParticipacaoUnidadeMin()
{
List<ParticipacaoUnidade> participacoes = getParticipacaoUnidadesSortedPercentagem();
if(participacoes.size() > 0)
return participacoes.get(participacoes.size()-1);
return null;
}
 
private List<ParticipacaoUnidade> getParticipacaoUnidadesSortedPercentagem() {
List<ParticipacaoUnidade> participacoes = getParticipacoesUnidades();
Collections.sort(participacoes, new Comparator<ParticipacaoUnidade>() {
@Override
public int compare(ParticipacaoUnidade o1, ParticipacaoUnidade o2) {
return o2.getParticiparamPercentagem() - o1.getParticiparamPercentagem();
}
});
return participacoes;
}
 
 
/**********************************
* EXTREME DIFF MEDIA
**********************************/
 
public PerguntaUnidadeStatAux extremeDiffMediaPerguntaMaxDocente()
{
List<PerguntaUnidadeStatAux> perguntas = new ArrayList<PerguntaUnidadeStatAux>();
for(UnidadeStats unidadeStats : unidadesStats)
{
for(PerguntaStats ps : unidadeStats.getUnidadeStatsGrupoDocente().getPerguntasStats())
{
cloneAndAddPerguntaAuxToList(perguntas, unidadeStats, ps);
}
}
sortPerguntaAuxDiffMediaCursos(perguntas);
if(perguntas.size() > 0)
return perguntas.get(0);
return null;
}
 
public PerguntaUnidadeStatAux extremeDiffMediaPerguntaMinDocente()
{
List<PerguntaUnidadeStatAux> perguntas = new ArrayList<PerguntaUnidadeStatAux>();
for(UnidadeStats unidadeStats : unidadesStats)
{
for(PerguntaStats ps : unidadeStats.getUnidadeStatsGrupoDocente().getPerguntasStats())
{
cloneAndAddPerguntaAuxToList(perguntas, unidadeStats, ps);
}
}
sortPerguntaAuxDiffMediaCursos(perguntas);
if(perguntas.size() > 0)
return perguntas.get(perguntas.size()-1);
return null;
}
 
public PerguntaUnidadeStatAux extremeDiffMediaPerguntaMaxUnidade()
{
List<PerguntaUnidadeStatAux> perguntas = new ArrayList<PerguntaUnidadeStatAux>();
for(UnidadeStats unidadeStats : unidadesStats)
{
for(PerguntaStats ps : unidadeStats.getUnidadeStatsGrupoUnidade().getPerguntasStats())
{
cloneAndAddPerguntaAuxToList(perguntas, unidadeStats, ps);
}
}
sortPerguntaAuxDiffMediaCursos(perguntas);
if(perguntas.size() > 0)
return perguntas.get(0);
return null;
}
 
public PerguntaUnidadeStatAux extremeDiffMediaPerguntaMinUnidade()
{
List<PerguntaUnidadeStatAux> perguntas = new ArrayList<PerguntaUnidadeStatAux>();
for(UnidadeStats unidadeStats : unidadesStats)
{
for(PerguntaStats ps : unidadeStats.getUnidadeStatsGrupoUnidade().getPerguntasStats())
{
cloneAndAddPerguntaAuxToList(perguntas, unidadeStats, ps);
}
}
sortPerguntaAuxDiffMediaCursos(perguntas);
if(perguntas.size() > 0)
return perguntas.get(perguntas.size()-1);
return null;
}
 
private void sortPerguntaAuxDiffMediaCursos(List<PerguntaUnidadeStatAux> perguntas) {
Collections.sort(perguntas, new Comparator<PerguntaUnidadeStatAux>() {
@Override
public int compare(PerguntaUnidadeStatAux o1, PerguntaUnidadeStatAux o2) {
double diff = o2.difMedia - o1.difMedia;
if (diff < 0) return -1;
if (diff > 0) return 1;
return 0;
}
});
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/docenteReportGuiaoAvaliacaoDesempenho.fo.xsl
New file
0,0 → 1,171
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/XSL/Format http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/fop/src/foschema/fop.xsd">
 
<xsl:import href="utilsReports.fo.xsl"/>
 
<!-- ############################################################# -->
<!-- 9 - CAPITULO GUIAO DESEMPENHO DOCENTE -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_guiao_avaliacao_desempenho">
<fo:block-container id="capGuiaoAvaliacaoDesempenho" padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">9 - Análise da qualidade do desempenho docente baseada no Guião da Avaliação do desempenho do pessoal docente do IPPortalegre </xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">teacherGuiao2.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<fo:block font-size="8pt" font-weight="bold" padding="5px">
IMPORTANTE: Este capitulo tem como objetivo auxiliar o cálculo da qualidade do desempenho docente.
O cálculo é baseado no guião de avaliação do desempenho do pessoal docente do IPP.
Questões pontuais relativas à alteração de regras de avaliação devem ser levadas em consideração pelas partes interessadas.
Neste sentido o uso dos dados aqui disponibilizados não é vinculativa, salvo indicações em contrário emitidas pelas entidades competentes.
</fo:block>
 
<fo:block font-size="8pt" margin-top="5px"><fo:inline text-decoration="underline">Excerto da secção 2.5. QUALIDADE DO DESEMPENHO DOCENTE do Guião da Avaliação do desempenho do pessoal docente do IPPortalegre à data de produção deste relatório:</fo:inline></fo:block>
<fo:block margin-top="5px" font-size="7pt" padding="5px" border="1px solid black" background-color="#FFFAE5">
Pontuação média obtida através da avaliação resultante dos inquéritos realizados a alunos. A comprovar mediante Declaração emitida pelo órgão ou gabinete responsável pelo tratamento dos dados.
<fo:block>
<fo:block font-weight="bold">Metodologia:</fo:block>
<fo:block>
Nos inquéritos de satisfação dos alunos sobre o funcionamento das unidades curriculares, será incluída uma questão do tipo "Apreciação global do docente"*, a ser avaliada por escala de Lickert com 5 níveis (Muito má a Muito boa).
</fo:block>
</fo:block>
 
<fo:block>
<fo:block font-weight="bold">Cálculo da pontuação:</fo:block>
<fo:block>
<fo:list-block>
<fo:list-item>
<fo:list-item-label end-indent="label-end()" >
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>Se o docente lecciona em várias UCs e em alguma delas não se dispõem de resultados dos inquéritos, a UC não será tida em consideração no cálculo da pontuação</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>Calcula-se a média ponderada de cada UC (j) e curso (i), utilizando a seguinte fórmula:</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="center" text-align="right">
<fo:block>Média ponderada = </fo:block>
</fo:table-cell>
<fo:table-cell display-align="center" text-align="left">
<fo:block padding-left="5px">
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/formulaQualidadeDesempenhoDocenteMedia.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto" content-width="120" src="{$src}"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:block>
Com: RM = resposta média à questão, TR = taxa de resposta (nº de respostas/nº de inscritos na UC/Turma do docente)
</fo:block>
</fo:block>
<fo:block font-size="6pt" font-weight="bold" padding="5px">
* Campo de Apreciação Global do Docente: considera-se neste relatório a média cálculada a partir de todas as respostas fornecidas no grupo de questões relativas ao "Docente".
</fo:block>
</fo:block>
 
<fo:block margin-top="5px">
<xsl:apply-templates select="//docenteAvaliacaoDesempenhoTable" mode="DataTable"/>
<fo:table>
<fo:table-body>
<fo:table-cell border="1px solid black">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">TR a transportar</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
<xsl:with-param name="textAlign">center</xsl:with-param>
</xsl:call-template>
<fo:block font-size="14pt" font-weight="bold" text-align="center" display-align="center">
<xsl:value-of select="//docenteAvaliacaoDesempenhoTRPrint"/>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/recycle.png')</xsl:variable>
<fo:external-graphic width="auto" margin="0" padding="0" padding-left="5px" height="auto" content-height="18" src="{$src}"/>
</fo:block>
 
</fo:table-cell>
<fo:table-cell border="1px solid black">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">RMxTR a transportar</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
<xsl:with-param name="textAlign">center</xsl:with-param>
</xsl:call-template>
<fo:block font-size="14pt" font-weight="bold" text-align="center" display-align="center">
<xsl:value-of select="//docenteAvaliacaoDesempenhoRMTRPrint"/>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/recycle.png')</xsl:variable>
<fo:external-graphic width="auto" margin="0" padding="0" padding-left="5px" height="auto" content-height="18" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border="1px solid black">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Média parcial nesta avaliação</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
<xsl:with-param name="textAlign">center</xsl:with-param>
</xsl:call-template>
<fo:block font-size="14pt" font-weight="bold" text-align="center" display-align="center">
<xsl:value-of select="//docenteAvaliacaoDesempenhoMediaPeriodoPrint"/>
</fo:block>
</fo:table-cell>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block font-size="7pt" padding="5px" margin-top="5px">
<fo:inline font-weight="bold">FÓRMULA:</fo:inline> O cálculo da média aqui aplicado considera apenas os periodos incluidos neste relatório.
Para obter o valor da média no final do triénio de avaliação, <fo:inline text-decoration="underline">os docentes deverão seguir as instruções dos orgãos competentes.</fo:inline>
À data da geração deste relatório a fórmula final deverá ser a seguinte: Fazer o somatório de todos os denominadores parciais
dos periodos de avaliação TR(PERIODOS), fornecidos em cada relatório, e também todas as parcelas RMxTR(PERIODOS)
de todos os periodos de avaliação, fornecidos também em cada relatório.
Para obter a média final bastará dividir os somatórios dos RMxTR(PERIODOS) pelos somatórios dos TR(PERIODOS).
</fo:block>
<fo:block font-size="10pt" padding="5px" margin-top="0">
<fo:inline font-weight="bold">Exemplo considerando apenas dois parciais de avaliação:</fo:inline>
<fo:list-block>
<fo:list-item>
<fo:list-item-label end-indent="label-end()" >
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>P1 - RMxTR a transportar 15,5 | TR a transportar 3,6.</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>P2 - RMxTR a transportar 16,5 | TR a transportar 3,7.</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>Avaliação Média Final - (15,5 + 16,5) / (3,6 + 3,7) = 4,507.</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
 
</xsl:template>
 
 
</xsl:stylesheet>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/report.fo.xsl
New file
0,0 → 1,209
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/XSL/Format http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/fop/src/foschema/fop.xsd">
<xsl:import href="utilsReports.fo.xsl"/>
 
 
<xsl:param name="site">http://localhost/bacoTESTE</xsl:param>
<xsl:param name="updateDate">EM FALTA</xsl:param>
 
 
<!--Neste caso o portador do unidadesStats -->
<xsl:template match="unidadesStats" mode="unidadePorUnidade">
<xsl:param name="CAP_PONTO"/>
<xsl:param name="CAP_ID"/>
<xsl:variable name="sizeCursos" select="count(./unidadeStats[not(nomeCurso/text() = preceding-sibling::unidadeStats/nomeCurso/text())])"/>
<xsl:for-each select="./unidadeStats[not(nomeCurso/text() = preceding-sibling::unidadeStats/nomeCurso/text())]">
<xsl:sort select="text()" data-type="text" />
<xsl:variable name="nomeCurso" select="nomeCurso/text()"/>
<xsl:variable name="cursoPos" select="position()"/>
<xsl:for-each select="../unidadeStats[nomeCurso/text() = $nomeCurso]">
<xsl:sort select="nomeUnidade/text()" data-type="text" />
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:if test="$cursoPos = 1 and position()=1"><xsl:attribute name="id"><xsl:value-of select="$CAP_ID"/></xsl:attribute></xsl:if>
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text"><xsl:value-of select="$CAP_PONTO"/> - Análise das questões individualmente em cada unidade</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">class.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text"><xsl:value-of select="$CAP_PONTO"/>.<xsl:value-of select="$cursoPos"/> - <xsl:value-of select="nomeCurso/text()"/> (<xsl:value-of select="./codigoCurso[1]/text()"/>) </xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">2px</xsl:with-param>
</xsl:call-template>
 
 
<fo:block-container padding="0" margin="0" id="UNIDADE_CURICULAR{codigoUnidade}">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text"><xsl:value-of select="$CAP_PONTO"/>.<xsl:value-of select="$cursoPos"/>.<xsl:value-of select="position()"/> - <xsl:value-of select="nomeUnidade/text()"/> (<xsl:value-of select="codigoUnidade/text()"/>) </xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="fontSize">12pt</xsl:with-param>
<xsl:with-param name="fontWeight">bold</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
 
<xsl:if test="unidadeStatsGrupoDocente/respostasTable">
<xsl:call-template name="subSubSubSeccaoBlue">
<xsl:with-param name="text">Respostas ao grupo de questões sobre o Docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="icon">teacherIcon.png</xsl:with-param>
</xsl:call-template>
 
<fo:block-container padding="0" margin-left="15px" margin="0" margin-bottom="5px">
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="unidadeStatsGrupoDocente/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$BLUE_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas no curso de <xsl:value-of select="nomeCurso"/>: <xsl:value-of select="unidadeStatsGrupoDocente/unidadesNoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas na media da <xsl:value-of select="nomeEscola"/>: <xsl:value-of select="unidadeStatsGrupoDocente/unidadesNaEscola"/>
</fo:block>
 
<fo:block padding="0" margin="0" margin-top="5px">
<xsl:apply-templates select="unidadeStatsGrupoDocente/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">do docente</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$BLUE_COLOR_SUB_SECTION"/>
<xsl:with-param name="smileHeight">15</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="fontSizeMedias">7pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:if>
 
 
 
 
<xsl:if test="unidadeStatsGrupoUnidade/respostasTable">
<xsl:call-template name="subSubSubSeccaoGreen">
<xsl:with-param name="text">Respostas ao grupo de questões sobre a Unidade</xsl:with-param>
<xsl:with-param name="marginTop">20px</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
 
<fo:block-container padding="0" margin-left="15px" margin="0" margin-bottom="5px">
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="unidadeStatsGrupoUnidade/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$GREEN_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
 
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas no curso de <xsl:value-of select="nomeCurso"/>: <xsl:value-of select="unidadeStatsGrupoUnidade/unidadesNoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas na <xsl:value-of select="nomeEscola"/>: <xsl:value-of select="unidadeStatsGrupoUnidade/unidadesNaEscola"/>
</fo:block>
 
<fo:block padding="0" margin="0" margin-top="5px">
<xsl:apply-templates select="unidadeStatsGrupoUnidade/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">do docente</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$GREEN_COLOR_SUB_SECTION"/>
<xsl:with-param name="smileHeight">15</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="fontSizeMedias">7pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:if>
 
<xsl:if test="unidadeStatsGrupoSalas/respostasTable">
<xsl:call-template name="subSubSubSeccaoRose">
<xsl:with-param name="text">Respostas ao grupo de questões sobre Instalações/Equipamentos/Outros Recursos</xsl:with-param>
<xsl:with-param name="marginTop">20px</xsl:with-param>
<xsl:with-param name="icon">cadeiraCadeira.png</xsl:with-param>
</xsl:call-template>
 
<fo:block-container padding="0" margin-left="15px" margin="0" margin-bottom="5px">
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="unidadeStatsGrupoSalas/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$ROSE_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
 
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas no curso de <xsl:value-of select="nomeCurso"/>: <xsl:value-of select="unidadeStatsGrupoSalas/unidadesNoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas na <xsl:value-of select="nomeEscola"/>: <xsl:value-of select="unidadeStatsGrupoSalas/unidadesNaEscola"/>
</fo:block>
 
<fo:block padding="0" margin="0" margin-top="5px">
<xsl:apply-templates select="unidadeStatsGrupoSalas/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">do docente</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$ROSE_COLOR_SUB_SECTION"/>
<xsl:with-param name="smileHeight">15</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="fontSizeMedias">7pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:if>
 
</xsl:for-each>
 
</xsl:for-each>
 
 
<!--
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text"><xsl:value-of select="$CAP_PONTO"/> - Análise das questões em cada unidade do docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">class.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text"><xsl:value-of select="$CAP_PONTO"/>.<xsl:value-of select="$sizeCursos+1"/>
- Análise conjunta de todas as unidades curriculares</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
//Grafico de barras laterais duplas com todas as unidades (grupos Docente + Unidade)
//Tabela com todas as Medias de Grupo de todas as unidades
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text"><xsl:value-of select="$CAP_PONTO"/>.<xsl:value-of select="$sizeCursos+1"/>.1
- Análise do grupo de questões relativas ao docente versus questões relativas às unidades para todas as unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//unidadesAnalGrDocenteGrUnidadeChartAndTable/tempFile"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="400" src="{$src}"/>
</fo:block>
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">5.<xsl:value-of select="$sizeCursos+1"/>.2
- Tabela com médias de curso e de escola na agregação das questões</xsl:with-param>
<xsl:with-param name="marginTop">10px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="//unidadesAnalGrDocenteGrUnidadeChartAndTable/dataTable" mode="DataTable">
 
</xsl:apply-templates>
-->
 
 
</xsl:template>
 
 
</xsl:stylesheet>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/docenteReport.fo.xsl
New file
0,0 → 1,1405
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/XSL/Format http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/fop/src/foschema/fop.xsd">
<xsl:import href="utilsReports.fo.xsl"/>
<xsl:import href="docenteReportGuiaoAvaliacaoDesempenho.fo.xsl"/>
 
<xsl:param name="site">http://localhost/bacoTESTE</xsl:param>
<xsl:param name="updateDate">EM FALTA</xsl:param>
<xsl:param name="anoLectivo"><xsl:value-of select="//anoLectivo"/></xsl:param>
<xsl:param name="nomeDocente"><xsl:value-of select="//nomeDocente"/></xsl:param>
<xsl:param name="numeroDocente"><xsl:value-of select="//numeroDocente"/></xsl:param>
 
 
<xsl:template match="/">
<!--<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="Helvetica" color="#58585A">-->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="Helvetica" color="black">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4Vertical" page-width="210mm" page-height="297mm"
margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"
reference-orientation="0">
<fo:region-body region-name="body" margin-top="40mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
 
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
 
<fo:simple-page-master master-name="A4VerticalFirstPage" page-width="210mm" page-height="297mm"
margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"
reference-orientation="0">
<fo:region-body region-name="body" margin-top="90mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
 
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
 
 
 
<fo:simple-page-master master-name="A4HorizontalRot" page-width="210mm" page-height="297mm"
margin-top="0.5cm" margin-bottom="0.5cm" margin-left="0.5cm" margin-right="0.5cm"
reference-orientation="90">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="A4Horizontal" page-width="297mm" page-height="210mm"
margin-top="0.5cm" margin-bottom="0.5cm" margin-left="0.5cm"
margin-right="0.5cm">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="15mm" margin-right="0"
margin-left="0"/>
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="pages">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="pages" page-position="any"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
 
<!--LAYOUT DE PAGINA ESCOLHIDO-->
 
<fo:page-sequence master-reference="A4VerticalFirstPage" initial-page-number="1">
<xsl:call-template name="firstpage"/>
</fo:page-sequence>
<fo:page-sequence master-reference="A4Vertical" initial-page-number="2">
<xsl:call-template name="indexPage"/>
</fo:page-sequence>
<fo:page-sequence master-reference="A4Vertical" initial-page-number="3">
<xsl:call-template name="page"/>
</fo:page-sequence>
 
 
</fo:root>
</xsl:template>
 
<xsl:template name="headerTeacher">
<xsl:call-template name="headerPae">
<xsl:with-param name="anoLectivo" select="$anoLectivo"/>
<xsl:with-param name="color_entity">#fff9ea</xsl:with-param>
<xsl:with-param name="title">Relatório de Avaliação Pedagógica</xsl:with-param>
<xsl:with-param name="subtitle">Avaliação pelos alunos do docente:</xsl:with-param>
<xsl:with-param name="subtitleRight">Resultados dos Inquéritos Pedagógicos</xsl:with-param>
<xsl:with-param name="entity"><xsl:value-of select="$nomeDocente"/> / Número: <xsl:value-of select="$numeroDocente"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="footerDefault">
<xsl:call-template name="footerPae">
<xsl:with-param name="sgqDoc">IPP.SI.QP-2-Rev.0</xsl:with-param>
<xsl:with-param name="updateDate" select="$updateDate"/>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="indexPage">
 
<xsl:call-template name="headerTeacher"/>
<xsl:call-template name="footerDefault"/>
 
 
<fo:flow flow-name="body">
 
<fo:block font-size="20px" padding="4px" margin-top="40px" text-align="center" >
<fo:inline text-decoration="underline" font-weight="bold">Índice</fo:inline>
</fo:block>
 
 
<fo:block text-align-last="justify" font-weight="bold" margin-bottom="5px">
<xsl:text> </xsl:text>
<fo:leader/>
Pag.
</fo:block>
 
<fo:block font-size="14px" text-align-last="justify">
<fo:basic-link internal-destination="capParticipacao">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">1</fo:inline>
<xsl:text> </xsl:text>
Participação nos questionários do docente
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capParticipacao" />
</fo:basic-link>
</fo:block>
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capCaracterizacao">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">2</fo:inline>
<xsl:text> </xsl:text>
Caracterização da amostra
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capCaracterizacao" />
</fo:basic-link>
</fo:block>
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capQuestoes">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">3</fo:inline>
<xsl:text> </xsl:text>
Análise das questões sobre o Docente
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capQuestoes" />
</fo:basic-link>
</fo:block>
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capQuestoesUnidades">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">4</fo:inline>
<xsl:text> </xsl:text>
Análise das questões sobre as Unidades do docente
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capQuestoesUnidades" />
</fo:basic-link>
</fo:block>
 
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capUnidades">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">5</fo:inline>
<xsl:text> </xsl:text>
Análise das questões em cada Unidade do Docente
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capUnidades" />
</fo:basic-link>
</fo:block>
 
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capDimensoes">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">6</fo:inline>
<xsl:text> </xsl:text>
Análise de Dimênsões de Avaliação
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capDimensoes" />
</fo:basic-link>
</fo:block>
 
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capProgressoes">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">7</fo:inline>
<xsl:text> </xsl:text>
Análise da Progressão do Docente
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capProgressoes" />
</fo:basic-link>
</fo:block>
 
 
 
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capForcasFraquezas">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">8</fo:inline>
<xsl:text> </xsl:text>
Análise dos Desempenhos Máximos e Mínimos
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capForcasFraquezas" />
</fo:basic-link>
</fo:block>
 
<fo:block font-size="14px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="capGuiaoAvaliacaoDesempenho">
<fo:inline font-weight="bold" padding-top="3px" padding-bottom="2px" padding-left="3px" padding-right="3px" margin-right="10px" border-bottom="1px solid #58585A" font-size="16px" color="white" background-color="#FFCA44">9</fo:inline>
<xsl:text> </xsl:text>
Cálculos da qualidade do desempenho docente baseada no Guião da Avaliação do desempenho do pessoal docente do IPPortalegre
<fo:leader leader-pattern="dots" />
<fo:page-number-citation ref-id="capGuiaoAvaliacaoDesempenho" />
</fo:basic-link>
</fo:block>
 
</fo:flow>
</xsl:template>
 
<xsl:template name="firstpage">
 
<xsl:call-template name="headerIpp"/>
<xsl:call-template name="footerDefault"/>
 
 
 
<fo:flow flow-name="body">
<fo:block border-bottom="8px solid #58585A" border-top="4px solid #58585A" font-size="26px" padding="6px" text-align="center" color="white" background-color="#FFCA44">
<fo:inline font-weight="bold"> Relatório de Avaliação Pedagógica</fo:inline>
</fo:block>
 
<fo:block font-size="20px" padding="4px" margin-top="40px" text-align="center" >
<fo:inline text-decoration="underline" font-weight="bold">Inquéritos Pedagógicos aos Alunos</fo:inline>
</fo:block>
 
<fo:block font-size="18px" padding="4px" margin-top="20px" text-align="center">
<fo:inline>Relatório Docente</fo:inline>
</fo:block>
 
<fo:block font-size="14px" padding="4px" margin-top="5px" text-align="center" background-color="#fff9ea">
<xsl:value-of select="$nomeDocente"/>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="2px" text-align="center">
<fo:inline>Docente Número: <xsl:value-of select="$numeroDocente"/></fo:inline>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="20px" text-align="center" >
<fo:inline><fo:wrapper white-space-treatment="preserve" font-weight="bold">Ano letivo: </fo:wrapper> <xsl:value-of select="$anoLectivo"/></fo:inline>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="20px" text-align="center" >
<fo:inline><fo:wrapper white-space-treatment="preserve" font-weight="bold">Periodos Considerados: </fo:wrapper> <xsl:for-each select="//semestres/string"><xsl:value-of select="."/>; </xsl:for-each></fo:inline>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="20px" text-align="center" >
<fo:inline><fo:wrapper white-space-treatment="preserve" font-weight="bold">Oferta Formativa Considerada: </fo:wrapper> <xsl:for-each select="//degrees/string"><xsl:value-of select="."/>; </xsl:for-each></fo:inline>
</fo:block>
</fo:flow>
</xsl:template>
 
<xsl:template name="page">
 
<xsl:call-template name="headerTeacher"/>
<xsl:call-template name="footerDefault"/>
 
<fo:flow flow-name="body">
 
 
<xsl:call-template name="CAP_participacao"/>
 
<xsl:call-template name="CAP_analise_questoes_DOCENTE"/>
 
<xsl:call-template name="CAP_analise_questoes_UNIDADE"/>
 
<xsl:call-template name="CAP_analise_unidades_INDIVIDUALMENTE"/>
 
<xsl:call-template name="CAP_analise_DIMENSOES"/>
 
<xsl:call-template name="CAP_progressoes"/>
 
<xsl:call-template name="CAP_forcas_e_fraquezas"/>
 
<xsl:call-template name="CAP_guiao_avaliacao_desempenho"/>
 
 
</fo:flow>
</xsl:template>
 
<!-- UTILITARIO PARA LINHAS NA TABELA DE FORCAS E FRAQUESAS -->
 
<xsl:template name="extremeComponentRow">
<xsl:param name="cols">4</xsl:param>
<xsl:param name="titleCol1"></xsl:param>
<xsl:param name="titleCol2"></xsl:param>
<xsl:param name="titleChart1"></xsl:param>
<xsl:param name="titleChart2"></xsl:param>
<xsl:param name="titleChart3"></xsl:param>
<xsl:param name="titleChart4"></xsl:param>
<xsl:param name="subTitleChart1"></xsl:param>
<xsl:param name="subTitleChart2"></xsl:param>
<xsl:param name="subTitleChart3"></xsl:param>
<xsl:param name="subTitleChart4"></xsl:param>
<xsl:param name="chart1"></xsl:param>
<xsl:param name="chart2"></xsl:param>
<xsl:param name="chart3"></xsl:param>
<xsl:param name="chart4"></xsl:param>
<fo:table-row>
<fo:table-cell padding="0" margin="0" number-columns-spanned="2">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text"><xsl:value-of select="$titleCol1"/></xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0" number-columns-spanned="2">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text"><xsl:value-of select="$titleCol2"/></xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<xsl:if test="$cols = '2'"><xsl:attribute name="number-columns-spanned">2</xsl:attribute></xsl:if>
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSubSeccaoSmallSpaces">
<xsl:with-param name="subText"><xsl:value-of select="$subTitleChart1"/></xsl:with-param>
<xsl:with-param name="text"><xsl:value-of select="$titleChart1"/></xsl:with-param>
<xsl:with-param name="icon"><xsl:if test="$cols = '4'">teacherIcon.png</xsl:if></xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<xsl:if test="$cols = '2'"><xsl:attribute name="number-columns-spanned">2</xsl:attribute></xsl:if>
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSubSeccaoSmallSpaces">
<xsl:with-param name="subText"><xsl:value-of select="$subTitleChart2"/></xsl:with-param>
<xsl:with-param name="text"><xsl:value-of select="$titleChart2"/></xsl:with-param>
<xsl:with-param name="icon"><xsl:if test="$cols = '4'">cadeiraConteudos.png</xsl:if></xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<xsl:if test="$cols = '4'">
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSubSeccaoSmallSpaces">
<xsl:with-param name="subText"><xsl:value-of select="$subTitleChart3"/></xsl:with-param>
<xsl:with-param name="text"><xsl:value-of select="$titleChart3"/></xsl:with-param>
<xsl:with-param name="icon"><xsl:if test="$cols = '4'">teacherIcon.png</xsl:if></xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0" text-align="center">
<xsl:call-template name="subSubSubSeccaoSmallSpaces">
<xsl:with-param name="subText"><xsl:value-of select="$subTitleChart4"/></xsl:with-param>
<xsl:with-param name="text"><xsl:value-of select="$titleChart4"/></xsl:with-param>
<xsl:with-param name="icon"><xsl:if test="$cols = '4'">cadeiraConteudos.png</xsl:if></xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</xsl:if>
</fo:table-row>
<fo:table-row>
<fo:table-cell padding="0" margin="0" text-align="center">
<xsl:if test="$cols = '2'"><xsl:attribute name="number-columns-spanned">2</xsl:attribute></xsl:if>
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="$chart1"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="60" src="{$src}">
</fo:external-graphic>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0" text-align="center">
<xsl:if test="$cols = '2'"><xsl:attribute name="number-columns-spanned">2</xsl:attribute></xsl:if>
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="$chart2"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="60" src="{$src}"/>
</fo:block>
</fo:table-cell>
<xsl:if test="$cols = '4'">
<fo:table-cell padding="0" margin="0" text-align="center">
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="$chart3"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="60" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0" text-align="center">
<fo:block margin="0" padding="0">
<xsl:variable name="src"><xsl:value-of select="$chart4"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="60" src="{$src}"/>
</fo:block>
</fo:table-cell>
</xsl:if>
</fo:table-row>
</xsl:template>
 
 
 
<!-- ############################################################# -->
<!-- 1 e 2 - CAPITULO ANALISE PARTICIPACAO PONTOS 1 e 2 -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_participacao">
<fo:block-container padding="0" margin="0" border="0" id="capParticipacao" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">1 - Participação</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Taxa Global de Participação aos Questionários do Docente</xsl:with-param>
</xsl:call-template>
 
 
<fo:block-container font-size="18" margin-left="10px" text-align="center" font-weight="bold">
<xsl:call-template name="barraPercentil">
<xsl:with-param name="valor" select="//questionariosReqRespondidosPercentagem"/>
<xsl:with-param name="colors">true</xsl:with-param>
<xsl:with-param name="backgroundColorPercentage" select="//questionariosReqRespondidosPercentagemColor"/>
</xsl:call-template>
</fo:block-container>
 
<fo:block margin-left="10px" margin-top="40px">
 
<fo:table width="100%" table-layout="fixed">
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell margin="0" padding="0">
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Taxa de Participação
</xsl:with-param>
</xsl:call-template>
<fo:block display-align="center" text-align="center" margin-left="10px">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoTaxaRespostaAlunos"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="250" src="{$src}"/>
</fo:block>
 
</fo:table-cell>
<fo:table-cell margin="0" padding="0">
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Taxa de Resposta a Questionarios
</xsl:with-param>
</xsl:call-template>
<fo:block display-align="center" text-align="center" margin-left="10px">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoTaxaRespostaQuestionarios"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="250" src="{$src}"/>
</fo:block>
 
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell margin="0" padding="0" padding-top="30px">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Taxa de Participação por Unidade Curricular
</xsl:with-param>
</xsl:call-template>
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaTaxaRespostaUnidade" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:table-cell>
 
<fo:table-cell margin="0" padding="0" padding-top="30px">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Contribuição de cada Unidade Curricular
</xsl:with-param>
</xsl:call-template>
<fo:block margin="0" margin-left="10px" padding="0" display-align="center" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoContribuicaoUnidades"/></xsl:variable>
<fo:external-graphic width="auto" margin="0" padding="0" height="auto" content-height="140" src="{$src}"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
 
 
<fo:block-container page-break-before="always" padding="0" margin="0" id="capCaracterizacao">
<xsl:call-template name="seccao">
<xsl:with-param name="text">2 - Caracterização da Amostra Recolhida</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
 
<fo:block text-align="center" margin-left="10px">
<fo:table width="100%" table-layout="fixed">
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Género
</xsl:with-param>
</xsl:call-template>
 
<fo:block>
<fo:table width="90%" table-layout="fixed" >
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:value-of select="//masculinoComResposta"/>
</fo:block>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/studentMale.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="120" src="{$src}"/>
</fo:block>
<fo:block>
<xsl:value-of select="//masculinoComRespostaPercent"/>%
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="//femininoComResposta"/>
</fo:block>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/studentFemale.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="120" src="{$src}"/>
</fo:block>
<fo:block>
<xsl:value-of select="//femininoComRespostaPercent"/>%
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
 
 
 
</fo:table-cell>
<fo:table-cell>
 
 
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Tipos de Alunos
</xsl:with-param>
</xsl:call-template>
 
<fo:block margin-top="5px">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoTiposAlunosComResposta"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="250" content-height="150" src="{$src}"/>
</fo:block>
 
 
 
</fo:table-cell>
 
</fo:table-row>
<fo:table-row>
<fo:table-cell>
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Idades
</xsl:with-param>
</xsl:call-template>
 
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaIdades" mode="DataTable"/>
</fo:block>
 
</fo:table-cell>
<fo:table-cell>
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Distritos
</xsl:with-param>
</xsl:call-template>
 
 
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaDistritos" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
 
</fo:table-cell>
 
</fo:table-row>
 
</fo:table-body>
</fo:table>
</fo:block>
 
</xsl:template>
 
 
 
 
<!-- ############################################################# -->
<!-- 3 - CAPITULO ANALISE QUESTOES AGREGADAS DOS DOCENTES -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_analise_questoes_DOCENTE">
<fo:block-container padding="0" margin="0" id="capQuestoes" page-break-before="always">
<xsl:call-template name="seccaoBlue">
<xsl:with-param name="text">3 - Análise das Questões sobre o Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">teacherIcon.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block-container padding="0" margin="0">
<xsl:call-template name="subSeccaoBlue">
<xsl:with-param name="text">3.1 - Gráficos de respostas agregadas de todas as unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:apply-templates select="//respostasAgregadasGrupoDocente/respostasAgregadasChartTable/respostasAgregadasCharts/chartsRow" mode="graficosPerguntas"/>
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoBlue">
<xsl:with-param name="text">3 - Análise das Questões sobre o Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">teacherIcon.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoBlue">
<xsl:with-param name="text">3.2 - Tabela de respostas agregadas de todas as unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="//respostasAgregadasGrupoDocente/respostasAgregadasChartTable/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Docentes avaliados nos cursos onde o docente leciona: <xsl:value-of select="//docentesNosCursos"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Docentes avaliados nas escolas onde o docente leciona: <xsl:value-of select="//docentesNasEscolas"/>
</fo:block>
 
<fo:block-container margin-top="20px" margin-bottom="5px">
<xsl:apply-templates select="//respostasAgregadasGrupoDocente/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">do docente</xsl:with-param>
</xsl:apply-templates>
</fo:block-container>
 
<!--Considerando Respostas Superiores a 2 segindos-->
<fo:block-container background-color="#aaaaaa" padding="5px" margin="0" margin-top="20px">
<fo:block-container padding="0" margin="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Considerando apenas respostas de tempo superior a 2 segundos (Estes dados são apenas para efeitos de comparação)</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//respostasAgregadasGrupoDocente/respostasAgregadasChartTable2Secs/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
 
</xsl:template>
 
 
 
 
<!-- ############################################################# -->
<!-- 4 - CAPITULO ANALISE QUESTOES AGREGADAS DAS UNIDADES CURRICULARES -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_analise_questoes_UNIDADE">
 
<fo:block-container padding="0" margin="0" id="capQuestoesUnidades" page-break-before="always">
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text">4 - Análise das questões sobre as Unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text">4.1 - Gráficos de respostas agregadas de todas as unidades</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<xsl:apply-templates select="//respostasAgregadasGrupoUnidade/respostasAgregadasChartTable/respostasAgregadasCharts/chartsRow" mode="graficosPerguntas"/>
 
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text">4 - Análise das questões sobre as Unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text">4.2 - Tabela de respostas agregadas de todas as unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
 
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="//respostasAgregadasGrupoUnidade/respostasAgregadasChartTable/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
 
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades avaliadas nos cursos onde o docente leciona: <xsl:value-of select="//unidadesNosCursos"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades avaliadas nas escolas onde o docente leciona: <xsl:value-of select="//unidadesNasEscolas"/>
</fo:block>
 
<fo:block-container margin-top="20px" margin-bottom="5px">
<xsl:apply-templates select="//respostasAgregadasGrupoUnidade/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">das unidades</xsl:with-param>
</xsl:apply-templates>
</fo:block-container>
 
<!--Considerando Respostas Superiores a 2 segindos-->
<fo:block-container background-color="#aaaaaa" padding="5px" margin="0" margin-top="20px">
<fo:block-container padding="0" margin="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Considerando apenas respostas de tempo superior a 2 segundos (Estes dados são apenas para efeitos de comparação)</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
 
<xsl:apply-templates select="//respostasAgregadasGrupoUnidade/respostasAgregadasChartTable2Secs/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:template>
 
 
 
 
<!-- ############################################################# -->
<!-- 5 - CAPITULO ANALISE UNIDADES INDIVIDUALMENTE -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_analise_unidades_INDIVIDUALMENTE">
<xsl:variable name="sizeCursos" select="count(//unidadesStats/unidadeStats[not(nomeCurso/text() = preceding-sibling::unidadeStats/nomeCurso/text())])"/>
<xsl:for-each select="//unidadesStats/unidadeStats[not(nomeCurso/text() = preceding-sibling::unidadeStats/nomeCurso/text())]">
<xsl:sort select="text()" data-type="text" />
<xsl:variable name="nomeCurso" select="nomeCurso/text()"/>
<xsl:variable name="cursoPos" select="position()"/>
<xsl:for-each select="../unidadeStats[nomeCurso/text() = $nomeCurso]">
<xsl:sort select="nomeUnidade/text()" data-type="text" />
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:if test="$cursoPos = 1 and position()=1"><xsl:attribute name="id">capUnidades</xsl:attribute></xsl:if>
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text">5 - Análise das questões em cada unidade do docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">class.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">5.<xsl:value-of select="$cursoPos"/> - <xsl:value-of select="nomeCurso/text()"/> (<xsl:value-of select="//unidadesStats/unidadeStats[nomeCurso=nomeCurso/text()]/codigoCurso[1]/text()"/>) </xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">2px</xsl:with-param>
</xsl:call-template>
 
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">5.<xsl:value-of select="$cursoPos"/>.<xsl:value-of select="position()"/> - <xsl:value-of select="nomeUnidade/text()"/> (<xsl:value-of select="codigoUnidade/text()"/>) </xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="fontSize">12pt</xsl:with-param>
<xsl:with-param name="fontWeight">bold</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subSubSubSeccaoBlue">
<xsl:with-param name="text">Respostas ao grupo de questões sobre o Docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="icon">teacherIcon.png</xsl:with-param>
</xsl:call-template>
 
<fo:block-container padding="0" margin-left="15px" margin="0" margin-bottom="5px">
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="unidadeStatsGrupoDocente/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$BLUE_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas no curso de <xsl:value-of select="nomeCurso"/>: <xsl:value-of select="unidadeStatsGrupoDocente/unidadesNoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas na media da <xsl:value-of select="nomeEscola"/>: <xsl:value-of select="unidadeStatsGrupoDocente/unidadesNaEscola"/>
</fo:block>
 
<fo:block padding="0" margin="0" margin-top="5px">
<xsl:apply-templates select="unidadeStatsGrupoDocente/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">do docente</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$BLUE_COLOR_SUB_SECTION"/>
<xsl:with-param name="smileHeight">15</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="fontSizeMedias">7pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
 
 
<xsl:call-template name="subSubSubSeccaoGreen">
<xsl:with-param name="text">Respostas ao grupo de questões sobre a Unidade</xsl:with-param>
<xsl:with-param name="marginTop">20px</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
 
<fo:block-container padding="0" margin-left="15px" margin="0" margin-bottom="5px">
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="unidadeStatsGrupoUnidade/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$GREEN_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
 
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas no curso de <xsl:value-of select="nomeCurso"/>: <xsl:value-of select="unidadeStatsGrupoUnidade/unidadesNoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades consideradas na <xsl:value-of select="nomeEscola"/>: <xsl:value-of select="unidadeStatsGrupoUnidade/unidadesNaEscola"/>
</fo:block>
 
<fo:block padding="0" margin="0" margin-top="5px">
<xsl:apply-templates select="unidadeStatsGrupoUnidade/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">do docente</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$GREEN_COLOR_SUB_SECTION"/>
<xsl:with-param name="smileHeight">15</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="fontSizeMedias">7pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:for-each>
</xsl:for-each>
 
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text">5 - Análise das questões em cada unidade do docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">class.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">5.<xsl:value-of select="$sizeCursos+1"/>
- Análise conjunta de todas as unidades curriculares</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
<!-- Grafico de barras laterais duplas com todas as unidades (grupos Docente + Unidade) -->
<!-- Tabela com todas as Medias de Grupo de todas as unidades -->
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">5.<xsl:value-of select="$sizeCursos+1"/>.1
- Análise do grupo de questões relativas ao docente versus questões relativas às unidades para todas as unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//unidadesAnalGrDocenteGrUnidadeChartAndTable/tempFile"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="400" src="{$src}"/>
</fo:block>
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">5.<xsl:value-of select="$sizeCursos+1"/>.2
- Tabela com médias de curso e de escola na agregação das questões</xsl:with-param>
<xsl:with-param name="marginTop">10px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="//unidadesAnalGrDocenteGrUnidadeChartAndTable/dataTable" mode="DataTable">
<!--<xsl:with-param name="ignoreColumns">true</xsl:with-param>-->
</xsl:apply-templates>
 
 
</xsl:template>
 
 
 
 
 
 
<!-- ############################################################# -->
<!-- 6 - Análise das Dimensões -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_analise_DIMENSOES">
<fo:block-container id="capDimensoes" padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoDimension">
<xsl:with-param name="text">6 - Análise de Dimênsões de Avaliação</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">dimension.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block font-size="7pt" padding="5px" margin-top="5px">
<fo:inline font-weight="bold">Dimensões:</fo:inline>
A análise dimensional consiste na agregação de um conjunto de questões
que partilham uma caracteristica. Essa caracteristica é considerado uma dimensão de avaliação.
As dimensões consideradas até esta secção foram as dimensões usuais "Docente" e "Unidade Curricular".
Nesta secção são analisadas as seguintes dimensões:
<fo:table padding="0" margin="0">
<fo:table-body>
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<fo:list-block>
<fo:list-item>
<fo:list-item-label end-indent="label-end()" >
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>(D) Relação Docente/Aluno
<xsl:if test="//respostasAgregadasGrupoDrelDocenteAluno/perguntasStats/perguntaStats/pergunta">
<fo:list-block>
<xsl:for-each select="//respostasAgregadasGrupoDrelDocenteAluno/perguntasStats/perguntaStats/pergunta">
<fo:list-item>
<fo:list-item-label end-indent="label-end()" >
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:for-each>
</fo:list-block>
</xsl:if>
</fo:block>
</fo:list-item-body>
</fo:list-item>
 
</fo:list-block>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block padding="0" margin="0">
<fo:list-block>
 
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>(D) Rigor e Profissionalismo do Docente
<xsl:if test="//respostasAgregadasGrupoDdocenteProf/perguntasStats/perguntaStats/pergunta">
<fo:list-block>
<xsl:for-each select="//respostasAgregadasGrupoDdocenteProf/perguntasStats/perguntaStats/pergunta">
<fo:list-item>
<fo:list-item-label end-indent="label-end()" >
<fo:block text-align="right">•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:for-each>
</fo:list-block>
</xsl:if>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
 
 
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">6.1
- Análise das dimensões face aos cursos e escolas onde o docente leciona</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
 
<fo:table padding="0" margin="0">
<fo:table-column column-width="60%"/>
<fo:table-column/>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//dimensoesGeralChartAndTable/tempFile"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="300" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block padding="0" margin="0">
<xsl:apply-templates select="//dimensoesGeralChartAndTable/dataTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">6.2
- Análise das dimensões para todas as unidades do docente</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//unidadesAnalGrRelAlunoGrProfDoceChartAndTable/tempFile"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="400" src="{$src}"/>
</fo:block>
 
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">6.3
- Tabela com médias de curso e de escola na agregação das diensões</xsl:with-param>
<xsl:with-param name="marginTop">10px</xsl:with-param>
<xsl:with-param name="marginBottom">5px</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="//unidadesAnalGrRelAlunoGrProfDoceChartAndTable/dataTable" mode="DataTable">
<!--<xsl:with-param name="ignoreColumns">true</xsl:with-param>-->
</xsl:apply-templates>
 
 
</fo:block>
 
</xsl:template>
 
 
 
 
 
 
 
 
 
<!-- ############################################################# -->
<!-- 7 - CAPITULO PROGRESSOES -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_progressoes">
 
<fo:block-container id="capProgressoes" padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - Progressão do Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">teacherProgression.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block font-size="7pt" padding="5px" margin-top="5px">
<fo:inline font-weight="bold">Progressão:</fo:inline>
A análise de progressão dimensional do docente mostra a sua média da agragação de todas as respostas nos grupos dimensionais em foco ( Docente, Unidade, (D) Relação Docente/Aluno, (D) Profissionalismo e Rigor do Docente), em todas as unidades curriculares, em todas as perguntas, ao longo dos periodos de avaliação já realizados com este sistema. Cada relatório futuro irá ter uma atualização desta informação.
</fo:block>
 
<fo:table width="100%" table-layout="fixed" margin="0" padding="0">
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccaoBlue">
<xsl:with-param name="text">Componentes relativas ao Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="icon">teacherIcon.png</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text">Componentes relativas aos Conteúdos</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Progressão da média das componentes relativas ao docente face à média do curso</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Progressão da média das componentes relativas aos conteúdos face à média do curso</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//progressaoAgregadasDocentesVsCurso"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="300" content-height="150" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0" text-align="center">
<fo:block margin="0" padding="0">
<xsl:variable name="src"><xsl:value-of select="//progressaoAgregadasUnidadesVsCurso"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="300" content-height="150" src="{$src}"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
 
 
 
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0" margin-top="20px">
 
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
 
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccaoDimension">
<xsl:with-param name="text">Progressão da Dimensão da Relação do Docente/Aluno</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="icon">dimension.png</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccaoDimension">
<xsl:with-param name="text">Progressão da Dimensão do Rigor e Profissionalismo do Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="icon">dimension.png</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Progressão da média dimensional face à média do curso</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Progressão da média dimensional face à média do curso</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
 
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//progressaoAgregadasDocentesDrelAlunoVsCurso"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="300" content-height="150" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0" text-align="center">
<fo:block margin="0" padding="0">
<xsl:variable name="src"><xsl:value-of select="//progressaoAgregadasDocentesDprofDocenteVsCurso"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="300" content-height="150" src="{$src}"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:template>
 
 
 
 
 
<!-- ############################################################# -->
<!-- 8 - CAPITULO FORCAS E FRAQUEZAS -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_forcas_e_fraquezas">
<!--FORÇAS E FRAQUEZAS -->
 
<fo:block-container id="capForcasFraquezas" padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">8 - Desempenhos Máximos e Mínimos</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">forcasFraquezasTeacher.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:table width="100%" table-layout="fixed" margin="0" padding="0">
<fo:table-column column-width="25%" background-color="#CEFFD2"/>
<fo:table-column column-width="25%" background-color="#CEFFD2"/>
<fo:table-column column-width="25%" background-color="#FFE4DF"/>
<fo:table-column column-width="25%" background-color="#FFE4DF"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding="0" margin="0" number-columns-spanned="2">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Máximos de Desempenho</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0" number-columns-spanned="2">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Mínimos de Desempenho</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Grupo Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Grupo Unidades</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Grupo Docente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="0" margin="0">
<fo:block margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Grupo Unidades</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="marginBottom">1px</xsl:with-param>
<xsl:with-param name="marginLeft">0</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:call-template name="extremeComponentRow">
<xsl:with-param name="titleCol1">Melhor Componente Absoluta</xsl:with-param>
<xsl:with-param name="titleCol2">Pior Componente Absoluta</xsl:with-param>
<xsl:with-param name="titleChart1"><xsl:value-of select="//extremePerguntaAbsolutaAvgMaxDocente/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart1"><xsl:value-of select="//extremePerguntaAbsolutaAvgMaxDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart1"><xsl:value-of select="//extremePerguntaAbsolutaAvgMaxDocente/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart2"><xsl:value-of select="//extremePerguntaAbsolutaAvgMaxUnidade/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart2"><xsl:value-of select="//extremePerguntaAbsolutaAvgMaxUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart2"><xsl:value-of select="//extremePerguntaAbsolutaAvgMaxUnidade/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart3"><xsl:value-of select="//extremePerguntaAbsolutaAvgMinDocente/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart3"><xsl:value-of select="//extremePerguntaAbsolutaAvgMinDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart3"><xsl:value-of select="//extremePerguntaAbsolutaAvgMinDocente/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart4"><xsl:value-of select="//extremePerguntaAbsolutaAvgMinUnidade/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart4"><xsl:value-of select="//extremePerguntaAbsolutaAvgMinUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart4"><xsl:value-of select="//extremePerguntaAbsolutaAvgMinUnidade/tempFile"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="extremeComponentRow">
<xsl:with-param name="titleCol1">Melhor Componente Agregada (Media Unidades)</xsl:with-param>
<xsl:with-param name="titleCol2">Pior Componente Agregada (Media Unidades)</xsl:with-param>
 
<xsl:with-param name="titleChart1"><xsl:value-of select="//extremePerguntaAgregadaAvgMaxDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart1"><xsl:value-of select="//extremePerguntaAgregadaAvgMaxDocente/tempFile"/></xsl:with-param>
 
<xsl:with-param name="titleChart2"><xsl:value-of select="//extremePerguntaAgregadaAvgMaxUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart2"><xsl:value-of select="//extremePerguntaAgregadaAvgMaxUnidade/tempFile"/></xsl:with-param>
 
<xsl:with-param name="titleChart3"><xsl:value-of select="//extremePerguntaAgregadaAvgMinDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart3"><xsl:value-of select="//extremePerguntaAgregadaAvgMinDocente/tempFile"/></xsl:with-param>
 
<xsl:with-param name="titleChart4"><xsl:value-of select="//extremePerguntaAgregadaAvgMinUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart4"><xsl:value-of select="//extremePerguntaAgregadaAvgMinUnidade/tempFile"/></xsl:with-param>
</xsl:call-template>
 
 
<xsl:call-template name="extremeComponentRow">
<xsl:with-param name="titleCol1">Melhor Unidade do Docente</xsl:with-param>
<xsl:with-param name="titleCol2">Pior Unidade do Docente</xsl:with-param>
 
<xsl:with-param name="titleChart1"><xsl:value-of select="//extremeUnitAvgMaxDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart1"><xsl:value-of select="//extremeUnitAvgMaxDocente/tempFile"/></xsl:with-param>
 
<xsl:with-param name="titleChart2"><xsl:value-of select="//extremeUnitAvgMaxUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart2"><xsl:value-of select="//extremeUnitAvgMaxUnidade/tempFile"/></xsl:with-param>
 
<xsl:with-param name="titleChart3"><xsl:value-of select="//extremeUnitAvgMinDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart3"><xsl:value-of select="//extremeUnitAvgMinDocente/tempFile"/></xsl:with-param>
 
<xsl:with-param name="titleChart4"><xsl:value-of select="//extremeUnitAvgMinUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart4"><xsl:value-of select="//extremeUnitAvgMinUnidade/tempFile"/></xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="extremeComponentRow">
<xsl:with-param name="titleCol1">Melhor desempenho face à Média do Curso</xsl:with-param>
<xsl:with-param name="titleCol2">Pior desempenho face à Média do Curso</xsl:with-param>
 
<xsl:with-param name="titleChart1"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMaxDocente/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart1"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMaxDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart1"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMaxDocente/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart2"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMaxUnidade/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart2"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMaxUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart2"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMaxUnidade/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart3"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMinDocente/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart3"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMinDocente/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart3"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMinDocente/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart4"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMinUnidade/subTitle"/></xsl:with-param>
<xsl:with-param name="subTitleChart4"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMinUnidade/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart4"><xsl:value-of select="//extremePerguntaAbsolutaDiffAvgMinUnidade/tempFile"/></xsl:with-param>
 
</xsl:call-template>
 
 
<xsl:call-template name="extremeComponentRow">
<xsl:with-param name="titleCol1">Unidade com mais respostas</xsl:with-param>
<xsl:with-param name="titleCol2">Unidade com menos respostas </xsl:with-param>
<xsl:with-param name="cols">2</xsl:with-param>
<xsl:with-param name="titleChart1"><xsl:value-of select="//extremeParticipacaoMax/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart1"><xsl:value-of select="//extremeParticipacaoMax/tempFile"/></xsl:with-param>
<xsl:with-param name="titleChart2"><xsl:value-of select="//extremeParticipacaoMin/chartTitle"/></xsl:with-param>
<xsl:with-param name="chart2"><xsl:value-of select="//extremeParticipacaoMin/tempFile"/></xsl:with-param>
</xsl:call-template>
 
</fo:table-body>
</fo:table>
</xsl:template>
 
</xsl:stylesheet>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/utilsReports.fo.xsl
New file
0,0 → 1,1247
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/XSL/Format http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/fop/src/foschema/fop.xsd">
<xsl:param name="site">http://localhost/bacoTESTE</xsl:param>
<xsl:param name="updateDate">EM FALTA</xsl:param>
 
 
<xsl:variable name="STD_COLOR_SECTION">#FFEAAE</xsl:variable>
<xsl:variable name="GREEN_COLOR_SECTION">#DDFCB1</xsl:variable>
<xsl:variable name="BLUE_COLOR_SECTION">#B2E6FE</xsl:variable>
<xsl:variable name="DIMENSION_COLOR_SECTION">#E29BD4</xsl:variable>
<xsl:variable name="ROSE_COLOR_SECTION">#DF7480</xsl:variable>
 
<xsl:variable name="STD_COLOR_SUB_SECTION">#D6D9BC</xsl:variable>
<xsl:variable name="GREEN_COLOR_SUB_SECTION">#D0FCCD</xsl:variable>
<xsl:variable name="BLUE_COLOR_SUB_SECTION">#CFF6FE</xsl:variable>
<xsl:variable name="DIMENSION_COLOR_SUB_SECTION">#FFAFF0</xsl:variable>
<xsl:variable name="ROSE_COLOR_SUB_SECTION">#FF9DA9</xsl:variable>
 
<xsl:template name="indexEntry">
<xsl:param name="id"></xsl:param>
<xsl:param name="sectionNumber"></xsl:param>
<xsl:param name="sectionTitle"></xsl:param>
<xsl:param name="backgroundColorNumber">#FFCA44</xsl:param>
<xsl:param name="colorNumber">white</xsl:param>
<xsl:param name="borderNumber">1px solid #58585A</xsl:param>
<xsl:param name="leaderPattern">dots</xsl:param>
<fo:block font-size="12px" text-align-last="justify" margin-top="5px">
<fo:basic-link internal-destination="{$id}">
<fo:inline font-weight="bold"
padding-top="3px"
padding-bottom="2px"
padding-left="3px"
padding-right="3px"
margin-right="10px"
border-bottom="{$borderNumber}"
color="{$colorNumber}"
background-color="{$backgroundColorNumber}"><xsl:value-of select="$sectionNumber"/></fo:inline>
<xsl:text> </xsl:text>
<xsl:value-of select="$sectionTitle"/>
<fo:leader leader-pattern="{$leaderPattern}" />
<fo:page-number-citation ref-id="{$id}" />
</fo:basic-link>
</fo:block>
</xsl:template>
<xsl:template name="subIndexEntry">
<xsl:param name="id"></xsl:param>
<xsl:param name="sectionNumber"></xsl:param>
<xsl:param name="sectionTitle"></xsl:param>
<xsl:param name="backgroundColorNumber">white</xsl:param>
<xsl:param name="colorNumber">black</xsl:param>
<xsl:param name="borderNumber">0</xsl:param>
<xsl:param name="leaderPattern">dots</xsl:param>
<fo:block font-size="10px" text-align-last="justify" margin-top="5px" margin-left="20px" padding-left="20px">
<fo:basic-link internal-destination="{$id}">
<fo:inline font-weight="bold"
padding-top="3px"
padding-bottom="2px"
padding-left="3px"
padding-right="3px"
margin-right="10px"
border-bottom="{$borderNumber}"
color="{$colorNumber}"
background-color="{$backgroundColorNumber}">
<xsl:value-of select="$sectionNumber"/>
</fo:inline>
<xsl:text> </xsl:text>
<xsl:value-of select="$sectionTitle"/>
<fo:leader leader-pattern="{$leaderPattern}" />
<fo:page-number-citation ref-id="{$id}" />
</fo:basic-link>
</fo:block>
</xsl:template>
 
<xsl:template name="headerIpp">
<fo:static-content flow-name="header">
<fo:block text-align="left">
<fo:table width="100%" table-layout="fixed" border-bottom="1px solid black">
<fo:table-column column-width="100%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/layout/themes/ipp/logo.jpg')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="80" src="{$src}">
</fo:external-graphic>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:static-content>
</xsl:template>
 
<xsl:template name="headerPae">
<xsl:param name="color_entity">#fff9ea</xsl:param>
<xsl:param name="entity">Joaquim José</xsl:param>
<xsl:param name="title">Relatório de Avaliação Pedagógica</xsl:param>
<xsl:param name="subtitle">Avaliação pelos alunos do docente:</xsl:param>
<xsl:param name="subtitleRight">Resultados dos Inquéritos Pedagógicos</xsl:param>
<xsl:param name="anoLectivo">000000</xsl:param>
<fo:static-content flow-name="header">
<fo:block text-align="left" border-bottom="1px solid #58585A">
<fo:table width="100%" table-layout="fixed" >
<fo:table-column column-width="80%"/>
<fo:table-column column-width="20%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/layout/themes/ipp/logo.jpg')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="40" src="{$src}">
</fo:external-graphic>
</fo:block>
<fo:block font-size="10px" padding="0px" text-align="left">
<fo:inline font-weight="bold"><xsl:value-of select="$title"/></fo:inline>
</fo:block>
<fo:block font-size="10px" padding="0px" margin-top="0px" text-align="left" >
<fo:inline><xsl:value-of select="$subtitle"/></fo:inline>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-size="10px" text-align="right" >
<xsl:value-of select="$subtitleRight"/>
</fo:block>
<fo:block font-size="10px" padding="0px" margin-top="0px" text-align="right" >
<fo:inline font-weight="bold">Ano letivo:</fo:inline> <xsl:value-of select="$anoLectivo"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row background-color="{$color_entity}">
<fo:table-cell>
<fo:block font-size="12px" padding="2px" margin-top="0px" >
<fo:inline text-align="left"><xsl:value-of select="$entity"/></fo:inline>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-size="12px" padding="2px" margin-top="0px" text-align="right" >
<fo:inline>Pagina: <fo:page-number/></fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:static-content>
</xsl:template>
<xsl:template name="footerPae">
<xsl:param name="sgqDoc">IPP.SI.QP-2-Rev.0</xsl:param>
<xsl:param name="updateDate">EM FALTA</xsl:param>
<fo:static-content flow-name="footer">
<fo:table width="100%" table-layout="fixed" border-top="1px solid black" font-size="6.5pt">
<fo:table-column column-width="20%"/>
<fo:table-column column-width="80%"/>
 
 
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-top="3pt">
<fo:block>
Atualizado a
<xsl:value-of select="$updateDate"/> / Página
<fo:page-number/>
</fo:block>
<fo:block font-size="5pt">
<xsl:value-of select="$sgqDoc"/>
</fo:block>
 
</fo:table-cell>
<fo:table-cell padding-top="3pt">
<fo:block font-size="6pt" text-align="right">
http://pae.ipportalegre.pt | gerado pela plataforma ipp-pae® 2016
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:static-content>
</xsl:template>
 
<!-- SECCOES -->
<xsl:template name="seccao">
<xsl:param name="text"/>
<xsl:param name="marginTop">0</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="seccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$STD_COLOR_SECTION"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="seccaoGreen">
<xsl:param name="text"/>
<xsl:param name="marginTop">0</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="seccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$GREEN_COLOR_SECTION"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="seccaoBlue">
<xsl:param name="text"/>
<xsl:param name="marginTop">0</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="seccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$BLUE_COLOR_SECTION"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="seccaoDimension">
<xsl:param name="text"/>
<xsl:param name="marginTop">0</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="seccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$DIMENSION_COLOR_SECTION"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="seccaoRose">
<xsl:param name="text"/>
<xsl:param name="marginTop">0</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="seccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$ROSE_COLOR_SECTION"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="seccaoGen">
<xsl:param name="text"/>
<xsl:param name="marginTop">0</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="backcolor"><xsl:value-of select="$STD_COLOR_SECTION"/></xsl:param>
<fo:block padding="0" padding-left="0" margin="0" margin-top="{$marginTop}">
<fo:table width="100%" table-layout="fixed" border="0" margin="0" padding="0">
<fo:table-column column-width="90%"/>
<fo:table-column column-width="10%"/>
<fo:table-body>
<fo:table-row >
<fo:table-cell margin="0"
padding="2px"
background-color="{$backcolor}"
display-align="center">
<fo:block
font-size="12px"
font-weight="bold"
text-align="left"
margin="0"
padding="0">
<xsl:value-of select="$text"/>
</fo:block>
</fo:table-cell>
<fo:table-cell margin="0" padding="0" display-align="center" text-align="right" padding-right="5px">
<fo:block margin="0" padding="0">
<xsl:if test="$icon and $icon != ''">
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/<xsl:value-of select="$icon"/>')</xsl:variable>
<fo:external-graphic height="auto"
width="auto"
margin="0"
padding="0"
content-height="20" src="{$src}"/>
</xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</xsl:template>
 
<!--SUB SECCOES-->
<xsl:template name="subSeccao">
<xsl:param name="text"/>
<xsl:param name="marginTop">8px</xsl:param>
<xsl:param name="marginBottom">20px</xsl:param>
<xsl:param name="marginLeft">10px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="textAlign">left</xsl:param>
<xsl:call-template name="subSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$STD_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="textAlign" select="$textAlign"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSeccaoGreen">
<xsl:param name="text"/>
<xsl:param name="marginTop">8px</xsl:param>
<xsl:param name="marginBottom">20px</xsl:param>
<xsl:param name="marginLeft">10px</xsl:param>
<xsl:param name="textAlign">left</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$GREEN_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="textAlign" select="$textAlign"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSeccaoBlue">
<xsl:param name="text"/>
<xsl:param name="marginTop">8px</xsl:param>
<xsl:param name="marginBottom">20px</xsl:param>
<xsl:param name="marginLeft">10px</xsl:param>
<xsl:param name="textAlign">left</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$BLUE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="textAlign" select="$textAlign"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSeccaoDimension">
<xsl:param name="text"/>
<xsl:param name="marginTop">8px</xsl:param>
<xsl:param name="marginBottom">20px</xsl:param>
<xsl:param name="marginLeft">10px</xsl:param>
<xsl:param name="textAlign">left</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$DIMENSION_COLOR_SECTION"/></xsl:with-param>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="textAlign" select="$textAlign"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSeccaoRose">
<xsl:param name="text"/>
<xsl:param name="marginTop">8px</xsl:param>
<xsl:param name="marginBottom">20px</xsl:param>
<xsl:param name="marginLeft">10px</xsl:param>
<xsl:param name="textAlign">left</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$ROSE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="textAlign" select="$textAlign"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSeccaoGen">
<xsl:param name="text"/>
<xsl:param name="marginTop">8px</xsl:param>
<xsl:param name="marginBottom">20px</xsl:param>
<xsl:param name="backcolor"></xsl:param>
<xsl:param name="marginLeft">10px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="columnIconSize">10%</xsl:param>
<xsl:param name="fontSize">10px</xsl:param>
<xsl:param name="fontWeight">normal</xsl:param>
<xsl:param name="textAlign">left</xsl:param>
<fo:table width="100%" table-layout="fixed" border="0" margin="0" padding="0" margin-bottom="{$marginBottom}" margin-top="{$marginTop}" margin-left="{$marginLeft}">
<fo:table-column/>
<xsl:if test="$icon and $icon != ''">
<fo:table-column column-width="{$columnIconSize}"/>
</xsl:if>
<fo:table-body>
<fo:table-row>
<fo:table-cell
padding="0"
padding-top="3px"
padding-bottom="3px"
padding-left="5px"
display-align="center"
margin="0">
<xsl:if test="$backcolor"><xsl:attribute name="background-color"><xsl:value-of select="$backcolor"/></xsl:attribute></xsl:if>
<fo:block
font-size="{$fontSize}"
font-weight="{$fontWeight}"
text-align="{$textAlign}"
margin="0" padding="0"
>
<xsl:value-of select="$text"/>
</fo:block>
</fo:table-cell>
<xsl:if test="$icon and $icon != ''">
<fo:table-cell margin="0" padding="0" padding-top="2px" display-align="center" text-align="right" padding-left="2px" padding-right="0">
<xsl:if test="$backcolor"><xsl:attribute name="background-color"><xsl:value-of select="$backcolor"/></xsl:attribute></xsl:if>
<fo:block margin="0" padding="0" display-align="center">
<xsl:if test="$icon and $icon != ''">
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/<xsl:value-of select="$icon"/>')</xsl:variable>
<fo:external-graphic display-align="center" height="auto" width="auto"
content-height="15px" margin="0" padding="0" src="{$src}"/>
</xsl:if>
</fo:block>
</fo:table-cell>
</xsl:if>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:template>
 
<!-- SUB SUB SECCOES -->
<xsl:template name="subSubSeccao">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="fontSize">8pt</xsl:param>
<xsl:param name="fontWeight">normal</xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="marginBottom">5px</xsl:param>
<xsl:call-template name="subSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$STD_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="fontSize" select="$fontSize"/>
<xsl:with-param name="fontWeight" select="$fontWeight"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSeccaoBlue">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="fontSize">8pt</xsl:param>
<xsl:param name="fontWeight">normal</xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="marginBottom">5px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$BLUE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="fontSize" select="$fontSize"/>
<xsl:with-param name="fontWeight" select="$fontWeight"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="icon" select="$icon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSeccaoGreen">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="fontSize">8pt</xsl:param>
<xsl:param name="fontWeight">normal</xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="marginBottom">5px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$GREEN_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="fontSize" select="$fontSize"/>
<xsl:with-param name="fontWeight" select="$fontWeight"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="icon" select="$icon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSeccaoRose">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="fontSize">8pt</xsl:param>
<xsl:param name="fontWeight">normal</xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="marginBottom">5px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$ROSE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="fontSize" select="$fontSize"/>
<xsl:with-param name="fontWeight" select="$fontWeight"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="marginBottom" select="$marginBottom"/>
<xsl:with-param name="icon" select="$icon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSeccaoGen">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="backcolor"></xsl:param>
<xsl:param name="fontSize">8pt</xsl:param>
<xsl:param name="fontWeight">normal</xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="marginBottom">5px</xsl:param>
<xsl:param name="columnIconSize">5%</xsl:param>
<xsl:param name="icon"></xsl:param>
 
 
<fo:block margin-left="{$marginLeft}" margin-top="{$marginTop}" padding="0" padding-left="5px" margin="0" margin-bottom="{$marginBottom}">
<fo:table width="100%" table-layout="fixed" border="0" margin="0" padding="0">
<fo:table-column/>
<xsl:if test="$icon and $icon != ''">
<fo:table-column column-width="{$columnIconSize}"/>
</xsl:if>
<fo:table-body>
<fo:table-row>
<fo:table-cell
padding="0"
display-align="center"
margin="0">
<xsl:if test="$backcolor"><xsl:attribute name="background-color"><xsl:value-of select="$backcolor"/></xsl:attribute></xsl:if>
<fo:block
font-size="{$fontSize}"
font-weight="{$fontWeight}"
text-align="left"
margin="0" padding="0"
>
<xsl:value-of select="$text"/>
</fo:block>
</fo:table-cell>
<xsl:if test="$icon and $icon != ''">
<fo:table-cell margin="0" padding="0" display-align="center" text-align="right" padding-left="2px" padding-right="0">
<fo:block margin="0" padding="0" display-align="center">
<xsl:if test="$icon and $icon != ''">
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/<xsl:value-of select="$icon"/>')</xsl:variable>
 
<fo:external-graphic display-align="center" height="auto" width="auto"
content-height="15px" margin="0" padding="0" src="{$src}"/>
</xsl:if>
</fo:block>
</fo:table-cell>
</xsl:if>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</xsl:template>
 
<!--SUB SUB SUB SECCOES-->
<xsl:template name="subSubSubSeccao">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="paddingRightBlock">30px</xsl:param>
<xsl:param name="paddingRightIcon">5px</xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$STD_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="paddingRightBlock" select="$paddingRightBlock"/>
<xsl:with-param name="paddingRightIcon" select="$paddingRightIcon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoBlue">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="paddingRightBlock">30px</xsl:param>
<xsl:param name="paddingRightIcon">5px</xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$BLUE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="paddingRightBlock" select="$paddingRightBlock"/>
<xsl:with-param name="paddingRightIcon" select="$paddingRightIcon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoGreen">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="paddingRightBlock">30px</xsl:param>
<xsl:param name="paddingRightIcon">5px</xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$GREEN_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="paddingRightBlock" select="$paddingRightBlock"/>
<xsl:with-param name="paddingRightIcon" select="$paddingRightIcon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoRose">
<xsl:param name="text"/>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="paddingRightBlock">30px</xsl:param>
<xsl:param name="paddingRightIcon">5px</xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop" select="$marginTop"/>
<xsl:with-param name="backcolor"><xsl:value-of select="$ROSE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="marginLeft" select="$marginLeft"/>
<xsl:with-param name="paddingRightBlock" select="$paddingRightBlock"/>
<xsl:with-param name="paddingRightIcon" select="$paddingRightIcon"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoGreenSmallSpaces">
<xsl:param name="text"/>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop">1px</xsl:with-param>
<xsl:with-param name="backcolor"><xsl:value-of select="$GREEN_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="paddingRightBlock">0</xsl:with-param>
<xsl:with-param name="paddingRightIcon">0</xsl:with-param>
<xsl:with-param name="marginBottomBlock">0</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="iconVerticalAlign">before</xsl:with-param>
<xsl:with-param name="iconWidth">8px</xsl:with-param>
<xsl:with-param name="columnIconSize">10px</xsl:with-param>
<xsl:with-param name="paddingLeftIcon">0</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoBlueSmallSpaces">
<xsl:param name="text"/>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="marginTop">1px</xsl:with-param>
<xsl:with-param name="backcolor"><xsl:value-of select="$BLUE_COLOR_SUB_SECTION"/></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="marginLeft">0</xsl:with-param>
<xsl:with-param name="paddingRightBlock">0</xsl:with-param>
<xsl:with-param name="paddingRightIcon">0</xsl:with-param>
<xsl:with-param name="marginBottomBlock">0</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="iconVerticalAlign">before</xsl:with-param>
<xsl:with-param name="iconWidth">8px</xsl:with-param>
<xsl:with-param name="columnIconSize">10px</xsl:with-param>
<xsl:with-param name="paddingLeftIcon">0</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoSmallSpaces">
<xsl:param name="text"/>
<xsl:param name="subText"></xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:call-template name="subSubSubSeccaoGen">
<xsl:with-param name="text" select="$text"/>
<xsl:with-param name="subText" select="$subText"/>
<xsl:with-param name="marginTop">1px</xsl:with-param>
<xsl:with-param name="backcolor"></xsl:with-param>
<xsl:with-param name="icon" select="$icon"/>
<xsl:with-param name="marginLeft">2px</xsl:with-param>
<xsl:with-param name="paddingRightBlock">0</xsl:with-param>
<xsl:with-param name="paddingRightIcon">0</xsl:with-param>
<xsl:with-param name="marginBottomBlock">0</xsl:with-param>
<xsl:with-param name="fontSize">6pt</xsl:with-param>
<xsl:with-param name="iconVerticalAlign">before</xsl:with-param>
<xsl:with-param name="iconWidth">8px</xsl:with-param>
<xsl:with-param name="columnIconSize">10px</xsl:with-param>
<xsl:with-param name="paddingLeftIcon">0</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="subSubSubSeccaoGen">
<xsl:param name="text"/>
<xsl:param name="subText"></xsl:param>
<xsl:param name="marginTop">2px</xsl:param>
<xsl:param name="backcolor"></xsl:param>
<xsl:param name="icon"></xsl:param>
<xsl:param name="marginLeft">20px</xsl:param>
<xsl:param name="paddingRightBlock">30px</xsl:param>
<xsl:param name="paddingRightIcon">5px</xsl:param>
<xsl:param name="paddingLeftIcon">5px</xsl:param>
<xsl:param name="fontSize">8pt</xsl:param>
<xsl:param name="marginBottomBlock">5px</xsl:param>
<xsl:param name="iconVerticalAlign">center</xsl:param>
<xsl:param name="iconWidth">15px</xsl:param>
<xsl:param name="columnIconSize">5%</xsl:param>
 
<fo:block margin-left="{$marginLeft}" margin-top="{$marginTop}" padding="0" padding-left="0" margin="0" margin-bottom="{$marginBottomBlock}" padding-right="{$paddingRightBlock}">
<fo:table width="100%" table-layout="fixed" border="0" margin="0" padding="0">
<fo:table-column column-width="{$columnIconSize}"/>
<fo:table-column/>
<fo:table-body>
<fo:table-row >
 
<fo:table-cell margin="0" padding="0" display-align="{$iconVerticalAlign}" text-align="right" padding-left="{$paddingLeftIcon}" padding-right="{$paddingRightIcon}">
<fo:block margin="0" padding="0" display-align="{$iconVerticalAlign}">
<xsl:if test="$icon and $icon != ''">
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/<xsl:value-of select="$icon"/>')</xsl:variable>
<fo:external-graphic display-align="{$iconVerticalAlign}" height="auto" width="auto"
content-width="{$iconWidth}" margin="0" padding="0" src="{$src}"/>
 
</xsl:if>
</fo:block>
</fo:table-cell>
<fo:table-cell
padding="0"
display-align="center"
margin="0">
<xsl:if test="$backcolor"><xsl:attribute name="background-color"><xsl:value-of select="$backcolor"/></xsl:attribute></xsl:if>
<fo:block
font-size="{$fontSize}"
font-weight="bold"
text-align="left"
margin="0" padding="0"
>
<xsl:value-of select="$text"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:if test="$subText">
<fo:table-row >
<fo:table-cell
number-columns-spanned="2"
padding="0"
display-align="center"
margin="0">
<fo:block
font-size="{$fontSize}"
font-weight="bold"
text-align="center"
margin="0" padding="0"
>
<xsl:value-of select="$subText"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:if>
 
</fo:table-body>
</fo:table>
</fo:block>
</xsl:template>
 
 
 
<!--FOLHA DE GRAFICOS POR PERGUNTA-->
 
<xsl:template match="*" mode="graficosPerguntas">
 
<xsl:choose>
<xsl:when test="./chartsRow[1]/perguntaStats/perguntaStats">
<fo:block text-align="center" margin-left="10px">
<fo:table width="100%" table-layout="fixed">
<xsl:for-each select="./chartsRow[1]/perguntaStats/perguntaStats">
<fo:table-column/>
</xsl:for-each>
<fo:table-body>
<xsl:for-each select="./chartsRow">
<fo:table-row>
<xsl:for-each select="./perguntaStats/perguntaStats">
<fo:table-cell>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="./tempFile"/>')</xsl:variable>
<fo:external-graphic
width="100%"
content-height="100%"
content-width="scale-to-fit"
scaling="uniform"
src="{$src}"/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block-container margin-top="20px">
<xsl:call-template name="legendaCoresPerguntas"/>
</fo:block-container>
</xsl:when>
<xsl:otherwise>
<fo:block text-align="center" margin-left="10px">Sem resultados para apresentar</fo:block>
</xsl:otherwise>
</xsl:choose>
 
 
</xsl:template>
 
<xsl:template name="legendaCoresPerguntas">
<fo:block>
<fo:table width="100%" table-layout="fixed" font-size="6.5pt" font-weight="normal">
<fo:table-column column-width="50"/>
<fo:table-column/>
 
<fo:table-body>
<fo:table-row>
<fo:table-cell padding="2pt" number-columns-spanned="2">
<fo:block text-align="left" font-weight="bold">Legenda de Cores:</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell background-color="rgb(253, 11, 0)" padding="2pt">
<fo:block text-align="center">1</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt" ><fo:block>O estudante avaliou a questão como Nada Satisfeito</fo:block></fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell background-color="rgb(255, 190, 0)" padding="2pt">
<fo:block text-align="center">2</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt"><fo:block>O estudante avaliou a questão como Pouco Satisfeito</fo:block></fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell background-color="rgb(255, 254, 0)" padding="2pt">
<fo:block text-align="center">3</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt"><fo:block>O estudante avaliou a questão Satisfeito</fo:block></fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell background-color="rgb(188, 255, 0)" padding="2pt">
<fo:block text-align="center">4</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt"><fo:block>O estudante avaliou a questão bastante Satisfeito que corresponde a Bom</fo:block></fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell background-color="rgb(32, 255, 5)" padding="2pt">
<fo:block text-align="center">5</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt"><fo:block>O Estudante avaliou o docente com nota máxima de Muito Satisfeito</fo:block></fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</xsl:template>
 
<!--FOLHA DE MEDIAS DE GRUPO-->
 
<xsl:template match="*" mode="mediasGrupo">
<xsl:param name="backgroundHeader"><xsl:value-of select="$backgroundHeader"/></xsl:param>
<xsl:param name="backgroundFooter"><xsl:value-of select="$backgroundFooter"/></xsl:param>
<xsl:param name="showSmile">true</xsl:param>
<xsl:param name="objetoAvaliacao"/>
<xsl:param name="smileHeight">30</xsl:param>
<xsl:param name="fontSize">7pt</xsl:param>
<xsl:param name="fontSizeMedias">10pt</xsl:param>
<fo:block margin="0" padding="0">
 
<fo:table width="100%" table-layout="fixed" font-size="{$fontSize}" font-weight="normal" margin="0" padding="0">
<fo:table-column column-width="60%"/>
<fo:table-column column-width="40%"/>
<fo:table-body>
 
<fo:table-row>
<fo:table-cell margin="0" padding-left="0px" padding-right="5px" display-align="center">
<fo:block padding-left="0" padding="0" margin="0">
<xsl:apply-templates select="." mode="globalSmile">
<xsl:with-param name="objetoAvaliacao" select="$objetoAvaliacao"/>
<xsl:with-param name="backgroundHeader"><xsl:value-of select="$backgroundHeader"/></xsl:with-param>
<xsl:with-param name="backgroundFooter"><xsl:value-of select="$backgroundFooter"/></xsl:with-param>
<xsl:with-param name="showSmile" select="$showSmile"/>
<xsl:with-param name="fontSize" select="$fontSize"/>
<xsl:with-param name="fontSizeMedias" select="$fontSizeMedias"/>
<xsl:with-param name="smileHeight" select="$smileHeight"/>
</xsl:apply-templates>
</fo:block>
</fo:table-cell>
<fo:table-cell display-align="after" text-align="center" padding-left="5px" padding-right="0">
<fo:block>
<xsl:apply-templates select="./mediasGlobaisTable" mode="DataTable">
<xsl:with-param name="backgroundHeader"><xsl:value-of select="$backgroundHeader"/></xsl:with-param>
<xsl:with-param name="backgroundFooter"><xsl:value-of select="$backgroundFooter"/></xsl:with-param>
<xsl:with-param name="fontSize" select="$fontSize"/>
</xsl:apply-templates>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
 
</fo:block>
</xsl:template>
 
<xsl:template match="*" mode="globalSmile">
<xsl:param name="backgroundHeader"><xsl:value-of select="$backgroundHeader"/></xsl:param>
<xsl:param name="backgroundFooter"><xsl:value-of select="$backgroundFooter"/></xsl:param>
<xsl:param name="objetoAvaliacao"></xsl:param>
<xsl:param name="smileHeight">30</xsl:param>
<xsl:param name="fontSize">7pt</xsl:param>
<xsl:param name="fontSizeMedias">10pt</xsl:param>
<xsl:param name="showSmile">true</xsl:param>
 
<fo:table width="100%" table-layout="auto" font-size="{$fontSize}" font-weight="normal">
<fo:table-column column-width="30%"/>
<fo:table-column/>
<fo:table-column/>
<fo:table-column/>
<fo:table-column/>
<fo:table-column/>
<fo:table-body>
<xsl:if test="$showSmile = 'true'">
<fo:table-row>
<fo:table-cell text-align="center" >
<fo:block>
 
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" >
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/sad.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="{$smileHeight}" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" >
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/indiferent.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="{$smileHeight}" src="{$src}"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" >
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/questionarios/smile.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="{$smileHeight}" src="{$src}"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:if>
<fo:table-row border="2px solid black" font-size="{$fontSizeMedias}">
<fo:table-cell display-align="center" background-color="{$backgroundHeader}" text-align="center" padding="2px" border="2px solid black" font-size="{$fontSize}">
<fo:block>Avaliação média <xsl:value-of select="$objetoAvaliacao"/> em todas as questões</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center" text-align="center" padding="4px" border="2px solid black">
<xsl:if test="./avaliacaoMediaArredondada=1">
<xsl:attribute name="background-color"><xsl:value-of select="./colorMedia"/></xsl:attribute>
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:block>1</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center" text-align="center" padding="4px" border="2px solid black">
<xsl:if test="./avaliacaoMediaArredondada=2">
<xsl:attribute name="background-color"><xsl:value-of select="./colorMedia"/></xsl:attribute>
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:block>2</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center" text-align="center" padding="4px" border="2px solid black">
<xsl:if test="./avaliacaoMediaArredondada=3">
<xsl:attribute name="background-color"><xsl:value-of select="./colorMedia"/></xsl:attribute>
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:block>3</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center" text-align="center" padding="4px" border="2px solid black">
<xsl:if test="./avaliacaoMediaArredondada=4">
<xsl:attribute name="background-color"><xsl:value-of select="./colorMedia"/></xsl:attribute>
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:block>4</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center" text-align="center" padding="4px" border="2px solid black">
<xsl:if test="./avaliacaoMediaArredondada=5">
<xsl:attribute name="background-color"><xsl:value-of select="./colorMedia"/></xsl:attribute>
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:block>5</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:template>
 
 
<!--PERCENTAGEMS COLUNAS-->
 
<xsl:template name="barraPercentilDefinedProgress">
<xsl:param name="valor"/>
<xsl:param name="percentDefined"/>
<xsl:call-template name="barraPercentilDefined">
<xsl:with-param name="colors">progress</xsl:with-param>
<xsl:with-param name="valor" select="$valor"/>
<xsl:with-param name="percentDefined" select="$percentDefined"/>
<xsl:with-param name="showPercentSimbol">false</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="barraPercentilProgress">
<xsl:param name="valor"/>
<xsl:call-template name="barraPercentilDefined">
<xsl:with-param name="colors">progress</xsl:with-param>
<xsl:with-param name="valor" select="$valor"/>
<xsl:with-param name="percentDefined" select="$valor"/>
<xsl:with-param name="showPercentSimbol">true</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="barraPercentil">
<xsl:param name="valor"/>
<xsl:param name="colors">false</xsl:param>
<xsl:param name="backgroundColorPercentage"></xsl:param>
<xsl:call-template name="barraPercentilDefined">
<xsl:with-param name="colors" select="$colors"/>
<xsl:with-param name="backgroundColorPercentage" select="$backgroundColorPercentage"/>
<xsl:with-param name="valor" select="$valor"/>
<xsl:with-param name="percentDefined" select="$valor"/>
<xsl:with-param name="showPercentSimbol">true</xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="barraPercentilDefined">
<xsl:param name="valor"></xsl:param>
<xsl:param name="percentDefined"></xsl:param>
<xsl:param name="colors">false</xsl:param>
<xsl:param name="backgroundColorPercentage"></xsl:param>
<xsl:param name="showPercentSimbol">false</xsl:param>
 
 
<fo:block-container margin="1px" border="1px solid #C6C6CA" padding="0" padding-right="2px">
<xsl:if test="$colors = 'progress'"><xsl:attribute name="background-color">#FD0B00</xsl:attribute></xsl:if>
<fo:block-container border="1px solid #C6C6CA" margin="0" padding-top="1px" padding-bottom="0" margin-right="2px">
<xsl:choose>
<xsl:when test="$colors = 'false'">
<xsl:attribute name="border">1px solid #8D7F5C</xsl:attribute>
<xsl:attribute name="background-color">#B9F1B1</xsl:attribute>
</xsl:when>
<xsl:when test="$colors = 'progress'">
<xsl:attribute name="border">1px solid #157C00</xsl:attribute>
<xsl:attribute name="background-color">#20FF05</xsl:attribute>
<xsl:if test="number(percentDefined) &lt; 10">
<xsl:attribute name="text-align">right</xsl:attribute>
</xsl:if>
</xsl:when>
<xsl:when test="$backgroundColorPercentage != ''">
<xsl:attribute name="background-color"><xsl:value-of select="$backgroundColorPercentage"/></xsl:attribute>
<xsl:choose>
<xsl:when test="$percentDefined &lt; 21">
<xsl:attribute name="border">1px solid #B10000</xsl:attribute>
</xsl:when>
<xsl:when test="$percentDefined &lt; 41">
<xsl:attribute name="border">1px solid #B85C00</xsl:attribute>
</xsl:when>
<xsl:when test="$percentDefined &lt; 61">
<xsl:attribute name="border">1px solid #868600</xsl:attribute>
</xsl:when>
<xsl:when test="$percentDefined &lt; 81">
<xsl:attribute name="border">1px solid #157C00</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="border">1px solid #157C00</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
<xsl:attribute name="width"><xsl:value-of select="$percentDefined"/>%</xsl:attribute>
<fo:block><xsl:value-of select="$valor"/><xsl:if test="$showPercentSimbol = 'true'">%</xsl:if> </fo:block>
</fo:block-container>
</fo:block-container>
</xsl:template>
 
 
 
<!--TABELA DE DADOS GENERICA-->
<xsl:variable name="backgroundHeader"><xsl:value-of select="$STD_COLOR_SECTION"/></xsl:variable>
<xsl:variable name="backgroundNormal">#FFFFFF</xsl:variable>
<xsl:variable name="backgroundFooter"><xsl:value-of select="$STD_COLOR_SECTION"/></xsl:variable>
<xsl:variable name="borderInHeader">2px solid black</xsl:variable>
<xsl:variable name="borderInCell">1px dashed black</xsl:variable>
<xsl:variable name="borderInFooter">2px solid black</xsl:variable>
<xsl:variable name="borderInCellVertical">1px solid black</xsl:variable>
<xsl:variable name="borderTable">2px solid black</xsl:variable>
 
<xsl:template match="*" mode="DataTable">
<xsl:param name="firstColPercentSize"></xsl:param>
<xsl:param name="secondColPercentSize"></xsl:param>
<xsl:param name="thirdColPercentSize"></xsl:param>
<xsl:param name="fourthColPercentSize"></xsl:param>
<xsl:param name="fifthColPercentSize"></xsl:param>
<xsl:param name="sixthColPercentSize"></xsl:param>
<xsl:param name="ignoreColumns">false</xsl:param>
<xsl:param name="backgroundHeader"><xsl:value-of select="$backgroundHeader"/></xsl:param>
<xsl:param name="backgroundFooter"><xsl:value-of select="$backgroundFooter"/></xsl:param>
<xsl:param name="fontSize">7pt</xsl:param>
 
 
<fo:table width="100%" table-layout="auto" font-size="{$fontSize}">
<xsl:attribute name="border"><xsl:value-of select="$borderTable"/></xsl:attribute>
 
<xsl:if test="$ignoreColumns = 'false'">
<xsl:for-each select="./rows/row[1]/cols/col">
<xsl:choose>
<xsl:when test="$firstColPercentSize != '' and position() = 1">
<fo:table-column column-width="{$firstColPercentSize}"/>
</xsl:when>
<xsl:when test="$secondColPercentSize != '' and position() = 2">
<fo:table-column column-width="{$secondColPercentSize}"/>
</xsl:when>
<xsl:when test="$thirdColPercentSize != '' and position() = 3">
<fo:table-column column-width="{$thirdColPercentSize}"/>
</xsl:when>
<xsl:when test="$fourthColPercentSize != '' and position() = 4">
<fo:table-column column-width="{$fourthColPercentSize}"/>
</xsl:when>
<xsl:when test="$fifthColPercentSize != '' and position() = 5">
<fo:table-column column-width="{$fifthColPercentSize}"/>
</xsl:when>
<xsl:when test="$sixthColPercentSize != '' and position() = 6">
<fo:table-column column-width="{$sixthColPercentSize}"/>
</xsl:when>
<xsl:when test="width and width != ''">
<xsl:variable name="width" select="width"/>
<fo:table-column column-width="{$width}"/>
</xsl:when>
<xsl:otherwise><fo:table-column/></xsl:otherwise>
</xsl:choose>
 
</xsl:for-each>
</xsl:if>
<fo:table-body>
<xsl:for-each select="./rows/row[invisible = 'false']">
<xsl:variable name="rowPosition"><xsl:value-of select="position()"/></xsl:variable>
<xsl:variable name="lastRowPosition"><xsl:value-of select="last()"/></xsl:variable>
<fo:table-row background-color="{$backgroundHeader}">
<xsl:choose>
<xsl:when test="./type='header'"><xsl:attribute name="background-color"><xsl:value-of select="$backgroundHeader"/></xsl:attribute></xsl:when>
<xsl:when test="./type='normal'"><xsl:attribute name="background-color"><xsl:value-of select="$backgroundNormal"/></xsl:attribute></xsl:when>
<xsl:when test="./type='footer'"><xsl:attribute name="background-color"><xsl:value-of select="$backgroundFooter"/></xsl:attribute></xsl:when>
</xsl:choose>
<xsl:for-each select="./cols/col">
<xsl:choose>
 
<xsl:when test="./type='invisible'">
<fo:table-cell border="0" background-color="#FFFFFF">
<xsl:if test="number(colspan) &gt; 0"><xsl:attribute name="number-columns-spanned"><xsl:value-of select="colspan"/></xsl:attribute></xsl:if>
<fo:block> </fo:block>
</fo:table-cell>
</xsl:when>
<xsl:otherwise>
<fo:table-cell padding="0" display-align="center">
<xsl:if test="number(colspan) &gt; 0"><xsl:attribute name="number-columns-spanned"><xsl:value-of select="colspan"/></xsl:attribute></xsl:if>
<xsl:if test="fontWeight = 'bold'"><xsl:attribute name="font-weight">bold</xsl:attribute></xsl:if>
 
<xsl:if test="./backgroundColor != ''">
<xsl:attribute name="background-color"><xsl:value-of select="./backgroundColor"/></xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="../../type='header'"><xsl:attribute name="border"><xsl:value-of select="$borderInHeader"/></xsl:attribute></xsl:when>
<xsl:when test="../../type='normal'"><xsl:attribute name="border"><xsl:value-of select="$borderInCell"/></xsl:attribute></xsl:when>
<xsl:when test="../../type='footer'"><xsl:attribute name="border"><xsl:value-of select="$borderInFooter"/></xsl:attribute></xsl:when>
</xsl:choose>
 
<xsl:choose>
<xsl:when test="./align='left'"><xsl:attribute name="text-align">start</xsl:attribute></xsl:when>
<xsl:when test="./align='right'"><xsl:attribute name="text-align">end</xsl:attribute></xsl:when>
<xsl:when test="./align='center'"><xsl:attribute name="text-align">center</xsl:attribute></xsl:when>
</xsl:choose>
<xsl:if test="../../cols/col/type = 'percentage' and ./type != 'percentage'">
<xsl:attribute name="padding-top">2px</xsl:attribute>
</xsl:if>
 
<xsl:if test="../../type='normal'">
<xsl:if test="./type='label' and position()=1">
<xsl:attribute name="border-right"><xsl:value-of select="$borderInHeader"/></xsl:attribute>
</xsl:if>
<xsl:if test="./type='label' and position()=last()">
<xsl:attribute name="border-left"><xsl:value-of select="$borderInHeader"/></xsl:attribute>
</xsl:if>
<xsl:if test="../../../row[invisible='false'][$rowPosition+1]/type='normal'">
<xsl:attribute name="border-bottom"><xsl:value-of select="$borderInCell"/></xsl:attribute>
</xsl:if>
</xsl:if>
 
<xsl:if test="../../../row[invisible='false'][$rowPosition - 1]/type='header'">
<xsl:attribute name="border-top"><xsl:value-of select="$borderInHeader"/></xsl:attribute>
</xsl:if>
<xsl:if test="../../../row[invisible='false'][$rowPosition +1]/type='footer'">
<xsl:attribute name="border-bottom"><xsl:value-of select="$borderInFooter"/></xsl:attribute>
</xsl:if>
<xsl:if test="../col[position() + 1 != last()]">
<xsl:attribute name="border-right"><xsl:value-of select="$borderInCellVertical"/></xsl:attribute>
</xsl:if>
<fo:block-container margin="0" padding="0">
<xsl:choose>
<xsl:when test="./type='text'"><fo:block margin="0" padding-left="2px" padding-right="2px"><xsl:value-of select="./value"/></fo:block></xsl:when>
<xsl:when test="./type='number'"><fo:block margin="0" padding-left="2px" padding-right="2px"><xsl:value-of select="./value"/></fo:block></xsl:when>
<xsl:when test="./type='label'"><fo:block margin="0" padding-left="2px" padding-right="2px"><xsl:value-of select="./value"/></fo:block></xsl:when>
<xsl:when test="./type='percentage'">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:attribute name="padding">0</xsl:attribute>
<xsl:call-template name="barraPercentil">
<xsl:with-param name="valor" select="./value"/>
<xsl:with-param name="colors" select="./usePercentageColor"/>
<xsl:with-param name="backgroundColorPercentage" select="./backgroundColorPercentage"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="./type='percentageDefined'">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:attribute name="padding">0</xsl:attribute>
<xsl:call-template name="barraPercentilDefined">
<xsl:with-param name="valor" select="./value"/>
<xsl:with-param name="percentDefined" select="./percentDefined"/>
<xsl:with-param name="colors" select="./usePercentageColor"/>
<xsl:with-param name="backgroundColorPercentage" select="./backgroundColorPercentage"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="./type='percentageDefinedProgress'">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:attribute name="padding">0</xsl:attribute>
<xsl:call-template name="barraPercentilDefinedProgress">
<xsl:with-param name="valor" select="./value"/>
<xsl:with-param name="percentDefined" select="./percentDefined"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="./type='percentageProgress'">
<xsl:attribute name="text-align">left</xsl:attribute>
<xsl:attribute name="padding">0</xsl:attribute>
<xsl:call-template name="barraPercentilProgress">
<xsl:with-param name="valor" select="./value"/>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</fo:block-container>
</fo:table-cell>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each> <!-- Col -->
</fo:table-row>
</xsl:for-each> <!--Row-->
</fo:table-body>
</fo:table>
</xsl:template>
 
 
</xsl:stylesheet>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/cursoPublicReport.fo.xsl
New file
0,0 → 1,875
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/XSL/Format http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/fop/src/foschema/fop.xsd">
<xsl:import href="report.fo.xsl"/>
<xsl:import href="utilsReports.fo.xsl"/>
<xsl:import href="docenteReportGuiaoAvaliacaoDesempenho.fo.xsl"/>
 
<xsl:param name="site">http://localhost/bacoTESTE</xsl:param>
<xsl:param name="updateDate">EM FALTA</xsl:param>
<xsl:param name="anoLectivo"><xsl:value-of select="//anoLectivo"/></xsl:param>
<xsl:param name="nomeCurso"><xsl:value-of select="//cursoStats/nomeCurso"/></xsl:param>
<xsl:param name="codigoCurso"><xsl:value-of select="//cursoStats/codigoCurso"/></xsl:param>
<xsl:param name="instituicao"><xsl:value-of select="//cursoStats/nomeInstituicao"/></xsl:param>
<xsl:param name="abreviatura"><xsl:value-of select="//cursoStats/abreviaturaInstituicao"/></xsl:param>
 
 
<xsl:template match="/">
<!--<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="Helvetica" color="#58585A">-->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="Helvetica" color="black">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4Vertical" page-width="210mm" page-height="297mm"
margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"
reference-orientation="0">
<fo:region-body region-name="body" margin-top="40mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
 
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
 
<fo:simple-page-master master-name="A4VerticalFirstPage" page-width="210mm" page-height="297mm"
margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"
reference-orientation="0">
<fo:region-body region-name="body" margin-top="90mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
 
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
 
 
 
<fo:simple-page-master master-name="A4HorizontalRot" page-width="210mm" page-height="297mm"
margin-top="0.5cm" margin-bottom="0.5cm" margin-left="0.5cm" margin-right="0.5cm"
reference-orientation="90">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="10mm" margin-right="0"
margin-left="0"/>
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="A4Horizontal" page-width="297mm" page-height="210mm"
margin-top="0.5cm" margin-bottom="0.5cm" margin-left="0.5cm"
margin-right="0.5cm">
<fo:region-body region-name="body" margin-top="20mm" margin-bottom="15mm" margin-right="0"
margin-left="0"/>
<fo:region-before region-name="header" extent="15mm"/>
<fo:region-after region-name="footer" extent="1cm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="pages">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="pages" page-position="any"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
 
<!--LAYOUT DE PAGINA ESCOLHIDO-->
 
<fo:page-sequence master-reference="A4VerticalFirstPage" initial-page-number="1">
<xsl:call-template name="firstpage"/>
</fo:page-sequence>
<fo:page-sequence master-reference="A4Vertical" initial-page-number="2">
<xsl:call-template name="indexPage"/>
</fo:page-sequence>
<fo:page-sequence master-reference="A4Vertical" initial-page-number="3">
<xsl:call-template name="page"/>
</fo:page-sequence>
 
 
</fo:root>
</xsl:template>
 
<xsl:template name="headerTeacher">
<xsl:call-template name="headerPae">
<xsl:with-param name="anoLectivo" select="$anoLectivo"/>
<xsl:with-param name="color_entity">#fff9ea</xsl:with-param>
<xsl:with-param name="title">Relatório de Avaliação Pedagógica</xsl:with-param>
<xsl:with-param name="subtitle">Avaliação das Unidades Curriculares pelos Alunos</xsl:with-param>
<xsl:with-param name="subtitleRight">Resultados dos Inquéritos Pedagógicos</xsl:with-param>
<xsl:with-param name="entity"><xsl:value-of select="$nomeCurso"/> / código: <xsl:value-of select="$codigoCurso"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="footerDefault">
<xsl:call-template name="footerPae">
<xsl:with-param name="sgqDoc">IPP.SI.QP-3-Rev.0</xsl:with-param>
<xsl:with-param name="updateDate" select="$updateDate"/>
</xsl:call-template>
</xsl:template>
 
<xsl:template name="indexPage">
 
<xsl:call-template name="headerTeacher"/>
<xsl:call-template name="footerDefault"/>
 
 
<fo:flow flow-name="body">
<fo:block font-size="20px" padding="4px" margin-top="5px" text-align="center" >
<fo:inline text-decoration="underline" font-weight="bold">Índice</fo:inline>
</fo:block>
<fo:block text-align-last="justify" font-weight="bold" margin-bottom="5px">
<xsl:text> </xsl:text>
<fo:leader/>
Pag.
</fo:block>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">1</xsl:with-param>
<xsl:with-param name="sectionTitle">Participação nos questionários do Curso</xsl:with-param>
<xsl:with-param name="id">capParticipacao</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">2</xsl:with-param>
<xsl:with-param name="sectionTitle">Taxas de Resposta</xsl:with-param>
<xsl:with-param name="id">capTaxasResposta</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">3</xsl:with-param>
<xsl:with-param name="sectionTitle">Evolução das Taxas de Resposta</xsl:with-param>
<xsl:with-param name="id">capEvoTaxasResposta</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">4</xsl:with-param>
<xsl:with-param name="sectionTitle">Análise das questões agregadas do grupo Unidade Curricular</xsl:with-param>
<xsl:with-param name="id">capQuestoesAgregadasUnidades</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">5</xsl:with-param>
<xsl:with-param name="sectionTitle">Análise das questões agregadas do grupo Instalações/Equipamentos/Outros Recursos </xsl:with-param>
<xsl:with-param name="id">capQuestoesAgregadasSalas</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">6</xsl:with-param>
<xsl:with-param name="sectionTitle">Análise das questões em cada Unidade curricular do curso individualmente </xsl:with-param>
<xsl:with-param name="id">capQuestoesUnidade</xsl:with-param>
</xsl:call-template>
 
<!-- Estes fors organizam primeiro por curso, neste caso o curso é so um mas o for fica assim para se reaproveitar para
o relatorio de Cursos com todo os cursos -->
<xsl:for-each select="//cursoStats/unidadesStats/unidadeStats[not(nomeCurso/text() = preceding-sibling::unidadeStats/nomeCurso/text())]">
<xsl:sort select="text()" data-type="text" />
<xsl:variable name="nomeCurso" select="nomeCurso/text()"/>
<xsl:for-each select="../unidadeStats[nomeCurso/text() = $nomeCurso]">
<xsl:sort select="nomeUnidade/text()" data-type="text" />
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">6.<xsl:value-of select="position()"/></xsl:with-param>
<xsl:with-param name="sectionTitle"><xsl:value-of select="nomeUnidade"/></xsl:with-param>
<xsl:with-param name="id">UNIDADE_CURICULAR<xsl:value-of select="codigoUnidade"/></xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
 
<!--
Grafico de barras horizontais com media unidades e media salas
Tabela com todas as metricas Media Desvios e Média Curso Média Escola + respostas
Tabela com todas as métricas de todas as questões mais média + nº respostas
-->
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">7</xsl:with-param>
<xsl:with-param name="sectionTitle">Análise comparativa das Unidades Curriculares</xsl:with-param>
<xsl:with-param name="id">capComparativaUnidades</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.1</xsl:with-param>
<xsl:with-param name="sectionTitle">Gráfico de comparativo de todas as unidades</xsl:with-param>
<xsl:with-param name="id">capComparativaUnidades</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.2</xsl:with-param>
<xsl:with-param name="sectionTitle">Gráfico de comparativo de todas as unidades (ordenado pela Média da Unidade)</xsl:with-param>
<xsl:with-param name="id">capComparativaUnidadesSortMediaUnidades</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.3</xsl:with-param>
<xsl:with-param name="sectionTitle">Gráfico de comparativo de todas as unidades (ordenado pela Média das Instalações/Equipamentos/Outros Recursos)</xsl:with-param>
<xsl:with-param name="id">capComparativaUnidadesSortMediaSalas</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.4</xsl:with-param>
<xsl:with-param name="sectionTitle">Tabela de médias de todas as unidades vs curso e escola</xsl:with-param>
<xsl:with-param name="id">capComparativaUnidadesTable</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.5</xsl:with-param>
<xsl:with-param name="sectionTitle">Comparação das unidades em cada questão individualmente no grupo Unidade</xsl:with-param>
<xsl:with-param name="id">compUnidadesPorQuestaoUnidade</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.6</xsl:with-param>
<xsl:with-param name="sectionTitle">Comparação das unidades em cada questão individualmente no grupo Instalações</xsl:with-param>
<xsl:with-param name="id">compUnidadesPorQuestaoSalas</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subIndexEntry">
<xsl:with-param name="sectionNumber">7.7</xsl:with-param>
<xsl:with-param name="sectionTitle">Tabela das médias de todas as questões por unidade e apreciação global do curso</xsl:with-param>
<xsl:with-param name="id">capComparativaUnidadesPerguntas</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="indexEntry">
<xsl:with-param name="sectionNumber">8</xsl:with-param>
<xsl:with-param name="sectionTitle">Evolução das médias das Unidades Curriculares</xsl:with-param>
<xsl:with-param name="id">capQuestoesUnidade</xsl:with-param>
</xsl:call-template>
 
 
</fo:flow>
</xsl:template>
 
<xsl:template name="firstpage">
<xsl:call-template name="headerIpp"/>
<xsl:call-template name="footerDefault"/>
 
 
<fo:flow flow-name="body">
<fo:block border-bottom="8px solid #58585A" border-top="4px solid #58585A" font-size="26px" padding="6px" text-align="center" color="white" background-color="#FFCA44">
<fo:inline font-weight="bold"> Relatório de Avaliação Pedagógica</fo:inline>
</fo:block>
 
<fo:block font-size="20px" padding="4px" margin-top="40px" text-align="center" >
<fo:inline text-decoration="underline" font-weight="bold">Inquéritos Pedagógicos aos Alunos</fo:inline>
</fo:block>
 
<fo:block font-size="18px" padding="4px" margin-top="20px" text-align="center">
<fo:inline>Relatório de Curso para a Comunidade Académica</fo:inline>
</fo:block>
 
<fo:block font-size="14px" padding="4px" margin-top="5px" text-align="center" background-color="#fff9ea">
<xsl:value-of select="$nomeCurso"/>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="2px" text-align="center">
<fo:inline>Código: <xsl:value-of select="$codigoCurso"/></fo:inline>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="20px" text-align="center" >
<fo:inline><fo:wrapper white-space-treatment="preserve" font-weight="bold">Ano letivo: </fo:wrapper> <xsl:value-of select="$anoLectivo"/></fo:inline>
</fo:block>
<fo:block font-size="12px" padding="4px" margin-top="20px" text-align="center" >
<fo:inline><fo:wrapper white-space-treatment="preserve" font-weight="bold">Periodos Considerados: </fo:wrapper> <xsl:for-each select="//semestres/string"><xsl:value-of select="."/>; </xsl:for-each></fo:inline>
</fo:block>
<!--<fo:block font-size="12px" padding="4px" margin-top="20px" text-align="center" >
<fo:inline><fo:wrapper white-space-treatment="preserve" font-weight="bold">Oferta Formativa Considerada: </fo:wrapper> <xsl:for-each select="//degrees/string"><xsl:value-of select="."/>; </xsl:for-each></fo:inline>
</fo:block>-->
</fo:flow>
</xsl:template>
 
<xsl:template name="page">
 
<xsl:call-template name="headerTeacher"/>
<xsl:call-template name="footerDefault"/>
 
 
<fo:flow flow-name="body">
 
 
<xsl:call-template name="CAP_participacao"/>
 
<xsl:call-template name="CAP_taxasResposta"/>
 
<xsl:call-template name="CAP_evoTaxasResposta"/>
 
<xsl:call-template name="CAP_analise_questoes_UNIDADE"/>
 
<xsl:call-template name="CAP_analise_questoes_SALAS"/>
 
<xsl:apply-templates select="//cursoStats/unidadesStats" mode="unidadePorUnidade">
<xsl:with-param name="CAP_PONTO">6</xsl:with-param>
<xsl:with-param name="CAP_ID">capQuestoesUnidade</xsl:with-param>
</xsl:apply-templates>
 
<xsl:call-template name="CAP_analise_comparativa_unidades"/>
 
</fo:flow>
</xsl:template>
 
 
 
<!-- ############################################################# -->
<!-- 1 - CAPITULO ANALISE PARTICIPACAO PONTOS -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_participacao">
<fo:block-container padding="0" margin="0" border="0" id="capParticipacao" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">1 - Participação</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">Taxa Global de Participação aos Questionários do Curso</xsl:with-param>
</xsl:call-template>
 
<fo:block-container font-size="18" margin-left="10px" text-align="center" font-weight="bold">
<xsl:call-template name="barraPercentil">
<xsl:with-param name="valor" select="//questionariosReqRespondidosPercentagem"/>
<xsl:with-param name="colors">true</xsl:with-param>
<xsl:with-param name="backgroundColorPercentage" select="//questionariosReqRespondidosPercentagemColor"/>
</xsl:call-template>
</fo:block-container>
 
<fo:block margin-left="10px" margin-top="0">
 
<fo:table width="100%" table-layout="fixed">
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell margin="0" padding="0">
 
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Taxa de Participação
</xsl:with-param>
<xsl:with-param name="marginBottom">0</xsl:with-param>
</xsl:call-template>
<fo:block display-align="center" text-align="center" margin-left="10px">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoTaxaRespostaAlunos"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="250" src="{$src}"/>
</fo:block>
 
</fo:table-cell>
<fo:table-cell margin="0" padding="0">
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Taxa de Resposta a Questionarios
</xsl:with-param>
<xsl:with-param name="marginBottom">0</xsl:with-param>
</xsl:call-template>
<fo:block display-align="center" text-align="center" margin-left="10px">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoTaxaRespostaQuestionarios"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="250" src="{$src}"/>
</fo:block>
 
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
 
<fo:block text-align="center" margin-left="10px">
<fo:table width="100%" table-layout="fixed">
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Género
</xsl:with-param>
</xsl:call-template>
 
<fo:block>
<fo:table width="90%" table-layout="fixed" >
<fo:table-column column-width="50%"/>
<fo:table-column column-width="50%"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:value-of select="//masculinoComResposta"/>
</fo:block>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/studentMale.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="120" src="{$src}"/>
</fo:block>
<fo:block>
<xsl:value-of select="//masculinoComRespostaPercent"/>%
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="//femininoComResposta"/>
</fo:block>
<fo:block>
<xsl:variable name="src">url('<xsl:value-of select="$site"/>/imgs/studentFemale.png')</xsl:variable>
<fo:external-graphic height="auto" width="auto"
content-height="120" src="{$src}"/>
</fo:block>
<fo:block>
<xsl:value-of select="//femininoComRespostaPercent"/>%
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Tipos de Alunos
</xsl:with-param>
</xsl:call-template>
 
<fo:block margin-top="5px">
<xsl:variable name="src"><xsl:value-of select="//pathGraficoTiposAlunosComResposta"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="250" content-height="150" src="{$src}"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Idades
</xsl:with-param>
</xsl:call-template>
<fo:block text-align="center" margin-left="10px" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaIdades" mode="DataTable"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">
Top 3 Distritos de Origem
</xsl:with-param>
</xsl:call-template>
<fo:block text-align="center" margin-left="10px" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaDistritos" mode="DataTable">
<xsl:with-param name="firstColPercentSize">30%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</xsl:template>
 
 
 
<!-- ############################################################# -->
<!-- 2 - CAPITULO Taxas de Resposta -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_taxasResposta">
<fo:block-container padding="0" margin="0" border="0" id="capTaxasResposta" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">2 - Taxas de resposta</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">2.1 - Taxas de resposta ordenadas pelo nome das unidades</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
 
<fo:block text-align="center" margin-top="10px" margin-left="10px" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaTaxaRespostaUnidade" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
<xsl:with-param name="fontSize">12pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
 
<fo:block-container padding="0" margin="0" border="0" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">2 - Taxas de resposta</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">2.1 - Taxas de resposta ordenadas por participação</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
 
<fo:block text-align="center" margin-top="10px" margin-left="10px" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaTaxaRespostaUnidadeOrderTaxa" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
<xsl:with-param name="fourthColPercentSize">40%</xsl:with-param>
<xsl:with-param name="fontSize">12pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</xsl:template>
 
<!-- ############################################################# -->
<!-- 3 - CAPITULO Evolução das Taxas de Resposta -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_evoTaxasResposta">
<fo:block-container padding="0" margin="0" border="0" id="capEvoTaxasResposta" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">3 - Evolução das Taxas de resposta</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">3.1 - Respostas obtidas agrupadas semanalmente</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
</xsl:call-template>
 
<fo:block margin-top="5px" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//pathDistribuicaoRespostasSemanalChart"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-width="500" src="{$src}"/>
</fo:block>
 
<fo:block text-align="center" margin-top="10px" margin-left="10px" font-weight="normal" margin-right="10px">
<xsl:apply-templates select="//tabelaEvolucaoRespostas" mode="DataTable">
<xsl:with-param name="sixthColPercentSize">20%</xsl:with-param>
<xsl:with-param name="fontSize">12pt</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</xsl:template>
 
<!-- ############################################################# -->
<!-- 4 - CAPITULO Análise de Respostas Agregadas UNIDADES -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_analise_questoes_UNIDADE">
 
<fo:block-container padding="0" margin="0" id="capQuestoesAgregadasUnidades" page-break-before="always">
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text">4 - Análise das questões sobre as Unidade</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text">4.1 - Gráficos de respostas agregadas de todas as unidades do Curso</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<xsl:apply-templates select="//respostasAgregadasGrupoUnidade/respostasAgregadasChartTable/respostasAgregadasCharts/chartsRow" mode="graficosPerguntas"/>
 
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoGreen">
<xsl:with-param name="text">4 - Análise das questões sobre as Unidades</xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text">4.2 - Tabela de respostas agregadas de todas as unidades do curso</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
 
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoUnidade/respostasAgregadasChartTable/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
 
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades avaliadas em <xsl:value-of select="//cursoStats/nomeCurso"/>: <xsl:value-of select="//cursoStats/unidadesDoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades avaliadas na <xsl:value-of select="//cursoStats/nomeInstituicao"/>: <xsl:value-of select="//cursoStats/unidadesDaEscola"/>
</fo:block>
 
<fo:block-container margin-top="20px" margin-bottom="5px">
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoUnidade/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">das unidades</xsl:with-param>
</xsl:apply-templates>
</fo:block-container>
 
<!--Considerando Respostas Superiores a 2 segindos-->
<fo:block-container background-color="#aaaaaa" padding="5px" margin="0" margin-top="20px">
<fo:block-container padding="0" margin="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Considerando apenas respostas de tempo superior a 2 segundos (Estes dados são apenas para efeitos de comparação)</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
 
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoUnidade/respostasAgregadasChartTable2Secs/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:template>
 
<!-- ############################################################# -->
<!-- 5 - CAPITULO Análise de Respostas Agregadas SALAS -->
<!-- ############################################################# -->
 
<xsl:template name="CAP_analise_questoes_SALAS">
 
<xsl:variable name="title">Análise das questões sobre as Instalações/Equipamentos/Outros Recursos</xsl:variable>
<fo:block-container padding="0" margin="0" id="capQuestoesAgregadasSalas" page-break-before="always">
<xsl:call-template name="seccaoRose">
<xsl:with-param name="text">5 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraCadeira.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoRose">
<xsl:with-param name="text">5.1 - Gráficos de respostas agregadas de todas as unidades do Curso</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<xsl:apply-templates select="//respostasAgregadasGrupoSalas/respostasAgregadasChartTable/respostasAgregadasCharts/chartsRow" mode="graficosPerguntas"/>
 
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:call-template name="seccaoRose">
<xsl:with-param name="text">5 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">0</xsl:with-param>
<xsl:with-param name="icon">cadeiraCadeira.png</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccaoRose">
<xsl:with-param name="text">5.2 - Tabela de respostas agregadas de todas as unidades do curso</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
 
<fo:block text-align="center" margin="0" font-size="10" font-weight="normal" >
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoSalas/respostasAgregadasChartTable/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
 
<fo:block text-align="right" margin-top="10px" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades avaliadas em <xsl:value-of select="//cursoStats/nomeCurso"/>: <xsl:value-of select="//cursoStats/unidadesDoCurso"/>
</fo:block>
<fo:block text-align="right" margin-left="10px" font-size="6.5pt" font-weight="normal" margin-right="10px">
Unidades avaliadas na <xsl:value-of select="//cursoStats/nomeInstituicao"/>: <xsl:value-of select="//cursoStats/unidadesDaEscola"/>
</fo:block>
 
<fo:block-container margin-top="20px" margin-bottom="5px">
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoSalas/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">das instalações</xsl:with-param>
</xsl:apply-templates>
</fo:block-container>
 
<!--Considerando Respostas Superiores a 2 segindos-->
<fo:block-container background-color="#aaaaaa" padding="5px" margin="0" margin-top="20px">
<fo:block-container padding="0" margin="0">
<xsl:call-template name="subSubSeccao">
<xsl:with-param name="text">Considerando apenas respostas de tempo superior a 2 segundos (Estes dados são apenas para efeitos de comparação)</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<fo:block text-align="center" margin-left="10px" font-size="10" font-weight="normal" margin-right="10px">
 
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoSalas/respostasAgregadasChartTable2Secs/respostasTable" mode="DataTable">
<xsl:with-param name="firstColPercentSize">40%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
</fo:block-container>
</xsl:template>
 
<!-- ############################################################# -->
<!-- 7 - CAPITULO Análise Comparativa de Unidades -->
<!-- ############################################################# -->
<xsl:template name="CAP_analise_comparativa_unidades">
 
<xsl:variable name="title">Análise Comparativa de Unidades Curriculares</xsl:variable>
<fo:block-container padding="0" margin="0" id="capComparativaUnidades" page-break-before="always">
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
 
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">7.1 - Comparação entre a média a Unidade Curricular e as Instalações/Equipamentos/Outros Recursos</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//analiseConjuntaChartWithTable/tempFile"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="500" src="{$src}"/>
</fo:block>
 
 
 
 
<fo:block-container padding="0" margin="0" page-break-before="always" id="capComparativaUnidadesSortMediaUnidades">
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">7.2 - Comparação entre a média a Unidade Curricular e as Instalações/Equipamentos/Outros Recursos (Ordenado por Média do Grupo Unidade)</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//analiseConjuntaChartOrderMediaUnidades"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="500" src="{$src}"/>
</fo:block>
 
 
 
 
<fo:block-container padding="0" margin="0" page-break-before="always" id="capComparativaUnidadesSortMediaSalas">
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">7.3 - Comparação entre a média a Unidade Curricular e as Instalações/Equipamentos/Outros Recursos (Ordenado por Média do Grupo Instalações/Equipamentos/Outros Recursos)</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:variable name="src"><xsl:value-of select="//analiseConjuntaChartOrderMediaSalas"/></xsl:variable>
<fo:external-graphic width="auto" height="auto" content-height="500" src="{$src}"/>
</fo:block>
 
 
 
 
 
 
 
<fo:block-container padding="0" margin="0" page-break-before="always" id="capComparativaUnidadesTable">
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">7.4 - Tabela de valores para a agregação das respostas em todas as perguntas dos dois grupos</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<xsl:apply-templates select="//analiseConjuntaChartWithTable/dataTable" mode="DataTable">
<!--<xsl:with-param name="ignoreColumns">true</xsl:with-param>-->
</xsl:apply-templates>
 
 
<xsl:for-each select="//listaUnidadesComprativasPergunta/tabelaPerguntaComparativosUnidades">
 
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:if test="position() = 1"><xsl:attribute name="id">compUnidadesPorQuestaoUnidade</xsl:attribute></xsl:if>
 
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text">7.5 - Comparação das a média da pergunta do grupo Unidade em cada Unidade Curricular</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subSeccaoGreen">
<xsl:with-param name="text"><xsl:value-of select="perguntaNumero"/> - <xsl:value-of select="pergunta"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:apply-templates select="tabelaComparativaUnidades" mode="DataTable">
<xsl:with-param name="firstColPercentSize">15%</xsl:with-param>
<xsl:with-param name="secondColPercentSize">15%</xsl:with-param>
<xsl:with-param name="sixthColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$GREEN_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
</xsl:for-each>
 
 
 
<xsl:for-each select="//listaUnidadesComprativasPerguntaSalas/tabelaPerguntaComparativosUnidades">
<fo:block-container padding="0" margin="0" page-break-before="always">
<xsl:if test="position() = 1"><xsl:attribute name="id">compUnidadesPorQuestaoSalas</xsl:attribute></xsl:if>
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
 
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccaoRose">
<xsl:with-param name="text">7.6 - Comparação das a média da pergunta do grupo Instalações em cada Unidade Curricular</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
<xsl:with-param name="icon">cadeiraConteudos.png</xsl:with-param>
</xsl:call-template>
 
<xsl:call-template name="subSeccaoRose">
<xsl:with-param name="text"><xsl:value-of select="perguntaNumero"/> - <xsl:value-of select="pergunta"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:apply-templates select="tabelaComparativaUnidades" mode="DataTable">
<xsl:with-param name="firstColPercentSize">15%</xsl:with-param>
<xsl:with-param name="secondColPercentSize">15%</xsl:with-param>
<xsl:with-param name="sixthColPercentSize">30%</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$ROSE_COLOR_SUB_SECTION"/>
</xsl:apply-templates>
</fo:block>
</xsl:for-each>
 
 
<fo:block-container padding="0" margin="0" page-break-before="always" id="capComparativaUnidadesPerguntas">
<xsl:call-template name="seccao">
<xsl:with-param name="text">7 - <xsl:value-of select="$title"/></xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
</fo:block-container>
<xsl:call-template name="subSeccao">
<xsl:with-param name="text">7.7 - Tabela das médias de todas as questões por unidade e Apreciação Global do Curso</xsl:with-param>
<xsl:with-param name="marginTop">2px</xsl:with-param>
</xsl:call-template>
 
<fo:block margin="0" padding="0" text-align="center">
<xsl:apply-templates select="//todasAsRespostasMediasGruposUnidadesESalas" mode="DataTable">
<xsl:with-param name="firstColPercentSize">15%</xsl:with-param>
<xsl:with-param name="secondColPercentSize">15%</xsl:with-param>
</xsl:apply-templates>
</fo:block>
 
<xsl:call-template name="subSubSeccaoGreen">
<xsl:with-param name="text">7.7.1 - Avaliação Global da Unidade</xsl:with-param>
<xsl:with-param name="marginTop">10px</xsl:with-param>
<xsl:with-param name="marginBottom">2px</xsl:with-param>
</xsl:call-template>
<fo:block-container margin-top="20px" margin-bottom="5px">
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoUnidade/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">das unidades</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$GREEN_COLOR_SECTION"></xsl:with-param>
</xsl:apply-templates>
</fo:block-container>
 
<xsl:call-template name="subSubSeccaoRose">
<xsl:with-param name="text">7.7.2 - Avaliação Global das Instalações/Equipamentos/Outros Recursos</xsl:with-param>
<xsl:with-param name="marginTop">10px</xsl:with-param>
<xsl:with-param name="marginBottom">2px</xsl:with-param>
</xsl:call-template>
<fo:block-container margin-top="20px" margin-bottom="5px">
<xsl:apply-templates select="//cursoStats/respostasAgregadasGrupoSalas/mediasGrupo" mode="mediasGrupo">
<xsl:with-param name="objetoAvaliacao">das Instalações/Equipamentos/Outros Recursos</xsl:with-param>
<xsl:with-param name="backgroundHeader" select="$ROSE_COLOR_SECTION"></xsl:with-param>
</xsl:apply-templates>
</fo:block-container>
 
 
 
 
 
 
 
 
 
 
 
</xsl:template>
 
</xsl:stylesheet>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/CursoPublicReportGenerator.java
New file
0,0 → 1,638
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.PdfUtils;
import org.apache.fop.apps.FOPException;
import org.apache.log4j.Logger;
import org.dom4j.DocumentException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.CursoPublicReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.EntityEvaluated;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries.*;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.*;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
 
/**
* Created by jorgemachado on 16/12/16.
*/
public class CursoPublicReportGenerator extends ReportAlunosGenerator
{
private static final Logger logger = Logger.getLogger(DocenteReportGenerator.class);
 
 
 
public static void main(String[] args) throws IOException, DocumentException, TransformerException, FOPException
{
 
//String teacherCode = "44451";
//String teacherCode = "20122";
String courseCode = "9119";
//String courseCode = "9104";
String anoLectivo = "201516";
//String[] periodos = new String[]{"S2","T3","T4","A"};
String[] periodos = new String[]{"S1"};
String[] degrees = new String[]{"L","M","T","E"};
new CursoPublicReportGenerator(anoLectivo,periodos,degrees,courseCode).processCourse(courseCode);
 
}
 
public CursoPublicReportGenerator(String anoLectivo, String[] periodos, String[] degrees, String courseCode) {
super(anoLectivo, periodos, degrees);
}
 
public void processCourse(String courseCode) throws IOException, DocumentException, TransformerException, FOPException
{
 
 
//todo ver se ha ocorrencias de respostas do docente neste ano se não houver devolver questionario com info de nao haver resultados para este docente
CursoPublicReport cursoReport = getCoursePublicReport(courseCode);
if(cursoReport == null)
{
System.out.println(" Curso " + courseCode + " nao tem respostas nestas condições ");
return;
}
 
ChartBuilderUtil.createChartTiposAlunos(cursoReport, "tiposAlunosTmp");
ChartBuilderUtil.createChartTaxaRespostas(cursoReport, "taxaRespostasTmp");
ChartBuilderUtil.createChartTaxaParticipacao(cursoReport, "taxaParticipacaoTmp");
ChartBuilderUtil.createChartUnidadesContribuicao(cursoReport,"unidadesContribuicao");
 
 
String path = generatePdfReport(cursoReport);
 
}
 
private String generatePdfReport(CursoPublicReport cursoReport) throws DocumentException, TransformerException, IOException, FOPException {
String startPath = Globals.TMP_DIR + File.separator + "reportCurso" + cursoReport.getCursoStats().getCodigoCurso();
String path = startPath + ".pdf";
 
FileOutputStream out = new FileOutputStream(path);
Map<String,Object> params = new HashMap<String,Object>();
params.put("site", Globals.SITE_URL);
params.put("updateDate", pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDate(new Date() ));
 
 
org.w3c.dom.Document dom2 = cursoReport.serialize();
Dom4jUtil.writeSout(dom2);
Dom4jUtil.write(dom2,new java.io.File(startPath + ".xml"));
 
PdfUtils.setAuthority("Relatório de Avaliação Pedagógica - Relatório Público de Curso - " +
cursoReport.getCursoStats().getNomeCurso() + " (" + cursoReport.getCursoStats().getCodigoCurso() + " ) " +
"- Ano letivo " + cursoReport.getAnoLectivo() + " - Periodos " + cursoReport.getSemestres().toString() + "" +
" Tipos de Curso - " + cursoReport.getDegrees().toString(),
cursoReport.getCursoStats().getNomeCurso(), "Avaliação Pedagógica Docentes, Inqueritos aos Alunos");
PdfUtils.createPdfFromXml(new DOMSource(dom2), "pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/xsl/cursoPublicReport.fo.xsl", out, params);
out.flush();
out.close();
return path;
}
 
private CursoPublicReport getCoursePublicReport(String courseCode) throws IOException {
 
AbstractDao.getCurrentSession().beginTransaction();
 
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
 
CursoPublicReport cursoReport = new CursoPublicReport();
 
//dados relativos ao questionario
cursoReport.setAnoLectivo(DatesUtils.getImportYearFormatted(anoLectivo));
cursoReport.setSemestres(ReportUtils.getFormatedSemestres(periodos));
cursoReport.setDegrees(ReportUtils.getFormatedDegrees(degrees));
 
 
//dados relativos ao curso
cursoReport.getCursoStats().setCodigoCurso(courseCode);
cursoReport.getCursoStats().setNomeCurso(c.getName());
cursoReport.getCursoStats().setCodigoCurso(c.getCode());
cursoReport.getCursoStats().setNomeInstituicao(ConfigProperties.getProperty("institution.code." + c.getInstitutionalCode()));
cursoReport.getCursoStats().setCodigoInstituicao(c.getInstitutionalCode());
cursoReport.getCursoStats().setCodigoNacionalInstituicao(ConfigProperties.getProperty("institution.national.code." + c.getInstitutionalCode()));
cursoReport.getCursoStats().setAbreviaturaInstituicao(ConfigProperties.getProperty("institution.code.prefix." + c.getInstitutionalCode()));
cursoReport.setAnoLectivo(anoLectivo);
 
 
 
 
 
AlunosQueryDao.countAlunosQueResponderamAoCurso(courseCode, anoLectivo, cursoReport, periodos, degrees);
if(cursoReport.getInquiridosTotal() == 0)
{
return null;
}
QuestionariosQueryDao.countQuestionariosRespostasAoCurso(courseCode, anoLectivo, cursoReport, periodos, degrees);
AlunosQueryDao.countTiposAlunosComRespostasAoCurso(courseCode, anoLectivo, cursoReport, periodos, degrees);
AlunosQueryDao.countIdadesAlunosComRespostasAoCurso(courseCode, anoLectivo, cursoReport, periodos, degrees);
 
//TABELAS
QuestionariosQueryDao.createDataTableIdades(cursoReport, "Alunos");
QuestionariosQueryDao.createDataTableLocalidadesAoCurso(cursoReport, courseCode, anoLectivo, periodos, degrees, "Alunos");
UnidadesQueryDao.createTableTaxaRespostaUnidadeAoCurso(cursoReport, courseCode, anoLectivo, periodos, degrees);
 
//EVOLUCAO DAS RESPOSTAS
List<Object[]> semanaContagemCurso = QuestionariosQueryDao.obtainEvolucaoRespostas(new String[]{courseCode}, EntityEvaluated.CURSO,anoLectivo,periodos,degrees);
List<Object[]> semanaContagemEscola = QuestionariosQueryDao.obtainEvolucaoRespostas(new String[]{cursoReport.getCursoStats().getCodigoInstituicao()},EntityEvaluated.ESCOLA,anoLectivo,periodos,degrees);
String distRespostas = ChartBuilderUtil.createTimeSeriesCursoRepostas("distribuicaoRespostasSemanal",cursoReport.getCursoStats().getNomeCurso(),cursoReport.getCursoStats().getAbreviaturaInstituicao(),semanaContagemCurso,semanaContagemEscola);
cursoReport.setPathDistribuicaoRespostasSemanalChart(distRespostas);
 
DataTable tableEvolucaoRespostas = criarEvolucaoTaxasRespostas(semanaContagemCurso,cursoReport.getQuestionariosReqTotal());
cursoReport.setTabelaEvolucaoRespostas(tableEvolucaoRespostas);
 
 
//Os cursos na Escola são todos os cursos, na pratica nao serve para nada porque
//A media de todos os cursos na escola é a media da escola considerando a restricao de graus e periodos
//media nas Escolas por pergunta e media nos Cursos por pergunta é igual
//A media da entidade neste caso é a do curso
List<String> codigosTodosCursosDaEscola = QueryDaoUtils.getCodigosCursosEscola(cursoReport.getCursoStats().getCodigoInstituicao(),anoLectivo, periodos, degrees);
 
//List<String> codigosEscola = QueryDaoUtils.getCodigosEscolaDocente(teacherCode, anoLectivo, periodos, degrees);
List<String> codigosEscola = new ArrayList<String>();
codigosEscola.add(cursoReport.getCursoStats().getCodigoInstituicao());
 
 
cursoReport.getCursoStats().setDocentesDoCurso((int) QueryDaoUtils.countDocentesNosCursos(courseCode, anoLectivo, periodos, degrees));
cursoReport.getCursoStats().setDocentesDaEscola((int) QueryDaoUtils.countDocentesNasEscolas(cursoReport.getCursoStats().getCodigoInstituicao(), anoLectivo, periodos, degrees));
 
//todo vai buscar às cadeiras temos de fazer override do metodo e puxa-lo para o QuestionarioAlunos
//ou nao porque o UnidadesDaEscola foi introduzido dentro do Curso ão se puxou para o QuestionarioAlunos
//o xsl vai ter de usar este caso o use
cursoReport.getCursoStats().setUnidadesDoCurso((int) QueryDaoUtils.countUnidadesNosCursos(courseCode, anoLectivo, periodos, degrees));
cursoReport.getCursoStats().setUnidadesDaEscola((int) QueryDaoUtils.countUnidadesNasEscolas(cursoReport.getCursoStats().getCodigoInstituicao(), anoLectivo, periodos, degrees));
 
 
ReportAlunosGenerator.criarGraficosRespostasAgregadas(new String[]{courseCode},
EntityEvaluated.CURSO,
anoLectivo,
cursoReport,
codigosTodosCursosDaEscola,
codigosEscola,
0,
cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade().getRespostasAgregadasChartTable(),
cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade(),
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS, null,
periodos, degrees, true);
 
ReportAlunosGenerator.criarGraficosRespostasAgregadas(new String[]{courseCode},
EntityEvaluated.CURSO,
anoLectivo,
cursoReport,
codigosTodosCursosDaEscola,
codigosEscola,
4000,
cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade().getRespostasAgregadasChartTable2Secs(),
cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade(),
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS, null,
periodos, degrees, false);
 
 
ReportAlunosGenerator.criarGraficosRespostasAgregadas(new String[]{courseCode},
EntityEvaluated.CURSO,
anoLectivo,
cursoReport,
codigosTodosCursosDaEscola,
codigosEscola,
0,
cursoReport.getCursoStats().getRespostasAgregadasGrupoSalas().getRespostasAgregadasChartTable(),
cursoReport.getCursoStats().getRespostasAgregadasGrupoSalas(),
PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS, null,
periodos, degrees, true);
 
ReportAlunosGenerator.criarGraficosRespostasAgregadas(new String[]{courseCode},
EntityEvaluated.CURSO,
anoLectivo,
cursoReport,
codigosTodosCursosDaEscola,
codigosEscola,
9000,
cursoReport.getCursoStats().getRespostasAgregadasGrupoSalas().getRespostasAgregadasChartTable2Secs(),
cursoReport.getCursoStats().getRespostasAgregadasGrupoSalas(),
PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS, null,
periodos, degrees, false);
 
 
 
UnidadesQueryDao.criarTabelasCadeirasCurso(courseCode,
anoLectivo,
cursoReport,
0, periodos, degrees,cursoReport.getCursoStats().getUnidadesStats());
 
ChartWithDataTable analiseConjuntaChartWithTable = criarAnaliseConjuntaDeUnidades(cursoReport.getCursoStats().getUnidadesStats());
cursoReport.setAnaliseConjuntaChartWithTable(analiseConjuntaChartWithTable);
 
String pathOrdenadaMediaUnidades = criarAnaliseConjuntaDeUnidadesOrdenadaMediaUnidades(cursoReport.getCursoStats().getUnidadesStats());
cursoReport.setAnaliseConjuntaChartOrderMediaUnidades(pathOrdenadaMediaUnidades);
 
String pathOrdenadaMediaSalas = criarAnaliseConjuntaDeUnidadesOrdenadaMediaSalas(cursoReport.getCursoStats().getUnidadesStats());
cursoReport.setAnaliseConjuntaChartOrderMediaSalas(pathOrdenadaMediaSalas);
 
ArrayList<TabelaPerguntaComparativosUnidades> listaTabelasComparativasUnidadesPergunta = criarAnaliseConjuntaDeUnidadesAPergunta(cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade().getPerguntasStats(), cursoReport.getCursoStats().getUnidadesStats(),PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,null);
cursoReport.setListaUnidadesComprativasPergunta(listaTabelasComparativasUnidadesPergunta);
 
ArrayList<TabelaPerguntaComparativosUnidades> listaTabelasComparativasUnidadesPerguntaSalas = criarAnaliseConjuntaDeUnidadesAPergunta(cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade().getPerguntasStats(), cursoReport.getCursoStats().getUnidadesStats(),PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS,null);
cursoReport.setListaUnidadesComprativasPerguntaSalas(listaTabelasComparativasUnidadesPerguntaSalas);
 
DataTable dataTableTodasAsUndiadesTodasPerguntas = criarTabelaComRespostasATodasAsPerguntas(cursoReport);
cursoReport.setTodasAsRespostasMediasGruposUnidadesESalas(dataTableTodasAsUndiadesTodasPerguntas);
 
 
AbstractDao.getCurrentSession().getTransaction().commit();
return cursoReport;
}
 
private DataTable criarTabelaComRespostasATodasAsPerguntas(CursoPublicReport cursoReport) {
DataTable tabelaComRespostasATodasAsPerguntasUnidadesSalas = new DataTable();
 
DataTable.Row headerHidden = tabelaComRespostasATodasAsPerguntasUnidadesSalas.addRowHeader();
headerHidden.setInvisible(true);
DataTable.Row headerGroups = tabelaComRespostasATodasAsPerguntasUnidadesSalas.addRowHeader();
DataTable.Row header = tabelaComRespostasATodasAsPerguntasUnidadesSalas.addRowHeader();
 
 
headerHidden.addColTextCenter("Inv " + "Unidade Curricular");
headerGroups.addColInvisible();
header.addColTextCenter("Unidade Curricular");
 
 
 
 
headerHidden.addColTextCenter("Inv " + "Curso");
headerGroups.addColInvisible();
header.addColTextCenter("Curso");
 
//CABECALHOS UNIDADES
List<PerguntaStats> perguntaStatsesUnidadeHeader = cursoReport.getCursoStats().getRespostasAgregadasGrupoUnidade().getPerguntasStats();
if(perguntaStatsesUnidadeHeader.size() > 0)
{
DataTable.Row.Col c = headerGroups.addColTextCenter("Unidade Curricular");
c.setColspan(perguntaStatsesUnidadeHeader.size());
c.setBackgroundColor(ChartBuilderUtil.getRgbXslColor(ChartBuilderUtil.COLOR_SECTION_GREEN));
Collections.sort(perguntaStatsesUnidadeHeader,new Comparator<PerguntaStats>() {
@Override
public int compare(PerguntaStats o1, PerguntaStats o2) {
return Integer.parseInt(o1.getNumero()) - Integer.parseInt(o2.getNumero());
}
});
for(PerguntaStats perguntaStats : perguntaStatsesUnidadeHeader)
{
headerHidden.addColTextCenter("Inv " + perguntaStats.getNumero());
header.addColTextCenter(perguntaStats.getNumero()).setBackgroundColor(ChartBuilderUtil.getRgbXslColor(ChartBuilderUtil.COLOR_SECTION_GREEN));
}
}
 
//CABECALHOS SALAS
List<PerguntaStats> perguntaStatsesSalasHeader = cursoReport.getCursoStats().getRespostasAgregadasGrupoSalas().getPerguntasStats();
if(perguntaStatsesSalasHeader.size() > 0)
{
DataTable.Row.Col c = headerGroups.addColTextCenter("Instalações");
c.setColspan(perguntaStatsesSalasHeader.size());
c.setBackgroundColor(ChartBuilderUtil.getRgbXslColor(ChartBuilderUtil.COLOR_SECTION_ROSE));
Collections.sort(perguntaStatsesSalasHeader,new Comparator<PerguntaStats>() {
@Override
public int compare(PerguntaStats o1, PerguntaStats o2) {
return Integer.parseInt(o1.getNumero()) - Integer.parseInt(o2.getNumero());
}
});
for(PerguntaStats perguntaStats : perguntaStatsesSalasHeader)
{
header.addColTextCenter(perguntaStats.getNumero());
headerHidden.addColTextCenter("Inv " + perguntaStats.getNumero()).setBackgroundColor(ChartBuilderUtil.getRgbXslColor(ChartBuilderUtil.COLOR_SECTION_ROSE));
}
}
 
 
 
 
header.addColTextCenter("Insc.");
headerHidden.addColTextCenter("Inv Insc.");
headerGroups.addColInvisible();
 
headerHidden.addColTextCenter("Inv Resps.");
header.addColTextCenter("Resps.");
headerGroups.addColInvisible();
 
for(UnidadeStats unidadeStats: cursoReport.getCursoStats().getUnidadesStats())
{
DataTable.Row unidadeRow = tabelaComRespostasATodasAsPerguntasUnidadesSalas.addRowNormal();
unidadeRow.addColTextCenter(unidadeStats.getNomeUnidade());
unidadeRow.addColTextCenter(unidadeStats.getNomeCurso());
 
 
//COLUNA POR CADA MEDIA DE CADA PERGUNTA NAS UNIDADES
List<PerguntaStats> perguntaStatsesUnidades = unidadeStats.getUnidadeStatsGrupoUnidade().getPerguntasStats();
Collections.sort(perguntaStatsesUnidades,new Comparator<PerguntaStats>() {
@Override
public int compare(PerguntaStats o1, PerguntaStats o2) {
return Integer.parseInt(o1.getNumero()) - Integer.parseInt(o2.getNumero());
}
});
 
for(PerguntaStats guiaHeader: perguntaStatsesUnidadeHeader)
{
boolean found = false;
for(PerguntaStats perguntaStats : perguntaStatsesUnidades)
{
if(perguntaStats.getNumero().equals(guiaHeader.getNumero()))
{
unidadeRow.addColPercentageDefinedCenter(perguntaStats.getMediaEntidadeEmAvaliacaoPrint(), perguntaStats.getPercentMediaEntidadeEmAvaliacao(), true);
found = true;
break;
}
}
if(!found)
unidadeRow.addColTextCenter("--");
}
 
 
//COLUNA POR CADA MEDIA DE CADA PERGUNTA NAS SALAS
List<PerguntaStats> perguntaStatsSalas = unidadeStats.getUnidadeStatsGrupoSalas().getPerguntasStats();
Collections.sort(perguntaStatsSalas,new Comparator<PerguntaStats>() {
@Override
public int compare(PerguntaStats o1, PerguntaStats o2) {
return Integer.parseInt(o1.getNumero()) - Integer.parseInt(o2.getNumero());
}
});
for(PerguntaStats guiaHeader: perguntaStatsesSalasHeader)
{
boolean found = false;
for(PerguntaStats perguntaStats : perguntaStatsSalas)
{
if(perguntaStats.getNumero().equals(guiaHeader.getNumero()))
{
unidadeRow.addColPercentageDefinedCenter(perguntaStats.getMediaEntidadeEmAvaliacaoPrint(), perguntaStats.getPercentMediaEntidadeEmAvaliacao(), true);
found = true;
break;
}
}
if(!found)
unidadeRow.addColTextCenter("--");
}
 
 
unidadeRow.addColTextCenter("" + unidadeStats.getInscritos());
unidadeRow.addColTextCenter("" + unidadeStats.getRespostas());
}
return tabelaComRespostasATodasAsPerguntasUnidadesSalas;
}
 
private ArrayList<TabelaPerguntaComparativosUnidades> criarAnaliseConjuntaDeUnidadesAPergunta(List<PerguntaStats> perguntasAgregadasGrupo, ArrayList<UnidadeStats> unidadesStats, String grupo, String subgrupo)
{
Map<String, List<UnidadePergunta>> unidadesPerguntas = new HashMap<String, List<UnidadePergunta>>();
for(UnidadeStats unidadeStats: unidadesStats)
{
for(PerguntaStats prgStatUnidade :unidadeStats.findUnidadeStatsGrupo(grupo,subgrupo).getPerguntasStats())
{
List<UnidadePergunta> unidadesPerguntasList = unidadesPerguntas.get(prgStatUnidade.getPergunta());
if(unidadesPerguntasList == null)
{
unidadesPerguntasList = new ArrayList<UnidadePergunta>();
unidadesPerguntas.put(prgStatUnidade.getPergunta(),unidadesPerguntasList);
}
unidadesPerguntasList.add(new UnidadePergunta(unidadeStats,prgStatUnidade));
}
}
ArrayList<TabelaPerguntaComparativosUnidades> tabelas = new ArrayList<TabelaPerguntaComparativosUnidades>();
 
 
for(String pergunta: unidadesPerguntas.keySet())
{
TabelaPerguntaComparativosUnidades tabelaPerguntaComparativosUnidades = new TabelaPerguntaComparativosUnidades();
tabelas.add(tabelaPerguntaComparativosUnidades);
tabelaPerguntaComparativosUnidades.setPergunta(pergunta);
 
DataTable perguntaUnidadesTable = new DataTable();
tabelaPerguntaComparativosUnidades.setTabelaComparativaUnidades(perguntaUnidadesTable);
DataTable.Row header = perguntaUnidadesTable.addRowHeader();
header.addColTextCenter("Unidade Curricular");
header.addColTextCenter("Curso");
header.addColTextCenter("Insc.");
header.addColTextCenter("Resp.");
header.addColTextCenter("% Resposta");
header.addColTextCenter("Média");
header.addColTextCenter("Desvio");
 
List<UnidadePergunta> unidadesPergunta = unidadesPerguntas.get(pergunta);
 
//SUPOSTAMENTE VEM SEMPRE PREENCHIDO
if(unidadesPergunta != null && unidadesPergunta.size() > 0)
tabelaPerguntaComparativosUnidades.setPerguntaNumero(unidadesPergunta.get(0).getPerguntaStats().getNumero());
 
Collections.sort(unidadesPergunta,new Comparator<UnidadePergunta>() {
@Override
public int compare(UnidadePergunta o1, UnidadePergunta o2) {
double sub = o2.getPerguntaStats().getMediaEntidadeEmAvaliacao() - o1.getPerguntaStats().getMediaEntidadeEmAvaliacao();
if(sub < 0.0)
return -1;
else if (sub > 0.0)
return 1;
else return 0;
}
});
for(UnidadePergunta unidadePergunta: unidadesPergunta)
{
DataTable.Row rowUnidade = perguntaUnidadesTable.addRowNormal();
 
rowUnidade.addColLabelCenter(unidadePergunta.getUnidadeStats().getNomeUnidade());
rowUnidade.addColLabelCenter(unidadePergunta.getUnidadeStats().getNomeCurso());
rowUnidade.addColTextRight("" + unidadePergunta.getUnidadeStats().getInscritos());
rowUnidade.addColTextRight("" + unidadePergunta.getUnidadeStats().getRespostas());
rowUnidade.addColTextRight("" + unidadePergunta.getUnidadeStats().getTaxaRespostaPrint0Slots());
rowUnidade.addColPercentageDefinedCenter("" + unidadePergunta.getPerguntaStats().getMediaEntidadeEmAvaliacaoPrint(), unidadePergunta.getPerguntaStats().getPercentMediaEntidadeEmAvaliacao(), true);
rowUnidade.addColTextRight(unidadePergunta.getPerguntaStats().getDesvio());
}
 
}
 
return tabelas;
}
 
private ChartWithDataTable criarAnaliseConjuntaDeUnidades(List<UnidadeStats> unidadesStats)
{
DataTable tabelaDocenteUnidade = new DataTable();
try {
 
Collections.sort(unidadesStats, new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
return o1.getNomeUnidade().compareTo(o2.getNomeUnidade());
}
});
String unidadeSalasPath = criarChartETabelaMediaGruposPorUnidade(500,30, unidadesStats,
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,
null,
PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS,
null,
tabelaDocenteUnidade,
"unidadeSalas",
new Color[]{ChartBuilderUtil.COLOR_SECTION_GREEN_DARK,ChartBuilderUtil.COLOR_SECTION_ROSE_DARK},
new Color[]{Color.black,Color.black}
);
 
return
new ChartWithDataTable(
"Analise Conjunta de Unidades",
"Unidade VS Instalações/Equipamentos/Outros Recursos",
unidadeSalasPath,
tabelaDocenteUnidade);
 
} catch (IOException e) {
logger.error(e,e);
}
return null;
 
}
 
private String criarAnaliseConjuntaDeUnidadesOrdenadaMediaUnidades(List<UnidadeStats> unidadesStats)
{
try {
 
Collections.sort(unidadesStats,new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
 
double sub = (o2.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia()
-
o1.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia());
if(sub > 0.0)
return 1;
else if (sub < 0.0)
return -1;
return 0;
}
});
String unidadeSalasPath = criarChartETabelaMediaGruposPorUnidade(500,30, unidadesStats,
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,
null,
PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS,
null,
null,
"unidadeSalasOrderMediaUnidades",
new Color[]{ChartBuilderUtil.COLOR_SECTION_GREEN_DARK,ChartBuilderUtil.COLOR_SECTION_ROSE_DARK},
new Color[]{Color.black,Color.black}
);
 
return unidadeSalasPath;
 
} catch (IOException e) {
logger.error(e,e);
}
return null;
 
}
 
private String criarAnaliseConjuntaDeUnidadesOrdenadaMediaSalas(List<UnidadeStats> unidadesStats)
{
try {
 
Collections.sort(unidadesStats,new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
 
double sub = (o2.getUnidadeStatsGrupoSalas().getMediasGrupo().getAvaliacaoMedia()
-
o1.getUnidadeStatsGrupoSalas().getMediasGrupo().getAvaliacaoMedia());
if(sub > 0.0)
return 1;
else if (sub < 0.0)
return -1;
return 0;
}
});
String unidadeSalasPath = criarChartETabelaMediaGruposPorUnidade(500,30, unidadesStats,
PerguntasGrupoQueryDao.GRUPO_UNIDADE_CODE_PERGUNTAS,
null,
PerguntasGrupoQueryDao.GRUPO_SALAS_CODE_PERGUNTAS,
null,
null,
"unidadeSalasOrderMediaSalas",
new Color[]{ChartBuilderUtil.COLOR_SECTION_GREEN_DARK,ChartBuilderUtil.COLOR_SECTION_ROSE_DARK},
new Color[]{Color.black,Color.black}
);
 
return unidadeSalasPath;
 
} catch (IOException e) {
logger.error(e,e);
}
return null;
 
}
 
 
/**
*
* @param semanaContagemCurso List<[count,Week,Year]>
*/
private DataTable criarEvolucaoTaxasRespostas(List<Object[]> semanaContagemCurso, int respostasRequisitadas)
{
DataTable tableEvolucaoRespostas = new DataTable();
 
DataTable.Row header = tableEvolucaoRespostas.addRowHeader();
 
header.addColTextCenter("Semana");
header.addColTextCenter("Respostas obtidas na semana");
header.addColTextCenter("Respostas Acumuladas");
header.addColTextCenter("Por Responder");
header.addColTextCenter("Esperadas");
header.addColTextCenter("%");
 
int acumuladas = 0;
 
SimpleDateFormat dateFormat = new SimpleDateFormat( "dd-MMM-yyyy" );
 
if(semanaContagemCurso.size() > 0)
{
for(Object[] semanaObj : semanaContagemCurso)
{
Long count = (Long) semanaObj[0];
acumuladas += count;
int faltam = respostasRequisitadas - acumuladas;
Integer semana = (Integer) semanaObj[1];
Integer ano = (Integer) semanaObj[2];
String percentagemPrt = ChartBuilderUtil.getPercentagemPrint0Slots(acumuladas,respostasRequisitadas);
double percentagem = ChartBuilderUtil.getPercentagem(acumuladas,respostasRequisitadas);
 
Calendar calendar = Calendar.getInstance();
calendar.clear();
 
calendar.set(Calendar.YEAR, ano);
calendar.set(Calendar.WEEK_OF_YEAR, semana);
calendar.set(Calendar.DAY_OF_WEEK, 7);
String dataFinalDaSemana = dateFormat.format(calendar.getTime());
 
DataTable.Row rowSemana = tableEvolucaoRespostas.addRowNormal();
rowSemana.addColTextCenter(dataFinalDaSemana);
rowSemana.addColNumberRight(count + "");
rowSemana.addColNumberRight(acumuladas + "").setBackgroundColor(DataTable.getColorGradientForPercentage(percentagem/100.0));
rowSemana.addColNumberRight(faltam + "");
rowSemana.addColNumberRight(""+ respostasRequisitadas);
rowSemana.addColPercentageProgressCenter(percentagemPrt);
}
}
return tableEvolucaoRespostas;
}
 
@Override
protected ILogMessages runJobServiceTask() throws Throwable
{
long questionarioReportId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_report_id_KEY).getObject());
DefaultLogMessages logMessages = new DefaultLogMessages();
return null;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/queries/PerguntasGrupoQueryDao.java
New file
0,0 → 1,589
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 String GRUPO_DOCENTE_CODE_PERGUNTAS = "Docente";
public static final String GRUPO_UNIDADE_CODE_PERGUNTAS = "Unidade";
 
public static final String GRUPO_DOCENTE_REL_ALUNO_CODE_PERGUNTAS = "D_RelAluno";
public static final String GRUPO_DOCENTE_PROFISSIONALISMO_DOCENTE_CODE_PERGUNTAS = "D_ProfissRigorDocente";
 
public static final String GRUPO_SALAS_CODE_PERGUNTAS = "Salas";
public static final String GRUPO_ESTAGIO_CODE_PERGUNTAS = "EstagioProj";
public static final String GRUPO_ENSINO_CLINICO_CODE_PERGUNTAS = "PraEnsinoCliPraEnsinoSupervisionado";
 
 
public static void getMediasGrupo(String[] codes,
EntityEvaluated entityEvaluated,
String anoLectivo,
QuestionariosAlunosReport report,
List<String> codigosCurso,
List<String> codigosEscola,
String grupo,
String subGrupo,
MediasGrupo medias,
String[] periodos,
String[] degrees
)
{
Query query;
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
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 RuntimeException("Não implementado");
}
 
 
 
Object[] result = (Object[]) query.uniqueResult();
 
 
Double mediaGrupo = (Double) result[0];
Double desvio = (Double) result[1];
long total = report.getInquiridosComResposta();
double min = mediaGrupo - (desvio*2);
double max = mediaGrupo + (desvio*2);
if(max > 5) max = 5;
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormat df2 = new 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 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(String teacherCode,
String anoLectivo,
DocenteReport docenteReport,
List<String> codigosCurso,
List<String> codigosEscola,
String grupo,
String subGrupo,
MediasGrupo medias
,String[] periodos
,String[] degrees)
{
Query query;
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
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");
 
 
Object[] result = (Object[]) query.uniqueResult();
 
 
Double mediaGrupo = (Double) result[0];
Double desvio = (Double) result[1];
long total = docenteReport.getInquiridosComResposta();
double min = mediaGrupo - (desvio*2);
double max = mediaGrupo + (desvio*2);
if(max > 5) max = 5;
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormat df2 = new 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,String codigoCurso, String anoLectivo, String numeroPergunta,String[] periodos)
{
 
String key = codigoCurso + "-" + anoLectivo + "-" + numeroPergunta;
if(report.getMediasPerguntaNoCurso().get(key) != null)
return report.getMediasPerguntaNoCurso().get(key);
 
//String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);
 
 
MediaGlobalCursoPergunta mediaGlobalCursoPergunta = new MediaGlobalCursoPergunta();
report.getMediasPerguntaNoCurso().put(key,mediaGlobalCursoPergunta);
 
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);
 
Object[] result = (Object[]) query.uniqueResult();
 
 
mediaGlobalCursoPergunta.numeroPergunta = numeroPergunta;
mediaGlobalCursoPergunta.pergunta = (String) result[4];
mediaGlobalCursoPergunta.codigoCurso = codigoCurso;
mediaGlobalCursoPergunta.nomeCurso = (String) result[5];
mediaGlobalCursoPergunta.media = (Double) result[0];
mediaGlobalCursoPergunta.desvio = (Double) result[1];
mediaGlobalCursoPergunta.total = ((Long) result[2]).intValue();
mediaGlobalCursoPergunta.tempoLevadoMedia = (Double) result[3];
mediaGlobalCursoPergunta.numeroUnidades = ((Long) result[6]).intValue();
 
 
return mediaGlobalCursoPergunta;
}
 
public static MediaGlobalCursoGrupo getMediaCursoGrupo(QuestionariosAlunosReport report,String codigoCurso, String anoLectivo, String grupo,String subGrupo,
String[] periodos)
{
 
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);
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);
 
 
MediaGlobalCursoGrupo mediaGlobalCursoGrupo = new MediaGlobalCursoGrupo();
report.getMediasGrupoNoCurso().put(key,mediaGlobalCursoGrupo);
 
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);
 
Object[] result = (Object[]) query.uniqueResult();
 
 
mediaGlobalCursoGrupo.grupo = grupo;
mediaGlobalCursoGrupo.codigoCurso = codigoCurso;
mediaGlobalCursoGrupo.nomeCurso = (String) result[4];
mediaGlobalCursoGrupo.media = (Double) result[0];
mediaGlobalCursoGrupo.desvio = (Double) result[1];
mediaGlobalCursoGrupo.total = ((Long) result[2]).intValue();
mediaGlobalCursoGrupo.tempoLevadoMedia = (Double) result[3];
mediaGlobalCursoGrupo.numeroUnidades = ((Long) result[5]).intValue();
 
 
return mediaGlobalCursoGrupo;
}
public static MediaGlobalEscolaPergunta getMediaEscolaPergunta(QuestionariosAlunosReport report,String codigoEscola, String anoLectivo, String numeroPergunta,
String[] periodos ,String[] degrees)
{
String key = codigoEscola + "-" + anoLectivo + "-" + numeroPergunta;
if(report.getMediasGrupoNaEscola().get(key) != null)
return report.getMediasPerguntaNaEscola().get(key);
 
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);
 
 
MediaGlobalEscolaPergunta mediaGlobalEscolaPergunta = new MediaGlobalEscolaPergunta();
report.getMediasPerguntaNaEscola().put(key,mediaGlobalEscolaPergunta);
 
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);
 
Object[] result = (Object[]) query.uniqueResult();
 
 
mediaGlobalEscolaPergunta.numeroPergunta = numeroPergunta;
mediaGlobalEscolaPergunta.pergunta = (String) result[5];
mediaGlobalEscolaPergunta.codigoEscola = codigoEscola;
mediaGlobalEscolaPergunta.nomeDaEscola = (String) result[4];
mediaGlobalEscolaPergunta.media = (Double) result[0];
mediaGlobalEscolaPergunta.desvio = (Double) result[1];
mediaGlobalEscolaPergunta.total = ((Long) result[2]).intValue();
mediaGlobalEscolaPergunta.tempoLevadoMedia = (Double) result[3];
mediaGlobalEscolaPergunta.numeroUnidades = ((Long) result[6]).intValue();
 
 
return mediaGlobalEscolaPergunta;
}
 
public static MediaGlobalEscolaGrupo getMediaEscolaGrupo(QuestionariosAlunosReport report,String codigoEscola, String anoLectivo, String grupo,String subGrupo,
String[] periodos ,String[] degrees)
{
String key = codigoEscola + "-" + anoLectivo + "-" + (grupo == null ? "_" : grupo) + "-" + (subGrupo == null ? "_" : subGrupo);
if(report.getMediasGrupoNaEscola().get(key) != null)
return report.getMediasGrupoNaEscola().get(key);
 
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees,"curso",true);
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos,"quest",true);
 
MediaGlobalEscolaGrupo mediaGlobalEscolaGrupo = new MediaGlobalEscolaGrupo();
report.getMediasGrupoNaEscola().put(key,mediaGlobalEscolaGrupo);
 
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);
 
Object[] result = (Object[]) query.uniqueResult();
 
 
mediaGlobalEscolaGrupo.grupo = grupo;
mediaGlobalEscolaGrupo.codigoEscola = codigoEscola;
mediaGlobalEscolaGrupo.nomeDaEscola = (String) result[4];
mediaGlobalEscolaGrupo.media = (Double) result[0];
mediaGlobalEscolaGrupo.desvio = (Double) result[1];
mediaGlobalEscolaGrupo.total = ((Long) result[2]).intValue();
mediaGlobalEscolaGrupo.tempoLevadoMedia = (Double) result[3];
mediaGlobalEscolaGrupo.numeroUnidades = ((Long) result[5]).intValue();
 
return mediaGlobalEscolaGrupo;
}
 
 
 
 
 
public static class MediaGlobalCurso extends MediaGlobalResult
{
public String nomeCurso;
public String codigoCurso;
public int numeroUnidades;
}
 
public static class MediaGlobalEscola extends MediaGlobalResult
{
public String nomeDaEscola;
public String codigoEscola;
public int numeroUnidades;
}
 
public static class MediaGlobalEscolaPergunta extends MediaGlobalEscola
{
public String numeroPergunta;
public String pergunta;
}
 
public static class MediaGlobalEscolaGrupo extends MediaGlobalEscola
{
public String grupo;
}
 
public static class MediaGlobalCursoPergunta extends MediaGlobalCurso
{
public String numeroPergunta;
public String pergunta;
}
 
public static class MediaGlobalCursoGrupo extends MediaGlobalCurso
{
public String grupo;
}
 
public static class MediaGlobalResult
{
public double media;
public double desvio;
public int total;
public double tempoLevadoMedia;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/queries/QuestionariosQueryDao.java
New file
0,0 → 1,276
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries;
 
import jomm.dao.impl.AbstractDao;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.OlapStarFactQuestionario;
import pt.estgp.estgweb.services.questionarios.PedagogicoAlunosProcessor;
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.reportsdomain.QuestionariosReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.utils.DataTable;
 
import java.util.List;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class QuestionariosQueryDao
{
 
public static String getWhereEntityCodesFragment(String[] codes, EntityEvaluated entityEvaluated) {
String whereFragmentEntity = "" ;
if(entityEvaluated == EntityEvaluated.DOCENTE)
{
whereFragmentEntity = " and tipo.codigoSiges = '" + codes[0] + "' ";
}
else if(entityEvaluated == EntityEvaluated.CURSO)
{
whereFragmentEntity = " and curso.codigoCurso = '" + codes[0] + "' ";
}
else if(entityEvaluated == EntityEvaluated.ESCOLA)
{
whereFragmentEntity = " and curso.codigoInstituicao = '" + codes[0] + "' ";
}
else if(entityEvaluated == EntityEvaluated.CURSOS)
{
String union = " ";
for(String code:codes)
{
whereFragmentEntity += union + " curso.codigoCurso = '" + code + "' ";
union = " or ";
}
whereFragmentEntity = " and (" + whereFragmentEntity + ") ";
}
else
{
throw new RuntimeException("Nao esta a entidade em avaliacao implementada");
}
return whereFragmentEntity;
}
 
public static void countQuestionariosRespostasAoDocente(String teacherCode, String anoLectivo, QuestionariosAlunosReport report, String[] periodos, String[] degrees)
{
countQuestionariosRespostasGen(new String[]{teacherCode},EntityEvaluated.DOCENTE,anoLectivo,report,periodos,degrees);
}
public static void countQuestionariosRespostasAoCurso(String courseCode, String anoLectivo, QuestionariosAlunosReport report, String[] periodos, String[] degrees)
{
countQuestionariosRespostasGen(new String[]{courseCode},EntityEvaluated.CURSO,anoLectivo,report,periodos,degrees);
}
public static void countQuestionariosRespostasAoCursos(String[] courseCodes, String anoLectivo, QuestionariosAlunosReport report, String[] periodos, String[] degrees)
{
countQuestionariosRespostasGen(courseCodes,EntityEvaluated.CURSOS,anoLectivo,report,periodos,degrees);
}
public static void countQuestionariosRespostasAoCursos(List<String> courseCodes, String anoLectivo, QuestionariosAlunosReport report, String[] periodos, String[] degrees)
{
countQuestionariosRespostasGen((String[]) courseCodes.toArray(),EntityEvaluated.CURSOS,anoLectivo,report,periodos,degrees);
}
public static void countQuestionariosRespostasGen(String[] codes, EntityEvaluated entityEvaluated, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees) {
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
 
String whereFragmentEntity = getWhereEntityCodesFragment(codes, entityEvaluated);
 
Query query;
Object result;
 
 
//Questionários Respondidos
query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"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 " +
"FROM " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where quest.ano = :ano " +
whereFragmentEntity +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery
);
 
//query.setString("codigoSiges",code);
query.setString("ano",anoLectivo);
Object[] result2 = (Object[]) query.uniqueResult();
 
docenteReport.questionariosReqRespondidos = ((Long) result2[0]).intValue();
docenteReport.questionariosReqNaoRespondidos = ((Long) result2[1]).intValue();
docenteReport.questionariosReqTotal = docenteReport.questionariosReqRespondidos + docenteReport.questionariosReqNaoRespondidos;
docenteReport.questionariosReqRespondidosPercentagem = (int)(((float)docenteReport.questionariosReqRespondidos/(float)docenteReport.questionariosReqTotal)*100.f);
docenteReport.questionariosReqRespondidosPercentagemColor = DataTable.getColorGradientForPercentage(((double)docenteReport.questionariosReqRespondidosPercentagem)/100.0);
//docenteReport.questionariosReqRespondidosPercentagem =53;
}
 
public static void createDataTableLocalidadesAoDocente(QuestionariosReport report, String teacherCode, String anoLectivo, String[] periodos, String[] degrees,
String targetPopulationTitle) {
createDataTableLocalidadesGen(report, new String[]{teacherCode}, EntityEvaluated.DOCENTE, anoLectivo, periodos, degrees,targetPopulationTitle);
}
public static void createDataTableLocalidadesAoCurso(QuestionariosReport report, String courseCode, String anoLectivo, String[] periodos, String[] degrees,
String targetPopulationTitle) {
createDataTableLocalidadesGen(report, new String[]{courseCode}, EntityEvaluated.CURSO, anoLectivo, periodos, degrees,targetPopulationTitle);
}
public static void createDataTableLocalidadesAoCursos(QuestionariosReport report, String[] courseCodes, String anoLectivo, String[] periodos, String[] degrees,
String targetPopulationTitle) {
createDataTableLocalidadesGen(report, courseCodes, EntityEvaluated.CURSOS, anoLectivo, periodos, degrees,targetPopulationTitle);
}
public static void createDataTableLocalidadesAoCursos(QuestionariosReport report, List<String> courseCodes, String anoLectivo, String[] periodos, String[] degrees,
String targetPopulationTitle) {
createDataTableLocalidadesGen(report, (String[]) courseCodes.toArray(), EntityEvaluated.CURSOS, anoLectivo, periodos, degrees,targetPopulationTitle);
}
 
public static void createDataTableLocalidadesGen(QuestionariosReport docenteReport, String[] codes, EntityEvaluated entityEvaluated, String anoLectivo, String[] periodos, String[] degrees,
String targetPopulationTitle) {
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
 
String whereFragmentEntity = getWhereEntityCodesFragment(codes, entityEvaluated);
 
 
Query query = AbstractDao.getCurrentSession().createQuery(
"select count(distinct user.sigesCode), user.distrito from " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
" group by user.distrito " +
"order by count(distinct user.sigesCode) desc");
query.setMaxResults(4);
 
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
 
List<Object[]> localidades = query.list();
 
DataTable tableLocalidades = new DataTable();
docenteReport.setTabelaDistritos(tableLocalidades);
 
 
DataTable.Row header = tableLocalidades.addRowHeader();
header.addColTextCenter("Distrito");
header.addColTextCenter(targetPopulationTitle);
header.addColTextCenter("%");
 
int contados = 0;
for(int i = 0; i < 3 && i < localidades.size(); i++)
{
DataTable.Row rowDistrito = tableLocalidades.addRowNormal();
Long num = (Long)localidades.get(i)[0];
contados += num;
String distrit = (String)localidades.get(i)[1];
if(distrit!=null)
rowDistrito.addColTextCenter(distrit);
if(num!=null)
rowDistrito.addColTextCenter("" + num);
int percentage = (int)(((float)(num) / ((float)docenteReport.getInquiridosComResposta()) * 100.0));
rowDistrito.addColPercentageCenter("" + percentage);
}
 
//int contagemOutros = 0;
/*for(int i = 3; i < localidades.size(); i++)
{
Long outro = (Long)localidades.get(i)[0];
if(outro != null)
contagemOutros += outro;
}*/
int contagemOutros = docenteReport.getInquiridosComResposta() - contados;
DataTable.Row rowOutros = tableLocalidades.addRowNormal();
rowOutros.addColTextCenter("Outros");
rowOutros.addColTextCenter(""+contagemOutros);
int percentage = (int)(((float)(contagemOutros) / ((float)docenteReport.getInquiridosComResposta()) * 100.0));
rowOutros.addColPercentageCenter("" + percentage);
 
 
DataTable.Row footer = tableLocalidades.addRowFooter();
footer.addColTextCenter("Total");
footer.addColTextCenter("" + docenteReport.getInquiridosComResposta());
footer.addColPercentageCenter("100");
 
 
}
 
 
public static void createDataTableIdades(QuestionariosReport questionariosReport, String targetPopulationTitle)
{
DataTable tableIdades = new DataTable();
questionariosReport.setTabelaIdades(tableIdades);
 
DataTable.Row header = tableIdades.addRowHeader();
header.addColTextCenter("Idade");
header.addColTextCenter(targetPopulationTitle);
header.addColTextCenter("%");
 
DataTable.Row row17_22 = tableIdades.addRowNormal();
row17_22.addColTextCenter("17 aos 22");
row17_22.addColTextCenter("" + questionariosReport.idade17_22);
row17_22.addColPercentageCenter("" + questionariosReport.idade17_22Percent);
 
DataTable.Row row23_25 = tableIdades.addRowNormal();
row23_25.addColTextCenter("23 aos 25");
row23_25.addColTextCenter("" + questionariosReport.idade23_25);
row23_25.addColPercentageCenter("" + questionariosReport.idade23_25Percent);
 
DataTable.Row row26_30 = tableIdades.addRowNormal();
row26_30.addColTextCenter("26 aos 30");
row26_30.addColTextCenter("" + questionariosReport.idade26_30);
row26_30.addColPercentageCenter("" + questionariosReport.idade26_30Percent);
 
DataTable.Row rowM30 = tableIdades.addRowNormal();
rowM30.addColTextCenter("> 30");
rowM30.addColTextCenter("" + questionariosReport.idadeM30);
rowM30.addColPercentageCenter("" + questionariosReport.idadeM30Percent);
 
DataTable.Row footer = tableIdades.addRowFooter();
footer.addColTextCenter("Total");
footer.addColTextCenter("" + questionariosReport.getInquiridosComResposta());
footer.addColPercentageCenter("100");
 
//return tableIdades;
}
 
public static List<Object[]> obtainEvolucaoRespostas(String[] codes, EntityEvaluated entityEvaluated, String anoLectivo, String[] periodos, String[] degrees)
{
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
String whereFragmentEntity = getWhereEntityCodesFragment(codes, entityEvaluated);
 
 
Query query = AbstractDao.getCurrentSession().createQuery(
"select count(distinct fc.id), " +
"week(fc.dataFim), " +
"year(fc.dataFim) " +
"from " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"quest.ano = :ano " +
whereFragmentEntity +
" and fc.respondido = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
" group by week(fc.dataFim) " +
"order by week(fc.dataFim) asc");
 
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
return query.list();
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/queries/UnidadesQueryDao.java
New file
0,0 → 1,670
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 Logger logger = Logger.getLogger(UnidadesQueryDao.class);
 
 
 
 
 
 
public static void getMediasCadeira(String[] codes,
EntityEvaluated entityEvaluated,
String anoLectivo,
QuestionariosAlunosReport report,
String grupo,
String subGrupo,
MediasGrupo medias,
String codigoUnidade,
String codigoCurso,
String codigoInstituicao,
String semestre,
String[] periodos,
String[] degrees
)
{
Query query;
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");
 
 
Object[] result = (Object[]) query.uniqueResult();
 
 
Double mediaGrupo = (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;
}
Double desvio = (Double) result[1];
long total = (Long) result[2];
double min = mediaGrupo - (desvio*2);
double max = mediaGrupo + (desvio*2);
if(max > 5) max = 5;
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df4 = new 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(String courseCode, String anoLectivo, QuestionariosAlunosReport cursoReport, int tempoLevadoMinimo,
String[] periodos, String[] degrees,List<UnidadeStats> unidadeStatsList)
{
criarTabelasCadeiras(new String[]{courseCode},EntityEvaluated.CURSO,anoLectivo,cursoReport,tempoLevadoMinimo,
periodos,degrees,unidadeStatsList);
}
 
public static void criarTabelasCadeirasDocente(String teacherCode, String anoLectivo, QuestionariosAlunosReport docenteReport, int tempoLevadoMinimo,
String[] periodos, String[] degrees,List<UnidadeStats> unidadeStatsList)
{
criarTabelasCadeiras(new 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(String[] codes,EntityEvaluated entityEvaluated, String anoLectivo, QuestionariosAlunosReport report, int tempoLevadoMinimo,
String[] periodos, String[] degrees,List<UnidadeStats> unidadeStatsList)
{
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes,entityEvaluated);
 
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(Object[] cadeira : cadeiras)
{
String nomeUnidade = (String) cadeira[0];
String codigoUnidade = (String) cadeira[1];
String semestreUnidade = (String) cadeira[2];
String codigoCurso = (String) cadeira[3];
String nomeCurso = (String) cadeira[4];
String codigoInstituicao = (String) cadeira[5];
String nomeInstituicao = (String) cadeira[6];
Long respostas = (Long) cadeira[7];
Long inscritos = (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 RuntimeException("Nao implementado");
}
 
unidadeStatsList.add(statsUnidade);
 
}
}
 
public static UnidadeStats.UnidadeStatsGrupo criarTabelasRespostasCadeira(String teacherCode,
String anoLectivo,
DocenteReport docenteReport,
double tempoMinimo,
String grupo,
String subGrupo,
String codigoUnidade,
String codigoCurso,
String semestre,
String codigoInstituicao,
String[] periodos,
String[] degrees)
{
return criarTabelasRespostasCadeira(new 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(
String[] codes,
EntityEvaluated entityEvaluated,
String anoLectivo,
QuestionariosAlunosReport docenteReport,
double tempoMinimo,
String grupo,
String subGrupo,
String codigoUnidade,
String codigoCurso,
String semestre,
String codigoInstituicao,
String[] periodos,
String[] degrees)
{
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes, entityEvaluated);
UnidadeStats.UnidadeStatsGrupo unidadeData = new UnidadeStats.UnidadeStatsGrupo(grupo,subGrupo);
 
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(Object[] resultTest : resultsTest)
{
Double tempoMedioLevado = (Double) resultTest[10];
Double mediaDocente = (Double) resultTest[0];
Double desvio = (Double) resultTest[6];
Long total = (Long) resultTest[7];
double min = mediaDocente - (desvio*2);
double max = mediaDocente + (desvio*2);
if(max > 5) max = 5;
DecimalFormat df = new DecimalFormat("#.##");
String pergunta = resultTest[8].toString();
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());
 
Long respostas1 = (Long) resultTest[1];
Long respostas2 = (Long) resultTest[2];
Long respostas3 = (Long) resultTest[3];
Long respostas4 = (Long) resultTest[4];
Long respostas5 = (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);
}
 
String percentagemDocente = ChartBuilderUtil.getPercentagemPrint0Slots(mediaDocente, 5);
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, String teacherCode, String anoLectivo, String[] periodos, String[] degrees) {
createTableTaxaRespostaUnidadeGen(docenteReport,new String[]{teacherCode},EntityEvaluated.DOCENTE,anoLectivo,periodos,degrees);
}
public static void createTableTaxaRespostaUnidadeAoCurso(QuestionariosAlunosReport report, String courseCode, String anoLectivo, String[] periodos, String[] degrees) {
createTableTaxaRespostaUnidadeGen(report,new String[]{courseCode},EntityEvaluated.CURSO,anoLectivo,periodos,degrees);
}
public static void createTableTaxaRespostaUnidadeAoCurso(QuestionariosAlunosReport report, String[] courseCodes, String anoLectivo, String[] periodos, String[] degrees) {
createTableTaxaRespostaUnidadeGen(report,courseCodes,EntityEvaluated.CURSOS,anoLectivo,periodos,degrees);
}
public static void createTableTaxaRespostaUnidadeAoCurso(QuestionariosAlunosReport report, List<String> courseCodes, String anoLectivo, String[] periodos, String[] degrees) {
createTableTaxaRespostaUnidadeGen(report, (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, String[] codes, EntityEvaluated entityEvaluated, String anoLectivo, String[] periodos, String[] degrees) {
 
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes, entityEvaluated);
 
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);
 
Collections.sort(result,new Comparator<Object[]>() {
@Override
public int compare(Object[] o1, Object[] o2)
{
Long respondidos2 = (Long) o2[1];
Long inscritos2 = (Long) o2[3];
int respondidosInt2 = respondidos2 != null ? ((Long) respondidos2).intValue() : 0;
int inscritosInt2 = inscritos2 != null ? ((Long) inscritos2).intValue() : 0;
 
Long respondidos1 = (Long) o1[1];
Long inscritos1 = (Long) o1[3];
int respondidosInt1 = respondidos1 != null ? ((Long) respondidos1).intValue() : 0;
int inscritosInt1 = inscritos1 != null ? ((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(Object[] unidade: result)
{
 
 
DataTable.Row rowUnidade = tableTaxaRespostaUnidade.addRowNormal();
String unidadeNome = (String) unidade[0];
Long respondidos = (Long) unidade[1];
Long naoRespondidos = (Long) unidade[2];
Long inscritos = (Long) unidade[3];
String codigo = (String) unidade[4];
 
 
int respondidosInt = respondidos != null ? ((Long) respondidos).intValue() : 0;
int inscritosInt = inscritos != null ? ((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;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/queries/QueryDaoUtils.java
New file
0,0 → 1,561
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.OlapStarFactQuestionarioAnswer;
import pt.estgp.estgweb.services.questionarios.PedagogicoAlunosProcessor;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 30/11/16.
*/
public class QueryDaoUtils
{
 
private static final Logger logger = Logger.getLogger(QueryDaoUtils.class);
/**
* creates a where clause for periodos S1, S2, A, T1, T2, T3, T4
* @param periodos
* @param questVar
* @param useAndConcat
* @return
*/
public static String createPeriodosQuery(String[] periodos, String questVar, boolean useAndConcat) {
String periodosQuery = "";
if(periodos != null && periodos.length > 0)
{
StringBuilder periodosFilter = new StringBuilder();
 
String union = " ";
for(String periodo : periodos)
{
periodosFilter.append(union).append(questVar + ".semestre = '" + periodo + "'");
union = " or ";
}
periodosQuery = " (" + periodosFilter.toString() + ")";
if(useAndConcat)
periodosQuery = " and " + periodosQuery;
}
return periodosQuery;
}
 
/**
* Create a where clause for degrees query L, T, M etc
* @param degrees
* @param cursoVar
* @param useAndConcat
* @return
*/
 
public static String createDegreesQuery(String[] degrees, String cursoVar, boolean useAndConcat) {
String degreesQuery = "";
if(degrees != null && degrees.length > 0)
{
StringBuilder degreesFilter = new StringBuilder();
 
String union = " ";
for(String degree : degrees)
{
degreesFilter.append(union).append(cursoVar + ".degree = '" + degree + "'");
union = " or ";
}
degreesQuery = " (" + degreesFilter.toString() + ") ";
if(useAndConcat)
degreesQuery = " and " + degreesQuery;
}
return degreesQuery;
}
 
public static String createCursosQuery(List<String> codigosCurso,boolean addAndConcat)
{
if(codigosCurso == null || codigosCurso.size() == 0)
return "";
 
//GET QUERY PARCIAL DE CURSOS ONDE LECCIONA O DOCENTE
StringBuilder queryCurso = new StringBuilder();
String union = "";
for( String codigoCurso: codigosCurso )
{
queryCurso.append(union).append(" curso.codigoCurso = '" + codigoCurso + "' ");
union = " or ";
}
 
String queryFilter = " (" + queryCurso.toString() + ") ";
if(addAndConcat)
queryFilter = " and " + queryFilter;
return queryFilter;
}
 
public static String createEscolasQuery(List<String> codigosEscolas,boolean addAndConcat)
{
if(codigosEscolas == null || codigosEscolas.size() == 0)
return "";
 
//GET QUERY PARCIAL DE CURSOS ONDE LECCIONA O DOCENTE
StringBuilder queryEscolas = new StringBuilder();
String union = "";
for( String codigoEscola: codigosEscolas )
{
queryEscolas.append(union).append(" curso.codigoInstituicao = '" + codigoEscola + "'");
union = " or ";
}
 
String queryFilter = " (" + queryEscolas.toString() + ")";
if(addAndConcat)
queryFilter+= " and " + queryFilter;
return queryFilter;
}
 
public static double getMediaCursos(List<String> codigosCurso, String anoLectivo, String numeroPergunta, double tempoMinimo, String grupo, String subGrupo,String[] periodos, String[] degrees) {
 
 
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
 
//GET QUERY PARCIAL DE CURSOS ONDE LECCIONA O DOCENTE
StringBuilder queryCurso = new StringBuilder();
String union = "";
int count = 1;
for(String codigoCurso: codigosCurso)
{
queryCurso.append(union).append(" curso.codigoCurso = :curso" + count + " ");
union = " or ";
count++;
}
 
 
 
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"avg(fc.intResposta) as media " +
 
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
(numeroPergunta!=null? "and prgp.numero = :numero " : "") +
"and (" + queryCurso.toString() + ") " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
(tempoMinimo > 0 ? " and fc.tempoLevado > :tempoLevado " : "" ) +
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("ano",anoLectivo);
 
if(numeroPergunta != null)
query.setString("numero",numeroPergunta);
if(tempoMinimo > 0)
{
query.setDouble("tempoLevado",tempoMinimo);
}
count = 1;
for(String codigoCurso: codigosCurso)
{
query.setString("curso" + count,codigoCurso);
count++;
}
Double mediaCurso = (Double) query.uniqueResult();
 
 
 
return mediaCurso;
}
 
public static List<String> getCodigosEscolaDocente(String teacherCode, String anoLectivo, String[] periodos, String[] degrees)
{
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
//GET CODIGOS DE ESCOLAS ONDE LECCIONA O DOCENTE
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"distinct(curso.codigoInstituicao) as codigoInst " +
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"quest.ano = :ano " +
"and tipo.codigoSiges = :codigoSiges " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
List<String> codigosEscola = query.list();
return codigosEscola;
}
 
public static List<String> getCodigosCursoDocente(String teacherCode, String anoLectivo, String[] periodos, String[] degrees)
{
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
//GET CODIGOS DE CURSOS ONDE LECCIONA O DOCENTE
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"distinct(curso.codigoCurso) as codigoCurso " +
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
"and tipo.codigoSiges = :codigoSiges " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
List<String> codigosCurso = query.list();
 
return codigosCurso;
}
 
public static List<String> getCodigosCursosEscola(String codigoInstituicao,String anoLectivo, String[] periodos, String[] degrees)
{
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
//GET CODIGOS DE CURSOS ONDE LECCIONA O DOCENTE
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"distinct(curso.codigoCurso) as codigoCurso " +
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
"and curso.codigoInstituicao = :codigoInstituicao " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
query.setString("codigoInstituicao",codigoInstituicao);
query.setString("ano",anoLectivo);
List<String> codigosCurso = query.list();
 
return codigosCurso;
}
 
public static long countDocentesNosCursos(String codigoCurso, String anoLectivo, String[] periodos, String[] degrees)
{
List<String> codigos = new ArrayList<String>();
codigos.add(codigoCurso);
return countDocentesNosCursos(codigos, anoLectivo, periodos, degrees);
}
public static long countDocentesNosCursos(List<String> codigosCurso, String anoLectivo, String[] periodos, String[] degrees) {
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
//GET QUERY PARCIAL DE CURSOS ONDE LECCIONA O DOCENTE
StringBuilder queryCurso = new StringBuilder();
String union = "";
int count = 1;
if(codigosCurso == null || codigosCurso.size() == 0)
{
logger.warn("Docente nao tem cursos atribuidos, nao tem quaisquer respostas, devolvendo media de docentes nos cursos = 0");
return 0;
}
for(String codigoCurso: codigosCurso)
{
queryCurso.append(union).append(" curso.codigoCurso = :curso" + count + " ");
union = " or ";
count++;
}
 
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct tipo.codigoSiges) as profs " +
 
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
"and (" + queryCurso.toString() + ") " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
 
query.setString("ano",anoLectivo);
 
count = 1;
for(String codigoCurso: codigosCurso)
{
query.setString("curso" + count,codigoCurso);
count++;
}
Long profs = (Long) query.uniqueResult();
 
return profs;
}
 
public static long countDocentesNasEscolas(String codigoEscola, String anoLectivo, String[] periodos, String[] degrees) {
List<String> codigos = new ArrayList<String>();
codigos.add(codigoEscola);
return countDocentesNasEscolas(codigos,anoLectivo,periodos,degrees);
}
public static long countDocentesNasEscolas(List<String> codigosEscola, String anoLectivo, String[] periodos, String[] degrees) {
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
 
if(codigosEscola == null || codigosEscola.size() == 0)
{
logger.warn("Docente nao tem escolas atribuidas, nao tem quaisquer respostas, devolvendo media de docentes nas escolas = 0");
return 0;
}
StringBuilder queryEscolas = new StringBuilder();
String union = "";
int count = 1;
for(String codigoEscola: codigosEscola)
{
queryEscolas.append(union).append(" curso.codigoInstituicao = :inst" + count + " ");
union = " or ";
count++;
}
 
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct tipo.codigoSiges) as profs " +
 
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
"and (" + queryEscolas.toString() + ") " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
 
query.setString("ano",anoLectivo);
 
count = 1;
for(String codigoEscola: codigosEscola)
{
query.setString("inst" + count,codigoEscola);
count++;
}
Long profs = (Long) query.uniqueResult();
 
return profs;
}
 
public static long countUnidadesNosCursos(String codigoCurso,String anoLectivo, String[] periodos,String[] degrees)
{
List<String> codigos = new ArrayList<String>();
codigos.add(codigoCurso);
return countUnidadesNosCursos(codigos,anoLectivo,periodos,degrees);
}
 
 
public static long countUnidadesNosCursos(List<String> codigosCurso,String anoLectivo, String[] periodos,String[] degrees) {
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
//GET QUERY PARCIAL DE CURSOS ONDE LECCIONA O DOCENTE
StringBuilder queryCurso = new StringBuilder();
String union = "";
int count = 1;
 
if(codigosCurso == null || codigosCurso.size() == 0)
{
logger.warn("Docente nao tem cursos atribuidos, nao tem quaisquer respostas, devolvendo numero de docentes nos cursos = 0");
return 0;
}
for(String codigoCurso: codigosCurso)
{
queryCurso.append(union).append(" curso.codigoCurso = :curso" + count + " ");
union = " or ";
count++;
}
 
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct unidade.codigo) as unidades " +
 
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapUnidade unidade " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
"and (" + queryCurso.toString() + ") " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
 
query.setString("ano",anoLectivo);
 
count = 1;
for(String codigoCurso: codigosCurso)
{
query.setString("curso" + count,codigoCurso);
count++;
}
Long unidades = (Long) query.uniqueResult();
 
return unidades;
}
 
public static long countUnidadesNasEscolas(String codigoEscola, String anoLectivo, String[] periodos, String[] degrees)
{
List<String> codigosEscola = new ArrayList<String>();
codigosEscola.add(codigoEscola);
return countUnidadesNasEscolas( codigosEscola, anoLectivo, periodos, degrees) ;
}
public static long countUnidadesNasEscolas(List<String> codigosEscola, String anoLectivo, String[] periodos, String[] degrees) {
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
StringBuilder queryEscolas = new StringBuilder();
String union = "";
int count = 1;
if(codigosEscola == null || codigosEscola.size() == 0)
{
logger.warn("Docente nao tem escolas atribuidas, nao tem quaisquer respostas, devolvendo numero de docentes nas escolas = 0");
return 0;
}
for(String codigoEscola: codigosEscola)
{
queryEscolas.append(union).append(" curso.codigoInstituicao = :inst" + count + " ");
union = " or ";
count++;
}
 
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct unidade.codigo) as unidades " +
 
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapUnidade unidade " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
"and (" + queryEscolas.toString() + ") " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery +
"");
 
query.setString("ano",anoLectivo);
 
count = 1;
for(String codigoEscola: codigosEscola)
{
query.setString("inst" + count,codigoEscola);
count++;
}
Long unidades = (Long) query.uniqueResult();
 
return unidades;
}
 
public static double getMediaCursos(List<String> codigosCurso,String anoLectivo,String grupo,String subGrupo, String[] periodos,String[] degrees) {
 
return getMediaCursos(codigosCurso, anoLectivo, null, 0, grupo, subGrupo, periodos, degrees);
}
 
public static double getMediaEscolas(List<String> codigosEscola,String anoLectivo,String grupo,String subGrupo, String[] periodos,String[] degrees) {
 
return getMediaEscolas(codigosEscola, anoLectivo, null, 0,grupo,subGrupo,periodos,degrees);
}
 
public static double getMediaEscolas(List<String> codigosEscola, String anoLectivo, String numeroPergunta, double tempoMinimo, String grupo, String subGrupo, String[] periodos, String[] degrees) {
 
String periodosQuery = createPeriodosQuery(periodos, "quest", true);
String degreesQuery = createDegreesQuery(degrees, "curso", true);
 
//GET QUERY PARCIAL DE ESCOLAS ONDE LECCIONA O DOCENTE
StringBuilder queryEscolas = new StringBuilder();
String union = "";
int count = 1;
for(String codigoEscola: codigosEscola)
{
queryEscolas.append(union).append(" curso.codigoInstituicao = :inst" + count + " ");
union = " or ";
count++;
}
 
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"avg(fc.intResposta) as media " +
 
"FROM " + OlapStarFactQuestionarioAnswer.class.getName() + " fc " +
"JOIN fc.olapPergunta prgp " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
 
"where " +
"quest.ano = :ano " +
(numeroPergunta!=null ? " and prgp.numero = :numero " : "") +
"and " + queryEscolas.toString() + " " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
(tempoMinimo > 0 ? " and fc.tempoLevado > :tempoLevado " : "" ) +
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("ano",anoLectivo);
if(numeroPergunta != null)
query.setString("numero",numeroPergunta);
if(tempoMinimo > 0)
{
query.setDouble("tempoLevado",tempoMinimo);
}
count = 1;
for(String codigoEscola: codigosEscola)
{
query.setString("inst" + count,codigoEscola);
count++;
}
Double mediaEscola = (Double) query.uniqueResult();
return mediaEscola;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/reportprocessors/queries/AlunosQueryDao.java
New file
0,0 → 1,331
package pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.queries;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.MyCalendar;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.OlapStarFactQuestionario;
import pt.estgp.estgweb.services.questionarios.PedagogicoAlunosProcessor;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.EntityEvaluated;
import pt.estgp.estgweb.services.questionarios.pedagogico.reportprocessors.reportsdomain.QuestionariosAlunosReport;
import pt.estgp.estgweb.utils.DatesUtils;
 
import java.util.Calendar;
import java.util.List;
 
/**
* Created by jorgemachado on 07/12/16.
*/
public class AlunosQueryDao
{
public static void countIdadesAlunosComRespostasAoDocente(String teacherCode, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countIdadesAlunosComRespostasGen(new String[]{teacherCode},EntityEvaluated.DOCENTE,anoLectivo,docenteReport,periodos,degrees);
}
 
public static void countIdadesAlunosComRespostasAoCurso(String courseCode, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countIdadesAlunosComRespostasGen(new String[]{courseCode},EntityEvaluated.CURSO,anoLectivo,docenteReport,periodos,degrees);
}
public static void countIdadesAlunosComRespostasAoCursos(String[] courseCodes, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countIdadesAlunosComRespostasGen(courseCodes,EntityEvaluated.CURSOS,anoLectivo,docenteReport,periodos,degrees);
}
public static void countIdadesAlunosComRespostasAoCursos(List<String> courseCodes, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countIdadesAlunosComRespostasGen((String[]) courseCodes.toArray(),EntityEvaluated.CURSOS,anoLectivo,docenteReport,periodos,degrees);
}
 
public static void countIdadesAlunosComRespostasGen(String[] codes,EntityEvaluated entityEvaluated, String anoLectivo, QuestionariosAlunosReport report, String[] periodos, String[] degrees) {
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
Query query;
 
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes, entityEvaluated);
 
int secondYear = DatesUtils.getSecondFromImportYear(anoLectivo);
 
MyCalendar dataQuestionario17 = new MyCalendar(secondYear,9,1);
MyCalendar dataQuestionario22 = new MyCalendar(secondYear,9,1);
MyCalendar dataQuestionario25 = new MyCalendar(secondYear,9,1);
MyCalendar dataQuestionario30 = new MyCalendar(secondYear,9,1);
dataQuestionario17.add(Calendar.YEAR,-17);
dataQuestionario22.add(Calendar.YEAR,-22);
dataQuestionario25.add(Calendar.YEAR,-25);
dataQuestionario30.add(Calendar.YEAR,-30);
 
 
query = AbstractDao.getCurrentSession().createQuery(
"select " +
"count(distinct user.sigesCode) from " + OlapStarFactQuestionario.class.getName() + " fc " +
 
//"count(distinct case when user.birthDate <= :dateStart and user.birthDate > :dateEnd then user.sigesCode else NULL end) from " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"user.birthDate <= :dateStart " +
"and user.birthDate > :dateEnd " +
"and quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
query.setDate("dateStart", dataQuestionario17.getTime());
query.setDate("dateEnd",dataQuestionario22.getTime());
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
report.idade17_22 = ((Long) query.uniqueResult()).intValue();
report.idade17_22Percent = (int)(((float)report.idade17_22) / ((float)report.inquiridosComResposta) * 100.0);
 
query = AbstractDao.getCurrentSession().createQuery(
"select count(distinct user.sigesCode) from " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"user.birthDate <= :dateStart " +
"and user.birthDate > :dateEnd " +
"and quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
query.setDate("dateStart",dataQuestionario22.getTime());
query.setDate("dateEnd",dataQuestionario25.getTime());
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
 
report.idade23_25 = ((Long) query.uniqueResult()).intValue();
report.idade23_25Percent = (int)(((float)report.idade23_25) / ((float)report.inquiridosComResposta) * 100.0);
 
 
query = AbstractDao.getCurrentSession().createQuery(
"select count(distinct user.sigesCode) from " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"user.birthDate <= :dateStart " +
"and user.birthDate > :dateEnd " +
"and quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
query.setDate("dateStart",dataQuestionario25.getTime());
query.setDate("dateEnd",dataQuestionario30.getTime());
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
 
report.idade26_30 = ((Long) query.uniqueResult()).intValue();
report.idade26_30Percent = (int)(((float)report.idade26_30) / ((float)report.inquiridosComResposta) * 100.0);
 
 
query = AbstractDao.getCurrentSession().createQuery(
"select count(distinct user.sigesCode) from " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"user.birthDate <= :dateStart " +
"and quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
query.setDate("dateStart",dataQuestionario30.getTime());
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
 
report.idadeM30 = ((Long) query.uniqueResult()).intValue();
report.idadeM30Percent = (int)(((float)report.idadeM30) / ((float)report.inquiridosComResposta) * 100.0);
}
 
 
public static void countTiposAlunosComRespostasAoDocente(String teacherCode, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countTiposAlunosComRespostas(new String[]{teacherCode},EntityEvaluated.DOCENTE,anoLectivo,docenteReport,periodos,degrees);
}
 
public static void countTiposAlunosComRespostasAoCurso(String courseCode, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countTiposAlunosComRespostas(new String[]{courseCode},EntityEvaluated.CURSO,anoLectivo,docenteReport,periodos,degrees);
}
public static void countTiposAlunosComRespostasAoCursos(String[] courseCodes, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countTiposAlunosComRespostas(courseCodes,EntityEvaluated.CURSOS,anoLectivo,docenteReport,periodos,degrees);
}
public static void countTiposAlunosComRespostasAoCursos(List<String> courseCodes, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countTiposAlunosComRespostas((String[]) courseCodes.toArray(),EntityEvaluated.CURSOS,anoLectivo,docenteReport,periodos,degrees);
}
private static void countTiposAlunosComRespostas(String[] codes,EntityEvaluated entityEvaluated, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees) {
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
Query query;
Object result;
 
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes, entityEvaluated);
 
query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct user.sigesCode) " +
"FROM " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true and user.tipoAlunoTrabalhadorEstudante = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery
);
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
result = query.uniqueResult();
docenteReport.tipoAlunosTrabalhadorEstudanteComResposta = ((Long) result).intValue();
 
query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct user.sigesCode) " +
"FROM " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true and user.tipoAlunoErasmus = true " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
//query.setString("codigoSiges",teacherCode);
query.setString("ano",anoLectivo);
result = query.uniqueResult();
docenteReport.tipoAlunosErasmusComResposta = ((Long) result).intValue();
 
docenteReport.tipoAlunosNormalComResposta = docenteReport.inquiridosComResposta - docenteReport.tipoAlunosErasmusComResposta - docenteReport.tipoAlunosTrabalhadorEstudanteComResposta;
 
docenteReport.tipoAlunosErasmusComRespostaPercent = (int)((((float)docenteReport.tipoAlunosErasmusComResposta) / ((float) docenteReport.inquiridosComResposta)) * 100.0);
docenteReport.tipoAlunosTrabalhadorEstudanteComRespostaPercent = (int)((((float)docenteReport.tipoAlunosTrabalhadorEstudanteComResposta) / ((float) docenteReport.inquiridosComResposta)) * 100.0);
docenteReport.tipoAlunosNormalComRespostaPercent = (int)((((float)docenteReport.tipoAlunosNormalComResposta) / ((float) docenteReport.inquiridosComResposta)) * 100.0);
}
 
 
public static void countAlunosQueResponderamAoDocente(String teacherCode, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countAlunosQueResponderamGen(new String[]{teacherCode},EntityEvaluated.DOCENTE,anoLectivo,docenteReport,periodos,degrees);
}
public static void countAlunosQueResponderamAoCurso(String courseCode, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countAlunosQueResponderamGen(new String[]{courseCode},EntityEvaluated.CURSO,anoLectivo,docenteReport,periodos,degrees);
}
public static void countAlunosQueResponderamAoCursos(String[] courseCodes, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countAlunosQueResponderamGen(courseCodes,EntityEvaluated.CURSOS,anoLectivo,docenteReport,periodos,degrees);
}
public static void countAlunosQueResponderamAoCursos(List<String> courseCodes, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees)
{
countAlunosQueResponderamGen((String[]) courseCodes.toArray(),EntityEvaluated.CURSOS,anoLectivo,docenteReport,periodos,degrees);
}
 
public static void countAlunosQueResponderamGen(String[] codes,EntityEvaluated entityEvaluated, String anoLectivo, QuestionariosAlunosReport docenteReport, String[] periodos, String[] degrees) {
 
String periodosQuery = QueryDaoUtils.createPeriodosQuery(periodos, "quest", true);
String degreesQuery = QueryDaoUtils.createDegreesQuery(degrees, "curso", true);
 
String whereFragmentEntity = QuestionariosQueryDao.getWhereEntityCodesFragment(codes, entityEvaluated);
 
/***** HOMENS MULHERES QUE RESPONDERAM ********/
Query query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct user.sigesCode) " +
"FROM " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where " +
"quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and user.sex='M' " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery
);
 
//query.setString("codigoSiges",code);
query.setString("ano",anoLectivo);
Object result = query.uniqueResult();
docenteReport.masculinoComResposta = ((Long) result).intValue();
 
query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct user.sigesCode) " +
"FROM " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where quest.ano = :ano " +
whereFragmentEntity +
"and fc.respondido = true " +
"and user.sex='F' " +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
//query.setString("codigoSiges",code);
query.setString("ano",anoLectivo);
result = query.uniqueResult();
docenteReport.femininoComResposta = ((Long) result).intValue();
 
//BASTA TER UMA RESPOSTA CONSIDERA-SE QUE RESPONDEU AOS QUESTIONARIOS
docenteReport.inquiridosComResposta = docenteReport.masculinoComResposta + docenteReport.femininoComResposta;
docenteReport.masculinoComRespostaPercent = (int)((((float)docenteReport.masculinoComResposta) / ((float) docenteReport.inquiridosComResposta)) * 100.0);
docenteReport.femininoComRespostaPercent = (int)((((float)docenteReport.femininoComResposta) / ((float) docenteReport.inquiridosComResposta)) * 100.0);
 
/*TAXA DE RESPOSTA NAO SE PODE RETIRAR OS ALUNOS SEM RESPOSTA PORQUE PODEM REPETIR NO CASO DE TEREM RESPONDIDO A UMAS E NAO A OUTRAS*/
query = AbstractDao.getCurrentSession().createQuery("" +
"SELECT " +
"count(distinct user.sigesCode) " +
"FROM " + OlapStarFactQuestionario.class.getName() + " fc " +
"JOIN fc.olapQuestionario quest " +
"JOIN fc.olapTipologia tipo " +
"JOIN fc.olapPerfilUser user " +
"JOIN fc.olapCurso curso " +
"JOIN fc.olapTimeLine timeLine " +
"where quest.ano = :ano " +
whereFragmentEntity +
"and timeLine.nome = '" + PedagogicoAlunosProcessor.getHistoryDriveConstraintStatic() + "' " +
periodosQuery +
degreesQuery);
//query.setString("codigoSiges",code);
query.setString("ano",anoLectivo);
result = query.uniqueResult();
docenteReport.inquiridosTotal = ((Long) result).intValue();
docenteReport.inquiridosNaoResponderam = docenteReport.inquiridosTotal - docenteReport.inquiridosComResposta;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/QuestionariosService.java
374,6 → 374,8
{
QuestionarioReportFileGroup reportFileGroup = (QuestionarioReportFileGroup) Class.forName(classType).newInstance();
reportFileGroup.setTitle(title);
String processorClassForGroup = ConfigProperties.getProperty("questionarios.processor." + classType);
reportFileGroup.setReportProcessorClass(processorClassForGroup);
AbstractDao.getCurrentSession().save(reportFileGroup);
}