Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1392 → Rev 1467

/branches/v3/impl/conf/language/MessageResources.properties
387,8 → 387,8
authenticate.blocked=O seu usuário está bloqueado pelo sistema. Para mais informações contacte o Centro Informático.
username=Nome de Utilizador
password=Palavra Passe
username.pae=Número de Aluno/Docente
password.pae=Palavra Passe ou Número do Cartão de Cidadão (BI)
username.pae=<label class="label label-primary" style="font-size:1.2em">Número de Aluno / Docente</label>
password.pae=<label class="label label-info" style="font-size:1.2em">Número</label> do <label class="label label-info" style="font-size:1.2em">Cartão de Cidadão</label> <label class="label label-info" style="font-size:1.2em">ou bilhete de identidade</label>
password.again=Repita a password
submit=Entrar
edit=Editar
422,6 → 422,14
see.more=Ver mais
 
 
questionario.email.subject=Por favo preencha o assunto
questionario.email.from.email=Por favor preencha o email que quer que apareça como remetente
questionario.email.from.person=Por favor preencha a pessoa ou a entidade ou orgão que quer que apareça como remetente
questionario.email.message=Por favor preencha uma mensagem
 
questionario.send.message.top.nav=Envio de Mensagem de Correio Eletronico aos Inquiridos
 
 
#Cursos
 
 
1787,6 → 1795,7
#
################################################################################
 
error.questionario.com.respostas.nao.pode.efetuar.op=Operação não permitida, Existem Respostas
error.questionario.p.without.group=Verifique a pergunta {0} nao tem grupo
error.questionario.group.without.p=Verifique o grupo {0} nao tem pergunta
warn.questionario.repeated.in.time=Aviso: Já existe um questionário ({0}) nesse ano e semestre na categoria histórica escolhida
1799,8 → 1808,12
questionarios.courses.start=Atribuição de Cursos Iniciada
questionarios.answers.start=Atribuição de Respostas Iniciada
questionario.tipologias.update.success=Tipologias atualizadas com sucesso
questionario.resposta=Resposta a Questionário
questionario.resposta.com.sucesso=A sua resposta foi submetida com sucesso ao nosso sistema de avaliação. Obrigado
 
questionario.respostas.grupos.1.2.3=Os grupos 1 2 e 3 são obrigatórios por favor responda às questões. Obrigado.
 
 
################################################################################
#
# REMINDERS MESSAGE RESOURCES
1910,6 → 1923,7
questionario.answerprocessor=Processador de Respostas
# SERVICE ZONE
survey.admin=Administração do Questionário {0}
survey.see=Acompanhar Questionário {0}
surveys=Questionários
survey.newEdit.survey=Formulário do Questionário
survey.create.survey=Criar Questionário
/branches/v3/impl/conf/WEB-INF/struts/tiles-pae-questionarios.xml
13,6 → 13,12
<put name="body" value="/user/questionarios/questionariosList.jsp"/>
</definition>
 
<definition name="page.pae.see.questionarios" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioList.jsp"/>
<put name="body" value="/user/questionarios/questionariosSee.jsp"/>
</definition>
 
<definition name="page.pae.questionario.newEdit" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioNewEdit.jsp"/>
26,6 → 32,20
</definition>
 
 
<definition name="page.pae.questionario.see" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioSee.jsp"/>
<put name="body" value="/user/questionarios/pedagogicoEstudante/questionarioDashBoard.jsp"/>
</definition>
 
 
<definition name="page.pae.questionario.pedagogico.message" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/pedagogicoEstudante/topnavQuestionarioPedagogicoSendMessage.jsp"/>
<put name="body" value="/user/questionarios/pedagogicoEstudante/sendMessageQuestionarioRequisitados.jsp"/>
</definition>
 
 
<!-- Modulo do Pedagogico Estudantes -->
<definition name="page.pae.questionario.courses.selection" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
44,4 → 64,11
</definition>
 
 
<definition name="page.pae.questionario.resposta.questionario" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioResposta.jsp"/>
<put name="body" value="/user/questionarios/respostaQuestionario.jsp"/>
</definition>
 
 
</tiles-definitions>
/branches/v3/impl/conf/WEB-INF/struts/struts-pae-questionarios.xml
9,6 → 9,8
 
<form-beans>
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioForm" name="QuestionarioForm"/>
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm" name="QuestionarioRespostaForm"/>
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" name="QuestionarioMessage"/>
</form-beans>
 
<global-exceptions>
32,10 → 34,14
 
<action path="/user/startNewQuestionario" forward="/user/questionariosPaeNoValidation.do?dispatch=startNew"/>
<action path="/user/listQuestionarios" forward="page.pae.questionario.list"/>
<action path="/user/seeQuestionarios" forward="page.pae.see.questionarios"/>
<action path="/user/adminQuestionario" forward="page.pae.questionario.admin"/>
<action path="/user/seeQuestionario" forward="page.pae.questionario.see"/>
<action path="/user/formQuestionariosPae" forward="/user/questionariosPaeNoValidation.do?dispatch=form"/>
<action path="/user/deleteQuestionario" forward="/user/questionariosPaeNoValidation.do?dispatch=deleteQuestionario"/>
<action path="/user/startRespostaQuestionario" forward="page.pae.questionario.resposta.questionario"/>
 
 
<action path="/user/questionariosPaeStartAfectacoes" forward="/user/questionariosPaeNoValidation.do?dispatch=startAfetacoes"/>
 
<action path="/user/questionariosPaeNoValidation"
74,11 → 80,47
<forward name="admin" path="page.pae.questionario.admin"/>
</action>
 
<action path="/user/questionariosPaeResposta"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioYearSemestreController"
name="QuestionarioRespostaForm"
scope="request"
parameter="dispatch"
validate="true"
input="page.pae.questionario.resposta.questionario">
<forward name="success" path="page.pae.separators.home"/>
</action>
 
<action path="/user/startQuestionariosPaeMessagePedagogico" forward="page.pae.questionario.pedagogico.message"/>
<!--<action path="/user/startQuestionariosPaeMessageXPTO" forward="page.pae.questionario.XPTO.message"/>-->
<action path="/user/questionariosPaeMessagePedagogico"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController"
name="QuestionarioMessage"
scope="request"
parameter="dispatch"
validate="true"
input="page.pae.questionario.pedagogico.message">
<forward name="success" path="page.pae.questionario.see"/>
<forward name="seeAll" path="page.pae.see.questionarios"/>
</action>
 
<!--Outros no futuro
<action path="/user/questionariosPaeMessageXpto"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController"
name="QuestionarioMessage"
scope="request"
parameter="dispatch"
validate="true"
input="page.pae.questionario.XPTO.message">
<forward name="success" path="page.pae.questionario.see.XPTO"/>
</action>
-->
 
<!--%%%%%%%%%%%%%%%% Pedagogico Alunos Modulo %%%%%%%%%%%%%%%%%%%-->
<action path="/user/questionarioPedagogicoStartChooseCourses" forward="page.pae.questionario.courses.selection"/>
<action path="/user/questionarioPedagogicoStartCheckCourses" forward="page.pae.questionario.courses.check"/>
<action path="/user/questionarioPedagogicoStartAssignAnswers" forward="page.pae.questionario.assign.answers"/>
 
 
<action path="/user/questionariosPaeSelectCourses"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioCourseSelectionController"
name="QuestionarioForm"
/branches/v3/impl/conf/app.properties
17,9 → 17,11
user.session.timeout.minutes=60
site.url=@site.url@
 
 
 
#USAR APENAS ESTES DOIS EMAILS NAO DA PARA MAIS
admin.email=ci@estgp.pt
admin.email.2=jmachado@estgp.pt
admin.email=@admin.email.1@
admin.email.2=@admin.email.2@
 
email.local.suffix.1=estgp.pt
email.local.suffix.2=esae.pt
28,14 → 30,19
 
 
email.local.suffix=estgp.pt
email.server=smtp.gmail.com
email.server=@email.server@
 
##If RoundRobin is false will use email.from property in from address
email.use.round.robin=@email.use.round.robin@
email.use.security=@email.use.security@
#to use example: bacodev1@estgp.pt bacodev2@estgp.pt
email.user.prefix=bacodev
email.user.sufix=@estgp.pt
email.user.count=10
email.user.prefix=@email.user.prefix@
email.user.sufix=@email.user.sufix@
email.user.count=@email.user.count@
email.user=bacodev@estgp.pt
email.password=@email.password@
email.from=bacodev@estgp.pt
 
email.from=@email.from@
email.templates.dir=@email.templates.dir@
#email.server.security=
#email.server.security=SSL
674,6 → 681,8
 
 
 
#if set url in baco separators will allays be enabled
#mode.pae.enabled=false
#system.theme=estg
#system.redirections.policy.index.welcome=welcome
#system.redirections.policy.authentication.action=/authenticate.do
682,12 → 691,14
#authentication.policy.password.msg.key=password
 
#system.theme=ipp
#mode.pae.enabled=true
#system.redirections.policy.index.welcome=welcomePedagogicSurvey
#system.redirections.policy.authentication.action=/authenticatePae.do
#authentication.policy.service=AuthenticatePae
#authentication.policy.username.msg.key=username.pae
#authentication.policy.password.msg.key=password.pae
 
mode.pae.enabled=@mode.pae.enabled@
system.theme=@system.theme@
authentication.policy.service=@authentication.policy.service@
authentication.policy.username.msg.key=@authentication.policy.username.msg.key@
695,8 → 706,8
system.redirections.policy.index.welcome=@system.redirections.policy.index.welcome@
system.redirections.policy.authentication.action=@system.redirections.policy.authentication.action@
system.redirections.policy.authentication.logout.action=@system.redirections.policy.authentication.logout.action@
system.mail.standard.certificated.home.page=@system.mail.standard.certificated.home.page@
 
 
###AQUI PODEMOS USAR OU TRA INTRANET OU OUTRO PORTAL PUBLICO
system.intranet.url=@system.intranet.url@
system.public.url=@system.public.url@
834,5 → 845,49
siges.summaries.prelancado.code=4
 
 
####TIPOS DE ALUNO EXTRAIDOS A 8 de Junho de 2016
#1 Normal
#2 Bolseiro
#3 Militar
#4 Trabalhador Estudante
#5 Internacional
#6 Dirigente Associativo
#7 Atleta de Alta Competição
#8 Kids / Teens (Clic)
#9 Palop
#10 Individual (Clic)
#11 Deficientes
#12 Mães e Pais Estudantes
#13 Regular 75h (Clic)
#14 Conversação (Clic)
#15 Grupo (Clic)
#16 Bombeiro
#23 Normal (a)
#24 Intensivo 30h (Clic)
#25 Intensivo 20h (Clic)
#17 Tempo Parcial
#18 Intensivo 12h (Clic)
#22 Reprovado
#19 Regular 45h (Clic)
#26 Intensivo 10h (Clic)
#27 Regular 60h (Clic)
#28 Intensivo 22h (Clic)
#20 Erasmus
#21 Externo
#29 Vasco da Gama
#30 Protocolo/Parceria com Instituições estrangeira
 
siges.tipo.aluno.normal=1
siges.tipo.aluno.bolseiro=2
siges.tipo.aluno.militar=3
siges.tipo.aluno.trabalhador.estudante=4
siges.tipo.aluno.dirigente.associativo=6
siges.tipo.aluno.deficiente=11
siges.tipo.bombeiro=16
siges.tipo.vascodagama=29
siges.tipo.erasmus=20
 
 
 
 
 
/branches/v3/impl/conf/template/email/courseUnitAnnouncement_pt.txt
1,4 → 1,5
# 0 : Course Unit Name

# 0 : Course Unit Name
# 1 : Title
# 2 : Text
# 3 : Teacher
/branches/v3/impl/conf/template/email/message_ipp_pt_certificated.txt
New file
0,0 → 1,28

<html>
<head>
<title>{1}</title>
</head>
<body>
 
<p>Olá <b>@USER_NOME@</b></p>
 
<p><i>Mensagem de:</i> {0}</p>
<p><i>Assunto:</i> <b><u>{1}</u></b></p>
 
{2}
 
<hr/>
<p>Informação Automática PAE:</p>
<p><i>@USER_NOME@</i>, pode responder a esta solicitação acedendo directamente à sua conta no sistema PAE através do seguinte endereço: </a>
<a href="@URL@">@URL@</a>
<p>Se pretender contactar a entidade que lhe enviou a mensagem, use por favor o seguinte endereço de email: {3}</p>
 
 
 
---------------------------------------------
 
<p>Instituto Politécnico de Portalegre - Sistema PAE</p>
<p><a href="http://pae.ipportalegre.pt">http://pae.ipportalegre.pt</a></p>
</body>
</html>
/branches/v3/impl/conf/template/email/message_ipp_pt.txt
New file
0,0 → 1,24

<html>
<head>
<title>{1}</title>
</head>
<body>
 
 
<p><i>Mensagem de:</i> {0}</p>
<p><i>Assunto:</i> <b><u>{1}</u></b></p>
 
{2}
 
<hr/>
<p>Se pretender responder, use o email: {3}</p>
 
 
 
---------------------------------------------
 
<p>Instituto Politécnico de Portalegre - Sistema PAE</p>
<p><a href="http://pae.ipportalegre.pt">http://pae.ipportalegre.pt</a></p>
</body>
</html>
/branches/v3/impl/conf/berserk/sd.xml
2642,6 → 2642,61
 
 
<service>
<name>QuestionarioPutAssignedAnswers</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>putAssignedAnswers</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioRevertAssignationDetails</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>revertAssignationDetails</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioStartProcessement</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>startProcessement</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioStopProcessement</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>stopProcessement</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
 
 
 
<service>
<name>RunJobSelectCourses</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService</implementationClass>
<description></description>
2715,9 → 2770,79
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioSalvarResposta</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>salvarResposta</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
</filterChains>
</service>
 
QuestionarioSendMessage
QuestionarioSendMessageCursoAfeto
QuestionarioSendMessageUnidadeAfeta
<service>
<name>QuestionarioSendMessage</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>sendMessage</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/>
</filterChains>
</service>
 
<service>
<name>QuestionarioSendMessageCursoAfeto</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>sendMessageCursoAfeto</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/>
</filterChains>
</service>
 
<service>
<name>QuestionarioSendMessageUnidadeAfeta</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>sendMessageUnidadeAfeta</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/>
</filterChains>
</service>
 
<service>
<name>QuestionarioSendMessageAllProcessing</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>sendMessageAllProcessing</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/>
</filterChains>
</service>
 
<service>
<name>SalvarFicheiro</name>
<implementationClass>pt.estgp.estgweb.services.paginasseccoes.SalvarFicheiro</implementationClass>
<description>Salvar Ficheiro</description>
/branches/v3/impl/conf/berserk/fcd.xml
510,6 → 510,17
</filterChain>
 
 
<filterChain>
<name>AdminsOrQuestionarioAdminsOrPedagogico</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("admin") || RoleUsers("questionarios.admin") || RoleUsers("pedagogicCouncil.president"))</expression>
<description>Admins Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
 
 
 
 
 
 
</filterChainsDefinitions>
/branches/v3/impl/src/java/jomm/web/utils/NavPlace.java
149,7 → 149,7
}
catch(Exception e)
{
logger.error(e,e);
logger.info("Message " + msg + " does not exist in MessageProperties will use key");
}
if(msg == null)
return key;
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/EmailPersonalizedCertificated.java
New file
0,0 → 1,131
package pt.estgp.estgweb.utils;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
 
import javax.mail.Message;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 20/Mar/2008
* @time 18:32:21
* @see pt.estgp.estgweb.utils
*/
public class EmailPersonalizedCertificated extends Email implements Serializable
{
 
 
private static final Logger logger = Logger.getLogger(EmailPersonalizedCertificated.class);
 
 
/**FIELDS FOR PERSONALIZED EMAILS**/
private String urlPatternWithoutCetificate = null;
private List<Long> userIds = null;
 
 
 
public EmailPersonalizedCertificated cloneEmailForJob(){
EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject, from, emailTemplateName, arguments);
email = (EmailPersonalizedCertificated) super.cloneEmailForJob(email);
email.urlPatternWithoutCetificate = this.urlPatternWithoutCetificate;
if(this.userIds != null)
{
email.userIds = new ArrayList<Long>();
email.userIds.addAll(this.userIds);
}
return email;
}
 
public EmailPersonalizedCertificated()
{
}
 
public EmailPersonalizedCertificated(String urlPatternWithoutCetificate,
List<Long> userIds)
{
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate;
this.userIds = filterUserIds(userIds);
}
 
 
public EmailPersonalizedCertificated(String subject, String from, String mailTemplateName, List<String> arguments)
{
super( subject, new ArrayList<String>(), from, mailTemplateName, arguments, Message.RecipientType.TO);
}
 
public EmailPersonalizedCertificated(String subject, String from, String mailTemplateName, List<String> arguments,
String urlPatternWithoutCetificate,
List<Long> userIds)
{
super( subject, new ArrayList<String>(), from, mailTemplateName, arguments, Message.RecipientType.TO);
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate;
this.userIds = filterUserIds(userIds);
}
 
 
 
public boolean isSystemAssumingTestEmail() {
return systemAssumingTestEmail;
}
 
public String getFromName() {
return fromName;
}
 
public void setFromName(String fromName) {
this.fromName = fromName;
}
 
public String getSubject()
{
return subject;
}
 
public List<String> getRecipients()
{
return recipients;
}
 
public void setRecipients(List<String> recipients)
{
systemAssumingTestEmail = true;//ja nao estao sobre
this.recipients = filterRecipients(recipients);
 
}
 
public String getUrlPatternWithoutCetificate() {
return urlPatternWithoutCetificate;
}
 
public void setUrlPatternWithoutCetificate(String urlPatternWithoutCetificate) {
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate;
}
 
public List<Long> getUserIds() {
return userIds;
}
 
public void setUserIds(List<Long> userIds) {
this.userIds = filterUserIds(userIds);
}
 
