Rev 1425 | Rev 1429 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1326 | jmachado | 1 | package pt.estgp.estgweb.services.questionarios; |
2 | |||
1404 | jmachado | 3 | import org.apache.log4j.Logger; |
1326 | jmachado | 4 | import pt.estgp.estgweb.domain.*; |
5 | import pt.estgp.estgweb.domain.dao.DaoFactory; |
||
1425 | jmachado | 6 | import pt.estgp.estgweb.domain.dao.impl.AnnouncementDaoImpl; |
1326 | jmachado | 7 | import pt.estgp.estgweb.domain.views.QuestionarioView; |
1425 | jmachado | 8 | import pt.estgp.estgweb.services.email.EMAILJob; |
9 | import pt.estgp.estgweb.services.email.SendEmailService; |
||
10 | import pt.estgp.estgweb.services.jobs.JobScheduleService; |
||
11 | import pt.estgp.estgweb.utils.Email; |
||
1326 | jmachado | 12 | import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
13 | import pt.utl.ist.berserk.logic.serviceManager.IService; |
||
14 | |||
1426 | jmachado | 15 | import java.util.*; |
1326 | jmachado | 16 | |
17 | /** |
||
18 | * Created by jorgemachado on 21/03/16. |
||
19 | */ |
||
20 | public class QuestionariosService implements IService |
||
21 | { |
||
22 | |||
1404 | jmachado | 23 | 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); |
24 | |||
1326 | jmachado | 25 | //NEW QUESTIONARIOS COME BY THIS SERVICE |
26 | public QuestionarioImpl newQuestionarioForm(QuestionarioImpl qform, UserSession userSession) throws NotAuthorizedException |
||
27 | { |
||
28 | if(qform.getQuestionarioHistoryDrive().getId() > 0) |
||
29 | { |
||
30 | QuestionarioHistoryDrive hist = DaoFactory.getQuestionarioHistoryDriveDaoImpl().load(qform.getQuestionarioHistoryDrive().getId()); |
||
31 | qform.setQuestionarioHistoryDrive(hist); |
||
32 | } |
||
33 | else |
||
34 | { |
||
35 | qform.setQuestionarioHistoryDrive(null); |
||
36 | } |
||
37 | DaoFactory.getQuestionarioDaoImpl().save(qform); |
||
38 | return qform; |
||
39 | } |
||
40 | public QuestionarioImpl saveQuestionarioForm(QuestionarioImpl qform, UserSession userSession, QuestionarioImpl questionarioCleared) throws NotAuthorizedException { |
||
41 | if(qform.getQuestionarioHistoryDrive().getId() > 0) |
||
42 | { |
||
43 | QuestionarioHistoryDrive hist = DaoFactory.getQuestionarioHistoryDriveDaoImpl().load(qform.getQuestionarioHistoryDrive().getId()); |
||
44 | qform.setQuestionarioHistoryDrive(hist); |
||
45 | } |
||
46 | else |
||
47 | { |
||
48 | qform.setQuestionarioHistoryDrive(null); |
||
49 | } |
||
50 | Questionario qPersistent = questionarioCleared; |
||
51 | if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name())) |
||
52 | { |
||
53 | QuestionarioView qv = new QuestionarioView(qform); |
||
54 | if(questionarioCleared.isClear((UserSessionImpl) userSession, QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_ANSWER_PROCESSOR.name())) |
||
55 | { |
||
56 | qv.persistAnswersProcessor(qPersistent); |
||
57 | } |
||
58 | qv.persistViewInObjectForm(qPersistent); |
||
59 | qPersistent.setQuestionarioHistoryDrive(qform.getQuestionarioHistoryDrive()); |
||
60 | } |
||
61 | else |
||
62 | throw new NotAuthorizedException("Não pode alterar o formulário porque o questionário está num estado avançado"); |
||
63 | |||
64 | return loadInit(questionarioCleared); |
||
65 | } |
||
66 | |||
67 | public QuestionarioImpl setAssignDetailsState(long id, UserSession userSession, QuestionarioImpl questionarioCleared) throws NotAuthorizedException { |
||
68 | |||
69 | if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_STATE_ASSIGNATION_DETAILS.name())) |
||
70 | { |
||
71 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNATION_DETAILS); |
||
1329 | jmachado | 72 | questionarioCleared.getiAnswersProcessorClass().startAfetacoes(questionarioCleared); |
1326 | jmachado | 73 | } |
74 | else |
||
75 | throw new NotAuthorizedException("Não alterar o questionário para este estado neste momento"); |
||
76 | |||
77 | return loadInit(questionarioCleared); |
||
78 | } |
||
79 | /** |
||
80 | * Questionario comes already cleared from Filter |
||
81 | * @param questionarioId |
||
82 | * @param questionarioCleared |
||
83 | * @param userSession |
||
84 | * @return |
||
85 | */ |
||
86 | public QuestionarioImpl loadQuestionario(long questionarioId,UserSession userSession,QuestionarioImpl questionarioCleared) |
||
87 | { |
||
88 | return loadInit(questionarioCleared); |
||
89 | } |
||
90 | |||
91 | /** |
||
92 | * just to load proxys |
||
93 | * @param questionarioCleared |
||
94 | * @return |
||
95 | */ |
||
96 | private QuestionarioImpl loadInit(QuestionarioImpl questionarioCleared) |
||
97 | { |
||
98 | questionarioCleared.getDescription();//to load proxy just in case |
||
99 | if(questionarioCleared.getQuestionarioHistoryDrive() != null) |
||
100 | questionarioCleared.getQuestionarioHistoryDrive().getCodeName(); |
||
1328 | jmachado | 101 | IAnswersProcessor processor = questionarioCleared.getiAnswersProcessorClass(); |
102 | processor.initQuestionarioAfetacoesVariables(questionarioCleared); |
||
1326 | jmachado | 103 | return questionarioCleared; |
104 | } |
||
1328 | jmachado | 105 | |
1329 | jmachado | 106 | public void loadInit(List<QuestionarioImpl> questionarioCleared) |
1326 | jmachado | 107 | { |
108 | for(QuestionarioImpl q: questionarioCleared) |
||
109 | { |
||
1328 | jmachado | 110 | loadInit(q); |
1326 | jmachado | 111 | } |
112 | } |
||
113 | |||
114 | |||
1329 | jmachado | 115 | |
1326 | jmachado | 116 | public void deleteQuestionario(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
117 | { |
||
118 | if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_DELETE.name())) |
||
119 | { |
||
120 | DaoFactory.getQuestionarioDaoImpl().delete(questionarioCleared); |
||
121 | } |
||
122 | } |
||
123 | |||
1403 | jmachado | 124 | /** |
125 | * Passa para o estado ASSIGNED_ANSWERS |
||
126 | * @param questionarioId |
||
127 | * @param userSession |
||
128 | * @param questionarioCleared |
||
129 | * @return |
||
130 | */ |
||
131 | public QuestionarioImpl putAssignedAnswers(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
||
132 | { |
||
1404 | jmachado | 133 | if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.toString())) |
134 | { |
||
135 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNED_ANSWERS); |
||
136 | } |
||
137 | return questionarioCleared; |
||
138 | } |
||
1403 | jmachado | 139 | |
1404 | jmachado | 140 | public QuestionarioImpl revertAssignationDetails(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
141 | { |
||
142 | if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.toString())) |
||
143 | { |
||
144 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNATION_DETAILS); |
||
145 | } |
||
1403 | jmachado | 146 | return questionarioCleared; |
147 | } |
||
148 | |||
149 | public QuestionarioImpl startProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
||
150 | { |
||
151 | |||
1404 | jmachado | 152 | if(questionarioCleared.isClear((UserSessionImpl) userSession, QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.toString())) |
153 | { |
||
1413 | jmachado | 154 | if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNED_ANSWERS) |
155 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING); |
||
156 | else if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.STOPED_WITH_ANSWERS) |
||
157 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS); |
||
1404 | jmachado | 158 | } |
1403 | jmachado | 159 | return questionarioCleared; |
160 | } |
||
161 | |||
1404 | jmachado | 162 | public QuestionarioImpl stopProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) |
163 | { |
||
164 | |||
165 | if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.toString())) |
||
166 | { |
||
1413 | jmachado | 167 | if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING) |
168 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNED_ANSWERS); |
||
169 | else if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS) |
||
170 | questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.STOPED_WITH_ANSWERS); |
||
1404 | jmachado | 171 | } |
172 | return questionarioCleared; |
||
173 | } |
||
174 | |||
1412 | jmachado | 175 | public void salvarResposta(QuestionarioResposta resposta,1.5.0/docs/api/java/lang/Long.html">Long alunoRequisitadoId,UserSession userSession) throws NotAuthorizedException { |
176 | Questionario q = DaoFactory.getQuestionarioDaoImpl().load(resposta.getQuestionario().getId()); |
||
177 | QuestionarioImpl questionario = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().narrow(q); |
||
178 | QuestionarioPedagogicoAlunoRequisitado alunoRequisitado = DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().load(alunoRequisitadoId); |
||
179 | 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 ) |
||
180 | { |
||
181 | throw new NotAuthorizedException("O questionário interrompido por razões administrativas, por favor tente mais tarde"); |
||
182 | } |
||
183 | if(!((alunoRequisitado.getRespostaRequisitada().getQuestionario().getId() == questionario.getId()) |
||
184 | && |
||
185 | alunoRequisitado.getRespostaRequisitada().getResposta() == null |
||
186 | && |
||
187 | alunoRequisitado.getAluno().getId() == userSession.getUser().getId())) |
||
188 | { |
||
189 | throw new NotAuthorizedException("Não está autorizado a submeter esta resposta."); |
||
190 | } |
||
1404 | jmachado | 191 | |
1412 | jmachado | 192 | resposta.setId(0); |
193 | resposta.setQuestionario(questionario); |
||
194 | resposta.setUser(alunoRequisitado.getAluno()); |
||
195 | alunoRequisitado.getRespostaRequisitada().setResposta(resposta); |
||
196 | DaoFactory.getQuestionarioRespostaDaoImpl().save(resposta); |
||
197 | questionario.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS); |
||
198 | } |
||
1404 | jmachado | 199 | |
1412 | jmachado | 200 | |
1425 | jmachado | 201 | SendEmailService sendEmailService = new SendEmailService(); |
202 | 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) |
||
203 | { |
||
204 | 1.5.0/docs/api/java/lang/String.html">String source = "questionario message"; |
||
205 | AnnouncementDaoImpl.FindUsersResult result = DaoFactory.getQuestionarioDaoImpl().findUsersEmails(id,onlyNotAnswered); |
||
1426 | jmachado | 206 | |
1425 | jmachado | 207 | return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
208 | } |
||
1412 | jmachado | 209 | |
1425 | jmachado | 210 | 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) |
211 | { |
||
212 | 1.5.0/docs/api/java/lang/String.html">String source = "questionario curso message"; |
||
213 | AnnouncementDaoImpl.FindUsersResult result = DaoFactory.getQuestionarioDaoImpl().findUsersEmailsPedagogico(onlyNotAnswered,id,0); |
||
214 | return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
||
215 | } |
||
216 | 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) |
||
217 | { |
||
218 | 1.5.0/docs/api/java/lang/String.html">String source = "questionario unidade message"; |
||
219 | AnnouncementDaoImpl.FindUsersResult result = DaoFactory.getQuestionarioDaoImpl().findUsersEmailsPedagogico(onlyNotAnswered,0,id); |
||
220 | return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
||
221 | } |
||
222 | |||
223 | |||
1426 | jmachado | 224 | 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.FindUsersResult result) { |
225 | List<String> usersToConsume = result.emails; |
||
1425 | jmachado | 226 | |
227 | |||
1426 | jmachado | 228 | logger.info("Scheduling mail jobs to " + result.users + " users: " + usersToConsume.size() + " recipients"); |
229 | //while(usersToConsume.size() > 0) |
||
230 | //{ |
||
231 | // Iterator<String> iter = usersToConsume.iterator(); |
||
232 | // List<String> usersToJob = new ArrayList<String>(); |
||
233 | // int contador = 0; |
||
234 | // while(iter.hasNext() && contador < 20) |
||
235 | // { |
||
236 | // usersToJob.add(iter.next()); |
||
237 | // iter.remove(); |
||
238 | // contador++; |
||
239 | // } |
||
1425 | jmachado | 240 | |
1426 | jmachado | 241 | Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
242 | personFrom, |
||
243 | subject, |
||
244 | msg, |
||
245 | usersToConsume, |
||
246 | userSession.getUser()); |
||
1425 | jmachado | 247 | |
1426 | jmachado | 248 | e.setHtml(true); |
249 | EMAILJob emailJob = new EMAILJob(e); |
||
250 | JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
||
251 | //} |
||
252 | enviarComprovativoAoRemetente(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size()); |
||
253 | return result.users; |
||
254 | } |
||
255 | |||
256 | 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) |
||
257 | { |
||
258 | Map<String,String> emailsComprovativos = new HashMap<String, String>(); |
||
259 | if(Email.validEmail(userSession.getUser().getEmail())) |
||
260 | emailsComprovativos.put(userSession.getUser().getEmail(),""); |
||
261 | if(Email.validEmail(userSession.getUser().getOutEmail())) |
||
262 | emailsComprovativos.put(userSession.getUser().getOutEmail(),""); |
||
263 | if(Email.validEmail(userSession.getUser().getPreferrefEmail())) |
||
264 | emailsComprovativos.put(userSession.getUser().getPreferrefEmail(),""); |
||
265 | List<String> comprovativos = new ArrayList<String>(); |
||
266 | comprovativos.addAll(emailsComprovativos.keySet()); |
||
267 | if(comprovativos.size() > 0) |
||
268 | { |
||
269 | Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
||
270 | personFrom, |
||
271 | subject + " (COMPROVATIVO PAE) ", |
||
272 | "<u>Olá " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg, |
||
273 | comprovativos, |
||
274 | userSession.getUser()); |
||
275 | |||
276 | e.setHtml(true); |
||
277 | EMAILJob emailJob = new EMAILJob(e); |
||
278 | JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
||
279 | } |
||
280 | } |
||
281 | |||
282 | |||
1326 | jmachado | 283 | } |