Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1340 → Rev 1341

/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
60,6 → 60,7
int unitsAddedToStudents = 0;
int alunosErasmusCadeirasEcontradas = 0;
int turmaMoreThanOneRegularCourse = 0;
int unidadesProcuradasNumCursoAleatorio = 0;
List<String> turmasMoreThanOneCourse = new ArrayList<String>();
int turmasWrongSubscriptions = 0;
int estudantesDesaparecidosDoSigesNesteAno = 0;
100,6 → 101,7
estudantesComCadeirasSemTurma = 0;
turmasComCodigoNullRemovidas = 0;
unidadesSoComAlunosExtra = 0;
unidadesProcuradasNumCursoAleatorio = 0;
ImportCourseService.resetCourseYearTurmaPolicy();
 
 
149,6 → 151,8
}
 
Aluno alunoSiges = service.loadInscrito(c,institutionCode, year,conn);
if(alunoSiges.getCodigo()==15726)
System.out.println("");
Student s = loadStudent(alunoSiges);
boolean newUser = false;
if(s.getId() <= 0)
260,6 → 264,8
serviceLogInfo("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
serviceLogInfo("#Alunos com Unidades repetidas: " + unitsRepeated);
serviceLogInfo("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
if(unidadesProcuradasNumCursoAleatorio > 0)
serviceLogInfo("######!!!!!Unidades atribuidas com curso aleatoriamente escolhido derivado a duvidas: " + unidadesProcuradasNumCursoAleatorio + " (procurar por \"tem mais de um curso vamos procurar num qualquer\")");
if(turmaMoreThanOneRegularCourse > 0)
{
serviceLogWarn("#########!!!!!!!ATENÇÃO TURMAS COM MAIS DE UM CURSO: " + turmaMoreThanOneRegularCourse);
319,6 → 325,9
logger.info("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
logger.info("#Alunos com Unidades repetidas: " + unitsRepeated);
logger.info("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
if(unidadesProcuradasNumCursoAleatorio > 0)
logger.warn("######!!!!!Unidades atribuidas com curso aleatoriamente escolhido derivado a duvidas: " + unidadesProcuradasNumCursoAleatorio + " (procurar por \"tem mais de um curso vamos procurar num qualquer\")");
 
if(turmaMoreThanOneRegularCourse > 0)
{
logger.warn("#########!!!!!!!ATENÇÃO TURMAS COM MAIS DE UM CURSO: " + turmaMoreThanOneRegularCourse);
709,17 → 718,11
logger.warn(msg);
serviceLogWarn(msg);
}
sendNotificationAdmin("Atenção existe um caso de dúvida nas inscrições",msgAdmin);
sendNotificationAdmin("Atenção existe um caso de dúvida nas inscrições vamos devolver código invalido de curso para o sistema atribuir o primeiro onde a unidade se encontre",msgAdmin);
return -1;
}
if(cursos.size() > 0)
else if(cursos.size() == 1)
{
/**Para garantir que se atribui sempre o mesmo curso em mais que uma iteração**/
Collections.sort(cursos,new Comparator<Integer>() {
@Override
public int compare(Integer integer, Integer integer2) {
return integer - integer2;
}
});
return cursos.get(0);
}
else
950,13 → 953,11
}
else if(turmasAfectadas.get(turma) == null)
{
 
//Este caso nao devera acontecer mas fica aqui a seguranca
String msg = "Atenção turma com código " + turma.getTurma() + " nao existe nas afetadas e nao e' local unit:" + turma.getCourseUnit().getCode() + " aluno:" + student.getSigesCode();
String msg = "Atenção turma com código " + turma.getTurma() + " nao existe nas afetadas e vai ser removida ao aluno e nao e' local unit:" + turma.getCourseUnit().getCode() + " aluno:" + student.getSigesCode();
serviceLogError(msg);
logger.error(msg);
}
else
{
iter.remove();
turma.getStudents().remove(student);
}
1126,11 → 1127,21
logger.info(msg);
}
codigoDoCurso = getRealCourse(disciplina.getCdTurma(),year,institutionCode,disciplina.getCdDuracao(),logMessages);
 
if(codigoDoCurso != null)
{
String msg = "Codigo de curso (" + disciplina.getCodigoCurso() + ") da disciplina " + disciplina.getCodigo() + " tipo: " + disciplina.getCdTipoDisciplina() + " turma: " + disciplina.getCdTurma() + " Modificado para o real: " + codigoDoCurso;
serviceLogInfo(msg);
logger.info(msg);
if(codigoDoCurso < 0)
{
String msg = "Codigo de curso (" + disciplina.getCodigoCurso() + ") da disciplina " + disciplina.getCodigo() + " tipo: " + disciplina.getCdTipoDisciplina() + " turma: " + disciplina.getCdTurma() + " tem mais de um curso vamos procurar num qualquer curso onde exista ";
serviceLogInfo(msg);
logger.info(msg);
}
else
{
String msg = "Codigo de curso (" + disciplina.getCodigoCurso() + ") da disciplina " + disciplina.getCodigo() + " tipo: " + disciplina.getCdTipoDisciplina() + " turma: " + disciplina.getCdTurma() + " Modificado para o real: " + codigoDoCurso;
serviceLogInfo(msg);
logger.info(msg);
}
}
else
{
1149,12 → 1160,34
//Politica de separação de turmas em unidades independentes neste curso
boolean separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(codigoDoCurso, year, logMessages, this);
List<CourseUnit> courseUnits;
if(separateTurmas)
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + codigoDoCurso, disciplina.getCdDuracao(), disciplina.getCdLectivo(), disciplina.getCdTurma());
 
/*BLOCO DE LOAD DAS UNIDADES*/
if(codigoDoCurso <= 0) //O curso encontrado foi mais que um vamos fazer o melhor esforço e atribuir um que dê isto apenas deverá acontecer com erasmus e em turmas com mais que um curso
{
unidadesProcuradasNumCursoAleatorio++;
if(separateTurmas)
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurmaIgnoreCourse("" + disciplina.getCodigo(), disciplina.getCdDuracao(), disciplina.getCdLectivo(), disciplina.getCdTurma());
else
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueIgnoreCourse("" + disciplina.getCodigo(),disciplina.getCdDuracao(),disciplina.getCdLectivo());
if(courseUnits.size() > 0)
{
//Neste caso adicionamos apenas a primeira
CourseUnit cu = courseUnits.get(0);
courseUnits = new ArrayList<CourseUnit>();
courseUnits.add(cu);
}
}
else
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(),"" + codigoDoCurso,disciplina.getCdDuracao(),disciplina.getCdLectivo());
{
if(separateTurmas)
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + codigoDoCurso, disciplina.getCdDuracao(), disciplina.getCdLectivo(), disciplina.getCdTurma());
else
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(),"" + codigoDoCurso,disciplina.getCdDuracao(),disciplina.getCdLectivo());
}
/*BLOCO DE LOAD DAS UNIDADES*/
 
 
 
