Subversion Repositories bacoAlunos

Rev

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

Rev Author Line No. Line
110 susana 1
package pt.estgp.estgweb.domain.dao.impl;
2
 
748 jmachado 3
import org.apache.log4j.Logger;
205 jmachado 4
import org.hibernate.Criteria;
358 jmachado 5
import org.hibernate.Query;
748 jmachado 6
import org.hibernate.criterion.Criterion;
7
import org.hibernate.criterion.Order;
1103 jmachado 8
import org.hibernate.criterion.Projections;
376 jmachado 9
import org.hibernate.sql.JoinFragment;
961 jmachado 10
import pt.estgp.estgweb.domain.*;
11
import pt.estgp.estgweb.domain.dao.DaoFactory;
748 jmachado 12
import pt.estgp.estgweb.domain.dao.DaoUtils;
13
import pt.estgp.estgweb.services.common.SearchTypeEnum;
14
import pt.estgp.estgweb.utils.DatesUtils;
116 jmachado 15
 
961 jmachado 16
import java.util.ArrayList;
1701 jmachado 17
import java.util.HashMap;
125 fvelez 18
import java.util.List;
19
 
748 jmachado 20
import static org.hibernate.criterion.Restrictions.*;
21
 
110 susana 22
/**
23
 * @author Jorge Machado
24
 * @date 28/Fev/2008
25
 * @time 2:51:06
26
 * @see pt.estgp.estgweb.domain.dao.impl
27
 */
