Subversion Repositories bacoAlunos

Rev

Rev 1754 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1327 jmachado 1
package pt.estgp.estgweb.services.questionarios.pedagogico;
2
 
1328 jmachado 3
import org.apache.log4j.Logger;
1327 jmachado 4
import org.json.JSONArray;
1328 jmachado 5
import org.json.JSONException;
1626 jmachado 6
import pt.estgp.estgweb.Globals;
1327 jmachado 7
import pt.estgp.estgweb.domain.*;
1328 jmachado 8
import pt.estgp.estgweb.domain.dao.DaoFactory;
1333 jmachado 9
import pt.estgp.estgweb.domain.dao.impl.CourseUnitDaoImpl;
1327 jmachado 10
import pt.estgp.estgweb.services.jobs.JobDeamon;
11
import pt.estgp.estgweb.services.jobs.ServiceJob;
12
import pt.estgp.estgweb.services.logresults.ILogMessages;
1332 jmachado 13
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
14
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
1327 jmachado 15
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
1329 jmachado 16
import pt.estgp.estgweb.services.questionarios.QuestionariosService;
1327 jmachado 17
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
18
import pt.utl.ist.berserk.logic.serviceManager.IService;
19
 
1333 jmachado 20
import java.io.IOException;
21
import java.util.*;
1327 jmachado 22
 
1328 jmachado 23
 
1327 jmachado 24
/**
25
 * Created by jorgemachado on 22/03/16.
26
 */
27
public class UpdateCoursesAndUnitsJobService extends ServiceJob implements IService
28
{
29
 
1328 jmachado 30
    public 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(UpdateCoursesAndUnitsJobService.class);
31
 
1329 jmachado 32
    //return similar questionarios in same year, semestre and history category
33
    public List<QuestionarioImpl> setAnoSemestre(1.5.0/docs/api/java/lang/String.html">String year, 1.5.0/docs/api/java/lang/String.html">String semestre, long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) throws NotAuthorizedException
34
    {
35
        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name()))
36
        {
37
            questionarioCleared.setYear(year);
38
            questionarioCleared.setSemestre(semestre);
39
            questionarioCleared.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);
40
            List<QuestionarioImpl> similar = DaoFactory.getQuestionarioDaoImpl().findAnoSemestre(year, semestre, questionarioCleared.getQuestionarioHistoryDrive().getId());
41
            new QuestionariosService().loadInit(similar);
42
            return similar;
43
        }
44
        else
45
            throw new NotAuthorizedException("Não pode alterar o formulário porque o questionário está num estado avançado");
46
    }
47
 
48
 
1328 jmachado 49
    public 1.5.0/docs/api/java/lang/String.html">String[] deserializeCoursesList(QuestionarioImpl questionario)
50
    {
51
        JobServiceTaskImpl job = questionario.getCourseSelectionTaskId() > 0 ?
52
                (JobServiceTaskImpl) DaoFactory.getJobServiceTaskDaoImpl().load(questionario.getCourseSelectionTaskId()) :
53
                null;
54
        if(job == null)
55
            return new 1.5.0/docs/api/java/lang/String.html">String[0];
56
 
57
        1.5.0/docs/api/java/lang/String.html">String courses = job.getParameter(ServiceJob.JOB_questionario_courseList_KEY).getObject();
1332 jmachado 58
        return deserializeCoursesList(courses);
59
    }
1328 jmachado 60
 
1332 jmachado 61
    public List<Course> getCoursesList(1.5.0/docs/api/java/lang/String.html">String coursesListJson)
62
    {
63
        List<Course> courses = new ArrayList<Course>();
64
        1.5.0/docs/api/java/lang/String.html">String[] courseIds = deserializeCoursesList(coursesListJson);
65
        for(1.5.0/docs/api/java/lang/String.html">String courseId: courseIds)
66
        {
67
            try
68
            {
69
                Course c = DaoFactory.getCourseDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(courseId));
70
                courses.add(c);
71
            }
72
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
73
            {
74
                logger.info("Course not found in course list with id:" + courseId);
75
            }
76
        }
77
        return courses;
78
    }
79
 
80
    public 1.5.0/docs/api/java/lang/String.html">String[] deserializeCoursesList(1.5.0/docs/api/java/lang/String.html">String json)
81
    {
1328 jmachado 82
        try {
83
 
1332 jmachado 84
            JSONArray jsonArray = new JSONArray(json);
1328 jmachado 85
            1.5.0/docs/api/java/lang/String.html">String[] coursesList = new 1.5.0/docs/api/java/lang/String.html">String[jsonArray.length()];
86
            for(int i=0;i <jsonArray.length();i++)
87
            {
88
                coursesList[i] = ""+ jsonArray.get(i);
89
            }
90
            return coursesList;
91
        } catch (JSONException e) {
92
            logger.error(e,e);
93
        }
94
        return new 1.5.0/docs/api/java/lang/String.html">String[0];
95
    }
1333 jmachado 96
 
1404 jmachado 97
    /*************
98
     * CRIAR O JOB PARA O RUNNER
99
     * @param questionarioId
100
     * @param coursesList
101
     * @param session
102
     * @param questionarioCleared
103
     * @return
104
     * @throws NotAuthorizedException
105
     */
1327 jmachado 106
    public QuestionarioImpl runJobSelectCourses(long questionarioId,1.5.0/docs/api/java/lang/String.html">String[] coursesList,UserSession session,QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
107
 
108
        if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name()))
109
        {
110
            throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
111
        }
