Nessuna descrizione

Outcome.php 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. use Illuminate\Database\Eloquent\SoftDeletingTrait;
  3. class Outcome extends Eloquent
  4. {
  5. use SoftDeletingTrait;
  6. protected $dates = ['deleted_at'];
  7. protected $fillable = array('name', 'definition');
  8. public function criteria()
  9. {
  10. return $this->hasManyThrough('Criterion', 'Objective')->orderBy('name');
  11. }
  12. /**
  13. * Return the objectives that the outcome belongs to
  14. *
  15. * @return Illuminate\Database\Eloquent\Model
  16. */
  17. public function objectives()
  18. {
  19. return $this->hasMany('Objective');
  20. // return $this->belongsToMany('Objective', 'objective_outcome');
  21. }
  22. // public function attempted($semester, $is_grad)
  23. // {
  24. // return DB::table('criteria')
  25. // ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  26. // ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  27. // ->join('courses', 'activities.course_id', '=', 'courses.id')
  28. // ->join('programs', 'programs.id', '=', 'courses.program_id')
  29. // ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  30. // ->where('criterion_objective_outcome.outcome_id','=',$this->id)
  31. // ->where('programs.is_graduate','=',$is_grad)
  32. // ->where('courses.semester_id','=',$semester)
  33. // ->count(DB::raw('DISTINCT criteria.id,activity_criterion.activity_id'))
  34. // ;
  35. //
  36. // }
  37. // public function attempted($semester, $is_grad)
  38. // {
  39. // $criteria=DB::table('criteria')
  40. // ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  41. // ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  42. // ->join('courses', 'activities.course_id', '=', 'courses.id')
  43. // ->join('programs', 'programs.id', '=', 'courses.program_id')
  44. // ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  45. // ->where('criterion_objective_outcome.outcome_id','=',$this->id)
  46. // ->where('programs.is_graduate','=',$is_grad)
  47. // ->where('courses.semester_id','=',$semester)
  48. // ->select('criteria.id','expected_percentage_students_achieving','activity_criterion.activity_id')
  49. // ->distinct()
  50. // ->get()
  51. // ;
  52. // $conteo=0;
  53. // foreach($criteria as $criterion)
  54. // {
  55. // $students_attempted=Criterion::students_attempted($criterion->id, $criterion->activity_id);
  56. // if($students_attempted)
  57. // {
  58. // $conteo++;
  59. // }
  60. // }
  61. // return $conteo;
  62. // }
  63. public function active_by_semesters($selected_semesters, $level)
  64. {
  65. $min_start = "9000-01-01 00:00:00";
  66. $max_end = "1000-01-01 00:00:00";
  67. foreach ($selected_semesters as $semester) {
  68. if ($min_start > $semester->start) {
  69. $min_start = $semester->start;
  70. }
  71. if ($max_end < $semester->end) {
  72. $max_end = $semester->end;
  73. }
  74. }
  75. $outcomes = Outcome::where(function ($query) use ($min_start) {
  76. $query->where('deactivation_date', '>=', $min_start)
  77. ->orWhere('deactivation_date', null);
  78. })
  79. ->where('activation_date', '<=', $max_end)
  80. ->where(function ($query2) use ($level) {
  81. $query2->where("level", $level + 1)
  82. ->orWhere("level", 3);
  83. })
  84. ->orderBy('name', 'ASC')
  85. ->get();
  86. // return array('outcomes'=>$outcomes,'outcomes_attempted'=>$outcomes_attempted, 'outcomes_achieved'=>$outcomes_achieved, 'attemptedProgramsPerOutcome'=>$attemptedProgramsPerOutcome, 'achievedProgramsPerOutcome'=>$achievedProgramsPerOutcome,'participating_programs'=>$participating_programs);
  87. return $outcomes;
  88. }
  89. public function programs_attempted($semesters)
  90. {
  91. $semesters_array = [];
  92. foreach ($semesters as $semester) {
  93. $semesters_array[] = $semester->id;
  94. }
  95. $programs = DB::table('programs')
  96. ->join('courses', 'programs.id', '=', 'courses.program_id')
  97. ->join('activities', 'activities.course_id', '=', 'courses.id')
  98. ->join('activity_criterion', 'activity_criterion.activity_id', '=', 'activities.id')
  99. ->join('criteria', 'activity_criterion.criterion_id', '=', 'criteria.id')
  100. ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  101. ->where('criterion_objective_outcome.outcome_id', '=', $this->id)
  102. ->whereIn('courses.semester_id', $semesters_array)
  103. ->distinct()
  104. ->select('programs.id')
  105. ->get();
  106. return $programs;
  107. }
  108. public function attempted($semesters, $is_grad)
  109. {
  110. $semesters_array = [];
  111. foreach ($semesters as $semester) {
  112. $semesters_array[] = $semester->id;
  113. }
  114. $criteria = DB::table('criteria')
  115. ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  116. ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  117. ->join('courses', 'activities.course_id', '=', 'courses.id')
  118. ->join('programs', 'programs.id', '=', 'courses.program_id')
  119. ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  120. ->where('criterion_objective_outcome.outcome_id', '=', $this->id)
  121. ->where('programs.is_graduate', '=', $is_grad)
  122. ->whereIn('courses.semester_id', $semesters_array)
  123. ->select('criteria.id', 'expected_percentage_students_achieving', 'activity_criterion.activity_id')
  124. ->distinct()
  125. ->get();
  126. $conteo = 0;
  127. foreach ($criteria as $criterion) {
  128. $students_attempted = Criterion::students_attempted($criterion->id, $criterion->activity_id);
  129. if ($students_attempted) {
  130. $conteo++;
  131. }
  132. }
  133. // var_dump($conteo);
  134. // exit();
  135. return $conteo;
  136. }
  137. public function courses_attempted($courses)
  138. {
  139. $courses_array = [];
  140. foreach ($courses as $course) {
  141. // var_dump($course);
  142. // exit();
  143. $courses_array[] = $course->id;
  144. }
  145. //'expected_percentage_students_achieving'
  146. $criteria = DB::table('criteria')
  147. ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  148. ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  149. ->join('courses', 'activities.course_id', '=', 'courses.id')
  150. ->join('programs', 'programs.id', '=', 'courses.program_id')
  151. ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  152. ->where('criterion_objective_outcome.outcome_id', '=', $this->id)
  153. ->whereIn('courses.id', $courses_array)
  154. ->select('criteria.id', 'activity_criterion.activity_id')
  155. ->distinct()
  156. ->get();
  157. $conteo = 0;
  158. foreach ($criteria as $criterion) {
  159. $students_attempted = Criterion::students_attempted($criterion->id, $criterion->activity_id);
  160. if ($students_attempted) {
  161. $conteo++;
  162. }
  163. }
  164. // var_dump($conteo);
  165. // exit();
  166. return $conteo;
  167. }
  168. public function courses_achieved($courses)
  169. {
  170. $courses_array = [];
  171. foreach ($courses as $course) {
  172. $courses_array[] = $course->id;
  173. }
  174. //'expected_percentage_students_achieving',
  175. $criteria = DB::table('criteria')
  176. ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  177. ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  178. ->join('courses', 'activities.course_id', '=', 'courses.id')
  179. ->join('programs', 'programs.id', '=', 'courses.program_id')
  180. ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  181. ->where('criterion_objective_outcome.outcome_id', '=', $this->id)
  182. ->whereIn('courses.id', $courses_array)
  183. ->select('criteria.id', 'activity_criterion.activity_id')
  184. ->distinct()
  185. ->get();
  186. $conteo = 0;
  187. foreach ($criteria as $criterion) {
  188. $students_attempted = Criterion::students_attempted($criterion->id, $criterion->activity_id);
  189. $students_achieved = Criterion::students_achieved($criterion->id, $criterion->activity_id);
  190. if ($students_attempted) {
  191. $percentage_students_who_achieved = 100.0 * $students_achieved / $students_attempted;
  192. } else {
  193. $percentage_students_who_achieved = 0;
  194. }
  195. if ($percentage_students_who_achieved >= $criterion->expected_percentage_students_achieving) {
  196. $conteo++;
  197. }
  198. }
  199. return $conteo;
  200. }
  201. public function achieved($semesters, $is_grad)
  202. {
  203. $semesters_array = [];
  204. foreach ($semesters as $semester) {
  205. $semesters_array[] = $semester->id;
  206. }
  207. // DB::enableQueryLog();
  208. //'expected_percentage_students_achieving'
  209. $criteria = DB::table('criteria')
  210. ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  211. ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  212. ->join('courses', 'activities.course_id', '=', 'courses.id')
  213. ->join('programs', 'programs.id', '=', 'courses.program_id')
  214. ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  215. ->where('criterion_objective_outcome.outcome_id', '=', $this->id)
  216. ->where('programs.is_graduate', '=', $is_grad)
  217. ->whereIn('courses.semester_id', $semesters_array)
  218. ->select('criteria.id', 'activity_criterion.activity_id')
  219. ->distinct()
  220. ->get();
  221. // dd(DB::getQueryLog());
  222. $conteo = 0;
  223. foreach ($criteria as $criterion) {
  224. $students_attempted = Criterion::students_attempted($criterion->id, $criterion->activity_id);
  225. $students_achieved = Criterion::students_achieved($criterion->id, $criterion->activity_id);
  226. if ($students_attempted) {
  227. $percentage_students_who_achieved = 100.0 * $students_achieved / $students_attempted;
  228. } else {
  229. $percentage_students_who_achieved = 0;
  230. }
  231. if ($percentage_students_who_achieved >= $criterion->expected_percentage_students_achieving) {
  232. $conteo++;
  233. }
  234. }
  235. return $conteo;
  236. }
  237. // public function achieved($semester, $is_grad)
  238. // {
  239. //
  240. // // DB::enableQueryLog();
  241. // $criteria=DB::table('criteria')
  242. // ->join('activity_criterion', 'activity_criterion.criterion_id', '=', 'criteria.id')
  243. // ->join('activities', 'activity_criterion.activity_id', '=', 'activities.id')
  244. // ->join('courses', 'activities.course_id', '=', 'courses.id')
  245. // ->join('programs', 'programs.id', '=', 'courses.program_id')
  246. // ->join('criterion_objective_outcome', 'criterion_objective_outcome.criterion_id', '=', 'criteria.id')
  247. // ->where('criterion_objective_outcome.outcome_id','=',$this->id)
  248. // ->where('programs.is_graduate','=',$is_grad)
  249. // ->where('courses.semester_id','=',$semester)
  250. // ->select('criteria.id','expected_percentage_students_achieving','activity_criterion.activity_id')
  251. // ->distinct()
  252. // ->get()
  253. // ;
  254. // // dd(DB::getQueryLog());
  255. //
  256. // $conteo=0;
  257. // foreach($criteria as $criterion)
  258. // {
  259. // $outcome_performance=DB::table('outcome_performance')
  260. // ->where('outcome_performance.outcome_id','=',$this->id)
  261. // ->where('outcome_performance.criterion_id','=',$criterion->id)
  262. // ->where('outcome_performance.semester_id','=',$semester)
  263. // ->where('outcome_performance.level','=',$is_grad)
  264. // ->select('students_attempted','students_achieved')
  265. // ->first();
  266. // if(!empty($outcome_performance) and $outcome_performance->students_attempted)
  267. // {
  268. // $percentage_students_who_achieved=100.0*$outcome_performance->students_achieved/$outcome_performance->students_attempted;
  269. // }
  270. // else
  271. // {
  272. // $students_attempted=Criterion::students_attempted($criterion->id, $criterion->activity_id);
  273. // $students_achieved=Criterion::students_achieved($criterion->id, $criterion->activity_id);
  274. //
  275. // if($students_attempted)
  276. // {
  277. // $percentage_students_who_achieved=100.0*$students_achieved/$students_attempted;
  278. // DB::table('outcome_performance')->insert(array('criterion_id'=>$criterion->id,'outcome_id'=>$this->id,'semester_id'=>$semester,
  279. // 'students_attempted' => $students_attempted,'students_achieved' => $students_achieved,'level'=>$is_grad));
  280. // }
  281. // else
  282. // {
  283. // $percentage_students_who_achieved=0;
  284. // }
  285. // }
  286. // if($percentage_students_who_achieved>=$criterion->expected_percentage_students_achieving)
  287. // {
  288. // $conteo++;
  289. // }
  290. // }
  291. // return $conteo;
  292. // }
  293. //
  294. public static function active()
  295. {
  296. //TODO: Check when semester doesnt exist or session is empty
  297. $selected_semester = Semester::find(Session::get('semesters_ids')[0]);
  298. return Outcome::withTrashed()->where('deactivation_date', '>=', $selected_semester->start)->orWhere('deactivation_date', null)->orderBy('name', 'ASC')->get();
  299. }
  300. }