Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 995 → Rev 1000

/impl/importRoutines.xml
7,20 → 7,22
 
 
 
<target name="courses">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportCourseService" classpath="${build.dir.classes}" classpathref="pathToToolsLib">
<!--<arg value="201314"/>-->
<!--<arg value="201415"/>-->
<!-- CLONE PROGRAMS -->
<target name="sincronizeunits">
<java classname="pt.estgp.estgweb.services.sigesimports.SincronizeLastYearCourseUnitProgramsService" classpath="${build.dir.classes}" classpathref="pathToToolsLib">
<arg value="201516"/>
<arg value="true"/> <!-- Clone Only News -->
<arg value="false"/> <!-- Generate all pdfs -->
</java>
</target>
<target name="sincronizeunits">
<java classname="pt.estgp.estgweb.services.sigesimports.SincronizeLastYearCourseUnitProgramsService" classpath="${build.dir.classes}" classpathref="pathToToolsLib">
</target>
 
 
<!-- CORE PROCESSES -->
<target name="courses">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportCourseService" classpath="${build.dir.classes}" classpathref="pathToToolsLib">
<!--<arg value="201314"/>-->
<!--<arg value="201415"/>-->
<arg value="201516"/>
<arg value="true"/>
<arg value="false"/>
</java>
</target>
<target name="teachers">
28,7 → 30,6
<!--<arg value="201314"/>-->
<!--<arg value="201415"/>-->
<arg value="201516"/>
 
</java>
</target>
<target name="students">
36,17 → 37,33
<!--<arg value="201314"/>-->
<!--<arg value="201415"/>-->
<arg value="201516"/>
</java>
</java>
</target>
<target name="grades">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
<target name="summaries">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportSumariesJson" classpath="${build.dir.classes}" classpathref="pathToToolsLib">
<arg value="201516"/>
<arg value="S1"/>
<arg value="true"/>
<arg value="false"/>
</java>
</target>
 
 
 
<!-- JOB RUNNER -->
<target name="jobs">
<java classname="pt.estgp.estgweb.services.jobs.JobDeamon" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
<target name="summaries">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportSumariesJson" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
 
 
 
 
 
<!-- PONTUAIS -->
<target name="grades">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportGradesService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
<target name="setAreas">
<java fork="true" classname="pt.estgp.estgweb.services.courses.SetUserArea" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java
9,6 → 9,7
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
/**
172,6 → 173,22
return finalFormat.format(years);
}
 
static SimpleDateFormat formatFileSystem = new SimpleDateFormat("yyyyMMdd_HHmmss");
 
/**
*
* @param d java.util.Date
* @return a string formated like this:
*
* 20151103_043500
*
* for 2015/11/03 at 04:35:00 time
*/
public static String getFormatedFileSystem(Date d)
{
return formatFileSystem.format(d);
}
 