1404 jmachado 112
 
113
        /*******VERIFICACAO DE RESPOSTAS*********/
114
        long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
115
        if(respostas == 0)
116
        {
117
            (questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES);
118
        }
119
        else
120
        {
121
            logger.warn("Vai falhar no serviço, deixar falhar para visar o user");
122
        }
123
 
1327 jmachado 124
        JSONArray jsonArray = new JSONArray();
125
        for(1.5.0/docs/api/java/lang/String.html">String sele: coursesList)
126
        {
127
            jsonArray.put(new 1.5.0/docs/api/java/lang/Long.html">Long(sele));
128
        }
129
 
130
        Set<JobServiceTaskParameter> paramsJob = new HashSet<JobServiceTaskParameter>();
131
 
132
        JobServiceTaskParameterImpl paramJobL = DomainObjectFactory.createJobServiceTaskParameterImpl();
133
        paramJobL.setName(ServiceJob.JOB_questionario_courseList_KEY);
134
        paramJobL.setDescription("lista de cursos a associar");
135
        paramJobL.setObject(jsonArray.toString());
136
        paramsJob.add(paramJobL);
137
 
138
 
139
        JobServiceTaskParameterImpl paramJob = DomainObjectFactory.createJobServiceTaskParameterImpl();
140
        paramJob.setName(ServiceJob.JOB_questionario_id_KEY);
141
        paramJob.setDescription("ID do questionário");
142
        paramJob.setObject("" + questionarioId);
143
        paramsJob.add(paramJob);
144
 
145
        JobServiceTask job = JobDeamon.createServiceJob(UpdateCoursesAndUnitsJobService.class, session.getUser(), paramsJob,
146
                "Service: Atribuição de Cursos e Unidades a um questionário Pedagógico");
147
        questionarioCleared.setCourseSelectionTaskId(job.getId());
148
        return questionarioCleared;
149
    }
150
 
1332 jmachado 151
 
1333 jmachado 152
    /**
153
     *
1336 jmachado 154
     * @param questionarioId
155
     * @param session
156
     * @param questionarioCleared
157
     * @throws NotAuthorizedException
158
     *
159
     */
160
    public ILogMessages revertAllAssignments(long questionarioId, UserSession session,QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
161
 
162
        DefaultLogMessages logMessages = new DefaultLogMessages();
163
        if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name()))
164
        {
165
            throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
166
        }
1404 jmachado 167
        long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
168
        if(respostas > 0)
169
        {
170
            logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
171
                    "Operação não permitida, Existem Respostas"));
172
            logger.warn(logMessages.getLastMessage());
173
            serviceLogError(logMessages.getLastMessage());
174
            return logMessages;
175
        }
1336 jmachado 176
        for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId))
177
        {
178
            int unidades = 0;
179
            if(cu.getUnidadesAfetas() != null)
180
            {
181
                unidades = cu.getUnidadesAfetas().size();
182
                for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
183
                {
1401 jmachado 184
                    1.5.0/docs/api/java/lang/String.html">String msg = "Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
185
                    logger.info(msg);
186
                    logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
1336 jmachado 187
                    if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
188
                    {
1401 jmachado 189
                        msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
1336 jmachado 190
                        logger.warn(msg);
191
                        logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
192
                        removeTipologiasERespostasCascade(unidadeCurricularAfeta);
193
                    }
1401 jmachado 194
                    unidadeCurricularAfeta.setCursoAfeto(null);
195
                    DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta);
1336 jmachado 196
                }
197
            }
198
            1.5.0/docs/api/java/lang/String.html">String msg = "Removendo curso afeto:" + cu.getNome() + " e " + unidades + " uniades afetas";
199
            logger.info(msg);
200
            logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.INFO,msg));
201
 
202
            cu.setUnidadesAfetas(null);
203
            DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().delete(cu);
204
        }
205
        questionarioCleared.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);
206
        return logMessages;
207
    }
208
 
1387 jmachado 209
 
1399 jmachado 210
    public static ILogMessages revertAllRespostasCandidatas(long questionarioId, ServiceJob serviceJob) throws NotAuthorizedException {
1387 jmachado 211
 
212
        DefaultLogMessages logMessages = new DefaultLogMessages();
1404 jmachado 213
 
214
        long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
215
        if(respostas > 0)
216
        {
217
            logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
218
                    "Operação não permitida, Existem Respostas"));
219
            logger.warn(logMessages.getLastMessage());
220
            serviceJob.serviceLogError(logMessages.getLastMessage());
221
            throw new NotAuthorizedException(logMessages.getLastMessage());
222
        }
223
 
1387 jmachado 224
        1.5.0/docs/api/java/lang/String.html">String msg = "Revertendo respostas candidatas do questionario " + questionarioId;
1399 jmachado 225
        logger.info(msg);
226
        serviceJob.serviceLogInfo(msg);
1387 jmachado 227
 
228
        for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId))
229
        {
230
            msg = "Revertendo respostas do curso " + cu.getCodigoCurso() + " , iremos remover todas as tipologias e respostas candidatas associadas";
1399 jmachado 231
            logger.info(msg);
232
            serviceJob.serviceLogInfo(msg);
1394 jmachado 233
            ((QuestionarioPedagogicoCursoAfetoImpl)cu).resetAnswerStats();
1387 jmachado 234
 
235
            int unidades = 0;
236
            if(cu.getUnidadesAfetas() != null)
237
            {
238
                unidades = cu.getUnidadesAfetas().size();
239
                for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
240
                {
1394 jmachado 241
                    ((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).resetAnswerStats();
1387 jmachado 242
                    logger.info("Reverting Respostas Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome());
243
                    if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
244
                    {
245
                        msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
1399 jmachado 246
                        logger.info(msg);
247
                        serviceJob.serviceLogWarn(msg);
1387 jmachado 248
                        logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
249
                        removeTipologiasERespostasCascade(unidadeCurricularAfeta);
250
                    }
251
                }
252
            }
253
            logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.INFO,msg));
254
        }