/**
* Garante que os users Idss não são usados em testes
 
* @return
*/
 
 
protected List<Long> filterUserIds(List<Long> userIds)
{
if(Globals.TEST_ENVIRONEMENT)
{
userIds = new ArrayList<Long>();
userIds.add(new Long(1));//Adding super user
}
return userIds;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/Email.java
1,20 → 1,16
package pt.estgp.estgweb.utils;
 
import jomm.utils.TemplateUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.email.SendEmailService;
 
import javax.mail.*;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;
import java.util.Properties;
import javax.mail.Message;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.text.MessageFormat;
import java.io.Serializable;
 
import pt.estgp.estgweb.Globals;
 
/**
* @author Jorge Machado
* @date 20/Mar/2008
25,16 → 21,42
{
 
 
private boolean isHtml = false;
private String subject;
private List<String> recipients;
private Message.RecipientType type = Message.RecipientType.TO;
private String from;
private String emailTemplateName;
private List<String> arguments;
private String fromName = null;
private static final Logger logger = Logger.getLogger(Email.class);
 
protected boolean systemAssumingTestEmail = false;
protected boolean isHtml = false;
protected String subject;
protected List<String> recipients;
protected List<String> recipientsCC = null;
protected Message.RecipientType type = Message.RecipientType.TO;
protected String from;
protected String emailTemplateName;
protected List<String> arguments;
protected String fromName = null;
 
 
 
 
 
public Email cloneEmailForJob(){
Email email = new Email(subject,recipients,from,emailTemplateName,arguments,type);
return cloneEmailForJob(email);
}
public Email cloneEmailForJob(Email email){
 
email.systemAssumingTestEmail = this.systemAssumingTestEmail;
email.isHtml = this.isHtml;
email.subject = this.subject;
email.recipients = this.recipients;
email.type = this.type;
email.from = this.from;
email.emailTemplateName = this.emailTemplateName;
email.arguments = this.arguments;
email.fromName = this.fromName;
return email;
}
 
 
public boolean isHtml() {
return isHtml;
}
43,10 → 65,13
isHtml = html;
}
 
public Email() {
}
 
public Email(String subject, List<String> recipients, String from, String mailTemplateName, List<String> arguments)
{
this.subject = subject;
this.recipients = recipients;
this.recipients = filterRecipients(recipients, arguments, mailTemplateName);;
this.from = from;
this.emailTemplateName = mailTemplateName;
this.arguments = arguments;
56,12 → 81,48
{
this.type = type;
this.subject = subject;
this.recipients = recipients;
this.recipients = filterRecipients(recipients, arguments, mailTemplateName);
this.from = from;
this.emailTemplateName = mailTemplateName;
this.arguments = arguments;
 
 
}
 
protected List<String> filterRecipients(List<String> recipients,List<String> arguments,String template)
{
if(Globals.TEST_ENVIRONEMENT)
{
systemAssumingTestEmail = true;
logger.info("SISTEMA EM MODO DE TESTES, iria enviar email para os seguintes recipientes:");
System.out.println(recipients);
logger.info("Mensagem que ia ser enviada:");
logger.info(SendEmailService.getEmailTextMessage(template, arguments));
logger.info("SISTEMA EM MODO DE TESTES: Vai enviar apenas para o mail de testes");
recipients = new ArrayList<String>();
recipients.add(Globals.ADMIN_EMAIL);
}
return recipients;
}
protected List<String> filterRecipients(List<String> recipients)
{
if(Globals.TEST_ENVIRONEMENT)
{
systemAssumingTestEmail = true;
logger.info("SISTEMA EM MODO DE TESTES, iria enviar email para os seguintes recipientes:");
System.out.println(recipients);
logger.info("Nao se sabe a Mensagem que ia ser enviada");
logger.info("SISTEMA EM MODO DE TESTES: Vai enviar apenas para o mail de testes");
recipients = new ArrayList<String>();
recipients.add(Globals.ADMIN_EMAIL);
}
return recipients;
}
 
public boolean isSystemAssumingTestEmail() {
return systemAssumingTestEmail;
}
 
public String getFromName() {
return fromName;
}
82,7 → 143,9
 
public void setRecipients(List<String> recipients)
{
this.recipients = recipients;
systemAssumingTestEmail = true;//ja nao estao sobre
this.recipients = filterRecipients(recipients);
 
}
 
public String getFrom()
132,6 → 195,17
 
public void setType(Message.RecipientType type)
{
this.type = type;
//TODO WHEN BACK TO BCC REMOVE this
this.type = Message.RecipientType.TO;
//this.type = type;
}
 
 
public List<String> getRecipientsCC() {
return recipientsCC;
}
 
public void setRecipientsCC(List<String> recipientsCC) {
this.recipientsCC = recipientsCC;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/Globals.java
125,7 → 125,7
public static final String TMP_DIR = ConfigProperties.getProperty("tmp.dir");
public static final String DATA_DIR = ConfigProperties.getProperty("data.dir");
public static final String JOB_SERVICES_LOG_DIR = ConfigProperties.getProperty("data.dir") + java.io.File.separator + "jobslogs";
;
 
public static final String EMAIL_SERVER_HOST = ConfigProperties.getProperty("email.server");
public static final String EMAIL_SERVER_SECURITY = ConfigProperties.getProperty("email.server.security");
public static final int EMAIL_SERVER_SECURITY_TLS = ConfigProperties.getIntProperty("email.server.security.tls");
138,7 → 138,17
public static final String EMAIL_SERVER_USERNAME = ConfigProperties.getProperty("email.user");
public static final String EMAIL_SERVER_PASSWORD = ConfigProperties.getProperty("email.password");
 
 
 
 
 
public static final String ADMIN_EMAIL = ConfigProperties.getProperty("admin.email");
public static final String ADMIN_EMAIL_2 = ConfigProperties.getProperty("admin.email.2");
 
public static final boolean SYSTEM_EMAIL_USE_SECURITY = ConfigProperties.getBooleanProperty("email.use.security");
public static final boolean SYSTEM_EMAIL_USE_ROUND_ROBIN = ConfigProperties.getBooleanProperty("email.use.round.robin");
public static final String SYSTEM_EMAIL_BOX = ConfigProperties.getProperty("email.from");
 
public static final String ANNOUNCEMENT_TYPE_NEWS = "news";
public static final String ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS = "top.flash.news";
public static final String ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS = "bottom.flash.news";
181,7 → 191,19
public static final String SIGES_WEBSERVICE_SECRET = ConfigProperties.getProperty("ws.siges.secret");
 
 
public static final String SIGES_TIPO_ALUNO_NORMAL = ConfigProperties.getProperty("siges.tipo.aluno.normal");
public static final String SIGES_TIPO_ALUNO_BOLSEIRO = ConfigProperties.getProperty("siges.tipo.aluno.bolseiro");
public static final String SIGES_TIPO_ALUNO_MILITAR = ConfigProperties.getProperty("siges.tipo.aluno.militar");
public static final String SIGES_TIPO_ALUNO_TRABALHADOR_ESTUDANTE = ConfigProperties.getProperty("siges.tipo.aluno.trabalhador.estudante");
public static final String SIGES_TIPO_ALUNO_DIRIGENTE_ASSOCIATIVO = ConfigProperties.getProperty("siges.tipo.aluno.dirigente.associativo");
public static final String SIGES_TIPO_ALUNO_DEFICIENTE = ConfigProperties.getProperty("siges.tipo.aluno.deficiente");
public static final String SIGES_TIPO_ALUNO_BOMBEIRO = ConfigProperties.getProperty("siges.tipo.aluno.bombeiro");
public static final String SIGES_TIPO_ALUNO_VASCODAGAMA = ConfigProperties.getProperty("siges.tipo.vascodagama");
public static final String SIGES_TIPO_ALUNO_ERASMUS = ConfigProperties.getProperty("siges.tipo.erasmus");
 
 
 
 
public static final long URL_STAT_CHART_EXPIRE_INTERVAL = ConfigProperties.getIntProperty("url.stat.image.expire.interval.time.minutes");
public static final String URL_STAT_CHART_TMP_DIR = ConfigProperties.getProperty("url.stat.tmp.dir");
public static final int URL_STAT_CACHE_SIZE = ConfigProperties.getIntProperty("url.stat.click.cache.size");
345,9 → 367,13
public static final String EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT = "courseUnitAnnouncement_pt.txt";
public static final String EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN = "courseUnitAnnouncement_en.txt";
 
public static final String EMAIL_MESSAGE_TEMPLATE_EN = "message_en.txt";
public static final String EMAIL_MESSAGE_TEMPLATE_PT = "message_pt.txt";
public static final String EMAIL_MESSAGE_TEMPLATE_EN = "message_en.txt";
 
 
public static final String EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED = "message_ipp_pt_certificated.txt";
public static final String EMAIL_MESSAGE_IPP_TEMPLATE_PT = "message_ipp_pt.txt";
 
public static final String EMAIL_COURSEUNIT_WORK_SUBJECT_PT = ConfigProperties.getProperty("email.courseunit.work.subject.pt");
public static final String EMAIL_COURSEUNIT_WORK_SUBJECT_EN = ConfigProperties.getProperty("email.courseunit.work.subject.en");
public static final String EMAIL_COURSEUNIT_WORK_RELATIVE_URL = ConfigProperties.getProperty("email.courseunit.work.relative.url");
419,6 → 445,7
 
public static final String ROLE_INVITED = "invited";
 
public static final String SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE = ConfigProperties.getProperty("system.mail.standard.certificated.home.page");
public static final String SYSTEM_THEME = ConfigProperties.getProperty("system.theme");
public static final String AUTHENTICATE_SERVICE = ConfigProperties.getProperty("authentication.policy.service");
public static final String AUTHENTICATE_SERVICE_USERNAME_KEY = ConfigProperties.getProperty("authentication.policy.username.msg.key");
429,10 → 456,15
 
 
 
public static final boolean MODO_PAE_ENABLED = ConfigProperties.getBooleanProperty("mode.pae.enabled");
public static final String QUESTIONARIOS_GERAIS = "questionarios.gerais";
public static final String QUESTIONARIOS_ADMIN = "questionarios.admin";
public static final String QUESTIONARIOS_ASSIGNEMENTS_ADMIN = "questionarios.atribuicoes.admin";
public static final String QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN = "questionarios.atribuicoes.admin";
public static final String QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN = "questionarios.atribuicoes.check_teachers";
public static final String QUESTIONARIOS_TIPOLOGIAS_ADMIN = "questionarios.tipologias.admin";
 
public static final String ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO = "pedagogicCouncil.president";
 
public static final boolean USE_XSL_CACHE =ConfigProperties.getBooleanProperty("xsl.use.cache");
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitAdminService.java
48,7 → 48,7
}
cUV.persistViewAdminInObject(courseUnit);
 
courseUnit.setInstitutionCode("" + DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode());
 
//por o curso
//por os profs
//por alunos
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/impl/EmailTransport.java
New file
0,0 → 1,135
package pt.estgp.estgweb.services.email.impl;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
 
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import java.util.Properties;
 
/**
* Created by jorgemachado on 13/06/16.
*/
public class EmailTransport
{
 
private static final Logger logger = Logger.getLogger(EmailTransport.class);
 
Session session = null;
Transport transport = null;
 
String sendFromAddress;
String password;
String identifier;
 
public EmailTransport(String identifier, String sendFromAddress,String password)
{
this.identifier = identifier;
this.sendFromAddress = sendFromAddress;
this.password = password;
}
 
public synchronized Transport getEmailTransport()
{
if(session == null || transport == null || !transport.isConnected())
{
logger.info("Transport(" + identifier + ") CONNECTION TO TRANSPORT DOES NOT EXIST OR FAIL WILL REOPEN : " + sendFromAddress + " password: " + password);
}
else
{
System.out.println("Transport(" + identifier + ") OK --> RETURNING Transport");
return transport;
}
 
 
 
 
// Set up properties for mail session
//Properties props = System.getProperties();
Properties props = new Properties();
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST);
props.setProperty("mail.transport.protocol", "smtp");//todo new
javax.mail.Authenticator authenticator = null;
if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0)
{
logger.info("Transport(" + identifier + ") Using Email Security TLS");
 
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS);
authenticator = new javax.mail.Authenticator() {
 
protected PasswordAuthentication getPasswordAuthentication() {
System.out.println("Email from:" + sendFromAddress + " pass:" + password);
return new PasswordAuthentication(sendFromAddress, password);
}
};
}
else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0)
{
logger.info("Transport(" + identifier + ") Using Email Security SSL");
 
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL);
authenticator = new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
System.out.println("Email from:" + sendFromAddress + " pass:" + password);
 
return new PasswordAuthentication(sendFromAddress,password);
}
};
}
else
{
 
}
 
 
 
System.out.println("Transport(" + identifier + ") Autenticator != null :" + (authenticator != null));
// Get session
/*Session session = authenticator != null ?
Session.getDefaultInstance(props, authenticator)
: Session.getDefaultInstance(props) ;
*/
 
session = authenticator != null ?
Session.getInstance(props, authenticator)
: Session.getInstance(props) ;
 
try {
transport = session.getTransport("smtp");
System.out.println("Transport(" + identifier + ") before connect isConnected:" + transport.isConnected());
transport.connect();
System.out.println("Transport(" + identifier + ") after connect isConnected:" + transport.isConnected());
} catch (MessagingException e) {
logger.error(e,e);
return null;
}
 
session.setDebug(true);
session.setDebugOut(System.out);
return transport;
}
 
public String getIdentifier() {
return identifier;
}
 
public Session getSession() {
return session;
}
 
public Transport getTransport() {
return transport;
}
 
public String getSendFromAddress() {
return sendFromAddress;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/impl/EmailTransportPool.java
New file
0,0 → 1,89
package pt.estgp.estgweb.services.email.impl;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
 
import javax.mail.Transport;
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 13/06/16.
*/
public class EmailTransportPool
{
private static final Logger logger = Logger.getLogger(EmailTransportPool.class);
 
private List<EmailTransport> pool = new ArrayList<EmailTransport>();
 
//SINGLETON INSTANCE
static EmailTransportPool instance = new EmailTransportPool();
 
public static EmailTransportPool getInstance(){
return instance;
}
 
String[] serverEmails;
 
private EmailTransportPool()
{
serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT];
for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++)
{
serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX;
}
 
if(Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN)
{
for(String emailFrom: serverEmails)
{
String pass = Globals.EMAIL_SERVER_PASSWORD;
logger.info("POOL: Adding to POOL " + emailFrom + " with pass: " + pass);
createTransport(emailFrom,emailFrom,pass);
}
}
else
{
logger.info("POOL: Will use only system mail box");
createTransport(Globals.SYSTEM_EMAIL_BOX,Globals.SYSTEM_EMAIL_BOX,Globals.EMAIL_SERVER_PASSWORD);
}
}
 
private void createTransport(String identifier, String emailFrom, String emailServerPassword)
{
EmailTransport emailTransport = new EmailTransport(identifier,emailFrom,emailServerPassword);
pool.add(emailTransport);
}
 
int indexPool = -1;
 
public synchronized EmailTransport getAvailableTransportFromPool()
{
int tries = pool.size();
while(tries > 0)
{
tries--;
 
indexPool++;
 
if(indexPool >= pool.size())
indexPool = 0;
 
EmailTransport emailTransport = pool.get(indexPool);
 
Transport transport = emailTransport.getEmailTransport();
if(transport.isConnected())
{
logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is OK connected, will return this one");
return emailTransport;
}
else
{
logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is not connected, will try another");
}
}
logger.warn("EMAIL POOL: Transport (There are no available transports)");
return null;
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/EMAILJob.java
33,50 → 33,66
 
 
 
//TODO WHEN BACK TO BCC REMOVE this to 20 and remove Thread
private static final int NUMBER_EMAILS_TO = 1;
private static final int pauseTime = 1000;
 
 
public void runJob()
{
if(Globals.TEST_ENVIRONEMENT)
{
String warn = "System in TEST Environement - will not send EMAIL";
logger.warn(warn);
return;
}
try
{
List<String> recipientsOriginal = new ArrayList<String>();
List<String> recipients = new ArrayList<String>();
recipients.addAll(email.getRecipients());
recipientsOriginal.addAll(email.getRecipients());
while(recipients.size() > 0)
{
List<String> recipientsToSend = new ArrayList<String>();
final Email cloned = email.cloneEmailForJob();
logger.info("Opening new Thread to send emails");
new Thread(
new Runnable() {
@Override
public void run() {
if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail())
{
String warn = "System in TEST Environement - will not send EMAIL";
logger.warn(warn);
return;
}
try
{
List<String> recipientsOriginal = new ArrayList<String>();
List<String> recipients = new ArrayList<String>();
recipients.addAll(cloned.getRecipients());
recipientsOriginal.addAll(cloned.getRecipients());
while(recipients.size() > 0)
{
List<String> recipientsToSend = new ArrayList<String>();
 
int contador = 0;
Iterator<String> iter = recipients.iterator();
while(iter.hasNext() && contador < 20)
{
recipientsToSend.add(iter.next());
iter.remove();
contador++;
int contador = 0;
Iterator<String> iter = recipients.iterator();
while(iter.hasNext() && contador < NUMBER_EMAILS_TO)
{
recipientsToSend.add(iter.next());
iter.remove();
contador++;
}
cloned.setRecipients(recipientsToSend);
new SendEmailService().sendEmail(cloned);
try {
Thread.sleep(pauseTime);
} catch (InterruptedException e) {
logger.error(e,e);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
logger.error(e,e);
}
cloned.setRecipients(recipientsOriginal);
}
catch (ServiceException e)
{
logger.error("Sending EMAIL:" + e.toString(),e);
}
}
}
email.setRecipients(recipientsToSend);
new SendEmailService().sendEmail(email);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
logger.error(e,e);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
logger.error(e,e);
}
email.setRecipients(recipientsOriginal);
}
catch (ServiceException e)
{
logger.error("Sending EMAIL:" + e.toString(),e);
}
).start();
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/SendEmailService.java
5,13 → 5,17
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.services.email.impl.EmailTransport;
import pt.estgp.estgweb.services.email.impl.EmailTransportPool;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.mail.*;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
19,7 → 23,6
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
 
/**
* @author Jorge Machado
33,16 → 36,123
 
private static final String gradeUnitTemplate = Globals.TEMPLATE_EMAIL_PATH + "/" + Globals.EMAIL_GRADE_UNIT_TEMPLATE;
 
static String[] serverEmails;
/*static String sendFromAddress;*/
 
public SendEmailService() {
 
 
}
 
/*static String[] serverEmails;
static int serverEmailPos = -1;
static Session session = null;
static Transport transport = null;
 
static{
 
static
{
serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT];
for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++)
{
serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX;
}
}
 
public static synchronized Transport getEmailTransport()
{
 
 
if(session == null || transport == null || !transport.isConnected())
{
sendFromAddress = Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN ?
getRoundRobinEmailUser() : Globals.SYSTEM_EMAIL_BOX;
 
logger.info("CONNECTION TO TRANSPORT FAIL WILL REOPEN : " + sendFromAddress + " using round robin: " + Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN);
}
else
{
System.out.println("TRANSPORT OK RETURNING");
return transport;
}
 
 
 
 
// Set up properties for mail session
//Properties props = System.getProperties();
Properties props = new Properties();
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST);
props.setProperty("mail.transport.protocol", "smtp");//todo new
final String username = Globals.EMAIL_SERVER_USERNAME;
final String password = Globals.EMAIL_SERVER_PASSWORD;
javax.mail.Authenticator authenticator = null;
if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0)
{
logger.info("Using Email Security TLS");
 
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS);
authenticator = new javax.mail.Authenticator() {
 
protected PasswordAuthentication getPasswordAuthentication() {
System.out.println("Email from:" + sendFromAddress + " pass:" + password);
return new PasswordAuthentication(sendFromAddress, password);
}
};
}
else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0)
{
logger.info("Using Email Security SSL");
 
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL);
authenticator = new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
System.out.println("Email from:" + sendFromAddress + " pass:" + password);
 
return new PasswordAuthentication(sendFromAddress,password);
}
};
}
else
{
 
}
 
 
 
System.out.println("Autenticator != null :" + (authenticator != null));
// Get session
//Session session = authenticator != null ?
// Session.getDefaultInstance(props, authenticator)
// : Session.getDefaultInstance(props) ;
 
 
session = authenticator != null ?
Session.getInstance(props, authenticator)
: Session.getInstance(props) ;
 
try {
 
System.out.println("toString:" + session.getTransport("smtp").toString());
transport = session.getTransport("smtp");
System.out.println("before connect isConnected:" + transport.isConnected());
transport.connect();
System.out.println("after connect isConnected:" + transport.isConnected());
} catch (MessagingException e) {
logger.error(e,e);
return null;
}
 
session.setDebug(true);
session.setDebugOut(System.out);
return transport;
 
}
private static synchronized String getRoundRobinEmailUser()
{
serverEmailPos++;
52,64 → 162,31
}
return serverEmails[serverEmailPos];
}
*/
 
public void sendEmail(Email email) throws ServiceException
{
if(Globals.TEST_ENVIRONEMENT)
sendEmail(email,null,null);
}
public void sendEmail(Email email,String url,String nome) throws ServiceException
{
if(Globals.TEST_ENVIRONEMENT && !email.isSystemAssumingTestEmail())
{
String warn = "System in TEST Environement - will not send EMAIL";
logger.warn(warn);
return;
}
try{
final String sendFromAddress = getRoundRobinEmailUser();
 
// Set up properties for mail session
Properties props = System.getProperties();
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST);
final String username = Globals.EMAIL_SERVER_USERNAME;
final String password = Globals.EMAIL_SERVER_PASSWORD;
javax.mail.Authenticator authenticator = null;
if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0)
{
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS);
authenticator = new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(sendFromAddress, password);
}
};
}
else if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0)
{
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL);
authenticator = new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(sendFromAddress,password);
}
};
}
else
{
//Transport transport = getEmailTransport();
//MimeMessage message = new MimeMessage(session);
 
}
EmailTransport emailTransport = EmailTransportPool.getInstance().getAvailableTransportFromPool();
MimeMessage message = new MimeMessage(emailTransport.getSession());
 
 
 
 
 
 
// Get session
Session session = Session.getDefaultInstance(props, authenticator);
session.setDebug(true);
session.setDebugOut(System.out);
 
