Subversion Repositories bacoAlunos

Rev

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