255
        return logMessages;
256
    }
257
 
1336 jmachado 258
    /**
259
     *
260
     */
1399 jmachado 261
    protected static void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta)
1336 jmachado 262
    {
263
        for(QuestionarioPedagogicoTipologiaRequisitada tr: unidadeAfeta.getTipologiasRequisitadas())
264
        {
265
            logger.warn("deleting: " + tr);
266
            if(tr.getAlunosRequisitados() != null)
267
            {
268
                for(QuestionarioPedagogicoAlunoRequisitado ar: tr.getAlunosRequisitados())
269
                {
270
                    logger.warn("deleting: " + ar);
271
                    if(ar.getRespostaRequisitada() != null)
272
                    {
273
                        logger.warn("deleting: Resposta Requisitada " + ar.getRespostaRequisitada().getId());
274
                        if(ar.getRespostaRequisitada().getResposta() != null)
275
                        {
276
                            logger.warn("deleting resposta: " + ar.getRespostaRequisitada().getResposta());
277
                            DaoFactory.getQuestionarioRespostaDaoImpl().delete(ar.getRespostaRequisitada().getResposta());
278
                            ar.getRespostaRequisitada().setResposta(null);
279
                        }
280
                        DaoFactory.getQuestionarioRespostaRequisitadaDaoImplImpl().delete(ar.getRespostaRequisitada());
281
                        ar.setRespostaRequisitada(null);
282
                    }
283
                    DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().delete(ar);
284
                }
285
                tr.setAlunosRequisitados(null);
286
            }
287
            DaoFactory.getQuestionarioPedagogicoTipologiaRequisitadaDaoImpl().delete(tr);
288
        }
289
        unidadeAfeta.setTipologiasRequisitadas(null);
290
    }
291
 
292
    /**
293
     *
1404 jmachado 294
     * #############  JOB TASK ############
295
     * #############  JOB TASK ############
1333 jmachado 296
     * @return
297
     * @throws Throwable
298
     */
1327 jmachado 299
    @1.5.0/docs/api/java/lang/Override.html">Override
1329 jmachado 300
    protected ILogMessages runJobServiceTask() throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable
301
    {
1333 jmachado 302
 
1332 jmachado 303
        DefaultLogMessages logMessages = new DefaultLogMessages();
1329 jmachado 304
        long questionarioId = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
305
        QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);
306
 
1404 jmachado 307
        /********VERIFICACAO DE RESPOSTAS***********/
308
        long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
309
        if(respostas > 0)
310
        {
311
            logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
312
                    "Operação não permitida, Existem Respostas"));
313
            logger.warn(logMessages.getLastMessage());
314
            serviceLogError(logMessages.getLastMessage());
315
            throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas");
316
        }
317
 
1585 jmachado 318
        //aqui sacamos os cursos seleccionados que sao serializados em JSON no Questionario e sao necessários como parametro ao serviço
1332 jmachado 319
        1.5.0/docs/api/java/lang/String.html">String[] coursesList = deserializeCoursesList(q);
1329 jmachado 320
        //Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre
321
 
1333 jmachado 322
        /**logging**/
323
        1.5.0/docs/api/java/lang/String.html">String msg = "Starting running service for questionario: " + q.getId() + " - " + q.getiAnswersProcessorClass().getTitle();
324
        serviceLogInfo(msg);
325
        logger.info(msg);
326
        /**logging**/
1332 jmachado 327
 
1399 jmachado 328
        revertAllRespostasCandidatas(questionarioId,this);
1387 jmachado 329
 
1333 jmachado 330
        List<String> newCourseCodesList = new ArrayList<String>();
1332 jmachado 331
        int count = 0;
332
        int totalCourses = coursesList.length;
333
        for(1.5.0/docs/api/java/lang/String.html">String courseStrId: coursesList)
1328 jmachado 334
        {
1332 jmachado 335
            count++;
336
            try{
337
                1.5.0/docs/api/java/lang/Long.html">Long courseLong = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(courseStrId);
338
                /** logging **/
1333 jmachado 339
                msg = "Loading Course BACO ID: " + courseStrId;
1332 jmachado 340
                serviceLogInfo(msg);
341
                logger.info(msg);
342
                /** logging **/
343
 
344
                Course c = DaoFactory.getCourseDaoImpl().load(courseLong);
1333 jmachado 345
                newCourseCodesList.add(c.getCode());
1332 jmachado 346
                /** logging **/
347
                msg = "(" + count + " of " + totalCourses + ")-> Course loaded: " + c.getName() + "(" + c.getCode() + ")";
348
                serviceLogInfo(msg);
349
                logger.info(msg);
350
                /** logging **/
351
 
1333 jmachado 352
                createCursoAfeto(q, c, logMessages);
1332 jmachado 353
 
1333 jmachado 354
                /** COMMIT OPERATION **/
1332 jmachado 355
                setProgress((int)((((float)count)/((float)totalCourses))*100.0f));
356
                commitPartially();
1333 jmachado 357
                DaoFactory.getQuestionarioDaoImpl().update(q);
358
                /** COMMIT OPERATION **/
1332 jmachado 359
            }
360
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable t)
361
            {
362
                logger.error(t,t);
363
                serviceLogError(t.toString(),t);
364
                logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.ERROR,t.toString()));