28
public class CourseUnitDaoImpl extends CourseUnitDao
29
{
30
 
219 jmachado 31
    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(CourseUnitDaoImpl.class);
110 susana 32
 
751 jmachado 33
 
1692 jmachado 34
    public CourseUnitDaoImpl()
202 jmachado 35
    {
110 susana 36
    }
37
 
38
    public static CourseUnitDaoImpl getInstance()
39
    {
40
        if (myInstance == null)
41
            myInstance = new CourseUnitDaoImpl();
42
        return (CourseUnitDaoImpl) myInstance;
43
    }
44
 
125 fvelez 45
    public List<CourseUnit> loadBySigesCode(1.5.0/docs/api/java/lang/String.html">String sigesCode)
116 jmachado 46
    {
202 jmachado 47
        return createCriteria().add(eq("code", sigesCode)).list();
116 jmachado 48
    }
202 jmachado 49
 
214 jmachado 50
    public List<CourseUnit> loadByCourse(long course, 1.5.0/docs/api/java/lang/String.html">String importYear)
51
    {
371 jmachado 52
        return createCriteria().add(eq("importYear", importYear)).add(eq("course.id", course)).list();
214 jmachado 53
    }
54
 
1568 jmachado 55
    public List<CourseUnit> loadByCourseSiges(1.5.0/docs/api/java/lang/String.html">String course, 1.5.0/docs/api/java/lang/String.html">String importYear)
56
    {
57
        return createCriteria().add(eq("importYear", importYear)).add(eq("course.code", course)).list();
58
    }
59
 
1327 jmachado 60
    public List<CourseUnit> loadByCourseTurma(long courseId, 1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String turma) {
61
        5+0%2Fdocs%2Fapi+List">List o =  createCriteria()
62
                .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
63
                .createAlias("turmas", "turma")
64
                .add(eq("importYear",importYear))
65
                .add(eq("course.id", courseId))
66
                .add(eq("turma.turma", turma))
67
                .list();
68
        return o;
69
    }
70
 
371 jmachado 71
    public List<CourseUnit> load(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
358 jmachado 72
    {
371 jmachado 73
        return createCriteria().add(eq("importYear", importYear)).add(eq("semestre", semestre)).list();
358 jmachado 74
    }
75
 
1312 jmachado 76
    public List<Long> loadByYearInstitutionCode(1.5.0/docs/api/java/lang/String.html">String importYear, int institutionCode)
77
    {
78
        return createCriteria()
1692 jmachado 79
                .createAlias("course", "c")
80
                .createAlias("c.department", "d")
81
                .createAlias("d.courseSchool","sc")
1312 jmachado 82
                .setProjection(Projections.property("id"))
83
                .add(eq("importYear", importYear))
1692 jmachado 84
                .add(eq("sc.institutionalCode", institutionCode+""))
1312 jmachado 85
                .list();
86
    }
87
 
771 jmachado 88
    public List<CourseUnit> loadYear(1.5.0/docs/api/java/lang/String.html">String importYear)
89
    {
90
        return createCriteria().add(eq("importYear", importYear)).list();
91
    }
92
 
767 jmachado 93
 
94
 
371 jmachado 95
    public List<Long> loadIds(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
358 jmachado 96
    {
1312 jmachado 97
        if(semestre == null || semestre.trim().length() == 0)
98
            return loadIds(importYear);
371 jmachado 99
        1.5.0/docs/api/javax/management/Query.html">Query q = createQuery("select c.id from c in class " + CourseUnit.class.getName() + " where c.importYear = ? and c.semestre = ?");
100
        q.setString(0, importYear);
101
        q.setString(1, semestre);
358 jmachado 102
        return q.list();
103
    }
104
 
995 jmachado 105
    public List<Long> loadIds(1.5.0/docs/api/java/lang/String.html">String importYear)
106
    {
107
        1.5.0/docs/api/javax/management/Query.html">Query q = createQuery("select c.id from c in class " + CourseUnit.class.getName() + " where c.importYear = ?");
108
        q.setString(0, importYear);
109
        //q.setString(1, semestre);
110
        return q.list();
111
    }
112
 
218 jmachado 113
    public List<CourseUnit> loadSubscribedImportYearUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear)
114
    {
1072 jmachado 115
        return createCriteria()
371 jmachado 116
                .createAlias("students", "st")
1072 jmachado 117
                .add(eq("st.id", studentId))
118
                                .add(eq("importYear", importYear))
119
                                .addOrder(Order.asc("name"))
120
                                .list();
218 jmachado 121
    }
420 jmachado 122
    public List<CourseUnit> loadSubscribedImportYearSemestreUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
123
    {
124
        Criteria c  =createCriteria()
1072 jmachado 125
                                .createAlias("students", "st")
126
                                .add(eq("st.id", studentId))
127
                .add(eq("importYear", importYear));
420 jmachado 128
        if(semestre != null)
129
            c.add(eq("semestre", semestre));
130
        return c.addOrder(Order.asc("name")).list();
131
    }
255 jmachado 132
 
133
    public List<CourseUnit> loadSubscribedOtherImportYearUnits(long studentId, 1.5.0/docs/api/java/lang/String.html">String importYear)
134
    {
371 jmachado 135
        return createCriteria().add(not(eq("importYear", importYear)))
136
                .createAlias("students", "st")
255 jmachado 137
                .add(eq("st.id", studentId)).addOrder(Order.asc("name")).list();
138
    }
343 jmachado 139
 
253 jmachado 140
    public List<CourseUnitImpl> loadTeachedImportYearUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
218 jmachado 141
    {
371 jmachado 142
        return createCriteria().add(eq("importYear", importYear))
143
                .createAlias("teachers", "st")
255 jmachado 144
                .add(eq("st.id", teacherId)).addOrder(Order.asc("importYear")).addOrder(Order.asc("name")).list();
218 jmachado 145
    }
146
 
821 jmachado 147
    public List<CourseUnitImpl> loadResponsableImportYearUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
148
    {
149
        return createCriteria().add(eq("importYear", importYear))
150
                .add(eq("responsableTeacher.id", teacherId)).addOrder(Order.asc("importYear")).addOrder(Order.asc("name")).list();
151
    }
152
 
1585 jmachado 153
    public List<CourseUnit> loadTeachedImportYearSemestreUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
154
    {
155
        return loadTeachedImportYearSemestreUnits(teacherId, importYear,null);
156
    }
420 jmachado 157
    public List<CourseUnit> loadTeachedImportYearSemestreUnits(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semestre)
158
    {
159
        Criteria c  =createCriteria()
160
                .add(eq("importYear", importYear))
161
                .createAlias("teachers", "st")
162
                .add(eq("st.id", teacherId))
163
                .add(eq("st.id", teacherId));
164
        if(semestre != null)
165
            c.add(eq("semestre", semestre));
166
        return c.addOrder(Order.asc("name")).list();
167
    }
168
 
169
 
170
 
163 jmachado 171
    public CourseUnit loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode)
172
    {
202 jmachado 173
        return (CourseUnit) createCriteria().add(eq("code", sigesCode)).uniqueResult();
163 jmachado 174
    }
116 jmachado 175
 
202 jmachado 176
    public CourseUnit loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode)
177
    {
178
        return (CourseUnit) createCriteria().add(eq("code", sigesCode)).add(eq("courseCode", courseCode)).uniqueResult();
179
    }
163 jmachado 180
 
228 jmachado 181
    public CourseUnit loadBySigesCodeUniqueSubscribed(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String year, 1.5.0/docs/api/java/lang/String.html">String courseCode, long studentId, 1.5.0/docs/api/java/lang/String.html">String semestre)
219 jmachado 182
    {
371 jmachado 183
        List<CourseUnit> cus = createCriteria()
219 jmachado 184
                .add(eq("code", sigesCode))
228 jmachado 185
                .add(eq("importYear", year))
219 jmachado 186
                .add(eq("courseCode", courseCode))
228 jmachado 187
                .add(eq("semestre", semestre))
371 jmachado 188
                .createAlias("students", "st")
189
                .add(eq("st.id", studentId))
219 jmachado 190
                .list();
371 jmachado 191
        if (cus.size() > 1)
219 jmachado 192
        {
193
            CourseUnit cu1 = cus.get(0);
194
            CourseUnit cu2 = cus.get(1);
371 jmachado 195
            if (cus.size() > 2)
219 jmachado 196
            {
197
                logger.error("CourseUnit in more than two places in a course:" + cu1.getCode());
198
            }
199
            else
200
            {
371 jmachado 201
                if (cu1.getSemestre().equals("S1"))
219 jmachado 202
                {
371 jmachado 203
                    if (cu2.getSemestre().equals("S1"))
219 jmachado 204
                        logger.error("CourseUnit in more than two places in a semestre:" + cu1.getCode());
205
                    else
206
                    {
207
                        return cu2;
208
                    }
209
                }
210
                else
211
                {
371 jmachado 212
                    if (cu2.getSemestre().equals("S2"))
219 jmachado 213
                        logger.error("CourseUnit in more than two places in a semestre:" + cu1.getCode());
214
                    else
215
                    {
216
                        return cu1;
217
                    }
218
                }
219
            }
220
        }
371 jmachado 221
        else if (cus.size() == 1)
219 jmachado 222
            return cus.get(0);
223
 
224
        return null;
225
    }
226
 
751 jmachado 227
 
228
    public void consistCourseUnitCourseCodes(1.5.0/docs/api/java/lang/String.html">String importYear)
229
    {
230
           List<CourseUnit> courseUnit =  createCriteria()
231
                        .add(eq("importYear", importYear)).list();
232
        for(CourseUnit cu: courseUnit)
233
        {
234
            if(cu.getCourse() != null)
235
            {
236
                if(cu.getCourseCode() == null || (cu.getCourseCode() != null && !cu.getCourseCode().equals(cu.getCourse().getCode())))
237
                {
238
                    1.5.0/docs/api/java/lang/System.html">System.out.println("Course code wrong: " + cu.getId() + " - " + cu.getName() + " old CourseCode " + cu.getCourseCode() + " now:" + cu.getCourse().getCode() );
239
                }
240
 
241
                if(cu.getCourseName() == null || (cu.getCourseName() != null && !cu.getCourseName().equals(cu.getCourse().getName())))
242
                {
243
                    1.5.0/docs/api/java/lang/System.html">System.out.println("Course name wrong: " + cu.getId() + " - " + cu.getName() + " old CourseCode " + cu.getCourseName() + " now:" + cu.getCourse().getName() );
244
                }
245
                cu.setCourseCode(cu.getCourse().getCode());
246
                cu.setCourseName(cu.getCourse().getName());
247
            }
248
            else
249
            {
250
                cu.setCourseCode("");
251
                cu.setCourseName("");
252
            }
253
        }
254
    }
255
 
256
 
1117 jmachado 257
    //TODO Na actualizacao de uma cadeira para o curso de TESTE mudar o coursecode para o o coursecode desse curso para nao deixar os dados duplicados e mal
748 jmachado 258
    //se nao a carregar unidades vai buscar a errada
1138 jmachado 259
 
260
    /**
261
     * Turma required to be unique in BACO Model
262
     * @param sigesCode
263
     * @param courseCode
264
     * @param semestre
265
     * @param year
266
     * @return
267
     */
268
    public List<CourseUnit> loadBySigesCode(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
202 jmachado 269
    {
1138 jmachado 270
        return
225 jmachado 271
                createCriteria()
272
                        .add(eq("code", sigesCode))
273
                        .add(eq("courseCode", courseCode))
274
                        .add(eq("semestre", semestre))
275
                        .add(eq("importYear", year))
1138 jmachado 276
                        .list();
202 jmachado 277
    }
767 jmachado 278
 
1117 jmachado 279
    /**
280
     * Metodo especial para a fase de transicao para terem código de turma
281
     * @param sigesCode
282
     * @param courseCode
283
     * @param semestre
284
     * @param year
285
     * @return
286
     */
287
    public List<CourseUnit> loadBySigesCodeTurmaNull(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
288
    {
1232 jmachado 289
        //todo cdTurma Rollback
1117 jmachado 290
        return (List<CourseUnit>)
291
                createCriteria()
292
                        .add(eq("code", sigesCode))
293
                        .add(eq("courseCode", courseCode))
294
                        .add(eq("semestre", semestre))
295
                        .add(eq("importYear", year))
296
                        .add(isNull("cdTurma"))
297
                        .list();
298
    }
299
 
1341 jmachado 300
    public List<CourseUnit> loadBySigesCodeUniqueIgnoreCourse(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
301
    {
302
        return loadBySigesCodeUnique(sigesCode,null,semestre,year);
303
    }
1117 jmachado 304
    //TODO Na actualizacao de uma cadeira para o curso de TESTE mudar o coursecode para o o coursecode desse curso para nao deixar os dados duplicados e mal
305
    //se nao a carregar unidades vai buscar a errada
1245 jmachado 306
    public List<CourseUnit> loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
1117 jmachado 307
    {
1341 jmachado 308
        Criteria c =  createCriteria();
309
        if(courseCode != null)
310
            c.add(eq("courseCode", courseCode));
311
 
312
        c.add(eq("code", sigesCode))
313
         .add(eq("semestre", semestre))
314
         .add(eq("importYear", year));
315
                //not any more .add(eq("cdTurma", turma))
316
 
317
        List<CourseUnit> cus = c.list();
1245 jmachado 318
        if(cus.size() > 1)
319
        {
320
            logger.warn("WARNING WARNING ####Two units found for: ");
321
            logger.warn("WARNING WARNING ####String sigesCode, String courseCode, String semestre, String year = " + sigesCode + ", " + courseCode + "," + semestre + "," + year);
322
            logger.warn("WARNING WARNING ####returning first one, this could be a case of units spared because of TURMAS split used in 201516: ");
323
        }
324
 
325
        return cus;
1117 jmachado 326
    }
327
 
1341 jmachado 328
    public List<CourseUnit> loadBySigesCodeUniqueWithTurmaIgnoreCourse(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year,1.5.0/docs/api/java/lang/String.html">String turma){
329
        return loadBySigesCodeUniqueWithTurma(sigesCode,null,semestre,year,turma);
330
    }
1312 jmachado 331
    public List<CourseUnit> loadBySigesCodeUniqueWithTurma(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year,1.5.0/docs/api/java/lang/String.html">String turma)
332
    {
1341 jmachado 333
        Criteria c =  createCriteria();
334
        if(courseCode != null)
335
            c.add(eq("courseCode", courseCode));
336
 
337
        c.add(eq("code", sigesCode))
338
            .add(eq("semestre", semestre))
339
            .add(eq("importYear", year))
340
            .add(eq("cdTurma", turma));
341
        List<CourseUnit> cus = c.list();
1312 jmachado 342
        if(cus.size() > 1)
343
        {
344
            logger.warn("WARNING WARNING ####Two units found for: ");
345
            logger.warn("WARNING WARNING ####String sigesCode, String courseCode, String semestre, String year = " + sigesCode + ", " + courseCode + "," + semestre + "," + year);
346
            logger.warn("WARNING WARNING ####returning first one, this could be a case of units spared because of TURMAS split used in 201516: ");
347
        }
348
 
349
        return cus;
350
    }
351
 
1245 jmachado 352
    public List<CourseUnit> loadBySigesCodeUniqueAllCourses(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
1232 jmachado 353
    {
354
        //todo cdTurma Rollback
1233 jmachado 355
        return
1232 jmachado 356
                createCriteria()
357
                        .add(eq("code", sigesCode))
358
                        // REMOVED TO LET BE ALL COURSES .add(eq("courseCode", courseCode))
359
                        .add(eq("semestre", semestre))
360
                        .add(eq("importYear", year))
1245 jmachado 361
                        //not anymore .add(eq("cdTurma", turma))
1233 jmachado 362
                        .list();
1232 jmachado 363
    }
364
 
899 jmachado 365
    public CourseUnit loadBySigesCodeUniqueMostRecent(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre)
366
    {
1519 jmachado 367
        List<CourseUnit> cus;
368
        Criteria cr = createCriteria()
899 jmachado 369
                        .add(eq("code", sigesCode))
1519 jmachado 370
                        .add(eq("courseCode", courseCode));
371
        if(semestre != null)
372
            cr.add(eq("semestre", semestre));
373
        cr.addOrder(Order.desc("importYear")).setMaxResults(1);
374
        cus = cr.list();
1098 jmachado 375
        if(cus.size() > 0)
376
            return cus.get(0);
377
        logger.warn("Accessing unit not existent with siges code " + sigesCode + " course code: " + courseCode + " semestre: " + semestre);
378
        return null;
899 jmachado 379
    }
380
 
1555 jmachado 381
    public CourseUnit loadBySigesCodeUniqueMostRecentProgram(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre)
382
    {
383
        List<CourseUnit> cus;
384
        Criteria cr = createCriteria()
385
                .add(eq("code", sigesCode))
386
                .add(eq("courseCode", courseCode));
387
        if(semestre != null)
388
            cr.add(eq("semestre", semestre));
389
        cr.add(and(isNotNull("programStreamId"),not(eq("programStreamId",""))));
390
        cr.addOrder(Order.desc("importYear")).setMaxResults(1);
391
        cus = cr.list();
392
        if(cus.size() > 0)
393
            return cus.get(0);
394
        logger.warn("Accessing unit not existent with siges code " + sigesCode + " course code: " + courseCode + " semestre: " + semestre);
395
        return null;
396
    }
899 jmachado 397
 
1555 jmachado 398
 
883 jmachado 399
    public CourseUnit loadBySigesCodeUniqueLastYear(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre)
767 jmachado 400
    {
899 jmachado 401
        return loadBySigesCodeUniqueMostRecent(sigesCode,courseCode,semestre);
883 jmachado 402
    }
403
 
1555 jmachado 404
    public CourseUnit loadBySigesCodeUniqueLastYearProgram(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String semestre)
405
    {
406
        return loadBySigesCodeUniqueMostRecentProgram(sigesCode,courseCode,semestre);
407
    }
883 jmachado 408
 
1555 jmachado 409
 
883 jmachado 410
    public List<CourseUnit> loadBySigesCodeUnique(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode, 1.5.0/docs/api/java/lang/String.html">String year)
411
    {
767 jmachado 412
        return createCriteria()
413
                .add(eq("code", sigesCode))
414
                .add(eq("courseCode", courseCode))
415
                .add(eq("importYear", year))
416
                .addOrder(Order.desc("id"))
417
                .list();        
418
    }
419
 
1750 jmachado 420
    public List<CourseUnit> loadBySigesCodeUniqueWithProgram(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode)
421
    {
422
        return createCriteria()
423
                .add(eq("code", sigesCode))
424
                .add(eq("courseCode", courseCode))
425
                .add(not(isNull("courseUnitProgram")))
426
                .addOrder(Order.desc("id"))
427
 
428
                .list();
429
    }
430
 
457 jmachado 431
    public List<CourseUnit> loadBySigesCodes(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode)
432
    {
433
        return (List<CourseUnit>) createCriteria()
434
                .add(eq("code", sigesCode))
435
                .add(eq("courseCode", courseCode))
436
                .addOrder(Order.desc("importYear"))
437
                .list();
438
    }
163 jmachado 439
 
1077 jmachado 440
    /**
441
     * Metodo usado para carregar unidades de anos anteriores que possam estar em edição
442
     * para mostrar na página da unidade
443
     *
444
     * Este metodo nao serve para mais nada, nao é usado nas Tarefas da Home
445
     * @param sigesCode
446
     * @param courseCode
447
     * @return
448
     */
449
    public CourseUnit loadUnitInEvaluationBySigesCodes(1.5.0/docs/api/java/lang/String.html">String sigesCode, 1.5.0/docs/api/java/lang/String.html">String courseCode)
1074 jmachado 450
    {
1077 jmachado 451
        1.5.0/docs/api/java/lang/String.html">String activeImportYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
1074 jmachado 452
 
1077 jmachado 453
        Criterion crtDegrees = getCourseUnitActiveDegreeCourseIdsCriterion(activeImportYear);
454
        if(crtDegrees == null)
455
        {
456
            //Nao ha graus nem cursos portanto o ano não interessa
457
            //o ano deve ser usado para abrir graus ou cursos senao nao
458
            //abre nada
459
            crtDegrees = eq("evaluationOpenByAdmin",true);
460
        }
461
        else
462
        {
463
            crtDegrees = and(eq("importYear", activeImportYear),crtDegrees);
464
            crtDegrees = or(eq("evaluationOpenByAdmin",true),crtDegrees);
465
        }
466
 
1074 jmachado 467
        List<CourseUnit> cus = (List<CourseUnit>) createCriteria()
468
                .createAlias("course","c")
469
                .createAlias("courseUnitEvaluation","ce")
470
                .add(eq("code", sigesCode))
471
                .add(eq("courseCode", courseCode))
472
                .add(crtDegrees)
473
                .add(eq("ce.closed",false))
474
                .list();
1077 jmachado 475
        List<CourseUnit> cusNull = (List<CourseUnit>) createCriteria()
476
                .createAlias("course","c")
477
                .add(eq("code", sigesCode))
478
                .add(eq("courseCode", courseCode))
479
                .add(crtDegrees)
480
                .add(isNull("courseUnitEvaluation"))
481
                .list();
482
        cus.addAll(cusNull);
1074 jmachado 483
        if(cus != null && cus.size() > 1)
484
        {
485
            logger.warn("Mais do que uma unidade do mesmo codigo em avaliacao curricular, e suposto haver apenas uma, verificar logica aplicacional");
486
        }
487
        else if(cus != null && cus.size() > 0)
488
        {
489
            return cus.get(0);
490
        }
491
 
492
        return null;
493
    }
494
 
376 jmachado 495
    public List<CourseUnit> loadCourseUnits(long courseId, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year, boolean withTeacher, boolean withNoTeacher)
496
    {
1312 jmachado 497
        return loadCourseUnits( courseId,  semestre,  year,  withTeacher,  withNoTeacher,null);
498
    }
499
    public List<CourseUnit> loadCourseUnits(long courseId, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year, boolean withTeacher, boolean withNoTeacher,1.5.0/docs/api/java/lang/String.html">String institutionCode)
500
    {
1692 jmachado 501
        Criteria c = createCriteria()
502
                .createAlias("course","c")
503
                .createAlias("c.department","d")
504
                .createAlias("d.courseSchool","sc");
376 jmachado 505
        if(courseId > 0)
1692 jmachado 506
            c.add(eq("c.id", courseId));
1312 jmachado 507
        if(semestre != null && semestre.trim().length() > 0)
376 jmachado 508
            c.add(eq("semestre", semestre));
1312 jmachado 509
        if(year != null  && year.trim().length() > 0)
376 jmachado 510
            c.add(eq("importYear", year));
1312 jmachado 511
        if(institutionCode != null && institutionCode.trim().length() > 0)
1692 jmachado 512
            c.add(eq("sc.institutionalCode", institutionCode));
1312 jmachado 513
 
376 jmachado 514
        if(withTeacher && !withNoTeacher)
515
        {
516
            c.createAlias("teachers", "th");
517
            c.add(isNotNull("th.id"));
518
        }
519
        else if(!withTeacher && withNoTeacher)
520
        {
521
            c.createAlias("teachers", "th", JoinFragment.LEFT_OUTER_JOIN);
522
            c.add(isNull("th.id"));
523
        }
524
        return c.list();
525
    }
163 jmachado 526
 
1743 jmachado 527
    public CourseUnit findUnitByCourseNameYear(long courseId, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String importYear) {
528
        List<CourseUnit> courseUnit = createCriteria().
529
                createAlias("course","c").
530
                add(eq("c.id",courseId)).
531
                add(eq("importYear",importYear)).
532
                add(eq("name",name)).list();
533
        if(courseUnit.size() > 0)
534
            return courseUnit.get(0);
535
        return null;
376 jmachado 536
 
1743 jmachado 537
    }
538
 
539
 
1333 jmachado 540
    public static class CourseUnitResult
541
    {
542
        public long id = 0;
543
        public int students = 0;
544
        public int teachers = 0;
545
        public int turmas = 0;
546
    }
547
    /**
548
     *
549
     * @param courseId
550
     * @param semestre
551
     * @param year
552
     * @return List<CourseUnitResult>
1817 jmachado 553
     *
554
     *     todo ver esta para fazer um load courseunits de um curso dado o ano e o semestre
1333 jmachado 555
     */
556
    public List<CourseUnitResult> loadCourseUnits(long courseId, 1.5.0/docs/api/java/lang/String.html">String semestre, 1.5.0/docs/api/java/lang/String.html">String year)
557
    {
558
        Criteria c = createCriteria();
559
 
560
       c.setProjection(Projections.projectionList()
561
                .add(Projections.groupProperty("id"))
562
                .add(Projections.countDistinct("student.id"))
563
                .add(Projections.countDistinct("teacher.id"))
564
                .add(Projections.countDistinct("turma.id")));
565
        c.createAlias("students","student");
566
        c.createAlias("teachers","teacher");
567
        c.createAlias("turmas","turma");
568
        c.createAlias("turma.students","ts");//obrigar a entrar apenas turmas com alunos
569
        if(courseId > 0)
570
            c.add(eq("course.id", courseId));
571
        if(semestre != null && semestre.trim().length() > 0)
572
            c.add(eq("semestre", semestre));
573
        if(year != null  && year.trim().length() > 0)
574
            c.add(eq("importYear", year));
575
        List<CourseUnitResult> results = new ArrayList<CourseUnitResult>();
576
        List<Object[]> result = c.list();
577
        for(5+0%2Fdocs%2Fapi+Object">Object[] r:result)
578
        {
579
            CourseUnitResult cur = new CourseUnitResult();
580
            cur.id = (1.5.0/docs/api/java/lang/Long.html">Long) r[0];
581
            cur.students = (1.5.0/docs/api/java/lang/Integer.html">Integer) r[1];
582
            cur.teachers = (1.5.0/docs/api/java/lang/Integer.html">Integer) r[2];
583
            cur.turmas = (1.5.0/docs/api/java/lang/Integer.html">Integer) r[3];
584
            results.add(cur);
585
        }
586
        return results;
587
    }
588
 
589
 
205 jmachado 590
    public int countCourseUnits(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
591
    {
749 jmachado 592
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name","code");
205 jmachado 593
        return createCriteria().add(c).list().size();
594
    }
163 jmachado 595
 
205 jmachado 596
    public List<CourseUnit> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
597
    {
748 jmachado 598
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name","code");
205 jmachado 599
        Criteria criteria = createCriteria();
600
        criteria.add(c)
601
                .addOrder(Order.asc("name"))
602
                .setMaxResults(maxUnits)
603
                .setFirstResult(page * maxUnits);
604
        return criteria.list();
605
    }
202 jmachado 606
 
206 jmachado 607
    public int countCourseUnitsActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
608
    {
371 jmachado 609
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "objectives", "name");
206 jmachado 610
        return createCriteria()
611
                .add(c)
995 jmachado 612
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
206 jmachado 613
                .list().size();
614
    }
615
 
616
    public List<CourseUnit> searchActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxUnits, int page)
617
    {
618
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "objectives", "name");
619
        Criteria criteria = createCriteria();
620
        criteria.add(c)
995 jmachado 621
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
206 jmachado 622
                .addOrder(Order.asc("name"))
623
                .setMaxResults(maxUnits)
624
                .setFirstResult(page * maxUnits);
625
        return criteria.list();
626
    }
627
 
205 jmachado 628
    public List<CourseUnit> loadMissingObjectives(long teacherId)
629
    {
630
        //todo falta a projeccao do teacher id
631
        return createCriteria()
995 jmachado 632
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
371 jmachado 633
                .add((or(isNull("objectives"), eq("objectives", ""))))
205 jmachado 634
                .createAlias("teachers", "th")
371 jmachado 635
                .add(eq("semestre", DatesUtils.getSemestre()))
636
                .add(eq("th.id", teacherId))
205 jmachado 637
                .list();
638
    }
639
 
214 jmachado 640
    public List<CourseUnit> loadMissingPrograms(long teacherId)
641
    {
642
        //todo falta a projeccao do teacher id
643
        return createCriteria()
1171 jmachado 644
                .createAlias("course","c")
645
                .add(eq("c.status", true))
995 jmachado 646
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
371 jmachado 647
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 648
                .createAlias("teachers", "th")
371 jmachado 649
                .add(eq("semestre", DatesUtils.getSemestre()))
650
                .add(eq("th.id", teacherId))
214 jmachado 651
                .list();
652
    }
653
 
343 jmachado 654
    public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
655
    {
656
        //todo falta a projeccao do teacher id
371 jmachado 657
        Criteria c = createCriteria()
995 jmachado 658
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
371 jmachado 659
                .add(or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", ""))));
660
 
661
        DatesUtils.SemestreModerate semestreModerate = DatesUtils.getSemestreModerate();
662
        if (semestreModerate == DatesUtils.SemestreModerate.S1)
663
            c.add(eq("semestre", "S1"));
664
        else if (semestreModerate == DatesUtils.SemestreModerate.S2)
665
            c.add(eq("semestre", "S2"));
666
        else
667
            c.add(or(eq("semestre", "S1"), eq("semestre", "S2")));
668
 
669
        return c.createAlias("teachers", "th")
670
                .add(eq("th.id", teacherId))
343 jmachado 671
                .list();
672
    }
214 jmachado 673
 
343 jmachado 674
 
214 jmachado 675
    public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
676
    {
677
        return createCriteria()
678
                .createAlias("course", "c")
371 jmachado 679
                .add(eq("c.id", courseId))
995 jmachado 680
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
371 jmachado 681
                .add(eq("semestre", DatesUtils.getSemestre()))
682
                .add((or(isNull("objectives"), eq("objectives", ""))))
214 jmachado 683
                .list();
684
    }
685
 
1701 jmachado 686
    public List<CourseUnit> loadMissingProgramOptimizedComissionsAndSecreariat(User u)
687
    {
688
        Criteria crit = createCriteria()
689
                .createAlias("course", "c")
690
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
691
                .add(eq("semestre", DatesUtils.getSemestre()))
692
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))));
693
 
694
        crit = DaoFactory.getCourseDaoImpl().getCriteriaForComissionsAndCoordinationsOr(u,"c",crit);
695
        if(crit == null)
696
            return new ArrayList<CourseUnit>();
697
        else
698
            return crit.list();
699
    }
700
 
214 jmachado 701
    public List<CourseUnit> loadMissingProgramGivenCourse(long courseId)
702
    {
703
        return createCriteria()
704
                .createAlias("course", "c")
371 jmachado 705
                .add(eq("c.id", courseId))
995 jmachado 706
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
371 jmachado 707
                .add(eq("semestre", DatesUtils.getSemestre()))
708
                .add((or(isNull("programStreamId"), eq("programStreamId", ""))))
214 jmachado 709
                .list();
710
    }
711
 
509 jmachado 712
    public List<CourseUnit> loadMissingProgramValidateGivenCourse(long courseId)
713
    {
714
        return createCriteria()
715
                .createAlias("course", "c")
716
                .add(eq("c.id", courseId))
995 jmachado 717
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
1701 jmachado 718
                //.add(eq("semestre", DatesUtils.getSemestre()))
509 jmachado 719
                .add((and(isNotNull("programStreamId"), not(eq("programStreamId", "")))))
720
                .add((eq("validProgram", false)))
721
                .list();
722
    }
723
 
1701 jmachado 724
    public List<CourseUnit> loadMissingProgramValidateOptimizedComissionsAndSecreariat(User u)
725
    {
726
        Criteria crit = createCriteria()
727
                .createAlias("course", "c")
728
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
729
                //.add(eq("semestre", DatesUtils.getSemestre()))
730
                .add((and(isNotNull("programStreamId"), not(eq("programStreamId", "")))))
731
                .add((eq("validProgram", false)));
732
        crit = DaoFactory.getCourseDaoImpl().getCriteriaForComissionsAndCoordinationsOr(u,"c",crit);
733
        if(crit == null)
734
            return new ArrayList<CourseUnit>();
735
        else
736
            return crit.list();
737
    }
738
 
739
 
740
 
219 jmachado 741
    public List<CourseUnit> loadMissingObjectivesOrProgramGivenCourse(long courseId)
214 jmachado 742
    {
743
        return createCriteria()
744
                .createAlias("course", "c")
371 jmachado 745
                .add(eq("c.id", courseId))
995 jmachado 746
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
371 jmachado 747
                .add(eq("semestre", DatesUtils.getSemestre()))
748
                .add((or(or(isNull("objectives"), eq("objectives", "")), or(isNull("programStreamId"), eq("programStreamId", "")))))
214 jmachado 749
                .list();
750
    }
205 jmachado 751
 
343 jmachado 752
    public int countMissingProgramGivenCourse(long courseId)
753
    {
754
        return loadMissingProgramGivenCourse(courseId).size();
755
    }
205 jmachado 756
 
509 jmachado 757
    public int countMissingProgramValidateCourse(long courseId)
758
    {
759
        return loadMissingProgramValidateGivenCourse(courseId).size();
760
    }
751 jmachado 761
 
762
 
763
    public List<String> getTeachersEmails(long unit) {
764
        1.5.0/docs/api/javax/management/Query.html">Query q = createQuery("select e.email from "
765
                + Teacher.class.getName() + " e join e.teachedUnits as unit "
766
                + " where "
767
                + " unit.id = ? "
768
 
769
        );
770
        q.setLong(0,unit);
771
        return q.list();
772
    }
961 jmachado 773
 
774
    public static class CourseMissingValidationProgram
775
    {
776
        public Course course;
777
        public List<CourseUnit> courseUnits;
778
    }
1171 jmachado 779
 
1701 jmachado 780
 
1703 jmachado 781
 
782
 
1701 jmachado 783
    public List<CourseMissingValidationProgram> loadMissingProgramValidateOptimized(UserSession userSession)
784
    {
785
        List<CourseMissingValidationProgram> result = new ArrayList<CourseMissingValidationProgram>();
786
 
1703 jmachado 787
        //Em vez de FindAll faco a listagem total de cadeiras e é la dentro que restringe ou a todas
1701 jmachado 788
        //os cursos caso seja da secretaria ou aos cursos de que faz parte da comissao
789
        //Obtenho todas as cadeiras de todos os cursos
790
        //Organizo-as por curso
791
        //devolvo a lista final
792
        HashMap<Course,CourseMissingValidationProgram> mapaUnidadesCurso = new HashMap<Course, CourseMissingValidationProgram>();
793
 
794
        List<CourseUnit> courseUnits = loadMissingProgramValidateOptimizedComissionsAndSecreariat(userSession.getUser());
795
        for(CourseUnit cu : courseUnits)
796
        {
797
            if(mapaUnidadesCurso.get(cu.getCourse()) == null)
798
            {
799
                CourseMissingValidationProgram c = new CourseMissingValidationProgram();
800
                c.course = DaoFactory.getCourseDaoImpl().narrow(cu.getCourse());
801
                c.courseUnits = new ArrayList<CourseUnit>();
802
                c.courseUnits.add(cu);
803
                result.add(c);
804
                mapaUnidadesCurso.put(c.course,c);
961 jmachado 805
            }
1701 jmachado 806
            else
807
            {
808
                CourseMissingValidationProgram c = mapaUnidadesCurso.get(cu.getCourse());
809
                c.courseUnits.add(cu);
810
            }
961 jmachado 811
        }
812
        return result;
813
    }
1701 jmachado 814
 
1703 jmachado 815
 
1701 jmachado 816
    public List<CourseMissingValidationProgram> loadMissingProgramsOptimized(UserSession userSession)
817
    {
818
        List<CourseMissingValidationProgram> result = new ArrayList<CourseMissingValidationProgram>();
819
 
1703 jmachado 820
        //Em vez de FindAll faco a listagem total de cadeiras e é la dentro que restringe ou a todas
1701 jmachado 821
        //os cursos caso seja da secretaria ou aos cursos de que faz parte da comissao
822
        //Obtenho todas as cadeiras de todos os cursos
823
        //Organizo-as por curso
824
        //devolvo a lista final
825
        HashMap<Course,CourseMissingValidationProgram> mapaUnidadesCurso = new HashMap<Course, CourseMissingValidationProgram>();
826
 
827
        List<CourseUnit> courseUnits = loadMissingProgramOptimizedComissionsAndSecreariat(userSession.getUser());
828
        for(CourseUnit cu : courseUnits)
829
        {
830
            if(mapaUnidadesCurso.get(cu.getCourse()) == null)
831
            {
832
                CourseMissingValidationProgram c = new CourseMissingValidationProgram();
833
                c.course = DaoFactory.getCourseDaoImpl().narrow(cu.getCourse());
834
                c.courseUnits = new ArrayList<CourseUnit>();
835
                c.courseUnits.add(cu);
836
                result.add(c);
837
                mapaUnidadesCurso.put(c.course,c);
1040 jmachado 838
            }
1701 jmachado 839
            else
840
            {
841
                CourseMissingValidationProgram c = mapaUnidadesCurso.get(cu.getCourse());
842
                c.courseUnits.add(cu);
843
            }
1040 jmachado 844
        }
845
        return result;
846
    }
1701 jmachado 847
 
961 jmachado 848
    public static class CourseMissingValidationEvaluation
849
    {
850
        public Course course;
851
        public List<CourseUnit> courseUnits;
852
    }
853
 
1703 jmachado 854
 
855
    public List<CourseMissingValidationEvaluation> loadMissingEvaluationOptimized(UserSession userSession)
961 jmachado 856
    {
857
        List<CourseMissingValidationEvaluation> result = new ArrayList<CourseMissingValidationEvaluation>();
1703 jmachado 858
 
859
        //Em vez de FindAll faco a listagem total de cadeiras e é la dentro que restringe ou a todas
860
        //os cursos caso seja da secretaria ou aos cursos de que faz parte da comissao
861
        //Obtenho todas as cadeiras de todos os cursos
862
        //Organizo-as por curso
863
        //devolvo a lista final
864
        HashMap<Course,CourseMissingValidationEvaluation> mapaUnidadesCurso = new HashMap<Course, CourseMissingValidationEvaluation>();
865
 
866
        List<CourseUnit> courseUnits = loadMissingEvaluationOptimizedComissionsAndSecreariat(userSession.getUser());
867
        for(CourseUnit cu : courseUnits)
961 jmachado 868
        {
1703 jmachado 869
            if(mapaUnidadesCurso.get(cu.getCourse()) == null)
961 jmachado 870
            {
1703 jmachado 871
                CourseMissingValidationEvaluation c = new CourseMissingValidationEvaluation();
872
                c.course = DaoFactory.getCourseDaoImpl().narrow(cu.getCourse());
873
                c.courseUnits = new ArrayList<CourseUnit>();
874
                c.courseUnits.add(cu);
875
                result.add(c);
876
                mapaUnidadesCurso.put(c.course,c);
961 jmachado 877
            }
1703 jmachado 878
            else
879
            {
880
                CourseMissingValidationEvaluation c = mapaUnidadesCurso.get(cu.getCourse());
881
                c.courseUnits.add(cu);
882
            }
961 jmachado 883
        }
884
        return result;
885
    }
886
 
1701 jmachado 887
    public List<CourseMissingValidationEvaluation> loadMissingEvaluationValidateOptimized(UserSession userSession)
888
    {
889
        List<CourseMissingValidationEvaluation> result = new ArrayList<CourseMissingValidationEvaluation>();
1103 jmachado 890
 
1703 jmachado 891
        //Em vez de FindAll faco a listagem total de cadeiras e é la dentro que restringe ou a todas
1701 jmachado 892
        //os cursos caso seja da secretaria ou aos cursos de que faz parte da comissao
893
        //Obtenho todas as cadeiras de todos os cursos
894
        //Organizo-as por curso
895
        //devolvo a lista final
896
        HashMap<Course,CourseMissingValidationEvaluation> mapaUnidadesCurso = new HashMap<Course, CourseMissingValidationEvaluation>();
1103 jmachado 897
 
1701 jmachado 898
        List<CourseUnit> courseUnits = loadMissingEvaluationValidateOptimizedComissionsAndSecreariat(userSession.getUser());
899
        for(CourseUnit cu : courseUnits)
900
        {
901
            if(mapaUnidadesCurso.get(cu.getCourse()) == null)
902
            {
903
                CourseMissingValidationEvaluation c = new CourseMissingValidationEvaluation();
904
                c.course = DaoFactory.getCourseDaoImpl().narrow(cu.getCourse());
905
                c.courseUnits = new ArrayList<CourseUnit>();
906
                c.courseUnits.add(cu);
907
                result.add(c);
908
                mapaUnidadesCurso.put(c.course,c);
909
            }
910
            else
911
            {
912
                CourseMissingValidationEvaluation c = mapaUnidadesCurso.get(cu.getCourse());
913
                c.courseUnits.add(cu);
914
            }
915
        }
916
        return result;
917
    }
918
 
919
 
920
 
1703 jmachado 921
 
1701 jmachado 922
    /**
923
     * @param u utilizador com vista para cursos
924
     *          Se for secretaria considera todos os cursos
925
     *          Se nao for considera apenas comissoes de curso do professor se for TeacherImpl
926
     * @return
927
     */
928
 
929
    public List<CourseUnit> loadMissingEvaluationValidateOptimizedComissionsAndSecreariat(User u)
930
    {
931
 
932
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
933
 
934
        Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear);
935
        if(degreesCrit == null)
936
            return new ArrayList<CourseUnit>();
937
 
938
        Criteria c = createCriteria()
939
                .createAlias("course", "c")
940
                .createAlias("courseUnitEvaluation", "ce")
941
                .add(eq("importYear", activeYear))
942
                .add(degreesCrit)
943
                .add((eq("ce.closed", false)))
944
                .add((eq("ce.teacherComplete", true)));
945
 
946
        //NOVO para restringir os cursos de que é coordenador ou todos se for da secretaria de cursos
947
        c = DaoFactory.getCourseDaoImpl().getCriteriaForComissionsAndCoordinationsOr(u,"c",c);
948
        if(c == null)
949
            return new ArrayList<CourseUnit>();
950
        else
951
            return c.list();
952
    }
953
 
961 jmachado 954
    /*
955
    * Neste caso apenas se validam as do ano anterior*/
956
 
957
    public List<CourseUnit> loadMissingEvaluationValidateGivenCourse(long courseId)
958
    {
1070 jmachado 959
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
1077 jmachado 960
 
961
        Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear);
962
        if(degreesCrit == null)
1017 jmachado 963
            return new ArrayList<CourseUnit>();
964
 
961 jmachado 965
        return createCriteria()
966
                .createAlias("course", "c")
967
                .createAlias("courseUnitEvaluation", "ce")
968
                .add(eq("c.id", courseId))
1070 jmachado 969
                .add(eq("importYear", activeYear))
970
                .add(degreesCrit)
961 jmachado 971
                .add((eq("ce.closed", false)))
1017 jmachado 972
                .add((eq("ce.teacherComplete", true)))
961 jmachado 973
                .list();
974
    }
967 jmachado 975
 
1077 jmachado 976
    /**
1103 jmachado 977
     *
978
     * @return devolve todos os ids de unidades que verifiquem a condição de avaliação
979
     * do periodo actual e tenham o programa fechado pela comissão
980
     */
981
 
982
    public List<Long> loadClosedCourseUnitsEvaluations()
983
    {
984
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
985
 
986
        Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear);
987
        if(degreesCrit == null)
988
            return new ArrayList<Long>();
989
 
990
        return createCriteria()
991
                .setProjection(Projections.property("id"))
992
                .createAlias("course", "c")
993
                .createAlias("courseUnitEvaluation", "ce")
994
                .add(eq("importYear", activeYear))
995
                .add(degreesCrit)
996
                .add((eq("ce.closed", true)))
997
                .list();
998
    }
999
 
1000
    /**
1077 jmachado 1001
     * Devolve um criteio OR para todos os cursos de grau pertencente à lista de graus
1002
     * ou pertencete à lista de cursoIds
1003
 
1004
     * @return
1005
     */
1006
    private Criterion getCourseUnitActiveDegreeCourseIdsCriterion(1.5.0/docs/api/java/lang/String.html">String activeYear)
1070 jmachado 1007
    {
1077 jmachado 1008
        List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees();
1009
        List<Long> activeCourseIds = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveCourseIds();
1010
        boolean activeDegreesOff = activeDegrees == null || activeDegrees.size() == 0;
1011
        boolean activeCourseIdsOff = activeCourseIds == null || activeCourseIds.size() == 0;
1012
        if(activeYear == null || (activeDegreesOff && activeCourseIdsOff))
1013
            return null;
1014
 
1015
        Criterion crit = null;
1016
 
1017
        if(activeDegrees != null)
1018
            for(1.5.0/docs/api/java/lang/String.html">String degree: activeDegrees)
1019
            {
1020
                if(crit == null)
1021
                    crit = eq("c.degree",degree);
1022
                else
1023
                    crit = or(crit,eq("c.degree",degree));
1024
            }
1025
        if(activeCourseIds != null)
1026
            for(1.5.0/docs/api/java/lang/Long.html">Long courseId: activeCourseIds)
1027
            {
1028
                if(crit == null)
1029
                    crit = eq("c.id",courseId);
1030
                else
1031
                    crit = or(crit,eq("c.id",courseId));
1032
            }
1033
 
1034
        return crit;
1070 jmachado 1035
    }
1036
 
1077 jmachado 1037
 
1024 jmachado 1038
    public List<CourseUnit> loadTeacherUnitsMissingEvaluation(UserSession userSession)
1039
    {
1040
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
1077 jmachado 1041
 
1042
        Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear);
1043
        if(degreesCrit == null)
1024 jmachado 1044
            return new ArrayList<CourseUnit>();
1045
 
1070 jmachado 1046
 
1024 jmachado 1047
        List<CourseUnit> nulls =
1048
                createCriteria()
1070 jmachado 1049
                        .createAlias("course", "c")
1074 jmachado 1050
                        .createAlias("teachers", "t")
1077 jmachado 1051
                        .add(eq("importYear", activeYear))
1024 jmachado 1052
                                //.add(not(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear())))
1053
                                //.add(ge("importYear", "201415" ))
1054
                                //.add(isNull("courseUnitEvaluation"))
1055
                                //todo novo testar
1056
                        .add(eq("t.id", userSession.getUser().getId()))
1070 jmachado 1057
                        .add(degreesCrit)
1024 jmachado 1058
                        .add(isNull("courseUnitEvaluation"))
1059
                        .list();
1060
 
1061
        List<CourseUnit> teacherCompleteFalse =
1062
                createCriteria()
1070 jmachado 1063
                        .createAlias("course", "c")
1024 jmachado 1064
                        .createAlias("courseUnitEvaluation", "ce")
1094 jmachado 1065
                        .createAlias("teachers", "t")
1028 jmachado 1066
                        .add(eq("t.id", userSession.getUser().getId()))
1077 jmachado 1067
                        .add(eq("importYear", activeYear))
1024 jmachado 1068
                                //.add(not(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear())))
1069
                                //.add(ge("importYear", "201415" ))
1070
                                //.add(isNull("courseUnitEvaluation"))
1071
                                //todo novo testar
1070 jmachado 1072
                        .add(degreesCrit)
1074 jmachado 1073
                        .add(eq("ce.teacherComplete", false))
1024 jmachado 1074
                        .list();
1075
        teacherCompleteFalse.addAll(nulls);
1076
        return teacherCompleteFalse;
1077
    }
1078
 
1079
 
1701 jmachado 1080
 
1081
    public List<CourseUnit> loadMissingEvaluationOptimizedComissionsAndSecreariat(User u)
1082
    {
1083
 
1084
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
1085
 
1086
        Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear);
1087
        if(degreesCrit == null)
1088
            return new ArrayList<CourseUnit>();
1089
 
1090
 
1091
        Criteria nullsCrit = createCriteria()
1092
                .createAlias("course", "c")
1093
                .add(eq("importYear", activeYear))
1094
                .add(degreesCrit)
1095
                .add(isNull("courseUnitEvaluation"));
1096
 
1097
        Criteria teachrCompleteCrit = createCriteria()
1098
                .createAlias("course", "c")
1099
                .createAlias("courseUnitEvaluation", "ce")
1100
                .add(degreesCrit)
1101
                .add(eq("importYear", activeYear))
1102
                .add(eq("ce.teacherComplete", false));
1103
 
1104
 
1105
        //NOVO para restringir os cursos de que é coordenador ou todos se for da secretaria de cursos
1106
        nullsCrit = DaoFactory.getCourseDaoImpl().getCriteriaForComissionsAndCoordinationsOr(u,"c",nullsCrit);
1107
        if(nullsCrit == null)
1108
            return new ArrayList<CourseUnit>();
1109
        teachrCompleteCrit = DaoFactory.getCourseDaoImpl().getCriteriaForComissionsAndCoordinationsOr(u,"c",teachrCompleteCrit);
1110
        if(teachrCompleteCrit == null)
1111
            return new ArrayList<CourseUnit>();
1112
        List<CourseUnit> nulls = nullsCrit.list();
1113
        List<CourseUnit> teacherCompleteFalse = teachrCompleteCrit.list();
1114
        teacherCompleteFalse.addAll(nulls);
1115
        return teacherCompleteFalse;
1116
    }
1117
 
967 jmachado 1118
    public List<CourseUnit> loadMissingEvaluation(long courseId)
1119
    {
1070 jmachado 1120
 
1121
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
1077 jmachado 1122
        Criterion degreesCrit = getCourseUnitActiveDegreeCourseIdsCriterion(activeYear);
1123
 
1124
        if(degreesCrit == null)
1017 jmachado 1125
            return new ArrayList<CourseUnit>();
1126
 
1024 jmachado 1127
        List<CourseUnit> nulls =
1128
           createCriteria()
967 jmachado 1129
                .createAlias("course", "c")
1130
                .add(eq("c.id", courseId))
1070 jmachado 1131
                .add(eq("importYear", activeYear))
1132
                .add(degreesCrit)
1024 jmachado 1133
                .add(isNull("courseUnitEvaluation"))
967 jmachado 1134
                .list();
1024 jmachado 1135
 
1136
        List<CourseUnit> teacherCompleteFalse =
1137
                createCriteria()
1138
                        .createAlias("course", "c")
1139
                        .createAlias("courseUnitEvaluation", "ce")
1140
                        .add(eq("c.id", courseId))
1070 jmachado 1141
                        .add(degreesCrit)
1142
                        .add(eq("importYear", activeYear))
1024 jmachado 1143
                        .add(eq("ce.teacherComplete", false))
1144
                        .list();
1145
        teacherCompleteFalse.addAll(nulls);
1146
        return teacherCompleteFalse;
967 jmachado 1147
    }
973 jmachado 1148
 
1149
    public CourseUnit loadByEvaluationStreamId(1.5.0/docs/api/java/lang/String.html">String identifier)
1150
    {
1151
        return
1152
                (CourseUnit)
1153
                        createCriteria()
1154
                                .add(eq("evaluationStreamId",identifier))
1155
                                .uniqueResult();
1156
    }
110 susana 1157
}