public static List<String> getImportYears(int size)
{
MyCalendar mc = new MyCalendar();
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedUnitsService.java
263,6 → 263,7
if(courseUnit.isValidProgram() != courseUnitView.isValidProgram())
{
courseUnit.setValidProgram(courseUnitView.isValidProgram());
courseUnit.setValidatorUser(usession.getUser());
counter++;
new SaveCourseUnitProgram().createPdf(courseUnit,null,usession);
 
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
46,18 → 46,24
int unitsNotFound = 0;
int unitsRemovedToStudents = 0;
int unitsLocalAddedNotRemoved = 0;
int unitsLocallyRemovedNotAdded = 0;
int alunosFound = 0;
int studentsChangeBI = 0;
int unitsAddedToStudents = 0;
 
public ILogMessages run(String year) throws ServiceException
{
 
studentsMerged = 0;
studentsNew = 0;
studentsZeroUnits = 0;
unitsNotFound = 0;
unitsRemovedToStudents = 0;
unitsLocalAddedNotRemoved = 0;
unitsLocallyRemovedNotAdded = 0;
alunosFound = 0;
studentsChangeBI = 0;
unitsAddedToStudents = 0;
 
String msgS = "STARTING STUDENTS IMPORT SERVICE FOR YEAR: " + year;
serviceLogInfo(msgS);
92,7 → 98,7
if (i++ > MAX_COMMIT)
{
i = 0;
setProgress((int) (((float)alunosFound)/((float)codigos.size())*100));
setProgress((int) (((float)alunosFound)/((float)codigos.size())*100.0f));
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
}
173,11 → 179,10
AbstractDao.getCurrentSession().beginTransaction();
logger.error(e,e);
serviceLogError("Rolling back will lost previous updates: " + e.toString(),e);
sendNotificationAdmin("Erro de importacao de alunos",e.toString());
sendNotificationAdmin("Erro de base de dados importacao de alunos, provavelmente chave errada, corrigir no MySql",e.toString());
}
catch(Throwable e)
{
 
logger.error(e,e);
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
serviceLogError(e.toString(),e);
193,8 → 198,10
serviceLogInfo("#Students Merged: " + studentsMerged);
serviceLogInfo("#Students Zero Units: " + studentsZeroUnits);
serviceLogInfo("#Units not found: " + unitsNotFound);
serviceLogInfo("#Units added to Students: " + unitsAddedToStudents);
serviceLogInfo("#Units removed to Students: " + unitsRemovedToStudents);
serviceLogInfo("#Units not Removed because localy added: " + unitsLocalAddedNotRemoved);
serviceLogInfo("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
if(studentsChangeBI>0)
{
serviceLogInfo("#>>>>>AVISO AVISO<<<<<<<<<: ");
243,6 → 250,7
{
studentsNew++;
cloneFields(alunoSiges, student);
serviceLogInfo("NOVO ALUNO ENCONTRADO: siges:" + student.getSigesCode() + " bi:" + student.getBi() + " nome:" + student.getName());
}
//CASO EM QUE O ALUNO NO SIGES FOI ATRIBUIDO A OUTRO ESTUDANTE PARA PREENCHER BURACO NA NUMERACAO
else if(alunoSiges.getNumeroBi() == null || student.getBi() == null || ! alunoSiges.getNumeroBi().equals(student.getBi()))
254,6 → 262,7
builder.append("ATENCAO NUMERO DE ALUNO " + alunoSiges.getCodigo() + " MUDOU DE DONO VAI SER BLOQUEADO IMEDIATAMENTE\n");
builder.append("ALTERANDO DADOS DO ALUNO " + alunoSiges.getCodigo() + "\n");
builder.append("<<<<<<<ANTES: " + "\n");
builder.append("<<<<<<<BI: " + student.getBi() + "\n");
builder.append("<<<<<<<Nome: " + student.getName() + "\n");
builder.append("<<<<<<<Username: " + student.getUserNameNetpa() + "\n");
builder.append("<<<<<<<Address: " + student.getAddress() + "\n");
267,6 → 276,7
student.setManualBlock(true);
 
builder.append("DEPOIS: " + "\n");
builder.append("BI: " + student.getBi() + "\n");
builder.append("Nome: " + student.getName() + "\n");
builder.append("Username: " + student.getUserNameNetpa() + "\n");
builder.append("Address: " + student.getAddress() + "\n");
290,6 → 300,13
}
else
{
//1 - PROCEDIMENTO CADEIRAS SAO CARREGADAS DO BACO DA LISTA QUE VEM DO SIGES -> units
//2 - Sao retiradas da lista units as que o aluno tem mas que foram removidas localmente
//3 - Sao adicionadas ao aluno as que o aluno ainda nao tiver da lista units
//4 - Remover da lista do aluno as unidades que não vêm do SIGES e que não foram adicionadas localmente
 
 
//PASSO 1
Set<CourseUnit> units = new HashSet<CourseUnit>();
ArrayOfDisciplina disciplinas = alunoSiges.getDisciplinasInscrito();
for (Disciplina disciplina : disciplinas.getDisciplina())
305,6 → 322,8
else
units.add(courseUnit);
}
 
//PASSO 2
Iterator<CourseUnit> iter = units.iterator();
StudentImpl sImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(student);
while (iter.hasNext())
314,13 → 333,15
 
if(sImpl.isLocalRemovedUnit(courseUnit))
{
String msg = "Removendo unidade: " + courseUnit.getCode() + " - do aluno: " + student.getSigesCode() + " - Associacao existe no SIGES mas foi removido LOCALMENTE";
unitsLocallyRemovedNotAdded++;
String msg = "Removendo unidade: " + ((CourseUnitImpl)courseUnit).getSigesUniqueIdentifiers() + " - do aluno: " + student.getSigesCode() + " - Associacao existe no SIGES mas foi removido LOCALMENTE";
serviceLogInfo(msg);
logger.info(msg);
iter.remove();
}
}
 
//PASSO 3
if(student.getSubscribedUnits() != null)
{
for(CourseUnit c: units)
335,12 → 356,19
}
}
if(!isIn)
{
String msg = "Adicionando unidade: " + ((CourseUnitImpl)c).getSigesUniqueIdentifiers() + " - ao aluno: " + student.getSigesCode() + " - Associacao nova no SIGES";
serviceLogInfo(msg);
logger.info(msg);
unitsAddedToStudents++;
student.getSubscribedUnits().add(c);
}
}
}
else
student.setSubscribedUnits(units);
 
//PASSO 4
//Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
Iterator<CourseUnit> iterNowUnits = student.getSubscribedUnits().iterator();
while(iterNowUnits.hasNext())
369,7 → 397,7
 
if(!sImpl.isLocalUnit(cUNow))
{
String msg = "Removendo unidade: " + cUNow.getCode() + " - do aluno: " + student.getSigesCode() + " - Associacao desapareceu do SIGES";
String msg = "Removendo unidade: " + ((CourseUnitImpl)cUNow).getSigesUniqueIdentifiers() + " - do aluno: " + student.getSigesCode() + " - Associacao desapareceu do SIGES";
serviceLogInfo(msg);
logger.info(msg);
iterNowUnits.remove();
377,7 → 405,7
}
else
{
String msg = "NAO REMOVIDA - Unidade: " + cUNow.getCode() + " - do aluno: " + student.getSigesCode() + " - Associacao desapareceu do SIGES mas foi adicionada localmente";
String msg = "NAO REMOVIDA - Unidade: " + ((CourseUnitImpl)cUNow).getSigesUniqueIdentifiers() + " - do aluno: " + student.getSigesCode() + " - Associacao desapareceu do SIGES mas foi adicionada localmente";
serviceLogInfo(msg);
logger.info(msg);
unitsLocalAddedNotRemoved++;
412,10 → 440,6
 
}
 
@Override
public String getLogPathPrefix() {
return getClass().getName();
}
/**
* Testar por aqui poi requer Super Role e assim e' autmatico
*
/impl/src/java/pt/estgp/estgweb/services/sigesimports/SincronizeLastYearCourseUnitProgramsService.java
92,7 → 92,7
if (i++ > MAX_COMMIT)
{
i = 0;
setProgress((int) (((float)foundTotal)/((float)units.size())*100));
setProgress((int) (((float)foundTotal)/((float)units.size())*100.0f));
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
serviceLogInfo("Commiting database");
134,9 → 134,9
updated++;
CourseUnitProgramImpl cProgram = (CourseUnitProgramImpl) DaoFactory.getCourseUnitProgramDaoImpl().narrow(cu.getCourseUnitProgram());
cProgram.cloneFrom(cuOld.getCourseUnitProgram());
//List<String> errors = new ArrayList<String>();
List<String> errors = new ArrayList<String>();
clonados.add(cu.getCode());
//todo JOBS service.createPdf(cu,errors);
service.createPdf(cu,errors);
cu.setValidProgram(validate);
}
else
171,9 → 171,9
serviceLogInfo("Ficha nao alterada. razao: cloneOnlyNews=true");
if(generateAllPdfs)
{
//List<String> errors = new ArrayList<String>();
/*todo JOBS if(cu.getCourseUnitProgram() != n ull)
service.createPdf(cu,errors);*/
List<String> errors = new ArrayList<String>();
if(cu.getCourseUnitProgram() != null)
service.createPdf(cu,errors);
}
}
 