// Create message
MimeMessage message = new MimeMessage(session);
// Set the recipients of the message
boolean valid = false;
for (String recipient : email.getRecipients())
117,23 → 194,41
if(Email.validEmail(recipient))
{
valid=true;
message.addRecipient(email.getType(),new InternetAddress(recipient));
logger.info("Adding recipient to transport:"+recipient);
message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient));
logger.info("Adding recipient (" + email.getType().toString() + ") to transport:"+recipient);
}
}
 
if(email.getRecipientsCC() != null)
{
for (String recipient : email.getRecipientsCC())
{
if(Email.validEmail(recipient))
{
//valid=true;
message.addRecipient(Message.RecipientType.CC,new InternetAddress(recipient));
logger.info("Adding recipient CC (" + email.getType().toString() + ") to transport:"+recipient);
}
}
}
if(valid)
{
 
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName());
// Format the mail message
String fullMessage = MessageFormat.format(content, email.getArguments().toArray());
String fullMessage = getEmailTextMessage(email);
 
if(url != null && nome != null)
{
logger.info("Requesting certificated Email, will replace fields in template");
fullMessage = fullMessage.replaceAll("@USER_NOME@",nome);
fullMessage = fullMessage.replaceAll("@URL@",url);
}
 
 
logger.info("FROM:" + email.getFrom() + " but using: " + sendFromAddress);
 
logger.info("FROM:" + email.getFrom() + " but using: " + emailTransport.getSendFromAddress());
//if(email.getFromName() != null)
try {
message.setFrom(new InternetAddress(sendFromAddress,sendFromAddress));
message.setFrom(new InternetAddress(emailTransport.getSendFromAddress(),emailTransport.getSendFromAddress()));
} catch (UnsupportedEncodingException e) {
logger.error(e,e);
//message.setFrom(new InternetAddress(sendFromAddress));
146,13 → 241,13
{
 
fullMessage += email.getFrom() != null && email.getFrom().length()>0 && !email.getFrom().equals(Globals.SYSTEM_EMAIL_BOX) ? "<br/><br/>Responda para " + email.getFrom() : "<br/><br/>Por favor não responda a este email";
fullMessage += " <br/> <br/> <h5> Mensagem Segura - enviada através da Google Apps Api através de baco 2015 </h5>";
fullMessage += " <br/> <br/> <h5> Mensagem Segura - enviada através da Google Apps Api </h5>";
 
}
else
{
fullMessage += email.getFrom() != null && email.getFrom().length()>0 && !email.getFrom().equals(Globals.SYSTEM_EMAIL_BOX) ? "\n\nResponda para " + email.getFrom() : "\n\nPor favor não responda a este email";
fullMessage += " \n\n Mensagem Segura - enviada através da Google Apps Api através de baco 2015";
fullMessage += " \n\n Mensagem Segura - enviada através da Google Apps Api ";
}
 
message.setText(fullMessage,"utf-8");
171,7 → 266,9
 
 
 
Transport.send(message);
emailTransport.getTransport().send(message);
//session.getTransport("smtp").sendMessage(message,message.getAllRecipients());
//session.getTransport().close();
}
}
catch(MessagingException e)
181,6 → 278,22
}
}
 
private static String getEmailTextMessage(Email email)
{
return getEmailTextMessage( email.getEmailTemplateName(), email.getArguments().toArray());
}
 
public static String getEmailTextMessage(String template,List<String> arguments)
{
return getEmailTextMessage(template, arguments.toArray());
}
public static String getEmailTextMessage(String template,Object[] arguments)
{
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" +template);
// Format the mail message
return MessageFormat.format(content, arguments);
}
 
public Email getSendUrlToFriendEmail(String url, String from, LangEnum langEnum, List<String> recipients)
{
List<String> arguments = new ArrayList<String>();
293,6 → 406,95
return email;
}
 
public Email getMessageEmailAdulteredFromEmailIpp(String fromEmail, String from, String subject,String text, List<String> emails, User user)
{
// # 0 : From
// # 1 : Subject
// # 2 : Text
// # 3 : FromEmail Adultered in message
// # 4 : URL todo with certificate
List<String> arguments = new ArrayList<String>();
arguments.add(from);
arguments.add(subject);
arguments.add(text);
arguments.add(fromEmail);
 
String template;
 
template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT;
 
 
List<String> recipients = new ArrayList<String>();
for(String e: emails)
{
if(Email.validEmail(e))
recipients.add(e);
}
 
logger.info("subject: " + subject);
if(fromEmail == null)
logger.info("user: " + user.getEmail());
else
logger.info("user altered to: " + fromEmail);
logger.info("template: " + template);
logger.info("arguments:");
for(String arg: arguments)
logger.info(arg);
logger.info("recipients:");
for(String rec: recipients)
logger.info(rec);
logger.info("arguments end");
fromEmail = fromEmail == null ? user.getEmail() : fromEmail;
Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.TO);
email.setFromName(from + " (PAE-IPP)");
return email;
}
 
public EmailPersonalizedCertificated getMessageEmailAdulteredFromEmailIppCertificated(
String fromEmail, String from, String subject,String text, User user,
List<Long> userIds,
String url
)
{
// # 0 : From
// # 1 : Subject
// # 2 : Text
// # 3 : FromEmail Adultered in message
// # 4 : URL todo with certificate
List<String> arguments = new ArrayList<String>();
arguments.add(from);
arguments.add(subject);
arguments.add(text);
arguments.add(fromEmail);
 
String template;
 
template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED;
 
 
logger.info("Preparing batch work for Personalized Emails Certificated");
logger.info("subject: " + subject);
if(fromEmail == null)
logger.info("user: " + user.getEmail());
else
logger.info("user altered to: " + fromEmail);
logger.info("template: " + template);
logger.info("arguments:");
for(String arg: arguments)
logger.info(arg);
logger.info("userIds:" + userIds);
logger.info("arguments end");
fromEmail = fromEmail == null ? user.getEmail() : fromEmail;
EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject ,fromEmail,template,arguments,
url,
userIds);
email.setFromName(from + " (PAE-IPP)");
 
return email;
}
 
 
 
public Email getMessageEmailOld(String from, String subject,String text, LangEnum langEnum, String target, List<User> users, User user)
{
// # 0 : From
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/Emails.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/EMAILJobPersonalizedCertificated.java
New file
0,0 → 1,139
package pt.estgp.estgweb.services.email;
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.authenticate.AuthenticateService;
import pt.estgp.estgweb.services.jobs.JobHandler;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 11/Jul/2008
* @see pt.estgp.estgweb.services.sms
*/
public class EMAILJobPersonalizedCertificated implements JobHandler, Serializable
{
private static final Logger logger = Logger.getLogger(EMAILJobPersonalizedCertificated.class);
 
private EmailPersonalizedCertificated email;
 
 
 
 
public EMAILJobPersonalizedCertificated(EmailPersonalizedCertificated email)
{
this.email = email;
}
 
 
private static final int pauseTime = 1000;
 
 
public void runJob()
{
final EmailPersonalizedCertificated cloned = email.cloneEmailForJob();
 
 
logger.info("Opening new Thread to send emails");
new Thread(
new Runnable() {
@Override
public void run() {
if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail())
{
String warn = "System in TEST Environement - will not send EMAIL";
logger.warn(warn);
return;
}
try
{
String URL_PREFIX = cloned.getUrlPatternWithoutCetificate();
if(URL_PREFIX.indexOf("?") < 0)
URL_PREFIX = URL_PREFIX + "?certificate=";
else
URL_PREFIX = URL_PREFIX + "&certificate=";
 
cloned.setRecipients(new ArrayList<String>());
 
SendEmailService sendEmailService = new SendEmailService();
 
for(long userId: cloned.getUserIds())
{
 
try{
AbstractDao.getCurrentSession().beginTransaction();
AbstractDao.getCurrentSession().clear();
User user = DaoFactory.getUserDaoImpl().load(userId);
String certificate = new AuthenticateService().createCertificate(user);
String emailStr = user.getEmail();
String outEmail = user.getOutEmail();
String preferrefEmail = user.getPreferrefEmail();
String toEmail = null;
 
if(preferrefEmail != null && Email.validEmail(preferrefEmail))
toEmail = preferrefEmail;
else if(emailStr != null && Email.validEmail(emailStr))
toEmail = emailStr;
else if(outEmail != null && Email.validEmail(outEmail))
toEmail = outEmail;
String nome = user.getName();
AbstractDao.getCurrentSession().getTransaction().commit();
 
if(toEmail != null)
{
List<String> ccEmails = new ArrayList<String>();
if(emailStr != null && Email.validEmail(emailStr) && !toEmail.equals(emailStr))
ccEmails.add(emailStr);
if(outEmail != null && Email.validEmail(outEmail) && !toEmail.equals(outEmail))
ccEmails.add(outEmail);
 
 
cloned.setRecipientsCC(ccEmails);
cloned.getRecipients().clear();
cloned.getRecipients().add(toEmail);
 
String finalUrl = URL_PREFIX + certificate;
 
sendEmailService.sendEmail(cloned, finalUrl, nome);
 
try {
logger.info("Watting to send another email: sent to" + toEmail);
//Thread.sleep(pauseTime);
Thread.sleep(pauseTime);
} catch (InterruptedException e) {
logger.error(e,e);
}
}
 
 
}catch(Throwable e)
{
logger.error(e,e);
}
 
}
 
logger.info("No more user ids to send email. exiting");
 
 
}
catch (Throwable e)
{
logger.error("Sending EMAIL:" + e.toString(),e);
}
}
}
).start();
}
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
59,6 → 59,7
int studentsChangeBI = 0;
int unitsAddedToStudents = 0;
int alunosErasmusCadeirasEcontradas = 0;
int alunosSemTurmaParaAUnidades = 0;
int turmaMoreThanOneRegularCourse = 0;
int unidadesProcuradasNumCursoAleatorio = 0;
List<String> turmasMoreThanOneCourse = new ArrayList<String>();
67,6 → 68,8
int estudantesComCadeirasSemTurma = 0;
int turmasComCodigoNullRemovidas = 0;
int unidadesSoComAlunosExtra = 0;
int turmasVindasANullDoSIGES = 0;
int turmasVindasANullDoSIGESEncontradasNoutroCampo = 0;
 
 
 
102,6 → 105,8
turmasComCodigoNullRemovidas = 0;
unidadesSoComAlunosExtra = 0;
unidadesProcuradasNumCursoAleatorio = 0;
alunosSemTurmaParaAUnidades = 0;
turmasVindasANullDoSIGES = 0;
ImportCourseService.resetCourseYearTurmaPolicy();
 
 
162,6 → 167,9
newUser = true;
}
 
//if(alunoSiges.getCodigo() == 11211)
// System.out.println("Aqui");
 
persist(alunoSiges, s, newUser,year,institutionCode,activeImportYearParaVerificacaoDePropinasEmDia,logMessages,service);
 
if(studentComUnidadesRepetidas)
263,7 → 271,19
serviceLogInfo("#Units not Removed because localy added: " + unitsLocalAddedNotRemoved);
serviceLogInfo("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
serviceLogInfo("#Alunos com Unidades repetidas: " + unitsRepeated);
serviceLogInfo("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
serviceLogWarn("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
if(turmasVindasANullDoSIGES > 0)
{
serviceLogError("######!!!!!Turmas a NULL NO SIGES " + turmasVindasANullDoSIGES + " - POSSIVEL CAMPO DE TURMA diferente de TURMA_T na tabela T_INSCR, procure no LOG pela frase: (turmasVindasANullDoSIGES) ");
}
if(turmasVindasANullDoSIGESEncontradasNoutroCampo > 0)
{
serviceLogInfo("######!!!!!Foram no entanto encontradas noutro campo P L TP O C S E: " + turmasVindasANullDoSIGESEncontradasNoutroCampo + " turmas ver mais info no LOG");
}
if(alunosSemTurmaParaAUnidades > 0)
{
serviceLogError("######!!!!!Alunos com Unidade mas sem Turma: " + alunosSemTurmaParaAUnidades + " -> verificar situação junto da administração de software do PAE - procure no LOG pela frase:(alunosSemTurmaParaAUnidades)");
}
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)
325,6 → 345,18
logger.info("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
logger.info("#Alunos com Unidades repetidas: " + unitsRepeated);
logger.info("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
if(turmasVindasANullDoSIGES > 0)
{
logger.error("######!!!!!Turmas a NULL NO SIGES " + turmasVindasANullDoSIGES + " - POSSIVEL CAMPO DE TURMA diferente de TURMA_T na tabela T_INSCR procure no LOG pela frase: (turmasVindasANullDoSIGES) ");
}
if(turmasVindasANullDoSIGESEncontradasNoutroCampo > 0)
{
logger.info("######!!!!!Foram no entanto encontradas noutro campo P L TP O C S E: " + turmasVindasANullDoSIGESEncontradasNoutroCampo + " turmas ver mais info no LOG");
}
if(alunosSemTurmaParaAUnidades > 0)
{
logger.error("######!!!!!Alunos com Unidade mas sem Turma: " + alunosSemTurmaParaAUnidades + " -> verificar situação junto da administração de software do PAE - procure no LOG pela frase:(alunosSemTurmaParaAUnidades)");
}
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\")");
 
510,16 → 542,18
"where courseunit.importYear=\"" + year + "\" and courseunit.institutionCode = \"" + institutionCode + "\" and turmas.studentId is null ");
ResultSet rs = ps.executeQuery();
List<Integer> longs = new ArrayList<Integer>();
//alunosSemTurmaParaAUnidades = longs.size();
while(rs.next())
{
longs.add(rs.getInt("sigesCode"));
}
alunosSemTurmaParaAUnidades = longs.size();
rs.close();
ps.close();
 
if(longs.size() > 0)
{
String msgS = "Existem estudantes no BACO com unidades sem turma respectiva ano: " + year + " institution:" + institutionCode + " possiveis adicionados manualmente, confirmar";
String msgS = "(alunosSemTurmaParaAUnidades) ATENÇÃO_ Existem estudantes no BACO com unidades sem turma respectiva ano: " + year + " institution:" + institutionCode + " possiveis adicionados manualmente, confirmar";
serviceLogWarn(msgS);
logger.warn(msgS);
msgS = "";
568,8 → 602,8
estudantesDesaparecidosDoSigesNesteAno++;
Student s = DaoFactory.getStudentDaoImpl().loadBySigesCode(c);
StudentImpl studentImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(s);
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl,institutionCode);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>(),institutionCode);
}
}
else
835,8 → 869,8
serviceLogWarn("ATENTION STUDENT WITH ZERO UNITS: codigo " + alunoSiges.getCodigo());
logger.warn("ATENTION STUDENT WITH ZERO UNITS: codigo " + alunoSiges.getCodigo());
StudentImpl studentImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(student);
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl,institutionCode);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>(),institutionCode);
}
else
{
866,7 → 900,7
 
//PASSO 4 - Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
//turmas separadas : Seguro a verificação de existencia é feita pelo id da unidade curricular no baco nas verificacoes para remocoes
removerUnidadesQueDesapareceramNoSiges(year, unitsFromSigesPersistentInBaco, studentImpl);
removerUnidadesQueDesapareceramNoSiges(year, unitsFromSigesPersistentInBaco, studentImpl,institutionCode);
 
//PASSO 5 - Consistir Turmas do Aluno com novas cadeiras - Turmas do aluno sem cadeira correspondente sao apagadas, novas sao adicionadas
//Este metodo vai necessitar de obter as turmas das unidades que vieram do SIGES atraves do mapa map_CourseUnit_x_Turma
874,11 → 908,11
//em termos de relacoes com turmas na classe CourseUnitTurma
//deste modo se alguma unidade foi adicionada localmente poderá nao ser removida no PASSO 4 e nao havera correspondente
//para a turma nesta tabela map_CourseUnit_x_Turma logo essas turmas nessas unidades nao serao mechidas, um aviso e emitido
consistirTurmasAluno(studentImpl, year, map_CourseUnit_x_Turma);
consistirTurmasAluno(studentImpl, year, map_CourseUnit_x_Turma,institutionCode);
}
}
 