365
            }
366
 
1328 jmachado 367
        }
1333 jmachado 368
 
369
        removeUnselectedCourses(q, newCourseCodesList);
370
 
371
        /** COMMIT OPERATION **/
1328 jmachado 372
        setProgress(100);
1332 jmachado 373
        commitPartially();
1333 jmachado 374
        DaoFactory.getQuestionarioDaoImpl().update(q);
375
        /** COMMIT OPERATION **/
1328 jmachado 376
 
1333 jmachado 377
 
378
        msg = "Set courses state as " + QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.name();
1332 jmachado 379
        serviceLogInfo(msg);
380
        logger.info(msg);
1329 jmachado 381
        q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);
382
        commitPartially();
1332 jmachado 383
 
384
        return logMessages;
1327 jmachado 385
    }
1333 jmachado 386
 
387
    /**
388
     *
389
     * @param q
390
     * @param newCourseCodesList
391
     */
392
    private void removeUnselectedCourses(QuestionarioImpl q, List<String> newCourseCodesList) {
393
        /** logging **/
394
        1.5.0/docs/api/java/lang/String.html">String msg = "Removing unselected courses ";
395
        serviceLogInfo(msg);
396
        logger.info(msg);
397
        /** logging **/
398
        List<QuestionarioPedagogicoCursoAfeto> allCoursesInQuestionario =  DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(q.getId());
399
        for(QuestionarioPedagogicoCursoAfeto cursoAfeto: allCoursesInQuestionario)
400
        {
401
            if(!newCourseCodesList.contains(cursoAfeto.getCodigoCurso()))
402
            {
403
                removeCursoAfeto(cursoAfeto);
404
            }
405
        }
406
    }
407
 
408
    private void removeCursoAfeto(QuestionarioPedagogicoCursoAfeto cursoAfeto) {
409
        1.5.0/docs/api/java/lang/String.html">String msg; /** logging **/
410
        msg = "Deleting course: " + cursoAfeto.getCodigoCurso();
411
        serviceLogInfo(msg);
412
        logger.info(msg);
413
        /** logging **/
414
        for(QuestionarioPedagogicoUnidadeCurricularAfeta unidade: cursoAfeto.getUnidadesAfetas())
415
        {
416
            /** logging **/
417
            msg = "--->Deleting unit from course: " + unidade.getCodigoUnidade();
418
            serviceLogInfo(msg);
419
            logger.info(msg);
420
            /** logging **/
421
            DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidade);
422
        }
423
        cursoAfeto.setUnidadesAfetas(null);
424
        DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().delete(cursoAfeto);
425
    }
426
 
1415 jmachado 427
    private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<Long> newUnidadesCodesList) {
1333 jmachado 428
        /** logging **/
429
        1.5.0/docs/api/java/lang/String.html">String msg = "Removing unselected units from course: " + cursoAfetado.getCodigoCurso();
430
        serviceLogInfo(msg);
431
        logger.info(msg);
432
        /** logging **/
433
        Set<QuestionarioPedagogicoUnidadeCurricularAfeta> allUnidades =  cursoAfetado.getUnidadesAfetas();
434
        for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta: allUnidades)
435
        {
1415 jmachado 436
            if(!newUnidadesCodesList.contains(unidadeAfeta.getCourseUnit().getId()))
1333 jmachado 437
            {
438
                /** logging **/
439
                msg = "--->Deleting unidade: " + unidadeAfeta.getCodigoUnidade();
440
                serviceLogInfo(msg);
441
                logger.info(msg);
442
                /** logging **/
443
                DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeAfeta);
444
            }
445
        }
446
    }
447
 
448
 
449
    /**
450
     *
451
     * @param q
452
     * @param c
453
     * @throws IOException
454
     */