404,8 → 404,4
run(importYear,cloneOnlyNews,generateAllPdfs,validate);
}
 
@Override
public String getLogPathPrefix() {
return getClass().getName();
}
}
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java
2,15 → 2,15
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.StaleStateException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.TeacherImpl;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
35,33 → 35,78
* @time 12:51:32
* @see pt.estgp.estgweb
*/
public class ImportTeachersService implements IService
public class ImportTeachersService extends ServiceJob implements IService
{
 
private static final Logger logger = Logger.getLogger(ImportTeachersService.class);
 
private static final int MAX_COMMIT = 100;
 
//int studentsMerged = 0;
int teachersNew = 0;
int teachersZeroUnits = 0;
int unitsNotFound = 0;
int unitsAddedToTeachers = 0;
int unitsRemovedToTeachers = 0;
int unitsLocalAddedNotRemoved = 0;
int teachersFound = 0;
int teachersChangeBI = 0;
int unitsLocallyRemovedNotAdded = 0;
 
//todo meter a zero no run
 
public ILogMessages run(String year) throws ServiceException
{
 
teachersNew = 0;
teachersZeroUnits = 0;
unitsNotFound = 0;
unitsAddedToTeachers = 0;
unitsRemovedToTeachers = 0;
unitsLocalAddedNotRemoved = 0;
teachersFound = 0;
teachersChangeBI = 0;
unitsLocallyRemovedNotAdded = 0;
 
String msgS = "STARTING TEACHERS IMPORT SERVICE FOR YEAR: " + year;
serviceLogInfo(msgS);
logger.info(msgS);
 
DefaultLogMessages logMessages = new DefaultLogMessages();
logMessages.addMessage(new DefaultLogMessage("import.teachers", LogMessageTypeEnum.INFO, "instituicao " + Globals.SIGES_INSTITUTION_CODE));
logger.info("starting teacher import");
 
try
{
SiGesWEB service;
try
{
serviceLogInfo("STARTING WEB SERVICE AT " + Globals.SIGES_WEBSERVICE_WSDL);
service = new SiGesWEB(new URL(Globals.SIGES_WEBSERVICE_WSDL), new QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB"));
}
catch (MalformedURLException e)
{
logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
logger.fatal(e, e);
serviceLogFatal(logMessages.getLastMessage(), e);
return logMessages;
}
ArrayOfDecimal codigosDocentes = service.getSiGesWEBSoap().getCodigosDocentesInscritosDaInstituicao(Globals.SIGES_INSTITUTION_CODE, year);
List<BigDecimal> codigos = codigosDocentes.getDecimal();
 
int i = 1;
for (BigDecimal c : codigos)
{
 
teachersFound++;
if (i++ > MAX_COMMIT)
{
i = 0;
setProgress((int) (((float)teachersFound)/((float)codigos.size())*100.0f));
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
}
 
 
Docente d = service.getSiGesWEBSoap().getDocente(c, Globals.SIGES_INSTITUTION_CODE, year);
logger.info("Codigo Funcionario Importado: SIGES(" + d.getCodigoFuncionario().intValue() + ") email IPP SIGES: " + d.getEmail());
logger.info("SIGES IMPORTED INFO: " + docenteToString(d));
69,19 → 114,27
boolean newUser = false;
if (t == null)
{
logger.info("Teacher does not exist in baco, will create SIGES:" + d.getCodigoFuncionario().intValue());
msgS = "Teacher does not exist in baco, will create SIGES:" + d.getCodigoFuncionario().intValue();
logger.info(msgS);
serviceLogInfo(msgS);
 
t = DomainObjectFactory.createTeacherImpl();
DaoFactory.getTeacherDaoImpl().save(t);
newUser = true;
teachersNew++;
}
else
{
logger.info("Teacher EXIST in baco with SIGES: " + d.getCodigoFuncionario().intValue());
msgS = "Teacher EXIST in baco with SIGES: " + d.getCodigoFuncionario().intValue();
logger.info(msgS);
//serviceLogInfo(msgS); //NOT NEED EXCESS OF INFORMATION
}
logger.info("Will persist SIGES(" + d.getCodigoFuncionario().intValue() + ") baco (username:" + t.getUsername() + ") baco name:" + t.getName());
msgS = "Will persist SIGES(" + d.getCodigoFuncionario().intValue() + ") baco (username:" + t.getUsername() + ") baco name:" + t.getName();
logger.info(msgS);
serviceLogInfo(msgS);
try
{
persist(d, t, newUser);
persist(d, t, newUser,year);
}
catch (Exception e)
{
98,19 → 151,85
t.setPassword(password);
}
}
 
}
catch(StaleStateException e)
{
AbstractDao.getCurrentSession().getTransaction().rollback();
AbstractDao.getCurrentSession().beginTransaction();
logger.error(e,e);
serviceLogError("Rolling back will lost previous updates: " + e.toString(),e);
sendNotificationAdmin("Erro de importacao de docentes",e.toString());
}
catch(HibernateException e)
{
AbstractDao.getCurrentSession().getTransaction().rollback();
AbstractDao.getCurrentSession().beginTransaction();
logger.error(e,e);
serviceLogError("Rolling back will lost previous updates: " + e.toString(),e);
sendNotificationAdmin("Erro de base de dados importacao de docentes, provavelmente chave errada, corrigir no MySql",e.toString());
}
catch (Throwable e)
{
logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
logger.error(e, e);
throw new ServiceException(e.toString(), e);
}
 
serviceLogInfo("############################");
serviceLogInfo("############################");
serviceLogInfo("#Teachers found: " + teachersFound);
serviceLogInfo("#Teachers New: " + teachersNew);
serviceLogInfo("#Teachers Zero Units: " + teachersZeroUnits);
serviceLogInfo("#Units not found: " + unitsNotFound);
serviceLogInfo("#Units removed to Teachers: " + unitsRemovedToTeachers);
serviceLogInfo("#Units added to Teachers: " + unitsAddedToTeachers);
serviceLogInfo("#Units not Removed because localy added: " + unitsLocalAddedNotRemoved);
serviceLogInfo("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
 
if(teachersChangeBI>0)
{
serviceLogInfo("#>>>>>AVISO AVISO<<<<<<<<<: ");
serviceLogInfo("#>>>>>AVISO AVISO<<<<<<<<<: ");
serviceLogInfo("#>>>>>NUMEROS DE PROFESSORES MUDARAM DE BI<<<<<<<<<: CONSULTAR LOG");
serviceLogInfo("#CODIGO SIGES COM BIs DIFERENTES:" + teachersChangeBI);
}
setProgress(100);
 
logMessages.addMessage(new DefaultLogMessage("import.teachers.terminating", LogMessageTypeEnum.INFO));
logger.info("terminating teacher import");
serviceLogInfo("terminating teacher import");
return logMessages;
}
 
 
/**
* Envio de Notificação aos operadores do CI
* @param subject
* @param cause
*/
private void sendNotificationAdmin(String subject, String cause)
{
//todo JOB
 
List<String> emails = ConfigProperties.getListValues("admin.email");
for(String email:emails)
{
serviceLogWarn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email);
logger.warn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email);
}
List<String> arguments = new ArrayList<String>();
arguments.add(cause.replace("\n","<br/>"));
Email email = new Email(subject,emails,Globals.SYSTEM_EMAIL_BOX,"messageToAdmin_pt.txt",arguments);
try {
new SendEmailService().sendEmail(email);
} catch (ServiceException e) {
e.printStackTrace();
}
 
}
 
/**
* Implementação local do toString para a class Docente que foi gerada pelos web-services
* @param d
* @return
134,90 → 253,212
", disciplinas=" + d.getDisciplinas() +
'}';
}
 
private void cloneFields(Docente teacherSiges, Teacher teacher)
{
 
teacher.setName(teacherSiges.getNomeFuncionarioInt());
teacher.setEmail(teacherSiges.getEmail());
String msgS;
 
if(teacherSiges.getEmail() != null && teacherSiges.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX))
{
int atIndex = teacherSiges.getEmail().indexOf("@");
if (atIndex > 0)
{
teacher.setUsername(teacherSiges.getEmail().substring(0, atIndex));
msgS = "Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " foi-lhe atribuido o username d" + teacherSiges.getEmail().substring(0, atIndex);
logger.info(msgS);
serviceLogInfo(msgS);
}
else
{
msgS = "Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " NAO lhe foi atribuido username o email não tem o caracter @";
logger.info(msgS);
serviceLogInfo(msgS);
}
}
else
{
msgS = "Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " nao tem email no SIGES foi-lhe atribuido o username d" + teacherSiges.getCodigoFuncionario().intValue();
logger.info(msgS);
serviceLogInfo(msgS);
teacher.setUsername("d" + teacherSiges.getCodigoFuncionario().intValue());
}
teacher.setSigesCode(teacherSiges.getCodigoFuncionario().intValue());
teacher.setAddress(teacherSiges.getMorada());
teacher.setZip("" + teacherSiges.getCodigoPostal().intValue());
teacher.setBi(teacherSiges.getNumeroBi());
teacher.setEmployerName(teacherSiges.getNomeFuncionario());
teacher.setAcademicName(teacherSiges.getNomeAcademico());
teacher.setBirthDate(teacherSiges.getDataNascimento().toGregorianCalendar().getTime());
}
/**
* Nao esta testado
* jm
*
* @param d docente
* @param t teacher
* @param teacherSiges docente
* @param teacher teacher
* @throws Exception .
*/
private void persist(Docente d, Teacher t, boolean newUser) throws Exception
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year) throws Exception
{
String msgS;
 
 
try
{
if(t.getName() == null || t.getName().length() == 0)
t.setName(d.getNomeFuncionarioInt());
//Email instituicao
if(t.getEmail() == null || t.getEmail().indexOf("@") < 0)
t.setEmail(d.getEmail());
if (d.getEmail() != null && (t.getUsername() == null || t.getUsername().trim().length() == 0) && d.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX))
 
if(newUser)
{
int atIndex = d.getEmail().indexOf("@");
if (atIndex > 0)
teachersNew++;
cloneFields(teacherSiges, teacher);
serviceLogInfo("NOVO PROFESSOR ENCONTRADO: siges:" + teacherSiges.getCodigoFuncionario() + " bi:" + teacher.getBi() + " nome:" + teacher.getName());
}
//CASO EM QUE O DOCENTE NO SIGES FOI ATRIBUIDO A OUTRO ESTUDANTE PARA PREENCHER BURACO NA NUMERACAO
else if(teacherSiges.getNumeroBi() == null || teacher.getBi() == null || ! teacherSiges.getNumeroBi().equals(teacher.getBi()))
{
teachersChangeBI++;
 
StringBuilder builder = new StringBuilder();
 
builder.append("ATENCAO NUMERO DE PROFESSOR " + teacherSiges.getCodigoFuncionario() + " MUDOU DE DONO VAI SER BLOQUEADO IMEDIATAMENTE\n");
builder.append("ALTERANDO DADOS DO PROFESSOR " + teacherSiges.getCodigoFuncionario() + "\n");
builder.append("<<<<<<<ANTES: " + "\n");
builder.append("<<<<<<<BI: " + teacher.getBi() + "\n");
builder.append("<<<<<<<Nome: " + teacher.getName() + "\n");
builder.append("<<<<<<<Username: " + teacher.getUserNameNetpa() + "\n");
builder.append("<<<<<<<Address: " + teacher.getAddress() + "\n");
builder.append("<<<<<<<Zip: " + teacher.getZip() + "\n");
builder.append("<<<<<<<Email: " + teacher.getEmail() + "\n");
builder.append("<<<<<<<Phone: " + teacher.getPhonenumber() + "\n");
 
cloneFields(teacherSiges, teacher);
 
//teacher.setAutoBlockMode(false);
//teacher.setManualBlock(true);
 
builder.append("DEPOIS: " + "\n");
builder.append("BI: " + teacher.getBi() + "\n");
builder.append("Nome: " + teacher.getName() + "\n");
builder.append("Username: " + teacher.getUserNameNetpa() + "\n");
builder.append("Address: " + teacher.getAddress() + "\n");
builder.append("Zip: " + teacher.getZip() + "\n");
builder.append("Email: " + teacher.getEmail() + "\n");
builder.append("Phone: " + teacher.getPhonenumber() + "\n");
 
serviceLogWarn(builder.toString());
 
sendNotificationAdmin("CODIGO SIGES PROFESSOR " + teacherSiges.getCodigoFuncionario() + " MUDOU DE DONO - NAO FOI BLOQUEADO OS DADOS FORAM REPOSTOS ",builder.toString());
 
}
else
{
//VAMOS APENAS ADICIONAR CAMPOS QUE AINDA NAO EXISTAM IGUAL AO CLONE MAS NAO MECHE
if(teacher.getName() == null || teacher.getName().length() == 0)
teacher.setName(teacherSiges.getNomeFuncionarioInt());
//Email instituicao
if(teacher.getEmail() == null || teacher.getEmail().indexOf("@") < 0)
teacher.setEmail(teacherSiges.getEmail());
 
if (teacherSiges.getEmail() != null && (teacher.getUsername() == null || teacher.getUsername().trim().length() == 0) && teacherSiges.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX))
{
t.setUsername(d.getEmail().substring(0, atIndex));
logger.info("Teacher SIGES:" + d.getCodigoFuncionario().intValue() + " foi-lhe atribuido o username d" + d.getEmail().substring(0, atIndex));
int atIndex = teacherSiges.getEmail().indexOf("@");
if (atIndex > 0)
{
teacher.setUsername(teacherSiges.getEmail().substring(0, atIndex));
msgS = "Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " foi-lhe atribuido o username d" + teacherSiges.getEmail().substring(0, atIndex);
logger.info(msgS);
serviceLogInfo(msgS);
}
else
{
msgS = "Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " NAO lhe foi atribuido username o email não tem o caracter @";
logger.info(msgS);
serviceLogInfo(msgS);
}
}
else if(teacher.getUsername() == null || teacher.getUsername().trim().length() == 0)
{
msgS = "Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " nao tem email no SIGES foi-lhe atribuido o username d" + teacherSiges.getCodigoFuncionario().intValue();
logger.info(msgS);
serviceLogInfo(msgS);
teacher.setUsername("d" + teacherSiges.getCodigoFuncionario().intValue());
}
else
{
logger.info("Teacher SIGES:" + d.getCodigoFuncionario().intValue() + " NAO lhe foi atribuido username o email não tem o caracter @");
//ALL OK
//username não foi alterado
//msgS="Teacher SIGES:" + teacherSiges.getCodigoFuncionario().intValue() + " nao lhe foi alterado o username " + teacher.getUsername();
//logger.info(msgS);
//serviceLogInfo(msgS);
}
teacher.setSigesCode(teacherSiges.getCodigoFuncionario().intValue());
if(teacher.getAddress() == null || teacher.getAddress().length() == 0)
teacher.setAddress(teacherSiges.getMorada());
if(teacher.getZip() == null || teacher.getZip().length() == 0)
teacher.setZip("" + teacherSiges.getCodigoPostal().intValue());
if(teacher.getBi() == null || teacher.getBi().length() == 0)
teacher.setBi(teacherSiges.getNumeroBi());
teacher.setEmployerName(teacherSiges.getNomeFuncionario());
teacher.setAcademicName(teacherSiges.getNomeAcademico());
if(teacher.getBirthDate() == null || teacher.getBirthDate().getTime() == 0)
teacher.setBirthDate(teacherSiges.getDataNascimento().toGregorianCalendar().getTime());
}
else if(t.getUsername() == null || t.getUsername().trim().length() == 0)
 
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas
if (teacherSiges.getDisciplinas() == null || teacherSiges.getDisciplinas().getDisciplina() == null || teacherSiges.getDisciplinas().getDisciplina().size() == 0)
{
logger.info("Teacher SIGES:" + d.getCodigoFuncionario().intValue() + " nao tem email no SIGES foi-lhe atribuido o username d" + d.getCodigoFuncionario().intValue());
t.setUsername("d" + d.getCodigoFuncionario().intValue());
msgS = "ATENTION TEACHER WITH ZERO UNITS: codigoFuncionario " + teacherSiges.getCodigoFuncionario();
logger.warn(msgS);
serviceLogInfo(msgS);
 
}
else
{
//username não foi alterado
logger.info("Teacher SIGES:" + d.getCodigoFuncionario().intValue() + " nao lhe foi alterado o username " + t.getUsername());
}
t.setSigesCode(d.getCodigoFuncionario().intValue());
if(t.getAddress() == null || t.getAddress().length() == 0)
t.setAddress(d.getMorada());
if(t.getZip() == null || t.getZip().length() == 0)
t.setZip("" + d.getCodigoPostal().intValue());
if(t.getBi() == null || t.getBi().length() == 0)
t.setBi(d.getNumeroBi());
t.setEmployerName(d.getNomeFuncionario());
t.setAcademicName(d.getNomeAcademico());
if(t.getBirthDate() == null || t.getBirthDate().getTime() == 0)
t.setBirthDate(d.getDataNascimento().toGregorianCalendar().getTime());
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas
if (d.getDisciplinas() == null || d.getDisciplinas().getDisciplina() == null || d.getDisciplinas().getDisciplina().size() == 0)
logger.warn("ATENTION TEACHER WITH ZERO UNITS: codigoFuncionario " + d.getCodigoFuncionario());
else
{
//1 - PROCEDIMENTO CADEIRAS SAO CARREGADAS DO BACO DA LISTA QUE VEM DO SIGES -> units
//2 - Sao retiradas da lista units as que o teacher tem mas que foram removidas localmente
//3 - Sao adicionadas ao teacher as que o docente ainda nao tiver da lista units
//4 - Remover da lista do teacher as unidades que não vêm do SIGES e que não foram adicionadas localmente
 
//PASSO 1
Set<CourseUnit> units = new HashSet<CourseUnit>();
for (Disciplina disciplina : d.getDisciplinas().getDisciplina())
for (Disciplina disciplina : teacherSiges.getDisciplinas().getDisciplina())
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
 
if (courseUnit == null)
{
logger.warn("Unit not found: semestre:" + disciplina.getCdDuracao() + " codigo:" + disciplina.getCodigo() + " course:" + disciplina.getCodigoCurso() + " year:" + disciplina.getCdLectivo());
msgS = "Unit not found: semestre:" + disciplina.getCdDuracao() + " codigo:" + disciplina.getCodigo() + " course:" + disciplina.getCodigoCurso() + " year:" + disciplina.getCdLectivo();
logger.warn(msgS);
serviceLogWarn(msgS);
}
else
units.add(courseUnit);
}
//PASSO 2
Iterator<CourseUnit> iter = units.iterator();
while (iter.hasNext())
{
CourseUnit courseUnit = iter.next();
//In case of a comming proxy
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t);
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
if (tImpl.isLocalRemovedUnit(courseUnit))
{
unitsLocallyRemovedNotAdded++;
String msg = "Removendo unidade: " + ((CourseUnitImpl)courseUnit).getSigesUniqueIdentifiers() + " - do professor: " + tImpl.getSigesCode() + " - Associacao existe no SIGES mas foi removido LOCALMENTE";
serviceLogInfo(msg);
logger.info(msg);
iter.remove();
}
}
if (t.getTeachedUnits() != null)
//PASSO 3
if (teacher.getTeachedUnits() != null)
{
for (CourseUnit c : units)
{
boolean isIn = false;
for (CourseUnit tc : t.getTeachedUnits())
for (CourseUnit tc : teacher.getTeachedUnits())
{
if (tc.equals(c))
{
226,12 → 467,70
}
}
if (!isIn)
t.getTeachedUnits().add(c);
{
String msg = "Adicionando unidade: " + ((CourseUnitImpl)c).getSigesUniqueIdentifiers() + " - ao teacher: " + teacher.getSigesCode() + " - Associacao nova no SIGES";
serviceLogInfo(msg);
logger.info(msg);
unitsAddedToTeachers++;
teacher.getTeachedUnits().add(c);
}
}
}
else
t.setTeachedUnits(units);
teacher.setTeachedUnits(units);
 
 
//PASSO 4 nao é feito nos teacher mas deveria ser
 
