Browse Source

人事管理临时工补卡逻辑修改

haozi 4 years ago
parent
commit
342c8efb9a

+ 9 - 2
app/Http/Controllers/LaborReportController.php

@@ -242,11 +242,18 @@ class LaborReportController extends Controller
     public function minusLunchTime($laborReport,$hour){
         $checkInTime=$laborReport->check_in_at;
         $checkOutTime=$laborReport->check_out_at;
-        $checkOutTime=Carbon::parse($checkOutTime)->format('H');
+        $checkOutTime=Carbon::parse($checkOutTime);
         $checkInTime=Carbon::parse($checkInTime);
-        if ($checkInTime->lessThanOrEqualTo($checkInTime->clone()->setHours(11)->setMinutes(30))&&(int)$checkOutTime>=13){
+        //白班:第一餐 默认减去1小时
+        if ($checkInTime->lessThanOrEqualTo($checkInTime->clone()->setHours(11)->setMinutes(30))//进组时间小于等于进组当天11:30
+            &&Carbon::parse($checkOutTime)->gte(Carbon::parse($checkInTime->clone()->setHour(13)->setMinute(00)->setSecond(00)))){//退组时间大于进组当天的13:00
             $hour=$hour-1;
         }
+        //夜班:第一餐 默认减去半小时
+        if ($checkInTime->lessThanOrEqualTo($checkInTime->clone()->setHours(23)->setMinutes(59))//进组时间小于等于当天23:59
+            &&Carbon::parse($checkOutTime)->gte(Carbon::parse($checkInTime->clone()->subDays(-1)->setHour(1)))){//退组时间大于等于进组后一天的1:00
+            $hour=$hour-0.5;
+        }
         return $hour;
     }
     public function updateLaborCompany(Request $request){

+ 26 - 5
app/Http/Controllers/PersonnelController.php

@@ -61,7 +61,7 @@ class PersonnelController extends Controller
                   ]);
                   LaborReportStatus::query()->create([
                       'labor_report_id'=>$laborReport['id'],
-                      'status'=>'已进组',
+                      'status'=>'已入场',
                       'created_at'=>$checked_at,
                   ]);
                   if ($remark)$laborReportService->addOrUpdateRemark($remark,$laborReport->id);
@@ -99,13 +99,19 @@ class PersonnelController extends Controller
               }
               break;
             case '退组':
-//                $laborReport=LaborReport::query()->with('userDutyCheck')
-//                    ->where('user_id',$user_id)
-//                    ->where('created_at','like',$checkedAtDate.'%')
-//                    ->orderBy('id','desc')->first();
+                $round_time=round(Carbon::parse($checked_at)->diffInSeconds(Carbon::parse($laborReport->round_check_in_at))/3600,2);
+                $relax_time=$request->input('relax_time')??null;
+                $working_duration=null;
+                if ($relax_time){
+                    $working_duration=$this->minusLunchTime($laborReport->round_check_in_at,$checked_at,$round_time)-$relax_time/60;//减去晚饭时间
+                }else{
+                    $working_duration=$this->minusLunchTime($laborReport->round_check_in_at,$checked_at,$round_time);
+                }
                 if ($laborReport && !$laborReport->check_out_at){
                     $laborReport->update([
                         'check_out_at'=>$checked_at,
+                        'relax_time'=>$relax_time,
+                        'working_duration'=>$working_duration,
                     ]);
                     LaborReportStatus::query()->create([
                         'labor_report_id'=>$laborReport['id'],
@@ -142,6 +148,21 @@ class PersonnelController extends Controller
                 return ['success'=>true,'data'=>$userDutyCheck];
         }
     }
+    public function minusLunchTime($checkInTime,$checkOutTime,$hour){
+        $checkInTime=Carbon::parse($checkInTime);
+        $checkOutTime=Carbon::parse($checkOutTime);
+        //白班:第一餐 默认减去1小时
+        if ($checkInTime->lessThanOrEqualTo($checkInTime->clone()->setHours(11)->setMinutes(30))//进组时间小于等于进组当天11:30
+            &&Carbon::parse($checkOutTime)->gte(Carbon::parse($checkInTime->clone()->setHour(13)->setMinute(00)->setSecond(00)))){//退组时间大于进组当天的13:00
+            $hour=$hour-1;
+        }
+        //夜班:第一餐 默认减去半小时
+        if ($checkInTime->lessThanOrEqualTo($checkInTime->clone()->setHours(23)->setMinutes(59))//进组时间小于等于当天23:59
+            &&Carbon::parse($checkOutTime)->gte(Carbon::parse($checkInTime->clone()->subDays(-1)->setHour(1)))){//退组时间大于等于进组后一天的1:00
+            $hour=$hour-0.5;
+        }
+        return $hour;
+    }
     //补卡创建或修改临时工报表
     public function makeOrUpdateLaborReport($userDutyCheck,$remark){
         $checkedAtDate=Carbon::parse($userDutyCheck->checked_at)->format('Y-m-d');

+ 10 - 1
resources/views/personnel/checking-in/createReplenishClock.blade.php

@@ -19,6 +19,7 @@
                         <th>添加所需备注</th>
                         <th>补卡类型</th>
                         <th>工作组</th>
+                        <th>用餐时间</th>
                         <th>操作</th>
                     </tr>
                     </thead>
@@ -55,6 +56,12 @@
                             </select>
                             <small v-if="errors.type && errors.type.length>0 " class="text-danger">@{{ errors.type[0] }}</small>
                         </td>
+                        <td>
+                            <select v-if="userLabor.userDutyCheck_type=='退组'" class="form-control" id="relax_time" v-model="userLabor.relax_time">
+                                <option value="30">30分</option>
+                                <option value="60">60分</option>
+                            </select>
+                        </td>
                         <td><button @click="storeReplenishClock(userLabor)" class="btn btn-info w-100">提交补卡</button></td>
                     </tr>
                     </tbody>
@@ -115,13 +122,15 @@
                     let type=userLabor.userDutyCheck_type;
                     let remark=userLabor.laborReport_remark;
                     let userWorkGroup=userLabor.userWorkGroup;
+                    let relax_time=userLabor.relax_time;
                     if ((type==='进组')&& !userWorkGroup){
                         tempTip.setDuration(4000);
                         tempTip.show('工作组不可为空!');
                         return;
                     }
                     let _this=this;
-                    axios.post("{{url('personnel/checking-in/storeReplenishClock')}}",{user_id:user_id,checked_at:checked_at,type:type,remark:remark,userWorkGroup:userWorkGroup})
+                    axios.post("{{url('personnel/checking-in/storeReplenishClock')}}",{user_id:user_id,checked_at:checked_at,type:type,
+                        remark:remark,userWorkGroup:userWorkGroup,relax_time:relax_time})
                         .then(function (response) {
                             if (response.data.success){
                                 _this.userLabors.every(function (userLabor) {