/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 && (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 |