//PASSO 4
//Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
Iterator<CourseUnit> iterNowUnits = teacher.getTeachedUnits().iterator();
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
while(iterNowUnits.hasNext())
{
CourseUnit cUNow = iterNowUnits.next();
if(cUNow.getImportYear().equals(year))
//Apenas tentamos apagar as unidades do ano corrente.
//Este servico trabalha com unidades importadas do ano que e passado como argumento
//Se importamos unidades desse ano, as dos outros anos nao vem na lista, logo
//iriamos constatar que nenhuma estava no SIGES o que nao e verdade.
//Assim so apagamos unidades do ano que estamos a importar e que nao venham
//na importacao desse ano
{
 
boolean added = false;
for(CourseUnit c: units)
{
if(cUNow.equals(c))
{
added = true;
break;
}
}
if(!added)
{
 
if(!tImpl.isLocalRemovedUnit(cUNow))
{
String msg = "Removendo unidade: " + ((CourseUnitImpl)cUNow).getSigesUniqueIdentifiers() + " - do docente: " + teacher.getSigesCode() + " - Associacao desapareceu do SIGES";
serviceLogInfo(msg);
logger.info(msg);
iterNowUnits.remove();
unitsRemovedToTeachers++;
}
else
{
String msg = "NAO REMOVIDA - Unidade: " + ((CourseUnitImpl)cUNow).getSigesUniqueIdentifiers() + " - do docente: " + teacher.getSigesCode() + " - Associacao desapareceu do SIGES mas foi adicionada localmente";
serviceLogInfo(msg);
logger.info(msg);
unitsLocalAddedNotRemoved++;
}
}
}
}
}
 
 
}
catch (Exception e)
{
248,6 → 547,17
 
}
 