1776 jmachado 455
    private void createCursoAfeto(QuestionarioImpl q, Course c, DefaultLogMessages logMessages) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1333 jmachado 456
    {
457
        1.5.0/docs/api/java/lang/String.html">String msg;
458
        QuestionarioPedagogicoCursoAfetoImpl cursoAfeto = null;
1585 jmachado 459
        //esta aqui um to_do mas foi revisto e nao aparenta haver problemas
460
        // As unidades do curso sao carregadas mais abaixo e são adicionadas,
461
        // Todas as não adicionadas são removidas seguidamente usando a lista de adicionadas.
462
        //  to_do antigo: fazer aqui um teste a ver se na lista de unidades found vem as unidades do curso afeto
1335 jmachado 463
        //reativar o set e testar isso
1585 jmachado 464
 
465
        //isto serve para o caso do curso ter sido afeto mais que uma vez, tem de se remover as afetacoes e deixar apenas uma
1333 jmachado 466
        List<QuestionarioPedagogicoCursoAfeto> cursosFound = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(q.getId(),c.getCode());
467
        if(cursosFound != null && cursosFound.size() > 1)
468
        {
469
            msg = "Encontrados mais que um curso nos mesmos códigos:" + c.getCode() + " apagando um";
470
            serviceLogWarn(msg);
471
            logger.warn(msg);
472
            logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
473
            cursoAfeto = (QuestionarioPedagogicoCursoAfetoImpl) cursosFound.get(0);
474
            cursosFound.remove(0);
475
            for(QuestionarioPedagogicoCursoAfeto ca: cursosFound)
476
                removeCursoAfeto(ca);
477
        }
478
        else if(cursosFound != null && cursosFound.size() == 1)
479
        {
480
            msg = "Curso " + c.getCode() + " encontrado, vai atualizar";
481
            serviceLogInfo(msg);
482
            logger.info(msg);
483
            cursoAfeto = (QuestionarioPedagogicoCursoAfetoImpl) cursosFound.get(0);
484
        }
485
        else
486
        {
487
            msg = "Criando novo curso para o código " + c.getCode();
488
            serviceLogInfo(msg);
489
            logger.info(msg);
490
            cursoAfeto = DomainObjectFactory.createQuestionarioPedagogicoCursoAfeto();
491
            DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().save(cursoAfeto);
1335 jmachado 492
            cursoAfeto.setUnidadesAfetas(new HashSet<QuestionarioPedagogicoUnidadeCurricularAfeta>());
1333 jmachado 493
        }
494
 
495
        cursoAfeto.resetStats();
496
 
497
        cursoAfeto.setCourse(c);
1692 jmachado 498
        cursoAfeto.setCodigoInstituicao(c.getDepartment().getCourseSchool().getInstitutionalCode());
499
        cursoAfeto.setNomeInstituicao(c.getDepartment().getCourseSchool().getName());
1333 jmachado 500
        cursoAfeto.setAno(q.getYear());
501
        cursoAfeto.setCodigoCurso(c.getCode());
502
        cursoAfeto.setNome(c.getName());
503
        cursoAfeto.setQuestionario(q);
504
        cursoAfeto.setSemestre(q.getSemestre());
505
 
506
 
507
 
1335 jmachado 508
 
1415 jmachado 509
        List<Long> newUnitCodesList = new ArrayList<Long>();
1333 jmachado 510
        int countUnits = 0;
1585 jmachado 511
        //vai buscar todas as unidades da base de dados que fazem match as necessidades
1333 jmachado 512
        List<CourseUnitDaoImpl.CourseUnitResult> results = DaoFactory.getCourseUnitDaoImpl().loadCourseUnits(c.getId(), q.getSemestre(), q.getYear());
513
        int totalUnits =  results.size();
514
        for(CourseUnitDaoImpl.CourseUnitResult cur : results)
515
        {
516
            countUnits++;
517
            CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(cur.id);
1415 jmachado 518
            newUnitCodesList.add(cu.getId());
1333 jmachado 519
            /** logging **/
520
            msg = "---->(" + countUnits + " of " + totalUnits  +") CourseUnit loaded: " + cu.getName() + "(" + cu.getCode() + ")";
521
            serviceLogInfo(msg);
522
            logger.info(msg);
523
            /** logging **/
1585 jmachado 524
            //este metodo procura a unidade primeiro e apenas a cria se ela ainda nao existir como afeta
1333 jmachado 525
            createUnidadeAfeta(cursoAfeto, cur,cu, logMessages);
526
            DaoFactory.getCourseUnitDaoImpl().evict(cu);
527
        }
528
 
1585 jmachado 529
        //o problema poderia dar-se se uma unidade desaparece da base de dados, nesse caso ela já era afeta e o sistema nao a iria remover
530
        //porque apesar de nao estar na nova lista de codigos, tb nao esta no curso afeto, mas o sistema
531
        //o que faz é carregar todas as afetas e remover todas as que nao estejam na lista de novas
1333 jmachado 532
        removeUnselectedUnits(cursoAfeto,newUnitCodesList);
533
    }
534
 
535
    /**
536
     *
537
     * @param cursoAfeto
538
     * @param cur
539
     * @throws IOException
540
     */
1776 jmachado 541
    private void createUnidadeAfeta(QuestionarioPedagogicoCursoAfetoImpl cursoAfeto, CourseUnitDaoImpl.CourseUnitResult cur, CourseUnit cu, DefaultLogMessages logMessages) throws 1.5.0/docs/api/java/io/IOException.html">IOException {
1333 jmachado 542
 
543
        1.5.0/docs/api/java/lang/String.html">String msg;
544
        QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta = null;
1415 jmachado 545
        List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getId());
1333 jmachado 546
        if(unidadesFound != null && unidadesFound.size() > 1)
547
        {
1415 jmachado 548
            msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " com id sistema(" + cu.getId() + ") apagando um";
1333 jmachado 549
            serviceLogWarn(msg);
550
            logger.warn(msg);
551
            logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
552
            unidadeAfeta = (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadesFound.get(0);
553
            unidadesFound.remove(0);
554
            DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadesFound);
555
        }
556
        else if(unidadesFound != null && unidadesFound.size() == 1)
