No Description

DashboardController.php 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Course;
  4. use App\Department;
  5. use App\Professor;
  6. use Illuminate\Http\Request;
  7. use App\Semester;
  8. use App\User;
  9. use Exception;
  10. use phpDocumentor\Reflection\Types\Object_;
  11. class DashboardController extends Controller
  12. {
  13. /**
  14. * Create a new controller instance.
  15. *
  16. * @return void
  17. */
  18. public function __construct()
  19. {
  20. $this->middleware('auth');
  21. }
  22. /**
  23. * Show the application dashboard.
  24. *
  25. * @return \Illuminate\Contracts\Support\Renderable
  26. */
  27. public function index()
  28. {
  29. return view('dashboard', [
  30. 'professors' => Professor::orderBy('last_name')->get(),
  31. 'semesters' => Semester::orderBy('code')->get()
  32. ]);
  33. }
  34. /**
  35. * Download the schedule for the given semester.
  36. *
  37. * @param string $semester
  38. * @return View
  39. */
  40. public function schedule(Request $request, $semester_code) {
  41. $semester = Semester::findOrFail($semester_code);
  42. $data = (object)['alpha' => $semester->alpha];
  43. $data->dept = Department::find($request->session()->get('department'));
  44. $data->courses = $semester->courses()->where('dept_id', '=', $data->dept->id)->distinct()->get();
  45. // dd($data);
  46. // $data->loadMissing(['courses.sections' => function ($query) use ($request, $semester_code) {
  47. // $query->where('semester_code', '=', $semester_code);
  48. // }, 'courses.sections.professors:id,first_name,last_name', 'courses.sections.schedules']);
  49. // return $data->toJson();
  50. // $data->courses = $data->courses->sort('cmpCourseCode');
  51. // dump($data->courses[0]->sections);
  52. // foreach($data->courses as $course) {
  53. // $course->sections = $course->sections;
  54. // foreach($course->sections as $section) {
  55. // $section->professors = $section->professors;
  56. // }
  57. // }
  58. // dd($data);
  59. dd(json_encode($data, JSON_PRETTY_PRINT));
  60. // header('Content-Type: application/pdf');
  61. // header(`Content-Disposition: attachment; filename="${semester_code}.pdf";`);
  62. // return $data->toJson();
  63. return '<script type="text/javascript">var data='.$data->toJson().';</script><script type="text/javascript" src="/js/createPDF.js"></script>';
  64. }
  65. public function export($semester_code) {
  66. $semester = Semester::findOrFail($semester_code);
  67. $professors = Professor::with(['sections', 'semesters:code,admin_load,investigative_load'])->whereIn('id', function($query) use ($semester_code) {
  68. $query->select('professor_id')
  69. ->from('professor_semester')
  70. ->where('semester_code', '=', $semester_code);
  71. })->orWhereIn('id', function($query) use ($semester_code) {
  72. $query->select('professor_id')
  73. ->from('sections')
  74. ->join('professor_section', 'sections.id', '=', 'professor_section.section_id')
  75. ->where('semester_code', '=', $semester_code);
  76. })->orderBy('last_name')->get();
  77. header('Content-Type: application/csv');
  78. header(`Content-Disposition: attachment; filename="${semester_code}.csv";`);
  79. if ($file = fopen('php://output', 'w+')) {
  80. fputcsv($file, ['PROFESOR', 'CARGA ACADEMICA', 'CARGA ADMINISTRATIVA', 'CARGA INVESTIGATIVE', 'CARGA TOTAL']);
  81. foreach ($professors as $professor) {
  82. $professor->academic_load = $professor->getAcademicLoad($semester);
  83. $prof_loads = $professor->semesters->find($semester);
  84. fputcsv($file, [
  85. $professor->last_name . ', ' . $professor->first_name,
  86. $professor->academic_load,
  87. $prof_loads->admin_load ?? 0,
  88. $prof_loads->investigative_load ?? 0,
  89. $professor->academic_load + ($prof_loads->admin_load ?? 0) + ($prof_loads->investigative_load ?? 0),
  90. ]);
  91. }
  92. fclose($file);
  93. die();
  94. }
  95. }
  96. public function exportCourses(Request $request) {
  97. $courses = Course::where('dept_id', '=', $request->session()->get('department'))->with('sections:id,course_id,semester_code')->get()->sort('cmpCourseCode');
  98. $semesters = Semester::orderBy('code', 'asc')->get();
  99. header('Content-Type: application/csv');
  100. header(`Content-Disposition: attachment; filename="courses.csv";`);
  101. if ($file = fopen('php://output', 'w+')) {
  102. fputcsv($file, array_merge(['CURSO'], $semesters->pluck('alpha')->toArray()));
  103. foreach ($courses as $course) {
  104. fputcsv($file,
  105. array_merge([$course->code], $semesters->map(function ($semester) use ($course) {
  106. return $course->getSemesterSectionCount($semester->code);
  107. })->toArray())
  108. );
  109. }
  110. fclose($file);
  111. die();
  112. }
  113. }
  114. public function cloneSemester(Request $request, $semester_code) {
  115. $semester = Semester::findOrFail($semester_code);
  116. // dd($semester->sections);
  117. $data = $request->validate([
  118. 'new_semester' => 'required|unique:semesters,code|regex:/^[a-zA-Z][0-9][123]$/',
  119. 'new_alpha' => 'required|unique:semesters,alpha'
  120. ]);
  121. try {
  122. $semester->clone(strtoupper($data['new_semester']), strtoupper($data['new_alpha']));
  123. } catch (Exception $e) {
  124. echo $e->getMessage();
  125. }
  126. return redirect()->back();
  127. }
  128. /**
  129. * TODO: Ability to add non-google users
  130. */
  131. public function addUser(Request $request) {
  132. $data = $request->validate(['email' => ['required', 'email']]);
  133. User::create($data);
  134. return redirect()->back();
  135. }
  136. }