@Override
protected void runJobServiceTask() throws Throwable {
 
String importYear = (String) getParametersMap().get(JOB_importYear_KEY).getObject();
run(importYear);
 
}
 
public static final String JOB_importYear_KEY = "JOB_importYear_KEY";
 
 
/**
* Testar por aqui poi requer Super Role e assim e' autmatico
*
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
135,14 → 135,8
logger.error(e,e);
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
serviceLogError(logMessages.getLastMessage(), e);
List<String> emails = new ArrayList<String>();
emails.add(ConfigProperties.getProperty("admin.email"));
List<String> arguments = new ArrayList<String>();
String cause = e.getCause() == null ? "" : e.getCause().toString();
arguments.add((e.toString() + "\n" + cause).replace("\n","<br/>"));
serviceLogWarn("Sending email to " + ConfigProperties.getProperty("admin.email"));
Email email = new Email("Erro de importacao de cursos e unidades",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments);
new SendEmailService().sendEmail(email);
sendNotificationAdmin("Erro na importacao de sumarios",cause);
}
logger.info("terminating course import");
serviceLogInfo("terminating course import");
151,6 → 145,32
return logMessages;
}
 
/**
* Envio de Notificação aos operadores do CI
* @param subject
* @param cause
*/
private void sendNotificationAdmin(String subject, String cause)
{
//todo JOB
 
List<String> emails = ConfigProperties.getListValues("admin.email");
for(String email:emails)
{
serviceLogWarn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email);
logger.warn(">>>>>>>>ENVIANDO NOTIFICACAO A ADMINISTRACAO: " + email);
}
List<String> arguments = new ArrayList<String>();
arguments.add(cause.replace("\n","<br/>"));
Email email = new Email(subject,emails,Globals.SYSTEM_EMAIL_BOX,"messageToAdmin_pt.txt",arguments);
try {
new SendEmailService().sendEmail(email);
} catch (ServiceException e) {
e.printStackTrace();
}
 
}
 