private void consistirTurmasAluno(StudentImpl student, String year, Map<CourseUnit, String> map_CourseUnit_x_Turma) {
private void consistirTurmasAluno(StudentImpl student, String year, Map<CourseUnit, String> map_CourseUnit_x_Turma, int institutionCode) {
//PASSO 1 Para cada cadeira onde o aluno se encontra inscrito
// obter a turma onde o aluno esta' colocado, se nao existir criar e afectar a turma
//PASSO 2 Colocar o aluno nessa turma se ele ainda lá nao estiver
890,15 → 924,13
Map<CourseUnitTurma,Boolean> turmasAfectadas = new HashMap<CourseUnitTurma,Boolean>();
for(CourseUnit cu: student.getSubscribedUnits())
{
if(cu.getImportYear().equals(year))
if(cu.getImportYear().equals(year) && cu.getInstitutionCode().equals(""+institutionCode))
{
if(cu.getTurmas() == null)
{
cu.setTurmas(new HashSet<CourseUnitTurma>());
}
 
// TODO O CODIGO DA TURMA AQUI VEM ANUL NUM CASO QUALQUER ESQUISITO VER O QUE E NO RUN
 
String codigoTurma = map_CourseUnit_x_Turma.get(cu);
if(student.isLocalUnit(cu) && codigoTurma == null)
{
906,14 → 938,14
//mas foi mantida porque foi adicionada manualmente
//deste modo usaremos a turma antiga
//e nao afetaremos uma turma nao afetada, esta nao sera verificada
String msg = "Atenção turma com código null nao sera verificada e' local unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
String msg = "Atenção turma não encontrada para uma unidade do aluno, A unidade não foi importada do SIGES logo não há turma mas nao sera verificada porque e' uma local unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
serviceLogInfo(msg);
logger.info(msg);
}
else if(codigoTurma == null)
{
//Este caso nao deverá acontecer porque no PASSO 4 da persistencia apenas nao se removem as adicionadas localmente
String msg = "Atenção turma com código null e nao e' local unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
String msg = "Atenção turma não encontrada para uma unidade do aluno. A Unidade não foi importada do SIGES ou vinha com turma NULL, logo nao se sabe a turma do aluno para escolher, e não e' uma unidade LOCALMENTE ADICIONADA logo devia vir do SIGES ou ter sido removida - unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
serviceLogError(msg);
logger.error(msg);
}
943,7 → 975,7
while(iter.hasNext())
{
CourseUnitTurmaImpl turma = iter.next();
if(turma.getCourseUnit().getImportYear().equals(year))
if(turma.getCourseUnit().getImportYear().equals(year) && turma.getCourseUnit().getInstitutionCode().equals(institutionCode+""))
{
if(student.isLocalUnit(turma.getCourseUnit()) && turmasAfectadas.get(turma) == null)
{
1006,12 → 1038,12
* @param unitsFromSigesPersistentInBaco
* @param student
*/
private void removerUnidadesQueDesapareceramNoSiges(String year, Set<CourseUnit> unitsFromSigesPersistentInBaco, StudentImpl student) {
private void removerUnidadesQueDesapareceramNoSiges(String year, Set<CourseUnit> unitsFromSigesPersistentInBaco, StudentImpl student,int institutionCode) {
Iterator<CourseUnit> iterNowUnits = student.getSubscribedUnits().iterator();
while(iterNowUnits.hasNext())
{
CourseUnit cUNow = iterNowUnits.next();
if(cUNow.getImportYear().equals(year))
if(cUNow.getImportYear().equals(year) && cUNow.getInstitutionCode().equals(""+institutionCode))
//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
1104,6 → 1136,22
Set<CourseUnit> unitsFromSigesPersistentInBaco = new HashSet<CourseUnit>();
for (Disciplina disciplina : alunoSiges.getDisciplinasInscrito())
{
if(disciplina.getCdTurma() == null)
{
turmasVindasANullDoSIGES++;
String msg = "(turmasVindasANullDoSIGES) ATENÇÃO ERRO: Existe uma turma a null numa inscrição vinda do SIGES, procurar razão: unidade:" + disciplina.getCodigo() + " estudante:" + student.getSigesCode() + " possivelmente campo de turma em uso é errado, Vamos tentar usar o campo de outra TURMA P, L, TP, P, O, C, E, S";
serviceLogWarn(msg);
logger.warn(msg);
if(disciplina.getOutraTurma() != null)
{
turmasVindasANullDoSIGESEncontradasNoutroCampo++;
disciplina.setCdTurma(disciplina.getOutraTurma());
msg = "Encontrada Outra Turma: Atenção vai ser usada a turma " + disciplina.getOutraTurmaCode();
serviceLogWarn(msg);
logger.warn(msg);
}
}
 
boolean cursoFicticio = isCursoFicticio(disciplina.getCodigoCurso().intValue());
Integer codigoDoCurso = disciplina.getCodigoCurso().intValue();
 
1214,7 → 1262,8
{
for(CourseUnit found: courseUnits)
{
map_CourseUnit_x_Turma.put(found,disciplina.getCdTurma());
String turma = disciplina.getCdTurma();
map_CourseUnit_x_Turma.put(found, turma);
}
 
unitsFromSigesPersistentInBaco.addAll(courseUnits);
1306,6 → 1355,31
 
 
}
 
if(alunoSiges.getTiposAlunosRepresentados() != null)
{
for(Aluno.TipoAluno tipo:alunoSiges.getTiposAlunosRepresentados())
{
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_NORMAL))
student.setTipoAlunoNormal(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_ERASMUS))
student.setTipoAlunoErasmus(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_TRABALHADOR_ESTUDANTE))
student.setTipoAlunoTrabalhadorEstudante(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_BOLSEIRO))
student.setTipoAlunoBolseiro(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_BOMBEIRO))
student.setTipoAlunoBombeiro(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_DEFICIENTE))
student.setTipoAlunoDeficiente(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_DIRIGENTE_ASSOCIATIVO))
student.setTipoAlunoDirigenteAssociativo(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_MILITAR))
student.setTipoAlunoMilitar(true);
if(tipo.getCodigoTipoAluno().equals(Globals.SIGES_TIPO_ALUNO_VASCODAGAMA))
student.setTipoAlunoVascodagama(true);
}
}
}
 
/*private CourseUnit tryFindCourseUnitWithOutTurma(DefaultLogMessages logMessages, String cdDuracao, String codigo,String codigoCurso,String cdLectivo,String cdTurma)
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/AlunoDao.java
79,7 → 79,13
if (conn == null) {
conn = getCurrentConnection();
}
PreparedStatement catCMD = conn.prepareStatement("SELECT DISTINCT CSE.T_ALUNOS.CD_ALUNO AS CD_ALUNO 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_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))");
PreparedStatement catCMD = conn.prepareStatement("SELECT DISTINCT " +
" CSE.T_ALUNOS.CD_ALUNO AS CD_ALUNO " +
"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_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))");
ResultSet aReader = catCMD.executeQuery();
while (aReader.next()) {
codigos.add(getDecimal("CD_ALUNO", aReader));
101,12 → 107,19
if (conn == null) {
conn = getCurrentConnection();
}
PreparedStatement catCMD = conn.prepareStatement("SELECT * FROM " + getTable() + " INNER JOIN SIGES.T_INDIVIDUO on SIGES.T_INDIVIDUO.ID_INDIVIDUO = CSE.T_ALUNOS.ID_INDIVIDUO where CD_SITUA_PAR = 1 AND " + getIdColumn() + "=" + codigo);
PreparedStatement catCMD = conn.prepareStatement("SELECT * FROM " + getTable() + " " +
"INNER JOIN SIGES.T_INDIVIDUO on SIGES.T_INDIVIDUO.ID_INDIVIDUO = CSE.T_ALUNOS.ID_INDIVIDUO " +
"where /*CD_SITUA_PAR = 1 AND*/ " + getIdColumn() + "=" + codigo);
ResultSet aReader = catCMD.executeQuery();
 
 
if (aReader.next()) {
Aluno a = load(aReader);
a.disciplinasInscrito = loadDiscilpinasInscrito(codigo, codigoInstituicao, ano);
a.historicos = getHistorico(codigo);
 
obtainTiposAlunoRepresentados(codigo, ano, conn, a);
 
aReader.close();
return a;
}
119,6 → 132,34
return null;
}
 
private void obtainTiposAlunoRepresentados(Integer codigo, String ano, Connection conn, Aluno a) throws SQLException {
PreparedStatement tiposAluno = conn.prepareStatement(
"SELECT DISTINCT CSE.T_TIPALUNO.CD_TIP_ALU AS CD_TIP_ALU, CSE.T_TBTIPALU.DS_TIP_ALU AS DS_TIP_ALU " +
" FROM CSE.T_TIPALUNO " +
" LEFT OUTER JOIN CSE.T_TBTIPALU ON CSE.T_TIPALUNO.CD_TIP_ALU = CSE.T_TBTIPALU.CD_TIP_ALU " +
" where CSE.T_TIPALUNO.CD_ALUNO = " + codigo + " " +
" AND CSE.T_TIPALUNO.CD_LECTIVO = '" + ano + "'");
 
 
ResultSet aReaderTiposAluno = tiposAluno.executeQuery();
a.setTiposAlunosRepresentados(new ArrayList<Aluno.TipoAluno>());
while(aReaderTiposAluno.next())
{
 
Integer cdTipAluno = getDecimal("CD_TIP_ALU",aReaderTiposAluno);
if(cdTipAluno != null && cdTipAluno > 0)
{
Aluno.TipoAluno tipoAluno = new Aluno.TipoAluno();
tipoAluno.setCodigoTipoAluno(""+cdTipAluno);
tipoAluno.setDescTipoAluno(getString("DS_TIP_ALU", aReaderTiposAluno));
a.getTiposAlunosRepresentados().add(tipoAluno);
}
 
}
aReaderTiposAluno.close();
tiposAluno.close();
}
 
/*Mudar a lista para uma lista de Códigos com pelo menos CD_LECTIVO, CD_DISCIP, CD_CURSO, CD_TURMA*/
/*Do lado do Baco as Disciplinas são criadas uma por (CD_LECTIVO, CODIGO, CURSO, SEMESTRE) ficam anexadas todas as turmas encontradas*/
/* O Serviço de Leituras de Sumarios pede apenas os detalhe_aula com codigos de turma igual ao pedido e CD_LECTIVO = actual */
133,14 → 174,23
" 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" +
" CSE.T_INSCRI.CD_TURMA_TP, " +
" CSE.T_INSCRI.CD_TURMA_S, " +
" CSE.T_INSCRI.CD_TURMA_C, " +
" CSE.T_INSCRI.CD_TURMA_O, " +
" CSE.T_INSCRI.CD_TURMA_E " +
" FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP " +
//" INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " +
 
" 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) ");
" (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
160,6 → 210,42
d.cdTipoDisciplina = getDecimal("CD_TIPDIS", aReader);
d.cdDuracao = getString("CD_DURACAO", aReader);
d.cdTurma = getString("CD_TURMA", aReader);
 
