Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1770 → Rev 1771

/branches/v3/impl/src/web/errors/401.jsp
7,7 → 7,7
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%
response.sendError(401);
// response.sendError(401);
%>
<div class="container-fluid errorContent">
 
/branches/v3/impl/src/web/layout/themes/estg/eSchoolSeparators.jsp
6,6 → 6,8
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<baco:isAuthenticated>
<%
AbstractDao.getCurrentSession().beginTransaction();
 
17,4 → 19,5
<jsp:include page="/layout/themes/eSchoolSeparators.jsp"/>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>
%>
</baco:isAuthenticated>
/branches/v3/impl/src/web/layout/themes/ipp/eSchoolSeparators.jsp
6,6 → 6,8
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<baco:isAuthenticated>
<%
AbstractDao.getCurrentSession().beginTransaction();
 
17,4 → 19,5
<jsp:include page="/layout/themes/eSchoolSeparators.jsp"/>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>
%>
</baco:isAuthenticated>
/branches/v3/impl/src/web/layout/themes/eSchoolSeparators.jsp
5,29 → 5,34
<%@ page import="pt.estgp.estgweb.domain.UserSession" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSessionImpl" scope="request"/>
 
<baco:isAuthenticated>
<%
List<ConfigurationSeparatorImpl> configSeparators =
(List<ConfigurationSeparatorImpl>) request.getAttribute("configSeparators");
 
String separatorKey = request.getParameter("separatorKey");
 
 
for(ConfigurationSeparatorImpl configSeparator: configSeparators)
if(configSeparators != null && UserSession.getUser() != null)
{
if(UserSession.getUser().hasRole(configSeparator.getAllowedRoles()))
for(ConfigurationSeparatorImpl configSeparator: configSeparators)
{
String active = separatorKey != null && separatorKey.equals(configSeparator.getSeparatorKey()) ?
"class=\"active\"" : "";
if(UserSession.getUser().hasRole(configSeparator.getAllowedRoles()))
{
String active = separatorKey != null && separatorKey.equals(configSeparator.getSeparatorKey()) ?
"class=\"active\"" : "";
 
%>
<li <%=active%>>
<a href="<%=request.getContextPath()%>/user/configSeparatorsEescola.do?sepId=<%=configSeparator.getId()%>&separatorKey=<%=configSeparator.getSeparatorKey()%>">
<span class="glyphicon glyphicon-folder-open"></span> <%=configSeparator.getName()%>
</a>
</li>
<%
%>
<li <%=active%>>
<a href="<%=request.getContextPath()%>/user/configSeparatorsEescola.do?sepId=<%=configSeparator.getId()%>&separatorKey=<%=configSeparator.getSeparatorKey()%>">
<span class="glyphicon glyphicon-folder-open"></span> <%=configSeparator.getName()%>
</a>
</li>
<%
}
}
}
%>
%>
</baco:isAuthenticated>
/branches/v3/impl/src/web/layout/errorLayout.jsp
6,10 → 6,10
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<tiles:importAttribute name="error" scope="request" /><%
if(request.getAttribute("error") != null)
/*if(request.getAttribute("error") != null)
{
response.sendError(Integer.parseInt(request.getAttribute("error").toString()));
}
}*/
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
/branches/v3/impl/src/web/user/courses/studiesPlansAdministrationEdit.jsp
4,8 → 4,9
<%@ 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.services.courses.xsd.Curso" %>
<%@ page import="pt.estgp.estgweb.services.courses.xsd.CursoImpl" %>
<%@ 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" %>
15,6 → 16,12
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm"%>
<%
 
 
//TODO NOVO JSON
//O SALVAR TEM DE SER UMA FuncTION E DEIXAR DE SER UM SUBMIT PARA PODERMOS TRASNFERIR O JSON
//PARA UMA VAR DE TEXTO
 
//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
79,7 → 86,7
*/
 