if(courseUnits != null && courseUnits.size() > 1 )
{
studentComUnidadesRepetidas=true;
1347,7 → 1380,7
System.out.println("YEAR:" + year);
if(args != null && args.length > 0)
year = args[0];
String institutionCode = "1";
String institutionCode = "3";
if(args != null && args.length > 1)
institutionCode = args[1];
AbstractDao.getCurrentSession().beginTransaction();
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/AlunoDao.java
126,15 → 126,21
ArrayList<Disciplina> disciplinas = new ArrayList<Disciplina>();
Connection conn = getCurrentConnection();
PreparedStatement catCMD = conn.prepareStatement("SELECT " +
"CSE.T_INSCRI.CD_TIPDIS AS CD_TIPDIS, " +
"CSE.T_INSCRI.CD_DISCIP AS CD_DISCIP, " +
"CSE.T_INSCRI.CD_DURACAO AS CD_DURACAO, " +
"CSE.T_INSCRI.CD_CURSO AS CD_CURSO, " +
"CSE.T_INSCRI.CD_TURMA_T AS CD_TURMA, " +
"CSE.T_INSCRI.CD_TURMA_P, " +
"CSE.T_INSCRI.CD_TURMA_L, " +
"CSE.T_INSCRI.CD_TURMA_TP " +
"FROM CSE.T_ALUNOS INNER JOIN (CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP) ON CSE.T_ALUNOS.CD_ALUNO = CSE.T_INSCRI.CD_ALUNO WHERE CSE.T_ALUNOS.CD_ALUNO = " + codigo + " AND (((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "') AND ((CSE.T_ALUNOS.CD_SITUA_PAR)=1) AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1 OR CSE.T_INSCRI.CD_TIPDIS = 6))");
" CSE.T_INSCRI.CD_TIPDIS AS CD_TIPDIS, " +
" CSE.T_INSCRI.CD_DISCIP AS CD_DISCIP, " +
" CSE.T_INSCRI.CD_DURACAO AS CD_DURACAO, " +
" CSE.T_INSCRI.CD_CURSO AS CD_CURSO, " +
" CSE.T_INSCRI.CD_TURMA_T AS CD_TURMA, " +
" CSE.T_INSCRI.CD_TURMA_P, " +
" CSE.T_INSCRI.CD_TURMA_L, " +
" CSE.T_INSCRI.CD_TURMA_TP " +
" FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP" +
" WHERE CSE.T_INSCRI.CD_ALUNO = " + codigo + " " +
" AND" +
" CSE.T_TBDISCIP.CD_INSTITUIC= " + codigoInstituicao + " AND " +
" CSE.T_INSCRI.CD_LECTIVO='" + ano + "' AND " +
" CSE.T_INSCRI.CD_STATUS<>5 AND " +
" (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1 OR CSE.T_INSCRI.CD_TIPDIS = 6) ");
//CD_TIPDISC = 1 Inscricoes normais
//CD_TIPDISC = 2 Nao conta para media
//CD_TIPDISC = 3 Qualitativa
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
670,7 → 670,7
public static void main(String[] args) throws ServiceException
{
String year = DaoFactory.getConfigurationDaoImpl().getImportsDefaultImportYearCreateTransaction();
int institutionCode = 4;// DaoFactory.getConfigurationDaoImpl().getInstitutionCodeCreateTransaction();
int institutionCode = 3;// DaoFactory.getConfigurationDaoImpl().getInstitutionCodeCreateTransaction();
if(args != null && args.length > 0)
year = args[0];
if(args != null && args.length > 1)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
47,6 → 47,7
private CourseUnit courseUnit;
private UserView responsableTeacher;
private Set<UserView> teachers;
private Set<UserView> studentsWithoutTurma;
private Set<UserView> students;
private List<UserView> studentsOrderedByName;
private List<UserView> studentsOrderedByNumber;
173,6 → 174,7
this.id = courseUnit.getId();
teachers = new HashSet<UserView>();
students = new HashSet<UserView>();
studentsWithoutTurma = new HashSet<UserView>();
if(initTeachers && courseUnit.getTeachers() != null)
{
responsableTeacher = new UserView(courseUnit.getResponsableTeacher());
206,6 → 208,25
else
logger.error("Unidade sem turmas: " + courseUnit.getName() + " (" + courseUnit.getCode() + ")");
}
 
if(students.size() != courseUnit.getStudents().size())
{
for(Student s: courseUnit.getStudents())
{
boolean found = false;
for(UserView uv : students)
{
if(uv.getId() == s.getId())
{
found = true;
break;
}
}
if(!found)
studentsWithoutTurma.add(new UserView(s));
}
}
 
if(initBlog)
{
blog = new BlogView(((CourseUnitImpl)courseUnit).getUnitBlog(),this);
223,6 → 244,10
courseView = new CourseView(courseUnit.getCourse(),false);
}
 
public Set<UserView> getStudentsWithoutTurma() {
return studentsWithoutTurma;
}
 
public String getEvaluationStreamId() {
return evaluationStreamId;
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java
186,7 → 186,27
", " + getSemestre() + " of " + getImportYear() + " - " + getName() + " Turma - " + getCdTurma();
}
 
public int studentsSize()
{
if(getStudents() !=null)
return getStudents().size();
return 0;
}
 
public int studentsTurmaSize()
{
int countTotalStudentsTurmas = 0;
if(getTurmas() == null)
return 0;
for(CourseUnitTurma turma: getTurmas())
{
if(turma.getStudents() != null)
countTotalStudentsTurmas+=turma.getStudents().size();
}
return countTotalStudentsTurmas;
}
 
 
public boolean hasStudent(long studentId, boolean transaction)
{
Set<StudentImpl> students;
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
285,18 → 285,24
.list();
}
 
public List<CourseUnit> loadBySigesCodeUniqueIgnoreCourse(String sigesCode, String semestre, String year)
{
return loadBySigesCodeUnique(sigesCode,null,semestre,year);
}
//TODO Na actualizacao de uma cadeira para o curso de TESTE mudar o coursecode para o o coursecode desse curso para nao deixar os dados duplicados e mal
//se nao a carregar unidades vai buscar a errada
public List<CourseUnit> loadBySigesCodeUnique(String sigesCode, String courseCode, String semestre, String year)
{
List<CourseUnit> cus =
createCriteria()
.add(eq("code", sigesCode))
.add(eq("courseCode", courseCode))
.add(eq("semestre", semestre))
.add(eq("importYear", year))
//not any more .add(eq("cdTurma", turma))
.list();
Criteria c = createCriteria();
if(courseCode != null)
c.add(eq("courseCode", courseCode));
 
c.add(eq("code", sigesCode))
.add(eq("semestre", semestre))
.add(eq("importYear", year));
//not any more .add(eq("cdTurma", turma))
 
List<CourseUnit> cus = c.list();
if(cus.size() > 1)
{
logger.warn("WARNING WARNING ####Two units found for: ");
307,16 → 313,20
return cus;
}
 
public List<CourseUnit> loadBySigesCodeUniqueWithTurmaIgnoreCourse(String sigesCode, String semestre, String year,String turma){
return loadBySigesCodeUniqueWithTurma(sigesCode,null,semestre,year,turma);
}
public List<CourseUnit> loadBySigesCodeUniqueWithTurma(String sigesCode, String courseCode, String semestre, String year,String turma)
{
List<CourseUnit> cus =
createCriteria()
.add(eq("code", sigesCode))
.add(eq("courseCode", courseCode))
.add(eq("semestre", semestre))
.add(eq("importYear", year))
.add(eq("cdTurma", turma))
.list();
Criteria c = createCriteria();
if(courseCode != null)
c.add(eq("courseCode", courseCode));
 
c.add(eq("code", sigesCode))
.add(eq("semestre", semestre))
.add(eq("importYear", year))
.add(eq("cdTurma", turma));
List<CourseUnit> cus = c.list();
if(cus.size() > 1)
{
logger.warn("WARNING WARNING ####Two units found for: ");
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAE.docx
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v3/impl/src/web/admin/questionarios/pedagogicoEstudante/questionarioObsEdit.jsp
42,10 → 42,11
<div class="form-group">
<label class="control-label col-sm-2">Observações</label>
<div class="col-sm-10">
<textarea class="form-control" name="val" id="setObsUnidade<%=unidadeAfetaId%>Val"><%=unidadeAfeta.getObs()%></textarea>
<textarea class="form-control" rows="10" name="val" id="setObsUnidade<%=unidadeAfetaId%>Val"><%=unidadeAfeta.getObs()%></textarea>
</div>
</div>
<button type="button" id="setObsUnidade<%=unidadeAfetaId%>" class="btn btn-success" data-dismiss="modal">Salvar</button>
<button type="button" id="setObsUnidade<%=unidadeAfetaId%>" class="btn btn-success pull-right" data-dismiss="modal">Salvar</button>
<button style="margin-right:10px" type="button" onclick="$(this.form).find('textarea').html('')" class="btn btn-warning pull-right">Clear</button>
</form>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
/branches/v3/impl/src/web/admin/questionarios/pedagogicoEstudante/pedagogicoCourseCheckCursoAfeto.jsp
92,8 → 92,8
<th>Docentes</th>
<th>Estudantes</th>
<th>Alertas</th>
<th>Docentes s/ turma</th>
<th>Turmas s/ docente</th>
<th>Docentes s/ sumario</th>
<th>Turmas s/ sumario</th>
<th>Usar</th>
<th>Vista</th>
<th>Obs.</th>
160,9 → 160,38
 
</td>
<td>
 
<%
CourseUnitImpl courseUnitImpl = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().narrow(unidade.getCourseUnit());
int students = courseUnitImpl.studentsSize();
int studentsTurmasSize = courseUnitImpl.studentsTurmaSize();
if(students != studentsTurmasSize)
{
unidade.setMarked(true);
if(unidade.getObs() != null && unidade.getObs().indexOf("Nº Estudantes")< 0)
unidade.setObs("Nº Estudantes diferente Somatorio Estudantes das turmas");
%>
<a href="#" data-href="<%=request.getContextPath()%>/user/courseunits/listStudentsService.jsp?courseUnitView.id=${unidade.courseUnit.id}" data-title="Alunos da unidade de ${unidade.nome} (${unidade.codigoUnidade}) do curso de ${CursoAfeto.nome} (${CursoAfeto.codigoCurso})" data-toggle="modal" data-target="#modalAjaxRequest">
${unidade.students}
<%=students%>
</a>
!=
<a href="#" data-href="<%=request.getContextPath()%>/user/courseunits/listStudentsService.jsp?courseUnitView.id=${unidade.courseUnit.id}" data-title="Alunos da unidade de ${unidade.nome} (${unidade.codigoUnidade}) do curso de ${CursoAfeto.nome} (${CursoAfeto.codigoCurso})" data-toggle="modal" data-target="#modalAjaxRequest">
<%=studentsTurmasSize%>
</a>
<span class="glyphicon glyphicon-alert"></span>
 
<%
}
else
{
%>
<a href="#" data-href="<%=request.getContextPath()%>/user/courseunits/listStudentsService.jsp?courseUnitView.id=${unidade.courseUnit.id}" data-title="Alunos da unidade de ${unidade.nome} (${unidade.codigoUnidade}) do curso de ${CursoAfeto.nome} (${CursoAfeto.codigoCurso})" data-toggle="modal" data-target="#modalAjaxRequest">
<%=students%>
</a>
<%
}
%>
 
</td>
<td>
<logic:equal value="true" name="unidade" property="marked">
193,7 → 222,7
</td>
</tr>
<%
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().evict(unidade);
//DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().evict(unidade);
%>
</logic:iterate>
</tbody>
/branches/v3/impl/src/web/admin/questionarios/pedagogicoEstudante/pedagogicoCourseCheckUnidadeAfeta.jsp
1,9 → 1,9
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.CourseUnitImpl" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoUnidadeCurricularAfeta" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoUnidadeCurricularAfetaImpl" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoUnidadeCurricularAfeta" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
57,8 → 57,10
if(tipoPersistente == null)
{
unidade.setMarked(true);
if(unidade.getObs().indexOf("ERRO TURMA NAO SINCRONIZADA")<0)
unidade.setObs(unidade.getObs() + " ERRO TURMA NAO SINCRONIZADA TENTE CORRER AS IMPORTACOES ALUNOS E DOCENTES: " + tipologia.getCdTurma() + " " + tipologia.getCdDocente() + " " + tipologia.getDsTipologia());
if(unidade.getObs() != null && unidade.getObs().indexOf("Tipologia inexistente")<0)
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidade).addObs(
"Tipologia inexistente nesta unidade, possivelmente foi devida a sumários de uma turma paralela noutro curso Verificar: " + tipologia.getCdTurma() + " verificar se esta turma ou par sua têm curso associado. "
+ tipologia.getCdDocente() + " " + tipologia.getDsTipologia());
%>
<script>
$(document).ready(
68,7 → 70,7
}
);
</script>
<tr>
<%--<tr>
<td>${tipologia.cdDocente}</td>
<td>ERRO PROFESSOR NAO SINCRONIZADO</td>
<td>${tipologia.dsTipologia}</td>
96,7 → 98,7
<span class="glyphicon glyphicon-ok"></span>
</logic:equal>
</td>
</tr>
</tr>--%>
<%
}
else
/branches/v3/impl/src/web/user/courseunits/students.jsp
117,4 → 117,76
</tbody>
</table>
</div>
</div>
</div>
 
 
<%
if(CourseUnitView.getStudentsWithoutTurma() != null && CourseUnitView.getStudentsWithoutTurma().size() > 0)
{
request.setAttribute("students",CourseUnitView.getStudentsWithoutTurma());
request.setAttribute("studentsSize",CourseUnitView.getStudentsWithoutTurma().size());
%>
<h2>Estudantes MAL ATRIBUIDOS, SEM TURMA, contactar a administração do sistema informático</h2>
<div class="panel panel-default">
<div class="panel-body">
<p>
<logic:notEmpty name="turma">
(${turma})
</logic:notEmpty>
<bean:message key="courseunit.students.count"/>: ${studentsSize}
</p>
<table class="tablesorterfiltered">
<thead>
<tr>
<%/*<th><html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}&order=byNumber"><bean:message key="number"/></html:link></th>
<th><html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}&order=byName"><bean:message key="name"/></html:link></th>
*/%>
<th><bean:message key="number"/></th>
<th><bean:message key="name"/></th>
 
<th><bean:message key="user"/></th>
 
<th><bean:message key="email"/></th>
 
<baco:hasRole role="teacher">
<th><bean:message key="phone.number"/></th>
</baco:hasRole>
</tr>
</thead>
<tbody>
<logic:iterate id="student" name="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<td>
${student.code}
</td>
<td>
<logic:notEmpty name="fromAction">
<html:link action="${user}/startLoadStudentCourseUnit${fromAction}?code=${student.code}&courseUnitView.id=${CourseUnitView.id}">${student.name}</html:link>
</logic:notEmpty>
<logic:empty name="fromAction">
<html:link target="_blank" action="/user/startProfileFromHome.do?userView.id=${student.id}">${student.name}</html:link>
</logic:empty>
</td>
<td>
${student.username}
</td>
<td>
<logic:empty name="UserSession" property="user">
${student.safeEmail}
</logic:empty>
<logic:notEmpty name="UserSession" property="user">
${student.email}
</logic:notEmpty>
</td>
<baco:hasRole role="teacher">
<td>${student.phonenumber} </td>
</baco:hasRole>
</tr>
</logic:iterate>
</tbody>
</table>
</div>
</div>
<%
}
%>