if(getString("CD_TURMA_P", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_P", aReader);
d.outraTurmaCode = "P";
}
else if(getString("CD_TURMA_L", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_L", aReader);
d.outraTurmaCode = "L";
}
else if(getString("CD_TURMA_TP", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_TP", aReader);
d.outraTurmaCode = "TP";
}
else if(getString("CD_TURMA_S", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_S", aReader);
d.outraTurmaCode = "S";
}
else if(getString("CD_TURMA_C", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_C", aReader);
d.outraTurmaCode = "C";
}
else if(getString("CD_TURMA_O", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_O", aReader);
d.outraTurmaCode = "O";
}
else if(getString("CD_TURMA_E", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_E", aReader);
d.outraTurmaCode = "E";
}
disciplinas.add(d);
}
//close the reader
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/DisciplinaDao.java
4,6 → 4,7
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasHorario;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasSumario;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasTurma;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
87,7 → 88,7
"CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP=CSE.T_TBDISCIP.CD_DISCIP " +
"INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " +
"WHERE "+
" (((((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))";
" (((((CSE.T_CURSOS.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))";
/**\//SO QUEREMOS 1 e 2
* eliminamos tb inscricoes nao regulares STATUS <> 5</>
* As restantes 5 e 6 so servem para depois procurar a Real para atribuir ao aluno
121,6 → 122,7
d.setTipologiasHorario(loadTipologiasHorario(ano,semestre,d.getCodigoCurso(),d.getCodigo(),conn));
d.setTipologiasSumario(loadTipologiasSumarios(ano,semestre,d.getCodigoCurso(),d.getCodigo(),conn));
d.setTipologiasHorarioTrabalho(loadTipologiasHorarioTrabalho(ano,semestre,d.getCodigoCurso(),d.getCodigo(),conn));
d.setTipologiasTdocTurma(loadTipologiasTdocTurma(codigoInstituicao, ano, semestre, d.getCodigoCurso(), d.getCodigo(), conn));
disciplinas.add(d);
}
//close the reader
193,7 → 195,10
ps.close();
return tipologiasHorario;
}
 
 
private TipologiasSumario loadTipologiasSumarios(String ano,
String semestre,
Integer codigoCurso,
356,5 → 361,46
ps.close();
return tipologiasSumario;
}
 
 
 
private TipologiasTurma loadTipologiasTdocTurma(Integer codigoInstituicao,
String ano,
String semestre,
Integer codigoCurso,
Integer codigoDisciplina,
Connection conn) throws SQLException {
TipologiasTurma tipologiasTurma = new TipologiasTurma();
tipologiasTurma.setTipologias(new ArrayList<TipologiasTurma.TipologiaTurma>());
 
PreparedStatement queryTurmas = conn.prepareStatement
("SELECT DISTINCT CSD.T_DOC_TURMA.CD_DOCENTE AS CD_DOCENTE, CSD.T_DOC_TURMA.CD_TURMA AS CD_TURMA " +
" FROM (CSD.T_DOC_TURMA " +
" INNER JOIN CSE.T_TBDISCIP ON CSE.T_TBDISCIP.CD_DISCIP = CSD.T_DOC_TURMA.CD_DISCIP) " +
" WHERE " +
" CSE.T_TBDISCIP.CD_DISCIP = " + codigoDisciplina + " " +
" AND CSD.T_DOC_TURMA.CD_CURSO = '" + codigoCurso + "'" +
" AND CSD.T_DOC_TURMA.CD_DURACAO = '" + semestre + "'" +
" AND CSD.T_DOC_TURMA.CD_LECTIVO='" + ano + "'" +
" AND CSE.T_TBDISCIP.CD_INSTITUIC=" + codigoInstituicao + " "
);
ResultSet turmas = queryTurmas.executeQuery();
while(turmas.next())
{
TipologiasTurma.TipologiaTurma th = new TipologiasTurma.TipologiaTurma();
th.setCdTurma(getString("CD_TURMA",turmas));
th.setCdDocente(getDecimal("CD_DOCENTE", turmas));
if(th.getCdTurma() != null && th.getCdDocente() > 0)
tipologiasTurma.getTipologias().add(th);
else
logger.error("Tipologia invalida encontrada na disciplina: (" + codigoDisciplina + "): " + th.toString());
 
}
turmas.close();
queryTurmas.close();
 
 
return tipologiasTurma;
}
}
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/DocenteDao.java
205,6 → 205,26
//d.cdTipologia = getDecimal("CD_TIPO_AULA", aReader);
//d.codigoFuncaoDocente = getDecimal("CD_FUNCAO_DOC",aReader);
disciplinas.add(d);
 
PreparedStatement queryTurmas = conn.prepareStatement
("SELECT DISTINCT CSD.T_DOC_TURMA.CD_TURMA AS CD_TURMA " +
" FROM (CSD.T_DOC_TURMA " +
" INNER JOIN CSE.T_TBDISCIP ON CSE.T_TBDISCIP.CD_DISCIP = CSD.T_DOC_TURMA.CD_DISCIP) " +
" WHERE " +
" CSE.T_TBDISCIP.CD_DISCIP = " + d.codigo + " " +
" AND CSD.T_DOC_TURMA.CD_CURSO = '" + d.codigoCurso + "'" +
" AND CSD.T_DOC_TURMA.CD_DURACAO = '" + d.cdDuracao + "'" +
" AND CSD.T_DOC_TURMA.CD_LECTIVO='" + ano + "'" +
" AND CSE.T_TBDISCIP.CD_INSTITUIC=" + codigoInstituicao + " " +
" AND CSD.T_DOC_TURMA.CD_DOCENTE = " + codigo );
ResultSet turmas = queryTurmas.executeQuery();
while(turmas.next())
{
d.turmasDocente.add(turmas.getString("CD_TURMA"));
}
turmas.close();
queryTurmas.close();
 
}
//close the reader
aReader.close();
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/Disciplina.java
1,5 → 1,7
package pt.estgp.estgweb.services.sigesimports.oracle.domain;
 
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 07/01/16.
*/
13,8 → 15,19
public String cdDuracao;
public Integer codigoInstituicao;
public String cdTurma;
public String outraTurma;
public String outraTurmaCode;
 
public String codigoTipoAlunoT;
public String codigoTipoAlunoTP;
 
public String descTipoAlunoT;
public String descTipoAlunoTP;
 
 
public ArrayList<String> turmasDocente = new ArrayList<String>();
 
 
public String nome;
public String nomeCurso;
public String grauCurso;
57,12 → 70,55
public TipologiasHorario tipologiasHorario;
public TipologiasSumario tipologiasSumario;
public TipologiasSumario tipologiasHorarioTrabalho;
public TipologiasTurma tipologiasTdocTurma;
 
public Disciplina()
{
 
}
 
 
public TipologiasTurma getTipologiasTdocTurma() {
return tipologiasTdocTurma;
}
 
public void setTipologiasTdocTurma(TipologiasTurma tipologiasTdocTurma) {
this.tipologiasTdocTurma = tipologiasTdocTurma;
}
 
 
public String getCodigoTipoAlunoT() {
return codigoTipoAlunoT;
}
 
public void setCodigoTipoAlunoT(String codigoTipoAlunoT) {
this.codigoTipoAlunoT = codigoTipoAlunoT;
}
 
public String getCodigoTipoAlunoTP() {
return codigoTipoAlunoTP;
}
 
public void setCodigoTipoAlunoTP(String codigoTipoAlunoTP) {
this.codigoTipoAlunoTP = codigoTipoAlunoTP;
}
 
public String getDescTipoAlunoT() {
return descTipoAlunoT;
}
 
public void setDescTipoAlunoT(String descTipoAlunoT) {
this.descTipoAlunoT = descTipoAlunoT;
}
 
public String getDescTipoAlunoTP() {
return descTipoAlunoTP;
}
 
public void setDescTipoAlunoTP(String descTipoAlunoTP) {
this.descTipoAlunoTP = descTipoAlunoTP;
}
 
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
183,6 → 239,22
this.grauCurso = grauCurso;
}
 
public String getOutraTurma() {
return outraTurma;
}
 
public void setOutraTurma(String outraTurma) {
this.outraTurma = outraTurma;
}
 
public String getOutraTurmaCode() {
return outraTurmaCode;
}
 
public void setOutraTurmaCode(String outraTurmaCode) {
this.outraTurmaCode = outraTurmaCode;
}
 
@Override
public String toString() {
return "Disciplina{" +
192,6 → 264,7
", cdDuracao='" + cdDuracao + '\'' +
", codigoInstituicao=" + codigoInstituicao +
", cdTurma='" + cdTurma + '\'' +
", cdOutraTurma='" + outraTurma + '\'' +
", nome='" + nome + '\'' +
", nomeCurso='" + nomeCurso + '\'' +
", grauCurso='" + grauCurso + '\'' +
200,4 → 273,6
", cdTipologia=" + cdTipologia +
'}';
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/TipologiasTurma.java
New file
0,0 → 1,52
package pt.estgp.estgweb.services.sigesimports.oracle.domain;
 
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 08/03/16.
*/
public class TipologiasTurma
{
 
private ArrayList<TipologiaTurma> tipologias;
 
public ArrayList<TipologiaTurma> getTipologias()
{
return tipologias;
}
 
public void setTipologias(ArrayList<TipologiaTurma> tipologias) {
this.tipologias = tipologias;
}
 
public static class TipologiaTurma
{
String cdTurma;
Integer cdDocente;
 
public String getCdTurma() {
return cdTurma;
}
 
public void setCdTurma(String cdTurma) {
this.cdTurma = cdTurma;
}
 
public Integer getCdDocente() {
return cdDocente;
}
 
public void setCdDocente(Integer cdDocente) {
this.cdDocente = cdDocente;
}
 
 
@Override
public String toString() {
return "TipologiaHorario{" +
"cdTurma='" + cdTurma + '\'' +
", cdDocente=" + cdDocente +
'}';
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/Aluno.java
21,6 → 21,7
public String usernameNetpa;
public ArrayList<Disciplina> disciplinasInscrito;
public ArrayList<AlunoHistorico> historicos;
public ArrayList<TipoAluno> tiposAlunosRepresentados;
 
public Aluno()
{
29,6 → 30,14
//
}
 
public ArrayList<TipoAluno> getTiposAlunosRepresentados() {
return tiposAlunosRepresentados;
}
 
public void setTiposAlunosRepresentados(ArrayList<TipoAluno> tiposAlunosRepresentados) {
this.tiposAlunosRepresentados = tiposAlunosRepresentados;
}
 
public Integer getCodigo() {
return codigo;
}
80,4 → 89,27
public ArrayList<AlunoHistorico> getHistoricos() {
return historicos;
}
 
public static class TipoAluno
{
public String codigoTipoAluno;
public String descTipoAluno;
 
 
public String getCodigoTipoAluno() {
return codigoTipoAluno;
}
 
public void setCodigoTipoAluno(String codigoTipoAluno) {
this.codigoTipoAluno = codigoTipoAluno;
}
 
public String getDescTipoAluno() {
return descTipoAluno;
}
 
public void setDescTipoAluno(String descTipoAluno) {
this.descTipoAluno = descTipoAluno;
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java
152,7 → 152,7
 
try
{
persist(d, t, newUser,year,logMessages);
persist(d, t, newUser,year,logMessages,institutionCode);
}
catch (Exception e)
{
283,7 → 283,7
* @param institutionCode
* @param codigos
*/
private void removerUnidadesDosDesaparecidosDoSiges(String year, int institutionCode, List<Integer> codigos) {
private void removerUnidadesDosDesaparecidosDoSiges(String year, int institutionCode, List<Integer> codigos) {
String msgS;
List<Integer> codesInBaco = DaoFactory.getTeacherDaoImpl().findAllSigesCodesYear(year,institutionCode);
codesInBaco.removeAll(codigos);
305,7 → 305,7
professoresDesaparecidosDoSigesNesteAno++;
Teacher t = DaoFactory.getTeacherDaoImpl().loadBySigesCode(c);
TeacherImpl teacherImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t);
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>());
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>(),institutionCode);
//consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
}
}
435,7 → 435,7
* @param teacher teacher
* @throws Exception .
*/
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year,DefaultLogMessages logmessages) throws Exception
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year,DefaultLogMessages logmessages,int institutionCode) throws Exception
{
String msgS;
try
451,7 → 451,7
/******Logging****/
 
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>());
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>(),institutionCode);
}
else
{
471,7 → 471,7
//PASSO 3
adicionarCadeirasNovasAoDocente(tImpl, unitsFromSigesPersistentInBaco);
//PASSO 4
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco);
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco,institutionCode);
 
}
 
480,19 → 480,18
catch (Exception e)
{
logger.error(e, e);
List<String> emails = new ArrayList<String>();
emails.add(ConfigProperties.getProperty("admin.email"));
List<String> emails = ConfigProperties.getListValues("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/>"));
Email email = new Email("Erro de importa��o de professores",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments);
Email email = new Email("Erro de importacao de professores",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments);
new SendEmailService().sendEmail(email);
throw e;
}
 
}
 
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units)
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units,int institutionCode)
{
//Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
Iterator<CourseUnit> iterNowUnits = teacher.getTeachedUnits().iterator();
500,7 → 499,7
while(iterNowUnits.hasNext())
{
CourseUnit cUNow = iterNowUnits.next();
if(cUNow.getImportYear().equals(year))
if(cUNow.getImportYear().equals(year) && cUNow.getInstitutionCode().equals(institutionCode+""))
{
//Apenas tentamos apagar as unidades do ano corrente.
//Este servico trabalha com unidades importadas do ano que e passado como argumento
672,13 → 671,20
//na criacao de questionarios é natural que falhe alguma coisa por haver aqui unidades a mais
//por isso devera ser ai feita a verificacao destes casos
boolean separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(disciplina.getCodigoCurso(), year, logmessages, this);
/*
este procedimento requer que a turma venha do siges, neste momento nao vem
if(separateTurmas)
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma());
else
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
*/
 
//este procedimento requer que a turma venha do siges, neste momento nao vem
//Este procedimento foi colocado por mim a 6 de Junho para que os questionarios tenham os profs certos nas disciplinas
//e não em duplicado, daqui para baixo o código nunca compara com separateTurmas, o mapa apenas é acedido aqui
//porque daqui para baixo uma vez carregadas as turmas persistentes do SIGES apenas o id é comparado para ver se fica ou se é removida
//Vamos apenas ter de verificar que o código de turma vem na associação do docente à turma.
//NAO DA A TURMA NUNCA VEM DO SIGENS PARA NAO DUPLICAR TURMAS NO JOIN
//RESOVE-SE NA ATRIBUICAO DE RESPOSTAS DOS QUESTINARIOS SO SE METE O QUE TEM SUMARIO SE O CURSO FOR DE TURMAS
//SEPARADAS
//if(separateTurmas)
// loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma());
//else
// loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
 
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
/*******Logging************************/
if(loadedunits.size() > 1 && !separateTurmas)
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
19,6 → 19,7
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasHorario;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasSumario;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.TipologiasTurma;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.utl.ist.berserk.logic.serviceManager.IService;
257,7 → 258,7
* @param logMessages
* @return
*/
protected static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,String year,DefaultLogMessages logMessages,ServiceJob service) {
public static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,String year,DefaultLogMessages logMessages,ServiceJob service) {
 
Boolean turmasSeparated = courseYearTurmasPolicy.get(codigoDoCurso + "-" + year);
if(turmasSeparated != null)
432,7 → 433,7
else
c.setCdTurma("");
c.setName(d.getNome());
c.setInstitutionCode("" + institutionCode);
c.setInstitutionCode("" + d.getCodigoInstituicao());//MUDADO AQUI
c.setCode("" + d.getCodigo().intValue());
c.setCourseCode("" + d.getCodigoCurso());
c.setCourseName("" + d.getNomeCurso());
453,6 → 454,18
if(t == null)
t = new CourseUnitImpl.Tipologias();
 
t.setTipologiasTdocTurma(new ArrayList<CourseUnitImpl.Tipologia>());
for(TipologiasTurma.TipologiaTurma tipologiaTurma : d.getTipologiasTdocTurma().getTipologias())
{
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia();
tipoSum.setOcorrencias(1);
tipoSum.setDsTipologia("Aulas");
tipoSum.setCdTurma(tipologiaTurma.getCdTurma());
tipoSum.setCdDocente("" + tipologiaTurma.getCdDocente());
tipoSum.setCdTipologia("1");
tipoSum.setTdocturma(true);
t.getTipologiasTdocTurma().add(tipoSum);
}
t.setTipologiasSumarios(new ArrayList<CourseUnitImpl.Tipologia>());
for(TipologiasSumario.TipologiaSumario tipologiaSumario : d.getTipologiasSumario().getTipologias())
{
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/AssignAnswersJobService.java
2,6 → 2,7
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.JobDeamon;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
20,6 → 21,15
public static final Logger logger = Logger.getLogger(AssignAnswersJobService.class);
 
 
/**
* CRIAR O JOB PARA O RUNNER
*
* @param questionarioId
* @param session
* @param questionarioCleared
* @return
* @throws NotAuthorizedException
*/
public QuestionarioImpl runJobAssignAnswers(long questionarioId, UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
 
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name()) )
27,15 → 37,23
throw new NotAuthorizedException("Nao tem autorização para atribuir respostas ao questionario " + questionarioId);
}
 
/*******VERIFICACAO DE RESPOSTAS*********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logger.warn("Vai falhar tem respostas, deixar correr para avisar o user no log");
}
else
{
//Nao muda de estado porque pode sempre gerar as respostas quando está em estado COURSES_ASSIGNED
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_ANSWERS);
}
//CRIAR ATIVIDADE DE ATRIBUICAO DE RESPOSTAS
 
//Nao muda de estado porque pode sempre gerar as respostas quando está em estado COURSES_ASSIGNED
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_ANSWERS);
 
 
Set<JobServiceTaskParameter> paramsJob = new HashSet<JobServiceTaskParameter>();
 
 
JobServiceTaskParameterImpl paramJob = DomainObjectFactory.createJobServiceTaskParameterImpl();
paramJob.setName(ServiceJob.JOB_questionario_id_KEY);
paramJob.setDescription("ID do questionário");
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/AnswersAlunosProcessor.java
9,10 → 9,9
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
 
 
/**
26,10 → 25,14
int unidadesNaoVistasProf = 0;
int unidadesNaoVistasAlunos = 0;
int cursosUtilizados = 0;
int respostasRequisitadas = 0;
 
private static Logger logger = Logger.getLogger(AnswersAlunosProcessor.class);
 
 
/**
*
* ############# JOB TASK ############
* ############# JOB TASK ############
* @return
* @throws Throwable
*/
37,8 → 40,32
protected ILogMessages runJobServiceTask() throws Throwable
{
 
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
DefaultLogMessages logMessages = new DefaultLogMessages();
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
 
 
/*****VERIFICACAO DE RESPOSTAS********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceLogError(logMessages.getLastMessage());
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas");
}
 
 
unidadesNaoUtilizadas = 0;
unidadesUtilizadas = 0;
unidadesMarcadas = 0;
unidadesNaoVistasProf = 0;
unidadesNaoVistasAlunos = 0;
cursosUtilizados = 0;
respostasRequisitadas = 0;
 
 
 
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);
 
 
51,6 → 78,10
 
List<Long> cursosAfetosIds = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().findCursosAfetosIds(questionarioId);
int count = 0;
 
 
UpdateCoursesAndUnitsJobService.revertAllRespostasCandidatas(questionarioId, this);
 
for(Long cursoAfetoId : cursosAfetosIds)
{
/** COMMIT OPERATION **/
65,22 → 96,23
msg = "(+) Iniciando atribuição de respostas de alunos para o curso " + cu.getNome() + " (" + cu.getCodigoCurso() + ") escola " + cu.getNomeInstituicao() + "(" + cu.getCodigoInstituicao() + ")";
logger.info(msg);
serviceLogInfo(msg);
 
 
 
int unidades;
if(cu.getUnidadesAfetas() != null)
{
unidades = cu.getUnidadesAfetas().size();
int countUnidadades = 0;
int countUnidades = 0;
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
{
countUnidadades++;
countUnidades++;
msg = unidadeCurricularAfeta.isUsar() ? "(+)" : "(----IGNORADA-----)";
msg += "(" + countUnidadades + "/" + unidades + ") Iniciando atribuição de Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
msg += "(" + countUnidades + "/" + unidades + ") Iniciando atribuição de Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
logger.info(msg);
serviceLogInfo(msg);
 
new UpdateCoursesAndUnitsJobService().revertAllRespostasCandidatas(questionarioId);
 
 
if(!unidadeCurricularAfeta.isUsar())
{
unidadesNaoUtilizadas++;
92,6 → 124,18
else
{
CourseUnitImpl cuImpl = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().narrow(unidadeCurricularAfeta.getCourseUnit());
CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(unidadeCurricularAfeta.getCourseUnit().getCourse());
 
//boolean separateTurmas = false;
//try{
// separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(Integer.parseInt(unidadeCurricularAfeta.getCursoAfeto().getCodigoCurso()), q.getYear(), logMessages, this);
//}catch(Throwable e)
//{
// msg = "!!! Código de Curso inválido a tentar verificar politica de turmas separadas, vai assumir falso";
// serviceLogError(msg);
// logger.error(msg);
// logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,msg));
//}
unidadesUtilizadas++;
verificaAlertasUnidade(logMessages, unidadeCurricularAfeta);
List<CourseUnitImpl.Tipologia> tipologias;
101,11 → 145,11
//TODO ALTERAR QUANDO GERIRMOS USADAS PARA JA SO SE USAM SUMARIOS
for(CourseUnitImpl.Tipologia tMerge: tipologias)
{
if(tMerge.isSumario())
{
tMerge.setUse(true);
break;
}
//if(tMerge.isSumario())
//{
tMerge.setUse(true);
// break;
//}
}
}
else
118,51 → 162,55
}
}
 
//Lista de Professores para ir removendo à medida que sao usados para no final confirmar se algum
//não tinha tipologia vamos coloca-lo manualmente
Map<String,Teacher> teachersAffected = new HashMap<String, Teacher>();
/**
* Iterar as tipologias e tentar criar com as turmas e os docentes
* Os que não derem resultados devolvem falso e são retirados da lista
* A verificação do falso é feita sempre que uma turma falhe a abrir ou tenha zero alunos
*/
Iterator<CourseUnitImpl.Tipologia> iterTipologias = tipologias.iterator();
while(iterTipologias.hasNext())
{
CourseUnitImpl.Tipologia tipologia = iterTipologias.next();
boolean criada = criarTipologiasRequisitadas(logMessages, q, (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadeCurricularAfeta, (QuestionarioPedagogicoCursoAfetoImpl)cu, cuImpl, tipologia);
if(criada)
{
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).incStatTipologiasRequisitadas();
((QuestionarioPedagogicoCursoAfetoImpl)cu).incStatTipologiasRequisitadas();
}
else
{
iterTipologias.remove();
}
}
 
//CASO ALGUM TENHA FALHADO VAMOS ENTAO ADICIONA-LOS AS TURMAS TODAS
//OU NAO TENHA VINDO TIPOLOGIA PARA ELE
//todo ESTE PROBLEMA DEVE SER RESOLVIDO COM A ADICAO DE TIPOLOGIAS SIMPLES PARA AS ASSOCIACOES
//todo T_DOC_TURMA Mudar no DisciplinaDao na importação de cursos
Map<String,Teacher> professoresEsperados = new HashMap<String, Teacher>();
for(Teacher t: cuImpl.getTeachers())
{
teachersAffected.put(t.getSigesCode()+"",t);
professoresEsperados.put(t.getSigesCode() + "", t);
}
 
for(CourseUnitImpl.Tipologia tMerge: tipologias)
{
updateWithTipologia(logMessages, q, unidadeCurricularAfeta, cuImpl, teachersAffected, tMerge);
if(teachersAffected.size() > 0)
{
msg = "!!! Existem " + teachersAffected.size() + "professores que não tinham tipologias de sumário associadas na unidade " + cuImpl.getCode() + "(" + cuImpl.getName() + ")" + ", associando uma tipologia simples por turma para este docente";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
for(Teacher t: teachersAffected.values())
{
professoresEsperados.remove(tMerge.getCdDocente());
}
List<CourseUnitImpl.Tipologia> tipologiasEmFalta = criarTipologiasRequisitadasSimplesParaProfsForaDasTurmasPorFaltaDeSumarios(logMessages, q, unidadeCurricularAfeta, cuImpl, professoresEsperados);
//tipologias.addAll(tipologiasEmFalta);
 
if(cuImpl.getTurmas() != null)
{
for(CourseUnitTurma turma: cuImpl.getTurmas())
{
msg = "!!! Criando tipologia Simples para (Prof: " + t.getSigesCode() + " " + t.getName() + " turma: " + turma.getTurma() + " ) " ;
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
for(CourseUnitImpl.Tipologia emFalta: tipologiasEmFalta)
{
msg = "Criando tipologia em falta (docente:" + emFalta.getCdDocente() + ", turma: " + emFalta.getCdTurma() + ") para a unidade: " + unidadeCurricularAfeta.getCodigoUnidade() + " " + unidadeCurricularAfeta.getNome() + " do curso de " + unidadeCurricularAfeta.getCursoAfeto().getNome() + "(" + unidadeCurricularAfeta.getCursoAfeto().getCodigoCurso() +")";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).incStatTipologiasRequisitadas();
((QuestionarioPedagogicoCursoAfetoImpl)cu).incStatTipologiasRequisitadas();
criarTipologiasRequisitadas(logMessages, q, (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadeCurricularAfeta, (QuestionarioPedagogicoCursoAfetoImpl)cu, cuImpl, emFalta);
}
 
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo = DomainObjectFactory.createQuestionarioPedagogicoTipologiaRequisitadaImpl();
tipo.setCdDocente(t.getSigesCode() + "");
 
tipo.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
tipo.setCdTurma(turma.getTurma());
tipo.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
tipo.setUnidadeAfeta(unidadeCurricularAfeta);
tipo.setTurmaAfeta(turma);
tipo.setDocenteAfeto(t);
tipo.setNomeDocente(t.getName());
DaoFactory.getQuestionarioPedagogicoTipologiaRequisitadaDaoImpl().save(tipo);
criarAlunosRequisitados(q,tipo,turma);
}
}
}
}
}
}
}
}
180,11 → 228,82
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED);
commitPartially();
 
 
serviceLogInfo("######################################");
serviceLogInfo("######################################");
serviceLogInfo("#unidadesNaoUtilizadas:" + unidadesNaoUtilizadas);
serviceLogInfo("#unidadesUtilizadas:" + unidadesUtilizadas);
serviceLogInfo("#unidadesMarcadas:" + unidadesMarcadas);
serviceLogInfo("#unidadesNaoVistasProf:" + unidadesNaoVistasProf);
serviceLogInfo("#unidadesNaoVistasAlunos:" + unidadesNaoVistasAlunos);
serviceLogInfo("#cursosUtilizados:" + cursosUtilizados);
serviceLogInfo("#respostasRequisitadas:" + respostasRequisitadas);
 
logger.info("######################################");
logger.info("######################################");
logger.info("#unidadesNaoUtilizadas:" + unidadesNaoUtilizadas);
logger.info("#unidadesUtilizadas:" + unidadesUtilizadas);
logger.info("#unidadesMarcadas:" + unidadesMarcadas);
logger.info("#unidadesNaoVistasProf:" + unidadesNaoVistasProf);
logger.info("#unidadesNaoVistasAlunos:" + unidadesNaoVistasAlunos);
logger.info("#cursosUtilizados:" + cursosUtilizados);
logger.info("#respostasRequisitadas:" + respostasRequisitadas);
return logMessages;
}
 