%>
<div class="panel panel-default">
<div class="panel panel-default" id="planoApp" ng-app="planoApp" ng-controller="planoController">
<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>
213,7 → 220,7
<p>exemplo para a ESTG: http://www.estgp.pt/startLoadCourseUnitProgramSiges.do?unitCode={SIGES_UNIT}&courseCode={SIGES_CURSO}&semestre={UNIT_SEMESTRE}</p>
<p>Nenhum dos campos é obrigatório, o sistema substitui se existir no padrão, Na estg o Semestre é obrigatório para diferenciar unidades que são lecionadas em ambos os semestres</p>
<p>O semestre presente neste sistema e que vai ser preenchido vai de S1 a S6 e de T1 a T8 ou A, portanto se o semestre for usado à que ter isto em atenção</p>
<input type="text" class="form-control" id="urlPadraoFicha" placeholder="http://exemplo.com/exemplo/{SIGES_CURSO}/{SEMESTRE}/{SIGES_UNIT}.pdf">
<input type="text" class="form-control" id="urlPadraoFicha" placeholder="http://exemplo.com/exemplo/{SIGES_CURSO}/{UNIT_SEMESTRE}/{SIGES_UNIT}.pdf">
</div>
</div>
<div class="form-group">
236,14 → 243,21
 
<%
CourseStudiesPlansAdminForm courseStudiesPlansAdminForm = (CourseStudiesPlansAdminForm) request.getAttribute("CourseStudiesPlansAdminForm");
//Isto corre sempre que se entra no Editor a primeira vez e não apenas quando é um plano novo
//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()));
Curso cPlanoDoXml2Json = new CoursesService().loadCursoPlanoFromXml(planoEdicao.getXml());
if(cPlanoDoXml2Json == null)
courseStudiesPlansAdminForm.setPlanoEstudos(new CursoImpl());
else
courseStudiesPlansAdminForm.setPlanoEstudos(new CoursesService().loadCursoPlanoFromXml(planoEdicao.getXml()));
}
//LINHA NOVA PARA JSON DE INTERFACE
courseStudiesPlansAdminForm.setPlanoEstudosJsonInterface(CursoImpl.toJson(courseStudiesPlansAdminForm.getPlanoEstudos()));
%>
<logic:notEmpty name="CourseStudiesPlansAdminForm" property="courseStudiesPlan.importLog">
<div class="panel panel-warning">
269,7 → 283,7
<html:file styleClass="form-control" property="formFileImport"/>
</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),'importarPlano');$('#CourseStudiesPlansAdminForm').get(0).submit();">
<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="angular.element($('#planoApp')).scope().fundirPlano();">
Importar o ficheiro sobrepondo esta versão do plano
</button>
</div>
284,7 → 298,7
<html:file styleClass="form-control" property="formFileImport2"/>
</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),'mergePlano');$('#CourseStudiesPlansAdminForm').get(0).submit();">
<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="angular.element($('#planoApp')).scope().fundirPlano();">
FUNDIR o ficheiro com esta versão do plano
</button>
</div>
297,12 → 311,7
 
 
<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-heading">Plano de Estudos</div>
<div class="panel-body">
 
 
312,6 → 321,7
<html:hidden property="courseStudiesPlan.id"/>
<html:hidden styleId="semestreId" property="semestreId"/>
<html:hidden styleId="perfilId" property="perfilId"/>
<html:hidden styleId="planoEstudosJsonInterface" property="planoEstudosJsonInterface"/>
 
<div class="form-group">
<label class="control-label col-sm-2">Versão</label>
329,582 → 339,499
 
 
 
