Nav apraksta

ThreeYearPlanController.php 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. <?php
  2. use Illuminate\Database\Eloquent\Collection;
  3. class ThreeYearPlanController extends \BaseController
  4. {
  5. public function threeYearsReport()
  6. {
  7. $user_id = auth::user()->id;
  8. // el ID de los semestres que el usuario tiene seleccionado.
  9. $semesters_ids = Session::get('semesters_ids');
  10. // buscar informacion de los semestres seleccionados
  11. $semesters = Semester::whereIn('id', $semesters_ids)->get();
  12. $title = "Three Year Plans Planning";
  13. $outcomes = Outcome::orderBy('name', 'ASC')
  14. ->where('deactivation_date', '=', '0000-00-00')
  15. ->orWhereNull('deactivation_date')
  16. ->get();
  17. $typs = DB::table('three_year_plan')
  18. ->orderBy('year_start', 'asc')
  19. ->get();
  20. $criteria = Criterion::withTrashed()->orderBy('name', 'ASC')->get();
  21. $program_id = DB::table('program_user')
  22. ->where('user_id', $user_id)
  23. ->select('program_id')
  24. ->get();
  25. $program_id = $program_id[0]->program_id;
  26. // se annadio la nueva variable
  27. return View::make('global.view-three-year-plan', compact('title', 'outcomes', 'typs', 'criteria', 'semesters', 'program_id'));
  28. }
  29. public function fetchThreeYears()
  30. {
  31. $id = Input::get('id');
  32. $semesters = DB::table('typ_semesters')
  33. ->join('semesters', 'semesters.id', '=', 'typ_semesters.semester_id')
  34. ->where('typ_semesters.typ_id', $id)
  35. // ->select('semesters.*')
  36. ->orderBy('typ_semesters.semester_id', 'asc')
  37. ->get();
  38. $typs = DB::table('three_year_plan')
  39. ->where('id', $id)
  40. ->orderBy('year_start', 'asc')
  41. ->get();
  42. $typs = $typs[0];
  43. $typs->semesters = $semesters;
  44. return array(
  45. 'typ' => $typs,
  46. );
  47. }
  48. public function update_typ_outcomes_semesters()
  49. {
  50. $outcomeSemesterArray = json_decode(Input::get('outcomeSemesterArray'), true);
  51. $typ_id = Input::get('typ_id');
  52. $user_id = auth::user()->id;
  53. $program_id = DB::table('program_user')
  54. ->where('user_id', $user_id)
  55. ->select('program_id')
  56. ->get();
  57. $program_id = $program_id[0]->program_id;
  58. $result = DB::table('typ_program')
  59. ->where('three_year_plan_id', $typ_id)
  60. ->where('program_id', $program_id)
  61. ->get();
  62. // create the relation if it doesnt exist
  63. if (count($result) == 0) {
  64. $typ_program_id = DB::table('typ_program')->insertGetId(
  65. array(
  66. 'three_year_plan_id' => $typ_id,
  67. 'program_id' => $program_id
  68. )
  69. );
  70. } else {
  71. $typ_program_id = $result[0]->id;
  72. }
  73. //go through array
  74. foreach ($outcomeSemesterArray as $outcome_semester) {
  75. // foreach of the 6 semesters
  76. foreach ($outcome_semester["semesters"] as $semester) {
  77. $insert = $semester[1];
  78. $outcome_id = explode("-sem", $semester[0])[0];
  79. $semester_code = explode("-sem", $semester[0])[1];
  80. $result = DB::table('semesters')
  81. ->where('code', $semester_code)
  82. ->select('id')
  83. ->get();
  84. if (count($result) == 0) {
  85. continue;
  86. }
  87. $semester_id = $result[0]->id;
  88. // verify if it exists
  89. $result = DB::table('typ_semester_outcome')
  90. ->where('typ_program_id', $typ_program_id)
  91. ->where('semester_id', $semester_id)
  92. ->where('outcome_id', $outcome_id)
  93. ->get();
  94. // if true, it should get inserted
  95. if ($insert == true) {
  96. // if == 0, then insert
  97. if (count($result) == 0) {
  98. $_ = DB::table('typ_semester_outcome')->insertGetId(
  99. array(
  100. 'typ_program_id' => $typ_program_id,
  101. 'semester_id' => $semester_id,
  102. 'outcome_id' => $outcome_id
  103. )
  104. );
  105. }
  106. //if exists, then do nothing
  107. }
  108. // if false, it should get deleted
  109. else { //value == false
  110. // if == 0, it doesnt exist. we do nothing
  111. if (count($result) == 0) {
  112. //pass
  113. }
  114. //if exists, then do nothing
  115. else {
  116. DB::table('typ_semester_outcome')
  117. ->where('typ_program_id', $typ_program_id)
  118. ->where('semester_id', $semester_id)
  119. ->where('outcome_id', $outcome_id)
  120. ->delete();
  121. }
  122. }
  123. }
  124. }
  125. return;
  126. }
  127. public function lookup_typ_semester_outcome()
  128. {
  129. $box_value = array();
  130. $info = Input::get('info');
  131. foreach ($info as $values) {
  132. $outcome_id = $values[0];
  133. $semester_code = $values[1];
  134. $program_id = $values[2];
  135. $box_id = $values[3];
  136. $typ_id = $values[4];
  137. //buscar id del typ
  138. $result = DB::table('typ_program')
  139. ->where('three_year_plan_id', $typ_id)
  140. ->where('program_id', $program_id)
  141. ->get();
  142. $typ_program_id = $result[0]->id;
  143. // buscar si existe el outcome_semester
  144. $result = DB::table('typ_semester_outcome')
  145. ->join('semesters', 'semesters.id', '=', 'typ_semester_outcome.semester_id')
  146. ->where('typ_program_id', $typ_program_id)
  147. ->where('semesters.code', $semester_code)
  148. ->where('outcome_id', $outcome_id)
  149. ->get();
  150. // if it doesnt exist
  151. if (count($result) == 0) {
  152. array_push($box_value, array($box_id, 0));
  153. } else {
  154. array_push($box_value, array($box_id, 1));
  155. }
  156. }
  157. return array(
  158. 'box_value' => ($box_value)
  159. );
  160. }
  161. public function section2_on_change()
  162. {
  163. $typ_id = Input::get('typ_id');
  164. // typ_id: (typ_id),
  165. $outcome_id = Input::get('outcome_id');
  166. // outcome_id: (outcome_id),
  167. $semester_id = Input::get('semester_id');
  168. // semester_id: (semester_id),
  169. $previous_objective_id = Input::get('previous_objective_id');
  170. // previous_objective_id: (previous_objective_id),
  171. $new_objective_id = Input::get('new_objective_id');
  172. // new_objective_id: (new_objective_id)
  173. // get program_id
  174. $user_id = auth::user()->id;
  175. $program_id = DB::table('program_user')
  176. ->where('user_id', $user_id)
  177. ->select('program_id')
  178. ->get();
  179. $program_id = $program_id[0]->program_id;
  180. // get typ_program_id
  181. $result = DB::table('typ_program')
  182. ->where('three_year_plan_id', $typ_id)
  183. ->where('program_id', $program_id)
  184. ->get();
  185. $typ_program_id = $result[0]->id;
  186. // get typ_semester_outcome_id
  187. $result = DB::table('typ_semester_outcome')
  188. ->where('typ_program_id', $typ_program_id)
  189. ->where('semester_id', $semester_id)
  190. ->where('outcome_id', $outcome_id)
  191. ->get();
  192. $typ_semester_outcome_id = $result[0]->id;
  193. //delete old objective relation if it exists
  194. if ($previous_objective_id != 'nothing_selected') {
  195. $result = DB::table('typ_semester_objectives')
  196. ->where('typ_semester_outcome_id', $typ_semester_outcome_id)
  197. ->where('objective_id', $previous_objective_id)
  198. ->get();
  199. if (count($result) != 0) {
  200. DB::table('typ_semester_objectives')
  201. ->where('typ_semester_outcome_id', $typ_semester_outcome_id)
  202. ->where('objective_id', $previous_objective_id)
  203. ->delete();
  204. }
  205. }
  206. //create new objective relation
  207. if ($new_objective_id != 'nothing_selected') {
  208. $result = DB::table('typ_semester_objectives')
  209. ->where('typ_semester_outcome_id', $typ_semester_outcome_id)
  210. ->where('objective_id', $new_objective_id)
  211. ->get();
  212. if (count($result) == 0) {
  213. $_ = DB::table('typ_semester_objectives')->insertGetId(
  214. array(
  215. 'typ_semester_outcome_id' => $typ_semester_outcome_id,
  216. 'objective_id' => $new_objective_id
  217. )
  218. );
  219. }
  220. }
  221. return 'update was succes';
  222. }
  223. public function section2_arrive()
  224. {
  225. // get program_id
  226. $user_id = auth::user()->id;
  227. $program_id = DB::table('program_user')
  228. ->where('user_id', $user_id)
  229. ->select('program_id')
  230. ->get();
  231. $program_id = $program_id[0]->program_id;
  232. // get typ_program_id
  233. $typ_id = Input::get('typ_id');
  234. $result = DB::table('typ_program')
  235. ->where('three_year_plan_id', $typ_id)
  236. ->where('program_id', $program_id)
  237. ->get();
  238. $typ_program_id = $result[0]->id;
  239. //search selected outcomes,semesters and get their objectives
  240. $selected_outcomes = DB::table('typ_semester_outcome')
  241. ->join('outcomes', 'outcomes.id', '=', 'typ_semester_outcome.outcome_id')
  242. ->where('typ_semester_outcome.typ_program_id', $typ_program_id)
  243. ->distinct('typ_semester_outcome.outcome_id')
  244. ->select('typ_semester_outcome.outcome_id')
  245. ->orderBy('outcomes.name', 'asc')
  246. ->get();
  247. $selected_objectives_array = array();
  248. $outcomes_info_array = array();
  249. // $objectives_info_array = array();
  250. $semesters_array = array();
  251. $info = array();
  252. foreach ($selected_outcomes as $outcome) {
  253. $outcome_id = $outcome->outcome_id;
  254. $result_outcomes = DB::table('outcomes')
  255. ->where('outcomes.id', $outcome_id)
  256. ->orderBy('outcomes.name', 'asc')
  257. ->get();
  258. foreach ($result_outcomes as $outcome_) {
  259. $result_semesters = DB::table('typ_semester_outcome')
  260. ->join('semesters', 'semesters.id', '=', 'typ_semester_outcome.semester_id')
  261. ->where('typ_semester_outcome.typ_program_id', $typ_program_id)
  262. ->where('typ_semester_outcome.outcome_id', $outcome_->id)
  263. ->select('typ_semester_outcome.id', 'typ_semester_outcome.semester_id', 'semesters.code', 'semesters.name')
  264. ->get();
  265. // buscar info sobre selected_semsters
  266. $outcome_->selected_semesters = array();
  267. foreach ($result_semesters as $semesters_) {
  268. $typ_semester_outcome_id = $semesters_->id;
  269. // lookup previusly selected objectives
  270. $result_objectives = DB::table('typ_semester_objectives')
  271. ->join('objectives', 'objectives.id', '=', 'typ_semester_objectives.objective_id')
  272. ->where('typ_semester_objectives.typ_semester_outcome_id', $typ_semester_outcome_id)
  273. ->orderBy('typ_semester_objectives.id', 'asc')
  274. ->get();
  275. $semesters_->selected_objectives = array();
  276. foreach ($result_objectives as $objectives_) {
  277. array_push($semesters_->selected_objectives, $objectives_);
  278. }
  279. // lookup available objectives
  280. $result_objectives = DB::table('objective_outcome')
  281. ->join('outcomes', 'outcomes.id', '=', 'objective_outcome.outcome_id')
  282. ->join('objectives', 'objectives.id', '=', 'objective_outcome.objective_id')
  283. ->join('objective_program', 'objective_program.objective_id', '=', 'objectives.id')
  284. ->where('objective_program.program_id', $program_id)
  285. ->where('objective_outcome.outcome_id', $outcome_id)
  286. ->select('objectives.id', 'objectives.text', 'outcomes.name as outcome_name')
  287. ->orderBy('objectives.text', 'asc')
  288. ->get();
  289. $semesters_->available_objectives = array();
  290. foreach ($result_objectives as $objectives_) {
  291. array_push($semesters_->available_objectives, $objectives_);
  292. }
  293. array_push($outcome_->selected_semesters, $semesters_);
  294. }
  295. array_push($info, $outcome_);
  296. }
  297. }
  298. return $info;
  299. }
  300. public function section3_arrive()
  301. {
  302. // get program_id
  303. $user_id = auth::user()->id;
  304. $program_id = DB::table('program_user')
  305. ->where('user_id', $user_id)
  306. ->select('program_id')
  307. ->get();
  308. $program_id = $program_id[0]->program_id;
  309. // get typ_program_id
  310. $typ_id = Input::get('typ_id');
  311. $result = DB::table('typ_program')
  312. ->where('three_year_plan_id', $typ_id)
  313. ->where('program_id', $program_id)
  314. ->get();
  315. $typ_program_id = $result[0]->id;
  316. //search selected outcomes,semesters and get their objectives
  317. $selected_outcomes = DB::table('typ_semester_outcome')
  318. ->join('outcomes', 'outcomes.id', '=', 'typ_semester_outcome.outcome_id')
  319. ->where('typ_semester_outcome.typ_program_id', $typ_program_id)
  320. ->distinct('typ_semester_outcome.outcome_id')
  321. ->select('typ_semester_outcome.outcome_id')
  322. ->orderBy('outcomes.name', 'asc')
  323. ->get();
  324. $selected_objectives_array = array();
  325. $outcomes_info_array = array();
  326. // $objectives_info_array = array();
  327. $semesters_array = array();
  328. $info = array();
  329. foreach ($selected_outcomes as $outcome) {
  330. $outcome_id = $outcome->outcome_id;
  331. $result_outcomes = DB::table('outcomes')
  332. ->where('outcomes.id', $outcome_id)
  333. ->get();
  334. foreach ($result_outcomes as $outcome_) {
  335. $result_semesters = DB::table('typ_semester_outcome')
  336. ->join('semesters', 'semesters.id', '=', 'typ_semester_outcome.semester_id')
  337. ->where('typ_semester_outcome.typ_program_id', $typ_program_id)
  338. ->where('typ_semester_outcome.outcome_id', $outcome_->id)
  339. ->select('typ_semester_outcome.id', 'typ_semester_outcome.semester_id', 'semesters.code', 'semesters.name')
  340. ->get();
  341. // buscar info sobre selected_semsters
  342. $outcome_->selected_semesters = array();
  343. foreach ($result_semesters as $semesters_) {
  344. $semester_id = $semesters_->semester_id;
  345. $typ_semester_outcome_id = $semesters_->id;
  346. $result_objectives = DB::table('typ_semester_objectives')
  347. ->join('objectives', 'objectives.id', '=', 'typ_semester_objectives.objective_id')
  348. ->where('typ_semester_objectives.typ_semester_outcome_id', $typ_semester_outcome_id)
  349. ->select('typ_semester_objectives.id as typ_semester_objectives_id', 'objectives.*', 'typ_semester_objectives.*')
  350. ->orderBy('typ_semester_objectives.id', 'asc')
  351. ->get();
  352. $semesters_->selected_objectives = array();
  353. foreach ($result_objectives as $objectives_) {
  354. $objective_id = $objectives_->objective_id;
  355. $program_id = $objectives_->program_id;
  356. $result_courses = DB::table('objective_program')
  357. ->join('objectives', 'objectives.id', '=', 'objective_program.objective_id')
  358. ->join('courses', 'courses.program_id', '=', 'objective_program.program_id')
  359. ->where('objective_program.objective_id', $objective_id)
  360. ->where('objective_program.program_id', $program_id)
  361. ->where('courses.semester_id', $semester_id)
  362. ->distinct('courses.name', 'courses.code')
  363. ->select('courses.id as course_id', 'courses.name', 'courses.code', 'objective_program.objective_id', 'objective_program.program_id')
  364. ->orderBy('courses.name', 'asc')
  365. ->groupBy('courses.name', 'courses.code')
  366. ->get();
  367. $objectives_->available_courses = array();
  368. foreach ($result_courses as $courses_) {
  369. array_push($objectives_->available_courses, $courses_);
  370. }
  371. // search for previusly selected courses
  372. $typ_semester_objective_id = $objectives_->typ_semester_objectives_id;
  373. $result_courses = DB::table('typ_semester_courses')
  374. ->join('courses', 'courses.id', '=', 'typ_semester_courses.course_id')
  375. ->where('typ_semester_courses.typ_semester_objective_id', $typ_semester_objective_id)
  376. ->select('courses.id as course_id', 'courses.*', 'typ_semester_courses.*')
  377. ->orderBy('courses.name', 'asc')
  378. ->get();
  379. $objectives_->selected_courses = array();
  380. foreach ($result_courses as $courses_) {
  381. array_push($objectives_->selected_courses, $courses_);
  382. }
  383. array_push($semesters_->selected_objectives, $objectives_);
  384. }
  385. array_push($outcome_->selected_semesters, $semesters_);
  386. }
  387. array_push($info, $outcome_);
  388. }
  389. }
  390. return $info;
  391. }
  392. public function section3_on_change()
  393. {
  394. $typ_id = Input::get('typ_id');
  395. // typ_id: (typ_id),
  396. $outcome_id = Input::get('outcome_id');
  397. // outcome_id: (outcome_id),
  398. $semester_id = Input::get('semester_id');
  399. // semester_id: (semester_id),
  400. $objective_id = Input::get('objective_id');
  401. // objective_id: (objective_id),
  402. $previous_course_id = Input::get('previous_course_id');
  403. // previous_course_id: (previous_course_id),
  404. $new_course_id = Input::get('new_course_id');
  405. // new_course_id: (new_course_id)
  406. // get program_id
  407. $user_id = auth::user()->id;
  408. $program_id = DB::table('program_user')
  409. ->where('user_id', $user_id)
  410. ->select('program_id')
  411. ->get();
  412. $program_id = $program_id[0]->program_id;
  413. // get typ_program_id
  414. $result = DB::table('typ_program')
  415. ->where('three_year_plan_id', $typ_id)
  416. ->where('program_id', $program_id)
  417. ->get();
  418. $typ_program_id = $result[0]->id;
  419. // get typ_semester_outcome_id
  420. $result = DB::table('typ_semester_outcome')
  421. ->where('typ_program_id', $typ_program_id)
  422. ->where('semester_id', $semester_id)
  423. ->where('outcome_id', $outcome_id)
  424. ->get();
  425. $typ_semester_outcome_id = $result[0]->id;
  426. // get typ_semester_objective_id
  427. $result = DB::table('typ_semester_objectives')
  428. ->where('typ_semester_outcome_id', $typ_semester_outcome_id)
  429. ->where('objective_id', $objective_id)
  430. ->get();
  431. $typ_semester_objective_id = $result[0]->id;
  432. //delete old objective relation if it exists
  433. if ($previous_course_id != 'nothing_selected') {
  434. $result = DB::table('typ_semester_courses')
  435. ->where('typ_semester_objective_id', $typ_semester_objective_id)
  436. ->where('course_id', $previous_course_id)
  437. ->get();
  438. if (count($result) != 0) {
  439. DB::table('typ_semester_courses')
  440. ->where('typ_semester_objective_id', $typ_semester_objective_id)
  441. ->where('course_id', $previous_course_id)
  442. ->delete();
  443. }
  444. }
  445. //create new objective relation
  446. if ($new_course_id != 'nothing_selected') {
  447. $result = DB::table('typ_semester_courses')
  448. ->where('typ_semester_objective_id', $typ_semester_objective_id)
  449. ->where('course_id', $new_course_id)
  450. ->get();
  451. if (count($result) == 0) {
  452. $_ = DB::table('typ_semester_courses')->insertGetId(
  453. array(
  454. 'typ_semester_objective_id' => $typ_semester_objective_id,
  455. 'course_id' => $new_course_id
  456. )
  457. );
  458. }
  459. }
  460. return 'update succes?';
  461. }
  462. public function createAnnualPlan($program_id)
  463. {
  464. $current_typ = DB::select("select * from three_year_plan where year_start <=" . date('Y') . " and year_end >=" . date('Y'))[0];
  465. $count = 0;
  466. $yearStartPlusOne = $current_typ->year_start + 1;
  467. $yearStart = $current_typ->year_start;
  468. while ($count < 3) {
  469. $firstSemester = DB::select("select * from semesters where name like 'First Semester {$yearStart}-{$yearStartPlusOne}'");
  470. $secondSemester = DB::select("select * from semesters where name like 'Second Semester {$yearStart}-{$yearStartPlusOne}'");
  471. if (count($firstSemester) && count($secondSemester)) {
  472. $query = DB::select("select * from annual_plans where semester_start ={$firstSemester[0]->id} and semester_end ={$secondSemester[0]->id} and program_id = {$program_id}");
  473. if (!count($query)) {
  474. DB::insert("insert into annual_plans (academic_year, semester_start, semester_end, program_id) values ('{$yearStart}-{$yearStartPlusOne}', {$firstSemester->id}, {$secondSemester->id}, {$program_id})");
  475. }
  476. $count++;
  477. $yearStart++;
  478. $yearStartPlusOne++;
  479. } else {
  480. $count++;
  481. $yearStart++;
  482. $yearStartPlusOne++;
  483. continue;
  484. }
  485. }
  486. }
  487. }