Subversion Repositories bacoAlunos

Rev

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
}