<%
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);
<div>
<script>
var planoApp = angular.module('planoApp', ['ui.tree']);
GLOBAL_BacoAngularAppDependencies.push('planoApp');
planoApp.controller('planoController', function ($scope) {
$scope.treeOptions = {
accept: function(sourceNodeScope, destNodesScope, destIndex) {
 
}
function sendDownUnidadeCurricular(dummyIndexId)
{
sendFieldDown("removed",dummyIndexId);
sendFieldDown("siges",dummyIndexId);
sendFieldDown("nome",dummyIndexId);
sendFieldDown("nomeEn",dummyIndexId);
sendFieldDown("nomeEs",dummyIndexId);
sendFieldDown("nomeFr",dummyIndexId);
//if(destNodesScope)
//console.log(destNodesScope);
//console.log(sourceNodeScope);
//console.log(destIndex);
//console.log(destNodesScope.$parent.$modelValue.title);
//console.log(destNodesScope.$modelValue[0].type);
if(sourceNodeScope.$modelValue.type == destNodesScope.$modelValue[0].type)
return true;
return false;
},
dropped: function(e) {
//console.log (e.source.nodeScope.$modelValue);
//alert ("Largado o nó com nome: " + e.source.nodeScope.$modelValue.name + " sobre " + e.dest.nodesScope.$parent.$modelValue.name);
}
};
$scope.json = <%=courseStudiesPlansAdminForm.getPlanoEstudosJsonInterface()%>
 
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);
$scope.confView =
{
"SIGES" : true ,
"Nome" : true ,
"ECTS" : true,
"Total" : true ,
"T" : true ,
"TP" : true ,
"P" : true ,
"PL" : true ,
"PD" : true ,
"OT" : true ,
"E" : true ,
"S" : true ,
"TC" : true ,
"O" : true ,
"URL_UNIDADE" : true ,
"FICHA_URL" : true
}
 
}
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");
$scope.submeterForm = function()
{
$("#planoEstudosJsonInterface").val(
JSON.stringify($scope.json)
);
$("#CourseStudiesPlansAdminForm").submit();
}
 
}
$scope.fundirPlano = function()
{
set($("#CourseStudiesPlansAdminForm").get(0),"mergePlano");
$scope.submeterForm();
}
 
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();
}
$scope.importarPlano = function()
{
set($("#CourseStudiesPlansAdminForm").get(0),"importarPlano");
$scope.submeterForm();
}
$scope.salvar = function()
{
set($("#CourseStudiesPlansAdminForm").get(0),"savePlano");
$scope.submeterForm();
}
 
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">
$scope.removeSemestre = function($index)
{
if(confirm("Tem a certeza que deseja remover o Semestre " + $scope.json.semestre[$index].id + "?"))
$scope.json.semestre.splice($index,1);
}
$scope.removePerfil = function(semestre,$index)
{
if(confirm("Tem a certeza que deseja remover o Perfil " + semestre.perfil[$index].nome + "?"))
semestre.perfil.splice($index,1);
}
$scope.removeUnidade = function(semestreOuperfil,$index)
{
if(confirm("Tem a certeza que deseja remover a Unidade " + semestreOuperfil.unidade[$index].nome + "?"))
semestreOuperfil.unidade.splice($index,1);
}
$scope.addSemestre = function()
{
$scope.json.semestre.push(
{
"id": "S1",
"notas": null,
"perfil": [],
"semestreDesc": "Semestre 1",
"semestreDescEn": "Semester 1",
"semestreDescEs": "Semestre 1",
"semestreDescFr": "Semestre 1",
"semestreId": null,
"unidade": [],
"type" : "semestre"
}
);
}
 
<div class="panel panel-default">
<div class="panel-heading">
Informação obtida do Siges (Auxiliar)
$scope.addPerfil = function(semestre)
{
semestre.perfil.push(
{
"nome": "",
"perfilId": null,
"unidade" : [],
"type" : "perfil"
}
);
}
 
$scope.addUnidade = function(semestreOuPerfil)
{
semestreOuPerfil.unidade.push(
{
"dep": "",
"ects": "",
"nome": "",
"nomeEn": null,
"nomeEs": null,
"nomeFr": null,
"obs": "",
"removed": null,
"siges": null,
"totalHoras": 0,
"urlFichaCurricular": "",
"urlUnidadeCurricular": "",
"type": "unidade"
}
);
}
});
 
 
</script>
<div class="panel panel-info">
<div class="panel-heading">Configuração de Visualização</div>
<div class="panel-body">
<table class="table">
<thead>
<tr>
<th>SIGES</th>
<th>Nome</th>
<th>ECTS</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>URL UNIDADE</th>
<th>FICHA URL</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" ng-model="confView.SIGES"></td>
<td><input type="checkbox" ng-model="confView.Nome"></td>
<td><input type="checkbox" ng-model="confView.ECTS"></td>
<td><input type="checkbox" ng-model="confView.Total"></td>
<td><input type="checkbox" ng-model="confView.T"></td>
<td><input type="checkbox" ng-model="confView.TP"></td>
<td><input type="checkbox" ng-model="confView.P"></td>
<td><input type="checkbox" ng-model="confView.PL"></td>
<td><input type="checkbox" ng-model="confView.PD"></td>
<td><input type="checkbox" ng-model="confView.OT"></td>
<td><input type="checkbox" ng-model="confView.E"></td>
<td><input type="checkbox" ng-model="confView.S"></td>
<td><input type="checkbox" ng-model="confView.TC"></td>
<td><input type="checkbox" ng-model="confView.O"></td>
<td><input type="checkbox" ng-model="confView.URL_UNIDADE"></td>
<td><input type="checkbox" ng-model="confView.FICHA_URL"></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="panel-body">
<div class="form-group">
<label class="control-label col-sm-2">Ano do Plano no Siges</label>
<div class="col-sm-10">
<html:text styleClass="form-control" property="planoEstudos.anoPlanoSiges"/>
</div>
 