private void updateWithTipologia(DefaultLogMessages logMessages, QuestionarioImpl q, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta, CourseUnitImpl cuImpl, Map<String, Teacher> teachersAffected, CourseUnitImpl.Tipologia tMerge) {
 
 
private List<CourseUnitImpl.Tipologia> criarTipologiasRequisitadasSimplesParaProfsForaDasTurmasPorFaltaDeSumarios(DefaultLogMessages logMessages, QuestionarioImpl q, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta, CourseUnitImpl cuImpl, Map<String, Teacher> teachersAffected) {
String msg;
List<CourseUnitImpl.Tipologia> tipologias = new ArrayList<CourseUnitImpl.Tipologia>();
if(teachersAffected.size() > 0)
{
msg = "!!! Existem " + teachersAffected.size() + "professores que não tinham tipologias de sumário associadas na unidade " + cuImpl.getCode() + "(" + cuImpl.getName() + ")" + ", associando uma tipologia simples por turma para este docente";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
for(Teacher t: teachersAffected.values())
{
if(cuImpl.getTurmas() != null)
{
for(CourseUnitTurma turma: cuImpl.getTurmas())
{
msg = "!!! Criando tipologia Simples para (Prof: " + t.getSigesCode() + " " + t.getName() + " turma: " + turma.getTurma() + " ) " ;
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
 
CourseUnitImpl.Tipologia tipo = new CourseUnitImpl.Tipologia();
tipo.setCdDocente(t.getSigesCode() + "");
tipo.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
tipo.setCdTurma(turma.getTurma());
tipo.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
tipo.setUse(true);
tipologias.add(tipo);
}
}
}
}
return tipologias;
}
 
/**
* Devolve true se conseguiu criar pelo menos uma resposta a um aluno caso contrario a turma pode não existir ou ser lixo
* @param logMessages
* @param q
* @param unidadeCurricularAfeta
* @param cursoAfeto
* @param cuImpl
* @param tMerge
* @return
*/
private boolean criarTipologiasRequisitadas(DefaultLogMessages logMessages,
QuestionarioImpl q,
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeCurricularAfeta,
QuestionarioPedagogicoCursoAfetoImpl cursoAfeto,
CourseUnitImpl cuImpl,
CourseUnitImpl.Tipologia tMerge) {
String msg;
if(tMerge.isUse())
{
//todo Criar Tipologia Requisitada
193,44 → 312,60
String dsTipologia = tMerge.getDsTipologia();
String cdTurma = tMerge.getCdTurma();
 
teachersAffected.remove(cdDocente);
 
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo = DomainObjectFactory.createQuestionarioPedagogicoTipologiaRequisitadaImpl();
tipo.setCdDocente(cdDocente);
tipo.setCdTipologia(cdTipologia);
tipo.setCdTurma(cdTurma);
tipo.setDsTipologia(dsTipologia);
tipo.setUnidadeAfeta(unidadeCurricularAfeta);
CourseUnitImpl.TipologiaPersistent tMergePersistente = cuImpl.loadPersistent(tMerge);
if(tMergePersistente == null)
try{
CourseUnitImpl.TipologiaPersistent tMergePersistente = cuImpl.loadPersistent(tMerge);
tipo.setNomeDocente(tMergePersistente.getTeacher().getName());
tipo.setDocenteAfeto(tMergePersistente.getTeacher());
tipo.setTurmaAfeta(tMergePersistente.getCourseUnitTurma());
DaoFactory.getQuestionarioPedagogicoTipologiaRequisitadaDaoImpl().save(tipo);
return criarAlunosRequisitados(q, tipo, tMergePersistente.getCourseUnitTurma(),unidadeCurricularAfeta,cursoAfeto);
}
catch(CourseUnitImpl.TipologiaLoadExeption exp)
{
msg = "Tipologia não devolve persistente falha no professor ou na turma (docente:" + tMerge.getCdDocente() + ", turma: " + tMerge.getCdTurma() + ") para a unidade: " + unidadeCurricularAfeta.getCodigoUnidade() + " " + unidadeCurricularAfeta.getNome();
msg = "Tipologia não devolve persistente " + exp.getMessage() + " (docente:" + tMerge.getCdDocente() + ", turma: " + tMerge.getCdTurma() + ") para a unidade: " + unidadeCurricularAfeta.getCodigoUnidade() + " " + unidadeCurricularAfeta.getNome() + " do curso de " + cursoAfeto.getNome() + "(" + cursoAfeto.getCodigoCurso() +")";
serviceLogError(msg);
logger.error(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,msg));
return false;
}
else
{
tipo.setNomeDocente(tMergePersistente.getTeacher().getName());
tipo.setDocenteAfeto(tMergePersistente.getTeacher());
tipo.setTurmaAfeta(tMergePersistente.getCourseUnitTurma());
DaoFactory.getQuestionarioPedagogicoTipologiaRequisitadaDaoImpl().save(tipo);
criarAlunosRequisitados(q, tipo, tMergePersistente.getCourseUnitTurma());
}
 
 
//Depois o home tem de procurar respostas requisitadas sem resposta
//para cada uma vai pelo aluno requisitado buscar a turma o docente e pela
//unidade afeta a unidade e o curso
//apresenta o questionario com o id da resposta requisitada
 
}
}
return false;
}
 
private void criarAlunosRequisitados(QuestionarioImpl q, QuestionarioPedagogicoTipologiaRequisitadaImpl tipo, CourseUnitTurma turma) {
if(turma.getStudents() != null)
/**
* Return true se encotrou pelo menos um aluno
* @param q
* @param tipo
* @param turma
* @param unidadeAfeta
* @param cursoAfeto
* @return
*/
private boolean criarAlunosRequisitados(QuestionarioImpl q,
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo,
CourseUnitTurma turma,
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta,
QuestionarioPedagogicoCursoAfetoImpl cursoAfeto)
{
if(turma.getStudents() != null && turma.getStudents().size()>0)
{
for(Student s: turma.getStudents())
{
unidadeAfeta.incStatRespostasRequisitadas();
cursoAfeto.incStatRespostasRequisitadas();
QuestionarioRespostaRequisitadaImpl respostaRequisitada = DomainObjectFactory.createQuestionarioRespostaRequisitadaImpl();
respostaRequisitada.setQuestionario(q);
respostaRequisitada.setUser(s);
241,8 → 376,11
alunoRequisitado.setAluno(s);
alunoRequisitado.setRespostaRequisitada(respostaRequisitada);
DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().save(alunoRequisitado);
respostasRequisitadas++;
}
return true;
}
return false;
}
 
private void verificaAlertasUnidade(DefaultLogMessages logMessages, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta) {
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/UpdateCoursesAndUnitsJobService.java
95,13 → 95,33
return new String[0];
}
 
/*************
* CRIAR O JOB PARA O RUNNER
* @param questionarioId
* @param coursesList
* @param session
* @param questionarioCleared
* @return
* @throws NotAuthorizedException
*/
public QuestionarioImpl runJobSelectCourses(long questionarioId,String[] coursesList,UserSession session,QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
 
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name()))
{
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
}
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES);
 
/*******VERIFICACAO DE RESPOSTAS*********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas == 0)
{
(questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES);
}
else
{
logger.warn("Vai falhar no serviço, deixar falhar para visar o user");
}
 
JSONArray jsonArray = new JSONArray();
for(String sele: coursesList)
{
145,6 → 165,15
{
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
}
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceLogError(logMessages.getLastMessage());
return logMessages;
}
for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId))
{
int unidades = 0;
153,16 → 182,18
unidades = cu.getUnidadesAfetas().size();
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
{
logger.info("Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome());
unidadeCurricularAfeta.setCursoAfeto(null);
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta);
String msg = "Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
logger.info(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
{
String msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
removeTipologiasERespostasCascade(unidadeCurricularAfeta);
}
unidadeCurricularAfeta.setCursoAfeto(null);
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta);
}
}
String msg = "Removendo curso afeto:" + cu.getNome() + " e " + unidades + " uniades afetas";
177,18 → 208,30
}
 
 
public ILogMessages revertAllRespostasCandidatas(long questionarioId) throws NotAuthorizedException {
public static ILogMessages revertAllRespostasCandidatas(long questionarioId, ServiceJob serviceJob) throws NotAuthorizedException {
 
DefaultLogMessages logMessages = new DefaultLogMessages();
 
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceJob.serviceLogError(logMessages.getLastMessage());
throw new NotAuthorizedException(logMessages.getLastMessage());
}
 
String msg = "Revertendo respostas candidatas do questionario " + questionarioId;
logger.warn(msg);
serviceLogWarn(msg);
logger.info(msg);
serviceJob.serviceLogInfo(msg);
 
for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId))
{
msg = "Revertendo respostas do curso " + cu.getCodigoCurso() + " , iremos remover todas as tipologias e respostas candidatas associadas";
logger.warn(msg);
serviceLogWarn(msg);
logger.info(msg);
serviceJob.serviceLogInfo(msg);
((QuestionarioPedagogicoCursoAfetoImpl)cu).resetAnswerStats();
 
int unidades = 0;
if(cu.getUnidadesAfetas() != null)
196,20 → 239,18
unidades = cu.getUnidadesAfetas().size();
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
{
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).resetAnswerStats();
logger.info("Reverting Respostas Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome());
if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
{
msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
logger.warn(msg);
serviceLogWarn(msg);
logger.info(msg);
serviceJob.serviceLogWarn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
removeTipologiasERespostasCascade(unidadeCurricularAfeta);
}
}
}
msg = "Removendo curso afeto:" + cu.getNome() + " e " + unidades + " uniades afetas";
logger.info(msg);
serviceLogWarn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.INFO,msg));
}
return logMessages;
218,7 → 259,7
/**
*
*/
protected void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta)
protected static void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta)
{
for(QuestionarioPedagogicoTipologiaRequisitada tr: unidadeAfeta.getTipologiasRequisitadas())
{
251,6 → 292,8
 
/**
*
* ############# JOB TASK ############
* ############# JOB TASK ############
* @return
* @throws Throwable
*/
262,6 → 305,17
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);
 
/********VERIFICACAO DE RESPOSTAS***********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceLogError(logMessages.getLastMessage());
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas");
}
 
String[] coursesList = deserializeCoursesList(q);
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre
 
271,7 → 325,7
logger.info(msg);
/**logging**/
 
revertAllRespostasCandidatas(questionarioId);
revertAllRespostasCandidatas(questionarioId,this);
 
List<String> newCourseCodesList = new ArrayList<String>();
int count = 0;
370,7 → 424,7
DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().delete(cursoAfeto);
}
 
private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<String> newUnidadesCodesList) {
private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<Long> newUnidadesCodesList) {
/** logging **/
String msg = "Removing unselected units from course: " + cursoAfetado.getCodigoCurso();
serviceLogInfo(msg);
379,7 → 433,7
Set<QuestionarioPedagogicoUnidadeCurricularAfeta> allUnidades = cursoAfetado.getUnidadesAfetas();
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta: allUnidades)
{
if(!newUnidadesCodesList.contains(unidadeAfeta.getCodigoUnidade()))
if(!newUnidadesCodesList.contains(unidadeAfeta.getCourseUnit().getId()))
{
/** logging **/
msg = "--->Deleting unidade: " + unidadeAfeta.getCodigoUnidade();
448,7 → 502,7
 
 
 
List<String> newUnitCodesList = new ArrayList<String>();
List<Long> newUnitCodesList = new ArrayList<Long>();
int countUnits = 0;
List<CourseUnitDaoImpl.CourseUnitResult> results = DaoFactory.getCourseUnitDaoImpl().loadCourseUnits(c.getId(), q.getSemestre(), q.getYear());
int totalUnits = results.size();
456,7 → 510,7
{
countUnits++;
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(cur.id);
newUnitCodesList.add(cu.getCode());
newUnitCodesList.add(cu.getId());
/** logging **/
msg = "---->(" + countUnits + " of " + totalUnits +") CourseUnit loaded: " + cu.getName() + "(" + cu.getCode() + ")";
serviceLogInfo(msg);
480,10 → 534,10
 
String msg;
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta = null;
List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getCode());
List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getId());
if(unidadesFound != null && unidadesFound.size() > 1)
{
msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " apagando um";
msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " com id sistema(" + cu.getId() + ") apagando um";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
513,7 → 567,7
unidadeAfeta.setCursoAfeto(cursoAfeto);//so metemos de um dos lados
unidadeAfeta.setCourseUnit(cu);
unidadeAfeta.setCodigoUnidade(cu.getCode());
unidadeAfeta.setObs("");
unidadeAfeta.addObs("");
unidadeAfeta.setNome(cu.getName());
 
unidadeAfeta.setMarked(false);
680,7 → 734,8
 
public void updateCheckVarPedagogico(long questionarioId,long unidadeAfetaId, String op,String val,UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
 
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) &&
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name()) &&
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) &&
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name()) &&
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name()))
{
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/PedagogicoAlunosProcessor.java
47,108 → 47,129
questionario.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.START);
}
 
 
 
public void initClearances(QuestionarioImpl q, UserSessionImpl usession, SimpleClearanceRuledSupport s)
{
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
if(q.getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
assignationDetailsClearances(q, usession, s);
 
if(q.getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS || q.getStateEnum() == QuestionarioImpl.State.PROCESSING || q.getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS)
{
if(q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.START ||
q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED)
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name(),usession);
if(usession.getUser().hasRole(Globals.ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_DASHBOARD.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession);
}
}
 
}
 
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
private void assignationDetailsClearances(QuestionarioImpl q, UserSessionImpl usession, SimpleClearanceRuledSupport s) {
if(q.getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES.name(),usession);
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
if(q.getCourseSelectionTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition())
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
else
if(q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.START ||
q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED)
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name(),usession);
}
 
 
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES.name(),usession);
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getCourseSelectionTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos
if(q.getCourseSelectionTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition())
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
else
{
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getCourseSelectionTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);//rolling back to year semestre assigned
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);//rolling back to year semestre assigned
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
}
}
}
}
 
 
 
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
{
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
{
 
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name(),usession);
}
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name(),usession);
}
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name(),usession);
//s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name(),usession);
}
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
 
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_START_ASSIGN_ANSWERS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_START_ASSIGN_ANSWERS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name(),usession);
 
//ATRIBUIR RESPOSTAS MAS SO DEPOIS DE CURSOS ATRIBUIDOS
if(q.getAnswerGenerationTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition())
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
else
{
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getAnswerGenerationTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos
//ATRIBUIR RESPOSTAS MAS SO DEPOIS DE CURSOS ATRIBUIDOS
if(q.getAnswerGenerationTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition())
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
else
{
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getAnswerGenerationTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);//rolling back to courses assigned
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);//rolling back to courses assigned
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
}
}
}
}
 
if(q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition())
{
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
if(q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition())
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_FINNISH_ASSIGNEMENTS.name(),usession);
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.name(),usession);
}
}
}
 
}
 
@Override
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/QuestionariosService.java
1,12 → 1,22
package pt.estgp.estgweb.services.questionarios;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.impl.AnnouncementDaoImpl;
import pt.estgp.estgweb.domain.views.QuestionarioView;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.EMAILJobPersonalizedCertificated;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.List;
import java.util.*;
 
/**
* Created by jorgemachado on 21/03/16.
14,6 → 24,8
public class QuestionariosService implements IService
{
 
private static final Logger logger = Logger.getLogger(QuestionariosService.class);
 
//NEW QUESTIONARIOS COME BY THIS SERVICE
public QuestionarioImpl newQuestionarioForm(QuestionarioImpl qform, UserSession userSession) throws NotAuthorizedException
{
113,4 → 125,193
}
}
 
/**
* Passa para o estado ASSIGNED_ANSWERS
* @param questionarioId
* @param userSession
* @param questionarioCleared
* @return
*/
public QuestionarioImpl putAssignedAnswers(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
{
if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.toString()))
{
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNED_ANSWERS);
}
return questionarioCleared;
}
 
public QuestionarioImpl revertAssignationDetails(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
{
if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.toString()))
{
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNATION_DETAILS);
}
return questionarioCleared;
}
 
public QuestionarioImpl startProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
{
 
if(questionarioCleared.isClear((UserSessionImpl) userSession, QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.toString()))
{
if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.ASSIGNED_ANSWERS)
questionarioCleared.setStateClass(QuestionarioImpl.State.PROCESSING);
else if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS)
questionarioCleared.setStateClass(QuestionarioImpl.State.PROCESSING_WITH_ANSWERS);
}
return questionarioCleared;
}
 
public QuestionarioImpl stopProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
{
 
if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.toString()))
{
if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.PROCESSING)
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNED_ANSWERS);
else if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS)
questionarioCleared.setStateClass(QuestionarioImpl.State.STOPED_WITH_ANSWERS);
}
return questionarioCleared;
}
 
public void salvarResposta(QuestionarioResposta resposta,Long alunoRequisitadoId,UserSession userSession) throws NotAuthorizedException {
Questionario q = DaoFactory.getQuestionarioDaoImpl().load(resposta.getQuestionario().getId());
QuestionarioImpl questionario = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().narrow(q);
QuestionarioPedagogicoAlunoRequisitado alunoRequisitado = DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().load(alunoRequisitadoId);
if(questionario.getStateEnum() != QuestionarioImpl.State.PROCESSING && questionario.getStateEnum() != QuestionarioImpl.State.PROCESSING_WITH_ANSWERS )
{
throw new NotAuthorizedException("O questionário interrompido por razões administrativas, por favor tente mais tarde");
}
if(!((alunoRequisitado.getRespostaRequisitada().getQuestionario().getId() == questionario.getId())
&&
alunoRequisitado.getRespostaRequisitada().getResposta() == null
&&
alunoRequisitado.getAluno().getId() == userSession.getUser().getId()))
{
throw new NotAuthorizedException("Não está autorizado a submeter esta resposta.");
}
 
resposta.setId(0);
resposta.setQuestionario(questionario);
resposta.setUser(alunoRequisitado.getAluno());
alunoRequisitado.getRespostaRequisitada().setResposta(resposta);
DaoFactory.getQuestionarioRespostaDaoImpl().save(resposta);
questionario.setStateClass(QuestionarioImpl.State.PROCESSING_WITH_ANSWERS);
}
 
 
SendEmailService sendEmailService = new SendEmailService();
public int sendMessage(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession)
{
String source = "questionario message";
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIds(id, onlyNotAnswered);
 
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result);
}
 
public int sendMessageCursoAfeto(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession)
{
String source = "questionario curso message";
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, id, 0);
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result);
}
public int sendMessageUnidadeAfeta(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession)
{
String source = "questionario unidade message";
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, 0, id);
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result);
}
 
 
public int sendMessageAllProcessing(boolean onlyNotAnswered,String msg,String emailFrom,String personFrom, String subject,UserSession userSession)
{
String source = "questionarios em processamento message";
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogicoAllProcessing(onlyNotAnswered);
return sendEmails(null, msg, emailFrom, personFrom, subject, userSession, source, result);
}
 
private int sendEmails(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source, AnnouncementDaoImpl.FindUsersIdResult result) {
List<Long> usersToConsume = result.userIds;
 
 
logger.info("Scheduling mail jobs to " + result.users + " users: " + usersToConsume.size() + " recipients");
//while(usersToConsume.size() > 0)
//{
// Iterator<String> iter = usersToConsume.iterator();
// List<String> usersToJob = new ArrayList<String>();
// int contador = 0;
// while(iter.hasNext() && contador < 20)
// {
// usersToJob.add(iter.next());
// iter.remove();
// contador++;
// }
 
String suffix = Globals.SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE;
if(suffix.startsWith("/"))
suffix = suffix.substring(1);
String url = Globals.SITE_URL.endsWith("/") ? Globals.SITE_URL + suffix : Globals.SITE_URL + "/" + suffix;
 
EmailPersonalizedCertificated e = sendEmailService.getMessageEmailAdulteredFromEmailIppCertificated(emailFrom,
personFrom,
subject,
msg,
userSession.getUser(),
usersToConsume,
url);
 
e.setHtml(true);
EMAILJobPersonalizedCertificated emailJob = new EMAILJobPersonalizedCertificated(e);
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession);
//}
enviarComprovativoAoRemetente(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size());
enviarComprovativoAAdministracao(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size());
return result.users;
}
 
private void enviarComprovativoAAdministracao(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source,int sentTo)
{
 
 
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom,
personFrom,
subject + " (COMPROVATIVO PAE) ",
"<u>Caros membros da administração este é um comprovativo de um email enviado pelo PAE pelo user: " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg,
ConfigProperties.getListValuesByPrefix("admin.email"),
userSession.getUser());
 
e.setHtml(true);
EMAILJob emailJob = new EMAILJob(e);
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession);
}
 