private void importUnitsSemestre(SiGesWEB service,
String semestre,
String year,
226,10 → 246,6
 
}
 
@Override
public String getLogPathPrefix() {
return getClass().getName();
}
 
public static void main(String[] args) throws ServiceException
{
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportSumariesJson.java
112,7 → 112,7
if (i++ > MAX_COMMIT)
{
i = 0;
setProgress((int) (((float)countUnits)/((float)cUs.size())*100));
setProgress((int) (((float)countUnits)/((float)cUs.size())*100.0f));
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
serviceLogInfo("Commiting database");
325,18 → 325,26
*/
public static void main(String[] args) throws ServiceException, JSONException {
 
System.out.println("Syntax:");
System.out.println("year, semestre, sendIonline, sendEmail");
System.out.println("If no arguments wil user actual year import config in all semestres and true in email and ionline");
 
String year = DaoFactory.getConfigurationDaoImpl().getImportsDefaultImportYearCreateTransaction();
String semestre = null;
boolean sendIonline = true;
boolean sendEmail = true;
if(args != null && args.length > 0)
year = args[0];
 
if(args != null && args.length > 1)
semestre = args[1];
 
if(args != null && args.length > 2)
sendIonline = Boolean.parseBoolean(args[2]);
 
if(args != null && args.length > 3)
sendEmail = Boolean.parseBoolean(args[3]);
 
AbstractDao.getCurrentSession().beginTransaction();
if(semestre != null)
new ImportSumariesJson().run(year,semestre,sendIonline,sendEmail);
366,8 → 374,4
 
}
 
@Override
public String getLogPathPrefix() {
return getClass().getName();
}
}
/impl/src/java/pt/estgp/estgweb/services/jobs/JobScheduleService.java
3,10 → 3,7
import jomm.dao.impl.AbstractDao;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.sigesimports.ImportCourseService;
import pt.estgp.estgweb.services.sigesimports.ImportStudentsService;
import pt.estgp.estgweb.services.sigesimports.ImportSumariesJson;
import pt.estgp.estgweb.services.sigesimports.SincronizeLastYearCourseUnitProgramsService;
import pt.estgp.estgweb.services.sigesimports.*;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.Serializable;
109,7 → 106,7
public static void main(String[] args) throws SQLException
{
AbstractDao.getCurrentSession().beginTransaction();
scheduleImportStudents();
scheduleImportTeachers();
AbstractDao.getCurrentSession().getTransaction().commit();
}
 
254,7 → 251,7
jobServiceTaskScheduler.setId(0);
JobServiceTaskSchedulerParameterImpl param1 = DomainObjectFactory.createJobServiceTaskSchedulerParameterImpl();
param1.setJobServiceTaskScheduler(jobServiceTaskScheduler);
param1.setName(ImportCourseService.JOB_importYear_KEY);
param1.setName(ImportStudentsService.JOB_importYear_KEY);
param1.setDescription("desc1");
param1.setObject("201415");
Set<JobServiceTaskSchedulerParameter> params = new HashSet<JobServiceTaskSchedulerParameter>();
280,4 → 277,37
new JobScheduleService().createOrUpdateScheduleServiceTask(jobServiceTaskScheduler,sess);
 
}
 
