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.*;
/**
* Created by jorgemachado on 21/03/16.
*/
public class QuestionariosService
implements IService
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(QuestionariosService.
class);
//NEW QUESTIONARIOS COME BY THIS SERVICE
public QuestionarioImpl newQuestionarioForm
(QuestionarioImpl qform, UserSession userSession
) throws NotAuthorizedException
{
if(qform.
getQuestionarioHistoryDrive().
getId() > 0
)
{
QuestionarioHistoryDrive hist = DaoFactory.
getQuestionarioHistoryDriveDaoImpl().
load(qform.
getQuestionarioHistoryDrive().
getId());
qform.
setQuestionarioHistoryDrive(hist
);
}
else
{
qform.
setQuestionarioHistoryDrive(null);
}
DaoFactory.
getQuestionarioDaoImpl().
save(qform
);
return qform
;
}
public QuestionarioImpl saveQuestionarioForm
(QuestionarioImpl qform, UserSession userSession, QuestionarioImpl questionarioCleared
) throws NotAuthorizedException
{
if(qform.
getQuestionarioHistoryDrive().
getId() > 0
)
{
QuestionarioHistoryDrive hist = DaoFactory.
getQuestionarioHistoryDriveDaoImpl().
load(qform.
getQuestionarioHistoryDrive().
getId());
qform.
setQuestionarioHistoryDrive(hist
);
}
else
{
qform.
setQuestionarioHistoryDrive(null);
}
Questionario qPersistent = questionarioCleared
;
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_SAVE_FORM.
name()))
{
QuestionarioView qv =
new QuestionarioView
(qform
);
if(questionarioCleared.
isClear((UserSessionImpl
) userSession, QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_SAVE_ANSWER_PROCESSOR.
name()))
{
qv.
persistAnswersProcessor(qPersistent
);
}
qv.
persistViewInObjectForm(qPersistent
);
qPersistent.
setQuestionarioHistoryDrive(qform.
getQuestionarioHistoryDrive());
}
else
throw new NotAuthorizedException
("Não pode alterar o formulário porque o questionário está num estado avançado");
return loadInit
(questionarioCleared
);
}
public QuestionarioImpl setAssignDetailsState
(long id, UserSession userSession, QuestionarioImpl questionarioCleared
) throws NotAuthorizedException
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_SET_STATE_ASSIGNATION_DETAILS.
name()))
{
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNATION_DETAILS);
questionarioCleared.
getiAnswersProcessorClass().
startAfetacoes(questionarioCleared
);
}
else
throw new NotAuthorizedException
("Não alterar o questionário para este estado neste momento");
return loadInit
(questionarioCleared
);
}
/**
* Questionario comes already cleared from Filter
* @param questionarioId
* @param questionarioCleared
* @param userSession
* @return
*/
public QuestionarioImpl loadQuestionario
(long questionarioId,UserSession userSession,QuestionarioImpl questionarioCleared
)
{
return loadInit
(questionarioCleared
);
}
/**
* just to load proxys
* @param questionarioCleared
* @return
*/
private QuestionarioImpl loadInit
(QuestionarioImpl questionarioCleared
)
{
questionarioCleared.
getDescription();//to load proxy just in case
if(questionarioCleared.
getQuestionarioHistoryDrive() !=
null)
questionarioCleared.
getQuestionarioHistoryDrive().
getCodeName();
IAnswersProcessor processor = questionarioCleared.
getiAnswersProcessorClass();
processor.
initQuestionarioAfetacoesVariables(questionarioCleared
);
return questionarioCleared
;
}
public void loadInit
(List
<QuestionarioImpl
> questionarioCleared
)
{
for(QuestionarioImpl q: questionarioCleared
)
{
loadInit
(q
);
}
}
public void deleteQuestionario
(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared
)
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_DELETE.
name()))
{
DaoFactory.
getQuestionarioDaoImpl().
delete(questionarioCleared
);
}
}
/**
* 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.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">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.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">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.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNED_ANSWERS)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING);
else if(questionarioCleared.
getStateEnum() == QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
STOPED_WITH_ANSWERS)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">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.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNED_ANSWERS);
else if(questionarioCleared.
getStateEnum() == QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
STOPED_WITH_ANSWERS);
}
return questionarioCleared
;
}
public void salvarResposta
(QuestionarioResposta resposta,
1.5.0/docs/api/java/lang/Long.html">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.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING && questionario.
getStateEnum() != QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">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.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS);
}
SendEmailService sendEmailService =
new SendEmailService
();
public int sendMessage
(boolean onlyNotAnswered,
1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">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,
1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">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,
1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">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,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">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
(1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession,
1.5.0/docs/api/java/lang/String.html">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++;
// }
1.5.0/docs/api/java/lang/String.html">String suffix = Globals.
SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE;
if(suffix.
startsWith("/"))
suffix = suffix.
substring(1
);
1.5.0/docs/api/java/lang/String.html">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
(1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession,
1.5.0/docs/api/java/lang/String.html">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
(1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession,
1.5.0/docs/api/java/lang/String.html">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
);
}
}
}