private void enviarComprovativoAoRemetente(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source,int sentTo)
{
Map<String,String> emailsComprovativos = new HashMap<String, String>();
if(Email.validEmail(userSession.getUser().getEmail()))
emailsComprovativos.put(userSession.getUser().getEmail(),"");
if(Email.validEmail(userSession.getUser().getOutEmail()))
emailsComprovativos.put(userSession.getUser().getOutEmail(),"");
if(Email.validEmail(userSession.getUser().getPreferrefEmail()))
emailsComprovativos.put(userSession.getUser().getPreferrefEmail(),"");
List<String> comprovativos = new ArrayList<String>();
comprovativos.addAll(emailsComprovativos.keySet());
if(comprovativos.size() > 0)
{
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom,
personFrom,
subject + " (COMPROVATIVO PAE) ",
"<u>Olá " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg,
comprovativos,
userSession.getUser());
 
e.setHtml(true);
EMAILJob emailJob = new EMAILJob(e);
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession);
}
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/authenticate/AuthenticateService.java
329,6 → 329,15
User u = DaoFactory.getUserDaoImpl().load(userId);
return createCertificate(u, usersession);
}
public String createCertificateForId(long userId)
{
User u = DaoFactory.getUserDaoImpl().load(userId);
return createCertificate(u);
}
public String createCertificate(User user)
{
return createCertificate(user,null);
}
/**
* Create a new Certificate for usage in URL auto login
*
/branches/v3/impl/src/java/pt/estgp/estgweb/services/entity/EntityServiceJson.java
2,12 → 2,13
 
import com.owlike.genson.Genson;
import com.owlike.genson.TransformationException;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 22/03/16.
27,8 → 28,37
 
.create();
 
static Genson userGenson = new Genson.Builder()
.exclude(Object.class)
.exclude(User.class)
.exclude(GenericUser.class)
.exclude(Student.class)
.exclude(Teacher.class)
.include("id", User.class)
.include("name", User.class)
.include("sigesCode", User.class)
.include("email", User.class)
.include("roles", User.class)
 
.create();
 
public String courseUnit(CourseUnit cu) throws IOException, TransformationException {
return courseUnitGenson.serialize(cu);
}
public String courseUnit(Serializable s) throws IOException, TransformationException {
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().get(s);
return courseUnitGenson.serialize(cu);
}
 
public String user(Serializable s) throws IOException, TransformationException {
User u = DaoFactory.getUserDaoImpl().get(s);
return userGenson.serialize(u);
}
public String user(User u) throws IOException, TransformationException {
return userGenson.serialize(u);
}
 
public String user(ArrayList<User> users) throws IOException, TransformationException {
return userGenson.serialize(users);
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/StudentImpl.java
3,6 → 3,7
import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.RoleManager;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
 
50,8 → 51,11
return subscribedCoursesOldYearsView;
}
 
public String getManagedRole() {
return STUDENT_ROLE;
public String getManagedRole()
{
List<String> roles = new ArrayList<String>();
roles.add(STUDENT_ROLE);
return RoleManager.getSerialRoles(roles);
}
 
public List<CourseUnit> getSubscribedUnitsViewS1()
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
34,6 → 34,7
private String courseName;
private String semestre;
private String importYear;
private String institutionCode;
private String contentsGrants;
private BlogView blog;
private String pathIntranet;
142,6 → 143,7
this.sumariosPathFileIntranet = ((CourseUnitImpl)courseUnit).getSummariosPathFileIntranet();
this.evaluationOpenByAdmin = courseUnit.isEvaluationOpenByAdmin(); //nao tem persistencia propria tem de ser feito num serviço
this.cdTurma = courseUnit.getCdTurma();
this.institutionCode = courseUnit.getInstitutionCode();
 
// this.objectives = courseUnit.getObjectives(); DEPRECATED
if(courseUnit.getCourseUnitProgram() !=null && courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2() != null)
470,6 → 472,7
c.setCode(code);
c.setCdTurma(cdTurma);
c.setSemestre(semestre);
c.setInstitutionCode(institutionCode);
if(courseId > 0)
{
c.setCourse(DaoFactory.getCourseDaoImpl().load(courseId));
729,7 → 732,14
return true;
}
 
public String getInstitutionCode() {
return institutionCode;
}
 
public void setInstitutionCode(String institutionCode) {
this.institutionCode = institutionCode;
}
 
public boolean isValidProgram()
{
return validProgram;
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoUnidadeCurricularAfetaImpl.java
9,8 → 9,10
{
if(getObs() == null)
setObs("");
else if(obs.trim().length() > 0)
setObs(getObs() + " ; ");
 
setObs(getObs() + " ; " + obs);
setObs(getObs() + obs);
}
 
public void resetStats() {
19,9 → 21,19
setStudents(0);
setProfs(0);
setMarked(false);
setObs("");
//setObs("");
setProfsWithoutTurma(0);
setTurmas(0);
setTurmaWithoutProf(0);
 
}
 
public void resetAnswerStats() {
 
setStatTipologiasRequisitadas(0);
setStatRespostasRequisitadas(0);
}
 
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);}
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java
419,4 → 419,8
public static QuestionarioRespostaRequisitadaImpl createQuestionarioRespostaRequisitadaImpl(){
return new QuestionarioRespostaRequisitadaImpl();
}
 
public static QuestionarioRespostaImpl createQuestionarioRespostaImpl() {
return new QuestionarioRespostaImpl();
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java
112,4 → 112,11
{
return DesUtils.getInstance().decrypt(getPop3password());
}*/
 
public String getShortName()
{
if(getName() != null)
return getName().split(" ")[0];
return getName();
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioImpl.java
30,7 → 30,7
 
CREATED(1),
ASSIGNATION_DETAILS(2),
ASSIGNING_ANSWERS_PROCESSEMENT(3),
ASSIGNING_ANSWERS_PROCESSEMENT(3), //NAO USADO NO PEDAGOGIGO OS ESTADOS INTERNOS RESOLVEM O PROBLEMA
ASSIGNED_ANSWERS(4),
PROCESSING(5),
PROCESSING_WITH_ANSWERS(6),
289,9 → 289,10
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_GERAIS))
{
 
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession);
309,24 → 310,49
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_DELETE.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_ANSWER_PROCESSOR.name(),usession);
}
if(getStateEnum() == State.ASSIGNED_ANSWERS)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.name(),usession);
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == State.PROCESSING)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == State.PROCESSING_WITH_ANSWERS)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == State.STOPED_WITH_ANSWERS)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name(),usession);
}
}
 
 
//ANO SEMESTRE ESPECIFICO apenas neste estado, em atribuição de respostas e respostas atribuidas já não permite
if(getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
{
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name(),usession);
}
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_ASSIGNATION_OPERATIONS.name(),usession);
}
 
getiAnswersProcessorClass().initClearances(this,usession,s);
}
if(getStateEnum() == State.ASSIGNING_ANSWERS_PROCESSEMENT)
if(getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS || getStateEnum() == QuestionarioImpl.State.PROCESSING || getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS)
{
 
if(usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_GERAIS))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_DASHBOARD.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession);
}
}
}
//AS CLEARANCES SAO VERIFICADAS LA DENTRO PARA TODOS OS ESTADOS
getiAnswersProcessorClass().initClearances(this,usession,s);
setClearanceRuledSupport(s);
}
 
343,6 → 369,13
QUESTIONARIO_DELETE,
QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS,
 
 
QUESTIONARIO_PUT_ANSWERS_ASSIGNED,
QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS,
 
QUESTIONARIO_START_PROCESSEMENT,
QUESTIONARIO_STOP_PROCESSEMENT,
 
/*Pedagogico Cursos*/
QUESTIONARIO_SET_ANO_SEMESTRE,
QUESTIONARIO_SCHEDULLE_SELECT_COURSES,
352,7 → 385,10
QUESTIONARIO_SEE_START_ASSIGN_ANSWERS,
QUESTIONARIO_CHANGE_ASSIGNEMENTS,
QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS,
QUESTIONARIO_FINNISH_ASSIGNEMENTS,
QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT,
 
QUESTIONARIO_SEE_DASHBOARD
 
;
 
public static QuestionarioClearancesOperation parse(String clearance)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java
511,8 → 511,36
setTipologias(tipologias.serialize());
}
 
public TipologiaPersistent loadPersistent(Tipologia myTipo)
public static class TipologiaLoadExeption extends Exception
{
boolean teacherFail = false;
boolean turmaFail = false;
 
public TipologiaLoadExeption(boolean teacherFail, boolean turmaFail) {
this.teacherFail = teacherFail;
this.turmaFail = turmaFail;
}
 
public boolean isTeacherFail() {
return teacherFail;
}
 
public boolean isTurmaFail() {
return turmaFail;
}
 
@Override
public String getMessage() {
return "Professor: " + (teacherFail? "Falhou" : "OK") + " Turma: " + (turmaFail? "Falhou" : "OK");
}
}
/**
*
* @param myTipo
* @return
*/
public TipologiaPersistent loadPersistent(Tipologia myTipo) throws TipologiaLoadExeption
{
TipologiaPersistent tipologiaPersistent = new TipologiaPersistent();
tipologiaPersistent.setHorRef(myTipo.isHorRef());
tipologiaPersistent.setExtra(myTipo.isExtra());
526,7 → 554,7
if(tipologiaPersistent.getCourseUnitTurma() == null || tipologiaPersistent.getTeacher() == null)
{
logger.error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente: turma:" + myTipo.getCdTurma() + " teacher code: " + myTipo.getCdDocente());
return null;
throw new TipologiaLoadExeption(tipologiaPersistent.getTeacher() == null,tipologiaPersistent.getCourseUnitTurma() == null);
}
return tipologiaPersistent;
}
641,7 → 669,16
 
protected boolean extra;
protected boolean horRef;
protected boolean tdocturma = false;
 
public boolean isTdocturma() {
return tdocturma;
}
 
public void setTdocturma(boolean tdocturma) {
this.tdocturma = tdocturma;
}
 
public boolean isUse() {
return use;
}
775,7 → 812,14
ArrayList<Tipologia> tipologiasExtraAdicionadas = new ArrayList<Tipologia>();
ArrayList<Tipologia> tipologiasUsadas = new ArrayList<Tipologia>();
ArrayList<Tipologia> tipologiasMarcadas = new ArrayList<Tipologia>();
ArrayList<Tipologia> tipologiasTdocTurma = new ArrayList<Tipologia>();
 
public ArrayList<Tipologia> getTipologiasTdocTurma() {
return tipologiasTdocTurma == null ? new ArrayList<Tipologia>() : tipologiasTdocTurma;
}
 
public void setTipologiasTdocTurma(ArrayList<Tipologia> tipologiasTdocTurma) { this.tipologiasTdocTurma = tipologiasTdocTurma; }
 
public ArrayList<Tipologia> getTipologiasHorarioReferencia() {
 
return tipologiasHorarioReferencia == null ? new ArrayList<Tipologia>() : tipologiasHorarioReferencia;
822,11 → 866,13
.include("tipologiasHorarioReferencia", Tipologias.class)
.include("tipologiasUsadas", Tipologias.class)
.include("tipologiasMarcadas", Tipologias.class)
.include("tipologiasTdocTurma", Tipologias.class)
.include("cdTipologia", Tipologia.class)
.include("cdDocente", Tipologia.class)
.include("cdTurma", Tipologia.class)
.include("dsTipologia",Tipologia.class)
.include("ocorrencias", Tipologia.class)
.include("tdocturma", Tipologia.class)
.create();
return genson;
}
844,6 → 890,7
.include("horRef", Tipologia.class)
.include("extra", Tipologia.class)
.include("use", Tipologia.class)
.include("tdocturma", Tipologia.class)
.include("markWarning", Tipologia.class)
.create();
return genson;
983,6 → 1030,18
}
}
}
if(getTipologiasTdocTurma() != null)
for(Tipologia t: getTipologiasTdocTurma())
{
for(Tipologia tMerge: merge)
{
if(tMerge.equals(t))
{
tMerge.setUse(true);
break;
}
}
}
return merge;
}
 
1003,6 → 1062,7
fullfillTipologiasSimples(getTipologiasHorarioReferencia(), docenteTurmas);
fullfillTipologiasSimples(getTipologiasMarcadas(), docenteTurmas);
fullfillTipologiasSimples(getTipologiasUsadas(), docenteTurmas);
fullfillTipologiasSimples(getTipologiasTdocTurma(), docenteTurmas);
 
 
if(docenteTurmas.size() == 0)
1069,12 → 1129,16
simples.setOcorrencias(tipo.getOcorrencias());
}
turmasDocente.put(tipo.getCdTurma(),simples);
if(tipo.isTdocturma())
simples.setTdocturma(true);
}
else if(tipo.hasOcorrencias())
{
if(simples.getOcorrencias() == null)
simples.setOcorrencias(0);
simples.setOcorrencias(simples.getOcorrencias()+tipo.getOcorrencias());
if(tipo.isTdocturma())
simples.setTdocturma(true);
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java
10,6 → 10,7
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.io.Serializable;
import java.util.ArrayList;
133,6 → 134,16
}
}
 
public List<User> loadRoleUsers(String role, int maxResults, int firstResult)
{
Criteria c = createCriteria()
.add(like("roles","%" + role + RoleManager.ROLE_SEPARATOR +"%"))
.addOrder(Order.asc("name"))
.setMaxResults(maxResults)
.setFirstResult(firstResult);
return c.list();
}
 
public List<User> loadRoleUsers(String role)
{
if(role == null || role.trim().length() == 0)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioDaoImpl.java
1,15 → 1,18
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.DaoException;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.domain.*;
 
import java.util.ArrayList;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.eq;
import static org.hibernate.criterion.Restrictions.*;
 
/**
* @author Jorge Machado
63,5 → 66,274
}
}
 
public List<QuestionarioImpl> findProcessing()
{
try
{
Criteria criteria = createCriteria();
criteria.add(or(eq("state",QuestionarioImpl.State.PROCESSING.name()),eq("state",QuestionarioImpl.State.PROCESSING_WITH_ANSWERS.name())));
return criteria.list();
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
public List<QuestionarioImpl> findNotClosed()
{
try
{
Criteria criteria = createCriteria();
criteria.add(not(or(or(eq("state",QuestionarioImpl.State.CLOSED.name()),eq("state",QuestionarioImpl.State.PROCESSING_OLAP.name())),
eq("state",QuestionarioImpl.State.OLAP.name()))))
.addOrder(Order.desc("id"));
return criteria.list();
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
 
public long getNumeroRespostas(long questionarioId)
{
Query q = getCurrentSession().createQuery
("select count(r.id) from r in class " + QuestionarioResposta.class.getName() + " " +
" JOIN r.questionario q " +
" where q.id = " + questionarioId);
Object result = q.uniqueResult();
if(result != null && ((Long)result) > 0)
{
return (Long)result;
}
else
return 0;
}
public long getNumeroUnidadesUsadas(long questionarioId)
{
Query q = getCurrentSession().createQuery
("select count(u.id) from u in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " +
" JOIN u.cursoAfeto c " +
" JOIN c.questionario q " +
" where u.usar = true AND q.id = " + questionarioId);
Object result = q.uniqueResult();
if(result != null && ((Long)result) > 0)
{
return (Long)result;
}
else
return 0;
}
 
public long getNumeroRespostasRequisitadas(long questionarioId)
{
Query q = getCurrentSession().createQuery
("select count(r.id) from r in class " + QuestionarioRespostaRequisitada.class.getName() + " " +
" JOIN r.questionario q " +
" where q.id = " + questionarioId);
Object result = q.uniqueResult();
if(result != null && ((Long)result) > 0)
{
return (Long)result;
}
else
return 0;
}
 
/*
public AnnouncementDaoImpl.FindUsersResult findUsersEmails(Long id,boolean onlyNotAnswered)
{
 
AnnouncementDaoImpl.FindUsersResult findUsersResult = new AnnouncementDaoImpl.FindUsersResult();
List<String> users = new ArrayList<String>();
findUsersResult.emails = users;
 
 
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" u.outEmail, u.preferrefEmail, u.email " +
"from " + QuestionarioRespostaRequisitada.class.getName() + " rR " +
"JOIN rR.questionario q " +
"JOIN rR.user u " +
"WHERE q.id = :id " +
(onlyNotAnswered? " AND rR.resposta is null " : "" ) +
"GROUP BY u.id");
 
q.setLong("id",id);
List<Object[]> results = (List<Object[]>) q.list();
 
fullFillResults(findUsersResult, results);
 
return findUsersResult;
 
 
}
*/
 
public AnnouncementDaoImpl.FindUsersIdResult findUsersIds(Long id,boolean onlyNotAnswered)
{
 
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult();
List<Long> users = new ArrayList<Long>();
findUsersResult.userIds = users;
 
 
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" u.id " +
"from " + QuestionarioRespostaRequisitada.class.getName() + " rR " +
"JOIN rR.questionario q " +
"JOIN rR.user u " +
"WHERE q.id = :id " +
(onlyNotAnswered? " AND rR.resposta is null " : "" ) +
"GROUP BY u.id");
 
q.setLong("id",id);
List<Object> results = (List<Object>) q.list();
 
 
for(Object result: results)
{
findUsersResult.userIds.add((Long) result);
}
findUsersResult.users = results.size();
return findUsersResult;
}
 
public AnnouncementDaoImpl.FindUsersIdResult findUsersIdsPedagogico(boolean onlyNotAnswered,long cursoAfetoId,long unidadeAfetaId)
{
 
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult();
List<Long> users = new ArrayList<Long>();
findUsersResult.userIds = users;
 
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" u.id " +
"from " + QuestionarioPedagogicoAlunoRequisitado.class.getName() + " aR " +
"JOIN aR.respostaRequisitada rR " +
"JOIN rR.user u " +
"WHERE " +
(cursoAfetoId > 0 ?
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.id = " + cursoAfetoId :
" aR.tipologiaRequisitada.unidadeAfeta.id = " + unidadeAfetaId) +
(onlyNotAnswered? " AND rR.resposta is null " : "" ) +
"GROUP BY u.id");
 
List<Object> results = (List<Object>) q.list();
 
for(Object result: results)
{
findUsersResult.userIds.add((Long) result);
}
findUsersResult.users = results.size();
return findUsersResult;
 
 
}
 
 
public AnnouncementDaoImpl.FindUsersIdResult findUsersIdsPedagogicoAllProcessing(boolean onlyNotAnswered)
{
 
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult();
List<Long> users = new ArrayList<Long>();
findUsersResult.userIds = users;
 
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" u.id " +
"from " + QuestionarioPedagogicoAlunoRequisitado.class.getName() + " aR " +
"JOIN aR.respostaRequisitada rR " +
"JOIN rR.user u " +
"WHERE " +
 
"( " +
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP1 " +
" OR " +
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP2 " +
")" +
 
 
(onlyNotAnswered? " AND rR.resposta is null " : "" ) +
"GROUP BY u.id");
 
q.setString("sP1",QuestionarioImpl.State.PROCESSING.name());
q.setString("sP2",QuestionarioImpl.State.PROCESSING_WITH_ANSWERS.name());
 
List<Object> results = (List<Object>) q.list();
 
for(Object result: results)
{
findUsersResult.userIds.add((Long) result);
}
findUsersResult.users = results.size();
return findUsersResult;
 
 
}
 
public static class QuestionarioStatsVars
{
public long cursos;
public long unidades;
public long profs;
public long alunos;
public long turmas;
public long alunosDeUsadas;
public long profsDeUsadas;
public long unidadesUsadas;
public long tipologiasUsadas;
public long profsTimeStudents;
public long respostasRequisitadas;
public long respostasObtidas;
}
 
 
 
 
public QuestionarioStatsVars loadQuestionarioStatsPedagogico(long questionarioId)
{
QuestionarioStatsVars questionarioStatsVars = new QuestionarioStatsVars();
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" count(distinct c.id) AS cursos " +
",count(distinct u.id) AS unidades " +
",sum (u.profs) AS profs " +
",count(distinct t.cdTurma) AS turmas " +
",sum (u.students) AS students " +
",count(distinct a.aluno.id) AS alunosDeUsadas " +
",count(distinct t.docenteAfeto.id) AS profsDeUsadas " +
",count(distinct t.id) AS tipologiasRequisitadas " +
",sum (case when u.usar = true then (u.profs * u.students) else 0 end) AS respostasEsperadas " +
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " +
"JOIN c.questionario q " +
"JOIN c.unidadesAfetas u " +
"JOIN u.tipologiasRequisitadas t " +
"JOIN t.alunosRequisitados a " +
 
"WHERE q.id = :id " +
"GROUP BY q.id");
 
q.setLong("id",questionarioId);
Object[] results = (Object[]) q.uniqueResult();
 
