$validator = FormValidator::courseUnit(array_merge(Input::all(), array('mode' => 'add'))); if ($validator->fails()) { return Redirect::to('/timetable/view_title/' . $titleId . '/' . $teacherId)->withInput()->withErrors($validator)->with('message', '輸入錯誤,請檢查'); } else { $data = Input::all(); if (Courseunit::create($data)) { $message = '新增完成'; } else { $message = '資料寫入錯誤'; } return Redirect::to('/timetable/view_title/' . $titleId . '/' . $teacherId)->with('message', $message); } }); // 執行刪除排課設定 Route::get('/delete/{titileId}/{courseUnitId}', function ($titileId, $courseUnitId) { $courseUnit = Courseunit::find($courseUnitId); $url = '/timetable/view_title/' . $titileId . '/' . $courseUnit->teacher->teacher_id; $message = '刪除[' . $courseUnit->teacher->teacher_name . ':' . $courseUnit->classes->classes_name . ':' . $courseUnit->course->course_name . ']設定'; $courseUnit->delete(); return Redirect::to($url)->with('message', $message); }); }); /** * 計算課表 */ Route::group(array('prefix' => 'caculate', 'before' => 'auth'), function () { // 顯示計算課表表單 Route::get('/', function () { return View::make('caculate'); }); // 執行計算課表
/** * 驗證排課單元 */ public static function courseUnit($data) { // 衝突檢查 Validator::extend('conflict', function ($attribute, $data, $parameters) { /* Array參考 [0][_token] => Yvw1pYLjZIm1BaiPJ1yTYKbs3Nl8T9zfkLesI0Bh [1][classes_id] => 4 [2][course_id] => 9 [3][count] => 1 [4][classroom_id] => 0 [5][combination] => 1 [6][repeat] => 0 [7][limit_course_time] => 1 [8][course_time] => 10000001000000110000011000001100000 [9][teacher_id] => 19 */ // 處理變數 list(, $classes_id, $course_id, $count, $classroom_id, $combination, $repeat) = $parameters; $mode = end($parameters); $teacher_id = prev($parameters); if (substr($mode, 0, 4) == 'edit') { $courseUnitId = intval(substr($mode, 4)); $mode = substr($mode, 0, 4); } if ($parameters[7] == 1) { $course_time = $parameters[8]; } else { $course_time = 0; } // 限制排課時間少於設定節數 if (substr_count($course_time, '1') < $count && substr_count($course_time, '1') != 0) { Session::flash('conflictError', '限制排課時間(共' . substr_count($course_time, '1') . '節)少於設定節數(' . $count . ')'); return false; } // 組合節數大於設定節數 if ($combination > $count) { Session::flash('conflictError', '組合節數(' . $combination . ')大於設定節數(' . $count . ')'); return false; } // 同天不排課,但是(排課節數 / 組合節數)超過5 if ($repeat == 0 && $count / $combination > 5) { Session::flash('conflictError', '同天同班不重複排課,但是(排課節數 / 組合節數)超過5'); return false; } // 教室可排課時間不足 if ($classroom_id != 0) { $courseCount = 0; $courseUnitUseClassroom = array(); foreach (Courseunit::where('classroom_id', '=', $classroom_id)->get() as $courseunit) { $courseCount += $courseunit->count; $courseUnitUseClassroom[] = $courseunit->teacher->teacher_name; } $classroom = Classroom::find($classroom_id); // 檢查是否為編輯模式 if ($mode == 'edit') { $courseUnit = Courseunit::find($courseUnitId); if ($courseUnit->classroom_id == $classroom_id) { $courseCount -= $courseUnit->count; } } if (substr_count($classroom->course_time, '1') * $classroom->count - $courseCount - $count < 0) { $teacherList = implode($courseUnitUseClassroom, ','); Session::flash('conflictError', '教室《' . $classroom->classroom_name . '》可排課時間不足,目前有使用的老師:' . $teacherList); return false; } } // 班級可排節數已滿 $classesCourseCount = 0; foreach (Courseunit::where('classes_id', '=', $classes_id)->get() as $courseunit) { $classesCourseCount += $courseunit->count; } // 編輯模式 if ($mode == 'edit') { $courseUnit = Courseunit::find($courseUnitId); if ($courseUnit->classes_id == $classes_id) { $classesCourseCount -= $courseUnit->count; } } $classes = Classes::find($classes_id); if (substr_count($classes->year->course_time, '1') - $classesCourseCount - $count < 0) { Session::flash('conflictError', '班級《' . $classes->classes_name . '》可排課時間不足'); return false; } return true; }); $rules = array('teacher_id' => 'required|integer', 'course_id' => 'required|integer', 'classroom_id' => 'required|integer', 'count' => 'required|integer', 'combination' => 'required|integer|conflict:' . implode(',', $data), 'repeat' => 'required|integer', 'course_time' => 'numeric'); $messages = array('required' => '此欄位必填', 'integer' => '必需為數字', 'conflict' => '排課衝突'); return Validator::make($data, $rules, $messages); }