<div class="panel panel-default">
<div class="panel-heading">
Informação obtida do Siges (Auxiliar)
</div>
<div class="form-group">
<label class="control-label col-sm-2">Código do Plano no Siges</label>
<div class="col-sm-10">
<html:text styleClass="form-control" property="planoEstudos.codigoPlanoSiges"/>
<div class="panel-body">
<div class="form-group">
<label class="control-label col-sm-2">Ano do Plano no Siges</label>
<div class="col-sm-10">
<input type="text" class="form-control" ng-model="json.anoPlanoSiges"/>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Linha Descritiva do Plano no Siges</label>
<div class="col-sm-10">
<html:text styleClass="form-control" property="planoEstudos.descPlanoSiges"/>
<div class="form-group">
<label class="control-label col-sm-2">Código do Plano no Siges</label>
<div class="col-sm-10">
<input type="text" class="form-control" ng-model="json.codigoPlanoSiges"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Linha Descritiva do Plano no Siges</label>
<div class="col-sm-10">
<input type="text" class="form-control" ng-model="json.descPlanoSiges"/>
</div>
</div>
</div>
</div>
</div>
 
<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 panel-default">
<div class="panel-heading">
Semestres
<button style="margin-left: 4px" type="button" class="btn btn-success pull-right" ng-click="addSemestre()">
<span class="glyphicon glyphicon-plus"> </span> Semestre
</button>
</div>
<div class="panel-body">
<div ui-tree="treeOptions" id="page-content-root">
<div ui-tree-nodes ng-model="json.semestre">
<div class="panel panel-primary" ng-repeat="s in json.semestre" ui-tree-node ng-include="'semestre_renderer.html'" ng-init="s.type='semestre'">
</div>
</div>
</div>
</div>
 
<script type="text/ng-template" id="semestre_renderer.html">
<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()">
 
<div class="col-sm-1">
<button type="button" class="btn btn-danger" ng-click="removeSemestre($index)">
<span class="glyphicon glyphicon-remove"> </span>
</button>
</div>
<div class="col-sm-1">
<div class="col-sm-4" ui-tree-handle>
<span class="btn btn-info"><i class="glyphicon glyphicon-resize-vertical"></i></span>
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="S7">Semestre 7</html:option>
<html:option value="S8">Semestre 8</html:option>
<html:option value="A1">Anual 1</html:option>
<html:option value="A2">Anual 2</html:option>
<html:option value="A3">Anual 3</html:option>
<html:option value="A4">Anual 4</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"/>
<select class="form-control chosenOff" ng-model="s.id">
<option value="S1">Semestre 1</option>
<option value="S2">Semestre 2</option>
<option value="S3">Semestre 3</option>
<option value="S4">Semestre 4</option>
<option value="S5">Semestre 5</option>
<option value="S6">Semestre 6</option>
<option value="S7">Semestre 7</option>
<option value="S8">Semestre 8</option>
<option value="A1">Anual 1</option>
<option value="A2">Anual 2</option>
<option value="A3">Anual 3</option>
<option value="A4">Anual 4</option>
<option value="T1">Trimestre 1</option>
<option value="T2">Trimestre 2</option>
<option value="T3">Trimestre 3</option>
<option value="T4">Trimestre 4</option>
<option value="T5">Trimestre 5</option>
<option value="T6">Trimestre 6</option>
<option value="T7">Trimestre 7</option>
<option value="T8">Trimestre 8</option>
<option value="OP">Opcionais</option>
</select>
<div ng-show="s.id == 'OP'">
Descrição (PT) <input type="text" ng-model="s.semestreDesc" class="form-control"/>
Descrição (EN) <input type="text" ng-model="s.semestreDescEn" class="form-control"/>
Descrição (ES) <input type="text" ng-model="s.semestreDescEs" class="form-control"/>
Descrição (FR) <input type="text" ng-model="s.semestreDescFr" class="form-control"/>
</div>
</div>
<div class="col-sm-6">
<div class="col-sm-4">
 
<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()">
<button style="margin-left: 4px" type="button" class="btn btn-success pull-right" ng-click="addUnidade(s)">
<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()">
<button style="margin-left: 4px" type="button" class="btn btn-success pull-right" ng-click="addPerfil(s)">
<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"/>
<textarea ng-model="s.notas" rows="5" class="form-control"></textarea>
</div>
</div>
 
<button class="btn btn-default" data-toggle="collapse" type="button" data-target=".langs">Ver Campos Multingua</button>
<div ui-tree-nodes="" ng-model="s.perfil" ng-show="s.perfil.length > 0">
<div class="panel panel-info" ng-repeat="p in s.perfil" ui-tree-node ng-include="'perfil_renderer.html'" ng-init="p.type='perfil';parent=s">
</div>
</div>
<div ng-show="s.unidade.length > 0" class="table-responsive">
<table class="table clearfix">
<thead>
<tr>
<td></td>
<td></td>
<th ng-show="confView.SIGES">SIGES</th>
<th ng-show="confView.Nome">Nome</th>
<th ng-show="confView.ECTS">ECTS</th>
<th ng-show="confView.Total">Total</th>
<th ng-show="confView.T">T</th>
<th ng-show="confView.TP">TP</th>
<th ng-show="confView.P">P</th>
<th ng-show="confView.PL">PL</th>
<th ng-show="confView.PD">PD</th>
<th ng-show="confView.OT">OT</th>
<th ng-show="confView.E">E</th>
<th ng-show="confView.S">S</th>
<th ng-show="confView.TC">TC</th>
<th ng-show="confView.O">O</th>
<th ng-show="confView.URL_UNIDADE">URL UNIDADE</th>
<th ng-show="confView.FICHA_URL">FICHA URL</th>
</tr>
</thead>
<tbody ui-tree-nodes="" ng-model="s.unidade">
 
<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">
<!-- UNIDADE TEMPLATE START-->
<tr ng-repeat="u in s.unidade" ui-tree-node ng-include="'unidade_renderer.html'" ng-init="u.type='unidade';parent=s">
</tr>
<!--UNIDADE TEMPLATE END-->
 
<%
dummyIndexIdUnidades++;
request.setAttribute("dummyIndexIdUnidades","dummyIndex" + dummyIndexIdUnidades);
%>
<%
int tamanhoMinus1 = tamanho - 1;
request.setAttribute("tamanhoMinus1",tamanhoMinus1);
</tbody>
</table>
</div>
</div>
</script>
<!-- PERFIL TEMPLATE START -->
<script type="text/ng-template" id="perfil_renderer.html">
 
%>
<tr <nested:equal property="removed" value="true">class="hidden"</nested:equal>>
<td class="text-nowrap">
<div class="panel-heading">
 
<%--
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 data-unit-semestre="${semestre.id}" data-course-siges-code="${courseSigesCode}" data-unit-siges-code="${unit.siges}" data-unit-ficha-url-target-id="urlFichaCurricular${dummyIndexIdUnidades}" data-unit-site-url-target-id="urlUnidadeCurricular${dummyIndexIdUnidades}">
<nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/>
</td>
</tr>
</nested:iterate>
</tbody>
</table>
</div>
<div class="form-group">
<div class="col-sm-1">
<button type="button" class="btn btn-danger" ng-click="removePerfil(parent,$index)">
<span class="glyphicon glyphicon-remove"> </span>
</button>
</div>
 
</nested:iterate>
 
<nested:notEmpty property="unidade">
 
<table class="tablesorterfiltered">
<div class="col-sm-3" ui-tree-handle>
<span class="btn btn-info"><i class="glyphicon glyphicon-resize-vertical"></i></span> Perfil
</div>
<div class="col-sm-5">
<input type="text" class="form-control" ng-model="p.nome">
</div>
<div class="col-sm-3">
<button type="button" class="btn btn-success pull-right" ng-click="addUnidade(p)">
<span class="glyphicon glyphicon-plus"> </span> Unidade
</button>
</div>
</div>
</div>
<div class="panel-body clearfix table-responsive">
<table class="table">
<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>
<tr>
<td></td>
<td></td>
<th ng-show="confView.SIGES">SIGES</th>
<th ng-show="confView.Nome">Nome</th>
<th ng-show="confView.ECTS">ECTS</th>
<th ng-show="confView.Total">Total</th>
<th ng-show="confView.T">T</th>
<th ng-show="confView.TP">TP</th>
<th ng-show="confView.P">P</th>
<th ng-show="confView.PL">PL</th>
<th ng-show="confView.PD">PD</th>
<th ng-show="confView.OT">OT</th>
<th ng-show="confView.E">E</th>
<th ng-show="confView.S">S</th>
<th ng-show="confView.TC">TC</th>
<th ng-show="confView.O">O</th>
<th ng-show="confView.URL_UNIDADE">URL UNIDADE</th>
<th ng-show="confView.FICHA_URL">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);
<tbody ui-tree-nodes="" ng-model="p.unidade">
<!-- UNIDADE TEMPLATE START-->
<tr ng-repeat="u in p.unidade" ui-tree-node ng-include="'unidade_renderer.html'" ng-init="u.type='unidade';parent=p">
</tr>
<!--UNIDADE TEMPLATE END-->
 