557
        {
558
            msg = "Unidade " +  cu.getCode() + " encontrada, vai atualizar";
559
            serviceLogInfo(msg);
560
            logger.info(msg);
561
            unidadeAfeta = (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadesFound.get(0);
562
        }
563
        else
564
        {
565
            msg = "Criando nova unidade para o código " + cu.getCode();
566
            serviceLogInfo(msg);
567
            logger.info(msg);
568
            unidadeAfeta = DomainObjectFactory.createQuestionarioPedagogicoUnidadeCurricularAfeta();
1338 jmachado 569
            unidadeAfeta.setUsar(true);
1572 jmachado 570
            unidadeAfeta.setUsarOlap(true);
1338 jmachado 571
            unidadeAfeta.setVista(false);
1333 jmachado 572
            DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().save(unidadeAfeta);
573
        }
574
 
575
        unidadeAfeta.resetStats();
576
        unidadeAfeta.setCursoAfeto(cursoAfeto);//so metemos de um dos lados
577
        unidadeAfeta.setCourseUnit(cu);
578
        unidadeAfeta.setCodigoUnidade(cu.getCode());
1396 jmachado 579
        unidadeAfeta.addObs("");
1336 jmachado 580
        unidadeAfeta.setNome(cu.getName());
1333 jmachado 581
 
582
        unidadeAfeta.setMarked(false);
583
 
584
 
1626 jmachado 585
        CourseUnitImpl.Tipologias tipologias = ((CourseUnitImpl)cu).getTipologiasClass();
586
        ArrayList<CourseUnitImpl.Tipologia> mergedTipologias = tipologias.obtainMergeTipologias();
1333 jmachado 587
 
1626 jmachado 588
        //Apenas por uma questão de ficar tudo atualizado, porque os contadores vao ser atualizados linha
589
        //a linha quando a pagina de cursos for carregada nas atribuicoes
590
        updateCountersUnidadeAfeta(tipologias, cur, cu, unidadeAfeta, mergedTipologias);
591
 
592
    }
593
 
594
    public static void updateCountersUnidadeAfeta(QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta)
595
    {
596
        try
597
        {
598
            CourseUnitImpl cuImpl = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().narrow(unidadeAfeta.getCourseUnit());
599
            CourseUnitImpl.Tipologias tipologias = cuImpl.getTipologiasClass();
600
            ArrayList<CourseUnitImpl.Tipologia> mergedTipologias = tipologias.obtainMergeTipologias();
601
            updateCountersUnidadeAfeta(tipologias,null,unidadeAfeta.getCourseUnit(),unidadeAfeta,mergedTipologias);
602
        } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
603
            logger.error(e, e);
604
        }
605
    }
606
 
607
    public static void updateCountersUnidadeAfeta(CourseUnitImpl.Tipologias tipologias,QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta, ArrayList<CourseUnitImpl.Tipologia> mergedTipologias) {
608
        updateCountersUnidadeAfeta(tipologias,null,unidadeAfeta.getCourseUnit(),unidadeAfeta,mergedTipologias);
609
    }
610
 
