Rev 1797 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1505 | jmachado | 1 | <%@ page import="jomm.dao.impl.AbstractDao" %> |
2 | <%@ page import="pt.estgp.estgweb.domain.Course" %> |
||
3 | <%@ page import="pt.estgp.estgweb.domain.CourseStudiesPlan" %> |
||
4 | <%@ page import="pt.estgp.estgweb.domain.CourseStudiesPlanImpl" %> |
||
5 | <%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
||
1516 | jmachado | 6 | <%@ page import="pt.estgp.estgweb.services.courses.CoursesService" %> |
1771 | jmachado | 7 | <%@ page import="pt.estgp.estgweb.services.courses.xsd.Curso" %> |
8 | <%@ page import="pt.estgp.estgweb.services.courses.xsd.CursoImpl" %> |
||
1505 | jmachado | 9 | <%@ page import="pt.estgp.estgweb.web.form.courses.CourseStudiesPlansAdminForm" %> |
10 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
||
11 | <%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
||
12 | <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
||
13 | <%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
||
14 | <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
||
15 | <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
||
16 | <%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
||
17 | <%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm"%> |
||
18 | <% |
||
1771 | jmachado | 19 | |
20 | |||
21 | //TODO NOVO JSON |
||
22 | //O SALVAR TEM DE SER UMA FuncTION E DEIXAR DE SER UM SUBMIT PARA PODERMOS TRASNFERIR O JSON |
||
23 | //PARA UMA VAR DE TEXTO |
||
24 | |||
1505 | jmachado | 25 | //todo temos de ter aqui o id do curso para o carregar aqui mesmo |
26 | |||
27 | //se queremos barras de navegação então temos de ter ser acedidos de um |
||
28 | //controlador que carregue o necerrário à barra ou então assumimos que |
||
29 | //o curso id esta sempre disponivel nas barras possiveis de chamar |
||
30 | |||
31 | AbstractDao.getCurrentSession().beginTransaction(); |
||
32 | |||
33 | CourseStudiesPlanImpl planoEdicao; |
||
34 | boolean ultimaVersao = true; |
||
35 | Long courseId; |
||
36 | Long studyPlanId; |
||
37 | String versaoPlano = "Não Encontrada"; |
||
38 | Course course; |
||
39 | if(request.getAttribute("CourseStudiesPlansAdminForm") != null) |
||
40 | { |
||
41 | CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) request.getAttribute("CourseStudiesPlansAdminForm"); |
||
42 | courseId = frm.getCourseId(); |
||
43 | studyPlanId = frm.getCourseStudiesPlan().getId(); |
||
44 | ultimaVersao = frm.isVersaoVigor(); |
||
45 | course = DaoFactory.getCourseDaoImpl().load(courseId); |
||
46 | planoEdicao = frm.getCourseStudiesPlan(); |
||
47 | } |
||
48 | else |
||
49 | { |
||
50 | courseId = Long.parseLong(request.getParameter("courseId")); |
||
51 | studyPlanId = Long.parseLong(request.getParameter("studyPlanId")); |
||
52 | request.setAttribute("courseId",courseId); |
||
53 | request.setAttribute("studyPlanId",studyPlanId); |
||
54 | |||
55 | |||
56 | course = DaoFactory.getCourseDaoImpl().load(courseId); |
||
57 | planoEdicao = null; |
||
58 | for(CourseStudiesPlan plan:course.getStudiesPlans()) |
||
59 | { |
||
60 | if(plan.getId() == studyPlanId) |
||
61 | { |
||
62 | versaoPlano = plan.getVersion() + ""; |
||
63 | planoEdicao = (CourseStudiesPlanImpl) DaoFactory.getCourseStudiesPlanDaoImpl().narrow(plan); |
||
64 | break; |
||
65 | } |
||
66 | ultimaVersao = false; |
||
67 | } |
||
68 | //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 |
||
69 | } |
||
70 | request.setAttribute("courseId",courseId); |
||
71 | request.setAttribute("studyPlanId",studyPlanId); |
||
72 | request.setAttribute("course",course); |
||
1684 | jmachado | 73 | request.setAttribute("courseSigesCode",course.getCode()); |
1505 | jmachado | 74 | |
75 | |||
76 | |||
77 | |||
78 | |||
79 | |||
80 | /* |
||
81 | if(planoEdicao != null) |
||
82 | { |
||
83 | |||
84 | |||
85 | } |
||
86 | */ |
||
87 | |||
88 | %> |
||
1771 | jmachado | 89 | <div class="panel panel-default" id="planoApp" ng-app="planoApp" ng-controller="planoController"> |
1505 | jmachado | 90 | <div class="panel-heading"> |
91 | Edição do plano de estudos. Versão <%=versaoPlano%> <%=ultimaVersao? "(<u>é a versão em vigor</u>)":""%> do curso de <%=course.getName()%> (<%=course.getCode()%>) |
||
92 | </div> |
||
93 | <div class="panel-body"> |
||
94 | |||
95 | <html:errors/> |
||
96 | <jomm:messages/> |
||
97 | |||
1534 | jmachado | 98 | |
99 | |||
1505 | jmachado | 100 | <div class="panel panel-default"> |
101 | <div class="panel-heading">Dados do Curso</div> |
||
102 | <div class="panel-body"> |
||
103 | |||
104 | <div class="col-sm-12">Código do Curso <label class="text-info">${course.code}</label></div> |
||
105 | <div class="col-sm-12"> |
||
106 | <table class="tablesorter-blue"> |
||
107 | <thead> |
||
108 | <tr> |
||
109 | <th>Língua</th> |
||
110 | <th>Nome do Curso</th> |
||
111 | <th>Departamento</th> |
||
112 | </tr> |
||
113 | </thead> |
||
114 | <tbody> |
||
115 | <tr> |
||
116 | <td>PT</td> |
||
117 | <td>${course.name}</td> |
||
118 | <td> |
||
119 | <%if(course.getDepartment() != null){%>${course.department.name}<%}%> |
||
120 | </td> |
||
121 | </tr> |
||
122 | <tr> |
||
123 | <td>EN</td> |
||
124 | <td>${course.nameEn}</td> |
||
125 | <td> |
||
126 | <%if(course.getDepartment() != null){%>${course.department.nameEn}<%}%> |
||
127 | |||
128 | </td> |
||
129 | </tr> |
||
130 | <tr> |
||
131 | <td>ES</td> |
||
132 | <td>${course.nameEs}</td> |
||
133 | <td> |
||
134 | <%if(course.getDepartment() != null){%>${course.department.nameEs}<%}%> |
||
135 | </td> |
||
136 | </tr> |
||
137 | <tr> |
||
138 | <td>FR</td> |
||
139 | <td>${course.nameFr}</td> |
||
140 | <td> |
||
141 | <%if(course.getDepartment() != null){%>${course.department.nameFr}<%}%> |
||
142 | </td> |
||
143 | </tr> |
||
144 | </tbody> |
||
145 | </table> |
||
146 | </div> |
||
147 | |||
148 | </div> |
||
149 | </div> |
||
1534 | jmachado | 150 | <html:form action="/user/courseControllerStudiesPlan" styleId="CourseStudiesPlansAdminForm" styleClass="form-horizontal" enctype="multipart/form-data"> |
151 | |||
1516 | jmachado | 152 | <div class="panel panel-warning"> |
153 | <div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> Clonagem a partir de outro plano de Estudos</div> |
||
154 | <div class="panel-body"> |
||
1505 | jmachado | 155 | |
156 | <div class="form-group"> |
||
1516 | jmachado | 157 | <label class="control-label col-sm-2">Versão Fonte para Clonagem</label> |
1505 | jmachado | 158 | <div class="col-sm-10"> |
1516 | jmachado | 159 | <html:select styleClass="form-control" property="sourcePlanId"> |
160 | <html:option value="">Nenhuma</html:option> |
||
161 | <% |
||
162 | for(CourseStudiesPlan plan:course.getStudiesPlans()) |
||
163 | { |
||
164 | if(plan.getId() != studyPlanId) |
||
165 | { |
||
166 | request.setAttribute("nowPlanId",plan.getId()); |
||
167 | %> |
||
168 | <html:option value="${nowPlanId}">Versão <%=plan.getVersion()%></html:option> |
||
169 | <% |
||
170 | } |
||
171 | |||
172 | } |
||
173 | %> |
||
174 | </html:select> |
||
1505 | jmachado | 175 | </div> |
176 | </div> |
||
1516 | jmachado | 177 | <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();"> |
178 | Clonar para a fonte escolhida |
||
179 | </button> |
||
1505 | jmachado | 180 | |
1507 | jmachado | 181 | |
182 | |||
1516 | jmachado | 183 | </div> |
184 | </div> |
||
1507 | jmachado | 185 | |
1684 | jmachado | 186 | <script> |
1797 | jmachado | 187 | function createSitesUrls() |
188 | { |
||
189 | createUrls("unidades"); |
||
190 | } |
||
1684 | jmachado | 191 | function createFichasUrls() |
192 | { |
||
1797 | jmachado | 193 | createUrls("fichas"); |
194 | } |
||
195 | |||
196 | function createUrls(type) |
||
197 | { |
||
198 | |||
1684 | jmachado | 199 | $("[data-unit-ficha-url-target-id]").each( |
200 | function() |
||
201 | { |
||
1797 | jmachado | 202 | var targetId; |
203 | if(type == "fichas") |
||
204 | { |
||
205 | targetId = $(this).attr("data-unit-ficha-url-target-id"); |
||
206 | } |
||
207 | else if(type== "unidades") |
||
208 | { |
||
209 | targetId = $(this).attr("data-unit-site-url-target-id"); |
||
210 | } |
||
211 | |||
1684 | jmachado | 212 | var sigesUnit = $(this).attr("data-unit-siges-code"); |
1797 | jmachado | 213 | //var sigesCourse = $(this).attr("data-course-siges-code"); |
1684 | jmachado | 214 | var unitSemestre = $(this).attr("data-unit-semestre"); |
215 | var sigesUrlInput = $("#" + targetId); |
||
216 | var urlPattern = $("#urlPadraoFicha").val(); |
||
217 | var targetsType = $("#urlPadraoFichaAlvo option:selected").val(); |
||
218 | if(targetsType == "all" || sigesUrlInput.val() == "") |
||
219 | { |
||
220 | urlPattern = urlPattern.replace("{SIGES_CURSO}",'${courseSigesCode}'); |
||
221 | urlPattern = urlPattern.replace("{SIGES_UNIT}",sigesUnit); |
||
222 | urlPattern = urlPattern.replace("{UNIT_SEMESTRE}",unitSemestre); |
||
223 | |||
1797 | jmachado | 224 | //var input = $("#" + targetId); |
225 | sigesUrlInput.val(urlPattern); |
||
226 | sigesUrlInput.trigger('change'); |
||
1684 | jmachado | 227 | } |
228 | } |
||
229 | ); |
||
230 | alert("URLS gerados com Sucesso, Necessita de SALVAR o Plano."); |
||
231 | } |
||
232 | </script> |
||
233 | |||
234 | <div class="panel panel-warning"> |
||
235 | <div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> Ferramenta Auxiliar de Auto-Preenchimento de URL's de Fichas</div> |
||
236 | <div class="panel-body"> |
||
237 | |||
238 | <div class="form-group"> |
||
239 | <label class="control-label col-sm-2">URL Padrão</label> |
||
240 | <div class="col-sm-10"> |
||
241 | <p>exemplo para a ESTG: http://www.estgp.pt/startLoadCourseUnitProgramSiges.do?unitCode={SIGES_UNIT}&courseCode={SIGES_CURSO}&semestre={UNIT_SEMESTRE}</p> |
||
242 | <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> |
||
243 | <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> |
||
1771 | jmachado | 244 | <input type="text" class="form-control" id="urlPadraoFicha" placeholder="http://exemplo.com/exemplo/{SIGES_CURSO}/{UNIT_SEMESTRE}/{SIGES_UNIT}.pdf"> |
1684 | jmachado | 245 | </div> |
246 | </div> |
||
247 | <div class="form-group"> |
||
248 | <label class="control-label col-sm-2">Alvos</label> |
||
249 | <div class="col-sm-10"> |
||
250 | <select id="urlPadraoFichaAlvo"> |
||
251 | <option value="all">Todos</option> |
||
252 | <option value="onlyEmpty">Apenas Vazios</option> |
||
253 | </select> |
||
254 | </div> |
||
255 | </div> |
||
256 | <button class="btn btn-warning" type="button" data-toggle="modal" onclick="createFichasUrls()"> |
||
257 | Gerar URL's de Fichas |
||
258 | </button> |
||
259 | |||
260 | |||
1797 | jmachado | 261 | <button class="btn btn-warning" type="button" data-toggle="modal" onclick="createSitesUrls()"> |
262 | Gerar URL's de Páginas (USE UM PADRAO DIFERENTE) |
||
263 | </button> |
||
264 | exemplo ESTG: http://deptal.estgp.pt/startLoadCourseUnitSiges.do?unitCode={SIGES_UNIT}&courseCode={SIGES_CURSO}&semestre={UNIT_SEMESTRE} |
||
1684 | jmachado | 265 | |
1797 | jmachado | 266 | |
267 | |||
1684 | jmachado | 268 | </div> |
269 | </div> |
||
270 | |||
1536 | jmachado | 271 | <% |
272 | CourseStudiesPlansAdminForm courseStudiesPlansAdminForm = (CourseStudiesPlansAdminForm) request.getAttribute("CourseStudiesPlansAdminForm"); |
||
1771 | jmachado | 273 | //Isto corre sempre que se entra no Editor a primeira vez e não apenas quando é um plano novo |
1536 | jmachado | 274 | //Form ainda não iniciado vai iniciar é a primeira vez |
275 | if(courseStudiesPlansAdminForm.getCourseStudiesPlan().getId() <= 0) |
||
276 | { |
||
277 | courseStudiesPlansAdminForm.setCourseStudiesPlan(planoEdicao); |
||
278 | courseStudiesPlansAdminForm.setCourseId(courseId); |
||
279 | courseStudiesPlansAdminForm.setVersaoVigor(ultimaVersao); |
||
1771 | jmachado | 280 | Curso cPlanoDoXml2Json = new CoursesService().loadCursoPlanoFromXml(planoEdicao.getXml()); |
281 | if(cPlanoDoXml2Json == null) |
||
282 | courseStudiesPlansAdminForm.setPlanoEstudos(new CursoImpl()); |
||
283 | else |
||
284 | courseStudiesPlansAdminForm.setPlanoEstudos(new CoursesService().loadCursoPlanoFromXml(planoEdicao.getXml())); |
||
1536 | jmachado | 285 | } |
1771 | jmachado | 286 | //LINHA NOVA PARA JSON DE INTERFACE |
287 | courseStudiesPlansAdminForm.setPlanoEstudosJsonInterface(CursoImpl.toJson(courseStudiesPlansAdminForm.getPlanoEstudos())); |
||
1536 | jmachado | 288 | %> |
1535 | jmachado | 289 | <logic:notEmpty name="CourseStudiesPlansAdminForm" property="courseStudiesPlan.importLog"> |
1534 | jmachado | 290 | <div class="panel panel-warning"> |
1536 | jmachado | 291 | <div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> LOG DA ULTIMA IMPORTAÇÃO</div> |
1534 | jmachado | 292 | <div class="panel-body"> |
293 | <pre> |
||
1535 | jmachado | 294 | <html:hidden name="CourseStudiesPlansAdminForm" property="courseStudiesPlan.importLog"/> |
295 | <bean:write name="CourseStudiesPlansAdminForm" property="courseStudiesPlan.importLog"/> |
||
1536 | jmachado | 296 | |
1534 | jmachado | 297 | </pre> |
298 | </div> |
||
299 | </div> |
||
300 | </logic:notEmpty> |
||
301 | <div class="panel panel-warning"> |
||
302 | <div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> Importar Ficheiro do SIGES em formato TXT: <a href="<%=request.getContextPath()%>/user/courses/9500-Enfermagem.TXT">VEJA UM EXEMPLO DE ENFERMAGEM</a></div> |
||
303 | <div class="panel-body"> |
||
1541 | jmachado | 304 | <div class="col-md-6"> |
305 | <div class="panel panel-default"> |
||
306 | <div class="panel-body"> |
||
307 | <div class="form-group"> |
||
308 | <label class="control-label col-sm-2">Escolher Ficheiro Exportado do Siges</label> |
||
309 | <div class="col-sm-10"> |
||
310 | <html:file styleClass="form-control" property="formFileImport"/> |
||
311 | </div> |
||
312 | </div> |
||
1771 | jmachado | 313 | <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();"> |
1541 | jmachado | 314 | Importar o ficheiro sobrepondo esta versão do plano |
315 | </button> |
||
316 | </div> |
||
1534 | jmachado | 317 | </div> |
318 | </div> |
||
1541 | jmachado | 319 | <div class="col-md-6"> |
320 | <div class="panel panel-default"> |
||
321 | <div class="panel-body"> |
||
322 | <div class="form-group"> |
||
323 | <label class="control-label col-sm-2">Escolher Ficheiro Exportado do Siges Com Ramos</label> |
||
324 | <div class="col-sm-10"> |
||
1542 | jmachado | 325 | <html:file styleClass="form-control" property="formFileImport2"/> |
1541 | jmachado | 326 | </div> |
327 | </div> |
||
1771 | jmachado | 328 | <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();"> |
1541 | jmachado | 329 | FUNDIR o ficheiro com esta versão do plano |
330 | </button> |
||
331 | </div> |
||
332 | </div> |
||
333 | </div> |
||
334 | |||
335 | |||
1534 | jmachado | 336 | </div> |
337 | </div> |
||
338 | |||
339 | |||
1516 | jmachado | 340 | <div class="panel panel-default"> |
1771 | jmachado | 341 | <div class="panel-heading">Plano de Estudos</div> |
1516 | jmachado | 342 | <div class="panel-body"> |
1507 | jmachado | 343 | |
344 | |||
1516 | jmachado | 345 | <input type="hidden" name="dispatch" value="savePlano"/> |
346 | <html:hidden property="courseId"/> |
||
347 | <html:hidden property="versaoVigor"/> |
||
348 | <html:hidden property="courseStudiesPlan.id"/> |
||
349 | <html:hidden styleId="semestreId" property="semestreId"/> |
||
350 | <html:hidden styleId="perfilId" property="perfilId"/> |
||
1771 | jmachado | 351 | <html:hidden styleId="planoEstudosJsonInterface" property="planoEstudosJsonInterface"/> |
1505 | jmachado | 352 | |
1516 | jmachado | 353 | <div class="form-group"> |
354 | <label class="control-label col-sm-2">Versão</label> |
||
355 | <div class="col-sm-10"> |
||
356 | <html:text styleClass="form-control" property="courseStudiesPlan.version" size="3"/> |
||
357 | </div> |
||
358 | </div> |
||
359 | <div class="form-group"> |
||
360 | <label class="control-label col-sm-2">Descrição</label> |
||
361 | <div class="col-sm-10"> |
||
362 | <html:text styleClass="form-control" property="courseStudiesPlan.versionDescription"/> |
||
363 | </div> |
||
364 | </div> |
||
1507 | jmachado | 365 | |
1534 | jmachado | 366 | |
367 | |||
368 | |||
1507 | jmachado | 369 | |
1505 | jmachado | 370 | |
1507 | jmachado | 371 | |
1771 | jmachado | 372 | <div> |
373 | <script> |
||
374 | var planoApp = angular.module('planoApp', ['ui.tree']); |
||
375 | GLOBAL_BacoAngularAppDependencies.push('planoApp'); |
||
376 | planoApp.controller('planoController', function ($scope) { |
||
377 | $scope.treeOptions = { |
||
378 | accept: function(sourceNodeScope, destNodesScope, destIndex) { |
||
1507 | jmachado | 379 | |
1771 | jmachado | 380 | //if(destNodesScope) |
381 | //console.log(destNodesScope); |
||
382 | //console.log(sourceNodeScope); |
||
383 | //console.log(destIndex); |
||
384 | //console.log(destNodesScope.$parent.$modelValue.title); |
||
385 | //console.log(destNodesScope.$modelValue[0].type); |
||
386 | if(sourceNodeScope.$modelValue.type == destNodesScope.$modelValue[0].type) |
||
387 | return true; |
||
388 | return false; |
||
389 | }, |
||
390 | dropped: function(e) { |
||
391 | //console.log (e.source.nodeScope.$modelValue); |
||
392 | //alert ("Largado o nó com nome: " + e.source.nodeScope.$modelValue.name + " sobre " + e.dest.nodesScope.$parent.$modelValue.name); |
||
393 | } |
||
394 | }; |
||
395 | $scope.json = <%=courseStudiesPlansAdminForm.getPlanoEstudosJsonInterface()%> |
||
1507 | jmachado | 396 | |
1771 | jmachado | 397 | $scope.confView = |
398 | { |
||
399 | "SIGES" : true , |
||
400 | "Nome" : true , |
||
401 | "ECTS" : true, |
||
402 | "Total" : true , |
||
403 | "T" : true , |
||
404 | "TP" : true , |
||
405 | "P" : true , |
||
406 | "PL" : true , |
||
407 | "PD" : true , |
||
408 | "OT" : true , |
||
409 | "E" : true , |
||
410 | "S" : true , |
||
411 | "TC" : true , |
||
412 | "O" : true , |
||
413 | "URL_UNIDADE" : true , |
||
414 | "FICHA_URL" : true |
||
415 | } |
||
1516 | jmachado | 416 | |
1789 | jmachado | 417 | $scope.isInteger = function(n) { return Number(n) === n && n % 1 === 0; } |
418 | $scope.isFloat = function(n) { return Number(n) === n && n % 1 !== 0; } |
||
419 | |||
420 | |||
421 | $scope.getTotalHorasContacto = function(totalHoras) |
||
422 | { |
||
423 | var total = 0; |
||
424 | |||
425 | for (var key in totalHoras ) |
||
426 | { |
||
427 | if(key != "tc" && key != "ot" && key != "pd" |
||
428 | && key != "pd" |
||
429 | && key != "pl" |
||
430 | && key != "tp") |
||
431 | { |
||
432 | var valor = totalHoras[key]; |
||
433 | if(!isNaN(Number(valor))) |
||
434 | { |
||
435 | total+= Number(valor); |
||
436 | } |
||
437 | } |
||
438 | } |
||
439 | return total; |
||
440 | } |
||
441 | |||
1771 | jmachado | 442 | $scope.submeterForm = function() |
443 | { |
||
444 | $("#planoEstudosJsonInterface").val( |
||
445 | JSON.stringify($scope.json) |
||
446 | ); |
||
447 | $("#CourseStudiesPlansAdminForm").submit(); |
||
448 | } |
||
1516 | jmachado | 449 | |
1771 | jmachado | 450 | $scope.fundirPlano = function() |
451 | { |
||
452 | set($("#CourseStudiesPlansAdminForm").get(0),"mergePlano"); |
||
453 | $scope.submeterForm(); |
||
454 | } |
||
1517 | jmachado | 455 | |
1771 | jmachado | 456 | $scope.importarPlano = function() |
457 | { |
||
458 | set($("#CourseStudiesPlansAdminForm").get(0),"importarPlano"); |
||
459 | $scope.submeterForm(); |
||
460 | } |
||
461 | $scope.salvar = function() |
||
462 | { |
||
463 | set($("#CourseStudiesPlansAdminForm").get(0),"savePlano"); |
||
464 | $scope.submeterForm(); |
||
465 | } |
||
1517 | jmachado | 466 | |
1771 | jmachado | 467 | $scope.removeSemestre = function($index) |
468 | { |
||
469 | if(confirm("Tem a certeza que deseja remover o Semestre " + $scope.json.semestre[$index].id + "?")) |
||
470 | $scope.json.semestre.splice($index,1); |
||
471 | } |
||
472 | $scope.removePerfil = function(semestre,$index) |
||
473 | { |
||
474 | if(confirm("Tem a certeza que deseja remover o Perfil " + semestre.perfil[$index].nome + "?")) |
||
475 | semestre.perfil.splice($index,1); |
||
476 | } |
||
477 | $scope.removeUnidade = function(semestreOuperfil,$index) |
||
478 | { |
||
479 | if(confirm("Tem a certeza que deseja remover a Unidade " + semestreOuperfil.unidade[$index].nome + "?")) |
||
480 | semestreOuperfil.unidade.splice($index,1); |
||
481 | } |
||
482 | $scope.addSemestre = function() |
||
483 | { |
||
484 | $scope.json.semestre.push( |
||
485 | { |
||
486 | "id": "S1", |
||
487 | "notas": null, |
||
488 | "perfil": [], |
||
489 | "semestreDesc": "Semestre 1", |
||
490 | "semestreDescEn": "Semester 1", |
||
491 | "semestreDescEs": "Semestre 1", |
||
492 | "semestreDescFr": "Semestre 1", |
||
493 | "semestreId": null, |
||
494 | "unidade": [], |
||
495 | "type" : "semestre" |
||
496 | } |
||
497 | ); |
||
498 | } |
||
1516 | jmachado | 499 | |
1771 | jmachado | 500 | $scope.addPerfil = function(semestre) |
501 | { |
||
502 | semestre.perfil.push( |
||
503 | { |
||
504 | "nome": "", |
||
505 | "perfilId": null, |
||
506 | "unidade" : [], |
||
507 | "type" : "perfil" |
||
508 | } |
||
509 | ); |
||
510 | } |
||
511 | |||
512 | $scope.addUnidade = function(semestreOuPerfil) |
||
513 | { |
||
514 | semestreOuPerfil.unidade.push( |
||
515 | { |
||
516 | "dep": "", |
||
517 | "ects": "", |
||
518 | "nome": "", |
||
519 | "nomeEn": null, |
||
520 | "nomeEs": null, |
||
521 | "nomeFr": null, |
||
522 | "obs": "", |
||
523 | "removed": null, |
||
524 | "siges": null, |
||
525 | "totalHoras": 0, |
||
526 | "urlFichaCurricular": "", |
||
527 | "urlUnidadeCurricular": "", |
||
528 | "type": "unidade" |
||
529 | } |
||
530 | ); |
||
531 | } |
||
1773 | jmachado | 532 | $scope.findSiges = function(u,s){ |
533 | var code = u.siges; |
||
534 | $.getJSON("<%=request.getContextPath()%>/user/courses/courseApiJson.jsp", |
||
535 | { service:"findCourseUnit", |
||
536 | siges: code, |
||
537 | courseSigesCode: "${course.code}" |
||
538 | }, |
||
539 | function(data) |
||
540 | { |
||
541 | if(data.response == "ok") |
||
542 | { |
||
1830 | jmachado | 543 | u.nome = data.name; |
1773 | jmachado | 544 | $("#sigesResponse" + s.id + "_" + u.siges).html(""); |
545 | } |
||
546 | else |
||
547 | { |
||
548 | $("#sigesResponse" + s.id + "_" + u.siges).html("Não encontrado"); |
||
549 | } |
||
550 | $scope.$apply(); |
||
551 | } |
||
552 | ); |
||
553 | } |
||
1771 | jmachado | 554 | }); |
555 | |||
556 | |||
557 | </script> |
||
558 | <div class="panel panel-info"> |
||
559 | <div class="panel-heading">Configuração de Visualização</div> |
||
560 | <div class="panel-body"> |
||
561 | <table class="table"> |
||
562 | <thead> |
||
563 | <tr> |
||
564 | <th>SIGES</th> |
||
565 | <th>Nome</th> |
||
566 | <th>ECTS</th> |
||
1789 | jmachado | 567 | <th>Total Horas de Trabalho</th> |
1771 | jmachado | 568 | <th>T</th> |
569 | <th>TP</th> |
||
570 | <th>P</th> |
||
571 | <th>PL</th> |
||
572 | <th>PD</th> |
||
573 | <th>OT</th> |
||
574 | <th>E</th> |
||
575 | <th>S</th> |
||
576 | <th>TC</th> |
||
577 | <th>O</th> |
||
578 | |||
579 | <th>URL UNIDADE</th> |
||
580 | <th>FICHA URL</th> |
||
581 | </tr> |
||
582 | </thead> |
||
583 | <tbody> |
||
584 | <tr> |
||
585 | <td><input type="checkbox" ng-model="confView.SIGES"></td> |
||
586 | <td><input type="checkbox" ng-model="confView.Nome"></td> |
||
587 | <td><input type="checkbox" ng-model="confView.ECTS"></td> |
||
588 | <td><input type="checkbox" ng-model="confView.Total"></td> |
||
589 | <td><input type="checkbox" ng-model="confView.T"></td> |
||
590 | <td><input type="checkbox" ng-model="confView.TP"></td> |
||
591 | <td><input type="checkbox" ng-model="confView.P"></td> |
||
592 | <td><input type="checkbox" ng-model="confView.PL"></td> |
||
593 | <td><input type="checkbox" ng-model="confView.PD"></td> |
||
594 | <td><input type="checkbox" ng-model="confView.OT"></td> |
||
595 | <td><input type="checkbox" ng-model="confView.E"></td> |
||
596 | <td><input type="checkbox" ng-model="confView.S"></td> |
||
597 | <td><input type="checkbox" ng-model="confView.TC"></td> |
||
598 | <td><input type="checkbox" ng-model="confView.O"></td> |
||
599 | <td><input type="checkbox" ng-model="confView.URL_UNIDADE"></td> |
||
600 | <td><input type="checkbox" ng-model="confView.FICHA_URL"></td> |
||
601 | </tr> |
||
602 | </tbody> |
||
603 | </table> |
||
604 | </div> |
||
1534 | jmachado | 605 | </div> |
1771 | jmachado | 606 | |
607 | <div class="panel panel-default"> |
||
608 | <div class="panel-heading"> |
||
609 | Informação obtida do Siges (Auxiliar) |
||
1534 | jmachado | 610 | </div> |
1771 | jmachado | 611 | <div class="panel-body"> |
612 | <div class="form-group"> |
||
613 | <label class="control-label col-sm-2">Ano do Plano no Siges</label> |
||
614 | <div class="col-sm-10"> |
||
615 | <input type="text" class="form-control" ng-model="json.anoPlanoSiges"/> |
||
616 | </div> |
||
1534 | jmachado | 617 | </div> |
1771 | jmachado | 618 | <div class="form-group"> |
619 | <label class="control-label col-sm-2">Código do Plano no Siges</label> |
||
620 | <div class="col-sm-10"> |
||
621 | <input type="text" class="form-control" ng-model="json.codigoPlanoSiges"/> |
||
622 | </div> |
||
1534 | jmachado | 623 | </div> |
1771 | jmachado | 624 | <div class="form-group"> |
625 | <label class="control-label col-sm-2">Linha Descritiva do Plano no Siges</label> |
||
626 | <div class="col-sm-10"> |
||
627 | <input type="text" class="form-control" ng-model="json.descPlanoSiges"/> |
||
628 | </div> |
||
629 | </div> |
||
1534 | jmachado | 630 | </div> |
631 | </div> |
||
632 | |||
1771 | jmachado | 633 | <div class="panel panel-default"> |
1516 | jmachado | 634 | <div class="panel-heading"> |
1771 | jmachado | 635 | Semestres |
636 | <button style="margin-left: 4px" type="button" class="btn btn-success pull-right" ng-click="addSemestre()"> |
||
637 | <span class="glyphicon glyphicon-plus"> </span> Semestre |
||
638 | </button> |
||
639 | </div> |
||
640 | <div class="panel-body"> |
||
641 | <div ui-tree="treeOptions" id="page-content-root"> |
||
642 | <div ui-tree-nodes ng-model="json.semestre"> |
||
643 | <div class="panel panel-primary" ng-repeat="s in json.semestre" ui-tree-node ng-include="'semestre_renderer.html'" ng-init="s.type='semestre'"> |
||
644 | </div> |
||
645 | </div> |
||
646 | </div> |
||
647 | </div> |
||
1516 | jmachado | 648 | |
1771 | jmachado | 649 | <script type="text/ng-template" id="semestre_renderer.html"> |
650 | <div class="panel-heading"> |
||
1516 | jmachado | 651 | <div class="form-group"> |
1771 | jmachado | 652 | |
653 | <div class="col-sm-1"> |
||
654 | <button type="button" class="btn btn-danger" ng-click="removeSemestre($index)"> |
||
1516 | jmachado | 655 | <span class="glyphicon glyphicon-remove"> </span> |
1507 | jmachado | 656 | </button> |
1505 | jmachado | 657 | </div> |
1771 | jmachado | 658 | <div class="col-sm-4" ui-tree-handle> |
659 | <span class="btn btn-info"><i class="glyphicon glyphicon-resize-vertical"></i></span> |
||
1516 | jmachado | 660 | Duração |
661 | </div> |
||
1517 | jmachado | 662 | <div class="col-sm-3"> |
1771 | jmachado | 663 | <select class="form-control chosenOff" ng-model="s.id"> |
664 | <option value="S1">Semestre 1</option> |
||
665 | <option value="S2">Semestre 2</option> |
||
666 | <option value="S3">Semestre 3</option> |
||
667 | <option value="S4">Semestre 4</option> |
||
668 | <option value="S5">Semestre 5</option> |
||
669 | <option value="S6">Semestre 6</option> |
||
670 | <option value="S7">Semestre 7</option> |
||
671 | <option value="S8">Semestre 8</option> |
||
672 | <option value="A1">Anual 1</option> |
||
673 | <option value="A2">Anual 2</option> |
||
674 | <option value="A3">Anual 3</option> |
||
675 | <option value="A4">Anual 4</option> |
||
676 | <option value="T1">Trimestre 1</option> |
||
677 | <option value="T2">Trimestre 2</option> |
||
678 | <option value="T3">Trimestre 3</option> |
||
679 | <option value="T4">Trimestre 4</option> |
||
680 | <option value="T5">Trimestre 5</option> |
||
681 | <option value="T6">Trimestre 6</option> |
||
682 | <option value="T7">Trimestre 7</option> |
||
683 | <option value="T8">Trimestre 8</option> |
||
684 | <option value="OP">Opcionais</option> |
||
685 | </select> |
||
686 | <div ng-show="s.id == 'OP'"> |
||
687 | Descrição (PT) <input type="text" ng-model="s.semestreDesc" class="form-control"/> |
||
688 | Descrição (EN) <input type="text" ng-model="s.semestreDescEn" class="form-control"/> |
||
689 | Descrição (ES) <input type="text" ng-model="s.semestreDescEs" class="form-control"/> |
||
690 | Descrição (FR) <input type="text" ng-model="s.semestreDescFr" class="form-control"/> |
||
1517 | jmachado | 691 | </div> |
1516 | jmachado | 692 | </div> |
1771 | jmachado | 693 | <div class="col-sm-4"> |
1507 | jmachado | 694 | |
1771 | jmachado | 695 | <button style="margin-left: 4px" type="button" class="btn btn-success pull-right" ng-click="addUnidade(s)"> |
1516 | jmachado | 696 | <span class="glyphicon glyphicon-plus"> </span> Unidade |
697 | </button> |
||
698 | |||
1771 | jmachado | 699 | <button style="margin-left: 4px" type="button" class="btn btn-success pull-right" ng-click="addPerfil(s)"> |
1516 | jmachado | 700 | <span class="glyphicon glyphicon-plus"> </span> Perfil |
701 | </button> |
||
702 | </div> |
||
703 | </div> |
||
704 | </div> |
||
705 | <div class="panel-body"> |
||
1521 | jmachado | 706 | <div class="form-group"> |
1516 | jmachado | 707 | |
1521 | jmachado | 708 | <div class="col-sm-2"> |
709 | Notas do Semestre (Pode ser utilizado para mostrar Optativas) |
||
710 | </div> |
||
711 | <div class="col-sm-10"> |
||
1771 | jmachado | 712 | <textarea ng-model="s.notas" rows="5" class="form-control"></textarea> |
1521 | jmachado | 713 | </div> |
714 | </div> |
||
715 | |||
1516 | jmachado | 716 | <button class="btn btn-default" data-toggle="collapse" type="button" data-target=".langs">Ver Campos Multingua</button> |
1771 | jmachado | 717 | <div ui-tree-nodes="" ng-model="s.perfil" ng-show="s.perfil.length > 0"> |
718 | <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"> |
||
719 | </div> |
||
720 | </div> |
||
721 | <div ng-show="s.unidade.length > 0" class="table-responsive"> |
||
722 | <table class="table clearfix"> |
||
723 | <thead> |
||
724 | <tr> |
||
725 | <td></td> |
||
726 | <td></td> |
||
727 | <th ng-show="confView.SIGES">SIGES</th> |
||
728 | <th ng-show="confView.Nome">Nome</th> |
||
729 | <th ng-show="confView.ECTS">ECTS</th> |
||
1789 | jmachado | 730 | <th ng-show="confView.Total">Total Horas Trabalho</th> |
731 | <th>Total Contacto</th> |
||
1771 | jmachado | 732 | <th ng-show="confView.T">T</th> |
733 | <th ng-show="confView.TP">TP</th> |
||
734 | <th ng-show="confView.P">P</th> |
||
735 | <th ng-show="confView.PL">PL</th> |
||
736 | <th ng-show="confView.PD">PD</th> |
||
737 | <th ng-show="confView.OT">OT</th> |
||
738 | <th ng-show="confView.E">E</th> |
||
739 | <th ng-show="confView.S">S</th> |
||
740 | <th ng-show="confView.TC">TC</th> |
||
741 | <th ng-show="confView.O">O</th> |
||
742 | <th ng-show="confView.URL_UNIDADE">URL UNIDADE</th> |
||
743 | <th ng-show="confView.FICHA_URL">FICHA URL</th> |
||
744 | </tr> |
||
745 | </thead> |
||
746 | <tbody ui-tree-nodes="" ng-model="s.unidade"> |
||
1517 | jmachado | 747 | |
1771 | jmachado | 748 | <!-- UNIDADE TEMPLATE START--> |
749 | <tr ng-repeat="u in s.unidade" ui-tree-node ng-include="'unidade_renderer.html'" ng-init="u.type='unidade';parent=s"> |
||
750 | </tr> |
||
751 | <!--UNIDADE TEMPLATE END--> |
||
1507 | jmachado | 752 | |
1771 | jmachado | 753 | </tbody> |
754 | </table> |
||
755 | </div> |
||
756 | </div> |
||
757 | </script> |
||
758 | <!-- PERFIL TEMPLATE START --> |
||
759 | <script type="text/ng-template" id="perfil_renderer.html"> |
||
1507 | jmachado | 760 | |
1771 | jmachado | 761 | <div class="panel-heading"> |
1516 | jmachado | 762 | |
1771 | jmachado | 763 | <div class="form-group"> |
764 | <div class="col-sm-1"> |
||
765 | <button type="button" class="btn btn-danger" ng-click="removePerfil(parent,$index)"> |
||
766 | <span class="glyphicon glyphicon-remove"> </span> |
||
767 | </button> |
||
1505 | jmachado | 768 | </div> |
1771 | jmachado | 769 | <div class="col-sm-3" ui-tree-handle> |
770 | <span class="btn btn-info"><i class="glyphicon glyphicon-resize-vertical"></i></span> Perfil |
||
771 | </div> |
||
772 | <div class="col-sm-5"> |
||
773 | <input type="text" class="form-control" ng-model="p.nome"> |
||
774 | </div> |
||
775 | <div class="col-sm-3"> |
||
776 | <button type="button" class="btn btn-success pull-right" ng-click="addUnidade(p)"> |
||
777 | <span class="glyphicon glyphicon-plus"> </span> Unidade |
||
778 | </button> |
||
779 | </div> |
||
780 | </div> |
||
781 | </div> |
||
782 | <div class="panel-body clearfix table-responsive"> |
||
783 | <table class="table"> |
||
1516 | jmachado | 784 | <thead> |
1771 | jmachado | 785 | <tr> |
786 | <td></td> |
||
787 | <td></td> |
||
788 | <th ng-show="confView.SIGES">SIGES</th> |
||
789 | <th ng-show="confView.Nome">Nome</th> |
||
790 | <th ng-show="confView.ECTS">ECTS</th> |
||
1789 | jmachado | 791 | <th ng-show="confView.Total">Total Horas de Trabalho</th> |
792 | <th>Total Contacto</th> |
||
1771 | jmachado | 793 | <th ng-show="confView.T">T</th> |
794 | <th ng-show="confView.TP">TP</th> |
||
795 | <th ng-show="confView.P">P</th> |
||
796 | <th ng-show="confView.PL">PL</th> |
||
797 | <th ng-show="confView.PD">PD</th> |
||
798 | <th ng-show="confView.OT">OT</th> |
||
799 | <th ng-show="confView.E">E</th> |
||
800 | <th ng-show="confView.S">S</th> |
||
801 | <th ng-show="confView.TC">TC</th> |
||
802 | <th ng-show="confView.O">O</th> |
||
803 | <th ng-show="confView.URL_UNIDADE">URL UNIDADE</th> |
||
804 | <th ng-show="confView.FICHA_URL">FICHA URL</th> |
||
805 | </tr> |
||
1516 | jmachado | 806 | </thead> |
1771 | jmachado | 807 | <tbody ui-tree-nodes="" ng-model="p.unidade"> |
808 | <!-- UNIDADE TEMPLATE START--> |
||
809 | <tr ng-repeat="u in p.unidade" ui-tree-node ng-include="'unidade_renderer.html'" ng-init="u.type='unidade';parent=p"> |
||
810 | </tr> |
||
811 | <!--UNIDADE TEMPLATE END--> |
||
1507 | jmachado | 812 | |
1771 | jmachado | 813 | </tbody> |
814 | </table> |
||
815 | </div> |
||
816 | </script> |
||
1507 | jmachado | 817 | |
1771 | jmachado | 818 | <script type="text/ng-template" id="unidade_renderer.html"> |
819 | <td class="text-nowrap"> |
||
820 | <span class="btn btn-info"><i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i></span> |
||
821 | </td> |
||
822 | <td> |
||
823 | <button type="button" class="btn btn-danger" ng-click="removeUnidade(parent,$index)"> |
||
824 | <span class="glyphicon glyphicon-remove"> </span> |
||
825 | </button> |
||
826 | </td> |
||
827 | <td ng-show="confView.SIGES"> |
||
1507 | jmachado | 828 | |
1771 | jmachado | 829 | |
1520 | jmachado | 830 | |
1773 | jmachado | 831 | |
832 | <input ng-blur="findSiges(u,s)" type="text" ng-model="u.siges" style="width: 60px"/> |
||
833 | <div id="sigesResponse{{s.id}}_{{u.siges}}"></div> |
||
1771 | jmachado | 834 | </td> |
835 | <td ng-show="confView.Nome"> |
||
836 | <div> |
||
837 | <div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.nome"/></div> |
||
1505 | jmachado | 838 | |
1771 | jmachado | 839 | <div class="langs collapse" > |
840 | <div class="col-sm-1">(EN)</div> |
||
841 | <div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.nomeEn"/></div> |
||
842 | <div class="col-sm-1">(ES)</div> |
||
843 | <div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.nomeEs"/></div> |
||
844 | <div class="col-sm-1">(FR)</div> |
||
845 | <div class="col-sm-11"><input type="text" style="width:200px" ng-model="u.nomeFr"/></div> |
||
846 | </div> |
||
847 | </div> |
||
1505 | jmachado | 848 | |
1771 | jmachado | 849 | </td> |
850 | <td ng-show="confView.ECTS"><input type="text" style="width: 40px" ng-model="u.eCTS"/></td> |
||
851 | <td ng-show="confView.Total"><input type="text" style="width: 40px" ng-model="u.totalHoras"></td> |
||
1789 | jmachado | 852 | <td>{{getTotalHorasContacto(u.horasContacto)}}</td> |
1771 | jmachado | 853 | <td ng-show="confView.T"><input type="text" style="width: 40px" ng-model="u.horasContacto.t"/></td> |
1772 | jmachado | 854 | <td ng-show="confView.TP"><input type="text" style="width: 40px" ng-model="u.horasContacto.tP"/></td> |
1771 | jmachado | 855 | <td ng-show="confView.P"><input type="text" style="width: 40px" ng-model="u.horasContacto.p"/></td> |
1772 | jmachado | 856 | <td ng-show="confView.PL"><input type="text" style="width: 40px" ng-model="u.horasContacto.pL"/></td> |
857 | <td ng-show="confView.PD"><input type="text" style="width: 40px" ng-model="u.horasContacto.pD"/></td> |
||
858 | <td ng-show="confView.OT"><input type="text" style="width: 40px" ng-model="u.horasContacto.oT"/></td> |
||
1771 | jmachado | 859 | <td ng-show="confView.E"><input type="text" style="width: 40px" ng-model="u.horasContacto.e"/></td> |
860 | <td ng-show="confView.S"><input type="text" style="width: 40px" ng-model="u.horasContacto.s"/></td> |
||
1772 | jmachado | 861 | <td ng-show="confView.TC"><input type="text" style="width: 40px" ng-model="u.horasContacto.tC"/></td> |
1771 | jmachado | 862 | <td ng-show="confView.O"><input type="text" style="width: 40px" ng-model="u.horasContacto.o"/></td> |
1797 | jmachado | 863 | <td ng-show="confView.URL_UNIDADE"> |
864 | <input type="text" id="urlUnidadeCurricular{{s.id}}_{{u.siges}}" ng-model="u.urlUnidadeCurricular" style="width:600px"/> |
||
865 | </td> |
||
1771 | jmachado | 866 | <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}}"> |
867 | <input type="text" id="urlFichaCurricular{{s.id}}_{{u.siges}}" ng-model="u.urlFichaCurricular" style="width:600px"/> |
||
868 | </td> |
||
869 | </script> |
||
1505 | jmachado | 870 | |
1772 | jmachado | 871 | <pre class="code"> |
1771 | jmachado | 872 | {{json | json}} |
1772 | jmachado | 873 | </pre> |
1771 | jmachado | 874 | <a type="button" class="btn btn-danger" href="<%=request.getContextPath()%>/user/adminStudyPlans.do?courseId=${courseId}">Cancelar</a> |
875 | <button type="button" class="btn btn-success" ng-click="salvar()">Salvar</button> |
||
876 | </div> |
||
1505 | jmachado | 877 | |
878 | |||
879 | |||
880 | |||
881 | |||
1516 | jmachado | 882 | </div> |
1505 | jmachado | 883 | </div> |
1516 | jmachado | 884 | </html:form> |
1505 | jmachado | 885 | </div> |
886 | </div> |
||
887 | |||
888 | <% |
||
889 | |||
890 | AbstractDao.getCurrentSession().getTransaction().commit(); |
||
891 | %> |
||
892 |