%>
</tbody>
</table>
</div>
</script>
 
<tr <nested:equal property="removed" value="true">class="hidden"</nested:equal>>
<td class="text-nowrap">
<script type="text/ng-template" id="unidade_renderer.html">
<td class="text-nowrap">
<span class="btn btn-info"><i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i></span>
</td>
<td>
<button type="button" class="btn btn-danger" ng-click="removeUnidade(parent,$index)">
<span class="glyphicon glyphicon-remove"> </span>
</button>
</td>
<td ng-show="confView.SIGES">
<%--
 
<%--
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>
<%
FOCUS FIND UNIT
<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");
}
}
);
}
%>
</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>
);
}
);
</script>--%>
 
<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>
<input type="text" ng-model="u.siges" style="width: 60px"/>
<%--<div id="sigesResponse${dummyIndexIdUnidades}"></div>--%>
</td>
<td ng-show="confView.Nome">
<div>
<div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.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>
<div class="langs collapse" >
<div class="col-sm-1">(EN)</div>
<div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.nomeEn"/></div>
<div class="col-sm-1">(ES)</div>
<div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.nomeEs"/></div>
<div class="col-sm-1">(FR)</div>
<div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.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 data-unit-semestre="${semestre.id}" data-course-siges-code="${courseSigesCode}" data-unit-siges-code="${unit.siges}" data-unit-ficha-url-target-id="urlFichaCurricular${dummyIndexIdUnidades}" data-unit-site-url-target-id="urlUnidadeCurricular${dummyIndexIdUnidades}">
<nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/>
</td>
</tr>
</nested:iterate>
</tbody>
</table>
</nested:notEmpty>
</td>
<td ng-show="confView.ECTS"><input type="text" style="width: 40px" ng-model="u.eCTS"/></td>
<td ng-show="confView.Total"><input type="text" style="width: 40px" ng-model="u.totalHoras"></td>
 
</div>
</div>
<td ng-show="confView.T"><input type="text" style="width: 40px" ng-model="u.horasContacto.t"/></td>
<td ng-show="confView.TP"><input type="text" style="width: 40px" ng-model="u.horasContacto.TP"/></td>
<td ng-show="confView.P"><input type="text" style="width: 40px" ng-model="u.horasContacto.p"/></td>
<td ng-show="confView.PL"><input type="text" style="width: 40px" ng-model="u.horasContacto.PL"/></td>
<td ng-show="confView.PD"><input type="text" style="width: 40px" ng-model="u.horasContacto.PD"/></td>
<td ng-show="confView.OT"><input type="text" style="width: 40px" ng-model="u.horasContacto.OT"/></td>
<td ng-show="confView.E"><input type="text" style="width: 40px" ng-model="u.horasContacto.e"/></td>
<td ng-show="confView.S"><input type="text" style="width: 40px" ng-model="u.horasContacto.s"/></td>
<td ng-show="confView.TC"><input type="text" style="width: 40px" ng-model="u.horasContacto.TC"/></td>
<td ng-show="confView.O"><input type="text" style="width: 40px" ng-model="u.horasContacto.o"/></td>
<td ng-show="confView.URL_UNIDADE"><input type="text" ng-model="u.urlUnidadeCurricular" style="width:600px"/></td>
<td ng-show="confView.FICHA_URL" data-unit-semestre="{{s.id}}" data-course-siges-code="${courseSigesCode}" data-unit-siges-code="{{u.siges}}" data-unit-ficha-url-target-id="urlFichaCurricular{{s.id}}_{{u.siges}}" data-unit-site-url-target-id="urlUnidadeCurricular{{s.id}}_{{u.siges}}">
<input type="text" id="urlFichaCurricular{{s.id}}_{{u.siges}}" ng-model="u.urlFichaCurricular" style="width:600px"/>
</td>
</script>
 
</nested:iterate>
<%-- <pre class="code">
{{json | json}}
</pre>--%>
<a type="button" class="btn btn-danger" href="<%=request.getContextPath()%>/user/adminStudyPlans.do?courseId=${courseId}">Cancelar</a>
<button type="button" class="btn btn-success" ng-click="salvar()">Salvar</button>
</div>
 
</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>