if(results != null && results[0] != null)
{
questionarioStatsVars.cursos = (Long) results[0];
questionarioStatsVars.unidades = (Long) results[1];
questionarioStatsVars.profs = (Long) results[2];
questionarioStatsVars.turmas = (Long) results[3];
questionarioStatsVars.alunos = (Long) results[4];
questionarioStatsVars.alunosDeUsadas = (Long) results[5];
questionarioStatsVars.profsDeUsadas = (Long) results[6];
questionarioStatsVars.tipologiasUsadas = (Long) results[7];
questionarioStatsVars.profsTimeStudents = (Long) results[8];
questionarioStatsVars.respostasRequisitadas = getNumeroRespostasRequisitadas(questionarioId);
questionarioStatsVars.respostasObtidas = getNumeroRespostas(questionarioId);
questionarioStatsVars.unidadesUsadas = getNumeroUnidadesUsadas(questionarioId);
if(questionarioStatsVars.unidadesUsadas > questionarioStatsVars.unidades)
logger.error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM");
 
}
 
return questionarioStatsVars;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioPedagogicoCursoAfetoDaoImpl.java
1,6 → 1,7
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto;
14,6 → 15,8
*/
public class QuestionarioPedagogicoCursoAfetoDaoImpl extends QuestionarioPedagogicoCursoAfetoDao{
 
private static final Logger logger = Logger.getLogger(QuestionarioPedagogicoCursoAfetoDaoImpl.class);
 
public static QuestionarioPedagogicoCursoAfetoDaoImpl getInstance() {
if (myInstance == null)
myInstance = new QuestionarioPedagogicoCursoAfetoDaoImpl();
55,6 → 58,8
public long naoUsadas;
}
 
 
 
public CourseStatsVars loadStats(long cursoAfetoId)
{
CourseStatsVars courseStatsVars = new CourseStatsVars();
72,13 → 77,56
 
q.setLong("id",cursoAfetoId);
Object[] results = (Object[]) q.uniqueResult();
courseStatsVars.porVer = (Long) results[0];
courseStatsVars.porVerProfs = (Long) results[1];
courseStatsVars.naoUsadas = (Long) results[2];
courseStatsVars.marcadas = (Long) results[3];
courseStatsVars.observadas = (Long) results[4];
courseStatsVars.unidades = (Long) results[5];
 
if(results != null && results[0] != null)
{
courseStatsVars.porVer = (Long) results[0];
courseStatsVars.porVerProfs = (Long) results[1];
courseStatsVars.naoUsadas = (Long) results[2];
courseStatsVars.marcadas = (Long) results[3];
courseStatsVars.observadas = (Long) results[4];
courseStatsVars.unidades = (Long) results[5];
}
 
return courseStatsVars;
}
 
public long countRespostas(long cursoAfetoId)
{
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" count(distinct r.id) AS respostas " +
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " +
"JOIN c.unidadesAfetas u " +
"JOIN u.tipologiasRequisitadas t " +
"JOIN t.alunosRequisitados a " +
"JOIN a.respostaRequisitada rR " +
"JOIN rR.resposta r " +
"WHERE c.id = :id ");
 
q.setLong("id",cursoAfetoId);
Object result = q.uniqueResult();
if(result != null)
return (Long) result;
return 0;
}
public long countAlunosComRespostas(long cursoAfetoId)
{
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" count(distinct a.aluno.id) AS respostasAlunos " +
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " +
"JOIN c.unidadesAfetas u " +
"JOIN u.tipologiasRequisitadas t " +
"JOIN t.alunosRequisitados a " +
"JOIN a.respostaRequisitada rR " +
"JOIN rR.resposta r " +
"WHERE c.id = :id ");
 
q.setLong("id",cursoAfetoId);
Object result = q.uniqueResult();
if(result != null)
return (Long) result;
return 0;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
67,7 → 67,24
.uniqueResult();
}
 
public int countCoursesUnits(String importYear,long courseId,String semestre)
{
/* return createCriteria()
.createAlias("courseUnits", "c")
.setProjection(Projections.property("c.id"))
.add(eq("c.importYear", importYear))
.add(eq("id", courseId))
.list().size();
*/
return (Integer) createCriteria(CourseUnit.class)
.setProjection(Projections.rowCount())
.add(eq("importYear",importYear))
.add(eq("semestre",semestre))
.add(eq("course.id",courseId))
.uniqueResult();
}
 
 
public int countCoursesUnitsTurmas(String importYear,long courseId)
{
return (Integer) createCriteria(CourseUnitTurma.class)
231,7 → 248,7
}
if (institutionCode != null && institutionCode.trim().length() > 0)
{
query += logic + "cu.institutionCode = :institutionCode ";
query += logic + "c.institutionalCode = :institutionCode ";
logic = " and ";
}
if (area != null && area.length() > 0)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java
41,6 → 41,13
public int users;
public List<String> emails;
}
 
public static class FindUsersIdResult
{
public int users;
public List<Long> userIds;
}
 
public FindUsersResult findUsersEmails(String year, String department, long courseId, long courseUnitId, String semestre, CreateAnnouncementService.MessageTarget target)
{
FindUsersResult findUsersResult = new FindUsersResult();
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl.java
16,16 → 16,16
return (QuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl) myInstance;
}
 
public List<QuestionarioPedagogicoUnidadeCurricularAfeta> find(long questionarioId, String cursoCode,String codeUnidade)
public List<QuestionarioPedagogicoUnidadeCurricularAfeta> find(long questionarioId, String cursoCode,Long idUnidade)
{//pt.estgp.estgweb.domain.dao.DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().getCurrentSession().createCriteria(QuestionarioPedagogicoUnidadeCurricularAfeta.class).add(eq("cursoAfeto.id","1")).list()
//add(eq("cuA.questionario.id", new Long(20))).add(eq("codigoUnidade","209535")).add(eq("cuA.codigoCurso","9119"))
Query q = getCurrentSession().createQuery("select c from c in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " +
" join c.cursoAfeto as curso " +
"where curso.questionario.id = :questionarioId and curso.codigoCurso = :codigoCurso" +
" and c.codigoUnidade = :codigoUnidade");
" and c.courseUnit.id = :idUnidade");
q.setLong("questionarioId", questionarioId);
q.setString("codigoCurso", cursoCode);
q.setString("codigoUnidade",codeUnidade);
q.setLong("idUnidade",idUnidade);
return q.list();
 
/*DaoFactory.getCourseDaoImpl()
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/UserSessionImpl.java
308,4 → 308,11
return getUser() == null;
}
 
public String getShortName()
{
if(getName() != null)
return getName().split(" ")[0];
return getName();
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoCursoAfetoImpl.java
22,4 → 22,13
{
setMarcadas(getMarcadas()+1);
}
 
public void resetAnswerStats() {
setStatTipologiasRequisitadas(0);
setStatRespostasRequisitadas(0);
}
 
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);}
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioMessage.java
New file
0,0 → 1,118
package pt.estgp.estgweb.web.form.questionarios;
 
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.web.form.ApplicationForm;
 
import javax.servlet.http.HttpServletRequest;
 
 
public class QuestionarioMessage extends ApplicationForm
{
boolean onlyNotAnswered = false;
String message;
private long cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId;
String fromEmail;
String fromPerson;
String subject;
 
String formDescription;
String dispatch;
long questionarioId;
 
 
public long getQuestionarioId() {
return questionarioId;
}
 
public void setQuestionarioId(long questionarioId) {
this.questionarioId = questionarioId;
}
 
public String getDispatch() {
return dispatch;
}
 
public void setDispatch(String dispatch) {
this.dispatch = dispatch;
}
 
public String getFormDescription() {
return formDescription;
}
 
public void setFormDescription(String formDescription) {
this.formDescription = formDescription;
}
 
public String getSubject() {
return subject;
}
 
public void setSubject(String subject) {
this.subject = subject;
}
 
public boolean isOnlyNotAnswered() {
return onlyNotAnswered;
}
 
public void setOnlyNotAnswered(boolean onlyNotAnswered) {
this.onlyNotAnswered = onlyNotAnswered;
}
 
public String getFromEmail() {
return fromEmail;
}
 
public void setFromEmail(String fromEmail) {
this.fromEmail = fromEmail;
}
 
public String getFromPerson() {
return fromPerson;
}
 
public void setFromPerson(String fromPerson) {
this.fromPerson = fromPerson;
}
 
public String getMessage() {
return message;
}
 
public void setMessage(String message) {
this.message = message;
}
 
public long getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId() {
return cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId;
}
 
public void setCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(long cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId) {
this.cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId = cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId;
}
 
 
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if(getSubject() == null || getSubject().trim().length() == 0)
{
addMessageWithKeys(errors,request,"errors.required","questionario.email.subject");
}
if(getFromEmail() == null || getFromEmail().trim().length() == 0)
{
addMessageWithKeys(errors,request,"errors.required","questionario.email.from.email");
}
if(getFromPerson() == null || getFromPerson().trim().length() == 0)
{
addMessageWithKeys(errors,request,"errors.required","questionario.email.from.person");
}
if(getMessage() == null || getMessage().trim().length() == 0)
{
addMessageWithKeys(errors,request,"errors.required","questionario.email.message");
}
return errors;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioRespostaForm.java
New file
0,0 → 1,71
package pt.estgp.estgweb.web.form.questionarios;
 
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.QuestionarioResposta;
import pt.estgp.estgweb.domain.QuestionarioRespostaImpl;
import pt.estgp.estgweb.web.form.ApplicationForm;
 
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 05/06/16.
*/
public class QuestionarioRespostaForm extends ApplicationForm
{
QuestionarioRespostaImpl resposta = DomainObjectFactory.createQuestionarioRespostaImpl();
 
public QuestionarioRespostaForm() {
resposta.setQuestionario(DomainObjectFactory.createQuestionarioImpl());
}
 
long alunoRequesitadoId;
 
public long getAlunoRequesitadoId() {
return alunoRequesitadoId;
}
 
public void setAlunoRequesitadoId(long alunoRequesitadoId) {
this.alunoRequesitadoId = alunoRequesitadoId;
}
 
public QuestionarioRespostaImpl getResposta() {
return resposta;
}
 
public void setResposta(QuestionarioRespostaImpl resposta) {
this.resposta = resposta;
}
 
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
List<String> respostasVazias = new ArrayList<String>();
 
for(int i = 1; i <= 17; i++)
{
try {
String r = (String) QuestionarioResposta.class.getMethod("getR"+i).invoke(resposta);
if(r == null || r.trim().length() == 0)
{
if(respostasVazias.size() == 0)
addMessage(errors, request, "questionario.respostas.grupos.1.2.3");
respostasVazias.add("" + i);
}
 
}
catch (Throwable e)
{
System.err.println("Erro nao esperado metodo getR" + i + " nao existe na resposta");
e.printStackTrace();
}
}
if(respostasVazias.size() > 0)
request.setAttribute("respostasVazias",respostasVazias);
 
return errors;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioYearSemestreController.java
3,6 → 3,7
import org.apache.struts.action.*;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioForm;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
52,4 → 53,25
}
return mapping.findForward("admin");
}
 
public ActionForward submitResposta(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioRespostaForm frm = (QuestionarioRespostaForm) form;
 
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"resposta","alunoRequisitadoId"};
Object[] args = {frm.getResposta(),frm.getAlunoRequesitadoId()};
 
sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSalvarResposta",args,names);
addMessage(request,"questionario.resposta.com.sucesso");
 
return mapping.findForward("success");
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioController.java
11,6 → 11,7
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioForm;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
141,5 → 142,222
}
 
 
public ActionForward putInAssignedAnwsers(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioPutAssignedAnswers",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
public ActionForward revertAssignationDetails(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioRevertAssignationDetails",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
public ActionForward stopProcessement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioStopProcessement",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
public ActionForward startProcessement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioStartProcessement",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
 
/********
* EMAILS QUESTIONARIO
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Throwable
*/
public ActionForward sendEmailQuestionario(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioMessage frm = (QuestionarioMessage) form;
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"};
Object[] args = {
frm.isOnlyNotAnswered(),
frm.getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(),
frm.getMessage(),
frm.getFromEmail(),
frm.getFromPerson(),
frm.getSubject()
};
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessage",args,names);
addMessage(request,"submit.todo.message.success","" + size);
return mapping.findForward("success");
}
public ActionForward sendEmailQuestionarioCursoAfeto(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioMessage frm = (QuestionarioMessage) form;
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"};
Object[] args = {
frm.isOnlyNotAnswered(),
frm.getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(),
frm.getMessage(),
frm.getFromEmail(),
frm.getFromPerson(),
frm.getSubject()
};
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageCursoAfeto",args,names);
addMessage(request,"submit.todo.message.success","" + size);
return mapping.findForward("success");
}
 
public ActionForward sendEmailQuestionarioUnidadeAfeta(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioMessage frm = (QuestionarioMessage) form;
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"};
Object[] args = {
frm.isOnlyNotAnswered(),
frm.getCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(),
frm.getMessage(),
frm.getFromEmail(),
frm.getFromPerson(),
frm.getSubject()
};
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageUnidadeAfeta",args,names);
addMessage(request,"submit.todo.message.success","" + size);
return mapping.findForward("success");
}
 
 
 
public ActionForward sendEmailQuestionariosProcessing(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioMessage frm = (QuestionarioMessage) form;
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"};
Object[] args = {
frm.isOnlyNotAnswered(),
frm.getMessage(),
frm.getFromEmail(),
frm.getFromPerson(),
frm.getSubject()
};
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageAllProcessing",args,names);
addMessage(request,"submit.todo.message.success","" + size);
return mapping.findForward("seeAll");
}
 
 
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/authenticate/AuthenticateController.java
139,7 → 139,7
 
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request);
if(userSession.getUser() == null)
return mapping.findForward("welcome");
return mapping.findForward(Globals.SYSTEM_REDIRECTIONS_POLICY_INDEX_WELCOME);
IServiceManager sm = ServiceManager.getInstance();
Object[] args = new Object[]{};
//to send good by message
/branches/v3/impl/src/doc/estgweb.eap
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v3/impl/src/doc/BacoV32016/processos/QuestionariosAccess/importMdb.sh
New file
0,0 → 1,23
MDB_FILE=$1
QUESTDATA=$2
QUESTPERIODO=$3
TABLES="INQUERITO PROFESSOR CURSO DISCIPLINA PROFESSOR_DISCIPLINA R_DISCIPLINA R_DOCENTE"
echo "Using file:$1 in year $2 semestre $3"
 
echo "drop database inqueritos$QUESTDATA$QUESTPERIODO;" | mysql -uroot
echo "create database inqueritos$QUESTDATA$QUESTPERIODO;" | mysql -uroot
 
#mdb-schema inquerito_final.mdb | sed "s/Double/int/" | sed "s/Long Integer/int/" | sed "s/\[//" | sed "s/\]//" | sed "s/\Text (.*)/varchar(250)/" | sed "s/Boolean/BIT(1)/" | sed "s/Numeric (.*)/int/" | sed "s/Cópia de /copia_de_/" | mysql -uroot inqueritos_$QUESTDATA_$QUESTPERIODO
 
#mdb-schema -S inquerito_final.mdb mysql | mysql -uroot inqueritos$QUESTDATA$QUESTPERIODO
 
 
mdb-schema -S inquerito_final.mdb mysql | grep -i CREATE | cut -f 3 -d " " | sed "s/\`//" | sed "s/\`//" | grep -v mdb > tmp_tables
 
echo $TABLES
for i in $TABLES
do
echo "Exporting $i to mysql"
mdb-schema -S -T $i inquerito_final.mdb mysql | mysql -uroot inqueritos$QUESTDATA$QUESTPERIODO
mdb-export -I mysql -H inquerito_final.mdb $i | mysql -uroot inqueritos$QUESTDATA$QUESTPERIODO
done
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/doc/BacoV32016/processos/QuestionariosAccess/scriptMdbToolsExportMdbMySql.rtf
New file
0,0 → 1,18
{\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170
{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;}
{\colortbl;\red255\green255\blue255;}
\paperw11900\paperh16840\margl1440\margr1440\vieww15780\viewh8400\viewkind0
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
 
\f0\fs22 \cf0 \CocoaLigature0 \
exportar MDB com mdbtools para linux\
\
mdb-schema inquerito_final.mdb | sed "s/Long Integer/int/" | sed "s/\\[//" | sed "s/\\]//" | sed "s/\\Text (.*)/varchar(250)/" | sed "s/Boolean/BIT(1)/" | sed "s/Numeric \\(.*\\)/int/"\
\
\
ESCOLHER APENAS AS TABELAS DESEJADAS\
\
\
mdb-export -I mysql inquerito_final.mdb INQUERITO | mysql -uroot inqueritos_201415_S2\
\
}
/branches/v3/impl/src/doc/BacoV32016/linuxInstall/How To Set Up Master Slave Replication in MySQL _ DigitalOcean_files.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/impl/src/doc/BacoV32016/linuxInstall/mysql/mysqlreplication.txt
New file
0,0 → 1,108
 
 
 
#PARA MYSQL SLAVE JA EM FUNCIONAMENTO COM BASE EM UM MASTER E FUNCIONANDO COM FICHEIROS
STOP SLAVE;
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';
 
depois alterar no my.conf na parte do mysqld para isto
 
[mysqld]
master-info-repository=TABLE
relay-log-info-repository=TABLE
#####################################
 
SERVER EXEMPLO: 172.20.100.141
SLAVE EXEMPLO: 172.20.100.20
 
 
NO MASTER QUE VAI SER REPLICADO
 
sudo apt-get install mysql-server mysql-client
 
sudo nano /etc/mysql/my.cnf
#comentar a linha assim:
#bind-address = 127.0.0.1
 
#procurar a linha server-id e colocar assim:
server-id = 1
 
#definir o log file e a base de dados que poderá ser replicada:
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = pae
 
#Como temos trasaction ISOLATION READ_COMMITED
#adicionat a linha
 
binlog_format=row
 
#reiniciar tomcat
/etc/init.d/mysql restart
 
#AGORA ENTRAMOS NO MYSQL
mysql -u root
 
#GARANTIR DIREITOS DE REPLICACAO AO SLAVE
GRANT REPLICATION SLAVE ON *.* TO 'baco'@'172.20.100.20' IDENTIFIED BY 'baco1232008estg';
 
FLUSH PRIVILEGES;
 
 
#FAZER DUMP DA BASE DE DADOS
 
mysql> \u pae
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
 
 
 
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | pae | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
 
mysql> UNLOCK TABLES;
 
ENTRAR EM NOVO TERMNAL SEM MECHER NESTE
mysqldump -u root -p --opt pae > pae-para-slave.sql
 
#NO MYSQL
UNLOCK TABLES;
QUIT;
 
#COPIAR O FICHEIRO PARA O SLAVE 172.20.100.20
#SE FOR EM LINUX FAZER ASSIM EXEMPLO que copia para a pasta onde estamos que é o ".":
scp jmachado@pae.ipportalegre.pt:/home/jmachado/pae-para-slave.sql .
 
#entrar no mysql do salve
create database pae;
 
#sair
quit
 
#carregar base de dados
mysql -uroot -pbaco1232008estg pae < pae-para-slave.sql
 
 
 
 
 
elay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = newdatabase
sudo service mysql restart
The next step is to enable the replication from within the MySQL shell.
 
Open up the the MySQL shell once again and type in the following details, replacing the values to match your information:
 
CHANGE MASTER TO MASTER_HOST='172.20.100.141',MASTER_USER='baco', MASTER_PASSWORD='baco1232008estg', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
START SLAVE;
SHOW SLAVE STATUS
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAE-EmVigor.docx
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAEv2.docx
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream