Subversion Repositories bacoAlunos

Rev

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