public function postIndex(Request $request, Authenticatable $user) { // 验证是否已经申诉过 switch ($request->input('type')) { case 'complain': $complain = Complain::where('type', 'late')->where('eid', $user->eid)->where('startdate', date('Y-m-d'))->first(); if ($complain != null) { return redirect()->back()->withInput()->withErrors('请勿重复申辩'); } // 验证有效性 $v = $this->validatorComplain($request->all()); if ($v->fails()) { switch ($v->messages()->first()) { case 'The description field is required.': $messages = '理由至少需要5个字'; break; default: $messages = $v->messages()->first(); break; } return redirect()->back()->withInput()->withErrors($messages); } // 执行插入 Complain::create(['type' => 'late', 'eid' => $user->eid, 'startdate' => date('Y-m-d'), 'enddate' => date('Y-m-d'), 'description' => $request->input('description'), 'token' => str_random(60)]); return redirect('dashboard')->with('success', '申辩已提交,请等待管理员审核。审核成功后会自动记录。'); break; case 'workday': if (!$user->employee->admin) { return redirect('dashboard'); } // 验证有效性 $v = $this->validatorWorkday($request->all()); if ($v->fails()) { switch ($v->messages()->first()) { case 'The startdate field is required.': $messages = '开始日期不能为空'; break; case 'The startdate does not match the format Y-m-d.': $messages = '开始日期不符合规则'; break; case 'The enddate field is required.': $messages = '结束日期不能为空'; break; case 'The enddate does not match the format Y-m-d.': $messages = '结束日期不符合规则'; break; default: $messages = $v->messages()->first(); break; } return redirect()->back()->withInput()->withErrors($messages); } // 判断冲突 $count = Workday::where('date', '>=', $request->input('startdate'))->where('date', '<=', $request->input('enddate'))->count(); if ($count > 0) { return redirect()->back()->withInput()->withErrors('与已有记录冲突'); } // 执行插入 for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) { Workday::create(['date' => date('Y-m-d', $i), 'isworkday' => $request->input('isworkday')]); } return redirect('dashboard')->with('success', '特殊规则已记录。'); break; case "result": // 验证有效性 $v = $this->validatorResult($request->all()); if ($v->fails()) { switch ($v->messages()->first()) { case 'The startdate field is required.': $messages = '开始日期不能为空'; break; case 'The startdate does not match the format Y-m-d.': $messages = '开始日期不符合规则'; break; case 'The enddate field is required.': $messages = '结束日期不能为空'; break; case 'The enddate does not match the format Y-m-d.': $messages = '结束日期不符合规则'; break; default: $messages = $v->messages()->first(); break; } return redirect()->back()->withInput()->withErrors($messages); } $results = array(); $count = 0; $overtimeSum = 0; $latetimeSum = 0; // 执行查询 for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) { $temp = array(); // 日期 $temp['date'] = date('Y-m-d', $i); // 类型 $isWorkday = $this->isWorkday($i); $temp['type'] = $isWorkday ? true : false; // 计算签到签退时间 $overResult = $this->calculateOvertime($user, date('Y-m-d', $i), $isWorkday); $lateResult = $this->calculateLatetime($user, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:30:00'); $temp['firstSignIn'] = $overResult['firstSignIn']; $temp['lastSignIn'] = $overResult['lastSignIn']; if ($temp['firstSignIn'] != null && $temp['lastSignIn'] == null) { $temp['lastSignIn'] = date('Y-m-d', $i) . ' 18:00:00'; } $temp['overtime'] = $overResult['overtime']; $temp['latetime'] = $lateResult['latetime']; $overtimeSum += $temp['overtime']; if ($temp['latetime'] > 0) { $latetimeSum++; } $results[$count] = $temp; $count++; } // test // return $results; return view('result')->withResults($results)->with('overtimeSum', $overtimeSum)->with('latetimeSum', $latetimeSum); break; case "export": // 验证有效性 $v = $this->validatorResult($request->all()); if ($v->fails()) { switch ($v->messages()->first()) { case 'The startdate field is required.': $messages = '开始日期不能为空'; break; case 'The startdate does not match the format Y-m-d.': $messages = '开始日期不符合规则'; break; case 'The enddate field is required.': $messages = '结束日期不能为空'; break; case 'The enddate does not match the format Y-m-d.': $messages = '结束日期不符合规则'; break; default: $messages = $v->messages()->first(); break; } return redirect()->back()->withInput()->withErrors($messages); } // 计算加班 $overResults = array(); $overCount = 0; $lateResults = array(); $lateCount = 0; $okResults = array(); $okCount = 0; // 执行查询 $users = User::all(); foreach ($users as $u) { for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) { // 计算签到签退时间 $isWorkday = $this->isWorkday($i); $overResult = $this->calculateOvertime($u, date('Y-m-d', $i), $isWorkday); $lateResult = $this->calculateLatetime($u, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:30:00'); $okResult = $this->calculateLatetime($u, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:00:00'); if ($overResult['overtime'] > 0) { // 生成加班列表 $temp = array(); // 序号 $temp['id'] = $overCount + 1; // 工号 $temp['eid'] = $u->eid; // 姓名 $temp['name'] = $u->employee->name; // 日期 $temp['date'] = date('Y-m-d', $i); $temp['overtime'] = $overResult['overtime']; $overResults[$overCount] = $temp; $overCount++; } if ($lateResult['latetime'] > 0) { // 生成迟到列表 $temp = array(); // 序号 $temp['id'] = $lateCount + 1; // 工号 $temp['eid'] = $u->eid; // 姓名 $temp['name'] = $u->employee->name; // 日期 $temp['date'] = date('Y-m-d', $i); $temp['latetime'] = $lateResult['latetime']; $lateResults[$lateCount] = $temp; $lateCount++; } if ($okResult['latetime'] > 0) { // 生成晚到列表 $temp = array(); // 序号 $temp['id'] = $okCount + 1; // 工号 $temp['eid'] = $u->eid; // 姓名 $temp['name'] = $u->employee->name; // 日期 $temp['date'] = date('Y-m-d', $i); $temp['latetime'] = $okResult['latetime']; $okResults[$okCount] = $temp; $okCount++; } } } // test // return $results; return view('export')->with('overResults', $overResults)->with('lateResults', $lateResults)->with('okResults', $okResults); break; // 其它申辩 // 其它申辩 case 'business': $v = $this->validatorBusiness($request->all()); if ($v->fails()) { switch ($v->messages()->first()) { case 'The startdate field is required.': $messages = '开始日期不能为空'; break; case 'The startdate does not match the format Y-m-d.': $messages = '开始日期不符合规则'; break; case 'The enddate field is required.': $messages = '结束日期不能为空'; break; case 'The enddate does not match the format Y-m-d.': $messages = '结束日期不符合规则'; break; case 'The description field is required.': $messages = '理由至少需要5个字'; break; default: $messages = $v->messages()->first(); break; } return redirect()->back()->withInput()->withErrors($messages); } if ($request->input('businessType') != 'business' && $request->input('businessType') != 'ask') { return redirect()->back()->withInput()->withErrors('申辩类型非法'); } if (strtotime($request->input('startdate')) > strtotime($request->input('enddate'))) { return redirect()->back()->withInput()->withErrors('起始时间大于结束时间'); } // 判断该时间段是否是旷工,只有旷工才可进行此类申辩 for ($i = strtotime($request->input('startdate')); $i <= strtotime($request->input('enddate')); $i += 86400) { $isWorkday = $this->isWorkday($i); $overResult = $this->calculateOvertime($user, date('Y-m-d', $i), $isWorkday); $lateResult = $this->calculateLatetime($user, $overResult['firstSignIn'], date('Y-m-d', $i), $isWorkday, '09:30:00'); if ($lateResult['latetime'] != 540) { return redirect()->back()->withInput()->withErrors('你在 ' . date('Y-m-d', $i) . ' 并未旷工,不符合申辩要求'); } } Complain::create(['type' => $request->input('businessType'), 'eid' => $user->eid, 'startdate' => $request->input('startdate'), 'enddate' => $request->input('enddate'), 'description' => $request->input('description'), 'token' => str_random(60)]); return redirect('dashboard')->with('success', '申辩已提交,请等待管理员审核。审核成功后会自动记录。'); break; default: return redirect('dashboard'); break; } }