public static void scheduleImportTeachers()
{
JobServiceTaskScheduler jobServiceTaskScheduler = DomainObjectFactory.createJobServiceTaskSchedulerImpl();
jobServiceTaskScheduler.setId(0);
JobServiceTaskSchedulerParameterImpl param1 = DomainObjectFactory.createJobServiceTaskSchedulerParameterImpl();
param1.setJobServiceTaskScheduler(jobServiceTaskScheduler);
param1.setName(ImportTeachersService.JOB_importYear_KEY);
param1.setDescription("desc1");
param1.setObject("201415");
Set<JobServiceTaskSchedulerParameter> params = new HashSet<JobServiceTaskSchedulerParameter>();
params.add(param1);
jobServiceTaskScheduler.setServiceTaskSchedulerParameters(params);
 
jobServiceTaskScheduler.setDaily(true);
jobServiceTaskScheduler.setMonthday(GregorianCalendar.NOVEMBER);
jobServiceTaskScheduler.setWeekday(GregorianCalendar.MONDAY);
jobServiceTaskScheduler.setHour(01);
jobServiceTaskScheduler.setMinute(0);
jobServiceTaskScheduler.setSecond(0);
jobServiceTaskScheduler.setTargetService(ImportTeachersService.class.getName());
User u = (User) DaoFactory.getTeacherDaoImpl().findByEmail("jmachado@estgp.pt").get(0);
UserSession sess = new UserSession() {
@Override
public Serializable getSerializable() {
return null;
}
};
sess.setUser(u);
jobServiceTaskScheduler.setDescription("TESTE Teachers");
new JobScheduleService().createOrUpdateScheduleServiceTask(jobServiceTaskScheduler,sess);
 
}
}
/impl/src/java/pt/estgp/estgweb/services/jobs/ServiceJob.java
126,5 → 126,4
 
