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 | } |