Rev 1395 | Rev 1425 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.CourseUnitImpl" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioImpl" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="pt.estgp.estgweb.utils.ConfigProperties" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.utils.DynamicArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%
String qId = request.getParameter("questionarioId");
if(qId == null)
qId = request.getParameter("questionario.id");
Long questionarioId = Long.parseLong(qId);
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
QuestionarioImpl questionario = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"loadQuestionarioAdmin",args,names);
request.setAttribute("Questionario", questionario);
List<String> institutionCodes = ConfigProperties.getListValues("questionario.instituition.");
AbstractDao.getCurrentSession().beginTransaction();
%>
<jsp:useBean id="Questionario" type="pt.estgp.estgweb.domain.QuestionarioImpl" scope="request"/>
<jsp:include page="../headerQuestionarios.jsp"/>
<jsp:include page="/layout/pleaseWait.jsp"/>
<html:form action="/user/questionariosPaeSelectCourses">
<html:hidden property="questionario.id" value="${Questionario.id}"/>
<input type="hidden" name="dispatch" value="updateTipologias"/>
<jsp:useBean id="QuestionarioForm" type="pt.estgp.estgweb.web.form.questionarios.QuestionarioForm" scope="request"/>
<%
//Variavel iniciada no serviço de load por chamada do IAnswerProcessor respectivo para inicializar
//as variaveis especificas
List<QuestionarioPedagogicoCursoAfeto> cursosAfetados = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionario.getId());
QuestionarioForm.setCursosAfetos(cursosAfetados);
%>
<div class="container-fluid">
<style>
td.unidades
{
background-color: dimgray !important;
}
td.tipologias
{
background-color: #baffdc !important;
}
td.obsContent
{
background-color: #ffda48 !important;
}
td.vistaChecked
{
background-color: #20ff05 !important;
}
td.vistaNotChecked
{
background-color: gray !important;
}
td.usarNotChecked
{
background-color: red !important;
}
td.usarChecked
{
}
@keyframes waitPost {
from { opacity: 1; }
to { opacity: 0; }
}
td.waitPost
{
background-color: yellow !important;
animation: waitPost 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate;
/*
-webkit-animation-name: waitPost !important;
-webkit-animation-iteration-count: infinite !important;
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important;
-webkit-animation-duration: 1.7s !important;*/
}
</style>
<div class="panel panel-primary">
<div class="panel-heading">
Selecção de Cursos para o Questionário ${Questionario.id} - Periodo: ${Questionario.semestre} de ${Questionario.year}
<a class="btn btn-default" href="#" data-toggle="modal" data-target="#modalHelpQuestionarioTipologias">
<span class="glyphicon glyphicon-question-sign"></span> Ajuda sobre Tipologias
</a>
</div>
<div class="panel-body">
<html:errors/>
<jomm:messages/>
<div class="baco-please-wait-target">
<ul class="nav nav-tabs">
<li id="institutionsSeparatorsGerarFinal"><a href="javascript:showInstitutionCode('GerarFinal')"><strong><u>Operações</u></strong></a></li>
<%
for(String institutionCode: institutionCodes)
{
String institutionName = ConfigProperties.getProperty("institution.code." + institutionCode);
%>
<li id="institutionsSeparators<%=institutionCode%>"><a href="javascript:showInstitutionCode('<%=institutionCode%>')"><%=institutionName%></a></li>
<%
}
%>
</ul>
<script>
$(document).ready(
function(){
showInstitutionCode('GerarFinal');
<baco:notClearOperation name="Questionario" op="QUESTIONARIO_CHANGE_TIPOLOGIES">
$(".checkAll").remove();
</baco:notClearOperation>
$(".courseCheck").attr("data-toogle","toggle");
$('.courseCheck').bootstrapToggle({
on: 'Tipologias',
off: 'Simples'
});
<baco:clearOperation name="Questionario" op="QUESTIONARIO_CHANGE_TIPOLOGIES">
$('.checkAll').bootstrapToggle({
on: 'Tipologias',
off: 'Simples'
});
</baco:clearOperation>
<baco:notClearOperation name="Questionario" op="QUESTIONARIO_CHANGE_TIPOLOGIES">
$(".courseCheck").prop("disabled",true);
$("#updateTipologiasButton").prop("disabled",true);
</baco:notClearOperation>
}
);
function selectAll(code,source)
{
$('#institution' + code).find('.courseCheck').each(
function()
{
if($(source).prop("checked"))
$(this).bootstrapToggle('on');
else
$(this).bootstrapToggle('off');
});
}
function showInstitutionCode(institutionCode)
{
<%
for(String institutionCode: institutionCodes)
{
%>
if(institutionCode == '<%=institutionCode%>')
{
$("#institution<%=institutionCode%>").show();
$("#institutionsSeparators<%=institutionCode%>").addClass("active");
}
else
{
$("#institution<%=institutionCode%>").hide();
$("#institutionsSeparators<%=institutionCode%>").removeClass("active");
}
<%
}
%>
if(institutionCode == 'GerarFinal')
{
$("#institutionGerarFinal").show();
$("#institutionsSeparatorsGerarFinal").addClass("active");
}
else
{
$("#institutionGerarFinal").hide();
$("#institutionsSeparatorsGerarFinal").removeClass("active");
}
}
function setUnidadeAfetaVar(cursoAfetoId,unidadeAfetaId,op,val,targetObject)
{
$(targetObject).addClass("waitPost");
$.post("<%=request.getContextPath()%>/user/questionarios/pedagogicoEstudante/setUnidadeAfetaVar.jsp",
{
"questionarioId" : ${Questionario.id},
"unidadeAfetaId":unidadeAfetaId,
"op":op,
"val": val
},
function(data, textStatus)
{
if(data.error)
{
alert(data.error);
}
else if(data.ok == "ok")
{
$(targetObject).removeClass("waitPost");
reloadCursoStats(cursoAfetoId);
}
},
"json");
}
function reloadCursoStats(cursoAfetoId)
{
$.getJSON("<%=request.getContextPath()%>/user/questionarios/pedagogicoEstudante/courseInfoJson.jsp?cursoAfetoId="+cursoAfetoId,
function(dataJson)
{
var porVer = dataJson.porVer + " ";
if(dataJson.porVer > 0)
{
porVer += "<span class=\"glyphicon glyphicon-alert\"></span>";
}
$("#cursoAfetoRow" + cursoAfetoId + " .porVerCount").html(porVer);
var porVerProfs = dataJson.porVerProfs + " ";
if(dataJson.porVerProfs > 0)
{
porVerProfs += "<span class=\"glyphicon glyphicon-alert\"></span>";
}
$("#cursoAfetoRow" + cursoAfetoId + " .porVerProfsCount").html(porVerProfs);
var marcadas = dataJson.marcadas + " ";
if(dataJson.marcadas > 0)
{
marcadas += "<span class=\"glyphicon glyphicon-alert\"></span>";
}
$("#cursoAfetoRow" + cursoAfetoId + " .marcadasCount").html(marcadas);
var observadas = dataJson.observadas + " ";
if(dataJson.observadas > 0)
{
observadas += "<span class=\"glyphicon glyphicon-alert\"></span>";
}
$("#cursoAfetoRow" + cursoAfetoId + " .observadasCount").html(observadas);
var naoUsadas = dataJson.naoUsadas + " ";
if(dataJson.naoUsadas > 0)
{
naoUsadas += "<span class=\"glyphicon glyphicon-alert\"></span>";
}
$("#cursoAfetoRow" + cursoAfetoId + " .naoUsadasCount").html(naoUsadas)
//$("#cursoAfetoRow" + cursoAfetoId + " .unidadesCount").html(dataJson.unidades);
/*var tipologiasRequisitadas = dataJson.tipologiasRequisitadas + " ";
$("#cursoAfetoRow" + cursoAfetoId + " .tipologiasRequisitadasCount").html(tipologiasRequisitadas);
var respostasRequisitadas = dataJson.respostasRequisitadas + " ";
$("#cursoAfetoRow" + cursoAfetoId + " .respostasRequisitadasCount").html(respostasRequisitadas);*/
}
);
}
</script>
<%
for(String institutionCode: institutionCodes)
{
String institutionName = ConfigProperties.getProperty("institution.code." + institutionCode);
%>
<div class="panel panel-default" id="institution<%=institutionCode%>" style="display: none">
<div class="panel-heading">
Cursos da <%=institutionName%>
</div>
<div class="panel-body">
<table class="tablesorter-blue">
<thead>
<tr>
<th></th>
<th>Codigo</th>
<th>Tipo de Curso</th>
<th>Curso</th>
<th>Papel Comissão Curso</th>
<th data-toggle="tooltip" data-placement="top" title="Unidades Curriculares totais do curso">Unidades <%=questionario.getSemestre()%></th>
<th data-toggle="tooltip" data-placement="top" title="Unidades Curriculares com Professores Afetadas">U. Afetas</th>
<th>Alertas </th>
<th>Check Alunos</th>
<th>Check Profs</th>
<th>Não Usadas</th>
<th>Obses.</th>
<th>Turmas</th>
<th data-toggle="tooltip" data-placement="top" title="Tipologias Requisitadas para Responder">Tip. Req</th>
<th data-toggle="tooltip" data-placement="top" title="Respostas Requisitadas para Responder">Resp. Req</th>
<th class="filter-false" data-sorter="false">
<input class="checkAll" type="checkbox" onchange="selectAll('<%=institutionCode%>',this)">
</th>
</tr>
</thead>
<tbody>
<nested:iterate id="cursoAfeto" name="QuestionarioForm" property="cursosAfetos" type="pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfetoImpl" scope="request">
<%
if(cursoAfeto.getCodigoInstituicao().equals(institutionCode))
{
int turmasSize = DaoFactory.getCourseDaoImpl().countCoursesUnitsTurmas(questionario.getYear(), cursoAfeto.getCourse().getId());
CourseView cv = new CourseView(cursoAfeto.getCourse());
request.setAttribute("CourseView",cv);
request.setAttribute("CursoAfeto",cursoAfeto);
int unitsSize = DaoFactory.getCourseDaoImpl().countCoursesUnits(questionario.getYear(), cv.getId(),questionario.getSemestre());
%>
<tr id="cursoAfetoRow${cursoAfeto.id}">
<td>
<script>
$(document).ready(
function(){
reloadCursoStats("${cursoAfeto.id}");
$('#${CursoAfeto.codigoCurso}unidades').on('shown.bs.collapse', function (e) {
if ($(this).is(e.target)) {
$("#${CursoAfeto.codigoCurso}unidadesButton .glyphicon").removeClass("glyphicon-folder-close").addClass("glyphicon-folder-open");
}
});
$('#${CursoAfeto.codigoCurso}unidades').on('hidden.bs.collapse', function (e) {
if ($(this).is(e.target)) {
$("#${CursoAfeto.codigoCurso}unidadesButton .glyphicon").removeClass("glyphicon-folder-open").addClass("glyphicon-folder-close");
}
});
}
);
</script>
<button id="${CursoAfeto.codigoCurso}unidadesButton" class="btn btn-default btn-small" type="button" data-toggle="collapse" data-target="#${CursoAfeto.codigoCurso}unidades"><span class="glyphicon glyphicon-folder-close"></span></button>
<script>
$(document).ready(
function(){
$.post("<%=request.getContextPath()%>/user/questionarios/pedagogicoEstudante/pedagogicoCourseCheckCursoAfeto.jsp?cursoAfetoId=${CursoAfeto.id}", function(data) {
$("#${CursoAfeto.codigoCurso}unidades .unidades")
.html(data);
evaluateTableSortersInside("#${CursoAfeto.codigoCurso}unidades .unidades");
});
}
);
</script>
</td>
<td>
<nested:hidden property="id"/>
${CourseView.code}
</td>
<td><bean:message key="course.${CourseView.degreeCleanCode}"/></td>
<td>${CourseView.name}</td>
<td>
<logic:notEmpty name="CourseView" property="validationRole">
<bean:message key="user.role.${CourseView.validationRole}"/>
</logic:notEmpty>
<logic:empty name="CourseView" property="validationRole">
Papel não atribuido (Corrigir Situação)
</logic:empty>
</td>
<td>
<a href="#" data-href="<%=request.getContextPath()%>/user/questionarios/pedagogicoEstudante/listCourseUnits.jsp?importYear=${CourseView.importYear}&courseId=${CourseView.id}&semestre=<%=questionario.getSemestre()%>" data-title="Unidades do Curso de ${CourseView.name} (${CourseView.code})" data-toggle="modal" data-target="#modalAjaxRequest">
<%=unitsSize%>
</a>
</td>
<td>
<%=cursoAfeto.getUnidadesAfetas().size()%>
<%
if(cursoAfeto.getUnidadesAfetas().size() != unitsSize)
{
%>
<span data-toggle="tooltip" data-placement="top" title="EXISTE UNIDADES QUE NAO ESTAO AFETADAS: CONFIRME SITUAÇÃO" class="glyphicon glyphicon-alert"></span>
<%
}
%>
</td>
<td class="marcadasCount">
${CursoAfeto.marcadas}
<logic:greaterThan value="0" name="CursoAfeto" property="marcadas">
<span class="glyphicon glyphicon-alert"></span>
</logic:greaterThan>
</td>
<td class="porVerCount"> ... </td>
<td class="porVerProfsCount"> ... </td>
<td class="naoUsadasCount"> ... </td>
<td class="observadasCount"> ... </td>
<td>
<a href="#" data-href="<%=request.getContextPath()%>/user/questionarios/pedagogicoEstudante/listCourseUnitsTurmas.jsp?importYear=${CourseView.importYear}&courseId=${CourseView.id}" data-title="Turmas do Curso de ${CourseView.name} (${CourseView.code})" data-toggle="modal" data-target="#modalAjaxRequest">
<%=turmasSize%>
</a>
</td>
<td class="tipologiasRequisitadasCount"><%=cursoAfeto.getStatTipologiasRequisitadas()%></td>
<td class="respostasRequisitadasCount"><%=cursoAfeto.getStatRespostasRequisitadas()%></td>
<td>
<nested:checkbox property="usarTipologias" styleClass="courseCheck"/>
</td>
</tr>
<tr id="${CursoAfeto.codigoCurso}unidades" class="collapse">
<td></td>
<td colspan="14" class="unidades" style="padding-left: 25px">
<div class="panel panel-default">
<div class="panel-body">
<p>Por favor aguarde um momento, o sistema está a carregar as unidades curriculares <img src="<%=request.getContextPath()%>/imgs/wait.gif"/></p>
</div>
</div>
</td>
</tr>
<%
}
//DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().evict(cursoAfeto);
%>
</nested:iterate>
</tbody>
</table>
</div>
</div>
<%
}
%>
<div class="panel panel-primary" id="institutionGerarFinal">
<div class="panel-heading">
Verificação de Atribuições
</div>
<div class="panel-body">
<div class="col-sm-6">
<div class="alert alert-warning">Está neste momento no painel de verificações do questionário ${Questionario.id} criado para o periodo ${Questionario.semestre} de ${Questionario.year}</div>
<a class="btn btn-default" href="#" data-href="<%=request.getContextPath()%>/user/questionarios/pedagogicoEstudante/questionarioLogState.jsp?questionarioId=${Questionario.id}" data-title="Registo de mudanças de estado do questionario ${Questionario.id}" data-toggle="modal" data-target="#modalAjaxRequest">
Registo de Mudanças de Estado
</a>
</div>
<div class="col-sm-6">
</div>
</div>
</div>
<div class="col-sm-12">
<button id="updateTipologiasButton" class="btn btn-success pull-right">Atualizar Tipologias</button>
<html:link action="/user/adminQuestionario?questionario.id=${Questionario.id}#NOWTASK" styleClass="btn btn-danger">Voltar à administração</html:link>
</div>
</div>
</div>
</div>
</div>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>
</html:form>