Kaynağa Gözat

人事管理--修改工作时长问题,修改临时工报表权限问题

haozi 5 yıl önce
ebeveyn
işleme
fbd6603282

+ 65 - 62
app/Http/Controllers/LaborReportController.php

@@ -63,14 +63,14 @@ class LaborReportController extends Controller
      */
     public function index(Request $request)
     {
-        if(!Gate::allows('人事管理')){ return redirect(url('/'));  }
+        //if(!Gate::allows('人事管理')){ return redirect(url('/'));  }
+        if(!Gate::allows('人事管理-临时工报表')){ return redirect(url('/'));  }
         $user=Auth::user();
         if (!$user)return redirect('/');
-        $userWorkgroupIds=$user->getPermittingWorkgroupIds();
+        $userWorkgroupIds=$user->getPermittingWorkgroupIds(Gate::allows('人事管理-临时工报表-可见全部组'));
         $permittingWorkgroups=UserWorkgroup::whereIn('id',$userWorkgroupIds)->get();
         if($permittingWorkgroups->isEmpty())$permittingWorkgroups="[]";
         $laravelEchoPrefix = config('database.redis.options.prefix');
-        if (!Gate::allows('人事管理-临时工报表-可见全部组')){return redirect(url('/')); }
         if ($request->input()){
             $laborReports=LaborReport::orderBy('id','DESC');
             $laborReports=$this->conditionQuery($request,$laborReports);
@@ -78,58 +78,34 @@ class LaborReportController extends Controller
             $userWorkGroups=UserWorkgroup::select('id','name')->get();
             return view('personnel.laborReport.index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'request'=>$request->input(),'permittingWorkgroups'=>$permittingWorkgroups,'laravelEchoPrefix'=>$laravelEchoPrefix,]);
         }
-        $laborReports=LaborReport::with(['user','userDutyCheck','userWorkgroup'])->whereIn('user_workgroup_id',$userWorkgroupIds)->orWhereNull('user_workgroup_id')
-            ->orderBy('id','DESC')->paginate(50);
+        $laborReportsBuilder=LaborReport::with(['user','userDutyCheck','userWorkgroup'])->whereIn('user_workgroup_id',$userWorkgroupIds);
+        if(Gate::allows('人事管理-临时工报表-可见全部组')||Gate::allows('人事管理-门卫审核')){
+            $laborReportsBuilder->orWhereNull('user_workgroup_id');
+        }
+        $laborReports=$laborReportsBuilder->orderBy('id','DESC')->paginate(50);
         $laborReports=$laborReports->sortBy('name');
         $laborReports->values()->all();
-        foreach ($laborReports as $laborReport){
-            if (!$laborReport->group_user_id){
-                //十分钟之内组长未审核实行软删除
-                $tenMinutesLater=Carbon::parse($laborReport->created_at)->subMinutes(-50)->format('Y-m-d H:i:s');
-                if (Carbon::now()->format('Y-m-d H:i:s')>$tenMinutesLater){
-                    $laborReport->delete();
-                    $this->log(__METHOD__,"组长未审核该条记录将在10分钟后实行软删除__".__FUNCTION__,$laborReport->toJson(),Auth::user()['id']);
-                }
-            }
-            $addOneHourCheckedAt=Carbon::parse($laborReport->userDutyCheck['checked_at'])->subHours(-1)->format('Y-m-d H:i:s');
-            if (!$laborReport->userDutyCheck['verify_user_id']&&Carbon::now()->format('Y-m-d H:i:s')>$addOneHourCheckedAt){
-                $laborReport->delete();
-                $this->log(__METHOD__,"进场门卫未审核该条记录将在一小时后实行软删除__".__FUNCTION__,$laborReport->toJson(),Auth::user()['id']);
-            }
-        }
+//        foreach ($laborReports as $laborReport){
+//            if (!$laborReport->group_user_id){
+//                //十分钟之内组长未审核实行软删除
+//                $tenMinutesLater=Carbon::parse($laborReport->created_at)->subMinutes(-50)->format('Y-m-d H:i:s');
+//                if (Carbon::now()->format('Y-m-d H:i:s')>$tenMinutesLater){
+//                    $laborReport->delete();
+//                    $this->log(__METHOD__,"组长未审核该条记录将在10分钟后实行软删除__".__FUNCTION__,$laborReport->toJson(),Auth::user()['id']);
+//                }
+//            }
+//            $addOneHourCheckedAt=Carbon::parse($laborReport->userDutyCheck['checked_at'])->subHours(-1)->format('Y-m-d H:i:s');
+//            if (!$laborReport->userDutyCheck['verify_user_id']&&Carbon::now()->format('Y-m-d H:i:s')>$addOneHourCheckedAt){
+//                $laborReport->delete();
+//                $this->log(__METHOD__,"进场门卫未审核该条记录将在一小时后实行软删除__".__FUNCTION__,$laborReport->toJson(),Auth::user()['id']);
+//            }
+//        }
         $userWorkGroups=UserWorkgroup::select('id','name')->get();
         return view('personnel/laborReport/index',['laborReports'=>$laborReports,'userWorkGroups'=>$userWorkGroups,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
 
     }
-
-    //dd($laborReport->userDutyCheck['checked_at']);
-    //换场登入(当天有进场 退场 又进场 情况)
-    //换组登入 (当天进场后  换组 )
-//            if ($laborReport->user_workgroup_id){
-//                $createdAtDate=Carbon::parse($laborReport->created_at)->format('Y-m-d');
-//                $userDutyCheck=UserDutyCheck::where('user_id',$laborReport->user_id)->where('type','登入')->where('checked_at','like',$createdAtDate.'%')->first();
-//                $this->guardClock($laborReport,$userDutyCheck);
-//            }else if (!$laborReport->user_workgroup_id){
-//                $createdAtDate=Carbon::parse($laborReport->created_at)->format('Y-m-d H:i');
-//                $userDutyCheck=UserDutyCheck::where('user_id',$laborReport->user_id)->where('type','登入')->where('checked_at','like',$createdAtDate.'%')->first();
-//                $this->guardClock($laborReport,$userDutyCheck);
-//            }
-
-
-//    public function guardClock($laborReport,$userDutyCheck){
-//        if(!$userDutyCheck)$addOneHourCheckedAt=Carbon::parse($laborReport['created_at'])->subHours(-1)->format('Y-m-d H:i:s');
-//        else $addOneHourCheckedAt=Carbon::parse($userDutyCheck['checked_at'])->subHours(-1)->format('Y-m-d H:i:s');
-//        if ($userDutyCheck['verify_user_id']) $laborReport->userDutyCheck=$userDutyCheck;
-//        if (!$userDutyCheck['verify_user_id']&&Carbon::now()->format('Y-m-d H:i:s')<$addOneHourCheckedAt){
-//            $laborReport->userDutyCheck=$userDutyCheck;
-//        }
-//        else if (!$userDutyCheck['verify_user_id']&&Carbon::now()->format('Y-m-d H:i:s')>$addOneHourCheckedAt){
-//            $laborReport->delete();
-//            $this->log(__METHOD__,"进场门卫未审核该条记录将在一小时后实行软删除__".__FUNCTION__,$laborReport->toJson(),Auth::user()['id']);
-//        }
-//    }
     public function export($id,Request $request){
-        if (!Gate::allows('人事管理-临时工报表-可见全部组')){return redirect(url('/')); }
+        if (!Gate::allows('人事管理-临时工报表')){return redirect(url('/')); }
         ini_set('max_execution_time',3500);
         ini_set('memory_limit','3526M');
         if ($id==-1){
@@ -144,27 +120,30 @@ class LaborReportController extends Controller
         if (!$id)return ;
         $row=[[
             'id'=>'ID',
-            'created_at'=>'创建时间',
+            'enter_at'=>'进场时间',
+            'exit_at'=>'退场时间',
             'enter_number'=>'进厂编号',
             'user_workgroup_name'=>'小组',
             'name'=>'临时工',
             'mobile_phone'=>'电话',
             'identity_number'=>'身份证号',
             'labor_company'=>'劳务所',
-            'check_in_at'=>'打卡时间',
+            'check_in_at'=>'进组时间',
+            'check_out_at'=>'退组时间',
             'verify_at'=>'审核时间',
             'group_user_id'=>'审核人',
-            'check_out_at'=>'退场时间',
-            'relax_time'=>'晚饭时间',
+            'relax_time'=>'晚饭时间(分)',
             'online_duration'=>'在线时长',
             'working_duration'=>'本次工作时长',
+            'remark'=>'备注',
         ]];
         $list=[];
         for ($i=0; $i<count($id);$i++){
             $laborReport=LaborReport::with(['userWorkgroup','user'])->find($id[$i]);
             $w=[
                 'id'=>isset($laborReport->id)?$laborReport->id:'',
-                'created_at'=>isset($laborReport->created_at)?$laborReport->created_at:'',
+                'enter_at'=>isset($laborReport->enter_at)?$laborReport->enter_at:'',
+                'exit_at'=>isset($laborReport->exit_at)?$laborReport->exit_at:'',
                 'enter_number'=>isset($laborReport->enter_number)?$laborReport->enter_number:'',
                 'user_workgroup_name'=>isset($laborReport->userWorkgroup->name)?$laborReport->userWorkgroup->name:'',
                 'name'=>isset($laborReport->name)?$laborReport->name:'',
@@ -172,12 +151,13 @@ class LaborReportController extends Controller
                 'identity_number'=>isset($laborReport->identity_number)?$laborReport->identity_number:'',
                 'labor_company'=>isset($laborReport->labor_company)?$laborReport->labor_company:'',
                 'check_in_at'=>isset($laborReport->check_in_at)?$laborReport->check_in_at:'',
+                'check_out_at'=>isset($laborReport->check_out_at)?$laborReport->check_out_at:'',
                 'verify_at'=>isset($laborReport->verify_at)?$laborReport->verify_at:'',
                 'group_user_id'=>isset($laborReport->user->name)?$laborReport->user->name:'',
-                'check_out_at'=>isset($laborReport->check_out_at)?$laborReport->check_out_at:'',
                 'relax_time'=>isset($laborReport->relax_time)?$laborReport->relax_time:'',
                 'online_duration'=>isset($laborReport->online_duration)?$laborReport->online_duration:'',
                 'working_duration'=>isset($laborReport->working_duration)?$laborReport->working_duration:'',
+                'remark'=>isset($laborReport->remark)?$laborReport->remark:'',
             ];
             $list[$i]=$w;
         }
@@ -204,10 +184,9 @@ class LaborReportController extends Controller
     }
     //打卡组长审核
     public function groupClockAudit(Request $request){
-        if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $id=$request->input('id');
         $laborReport=LaborReport::find($id);
-        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $laborReport->group_user_id=Auth::user()['id'];
         $laborReport->verify_at=date('Y-m-d H:i:s');
         $laborReport->update();
@@ -216,13 +195,28 @@ class LaborReportController extends Controller
         event(new TeamAuditEvent($laborReport));
         return ["success"=>true,"data"=>$laborReport];
     }
+    //打卡组长审核(特定组添加备注)
+    public function addRemarkAndGroupClock(Request $request){
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
+        $id=$request->input('id');
+        $remark=$request->input('remark');
+        if(!$remark){ return ["success"=>false,"data"=>"您还未添加任何备注,请返回添加备注!"];  }
+        $laborReport=LaborReport::find($id);
+        $laborReport->group_user_id=Auth::user()['id'];
+        $laborReport->verify_at=date('Y-m-d H:i:s');
+        $laborReport->update();
+        $laborReport->setRemarkAttribute($remark,$id);
+        $laborReport->verifyPerson=Auth::user()['name'];
+        $this->log(__METHOD__,"打卡组长审核并添加相应备注".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
+        event(new TeamAuditEvent($laborReport));
+        return ["success"=>true,"data"=>$laborReport];
+    }
 
     //组长点击退组
     public function groupExport(Request $request){
-        if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $id=$request->input('id');
         $laborReport=LaborReport::find($id);
-        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $laborReportStatus=new LaborReportStatus([
             'labor_report_id'=>$id,
             'status'=>'已退组',
@@ -233,8 +227,13 @@ class LaborReportController extends Controller
         $check_in_at=$laborReport->check_in_at;
         $laborReport->check_out_at=$check_out_at;
         $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
-        $laborReport->online_duration=$online_duration;
         $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
+        if ($laborReport['enter_at']){
+            $enter_at=$laborReport['enter_at'];
+            $laborReport->online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($enter_at))/3600,2);
+        }else{
+            $laborReport->online_duration=$online_duration;
+        }
         $laborReport->update();
         $laborReport->is_exportGroup=$laborReport->getIsExportGroupAttribute();
         $this->log(__METHOD__,"退组".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);
@@ -244,12 +243,11 @@ class LaborReportController extends Controller
 
     //晚19点后组长点击退场,判断是否有晚餐情况
     public function groupExportEnsure(Request $request){
-        if(!Gate::allows('人事管理')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
+        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $id=$request->input('id');
         $relax_time=$request->input('relax_time');
         if(!$relax_time){ return ["success"=>false,"data"=>"未选择确切晚饭时间,请重新选择!"];  }
         $laborReport=LaborReport::find($id);
-        if(!Gate::allows('人事管理-组长审核')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $laborReportStatus=new LaborReportStatus([
             'labor_report_id'=>$id,
             'status'=>'已退组',
@@ -260,13 +258,18 @@ class LaborReportController extends Controller
         $check_in_at=$laborReport->check_in_at;
         $laborReport->check_out_at=$check_out_at;
         $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
-        $laborReport->online_duration=$online_duration;
         if ($relax_time){
             $laborReport->relax_time=$relax_time;
             $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration)-$relax_time/60;//减去晚饭时间
         }else{
             $laborReport->working_duration=$this->minusLunchTime($laborReport,$online_duration);
         }
+        if ($laborReport->enter_at){
+            $enter_at=$laborReport['enter_at'];
+            $laborReport->online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($enter_at))/3600,2);
+        }else{
+            $laborReport->online_duration=$online_duration;
+        }
         $laborReport->update();
         $laborReport->is_exportGroup=$laborReport->getIsExportGroupAttribute();
         $this->log(__METHOD__,"退组".__FUNCTION__,json_encode($laborReport),Auth::user()['id']);

+ 69 - 61
app/Http/Controllers/PersonnelController.php

@@ -2,14 +2,12 @@
 
 namespace App\Http\Controllers;
 
-use App\Events\ClockinEvent;
-use App\Events\ClockoutEvent;
 use App\Events\ExportEvent;
 use App\Events\ImportEvent;
 use App\Events\TeamAuditEvent;
 use App\LaborReport;
 use App\ProcessDailyParticipant;
-use App\User;
+use App\Services\LaborReportService;
 use App\UserDetail;
 use App\UserDutyCheck;
 use App\UserWorkgroup;
@@ -17,13 +15,79 @@ use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
-use Ramsey\Uuid\Uuid;
+
 
 class PersonnelController extends Controller
 {
+    function __construct()
+    {
+        app()->bind('LaborReportService',LaborReportService::class);
+    }
+    //录入补卡
+    public function storeReplenishClock(Request $request){
+        if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/'));  }
+        $errors=$this->validatorUserDutyCheck($request)->errors();
+        if (count($errors)>0)return ['success'=>false,'error'=>$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'=>'补入',
+        ]);
+        $checkedAtDate=Carbon::parse($checked_at)->format('Y-m-d');
+        $userDutyCheckImport=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->where('type','登入')->orderBy('id','desc')->first();
+        if ($userDutyCheckImport&&$userDutyCheck->type=='登入')return ['result'=>true,'data'=>'已存在进场记录!'];
+        $userDutyCheckExport=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->where('type','登出')->orderBy('id','desc')->first();
+        if ($userDutyCheckExport&&$userDutyCheck->type=='登出')return ['result'=>true,'data'=>'已存在出场记录!'];
+        if ($type=='登出')$userDutyCheck->verify_user_id=Auth::user()['id'];
+        $userDutyCheck->save();
+        $this->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
+        $errorMessage=$this->makeOrUpdateLaborReport($userDutyCheck);
+        if ($errorMessage)return $errorMessage;
+        return ['success'=>true,'data'=>$userDutyCheck];
+    }
+    //补卡创建或修改临时工报表
+    public function makeOrUpdateLaborReport($userDutyCheck){
+        $checkedAtDate=Carbon::parse($userDutyCheck->checked_at)->format('Y-m-d');
+        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
+        $laborReportService = app('LaborReportService');
+        if (!$laborReport&&$userDutyCheck->type=='登入'){
+            $newReport=$userDutyCheck->makeEnteringRecord();
+            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
+            if ($newReport) event(new ImportEvent($userDutyCheck));
+        }
+        else if(!$laborReport&&$userDutyCheck->type=='登出'){
+            //退场时间跨天情况
+            $yesterdayDate=Carbon::parse($userDutyCheck->checked_at.':00')->subDays(1)->format('Y-m-d');
+            $laborReportYesterday=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
+            if ($laborReportYesterday&&!$laborReportYesterday['check_out_at']){
+                UserDutyCheck::where('user_id',$laborReportYesterday['user_id'])->where('type','登出')->orderBy('id','desc')->delete();
+                return ['result'=>true,'data'=>'该临时工还未退组,暂不可补退场卡!'];
+            }
+            if ($laborReportYesterday){
+                $exportReport=$laborReportService->exportReplenishToCreateLaborReportData($laborReportYesterday,$userDutyCheck);
+                $this->log(__METHOD__,"补退场卡修改临时工报表记录__".__FUNCTION__,json_encode([$laborReportYesterday,$userDutyCheck]));
+                if ($exportReport) event(new ExportEvent($userDutyCheck));
+            }
+        }else if($laborReport){
+            if (!$laborReport->check_out_at){
+                UserDutyCheck::where('user_id',$laborReport->user_id)->where('type','登出')->orderBy('id','desc')->delete();
+                return ['result'=>true,'data'=>'该临时工还未退组,暂不可补退场卡!'];
+            }
+            $exportReport=$laborReportService->exportReplenishToCreateLaborReportData($laborReport,$userDutyCheck);
+            $this->log(__METHOD__,"补退场卡修改临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
+            if ($exportReport) event(new ExportEvent($userDutyCheck));
+        }
+    }
+
+
+
+
     //任务审核
     public function storeMissionAudit(Request $request){
         if(!Gate::allows('人事管理-任务审核')){ return redirect(url('/'));  }
@@ -180,62 +244,6 @@ class PersonnelController extends Controller
         return view('personnel/checking-in/clockAudit',['userDutyChecks'=>$userDutyChecks,'laravelEchoPrefix'=>$laravelEchoPrefix,'permittingWorkgroups'=>$permittingWorkgroups]);
     }
 
-    //录入补卡
-    public function storeReplenishClock(Request $request){
-        if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/'));  }
-        $errors=$this->validatorUserDutyCheck($request)->errors();
-        if (count($errors)>0)return ['success'=>false,'error'=>$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'=>'补入',
-        ]);
-        $checkedAtDate=Carbon::parse($checked_at)->format('Y-m-d');
-        $userDutyCheckImport=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->where('type','登入')->orderBy('id','desc')->first();
-        if ($userDutyCheckImport&&$userDutyCheck->type=='登入')return ['result'=>true,'data'=>'已存在进场记录!'];
-        $userDutyCheckExport=UserDutyCheck::where('user_id',$user_id)->where('checked_at','like',$checkedAtDate.'%')->where('type','登出')->orderBy('id','desc')->first();
-        if ($userDutyCheckExport&&$userDutyCheck->type=='登出')return ['result'=>true,'data'=>'已存在出场记录!'];
-        $userDutyCheck->save();
-        $this->log(__METHOD__,"录入补卡".__FUNCTION__,json_encode($userDutyCheck),Auth::user()['id']);
-        $laborReport=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$checkedAtDate.'%')->orderBy('id','desc')->first();
-//        if (!$laborReport){
-//            $newReport=LaborReport::importToCreateLaborReportData($userDutyCheck);
-//            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
-//            if ($newReport) event(new ImportEvent($userDutyCheck));
-//        }
-        if (!$laborReport&&$userDutyCheck->type=='登入'){
-            $newReport=LaborReport::makeEnteringRecord($userDutyCheck);
-            $this->log(__METHOD__,"进场创建临时工报表记录__".__FUNCTION__,json_encode([$userDutyCheck]));
-            if ($newReport) event(new ImportEvent($userDutyCheck));
-        }
-        else if(!$laborReport&&$userDutyCheck->type=='登出'){
-            //退场时间跨天情况
-            $yesterdayDate=Carbon::parse($userDutyCheck->checked_at.':00')->subDays(1)->format('Y-m-d');
-            $laborReportYesterday=LaborReport::where('user_id',$userDutyCheck->user_id)->where('created_at','like',$yesterdayDate.'%')->orderBy('id','desc')->first();
-            if (!$laborReportYesterday['check_out_at']){
-                UserDutyCheck::where('user_id',$laborReportYesterday['user_id'])->where('type','登出')->orderBy('id','desc')->delete();
-                return ['result'=>true,'data'=>'您还未退组,暂不可退场,请联系组长!'];
-            }
-            if ($laborReportYesterday){
-                $exportReport=LaborReport::exportReplenishToCreateLaborReportData($laborReportYesterday,$userDutyCheck);
-                $this->log(__METHOD__,"退场建临时工报表记录__".__FUNCTION__,json_encode([$laborReportYesterday,$userDutyCheck]));
-                if ($exportReport) event(new ExportEvent($userDutyCheck));
-            }
-        }else if($laborReport){
-            if (!$laborReport->check_out_at){
-                UserDutyCheck::where('user_id',$laborReport->user_id)->where('type','登出')->orderBy('id','desc')->delete();
-                return ['result'=>true,'data'=>'您还未退组,暂不可退场,请联系组长!'];
-            }
-            $exportReport=LaborReport::exportReplenishToCreateLaborReportData($laborReport,$userDutyCheck);
-            $this->log(__METHOD__,"退场建临时工报表记录__".__FUNCTION__,json_encode([$laborReport,$userDutyCheck]));
-            if ($exportReport) event(new ExportEvent($userDutyCheck));
-        }
-        return ['success'=>true,'data'=>$userDutyCheck];
-    }
     //搜索临时工下打卡信息
     public function checkUserLabors(Request $request){
         if(!Gate::allows('人事管理-录入补卡')){ return redirect(url('/'));  }

+ 0 - 1
app/Http/Controllers/UserDutyCheckController.php

@@ -26,7 +26,6 @@ class UserDutyCheckController extends Controller
 {
     function __construct()
     {
-//        app()->bind('UserDutyCheckService', UserDutyCheckService::class);
         app()->bind('LaborReportService', LaborReportService::class);
     }
 

+ 35 - 5
app/Http/Controllers/UserWorkgroupController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Authority;
+use App\Sign;
 use App\UserWorkgroup;
 use App\Warehouse;
 use Illuminate\Http\Request;
@@ -15,7 +16,7 @@ class UserWorkgroupController extends Controller
     public function index()
     {
         if(!Gate::allows('工作组-查询')){ return redirect(url('/'));  }
-        $UserWorkgroups=UserWorkgroup::with('wareHouse')->orderBy('id',"DESC")->paginate(50);
+        $UserWorkgroups=UserWorkgroup::with(['wareHouse','signs'])->orderBy('id',"DESC")->paginate(50);
         return view('maintenance.userWorkgroup.index',['userWorkgroups'=>$UserWorkgroups]);
     }
 
@@ -36,6 +37,14 @@ class UserWorkgroupController extends Controller
         $warehouseId=$request->input('warehouse_id');
         $UserWorkgroup['warehouse_id']=$warehouseId;
         $UserWorkgroup->save();
+        $remark=$request->input('remark');
+        $sign=new Sign([
+            'signable_type'=>'user_workgroups',
+            'signable_id'=>$UserWorkgroup['id'],
+            'field'=>'is_need_remark',
+            'mark'=>$remark,
+        ]);
+        $sign->save();
         $this->storeAuthority($UserWorkgroup['name'],$UserWorkgroup->id);
         $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
         return redirect('maintenance/userWorkgroup')->with('successTip','新工作组“'.$request->input('name').'”添加成功');
@@ -53,7 +62,7 @@ class UserWorkgroupController extends Controller
     public function edit($id)
     {
         if(!Gate::allows('工作组-编辑')){ return redirect(url('/'));  }
-        $userWorkgroup=UserWorkgroup::find($id);
+        $userWorkgroup=UserWorkgroup::with('signs')->find($id);
         if (!$userWorkgroup)return view('exception.404',['error'=>'工作组不存在!']);
         $warehouses=Warehouse::select('id','name')->get();
         return view('maintenance.userWorkgroup.edit',['userWorkgroup'=>$userWorkgroup,'warehouses'=>$warehouses]);
@@ -64,7 +73,24 @@ class UserWorkgroupController extends Controller
         if(!Gate::allows('工作组-编辑')){ return redirect(url('/'));  }
         $this->validatorUserWorkgroup($request,$id)->validate();
         $data=$request->input();
-        $userWorkgroup=UserWorkgroup::find($id);
+        $userWorkgroup=UserWorkgroup::with('signs')->find($id);
+        $sign=$userWorkgroup->signs;
+        $mark=$request->input('remark');
+        if ($sign){
+            $sign->mark=$mark;
+            $sign->update();
+            $this->log(__METHOD__,'工作组是否需要录入备注'.__FUNCTION__,json_encode($sign),Auth::user()['id']);
+        }
+        if(!$sign){
+            $newSign=new Sign([
+                'signable_type'=>'user_workgroups',
+                'signable_id'=>$id,
+                'field'=>'is_need_remark',
+                'mark'=>$mark,
+            ]);
+            $newSign->save();
+            $this->log(__METHOD__,'工作组是否需要录入备注'.__FUNCTION__,json_encode($sign),Auth::user()['id']);
+        }
         $userWorkgroup['warehouse_id']= $data['warehouse_id'];
         if ($data['name']!=$userWorkgroup->name){
             $authority=Authority::where("name",$userWorkgroup->name)->first();
@@ -89,17 +115,20 @@ class UserWorkgroupController extends Controller
     public function destroy($id)
     {
         if(!Gate::allows('工作组-删除')){ return redirect(url('/'));  }
-        $UserWorkgroup=UserWorkgroup::find($id);
+        $UserWorkgroup=UserWorkgroup::with('signs')->find($id);
         $this->log(__METHOD__,__FUNCTION__,json_encode($UserWorkgroup),Auth::user()['id']);
+        $sign=$UserWorkgroup->signs;
+        $sign->delete();
         $result=$UserWorkgroup->delete();
         return ['success'=>$result];
     }
 
-    protected function validatorUserWorkgroup(Request $request,$id){
+    public function validatorUserWorkgroup(Request $request,$id){
         if ($id){$name=$id;}
         $validator=Validator::make($request->input(),[
             'name'=>['required','max:10',isset($name)?"unique:user_workgroups,name,$name":'unique:user_workgroups,name'],
             'warehouse_id'=>['required'],
+            'remark'=>['required'],
         ],[
             'required'=>':attribute 为必填项',
             'max'=>':attribute 过长',
@@ -107,6 +136,7 @@ class UserWorkgroupController extends Controller
         ],[
             'name'=>'工作组名称',
             'warehouse_id'=>'仓库名称',
+            'remark'=>'是否录入备注',
         ]);
         return $validator;
     }

+ 16 - 43
app/LaborReport.php

@@ -3,14 +3,10 @@
 namespace App;
 
 use Carbon\Carbon;
-use DemeterChain\C;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Arr;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Date;
-use Ramsey\Uuid\Uuid;
 
 class LaborReport extends Model
 {
@@ -22,9 +18,7 @@ class LaborReport extends Model
         'user_duty_check_id','status'
     ];
     protected $appends = [
-        'is_exportGroup','is_export','is_exportReplenish',
-//        'existingStatus','leaderVerifyStatus',
-        'exit_at','enter_at','sequence', 'amountOfJoined',
+        'is_exportGroup','is_export', 'exit_at','enter_at','sequence', 'amountOfJoined','remark',
     ];
     protected $tempFields = [
         'temEnteringRecord',
@@ -44,36 +38,18 @@ class LaborReport extends Model
     public function laborReportStatus(){
         return $this->belongsTo('App\LaborReportStatus','id','labor_report_id');
     }
+    public function getRemarkAttribute(){
+        return $this->hasOne('App\Sign','signable_id','id')
+            ->where('field','remark')->where('signable_type','labor_reports')->value('mark');
+    }
+    public function setRemarkAttribute($remark,$id){
+        Sign::updateOrCreate(['signable_type'=>'labor_reports','signable_id'=>$id,'field'=>'remark'],['mark'=>$remark]);
 
+    }
 
     public function getIsExportGroupAttribute(){
         return $this['check_out_at']? true:false;
     }
-//    public function save(array $options=[]){
-//        foreach ($this->tempFields as $field){
-//            unset($this->$field);
-//        }
-//        parent::save($options);
-//    }
-//    public function update(array $attributes=[],array $options=[]){
-//        foreach ($this->tempFields as $field){
-//            unset($this->$field);
-//        }
-//        parent::update($attributes,$options);
-//    }
-//    public function toJson($options = 0){
-//        foreach ($this->tempFields as $field){
-//            unset($this->$field);
-//        }
-//        parent::toJson($options);
-//    }
-//    public function toArray($options = 0){
-//        foreach ($this->tempFields as $field){
-//            unset($this->$field);
-//        }
-//        parent::toArray($options);
-//    }
-
     //转场序号
     public function getSequenceAttribute()
     {
@@ -86,7 +62,6 @@ class LaborReport extends Model
             }
         }
     }
-//amountOfJoined
     public function getAmountOfJoinedAttribute()
     {
         if(Arr::has($this->tempFields,'amountOfJoined'))return $this->tempFields['amountOfJoined'];
@@ -158,13 +133,6 @@ class LaborReport extends Model
         $laborReportStatus=LaborReportStatus::where('labor_report_id',$this['id'])->orderBy('id','desc')->first();
         return $laborReportStatus['status']=='已退场'?true:false;
     }
-    public function getIsExportReplenishAttribute()
-    {
-        $userDutyCheck = UserDutyCheck::where('user_id', $this['user_id'])->orderBy('id', 'desc')->first();
-        if ($userDutyCheck['type'] == '登出') {
-            return $userDutyCheck['source']=='补入' ? true : false;
-        }
-    }
 
 //出场更新临时工报表信息
     static function exitAndChangeLaborReport($laborReport,$userDutyCheck){
@@ -174,10 +142,15 @@ class LaborReport extends Model
         ]);
         $laborReportStatus->save();
         $check_in_at=$laborReport->check_in_at;
-        $check_out_at=$userDutyCheck->checked_at;
-        $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
-        $laborReport->online_duration=$online_duration;
+        $exit_at=$userDutyCheck->checked_at;
+        $online_duration=round(Carbon::parse($exit_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
         $laborReport->user_duty_check_id=$userDutyCheck->id;
+        if ($laborReport->enter_at){
+            $enter_at=$laborReport['enter_at'];
+            $laborReport->online_duration=round(Carbon::parse($exit_at)->diffInSeconds(Carbon::parse($enter_at))/3600,2);
+        }else{
+            $laborReport->online_duration=$online_duration;
+        }
         $laborReport->update();
         $laborReport->is_export=$laborReport->getIsExportAttribute();
         return $laborReport;

+ 15 - 4
app/Services/LaborReportService.php

@@ -77,12 +77,23 @@ class LaborReportService
 
     //补卡出场更新临时工报表信息
     public function exportReplenishToCreateLaborReportData($laborReport,$userDutyCheck){
+        $laborReportStatus=new LaborReportStatus([
+            'labor_report_id'=>$laborReport['id'],
+            'status'=>'已退场',
+            'created_at'=>$userDutyCheck['checked_at'],
+        ]);
+        $laborReportStatus->save();
         $check_in_at=$laborReport->check_in_at;
-        $check_out_at=$userDutyCheck->checked_at;
-        $online_duration=round(Carbon::parse($check_out_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
-        $laborReport->online_duration=$online_duration;
+        $exit_at=$userDutyCheck->checked_at;
+        $online_duration=round(Carbon::parse($exit_at)->diffInSeconds(Carbon::parse($check_in_at))/3600,2);
+        if ($laborReport->enter_at){
+            $enter_at=$laborReport['enter_at'];
+            $laborReport->online_duration=round(Carbon::parse($exit_at)->diffInSeconds(Carbon::parse($enter_at))/3600,2);
+        }else{
+            $laborReport->online_duration=$online_duration;
+        }
         $laborReport->update();
-        $laborReport->is_exportReplenish=$laborReport->getIsExportReplenishAttribute();
+        $laborReport->is_export=$laborReport->getIsExportAttribute();
         return $laborReport;
     }
     //当天第一次进工作组更新临时工报表

+ 2 - 2
app/User.php

@@ -119,9 +119,9 @@ class User extends Authenticatable
         });
         return array_unique($ownerIds);
     }
-    function getPermittingWorkgroupIds(){
+    function getPermittingWorkgroupIds($allowAll=false){
         $workgroupIds=[];
-        if ($this->isSuperAdmin()){
+        if ($this->isSuperAdmin()||$allowAll){
             $workgroups=UserWorkgroup::all();
             $workgroups->each(function (UserWorkgroup $workgroup)use(&$workgroupIds){
                 array_push($workgroupIds,$workgroup['id']);

+ 1 - 0
app/UserDutyCheck.php

@@ -58,6 +58,7 @@ class UserDutyCheck extends Model
         $laborReportStatus=new LaborReportStatus([
             'labor_report_id'=>$laborReport['id'],
             'status'=>'未审核',
+            'created_at'=>$this['checked_at'],
         ]);
         $laborReportStatus->save();
         $laborReport['enter_number']=$laborReport->makeOrGetEnteringNumber();

+ 9 - 1
app/UserWorkgroup.php

@@ -9,7 +9,9 @@ class UserWorkgroup extends Model
 {
     protected $table="user_workgroups";
     protected $fillable=['name','warehouse_id'];
-    protected $appends=['token'];
+    protected $appends=[
+        'token','isNeedRemark',
+    ];
 
     public function users(){
         return $this->belongsToMany('App\User','user_workgroup_user','user_workgroup_id','user_id');
@@ -17,8 +19,14 @@ class UserWorkgroup extends Model
     public  function wareHouse(){
         return $this->belongsTo('App\Warehouse','warehouse_id','id');
     }
+    public  function signs(){
+        return $this->hasOne('App\Sign','signable_id','id');
+    }
     public  function getTokenAttribute(){
         return md5($this['name'].Carbon::now()->format('Y-m-d'));
     }
+    public  function getIsNeedRemarkAttribute(){
+        return $this['signs']['mark']=='是'? true:false;
+    }
 
 }

+ 38 - 0
database/migrations/2020_07_23_113747_add_authorities_personnel.php

@@ -0,0 +1,38 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthoritiesPersonnel extends Migration
+{
+    protected $authNames=[
+        '人事管理-临时工报表',
+        '人事管理-打卡相关',
+    ];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->authNames as $name){
+            if(!Authority::where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->authNames as $name){
+            Authority::where('name',$name)->delete();
+        }
+    }
+}

+ 18 - 3
resources/views/maintenance/userWorkgroup/create.blade.php

@@ -14,8 +14,8 @@
                     <div class="form-group row">
                         <label for="warehouse_id" class="col-2 col-form-label text-right">仓库名称</label>
                         <div class="col-8">
-                            <select id="warehouse_id" type="text" class="form-control @error('warehouse_id') is-invalid @enderror" name="warehouse_id" autocomplete="off"  required>
-                                <option> </option>
+                            <select id="warehouse_id" type="text" class="form-control @error('warehouse_id') is-invalid @enderror" name="warehouse_id" autocomplete="off"  >
+                                <option></option>
                                 <option v-for="warehouse in warehouses" :value="warehouse.id">@{{ warehouse.name }}</option>
                             </select>
                             @error('warehouse_id')
@@ -29,7 +29,7 @@
                         <label for="name" class="col-2 col-form-label text-right">工作组名称</label>
                         <div class="col-8">
                             <input type="text" class="form-control @error('name') is-invalid @enderror"
-                                   name="name" autocomplete="off" value="{{ old('name') }}" required>
+                                   name="name" autocomplete="off" value="{{ old('name') }}" >
                             @error('name')
                             <span class="invalid-feedback" role="alert">
                                         <strong>{{ $message }}</strong>
@@ -37,6 +37,21 @@
                             @enderror
                         </div>
                     </div>
+                    <div class="form-group row">
+                        <label for="remark" class="col-2 col-form-label text-right">需要录入备注</label>
+                        <div class="col-8">
+                            <select id="remark" type="text" class="form-control @error('remark') is-invalid @enderror" name="remark" autocomplete="off"  >
+                                <option></option>
+                                <option value="是">是</option>
+                                <option value="否">否</option>
+                            </select>
+                            @error('remark')
+                            <span class="invalid-feedback" role="alert">
+                                        <strong>{{ $message }}</strong>
+                                    </span>
+                            @enderror
+                        </div>
+                    </div>
                     <div class="form-group row">
                         <div class="col-8 offset-2">
                             <input type="submit" class="btn btn-success form-control">

+ 22 - 3
resources/views/maintenance/userWorkgroup/edit.blade.php

@@ -19,7 +19,7 @@
                     <div class="form-group row">
                         <label for="warehouse_id" class="col-2 col-form-label text-right">仓库名称</label>
                         <div class="col-8">
-                            <select id="warehouse_id" type="text" v-model="userWorkgroup.warehouse_id" class="form-control" name="warehouse_id" autocomplete="off"  required>
+                            <select id="warehouse_id" type="text" v-model="userWorkgroup.warehouse_id" class="form-control" name="warehouse_id" autocomplete="off"  >
                                 <option  v-for="warehouse in warehouses" :value="warehouse.id">@{{ warehouse.name }}</option>
                             </select>
                         </div>
@@ -28,7 +28,7 @@
                         <label for="name" class="col-2 col-form-label text-right">工作组名称</label>
                         <div class="col-8">
                             <input type="text" class="form-control @error('name') is-invalid @enderror"
-                                   name="name" autocomplete="off" :value="userWorkgroup.name" required>
+                                   name="name" autocomplete="off" :value="userWorkgroup.name" >
                             @error('name')
                             <span class="invalid-feedback" role="alert">
                                 <strong>{{ $message }}</strong>
@@ -36,6 +36,21 @@
                             @enderror
                         </div>
                     </div>
+                    <div class="form-group row">
+                        <label for="remark" class="col-2 col-form-label text-right">需要录入备注</label>
+                        <div class="col-8">
+                            <select id="remark" type="text" class="form-control @error('remark') is-invalid @enderror" name="remark" autocomplete="off"  >
+                                <option :value="userWorkgroup.remark">@{{ userWorkgroup.remark }}</option>
+                                <option value="是">是</option>
+                                <option value="否">否</option>
+                            </select>
+                            @error('remark')
+                            <span class="invalid-feedback" role="alert">
+                                        <strong>{{ $message }}</strong>
+                                    </span>
+                            @enderror
+                        </div>
+                    </div>
                     <div class="form-group row">
                         <div class="col-8 offset-2">
                             <input type="submit" class="btn btn-outline-dark form-control">
@@ -51,7 +66,11 @@
         new Vue({
             el:'#list',
             data:{
-                userWorkgroup:{name:'{{old('name')?old('name'):$userWorkgroup->name}}',warehouse_id:'{{old('warehouse_id')?old('warehouse_id'):$userWorkgroup->warehouse_id}}'},
+                userWorkgroup:{
+                    name:'{{old('name')?old('name'):$userWorkgroup->name}}',
+                    warehouse_id:'{{old('warehouse_id')?old('warehouse_id'):$userWorkgroup->warehouse_id}}',
+                    @if($userWorkgroup->signs)remark:'{{old('remark')?old('remark'):$userWorkgroup->signs['mark']}}',@endif
+                },
                 warehouses:[
                     @foreach($warehouses as $warehouse)
                     {id:'{{$warehouse->id}}',name:'{{$warehouse->name}}'},

+ 7 - 1
resources/views/maintenance/userWorkgroup/index.blade.php

@@ -18,6 +18,7 @@
                         <th>仓库</th>
                         <th>名称</th>
                         <th>录入时间</th>
+                        <th>需要录入备注</th>
                         <th>操作</th>
                     </tr>
                     <tr v-for="userWorkgroup in userWorkgroups">
@@ -25,6 +26,7 @@
                         <td ><span v-if="userWorkgroup.warehouse">@{{userWorkgroup.warehouseName}}</span></td>
                         <td>@{{userWorkgroup.name}}</td>
                         <td class="text-muted">@{{userWorkgroup.created_at}}</td>
+                        <td >@{{userWorkgroup.remark}}</td>
                         <td>
                             @can('工作组-编辑')
                                 <button class="btn btn-sm btn-outline-primary" @click="edit(userWorkgroup.id)">改</button> @endcan
@@ -46,7 +48,11 @@
             data:{
                 userWorkgroups:[
                     @foreach($userWorkgroups as $userWorkgroup)
-                    {id:'{{$userWorkgroup->id}}',name:'{{$userWorkgroup->name}}',warehouse:'{{$userWorkgroup->warehouse}}',created_at:'{{$userWorkgroup->created_at}}',warehouseName:'{{$userWorkgroup->warehouse['name']}}'},
+                    {id:'{{$userWorkgroup->id}}',name:'{{$userWorkgroup->name}}',warehouse:'{{$userWorkgroup->warehouse}}',
+                        created_at:'{{$userWorkgroup->created_at}}',
+                        @if($userWorkgroup->warehouse)warehouseName:'{{$userWorkgroup->warehouse['name']}}',@endif
+                            @if($userWorkgroup->signs)remark:'{{$userWorkgroup->signs['mark']}}',@endif
+                        },
                     @endforeach
                 ],
             },

+ 2 - 1
resources/views/personnel/checking-in/importAndExportQRCode.blade.php

@@ -59,7 +59,8 @@
                         .then(function (response) {
                             _this.importAndExportQRCodes=response.data.importAndExportQRCodes;
                             _this.last_refresh_date=response.data.last_refresh_date;
-                            $("meta[name='csrf-token']").attr('content', response.data.csrf_Token);
+                            document.querySelector("meta[name='csrf-token']").setAttribute('content',response.data.csrf_Token);
+                             //$("meta[name='csrf-token']").attr('content', response.data.csrf_Token);
                             setTimeout(refreshQRCode,computeDiffMicroTime_fromNow(_this.last_refresh_date));
                         }).catch(function (err) {
                         setTimeout(refreshQRCode,computeDiffMicroTime_fromNow(_this.last_refresh_date));

+ 106 - 35
resources/views/personnel/laborReport/index.blade.php

@@ -70,7 +70,7 @@
                 </form>
             </div>
             <div class="">
-                <table class="table table-sm table-hover table-striped table-bordered d-none d-sm-block p-0 text-nowrap" >
+                <table class="table table-sm table-hover table-striped table-bordered d-none d-sm-block p-0 text-nowrap">
                     <tr>
                         <th>
                             <label for="all">
@@ -95,6 +95,7 @@
                         <th>晚饭打卡(分)</th>
                         <th>在线时长</th>
                         <th>本次工作时长</th>
+                        <th>备注</th>
                     </tr>
                     <tr v-for="(laborReport,i) in laborReports">
                         <td>
@@ -117,14 +118,14 @@
                             @can('人事管理-组长审核')
                                 <span>
                                 <button v-if="laborReport.groupUserId&&!laborReport.is_exportGroup" @click="groupExport(laborReport.id,laborReport.name)" class="btn btn-sm btn-outline-danger">退组</button>
-                                <span v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export&&!laborReport.is_exportReplenish" class="text-info">已退组</span>
-                                    <span v-else-if="laborReport.is_exportReplenish || laborReport.is_export" class="text-black">已退场</span>
-                                <button v-else-if="laborReport.userWorkGroupId" @click="groupClockAudit(laborReport.id)" class="btn btn-sm btn-outline-primary">组长审核</button>
+                                <span v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</span>
+                                    <span v-else-if="laborReport.is_export" class="text-black">已退场</span>
+                                <button v-else-if="laborReport.userWorkGroupId" @click="groupClockAudit(laborReport.id,laborReport.userWorkgroupNeedRemark)" class="btn btn-sm btn-outline-primary">组长审核</button>
                                 </span>
                             @else
                                 <span  v-if="laborReport.groupUserId&&!laborReport.is_exportGroup"><b class="text-success">在组</b></span>
-                                <span v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export&&!laborReport.is_exportReplenish" class="text-info">已退组</span>
-                                <span v-else-if="laborReport.is_exportReplenish || laborReport.is_export" class="text-black">已退场</span>
+                                <span v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</span>
+                                <span v-else-if="laborReport.is_export" class="text-black">已退场</span>
                                 <span v-else-if="laborReport.userWorkGroupId" class="text-center"><b class="text-danger">组长未审核</b></span>
                             @endcan
                         </td>
@@ -143,6 +144,7 @@
                         <td class="text-muted"><span v-if="laborReport.relax_time">@{{laborReport.relax_time}}</span></td>
                         <td class="text-muted"><span v-if="laborReport.onlineDuration">@{{laborReport.onlineDuration}}</span></td>
                         <td><span v-if="laborReport.workingDuration">@{{laborReport.workingDuration}}</span></td>
+                        <td><span v-if="laborReport.remark">@{{laborReport.remark}}</span></td>
                     </tr>
                 </table>
                 <table class="table table-striped table-sm table-bordered table-hover p-0 d-block d-sm-none" style="background: rgb(255, 255, 255);">
@@ -169,33 +171,33 @@
                                 @can('人事管理-组长审核')
                                                     <span>
                                 <button v-if="laborReport.groupUserId&&!laborReport.is_exportGroup" @click="groupExport(laborReport.id,laborReport.name)" style="transform:scale(1.1)" class="btn btn-lg btn-danger">退组</button>
-                                <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export&&!laborReport.is_exportReplenish" class="text-info">已退组</b>
-                                    <b v-else-if="laborReport.is_exportReplenish || laborReport.is_export" class="text-black">已退场</b>
-                                <button v-else-if="laborReport.userWorkGroupId" @click="groupClockAudit(laborReport.id)" class="btn btn-lg btn-outline-primary" style="transform:scale(1.1)" >组长审核</button>
+                                <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</b>
+                                    <b v-else-if="laborReport.is_export" class="text-black">已退场</b>
+                                <button v-else-if="laborReport.userWorkGroupId" @click="groupClockAudit(laborReport.id,laborReport.userWorkgroupNeedRemark)" class="btn btn-lg btn-outline-primary" style="transform:scale(1.1)" >组长审核</button>
                                 </span>
                                                 @else
                                                     <span  v-if="laborReport.groupUserId&&!laborReport.is_exportGroup"><b class="text-success">在组</b></span>
-                                                    <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export&&!laborReport.is_exportReplenish" class="text-info">已退组</b>
-                                                    <b v-else-if="laborReport.is_exportReplenish || laborReport.is_export" class="text-black">已退场</b>
+                                                    <b v-else-if="laborReport.groupUserId&&laborReport.is_exportGroup&&!laborReport.is_export" class="text-info">已退组</b>
+                                                    <b v-else-if="laborReport.is_export" class="text-black">已退场</b>
                                                     <span v-else-if="laborReport.userWorkGroupId" class="text-center"><b class="text-danger">组长未审核</b></span>
                                                 @endcan
                                             </span>
                                         </span>
                                     <span class="mr-3   text-nowrap"><span class="text-black">进场时间:</span><span class="text-black-50">@{{laborReport.enter_at  }}</span></span>
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">退场时间:</span><span style="color:#af7651">@{{ laborReport.exit_at }}</span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">进场编号:</span><span style="color:#af7651">@{{ laborReport.enterNumber }}</span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">退场时间:</span><span style="color:#af7651">@{{ laborReport.exit_at }}</span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">进场编号:</span><span style="color:#af7651">@{{ laborReport.enterNumber }}</span></span>--}}
                                     <span class="mr-3  text-nowrap"><span class="text-black">小组:</span><span class="text-black-50">@{{laborReport.userWorkGroupName  }}</span></span>
                                     <span class="mr-3   text-nowrap"><span class="text-black">临时工:</span><span class="text-black-50">@{{ laborReport.name }} </span></span>
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">电话:</span><span style="color:#af7651" v-if="">@{{ laborReport.mobilePhone }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">身份证号:</span><span style="color:#af7651" v-if="">@{{ laborReport.identityNumber }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">劳务所:</span><span style="color:#af7651" v-if="">@{{ laborReport.laborCompany }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">进组时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.checkInAt }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#783000">退组时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.checkOutAt }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#02346a">审核时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.verifyAt }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#02346a">审核人:</span><span style="color:#af7651" v-if="">@{{ laborReport.verifyPerson }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#02346a">晚饭打卡(分):</span><span style="color:#af7651" v-if="">@{{ laborReport.relax_time }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#02346a">在线时长:</span><span style="color:#af7651" v-if="">@{{ laborReport.onlineDuration }} </span></span>--}}
-{{--                                    <span class="mr-3 text-nowrap"><span style="color:#02346a">本次工作时长:</span><span style="color:#af7651" v-if="">@{{ laborReport.workingDuration }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">电话:</span><span style="color:#af7651" v-if="">@{{ laborReport.mobilePhone }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">身份证号:</span><span style="color:#af7651" v-if="">@{{ laborReport.identityNumber }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">劳务所:</span><span style="color:#af7651" v-if="">@{{ laborReport.laborCompany }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">进组时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.checkInAt }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">退组时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.checkOutAt }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">审核时间:</span><span style="color:#af7651" v-if="">@{{ laborReport.verifyAt }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">审核人:</span><span style="color:#af7651" v-if="">@{{ laborReport.verifyPerson }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">晚饭打卡(分):</span><span style="color:#af7651" v-if="">@{{ laborReport.relax_time }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">在线时长:</span><span style="color:#af7651" v-if="">@{{ laborReport.onlineDuration }} </span></span>--}}
+                                    {{--                                    <span class="mr-3 text-nowrap"><span class="text-black">本次工作时长:</span><span style="color:#af7651" v-if="">@{{ laborReport.workingDuration }} </span></span>--}}
                                 </div>
                             </div>
                         </td>
@@ -234,6 +236,33 @@
                 </div>
             </div>
         </div>
+        {{--      特定组需要添加备注      --}}
+        <div class="modal fade" id="remarkModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+            <div class="modal-dialog">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h5 class="modal-title" id="exampleModalLabel">添加所需备注</h5>
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span aria-hidden="true">&times;</span>
+                        </button>
+                    </div>
+                    <div class="modal-body">
+                        <form>
+                            <div class="form-group">
+                                <label for="remark" class="col-form-label">备注:</label>
+                                <textarea class="form-control" id="remark"></textarea>
+                            </div>
+                        </form>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                            <span class="btn btn-block" aria-hidden="true">取消</span>
+                        </button>
+                        <button type="button" class="btn btn-primary" data-dismiss="modal" @click="addRemarkAndGroupClock">确定</button>
+                    </div>
+                </div>
+            </div>
+        </div>
         <!-- 是否晚餐弹框 -->
         <div class="modal fade" id="dinnerModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" >
             <div class="modal-dialog">
@@ -264,17 +293,18 @@
                 laborReports:[
                         @foreach($laborReports as $laborReport)
                     {id:'{{$laborReport->id}}',enterNumber:'{{$laborReport->enter_number}}'
-                        ,@if($laborReport->userWorkgroup)userWorkGroupId:'{{$laborReport->userWorkgroup->id}}', userWorkGroupName:'{{$laborReport->userWorkgroup->name}}',@endif
+                        ,@if($laborReport->userWorkgroup)userWorkGroupId:'{{$laborReport->userWorkgroup->id}}',
+                        userWorkgroupNeedRemark:'{{$laborReport->userWorkgroup->isNeedRemark}}',
+                        userWorkGroupName:'{{$laborReport->userWorkgroup->name}}',@endif
                         userId:'{{$laborReport->user_id}}',name:'{{$laborReport->name}}'
                         ,mobilePhone:'{{$laborReport->mobile_phone}}',identityNumber:'{{$laborReport->identity_number}}',laborCompany:'{{$laborReport->labor_company}}'
                         ,checkInAt:'{{$laborReport->check_in_at}}', relax_time:'{{$laborReport->relax_time}}',
                         is_exportGroup:'{{$laborReport->is_exportGroup}}',is_export:'{{$laborReport->is_export}}',
-                        is_exportReplenish:'{{$laborReport->is_exportReplenish}}',
                         verifyAt:'{{$laborReport->verify_at}}',groupUserId:'{{$laborReport->group_user_id}}',verifyPerson:'{{$laborReport->user['name']}}',
                         checkOutAt:'{{$laborReport->check_out_at}}',onlineDuration:'{{$laborReport->online_duration}}',
                         workingDuration:'{{$laborReport->working_duration}}', created_at:'{{$laborReport->created_at}}',
                         enter_at:'{{$laborReport->enter_at}}',exit_at:'{{$laborReport->exit_at}}',
-                        sequence:'{{$laborReport->sequence}}',amountOfJoined:'{{$laborReport->amountOfJoined}}',
+                        sequence:'{{$laborReport->sequence}}',amountOfJoined:'{{$laborReport->amountOfJoined}}',remark:'{{$laborReport->remark}}',
                         @if($laborReport->userDutyCheck)userDutyCheckId:'{{$laborReport->userDutyCheck->id}}', userDutyCheckVerifyUserId:'{{$laborReport->userDutyCheck->verify_user_id}}'
                         ,userDutyCheckType:'{{$laborReport->userDutyCheck->type}}',userDutyCheckAt:'{{$laborReport->userDutyCheck->checked_at}}',@endif},
 
@@ -435,10 +465,51 @@
                         tempTip.show('审核失败!网络错误:'+err);
                     });
                 },
+                ////组长打卡审核(特定组添加备注)
+                addRemarkAndGroupClock(){
+                    let _this=this;
+                    let id = getSelectId();
+                    let remark=document.getElementById('remark').value;
+                    let url='{{url("laborReport/addRemarkAndGroupClock")}}';
+                    if (remark==null|| remark=='' || remark=="undefined"){
+                        tempTip.setDuration(3000);
+                        tempTip.show("您还未添加任何备注");
+                        return;
+                    }
+                    axios.post(url,{id:id,remark:remark})
+                        .then(function (response) {
+                            if (!response.data.success){
+                                tempTip.setDuration(3000);
+                                tempTip.show(response.data.data);
+                                return;
+                            }
+                            _this.laborReports.every(function (laborReport) {
+                                if (laborReport.id==id){
+                                    laborReport.groupUserId=response.data.data.group_user_id;
+                                    laborReport.verifyAt=response.data.data.verify_at;
+                                    laborReport.verifyPerson=response.data.data.verifyPerson;
+                                    laborReport.remark=response.data.data.remark;
+                                    tempTip.setDuration(3000);
+                                    tempTip.showSuccess('审核通过!');
+                                    return false
+                                }
+                                return true;
+                            });
+                        }).catch(function (err) {
+                        tempTip.setDuration(4000);
+                        tempTip.show('审核失败!网络错误:'+err);
+                    });
+
+                },
                 //组长打卡审核
-                groupClockAudit(id){
+                groupClockAudit(id,userWorkgroupNeedRemark){
                     let url='{{url("laborReport/groupClockAudit")}}';
                     let _this=this;
+                    if (userWorkgroupNeedRemark){
+                        $('#remarkModal').modal('show');
+                        selectId(id);
+                        return;
+                    }
                     axios.post(url,{id:id})
                         .then(function (response) {
                             if (!response.data.success){
@@ -484,14 +555,14 @@
                                     laborReport.is_exportGroup=response.data.data.is_exportGroup;
                                     laborReport.onlineDuration=response.data.data.online_duration;
                                     tempTip.setDuration(3000);
-                                    tempTip.showSuccess('退成功!');
+                                    tempTip.showSuccess('退成功!');
                                     return false
                                 }
                                 return true;
                             });
                         }).catch(function (err) {
                         tempTip.setDuration(4000);
-                        tempTip.show('退失败!网络错误:'+err);
+                        tempTip.show('退失败!网络错误:'+err);
                     });
                 },
                 //退场有晚饭时间
@@ -514,14 +585,14 @@
                                     laborReport.is_exportGroup=response.data.data.is_exportGroup;
                                     laborReport.onlineDuration=response.data.data.online_duration;
                                     tempTip.setDuration(3000);
-                                    tempTip.showSuccess('退成功!');
+                                    tempTip.showSuccess('退成功!');
                                     return false
                                 }
                                 return true;
                             });
                         }).catch(function (err) {
                         tempTip.setDuration(4000);
-                        tempTip.show('退失败!网络错误:'+err);
+                        tempTip.show('退失败!网络错误:'+err);
                     });
                 },
                 //组长点击退组,
@@ -536,8 +607,8 @@
                     });
                     const dateTime=new Date(_this.dateTime.setDate(_this.dateTime.getDate()+1));
                     const start = new Date(new Date(new Date().toLocaleDateString()).getTime()+19*60*60*1000);
-                    if(!confirm("确定要临时工“"+name+"“退吗?")){return}
-                    if (new Date()>start || new Date()>dateTime){
+                    if(!confirm("确定要临时工“"+name+"“退吗?")){return}
+                    if (new Date()>=start || new Date()>dateTime){
                         $('#dinnerModal').modal('show');
                         selectId(id);
                         return;
@@ -557,14 +628,14 @@
                                     laborReport.is_exportGroup=response.data.data.is_exportGroup;
                                     laborReport.onlineDuration=response.data.data.online_duration;
                                     tempTip.setDuration(3000);
-                                    tempTip.showSuccess('退成功!');
+                                    tempTip.showSuccess('退成功!');
                                     return false
                                 }
                                 return true;
                             });
                         }).catch(function (err) {
                         tempTip.setDuration(5000);
-                        tempTip.show('退失败!网络错误:'+err);
+                        tempTip.show('退失败!网络错误:'+err);
                     });
                 },
                 owner_seek:function (e) {

+ 2 - 2
resources/views/personnel/menu.blade.php

@@ -2,11 +2,11 @@
 <div class="container-fluid nav2" id="nav2">
     <div class="card">
         <ul class="nav nav-pills">
-            @can('人事管理')
+            @can('人事管理-临时工报表')
                 <li class="nav-item">
                     <a class="nav-link" href="{{url('personnel/laborReport')}}" :class="{active:isActive('laborReport',2)}">临时工报表</a>
                 </li> @endcan
-            @can('人事管理')
+            @can('人事管理-打卡相关')
                 <li class="nav-item">
                     <a class="nav-link" href="{{url('personnel/checking-in/createReplenishClock')}}" :class="{active:isActive('checking-in',2)}">打卡相关</a>
                 </li> @endcan

+ 0 - 1
resources/views/waybill/edit.blade.php

@@ -540,7 +540,6 @@
                             function (response) {
 
                                 if (response.data.error){
-                                    //console.log(response.data.error);
                                     _this.errors=response.data.error;return;}
 
                                 if (!response.data.success) {

+ 2 - 0
routes/web.php

@@ -244,6 +244,8 @@ Route::group(['prefix'=>'laborReport'],function(){
     Route::post('guardClockAudit','LaborReportController@guardClockAudit');
     //组长打卡审核
     Route::post('groupClockAudit','LaborReportController@groupClockAudit');
+    //组长打卡审核(特定组添加备注)
+    Route::post('addRemarkAndGroupClock','LaborReportController@addRemarkAndGroupClock');
     //组长点击退场
     Route::post('groupExport','LaborReportController@groupExport');
     //组长点击退场,是否包含晚饭时间情况