611
    private static void updateCountersUnidadeAfeta(CourseUnitImpl.Tipologias tipologias,CourseUnitDaoImpl.CourseUnitResult cur, CourseUnit cu, QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta, ArrayList<CourseUnitImpl.Tipologia> mergedTipologias) {
612
 
613
        unidadeAfeta.setLastTipologiasUpdateDate(new 5+0%2Fdocs%2Fapi+Date">Date());
614
        unidadeAfeta.setAddedTipologias(tipologias.getTipologiasExtraAdicionadas().size()); //novo aqui
615
        unidadeAfeta.setTipologias(mergedTipologias.size());
616
 
617
        checkTurmaAndProfsSumarios(cu, unidadeAfeta, mergedTipologias);
1333 jmachado 618
        checkProfs(cur, unidadeAfeta);
619
        checkTurmas(cur, unidadeAfeta);
620
        checkStudents(cur, unidadeAfeta);
1626 jmachado 621
        //calculo das excluidas requer analise se usamos simples ou merged
1333 jmachado 622
 
1626 jmachado 623
        checkExcluidas(unidadeAfeta, mergedTipologias,tipologias);
1338 jmachado 624
 
1333 jmachado 625
        if(unidadeAfeta.isMarked())
1626 jmachado 626
            ((QuestionarioPedagogicoCursoAfetoImpl)unidadeAfeta.getCursoAfeto()).incMarcadas();
1333 jmachado 627
    }
628
 
629
    /**
630
     *
631
     * @param cur
632
     * @param unidadeAfeta
633
     */
1626 jmachado 634
    private static void checkTurmas(CourseUnitDaoImpl.CourseUnitResult cur, QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta) {
635
 
636
        int turmas = 0;
637
        if(cur == null)
1333 jmachado 638
        {
1626 jmachado 639
            turmas = unidadeAfeta.getCourseUnit().getTurmas().size();
640
        }
641
        else
642
        {
643
            turmas = cur.turmas;
644
        }
645
        if(turmas == 0)
646
        {
1333 jmachado 647
            unidadeAfeta.setTurmas(0);
648
            unidadeAfeta.setMarked(true); //WARNING
649
            unidadeAfeta.addObs("Não tem turmas");
650
        }
651
        else
1626 jmachado 652
            unidadeAfeta.setTurmas(turmas);
1333 jmachado 653
    }
654
 
655
    /**
656
     *
657
     * @param unidadeAfeta
1626 jmachado 658
     * @param mergedTipologias
659
     * @param tipologiasOriginais
1333 jmachado 660
     */
1626 jmachado 661
 
662
    private static void checkExcluidas(QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta,ArrayList<CourseUnitImpl.Tipologia> mergedTipologias, CourseUnitImpl.Tipologias tipologiasOriginais) {
663
        int excluidas = 0;
664
 
665
        if(unidadeAfeta.getCursoAfeto().isUsarTipologias())
1333 jmachado 666
        {
1626 jmachado 667
            for(CourseUnitImpl.Tipologia t: mergedTipologias)
668
            {
669
                if(t.isExclude())
670
                    excluidas++;
671
            }
1333 jmachado 672
        }
673
        else
1626 jmachado 674
        {
675
            for(CourseUnitImpl.Tipologia t: tipologiasOriginais.obtainTipologiasSimples(unidadeAfeta.getCourseUnit()))
676
            {
677
                if(t.isExclude())
678
                    excluidas++;
679
            }
680
        }
681
        unidadeAfeta.setExcludedTipologias(excluidas);
1333 jmachado 682
    }
683
 
684
    /**
685
     *
686
     * @param cur
687
     * @param unidadeAfeta
688
     */
1626 jmachado 689
    private static void checkProfs(CourseUnitDaoImpl.CourseUnitResult cur, QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta) {
690
 
691
        int teachers = 0;
692
        if(cur == null)
1333 jmachado 693
        {
1626 jmachado 694
            teachers = unidadeAfeta.getCourseUnit().getTeachers().size();
695
        }
696
        else
697
        {
698
            teachers = cur.teachers;
699
        }
700
        if(teachers == 0)
701
        {
702
            unidadeAfeta.setProfs(0);
1333 jmachado 703
            unidadeAfeta.setMarked(true); //WARNING
1626 jmachado 704
            unidadeAfeta.addObs("Não tem professores");
1333 jmachado 705
        }
706
        else
1626 jmachado 707
            unidadeAfeta.setProfs(teachers);
1333 jmachado 708
    }
709
 
710
    /**
711
     *
1626 jmachado 712
     * @param cur
1333 jmachado 713
     * @param unidadeAfeta
714
     */
1626 jmachado 715
    private static void checkStudents(CourseUnitDaoImpl.CourseUnitResult cur, QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta) {
716
        int students = 0;
717
        if(cur == null)
1333 jmachado 718
        {
1626 jmachado 719
                students = unidadeAfeta.getCourseUnit().getStudents().size();
1333 jmachado 720
        }
1626 jmachado 721
        else
1333 jmachado 722
        {
1626 jmachado 723
            students = cur.students;
1333 jmachado 724
        }
1626 jmachado 725
 
726
        if(students == 0)
727
        {
728
            unidadeAfeta.setStudents(0);
729
            unidadeAfeta.setMarked(true); //WARNING
730
            unidadeAfeta.addObs("Não tem estudantes");
731
        }
732
        else
733
            unidadeAfeta.setStudents(students);
1333 jmachado 734
    }
735
 
736
    /**
737
     *
738
     * @param cu
739
     * @param unidadeAfeta
740
     * @param mergedTipologias
741
     */
1626 jmachado 742
    private static void checkTurmaAndProfsSumarios(CourseUnit cu, QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta, ArrayList<CourseUnitImpl.Tipologia> mergedTipologias) {
1624 jmachado 743
        /*
744
            <td>${unidade.profsWithoutTurma}</td><%--PROFS SEM SUMARIO--%>
745
            <td>${unidade.turmaWithoutProf}</td><%--TURMAS SEM SUMARIO--%>
746
         */
1333 jmachado 747
        if(cu.getTeachers() != null)
748
        {
1624 jmachado 749
            HashMap<String,Boolean> turmaWithSumarios = new HashMap<String, Boolean>();
750
            HashMap<String,Boolean> profsWithSumarios = new HashMap<String, Boolean>();
1333 jmachado 751
            for(CourseUnitImpl.Tipologia t: mergedTipologias)
752
            {
1624 jmachado 753
                if(t.isSumario())
754
                {
755
                    turmaWithSumarios.put(t.getCdTurma(),true);
756
                    profsWithSumarios.put(t.getCdDocente(),true);
757
                }
1333 jmachado 758
            }
759
            for(Teacher t: cu.getTeachers())
760
            {
1624 jmachado 761
                if(profsWithSumarios.get(""+t.getSigesCode())==null)
1333 jmachado 762
                {
763
                    unidadeAfeta.setProfsWithoutTurma(unidadeAfeta.getProfsWithoutTurma()+1);
764
                    unidadeAfeta.setMarked(true);
765
                }
766
                DaoFactory.getTeacherDaoImpl().evict(t);
767
            }
768
 
769
            for(CourseUnitTurma t: cu.getTurmas())
770
            {
1624 jmachado 771
                if(turmaWithSumarios.get(t.getTurma())==null)
1333 jmachado 772
                {
773
                    unidadeAfeta.setTurmaWithoutProf(unidadeAfeta.getTurmaWithoutProf() + 1);
774
                    unidadeAfeta.setMarked(true);
775
                }
776
                DaoFactory.getCourseUnitTurmaDaoImpl().evict(t);
777
            }
778
        }
779
    }
1337 jmachado 780
 
1626 jmachado 781
    /**
782
     *
783
     * @param cu
784
     * @param unidadeAfeta
785
     * @return
786
     * @throws IOException
787
     */
788
    /*
1776 jmachado 789
    private ArrayList<CourseUnitImpl.Tipologia> copiarTipologias(CourseUnit cu, QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta) throws IOException {
1626 jmachado 790
        try
791
        {
792
            CourseUnitImpl.Tipologias tipologias = ((CourseUnitImpl)cu).getTipologiasClass();
793
            //OBTEM-SE TODAS E DEPOIS QUANDO SE GERAREM AS RESPOSTAS VAO-SE OBTER ENTAO SIMPLES OU COMPLEXAS
794
            //if(cu.getCode().equals("100595"))
795
            //    System.out.println();
1337 jmachado 796
 
1626 jmachado 797
            ArrayList<CourseUnitImpl.Tipologia> mergedTipologias = tipologias.obtainMergeTipologias();
798
            //unidadeAfeta.setTipologias(mergedTipologias.size());
799
            unidadeAfeta.setTipologiasJson(CourseUnitImpl.Tipologias.serializeMergedList(mergedTipologias));
800
            //unidadeAfeta.setAddedTipologias(tipologias.getTipologiasExtraAdicionadas().size());
801
 
802
            return mergedTipologias;
803
        }
804
        catch(Throwable e)
805
        {
806
            ArrayList<CourseUnitImpl.Tipologia> tipologias = new ArrayList<CourseUnitImpl.Tipologia>();
807
            unidadeAfeta.setMarked(true);
808
            unidadeAfeta.addObs("Erro a descodificar tipologias");
809
            unidadeAfeta.setTipologiasJson(CourseUnitImpl.Tipologias.serializeMergedList(tipologias));
810
            return tipologias;
811
        }
812
    }
813
    */
814
 
815
 
816
 
1337 jmachado 817
    /**
818
     * SERVIÇO
819
     * @param questionarioId
820
     * @param cursosAfetos
821
     * @param session
822
     * @param questionarioCleared
823
     * @throws IOException
824
     * @throws NotAuthorizedException
825
     */
1776 jmachado 826
    public void updateTipologiasPedagogico(long questionarioId, List<QuestionarioPedagogicoCursoAfeto> cursosAfetos, UserSession session,QuestionarioImpl questionarioCleared) throws 1.5.0/docs/api/java/io/IOException.html">IOException, NotAuthorizedException {
1337 jmachado 827
 
828
        if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name()))
