Rev 1520 | Rev 1528 | 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.Course" %>
<%@ page import="pt.estgp.estgweb.domain.CourseStudiesPlan" %>
<%@ page import="pt.estgp.estgweb.domain.CourseStudiesPlanImpl" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.services.courses.CoursesService" %>
<%@ page import="pt.estgp.estgweb.web.form.courses.CourseStudiesPlansAdminForm" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ 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/jomm.tld" prefix="jomm"%>
<%
//todo temos de ter aqui o id do curso para o carregar aqui mesmo
//se queremos barras de navegação então temos de ter ser acedidos de um
//controlador que carregue o necerrário à barra ou então assumimos que
//o curso id esta sempre disponivel nas barras possiveis de chamar
AbstractDao.getCurrentSession().beginTransaction();
CourseStudiesPlanImpl planoEdicao;
boolean ultimaVersao = true;
Long courseId;
Long studyPlanId;
String versaoPlano = "Não Encontrada";
Course course;
if(request.getAttribute("CourseStudiesPlansAdminForm") != null)
{
CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) request.getAttribute("CourseStudiesPlansAdminForm");
courseId = frm.getCourseId();
studyPlanId = frm.getCourseStudiesPlan().getId();
ultimaVersao = frm.isVersaoVigor();
course = DaoFactory.getCourseDaoImpl().load(courseId);
planoEdicao = frm.getCourseStudiesPlan();
}
else
{
courseId = Long.parseLong(request.getParameter("courseId"));
studyPlanId = Long.parseLong(request.getParameter("studyPlanId"));
request.setAttribute("courseId",courseId);
request.setAttribute("studyPlanId",studyPlanId);
course = DaoFactory.getCourseDaoImpl().load(courseId);
planoEdicao = null;
for(CourseStudiesPlan plan:course.getStudiesPlans())
{
if(plan.getId() == studyPlanId)
{
versaoPlano = plan.getVersion() + "";
planoEdicao = (CourseStudiesPlanImpl) DaoFactory.getCourseStudiesPlanDaoImpl().narrow(plan);
break;
}
ultimaVersao = false;
}
//provavelmente era mais facil ter um Form Nested com toda a informação, ou então faz-se isso numa pagina propria para editar o plano em questão
}
request.setAttribute("courseId",courseId);
request.setAttribute("studyPlanId",studyPlanId);
request.setAttribute("course",course);
/*
if(planoEdicao != null)
{
}
*/
%>
<div class="panel panel-default">
<div class="panel-heading">
Edição do plano de estudos. Versão <%=versaoPlano%> <%=ultimaVersao? "(<u>é a versão em vigor</u>)":""%> do curso de <%=course.getName()%> (<%=course.getCode()%>)
</div>
<div class="panel-body">
<html:errors/>
<jomm:messages/>
<div class="panel panel-default">
<div class="panel-heading">Dados do Curso</div>
<div class="panel-body">
<div class="col-sm-12">Código do Curso <label class="text-info">${course.code}</label></div>
<div class="col-sm-12">
<table class="tablesorter-blue">
<thead>
<tr>
<th>Língua</th>
<th>Nome do Curso</th>
<th>Departamento</th>
</tr>
</thead>
<tbody>
<tr>
<td>PT</td>
<td>${course.name}</td>
<td>
<%if(course.getDepartment() != null){%>${course.department.name}<%}%>
</td>
</tr>
<tr>
<td>EN</td>
<td>${course.nameEn}</td>
<td>
<%if(course.getDepartment() != null){%>${course.department.nameEn}<%}%>
</td>
</tr>
<tr>
<td>ES</td>
<td>${course.nameEs}</td>
<td>
<%if(course.getDepartment() != null){%>${course.department.nameEs}<%}%>
</td>
</tr>
<tr>
<td>FR</td>
<td>${course.nameFr}</td>
<td>
<%if(course.getDepartment() != null){%>${course.department.nameFr}<%}%>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<html:form action="/user/courseControllerStudiesPlan" styleId="CourseStudiesPlansAdminForm" styleClass="form-horizontal">
<div class="panel panel-warning">
<div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> Clonagem a partir de outro plano de Estudos</div>
<div class="panel-body">
<div class="form-group">
<label class="control-label col-sm-2">Versão Fonte para Clonagem</label>
<div class="col-sm-10">
<html:select styleClass="form-control" property="sourcePlanId">
<html:option value="">Nenhuma</html:option>
<%
for(CourseStudiesPlan plan:course.getStudiesPlans())
{
if(plan.getId() != studyPlanId)
{
request.setAttribute("nowPlanId",plan.getId());
%>
<html:option value="${nowPlanId}">Versão <%=plan.getVersion()%></html:option>
<%
}
}
%>
</html:select>
</div>
</div>
<button class="btn btn-warning" type="button" data-toggle="modal" data-target="#confirm-ModalFunction" data-message="Esta operação vai sobrepor os dados do plano de estudos atual com os dados da versão escolhida!! Tem a certeza que deseja prosseguir?" data-script="set($('#CourseStudiesPlansAdminForm').get(0),'clonarPlano');$('#CourseStudiesPlansAdminForm').get(0).submit();">
Clonar para a fonte escolhida
</button>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Plano de Estudos
<button style="margin-left: 4px" type="button" class="btn btn-success pull-right" onclick="set(this.form,'addNewSemestre');this.form.submit()">
<span class="glyphicon glyphicon-plus"> </span> Semestre
</button>
</div>
<div class="panel-body">
<%
CourseStudiesPlansAdminForm courseStudiesPlansAdminForm = (CourseStudiesPlansAdminForm) request.getAttribute("CourseStudiesPlansAdminForm");
//Form ainda não iniciado vai iniciar é a primeira vez
if(courseStudiesPlansAdminForm.getCourseStudiesPlan().getId() <= 0)
{
courseStudiesPlansAdminForm.setCourseStudiesPlan(planoEdicao);
courseStudiesPlansAdminForm.setCourseId(courseId);
courseStudiesPlansAdminForm.setVersaoVigor(ultimaVersao);
courseStudiesPlansAdminForm.setPlanoEstudos(new CoursesService().loadCursoPlanoFromXml(planoEdicao.getXml()));
}
%>
<input type="hidden" name="dispatch" value="savePlano"/>
<html:hidden property="courseId"/>
<html:hidden property="versaoVigor"/>
<html:hidden property="courseStudiesPlan.id"/>
<html:hidden styleId="semestreId" property="semestreId"/>
<html:hidden styleId="perfilId" property="perfilId"/>
<div class="form-group">
<label class="control-label col-sm-2">Versão</label>
<div class="col-sm-10">
<html:text styleClass="form-control" property="courseStudiesPlan.version" size="3"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Descrição</label>
<div class="col-sm-10">
<html:text styleClass="form-control" property="courseStudiesPlan.versionDescription"/>
</div>
</div>
<%
int dummyIndexIdUnidades = 0;
int dummyIndexPerfilId = 0;
int dummyIndexSemestreId = 0;
%>
<script>
function sendUpUnidadeCurricular(dummyIndexId)
{
sendFieldUp("removed",dummyIndexId);
sendFieldUp("siges",dummyIndexId);
sendFieldUp("nome",dummyIndexId);
sendFieldUp("nomeEn",dummyIndexId);
sendFieldUp("nomeEs",dummyIndexId);
sendFieldUp("nomeFr",dummyIndexId);
sendFieldUp("totalHoras",dummyIndexId);
sendFieldUp("horasContactoT",dummyIndexId);
sendFieldUp("horasContactoTP",dummyIndexId);
sendFieldUp("horasContactoP",dummyIndexId);
sendFieldUp("horasContactoPL",dummyIndexId);
sendFieldUp("horasContactoPD",dummyIndexId);
sendFieldUp("horasContactoOT",dummyIndexId);
sendFieldUp("horasContactoE",dummyIndexId);
sendFieldUp("horasContactoS",dummyIndexId);
sendFieldUp("horasContactoTC",dummyIndexId);
sendFieldUp("horasContactoO",dummyIndexId);
sendFieldUp("ECTS",dummyIndexId);
sendFieldUp("urlUnidadeCurricular",dummyIndexId);
sendFieldUp("urlFichaCurricular",dummyIndexId);
}
function sendDownUnidadeCurricular(dummyIndexId)
{
sendFieldDown("removed",dummyIndexId);
sendFieldDown("siges",dummyIndexId);
sendFieldDown("nome",dummyIndexId);
sendFieldDown("nomeEn",dummyIndexId);
sendFieldDown("nomeEs",dummyIndexId);
sendFieldDown("nomeFr",dummyIndexId);
sendFieldDown("totalHoras",dummyIndexId);
sendFieldDown("horasContactoT",dummyIndexId);
sendFieldDown("horasContactoTP",dummyIndexId);
sendFieldDown("horasContactoP",dummyIndexId);
sendFieldDown("horasContactoPL",dummyIndexId);
sendFieldDown("horasContactoPD",dummyIndexId);
sendFieldDown("horasContactoOT",dummyIndexId);
sendFieldDown("horasContactoE",dummyIndexId);
sendFieldDown("horasContactoS",dummyIndexId);
sendFieldDown("horasContactoTC",dummyIndexId);
sendFieldDown("horasContactoO",dummyIndexId);
sendFieldDown("ECTS",dummyIndexId);
sendFieldDown("urlUnidadeCurricular",dummyIndexId);
sendFieldDown("urlFichaCurricular",dummyIndexId);
}
function sendFieldUp(field,dummyIndexId){
nome = $("#" + field + "dummyIndex" + dummyIndexId).val();
$("#" + field + "dummyIndex" + (dummyIndexId)).val($("#" + field + "dummyIndex" + (dummyIndexId-1)).val());
$("#" + field + "dummyIndex" + (dummyIndexId-1)).val(nome);
}
function sendFieldDown(field,dummyIndexId){
nome = $("#" + field + "dummyIndex" + dummyIndexId).val();
$("#" + field + "dummyIndex" + (dummyIndexId)).val($("#" + field + "dummyIndex" + (dummyIndexId+1)).val());
$("#" + field + "dummyIndex" + (dummyIndexId+1)).val(nome);
}
function removeUnit(dummyIndexId)
{
$("#removed" + "dummyIndex" + dummyIndexId).val("true");
$("#removed" + "dummyIndex" + dummyIndexId).closest("tr").hide("slow");
}
function sendUpSemestre(dummySemestreId,form)
{
$(form.semestreId).val("semestreDummy" + dummySemestreId);
$(form.dispatch).val("sendUpSemestre");
form.submit();
}
function sendDownSemestre(dummySemestreId,form)
{
$(form.semestreId).val("semestreDummy" +dummySemestreId);
$(form.dispatch).val("sendDownSemestre");
form.submit();
}
function sendUpPerfil(dummyPerfilId,form,dummySemestreId)
{
form.action = form.action + "#" + dummySemestreId;
$(form.perfilId).val("perfilDummy" + dummyPerfilId);
$(form.dispatch).val("sendUpPerfil");
form.submit();
}
function sendDownPerfil(dummyPerfilId,form,dummySemestreId)
{
form.action = form.action + "#" + dummySemestreId;
$(form.perfilId).val("perfilDummy" + dummyPerfilId);
$(form.dispatch).val("sendDownPerfil");
form.submit();
}
</script>
<nested:notEmpty property="planoEstudos">
<html:hidden property="planoEstudos.siges"/>
<html:hidden property="planoEstudos.nome"/>
<html:hidden property="planoEstudos.dep"/>
<nested:size id="tamanhoSemestre" property="planoEstudos.semestre"/>
<nested:iterate id="semestre" indexId="semestreIndexId" property="planoEstudos.semestre" type="pt.estgp.estgweb.services.courses.xsd.Curso.Semestre">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="form-group">
<%
dummyIndexSemestreId++;
request.setAttribute("dummyIndexSemestreId",dummyIndexSemestreId);
%>
<nested:hidden property="semestreId" value="semestreDummy${dummyIndexSemestreId}"/>
<div class="col-sm-2">
<button type="button" class="btn btn-warning" onclick="sendUpSemestre('<%=dummyIndexSemestreId%>',this.form)">
<span class="glyphicon glyphicon-arrow-up"> </span>
</button>
<button type="button" class="btn btn-warning" onclick="sendDownSemestre('<%=dummyIndexSemestreId%>',this.form)">
<span class="glyphicon glyphicon-arrow-down"> </span>
</button>
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#confirm-ModalFunction" data-message="Esta operação vai remover todas as unidades e perfis deste semestre!! Tem a certeza que deseja prosseguir? A operação não afeta as unidades nem os cursos do PAE, apenas o plano." data-script="$('#semestreId').val('semestreDummy${dummyIndexSemestreId}');set($('#CourseStudiesPlansAdminForm').get(0),'removeSemestre');$('#CourseStudiesPlansAdminForm').get(0).submit()">
<span class="glyphicon glyphicon-remove"> </span>
</button>
</div>
<div class="col-sm-1">
Duração
</div>
<div class="col-sm-3">
<script>
$(document).ready(
function()
{
showHideSemestreDesc${dummyIndexSemestreId}();
}
);
function showHideSemestreDesc${dummyIndexSemestreId}()
{
if($("#selectSemestreDesc${dummyIndexSemestreId}").val()=='OP')
{
$('#semestreDescContainer${dummyIndexSemestreId}').show();
}
else
{
$('#semestreDescContainer${dummyIndexSemestreId}').hide();
}
}
</script>
<nested:select styleClass="form-control" property="id" styleId="selectSemestreDesc${dummyIndexSemestreId}" onchange="showHideSemestreDesc${dummyIndexSemestreId}(this)">
<html:option value="S1">Semestre 1</html:option>
<html:option value="S2">Semestre 2</html:option>
<html:option value="S3">Semestre 3</html:option>
<html:option value="S4">Semestre 4</html:option>
<html:option value="S5">Semestre 5</html:option>
<html:option value="S6">Semestre 6</html:option>
<html:option value="T1">Trimestre 1</html:option>
<html:option value="T2">Trimestre 2</html:option>
<html:option value="T3">Trimestre 3</html:option>
<html:option value="T4">Trimestre 4</html:option>
<html:option value="T5">Trimestre 5</html:option>
<html:option value="T6">Trimestre 6</html:option>
<html:option value="T7">Trimestre 7</html:option>
<html:option value="T8">Trimestre 8</html:option>
<html:option value="OP">Opcionais</html:option>
</nested:select>
<div id="semestreDescContainer${dummyIndexSemestreId}">
Descrição (PT) <nested:text property="semestreDesc" styleClass="form-control"/>
Descrição (EN) <nested:text property="semestreDescEn" styleClass="form-control"/>
Descrição (ES) <nested:text property="semestreDescEs" styleClass="form-control"/>
Descrição (FR) <nested:text property="semestreDescFr" styleClass="form-control"/>
</div>
</div>
<div class="col-sm-6">
<button style="margin-left: 4px" type="button" class="btn btn-success pull-right" onclick="form.action=form.action+'#semestreDummy${dummyIndexSemestreId}';$('#semestreId').val('semestreDummy${dummyIndexSemestreId}');set(this.form,'addUnidadeSemestre');this.form.submit()">
<span class="glyphicon glyphicon-plus"> </span> Unidade
</button>
<button style="margin-left: 4px" type="button" class="btn btn-success pull-right" onclick="form.action=form.action+'#semestreDummy${dummyIndexSemestreId}';$('#semestreId').val('semestreDummy${dummyIndexSemestreId}');set(this.form,'addPerfilSemestre');this.form.submit()">
<span class="glyphicon glyphicon-plus"> </span> Perfil
</button>
<a name="semestreDummy${dummyIndexSemestreId}"></a>
</div>
</div>
</div>
<div class="panel-body">
<div class="form-group">
<div class="col-sm-2">
Notas do Semestre (Pode ser utilizado para mostrar Optativas)
</div>
<div class="col-sm-10">
<nested:textarea property="notas" rows="5" styleClass="form-control"/>
</div>
</div>
<button class="btn btn-default" data-toggle="collapse" type="button" data-target=".langs">Ver Campos Multingua</button>
<nested:size id="tamanhoPerfil" property="perfil"/>
<nested:iterate id="perfil" indexId="perfilIndexId" property="perfil" type="pt.estgp.estgweb.services.courses.xsd.Curso.Semestre.Perfil">
<div class="panel panel-info">
<div class="panel-heading">
<div class="form-group">
<%
dummyIndexPerfilId++;
request.setAttribute("dummyIndexPerfilId",dummyIndexPerfilId);
%>
<a name="perfilDummy${dummyIndexPerfilId}"></a>
<nested:hidden property="perfilId" value="perfilDummy${dummyIndexPerfilId}"/>
<div class="col-sm-2">
<button type="button" class="btn btn-warning" onclick="sendUpPerfil('<%=dummyIndexPerfilId%>',this.form,'semestreDummy${dummyIndexSemestreId}')">
<span class="glyphicon glyphicon-arrow-up"> </span>
</button>
<button type="button" class="btn btn-warning" onclick="sendDownPerfil('<%=dummyIndexPerfilId%>',this.form,'semestreDummy${dummyIndexSemestreId}')">
<span class="glyphicon glyphicon-arrow-down"> </span>
</button>
<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#confirm-ModalFunction" data-message="Esta operação vai remover todas as unidades deste perfil!! Tem a certeza que deseja prosseguir? A operação não afeta as unidades nem os cursos do PAE, apenas o plano." data-script="$('#CourseStudiesPlansAdminForm').get(0).action=$('#CourseStudiesPlansAdminForm').get(0).action+'#semestreDummy${dummyIndexSemestreId}';$('#perfilId').val('perfilDummy${dummyIndexPerfilId}');set($('#CourseStudiesPlansAdminForm').get(0),'removePerfil');$('#CourseStudiesPlansAdminForm').get(0).submit()">
<span class="glyphicon glyphicon-remove"> </span>
</button>
</div>
<div class="col-sm-1">
Perfil
</div>
<div class="col-sm-5">
<nested:text styleClass="form-control" property="nome"/>
</div>
<div class="col-sm-4">
<button type="button" class="btn btn-success pull-right" onclick="form.action=form.action+'#perfilDummy${dummyIndexPerfilId}';$('#perfilId').val('perfilDummy${dummyIndexPerfilId}');set(this.form,'addUnidadePerfil');this.form.submit()">
<span class="glyphicon glyphicon-plus"> </span> Unidade
</button>
</div>
</div>
</div>
<div class="panel-body">
<table class="tablesorterfiltered">
<thead>
<tr>
<td></td>
<td></td>
<th>SIGES</th>
<th>Nome</th>
<th>Total</th>
<th>T</th>
<th>TP</th>
<th>P</th>
<th>PL</th>
<th>PD</th>
<th>OT</th>
<th>E</th>
<th>S</th>
<th>TC</th>
<th>O</th>
<th>ECTS</th>
<th>URL UNIDADE</th>
<th>FICHA URL</th>
</tr>
</thead>
<tbody>
<nested:size id="tamanho" property="unidade"/>
<nested:iterate id="unit" indexId="indexId" property="unidade" type="pt.estgp.estgweb.services.courses.xsd.UnidadeType">
<%
dummyIndexIdUnidades++;
request.setAttribute("dummyIndexIdUnidades","dummyIndex" + dummyIndexIdUnidades);
%>
<%
int tamanhoMinus1 = tamanho - 1;
request.setAttribute("tamanhoMinus1",tamanhoMinus1);
%>
<tr <nested:equal property="removed" value="true">class="hidden"</nested:equal>>
<td class="text-nowrap">
<%--
Usando o dummyIndex apenas não colocamos botao de up na primeira de todas as unidades de todos os semestres
Antes usavamos o indexId e trabalhavamos lista a lista considerando semestres e perfis independentes
--%>
<nested:notEqual value="dummyIndex1" name="dummyIndexIdUnidades">
<button type="button" class="btn btn-warning" onclick="sendUpUnidadeCurricular(<%=dummyIndexIdUnidades%>)">
<span class="glyphicon glyphicon-arrow-up"> </span>
</button>
</nested:notEqual>
<%
boolean perfilMaximoAtingido = perfilIndexId >= tamanhoPerfil - 1;
boolean semestreMaximoAtingido = semestreIndexId >= tamanhoSemestre - 1;
boolean tamanhoMaximoAtingido = indexId >= tamanho - 1;
if(!perfilMaximoAtingido || !semestreMaximoAtingido || !tamanhoMaximoAtingido)
{
%>
<button type="button" class="btn btn-warning" onclick="sendDownUnidadeCurricular(<%=dummyIndexIdUnidades%>)">
<span class="glyphicon glyphicon-arrow-down"> </span>
</button>
<%
}
%>
</td>
<td>
<nested:hidden styleId="removed${dummyIndexIdUnidades}" property="removed"/>
<button type="button" class="btn btn-danger" onclick="removeUnit(<%=dummyIndexIdUnidades%>)">
<span class="glyphicon glyphicon-remove"> </span>
</button>
</td>
<td>
<script>
$(document).ready(
function()
{
$("#siges${dummyIndexIdUnidades}").focusout(
function(){
var code = $("#siges${dummyIndexIdUnidades}").val();
$.getJSON("<%=request.getContextPath()%>/user/courses/courseApiJson.jsp",
{ service:"findCourseUnit",
siges: code,
courseSigesCode: "${course.code}"
},
function(data)
{
if(data.response == "ok")
{
$("#nome${dummyIndexIdUnidades}").val(data.courseUnitName);
$("#sigesResponse${dummyIndexIdUnidades}").html("");
}
else
{
$("#sigesResponse${dummyIndexIdUnidades}").html("Não encontrado");
}
}
);
}
);
}
);
</script>
<nested:text styleId="siges${dummyIndexIdUnidades}" styleClass="form-control" property="siges"/>
<div id="sigesResponse${dummyIndexIdUnidades}"></div>
</td>
<td>
<div>
<div class="col-sm-1">(PT)</div>
<div class="col-sm-11"><nested:text styleId="nome${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nome"/></div>
<div class="langs collapse" >
<div class="col-sm-1">(EN)</div>
<div class="col-sm-11"><nested:text styleId="nomeEn${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nomeEn"/></div>
<div class="col-sm-1">(ES)</div>
<div class="col-sm-11"><nested:text styleId="nomeEs${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nomeEs"/></div>
<div class="col-sm-1">(FR)</div>
<div class="col-sm-11"><nested:text styleId="nomeFr${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nomeFr"/></div>
</div>
</div>
</td>
<td><nested:text styleClass="form-control" styleId="totalHoras${dummyIndexIdUnidades}" property="totalHoras"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoT${dummyIndexIdUnidades}" property="horasContacto.t"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoTP${dummyIndexIdUnidades}" property="horasContacto.TP"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoP${dummyIndexIdUnidades}" property="horasContacto.p"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoPL${dummyIndexIdUnidades}" property="horasContacto.PL"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoPD${dummyIndexIdUnidades}" property="horasContacto.PD"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoOT${dummyIndexIdUnidades}" property="horasContacto.OT"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoE${dummyIndexIdUnidades}" property="horasContacto.e"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoS${dummyIndexIdUnidades}" property="horasContacto.s"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoTC${dummyIndexIdUnidades}" property="horasContacto.TC"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoO${dummyIndexIdUnidades}" property="horasContacto.o"/></td>
<td><nested:text styleClass="form-control" styleId="ECTS${dummyIndexIdUnidades}" property="ECTS"/></td>
<td><nested:text styleClass="form-control" styleId="urlUnidadeCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlUnidadeCurricular"/></td>
<td><nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/></td>
</tr>
</nested:iterate>
</tbody>
</table>
</div>
</div>
</nested:iterate>
<nested:notEmpty property="unidade">
<table class="tablesorterfiltered">
<thead>
<tr>
<th></th>
<th></th>
<th>SIGES</th>
<th>Nome</th>
<th>Total</th>
<th>T</th>
<th>TP</th>
<th>P</th>
<th>PL</th>
<th>PD</th>
<th>OT</th>
<th>E</th>
<th>S</th>
<th>TC</th>
<th>O</th>
<th>ECTS</th>
<th>URL UNIDADE</th>
<th>FICHA URL</th>
</tr>
</thead>
<tbody>
<nested:size id="tamanho" property="unidade"/>
<nested:iterate id="unit" property="unidade" indexId="indexId" type="pt.estgp.estgweb.services.courses.xsd.UnidadeType">
<%
dummyIndexIdUnidades++;
request.setAttribute("dummyIndexIdUnidades","dummyIndex" + dummyIndexIdUnidades);
%>
<%
int tamanhoMinus1 = tamanho - 1;
request.setAttribute("tamanhoMinus1",tamanhoMinus1);
%>
<tr <nested:equal property="removed" value="true">class="hidden"</nested:equal>>
<td class="text-nowrap">
<%--
Usando o dummyIndex apenas não colocamos botao de up na primeira de todas as unidades de todos os semestres
Antes usavamos o indexId e trabalhavamos lista a lista considerando semestres e perfis independentes
--%>
<nested:notEqual value="dummyIndex1" name="dummyIndexIdUnidades">
<button type="button" class="btn btn-warning" onclick="sendUpUnidadeCurricular(<%=dummyIndexIdUnidades%>)">
<span class="glyphicon glyphicon-arrow-up"> </span>
</button>
</nested:notEqual>
<%
boolean semestreMaximoAtingido = semestreIndexId >= tamanhoSemestre - 1;
boolean tamanhoMaximoAtingido = indexId >= tamanho - 1;
if(!semestreMaximoAtingido || !tamanhoMaximoAtingido)
{
%>
<button type="button" class="btn btn-warning" onclick="sendDownUnidadeCurricular(<%=dummyIndexIdUnidades%>)">
<span class="glyphicon glyphicon-arrow-down"> </span>
</button>
<%
}
%>
</td>
<td>
<nested:hidden styleId="removed${dummyIndexIdUnidades}" property="removed"/>
<button type="button" class="btn btn-danger" onclick="removeUnit(<%=dummyIndexIdUnidades%>)" >
<span class="glyphicon glyphicon-remove"> </span>
</button>
</td>
<td>
<script>
$(document).ready(
function()
{
$("#siges${dummyIndexIdUnidades}").focusout(
function(){
var code = $("#siges${dummyIndexIdUnidades}").val();
$.getJSON("<%=request.getContextPath()%>/user/courses/courseApiJson.jsp",
{ service:"findCourseUnit",
siges: code,
courseSigesCode: "${course.code}"
},
function(data)
{
if(data.response == "ok")
{
$("#nome${dummyIndexIdUnidades}").val(data.courseUnitName);
$("#sigesResponse${dummyIndexIdUnidades}").html("");
}
else
{
$("#sigesResponse${dummyIndexIdUnidades}").html("Não encontrado");
}
}
);
}
);
}
);
</script>
<nested:text styleId="siges${dummyIndexIdUnidades}" styleClass="form-control" property="siges"/>
<div id="sigesResponse${dummyIndexIdUnidades}"></div>
</td>
<td>
<div>
<div class="col-sm-1">(PT)</div>
<div class="col-sm-11">
<nested:text styleId="nome${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nome"/>
</div>
<div class="langs collapse" >
<div class="col-sm-1">(EN)</div>
<div class="col-sm-11"><nested:text styleId="nomeEn${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nomeEn"/></div>
<div class="col-sm-1">(ES)</div>
<div class="col-sm-11"><nested:text styleId="nomeEs${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nomeEs"/></div>
<div class="col-sm-1">(FR)</div>
<div class="col-sm-11"><nested:text styleId="nomeFr${dummyIndexIdUnidades}" style="width:300px" styleClass="form-control" property="nomeFr"/></div>
</div>
</div>
</td>
<td><nested:text styleClass="form-control" styleId="totalHoras${dummyIndexIdUnidades}" property="totalHoras"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoT${dummyIndexIdUnidades}" property="horasContacto.t"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoTP${dummyIndexIdUnidades}" property="horasContacto.TP"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoP${dummyIndexIdUnidades}" property="horasContacto.p"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoPL${dummyIndexIdUnidades}" property="horasContacto.PL"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoPD${dummyIndexIdUnidades}" property="horasContacto.PD"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoOT${dummyIndexIdUnidades}" property="horasContacto.OT"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoE${dummyIndexIdUnidades}" property="horasContacto.e"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoS${dummyIndexIdUnidades}" property="horasContacto.s"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoTC${dummyIndexIdUnidades}" property="horasContacto.TC"/></td>
<td><nested:text styleClass="form-control" styleId="horasContactoO${dummyIndexIdUnidades}" property="horasContacto.o"/></td>
<td><nested:text styleClass="form-control" styleId="ECTS${dummyIndexIdUnidades}" property="ECTS"/></td>
<td><nested:text styleClass="form-control" styleId="urlUnidadeCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlUnidadeCurricular"/></td>
<td><nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/></td>
</tr>
</nested:iterate>
</tbody>
</table>
</nested:notEmpty>
</div>
</div>
</nested:iterate>
</nested:notEmpty>
<a type="button" class="btn btn-danger" href="<%=request.getContextPath()%>/user/adminStudyPlans.do?courseId=${courseId}">Cancelar</a>
<html:submit styleClass="btn btn-success" >Salvar</html:submit>
</div>
</div>
</html:form>
</div>
</div>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>