/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java |
---|
436,48 → 436,51 |
Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(c.getCourseCode()); |
c.setCourse(course); |
checkOrCreateCourseYear(logMessages, year, c.getCourseCode(), this); |
//Obter as tipologias de sumarios e aulas e colocar na unidade |
fillTipologias(d, (CourseUnitImpl) c); |
} |
} |
} |
try { |
CourseUnitImpl.Tipologias t = ((CourseUnitImpl)c).getTipologiasClass(); |
if(t == null) |
t = new CourseUnitImpl.Tipologias(); |
t.setTipologiasSumarios(new ArrayList<CourseUnitImpl.Tipologia>()); |
for(TipologiasSumario.TipologiaSumario tipologiaSumario : d.getTipologiasSumario().getTipologias()) |
{ |
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
tipoSum.setOcorrencias(tipologiaSumario.getNumeroOcorrencias()); |
tipoSum.setCdTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + tipologiaSumario.getCdTipoAula())); |
tipoSum.setCdTurma(tipologiaSumario.getCdTurma()); |
tipoSum.setCdDocente("" + tipologiaSumario.getCdDocente()); |
t.getTipologiasSumarios().add(tipoSum); |
} |
t.setTipologiasHorarioReferencia(new ArrayList<CourseUnitImpl.Tipologia>()); |
for(TipologiasHorario.TipologiaHorario tipologiaHorario : d.getTipologiasHorario().getTipologias()) |
{ |
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
String codigoCorrespondenteTipoAula = |
ConfigProperties.getProperty("netpa.code.ocup." + tipologiaHorario.getCdTipoOcupacao() + ".tipo.aula"); |
if(codigoCorrespondenteTipoAula != null && codigoCorrespondenteTipoAula.length() > 0) |
{ |
tipoSum.setCdTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + codigoCorrespondenteTipoAula)); |
tipoSum.setCdTurma(tipologiaHorario.getCdTurma()); |
tipoSum.setCdDocente("" + tipologiaHorario.getCdDocente()); |
t.getTipologiasHorarioReferencia().add(tipoSum); |
} |
else |
{ |
System.out.println("Tipologia: cd tipo ocup ignorado:" + tipologiaHorario.getCdTipoOcupacao()); |
} |
} |
((CourseUnitImpl)c).setTipologiasClass(t); |
} catch (Exception e) { |
logger.error(e, e); |
erroGraveAObterTipologias++; |
private void fillTipologias(Disciplina d, CourseUnitImpl c) { |
try { |
CourseUnitImpl.Tipologias t = ((CourseUnitImpl)c).getTipologiasClass(); |
if(t == null) |
t = new CourseUnitImpl.Tipologias(); |
for(TipologiasSumario.TipologiaSumario tipologiaSumario : d.getTipologiasSumario().getTipologias()) |
{ |
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
tipoSum.setOcorrencias(tipologiaSumario.getNumeroOcorrencias()); |
tipoSum.setDsTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + tipologiaSumario.getCdTipoAula())); |
tipoSum.setCdTurma(tipologiaSumario.getCdTurma()); |
tipoSum.setCdDocente("" + tipologiaSumario.getCdDocente()); |
tipoSum.setCdTipologia(""+tipologiaSumario.getCdTipoAula()); |
t.getTipologiasSumarios().add(tipoSum); |
} |
for(TipologiasHorario.TipologiaHorario tipologiaHorario : d.getTipologiasHorario().getTipologias()) |
{ |
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia(); |
String codigoCorrespondenteTipoAula = |
ConfigProperties.getProperty("netpa.code.ocup." + tipologiaHorario.getCdTipoOcupacao() + ".tipo.aula"); |
if(codigoCorrespondenteTipoAula != null && codigoCorrespondenteTipoAula.length() > 0) |
{ |
tipoSum.setOcorrencias(null); |
tipoSum.setDsTipologia(ConfigProperties.getProperty("netpa.tipo.aula." + codigoCorrespondenteTipoAula)); |
tipoSum.setCdTipologia("" + codigoCorrespondenteTipoAula); |
tipoSum.setCdTurma(tipologiaHorario.getCdTurma()); |
tipoSum.setCdDocente("" + tipologiaHorario.getCdDocente()); |
t.getTipologiasHorarioReferencia().add(tipoSum); |
} |
else |
{ |
System.out.println("Tipologia: cd tipo ocup ignorado:" + tipologiaHorario.getCdTipoOcupacao()); |
} |
} |
c.setTipologiasClass(t); |
} catch (Exception e) { |
logger.error(e, e); |
erroGraveAObterTipologias++; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java |
---|
4,6 → 4,7 |
import com.owlike.genson.TransformationException; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.enums.CourseUnitContentsGrants; |
import pt.estgp.estgweb.domain.test.TestCourseUnit; |
import pt.estgp.estgweb.domain.utils.SimpleClearanceRuledSupport; |
347,16 → 348,112 |
setTipologias(tipologias.serialize()); |
} |
public TipologiaPersistent loadPersistent(Tipologia myTipo) |
{ |
TipologiaPersistent tipologiaPersistent = new TipologiaPersistent(); |
tipologiaPersistent.setHorRef(myTipo.isHorRef()); |
tipologiaPersistent.setExtra(myTipo.isExtra()); |
tipologiaPersistent.setTeacher(DaoFactory.getTeacherDaoImpl().loadBySigesCode(Integer.parseInt(myTipo.getCdDocente()))); |
tipologiaPersistent.setCdTipologia(myTipo.getCdTipologia()); |
tipologiaPersistent.setOcorrencias(myTipo.getOcorrencias()); |
tipologiaPersistent.setCourseUnitTurma(findTurma(myTipo.getCdTurma())); |
if(tipologiaPersistent.getCourseUnitTurma() == null || tipologiaPersistent.getTeacher() == null) |
{ |
logger.error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente"); |
return null; |
} |
return tipologiaPersistent; |
} |
public CourseUnitTurma findTurma(String turma) |
{ |
if(getTurmas() == null) |
return null; |
for(CourseUnitTurma t: getTurmas()) |
{ |
if(t.getTurma().equals(turma)) |
return t; |
} |
return null; |
} |
public static class TipologiaPersistent |
{ |
private Teacher teacher; |
private CourseUnitTurma courseUnitTurma; |
private String cdTipologia; |
private Integer ocorrencias = 0; |
protected boolean extra; |
protected boolean horRef; |
public boolean isExtra() { |
return extra; |
} |
public boolean isHorRef() { |
return horRef; |
} |
public boolean isSumario() { |
return ocorrencias != null && ocorrencias > 0; |
} |
public void setExtra(boolean extra) { |
this.extra = extra; |
} |
public void setHorRef(boolean horRef) { |
this.horRef = horRef; |
} |
public Teacher getTeacher() { |
return teacher; |
} |
public void setTeacher(Teacher teacher) { |
this.teacher = teacher; |
} |
public CourseUnitTurma getCourseUnitTurma() { |
return courseUnitTurma; |
} |
public void setCourseUnitTurma(CourseUnitTurma courseUnitTurma) { |
this.courseUnitTurma = courseUnitTurma; |
} |
public String getCdTipologia() { |
return cdTipologia; |
} |
public void setCdTipologia(String cdTipologia) { |
this.cdTipologia = cdTipologia; |
} |
public Integer getOcorrencias() { |
return ocorrencias; |
} |
public void setOcorrencias(Integer ocorrencias) { |
this.ocorrencias = ocorrencias; |
} |
} |
/** |
* Os codigos de tipologia devem ser limitados a T TP OT etc |
*/ |
public static class Tipologia |
{ |
private String cdDocente; |
private String cdTurma; |
private String cdTipologia; |
private Integer ocorrencias; // apenas faz sentido nos sumarios. no horario ref nao. |
protected String cdDocente; |
protected String cdTurma; |
protected String cdTipologia; |
protected String dsTipologia; |
protected Integer ocorrencias; // apenas faz sentido nos sumarios. no horario ref nao. |
protected boolean extra; |
protected boolean horRef; |
public Integer getOcorrencias() { |
return ocorrencias; |
} |
389,6 → 486,28 |
this.cdTipologia = cdTipologia; |
} |
public String getDsTipologia() { |
return dsTipologia; |
} |
public void setDsTipologia(String dsTipologia) { |
this.dsTipologia = dsTipologia; |
} |
public boolean isExtra() { |
return extra; |
} |
public boolean isSumario() { |
return ocorrencias != null && ocorrencias > 0; |
} |
public boolean isHorRef() { |
return horRef; |
} |
@Override |
public boolean equals(Object o) |
{ |
409,13 → 528,31 |
|| |
(((Tipologia)o).getCdTipologia().equals(getCdTipologia()))); |
} |
public boolean equalsIncDsFields(Object o) |
{ |
return o instanceof Tipologia && |
equals(o) |
&& |
( |
(((Tipologia)o).getDsTipologia() == null && getDsTipologia() == null) |
|| |
(((Tipologia)o).getDsTipologia().equals(getDsTipologia()))) |
&& |
( |
(((Tipologia)o).getOcorrencias() == null && getOcorrencias() == null) |
|| |
(((Tipologia)o).getOcorrencias().equals(getOcorrencias()))) |
; |
} |
} |
public static class Tipologias |
{ |
ArrayList<Tipologia> tipologiasHorarioReferencia; |
ArrayList<Tipologia> tipologiasSumarios; |
ArrayList<Tipologia> tipologiasExtraAdicionadas; |
ArrayList<Tipologia> tipologiasHorarioReferencia = new ArrayList<Tipologia>(); |
ArrayList<Tipologia> tipologiasSumarios = new ArrayList<Tipologia>(); |
ArrayList<Tipologia> tipologiasExtraAdicionadas = new ArrayList<Tipologia>(); |
public ArrayList<Tipologia> getTipologiasHorarioReferencia() { |
return tipologiasHorarioReferencia; |
450,6 → 587,7 |
.include("cdTipologia", Tipologia.class) |
.include("cdDocente", Tipologia.class) |
.include("cdTurma", Tipologia.class) |
.include("dsTipologia",Tipologia.class) |
.include("ocorrencias", Tipologia.class) |
.create(); |
return genson; |
483,6 → 621,42 |
{ |
new TestCourseUnit().testTipologias(); |
} |
public List<Tipologia> obtainMergeTipologias() |
{ |
List<Tipologia> merge = new ArrayList<Tipologia>(); |
merge.addAll(getTipologiasSumarios()); |
for(Tipologia tipo: tipologiasHorarioReferencia) |
{ |
if(!merge.contains(tipo)) |
{ |
merge.add(tipo); |
} |
} |
for(Tipologia tipo: tipologiasExtraAdicionadas) |
{ |
if(!merge.contains(tipo)) |
{ |
merge.add(tipo); |
} |
} |
for(Tipologia tipo: merge) |
{ |
if(tipologiasHorarioReferencia.contains(tipo)) |
{ |
tipo.horRef = true; |
} |
if(tipologiasExtraAdicionadas.contains(tipo)) |
{ |
tipo.extra = true; |
} |
} |
return merge; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/test/TestCourseUnit.java |
---|
8,6 → 8,7 |
import java.io.IOException; |
import java.util.ArrayList; |
import java.util.Iterator; |
import java.util.List; |
/** |
26,6 → 27,7 |
t.setCdTurma("TINF"); |
t.setCdDocente("20128"); |
t.setCdTipologia("T"); |
t.setDsTipologia("Teorica"); |
t.setOcorrencias(2); |
ts.getTipologiasHorarioReferencia().add(t); |
34,6 → 36,7 |
t.setCdTurma("TINF2"); |
t.setCdDocente("20129"); |
t.setCdTipologia("T"); |
t.setDsTipologia("Teorica"); |
t.setOcorrencias(32); |
ts.getTipologiasHorarioReferencia().add(t); |
43,6 → 46,7 |
t.setCdTurma("TINF3"); |
t.setCdDocente("20130"); |
t.setCdTipologia("TP"); |
t.setDsTipologia("TeoricasPraticas"); |
t.setOcorrencias(10); |
ts.getTipologiasExtraAdicionadas().add(t); |
51,6 → 55,7 |
t.setCdTurma("TINF4"); |
t.setCdDocente("20131"); |
t.setCdTipologia("OT"); |
t.setDsTipologia("Orientacao"); |
t.setOcorrencias(1); |
ts.getTipologiasSumarios().add(t); |
59,6 → 64,7 |
t.setCdTurma("TINF2"); |
t.setCdDocente("20129"); |
t.setCdTipologia("T"); |
t.setDsTipologia("Teoricas"); |
t.setOcorrencias(null); |
ts.getTipologiasSumarios().add(t); |
74,7 → 80,7 |
while(iterOriginal.hasNext()) |
{ |
assertTrue(iterDesirialized.hasNext()); |
iterOriginal.next().equals(iterDesirialized.next()); |
iterOriginal.next().equalsIncDsFields(iterDesirialized.next()); |
} |
assertFalse(iterDesirialized.hasNext()); |
83,7 → 89,7 |
while(iterOriginal.hasNext()) |
{ |
assertTrue(iterDesirialized.hasNext()); |
iterOriginal.next().equals(iterDesirialized.next()); |
iterOriginal.next().equalsIncDsFields(iterDesirialized.next()); |
} |
assertFalse(iterDesirialized.hasNext()); |
92,7 → 98,7 |
while(iterOriginal.hasNext()) |
{ |
assertTrue(iterDesirialized.hasNext()); |
iterOriginal.next().equals(iterDesirialized.next()); |
iterOriginal.next().equalsIncDsFields(iterDesirialized.next()); |
} |
assertFalse(iterDesirialized.hasNext()); |
158,7 → 164,7 |
while(iterOriginal.hasNext()) |
{ |
assertTrue(iterDesirialized.hasNext()); |
iterOriginal.next().equals(iterDesirialized.next()); |
iterOriginal.next().equalsIncDsFields(iterDesirialized.next()); |
} |
assertFalse(iterDesirialized.hasNext()); |
167,7 → 173,7 |
while(iterOriginal.hasNext()) |
{ |
assertTrue(iterDesirialized.hasNext()); |
iterOriginal.next().equals(iterDesirialized.next()); |
iterOriginal.next().equalsIncDsFields(iterDesirialized.next()); |
} |
assertFalse(iterDesirialized.hasNext()); |
176,7 → 182,7 |
while(iterOriginal.hasNext()) |
{ |
assertTrue(iterDesirialized.hasNext()); |
iterOriginal.next().equals(iterDesirialized.next()); |
iterOriginal.next().equalsIncDsFields(iterDesirialized.next()); |
} |
assertFalse(iterDesirialized.hasNext()); |
187,4 → 193,130 |
e.printStackTrace(); |
} |
} |
public void testMerge() |
{ |
Tipologias ts = new Tipologias(); |
ts.setTipologiasHorarioReferencia(new ArrayList<Tipologia>()); |
ts.setTipologiasExtraAdicionadas(new ArrayList<Tipologia>()); |
ts.setTipologiasSumarios(new ArrayList<Tipologia>()); |
Tipologia t = new Tipologia(); |
t.setCdTurma("TINF"); |
t.setCdDocente("20128"); |
t.setCdTipologia("T"); |
t.setOcorrencias(null); |
ts.getTipologiasHorarioReferencia().add(t); |
t = new Tipologia(); |
t.setCdTurma("TINF"); |
t.setCdDocente("20128"); |
t.setCdTipologia("PL"); |
t.setOcorrencias(null); |
ts.getTipologiasHorarioReferencia().add(t); |
t = new Tipologia(); |
t.setCdTurma("TINF2"); |
t.setCdDocente("20128"); |
t.setCdTipologia("OT"); |
t.setOcorrencias(null); |
ts.getTipologiasExtraAdicionadas().add(t); |
t = new Tipologia(); |
t.setCdTurma("TINF2"); |
t.setCdDocente("20128"); |
t.setCdTipologia("Sem"); |
t.setOcorrencias(null); |
ts.getTipologiasExtraAdicionadas().add(t); |
t = new Tipologia(); |
t.setCdTurma("TINF"); |
t.setCdDocente("20128"); |
t.setCdTipologia("T"); |
t.setOcorrencias(10); |
ts.getTipologiasSumarios().add(t); |
t = new Tipologia(); |
t.setCdTurma("TINF"); |
t.setCdDocente("20128"); |
t.setCdTipologia("TP"); |
t.setOcorrencias(20); |
ts.getTipologiasSumarios().add(t); |
boolean foundT = false; |
boolean foundPL = false; |
boolean foundOT = false; |
boolean foundSem = false; |
boolean foundTP = false; |
String serial = null; |
try { |
serial = ts.serialize(); |
Tipologias tsTeste = Tipologias.deserialize(serial); |
List<Tipologia> merge = tsTeste.obtainMergeTipologias(); |
assertTrue(merge.size() == 5); |
for(Tipologia tipologia: merge) |
{ |
if(tipologia.getCdTipologia().equals("T")) |
{ |
assertTrue(tipologia.isHorRef()); |
assertTrue(tipologia.isSumario()); |
assertFalse(tipologia.isExtra()); |
assertTrue(tipologia.getOcorrencias() == 10); |
foundT = true; |
} |
if(tipologia.getCdTipologia().equals("PL")) |
{ |
assertTrue(tipologia.isHorRef()); |
assertFalse(tipologia.isSumario()); |
assertFalse(tipologia.isExtra()); |
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0); |
foundPL = true; |
} |
if(tipologia.getCdTipologia().equals("OT")) |
{ |
assertFalse(tipologia.isHorRef()); |
assertFalse(tipologia.isSumario()); |
assertTrue(tipologia.isExtra()); |
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0); |
foundOT = true; |
} |
if(tipologia.getCdTipologia().equals("Sem")) |
{ |
assertFalse(tipologia.isHorRef()); |
assertFalse(tipologia.isSumario()); |
assertTrue(tipologia.isExtra()); |
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0); |
foundSem = true; |
} |
if(tipologia.getCdTipologia().equals("TP")) |
{ |
assertFalse(tipologia.isHorRef()); |
assertTrue(tipologia.isSumario()); |
assertFalse(tipologia.isExtra()); |
assertTrue(tipologia.getOcorrencias() == 20); |
foundTP = true; |
} |
} |
assertTrue(foundT); |
assertTrue(foundPL); |
assertTrue(foundOT); |
assertTrue(foundSem); |
assertTrue(foundTP); |
} catch (IOException e) { |
e.printStackTrace(); |
} catch (TransformationException e) { |
e.printStackTrace(); |
} |
} |
} |
/branches/v3/impl/src/web/user/home/userPae.jsp |
---|
11,119 → 11,28 |
<div class="row"> |
<div class="col-md-6 col-sm-12 col-xs-12"> |
<div class="panel panel-primary"> |
<div class="panel-heading"><bean:message key="intranet.home.curricular"/></div> |
<div class="panel-body"> |
<div class="list-group"> |
<div class="list-group-item"><html:link action="/user/startLoadCoursesProgramsFromHome"><bean:message key="courseunit.indexes"/> </html:link></div> |
<div class="list-group-item"> |
<a href="<%=request.getContextPath()%>/dir/utilsIntranet/horarios/intranet/escola/horarios.html">Horários</a> |
</div> |
<div class="list-group-item"> |
<a href="<%=request.getContextPath()%>/dir/utilsIntranet/calEscolar/public/portal/CL20102011.pdf">Calendário Escolar</a> |
</div> |
<div class="list-group-item"> |
<a href="<%=request.getContextPath()%>/dir/utilsIntranet/secretaria/intranet/escola/secretaria.html">Secretaria</a> |
</div> |
<baco:hasRole role="admin,all,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil"> |
</baco:hasRole> |
</div> |
</div> |
</div> |
<baco:hasRole role="admin,all,services"> |
<div class="panel panel-primary"> |
<div class="panel-heading">Ferramentas Académicas</div> |
<div class="panel-heading">Ferramentas Académicas (MODO BACO)</div> |
<div class="panel-body"> |
<div class="list-group"> |
<baco:hasRole role="pedagogicCouncil"> |
<div class="list-group-item"><html:link action="/user/coursePedagogicContents"><bean:message key="course.pedagogic.contents.admin"/> </html:link></div> |
</baco:hasRole> |
<baco:isAdmin> |
<div class="list-group-item"><html:link action="/admin/courseUnitsDeleteAdmin">Administração de Unidades Curriculares (Remoções)</html:link></div> |
</baco:isAdmin> |
<div class="list-group-item"><html:link action="/user/configurationGrades">Épocas de Avaliação</html:link></div> |
<baco:isAdmin> |
<div class="list-group-item"><a href="<%=request.getContextPath()%>/user/configurationUserRoles.do"><bean:message key="configuration.roles"/></a></div> |
</baco:isAdmin> |
<div class="list-group-item">Situação de Propinas de Alunos (Por implementar)</div> |
<div class="list-group-item"><html:link action="/user/findProfile"><bean:message key="profile.search.user"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/startFindCourseUnitAdminFromServiceZone"><bean:message key="courseunit.search"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/courseComissions">Informação Adicional de Cursos</html:link></div> |
<div class="list-group-item"><html:link action="/user/startSelectCourseFromServiceZone"><bean:message key="course.select"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/configurationSchedulleTasks.do"><bean:message key="configuration.tasks"/></html:link></div> |
</div> |
</div> |
</div> |
</baco:hasRole> |
<baco:hasRole role="ci"> |
</div> |
<div class="col-md-6 col-sm-12 col-xs-12"> |
<baco:hasRole role="admin,all,services"> |
<div class="panel panel-primary"> |
<div class="panel-heading">Ferramentas de Gestão do CI</div> |
<div class="panel-heading">Questionários Pedagógicos</div> |
<div class="panel-body"> |
<div class="list-group"> |
<div class="list-group-item">Configurações Gerais (Por implementar)</div> |
<div class="list-group-item">>Tarefas Agendadas (Por implementar)</div> |
<div class="list-group-item">Criar um Backup SQL Agora (Por Implementar)</div> |
<baco:isModuleOn module="intranet"> |
<div class="list-group-item"> |
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createIntranetFolders"> |
<bean:message key="intranet.create.folders"/> |
</html:link> |
</div> |
</baco:isModuleOn> |
<div class="list-group-item"><a href="<%=request.getContextPath()%>/user/configurationDirectories.do"><bean:message key="configuration.directories"/></a></div> |
<div class="list-group-item"><html:link action="/user/configurationSchedulleTasks.do">Administração de Questionários</html:link></div> |
<div class="list-group-item"><html:link action="/user/configurationSchedulleTasks.do">Consulta de Resultados</html:link></div> |
</div> |
</div> |
</div> |
</baco:hasRole> |
<baco:isModuleOn module="todos"> |
<jsp:include page="/user/home/todos.jsp"/> |
</baco:isModuleOn> |
</div> |
<div class="col-md-6 col-sm-12 col-xs-12"> |
<div class="panel panel-primary"> |
<div class="panel-heading">Comunicar</div> |
<div class="panel-body"> |
<div class="list-group"> |
<baco:isModuleOn module="todos"> |
<baco:hasRole role="admin,all,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil"> |
<div class="list-group-item"> |
<html:link action="/user/startSubmitTodoAnnouncementFromServiceZone"> |
<bean:message key="submit.todo.announcement"/> |
</html:link> |
</div> |
</baco:hasRole> |
<baco:hasRole role="admin,all,services,sendMailMessages"> |
<div class="list-group-item"> |
<html:link action="/user/startSubmitMessage"> |
<bean:message key="submit.todo.message"/> |
</html:link> |
</div> |
</baco:hasRole> |
</baco:isModuleOn> |
</div> |
</div> |
</div> |
<!-- |
<div class="panel panel-primary"> |
<div class="panel-heading">Atalhos</div> |
<div class="panel-body"> |
<div class="list-group"> |
</div> |
</div> |
</div> |
--> |
<jsp:include page="courseComission.jsp"/> |
</div> |
</div> |