//Implemented in SubService to run the Job
protected abstract void runJobServiceTask() throws Throwable;
public abstract String getLogPathPrefix();
}
/impl/src/java/pt/estgp/estgweb/services/jobs/JobDeamon.java
6,6 → 6,7
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.DatesUtils;
 
import java.util.*;
 
120,7 → 121,13
jobServiceTask.setRequestStop(false);
jobServiceTask.setOwner(schedule.getCreatedBy());
jobServiceTask.setJobHandler(new SerializableNullJobHandler());
jobServiceTask.setLogFilePath( jobServiceTask.getId() + "-" + schedule.getTargetService() + ".log");
try {
String filePath = Class.forName(schedule.getTargetService()).getSimpleName() + "-" + DatesUtils.getFormatedFileSystem(new Date());
jobServiceTask.setLogFilePath( filePath + ".log");
} catch (ClassNotFoundException e) {
logger.fatal(e,e);
continue;
}
Set<JobServiceTaskParameter> paramsJob = new HashSet<JobServiceTaskParameter>();
for(JobServiceTaskSchedulerParameter param : schedule.getServiceTaskSchedulerParameters())
{
/impl/src/java/pt/estgp/estgweb/domain/TeacherImpl.java
223,15 → 223,27
public void removeUnitLocaly(CourseUnit unit)
{
setLocalRemovedTeachedUnits(StringsUtils.addElement(getLocalRemovedTeachedUnits(),"" + unit.getId(),","));
 
//todo novo
setLocalTeachedUnits(StringsUtils.removeElement(getLocalTeachedUnits(),"" + unit.getId(),","));
}
 
public void addUnitLocaly(CourseUnit unit)
{
setLocalRemovedTeachedUnits(StringsUtils.removeElement(getLocalRemovedTeachedUnits(),"" + unit.getId(),","));
 
//todo novo
setLocalTeachedUnits(StringsUtils.removeElement(getLocalTeachedUnits(),"" + unit.getId(),","));
setLocalTeachedUnits(StringsUtils.addElement(getLocalTeachedUnits(),"" + unit.getId(),","));
}
 
public boolean isLocalRemovedUnit(CourseUnit unit)
{
return StringsUtils.hasElement(getLocalRemovedTeachedUnits(),"" + unit.getId(),",");
}
 
public boolean isLocalUnit(CourseUnit unit)
{
return StringsUtils.hasElement(getLocalTeachedUnits(),""+unit.getId(),",");
}
}
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java
134,5 → 134,11
}
 
 
public String getSigesUniqueIdentifiers()
{
return "SIGES:" + getCode() + ", COURSE: " + getCourseCode() +
", " + getSemestre() + " of " + getImportYear() + " - " + getName();
}
 
}
/impl/src/updates/version/release2015-11.txt
39,3 → 39,9
 
- Links para FTP vão passar a usar proxy ver xsl dos proxies
Foi criado um FTPFileProxy que usa o user logado para se autenticar no FTP e puxar o ficheiro
 
- todo gerar todos os PDF's de programas outra vez e gerar todos os relatorios de avaliação e sumarios
 
- todo tirar os todo job dos envios de emails e sends to ionline
 
- todo Configurações possiveis de ir para BD
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
122,6 → 122,7
<property name="unitCheck" type="boolean"/>
<property name="academicDegree" type="string"/>
<property name="localRemovedTeachedUnits" type="string"/>
<property name="localTeachedUnits" type="string"/>
<set name="responsibleUnits" lazy="true" order-by="name">
<key column="responsableTeacher"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnit"/>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
32,13 → 32,14
<property name="summariesJson" type="text">
<column name="summariesJson" sql-type="TEXT"/>
</property>
<many-to-one name="validatorUser" class="pt.estgp.estgweb.domain.Teacher" lazy="false" outer-join="true"/>
<!--Not In Use-->
<many-to-one name="validatorUser" class="pt.estgp.estgweb.domain.User" lazy="false" outer-join="true" not-null="false"/>
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/>
<many-to-one name="courseUnitProgram" class="pt.estgp.estgweb.domain.CourseUnitProgram" lazy="proxy"/>
<many-to-one name="courseUnitEvaluation" class="pt.estgp.estgweb.domain.CourseUnitEvaluation" lazy="proxy"/>
<many-to-one name="courseUnitProgram" class="pt.estgp.estgweb.domain.CourseUnitProgram" lazy="proxy" not-null="false"/>
<many-to-one name="courseUnitEvaluation" class="pt.estgp.estgweb.domain.CourseUnitEvaluation" lazy="proxy" not-null="false"/>
<!--<many-to-one name="courseUnitProgram" class="pt.estgp.estgweb.domain.CourseUnitProgram" lazy="false" outer-join="true"/>
<many-to-one name="courseUnitEvaluation" class="pt.estgp.estgweb.domain.CourseUnitEvaluation" lazy="false" outer-join="true"/>-->
<many-to-one name="responsableTeacher" class="pt.estgp.estgweb.domain.Teacher" lazy="false" outer-join="true"/>
<many-to-one name="responsableTeacher" class="pt.estgp.estgweb.domain.Teacher" lazy="false" outer-join="true" not-null="false"/>
<set name="blogs" cascade="delete" lazy="true" order-by="saveDate asc">
<key column="courseUnit"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitBlog" />