|
|
@@ -0,0 +1,190 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Controllers;
|
|
|
+
|
|
|
+use App\ProcessDailyParticipant;
|
|
|
+use App\User;
|
|
|
+use App\UserDetail;
|
|
|
+use App\UserDutyCheck;
|
|
|
+use Carbon\Carbon;
|
|
|
+use Illuminate\Database\Eloquent\Builder;
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use Illuminate\Support\Facades\Auth;
|
|
|
+use Illuminate\Support\Facades\Gate;
|
|
|
+use Illuminate\Support\Facades\Validator;
|
|
|
+
|
|
|
+class PersonnelController extends Controller
|
|
|
+{
|
|
|
+ //任务审核
|
|
|
+ public function storeMissionAudit(Request $request){
|
|
|
+ if(!Gate::allows('人事管理-任务审核')){ return redirect(url('/')); }
|
|
|
+ $id=$request->input('id');
|
|
|
+ if (!$id)return ['error'=>'提交审核失败!'];
|
|
|
+ $processDailyParticipant=ProcessDailyParticipant::find($id);
|
|
|
+ if (!$id)return ['error'=>'未找到对应记录!'];
|
|
|
+ $processDailyParticipant->status='已审核';
|
|
|
+ $processDailyParticipant->update();
|
|
|
+ $this->log(__METHOD__,"任务审核".__FUNCTION__,json_encode($processDailyParticipant),Auth::user()['id']);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //打卡审核时判断是否异常
|
|
|
+ public function isException(Request $request){
|
|
|
+ $id=$request->input('id');
|
|
|
+ $checked_at=$request->input('checked_at');
|
|
|
+ $type=$request->input('type');
|
|
|
+ $user_id=$request->input('user_id');
|
|
|
+ if (!$id || !$checked_at || !$type || !$user_id)return ['exception'=>'数据异常!','duration_man_hour'=>''];
|
|
|
+ $userDutyCheck=UserDutyCheck::where('user_id',$user_id)->where('checked_at','<',$checked_at)->first();
|
|
|
+ if (!$userDutyCheck)return ['exception'=>'','duration_man_hour'=>''];
|
|
|
+ $dateStart=Carbon::parse($userDutyCheck->checked_at);
|
|
|
+ $dateEnd=Carbon::parse($checked_at);
|
|
|
+ $minute=($dateEnd->diffInMinutes($dateStart));
|
|
|
+ if ($type=="登入"&&$userDutyCheck->type=="登入"&&$minute>30){
|
|
|
+ return ['exception'=>'无出场纪录!','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+ if ($type=="登出"&&$userDutyCheck->type=="登出"&&$minute>30){
|
|
|
+ return ['exception'=>'无入场纪录!','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+ if ($type=="登出"&&$userDutyCheck->type=="登入"&&$minute>=720){
|
|
|
+ return ['exception'=>'时间异常!','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+ if ($type=="登出"&&$userDutyCheck->type=="登入"){
|
|
|
+ return ['exception'=>'','duration_man_hour'=>$minute/60];
|
|
|
+ }
|
|
|
+ return ['exception'=>'','duration_man_hour'=>''];
|
|
|
+ }
|
|
|
+
|
|
|
+ //打卡审核
|
|
|
+ public function storeClockAudit(Request $request){
|
|
|
+ if(!Gate::allows('人事管理-打卡审核')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
|
|
|
+ $id=$request->input('id');
|
|
|
+ $type=$request->input('type');
|
|
|
+ $userDutyCheck=UserDutyCheck::find($id);
|
|
|
+ $userDutyCheck->type=$type;
|
|
|
+ $userDutyCheck->verify_user_id=Auth::user()['id'];
|
|
|
+ $userDutyCheck->update();
|
|
|
+ $this->log(__METHOD__,"打卡审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
|
|
|
+ return ["success"=>true,"data"=>$userDutyCheck->verify_user_id];
|
|
|
+ }
|
|
|
+
|
|
|
+ //打卡组长审核
|
|
|
+ public function storeGroupAudit(Request $request){
|
|
|
+ if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
|
|
|
+ $id=$request->input('id');
|
|
|
+ $userDutyCheck=UserDutyCheck::find($id);
|
|
|
+ $user=User::find($userDutyCheck->user_id);
|
|
|
+ $workGroup=$user->userWorkGroups()->first();
|
|
|
+ if ($workGroup){
|
|
|
+ if(!Gate::allows($workGroup->name)){ return ["success"=>false,"data"=>"您无此权限操作!!!"]; }
|
|
|
+ }
|
|
|
+ $type=$request->input('type');
|
|
|
+ $userDutyCheck->type=$type;
|
|
|
+ $userDutyCheck->group_user_id=Auth::user()['id'];
|
|
|
+ $userDutyCheck->update();
|
|
|
+ $this->log(__METHOD__,"打卡组长审核".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
|
|
|
+ return ["success"=>true,$userDutyCheck->group_user_id];
|
|
|
+ }
|
|
|
+
|
|
|
+ //去往任务审核
|
|
|
+ public function missionAudit(Request $request){
|
|
|
+ if(!Gate::allows('人事管理-任务审核')){ return redirect(url('/')); }
|
|
|
+ $processDailyParticipants=ProcessDailyParticipant::with(['processDaily','user_detail'])
|
|
|
+ ->orderBy('id','DESC');
|
|
|
+ $start_date=$request->input('start_date');
|
|
|
+ $end_date=$request->input('end_date');
|
|
|
+ $full_name=$request->input('full_name');
|
|
|
+ $mobile_phone=$request->input('mobile_phone');
|
|
|
+ if ($start_date) {
|
|
|
+ $processDailyParticipants->whereHas('processDaily',function (Builder $builder)use($start_date){
|
|
|
+ $builder->where('date','>=',$start_date);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if ($end_date) {
|
|
|
+ $processDailyParticipants->whereHas('processDaily',function (Builder $builder)use($end_date){
|
|
|
+ $builder->where('date','<=',$end_date);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if ($full_name){
|
|
|
+ $processDailyParticipants->whereHas('user_detail',function (Builder $builder)use($full_name){
|
|
|
+ $builder->where('full_name',$full_name);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if ($mobile_phone){
|
|
|
+ $processDailyParticipants->whereHas('user_detail',function (Builder $builder)use($mobile_phone){
|
|
|
+ $builder->where('mobile_phone',$mobile_phone);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ $processDailyParticipants=$processDailyParticipants->paginate($request->input('paginate')?$request->input('paginate'):50);
|
|
|
+ foreach ($processDailyParticipants as $processDailyParticipant){
|
|
|
+ if ($processDailyParticipant->processDaily){
|
|
|
+ $processController=new ProcessController();
|
|
|
+ $processDailyParticipant=$processController->countParticipantManHour($processDailyParticipant,$processDailyParticipant->processDaily->date);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return view('personnel/checking-in/missionAudit',['processDailyParticipants'=>$processDailyParticipants,'request'=>$request->input()]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //去往打卡审核
|
|
|
+ public function clockAudit(){
|
|
|
+ if(!Gate::allows('人事管理')){ return redirect(url('/')); }
|
|
|
+ $user=Auth::user();
|
|
|
+ if (!$user)return redirect('/');
|
|
|
+ $result=$user->getPermittingWorkGroupIdsAttribute();
|
|
|
+ $userWorkGroupIds=$result['workGroupIds'];
|
|
|
+ $users=User::whereHas("userWorkGroups",function (Builder $query)use(&$userWorkGroupIds){
|
|
|
+ $query->whereIn("id",$userWorkGroupIds);
|
|
|
+ })->get();
|
|
|
+ $user_ids=array_column($users->toArray(),'id');
|
|
|
+ $date=date('Y-m-d');
|
|
|
+ $userDutyChecks=UserDutyCheck::with('userDetail')->whereIn("user_id",$user_ids)
|
|
|
+ ->where('checked_at','like',$date."%")->get();
|
|
|
+ return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'workGroupSign'=>$result['workGroupSign']]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //录入补卡
|
|
|
+ public function storeReplenishClock(Request $request){
|
|
|
+ if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/')); }
|
|
|
+ $errors=$this->validatorUserDutyCheck($request)->errors();
|
|
|
+ if (count($errors)>0)return ['success'=>false,'data'=>$errors];
|
|
|
+ $user_id=$request->input('user_id');
|
|
|
+ $checked_at=$request->input('checked_at');
|
|
|
+ $type=$request->input('type');
|
|
|
+ $userDutyCheck=new UserDutyCheck([
|
|
|
+ 'user_id'=>$user_id,
|
|
|
+ 'checked_at'=>$checked_at,
|
|
|
+ 'type'=>$type,
|
|
|
+ 'source'=>'补入',
|
|
|
+ ]);
|
|
|
+ $userDutyCheck->save();
|
|
|
+ $this->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
|
|
|
+ return ['success'=>true,'data'=>$userDutyCheck];
|
|
|
+ }
|
|
|
+
|
|
|
+ //搜索临时工下打卡信息
|
|
|
+ public function checkUserLabors(Request $request){
|
|
|
+ if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/')); }
|
|
|
+ $full_name=$request->input('full_name');
|
|
|
+ $userDetail=UserDetail::with(['userDutyChecks'=>function ($query){
|
|
|
+ return $query->orderBy('checked_at','DESC')->limit(5);
|
|
|
+ }])->where('full_name',$full_name)->get();
|
|
|
+ return ['success'=>true,'data'=>$userDetail];
|
|
|
+ }
|
|
|
+
|
|
|
+ //考勤
|
|
|
+ public function createReplenishClock(){
|
|
|
+ if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/')); }
|
|
|
+ return view('personnel/checking-in/createReplenishClock');
|
|
|
+ }
|
|
|
+
|
|
|
+ public function validatorUserDutyCheck(Request $request){
|
|
|
+ $validator=Validator::make($request->input(),[
|
|
|
+ 'user_id'=>'required',
|
|
|
+ 'checked_at'=>'required|date_format:Y-m-d H:i',
|
|
|
+ 'type'=>'required',
|
|
|
+ ],[
|
|
|
+ 'date_format'=>':attribute 格式错误',
|
|
|
+ ],['checked_at'=>'日期']);
|
|
|
+ return $validator;
|
|
|
+ }
|
|
|
+}
|