829
        {
830
            throw new NotAuthorizedException("Nao tem autorização para alterar as tipologias");
831
        }
832
        for(QuestionarioPedagogicoCursoAfeto cursoAfeto: cursosAfetos)
833
        {
834
            QuestionarioPedagogicoCursoAfeto cuAfetoPersistent = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().load(cursoAfeto.getId());
835
            if(cuAfetoPersistent.getQuestionario().getId() == questionarioId)
836
            {
837
                cuAfetoPersistent.setUsarTipologias(cursoAfeto.isUsarTipologias());
838
            }
839
            else
840
                logger.warn("Curso pedido no serviço não faz parte do questionario requisitado: " + cursoAfeto.getId() + " " + cursoAfeto.getQuestionario().getId() + " != " + questionarioId);
841
 
842
        }
843
 
844
    }
1338 jmachado 845
 
846
    public void updateCheckVarPedagogico(long questionarioId,long unidadeAfetaId, 1.5.0/docs/api/java/lang/String.html">String op,1.5.0/docs/api/java/lang/String.html">String val,UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
847
 
1395 jmachado 848
        if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name()) &&
849
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) &&
1378 jmachado 850
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name()) &&
1754 jmachado 851
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name()) &&
852
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_OLAP_UNIT.name()))
1338 jmachado 853
        {
854
            throw new NotAuthorizedException("Nao tem autorização para alterar as tipologias");
855
        }
856
        QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidade = (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().load(unidadeAfetaId);
857
        if(op.equals("usar"))
858
        {
859
            unidade.setUsar(1.5.0/docs/api/java/lang/Boolean.html">Boolean.parseBoolean(val));
860
        }
1754 jmachado 861
        else if(op.equals("usarOlap"))
862
        {
863
            unidade.setUsarOlap(1.5.0/docs/api/java/lang/Boolean.html">Boolean.parseBoolean(val));
864
        }
1338 jmachado 865
        else if(op.equals("vista"))
866
        {
867
            unidade.setVista(1.5.0/docs/api/java/lang/Boolean.html">Boolean.parseBoolean(val));
868
        }
1378 jmachado 869
        else if(op.equals("vistaProfs"))
870
        {
871
            unidade.setVistaProfs(1.5.0/docs/api/java/lang/Boolean.html">Boolean.parseBoolean(val));
872
        }
1338 jmachado 873
        else if(op.equals("observacoes"))
874
        {
875
            unidade.setObs(val);
876
        }
877
    }
1378 jmachado 878
 
1626 jmachado 879
    public void updateCheckVarExcludedPedagogico(long questionarioId,long unidadeAfetaId,1.5.0/docs/api/java/lang/String.html">String docente,1.5.0/docs/api/java/lang/String.html">String turma,1.5.0/docs/api/java/lang/String.html">String tipologia, 1.5.0/docs/api/java/lang/String.html">String op,1.5.0/docs/api/java/lang/String.html">String val,UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
880
 
881
        if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name()) &&
882
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) &&
883
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name()) &&
884
                !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name()))
885
        {
886
            if(!session.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN) && !session.getUser().isSuperuserOrAdmin())
887
                throw new NotAuthorizedException("Nao tem autorização para alterar as tipologias");
888
        }
889
        QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidade = (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().load(unidadeAfetaId);
890
        if(op.equals("excludeTipologia"))
891
        {
892
            CourseUnitImpl cuImpl = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().narrow(unidade.getCourseUnit());
893
            cuImpl.setExcludedTipologia(1.5.0/docs/api/java/lang/Boolean.html">Boolean.parseBoolean(val),docente,tipologia,turma);
894
            try {
895
                CourseUnitImpl.Tipologias tipologias = cuImpl.getTipologiasClass();
896
                checkExcluidas(unidade,tipologias.obtainMergeTipologias(),tipologias);
897
            } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
898
                logger.error(e,e);
899
            }
900
        }
901
    }
902
 
1327 jmachado 903
}