Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 259 |
| LeaveHelper | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
6806 | |
0.00% |
0 / 259 |
| getEntitlementLeave | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 11 |
|||
| updateLeaveBalanceOnCancelling | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 19 |
|||
| updateLeaveBalanceOnRejecting | |
0.00% |
0 / 1 |
210 | |
0.00% |
0 / 22 |
|||
| updateLeaveBalance | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 19 |
|||
| updateUserLeaveBalance | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 19 |
|||
| updateLeaveBalanceOnAdminCancelling | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 19 |
|||
| checkTotalLeaves | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| checkUserOnLeave | |
0.00% |
0 / 1 |
930 | |
0.00% |
0 / 144 |
|||
| getShiftDetails | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| namespace App\Helpers; | |
| use App\Models\Auth\User; | |
| use Carbon\Carbon; | |
| use App\Models\Leave\LeaveEntitlement; | |
| use App\Models\Admin\Leave; | |
| use Auth; | |
| use App\Models\Leave\CompOffLeave; | |
| use App\Models\Auth\UserShift; | |
| use App\Models\Admin\AttendanceApproval; | |
| use Session; | |
| use App\Models\Admin\Team; | |
| use App\Models\Leave\ApplyLeave; | |
| class LeaveHelper{ | |
| public static function getEntitlementLeave($userId,$leaveId) | |
| { | |
| $query = LeaveEntitlement::query(); | |
| $query->where('user_id','=',$userId); | |
| $query->where('year', '=',Carbon::now(config('settings.time_zone'))->year); | |
| $query->where('leave_id','=',$leaveId); | |
| $leaveEntitlementArr = $query->get(); | |
| $leaveBalance = null; | |
| foreach($leaveEntitlementArr as $leaveEntitlement) | |
| { | |
| $leaveBalance = $leaveEntitlement->leave_balance; | |
| } | |
| if($leaveBalance == null ) | |
| { | |
| $leaveBalance = '0'; | |
| } | |
| return $leaveBalance; | |
| } | |
| public static function updateLeaveBalanceOnCancelling($status,$leaveId,$leaveDuration) | |
| { | |
| $query = LeaveEntitlement::query(); | |
| $query->where('user_id','=',Auth::user()->id); | |
| $query->where('year', '=',Carbon::now(config('settings.time_zone'))->year); | |
| $query->where('leave_id','=',$leaveId); | |
| $leaveEntitlementArr = $query->get(); | |
| $leave = Leave::withTrashed()->where('id', $leaveId)->first(); | |
| if($leave->name == "Comp off Leave - Paid" && $leave->system_generated == 1){ | |
| $compOffLeave = CompOffLeave::where("is_process", 'true') | |
| ->where("approved_date",'!=',NULL) | |
| ->where("avail_date",'!=',NULL) | |
| ->where("lapsed_date",NULL) | |
| ->first(); | |
| if(!empty($compOffLeave)){ | |
| $compOffLeave->update(['avail_date' => NULL]); | |
| } | |
| } | |
| foreach( $leaveEntitlementArr as $leaveEntitlement) | |
| { | |
| if(isset($leaveEntitlement->leave_balance) && ($leave->leave_allocation_type == 'no_application' || $leaveEntitlement->entitled_leaves != '0.00')) | |
| { | |
| $leaveEntitlement->leave_balance = $leaveEntitlement->leave_balance + $leaveDuration; | |
| $leaveEntitlement->save(); | |
| } | |
| } | |
| } | |
| public static function updateLeaveBalanceOnRejecting($userId, $status, $leaveId, $leaveDuration) | |
| { | |
| $query = LeaveEntitlement::query(); | |
| $query->where('user_id', '=', $userId); | |
| $query->where('year', '=', Carbon::now(config('settings.time_zone'))->year); | |
| $query->where('leave_id', '=', $leaveId); | |
| $leaveEntitlementArr = $query->get(); | |
| $leave = Leave::withTrashed()->where('id', $leaveId)->first(); | |
| if($status == "Reject" && $leave->name == "Comp off Leave - Paid" && $leave->system_generated == 1){ | |
| $compOffLeave = CompOffLeave::where("is_process", 'true') | |
| ->where("approved_date",'!=',NULL) | |
| ->where("avail_date",'!=',NULL) | |
| ->where("lapsed_date",NULL) | |
| ->first(); | |
| if(!empty($compOffLeave)){ | |
| $compOffLeave->update(['avail_date' => NULL]); | |
| } | |
| } | |
| foreach ($leaveEntitlementArr as $leaveEntitlement) { | |
| if (isset($leaveEntitlement->leave_balance) && $status == "Reject" && ($leave->leave_allocation_type == 'no_application' || $leaveEntitlement->entitled_leaves != '0.00')) { | |
| $leaveEntitlement->leave_balance = $leaveEntitlement->leave_balance + $leaveDuration; | |
| $leaveEntitlement->save(); | |
| } | |
| if (isset($leaveEntitlement->leave_balance) && $status == "Approve" && ($leave->leave_allocation_type == 'no_application' || $leaveEntitlement->entitled_leaves != '0.00')) { { | |
| $leaveEntitlement->leave_balance = $leaveEntitlement->leave_balance; | |
| $leaveEntitlement->save(); | |
| } | |
| } | |
| } | |
| } | |
| public static function updateLeaveBalance($leaveId,$leaveDuration) | |
| { | |
| $query = LeaveEntitlement::query(); | |
| $query->where('user_id','=',Auth::user()->id); | |
| $query->where('year', '=',Carbon::now(config('settings.time_zone'))->year); | |
| $query->where('leave_id','=',$leaveId); | |
| $leaveEntitlementArr = $query->get(); | |
| $leave = Leave::withTrashed()->where('id', $leaveId)->first(); | |
| if($leave->name == "Comp off Leave - Paid" && $leave->system_generated == 1){ | |
| $compOffLeave = CompOffLeave::where("is_process", 'true') | |
| ->where("approved_date",'!=',NULL) | |
| ->where("avail_date",NULL) | |
| ->where("lapsed_date",NULL) | |
| ->first(); | |
| if(!empty($compOffLeave)){ | |
| $compOffLeave->update(['avail_date' => Carbon::now(config('settings.time_zone'))->format('Y-m-d')]); | |
| } | |
| } | |
| foreach( $leaveEntitlementArr as $leaveEntitlement) | |
| { | |
| if(isset($leaveEntitlement->leave_balance) && ($leave->leave_allocation_type == 'no_application' || $leaveEntitlement->entitled_leaves != '0.00')) | |
| { | |
| $leaveEntitlement->leave_balance = $leaveEntitlement->leave_balance - $leaveDuration; | |
| $leaveEntitlement->save(); | |
| } | |
| } | |
| } | |
| public static function updateUserLeaveBalance($userId,$leaveId,$leaveDuration) | |
| { | |
| $query = LeaveEntitlement::query(); | |
| $query->where('user_id','=',$userId); | |
| $query->where('year', '=',Carbon::now(config('settings.time_zone'))->year); | |
| $query->where('leave_id','=',$leaveId); | |
| $leaveEntitlementArr = $query->get(); | |
| $leave = Leave::withTrashed()->where('id', $leaveId)->first(); | |
| if($leave->name == "Comp off Leave - Paid" && $leave->system_generated == 1){ | |
| $compOffLeave = CompOffLeave::where("is_process", 'true') | |
| ->where("approved_date",'!=',NULL) | |
| ->where("avail_date",NULL) | |
| ->where("lapsed_date",NULL) | |
| ->first(); | |
| if(!empty($compOffLeave)){ | |
| $compOffLeave->update(['avail_date' => Carbon::now(config('settings.time_zone'))->format('Y-m-d')]); | |
| } | |
| } | |
| foreach( $leaveEntitlementArr as $leaveEntitlement) | |
| { | |
| if(isset($leaveEntitlement->leave_balance) && ($leave->leave_allocation_type == 'no_application' || $leaveEntitlement->entitled_leaves != '0.00')) | |
| { | |
| $leaveEntitlement->leave_balance = $leaveEntitlement->leave_balance - $leaveDuration; | |
| $leaveEntitlement->save(); | |
| } | |
| } | |
| } | |
| public static function updateLeaveBalanceOnAdminCancelling($userId,$leaveId,$leaveDuration) | |
| { | |
| $query = LeaveEntitlement::query(); | |
| $query->where('user_id','=',$userId); | |
| $query->where('year', '=',Carbon::now(config('settings.time_zone'))->year); | |
| $query->where('leave_id','=',$leaveId); | |
| $leaveEntitlementArr = $query->get(); | |
| $leave = Leave::withTrashed()->where('id', $leaveId)->first(); | |
| if($leave->name == "Comp off Leave - Paid" && $leave->system_generated == 1){ | |
| $compOffLeave = CompOffLeave::where("is_process", 'true') | |
| ->where("approved_date",'!=',NULL) | |
| ->where("avail_date",'!=',NULL) | |
| ->where("lapsed_date",NULL) | |
| ->first(); | |
| if(!empty($compOffLeave)){ | |
| $compOffLeave->update(['avail_date' => NULL]); | |
| } | |
| } | |
| foreach( $leaveEntitlementArr as $leaveEntitlement) | |
| { | |
| if(isset($leaveEntitlement->leave_balance) && ($leave->leave_allocation_type == 'no_application' || $leaveEntitlement->entitled_leaves != '0.00')) | |
| { | |
| $leaveEntitlement->leave_balance = $leaveEntitlement->leave_balance + $leaveDuration; | |
| $leaveEntitlement->save(); | |
| } | |
| } | |
| } | |
| public static function checkTotalLeaves($leaveId){ | |
| $leave = Leave::find($leaveId); | |
| if($leave->n_days == 0){ | |
| return false; | |
| }else{ | |
| return true; | |
| } | |
| } | |
| public static function checkUserOnLeave($user_id){ | |
| $startDate = Carbon::parse(Carbon::now(config('settings.time_zone'))->toDateString().'00:00:00', config('settings.time_zone'))->setTimezone(config('app.time_zone')); | |
| $endDate = Carbon::parse(Carbon::now(config('settings.time_zone'))->addDay()->toDateString().'00:00:00', config('settings.time_zone'))->setTimezone(config('app.time_zone')); | |
| $user = User::where('id',$user_id)->first(); | |
| if(isset($user)) | |
| { | |
| $shiftDetails = self::getShiftDetails($user); | |
| } | |
| else | |
| { | |
| return; // user/userdetail not entered in AMS | |
| } | |
| $teamId = $user->userdetail->primary_team_id; | |
| $team = Team::find($teamId); | |
| //current time | |
| $today_date_time = Carbon::now(config('settings.time_zone')); | |
| $time_now = $today_date_time->toTimeString(); | |
| $currentDate = Carbon::now(config('settings.time_zone'))->toDateString(); | |
| $subdayWithTimezone = Carbon::now(config('settings.time_zone'))->subday()->toDateString(); | |
| //if user is on leave | |
| $userOnLeave = ApplyLeave::where('from_date', '<=', $currentDate) | |
| ->where('to_date', '>=', $currentDate) | |
| ->where('status', 'Approve') | |
| ->where('user_id', $user->id) | |
| ->where('leave_length','>=',1) | |
| ->first(); | |
| //query for sub day | |
| $userOnLeaveSubday = ApplyLeave::where('from_date', '<=', $subdayWithTimezone) | |
| ->where('to_date', '>=', $subdayWithTimezone) | |
| ->where('status', 'Approve') | |
| ->where('user_id', $user_id) | |
| ->first(); | |
| //check if user is on shedule or not | |
| if($team->has_schedule == 1) { | |
| //get sub day user shift first | |
| $subday_date = Carbon::now(config('settings.time_zone'))->subday()->toDateString(); | |
| $startDateForSubday = Carbon::parse($subday_date.'00:00:00', config('settings.time_zone'))->setTimezone(config('app.time_zone')); | |
| $endDateForSubday = Carbon::parse(Carbon::parse($subday_date)->addDay()->toDateString().'00:00:00', config('settings.time_zone'))->setTimezone(config('app.time_zone')); | |
| $userShiftForSubday = UserShift::where('user_id',$user->id) | |
| ->whereBetween('created_at', [$startDateForSubday, $endDateForSubday]) | |
| ->first(); | |
| //if user shift for sub day is not empty | |
| if(!empty($userShiftForSubday)){ | |
| $shiftStartTime = $userShiftForSubday->shift_start; | |
| $shiftEndTime = $userShiftForSubday->shift_end; | |
| $shiftStartTimeForSubday = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')); | |
| $shiftStartTimeForSubday->setTimezone(config('settings.time_zone')); | |
| $shiftStartTimeForSubday = $shiftStartTimeForSubday->toTimeString(); | |
| $shiftEndTimeForSubday = Carbon::createFromFormat('H:i:s', $shiftEndTime, Config('app.timezone')); | |
| $shiftEndTimeForSubday->setTimezone(config('settings.time_zone')); | |
| $shiftEndTimeForSubday = $shiftEndTimeForSubday->toTimeString(); | |
| //check user is on two day shift | |
| if($shiftStartTimeForSubday > $shiftEndTimeForSubday){ | |
| //offset start time for two day shift | |
| $offsetStartTime = Carbon::parse($shiftStartTimeForSubday); | |
| $offsetStartTime = $offsetStartTime->subHours(4)->toTimeString(); | |
| //offset end time for two day shift | |
| $offsetEndTime = Carbon::parse($shiftEndTimeForSubday); | |
| $offsetEndTime = $offsetEndTime->addHours(4)->toTimeString(); | |
| $time = Carbon::now(config('settings.time_zone')); | |
| $day = $time->day+1; | |
| //set time to shift start time | |
| $setShiftStartTime = Carbon::createFromFormat('Y-m-d H:i:s',$time->year.'-'.$time->month.'-'.$time->day.' '. $offsetStartTime,config('settings.time_zone')); | |
| //set time to next day 12am | |
| $set12am = Carbon::createFromFormat('Y-m-d H:i:s',$time->year.'-'.$time->month.'-'.$day.' 00:00:00',config('settings.time_zone')); | |
| if(!$time->between($setShiftStartTime, $set12am, true) && $time_now < $offsetEndTime) { | |
| }else{ | |
| //if user is single day shift check user shift for today | |
| $userShift = UserShift::where('user_id',$user->id) | |
| ->whereBetween('created_at', [$startDate, $endDate]) | |
| ->first(); | |
| if(!empty($userShift)){ | |
| $shiftStartTime = $userShift->shift_start; | |
| $shiftEndTime = $userShift->shift_end; | |
| $shiftStartTimeForToday = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')); | |
| $shiftStartTimeForToday->setTimezone(config('settings.time_zone')); | |
| //set time | |
| $shiftStartTimeForToday = $shiftStartTimeForToday->toTimeString(); | |
| //get shift time with date | |
| $setShiftStartTime = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')) | |
| ->setTimezone(config('settings.time_zone')) | |
| ->format('Y-m-d H:i:s'); | |
| //set offset time with date | |
| $offsetStartTime = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')) | |
| ->setTimezone(config('settings.time_zone')) | |
| ->subHours(4) | |
| ->format('Y-m-d H:i:s'); | |
| //time for check | |
| $time = Carbon::now(config('settings.time_zone')); | |
| //check offset start time and shift start time | |
| if( ($time->between($offsetStartTime,$setShiftStartTime)) || | |
| ($time_now == $shiftStartTimeForToday) || ($time_now > $shiftStartTimeForToday )) | |
| { //if time now is near to shift start time | |
| }else{ | |
| // Session::flash('warning', 'Shift not assigned for you in schedule. Please request attendance.'); | |
| // redirect()->route('request-attendance.index')->send(); | |
| return'shift not assigned'; | |
| } | |
| }else{ | |
| // Session::flash('warning', 'Shift not assigned for you in schedule. Please request attendance.'); | |
| // redirect()->route('request-attendance.index')->send(); | |
| return 'shift not assigned'; | |
| } | |
| } | |
| }else{ | |
| //if user is single day shift check user shift for today | |
| $userShift = UserShift::where('user_id',$user->id) | |
| ->whereBetween('created_at', [$startDate, $endDate]) | |
| ->first(); | |
| if(!empty($userShift)){ | |
| $shiftStartTime = $userShift->shift_start; | |
| $shiftEndTime = $userShift->shift_end; | |
| $shiftStartTimeForToday = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')); | |
| $shiftStartTimeForToday->setTimezone(config('settings.time_zone')); | |
| //set time | |
| $shiftStartTimeForToday = $shiftStartTimeForToday->toTimeString(); | |
| //get shift time with date | |
| $setShiftStartTime = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')) | |
| ->setTimezone(config('settings.time_zone')) | |
| ->format('Y-m-d H:i:s'); | |
| //set offset time with date | |
| $offsetStartTime = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')) | |
| ->setTimezone(config('settings.time_zone')) | |
| ->subHours(4) | |
| ->format('Y-m-d H:i:s'); | |
| //time for check | |
| $time = Carbon::now(config('settings.time_zone')); | |
| //check offset start time and shift start time | |
| if( ($time->between($offsetStartTime,$setShiftStartTime)) || | |
| ($time_now == $shiftStartTimeForToday) || ($time_now > $shiftStartTimeForToday )) | |
| { //if time now is near to shift start time | |
| }else{ | |
| // Session::flash('warning', 'Shift not assigned for you in schedule. Please request attendance.'); | |
| // redirect()->route('request-attendance.index')->send(); | |
| return 'shift not assigned'; | |
| } | |
| }else{ | |
| // Session::flash('warning', 'Shift not assigned for you in schedule. Please request attendance.'); | |
| // redirect()->route('request-attendance.index')->send(); | |
| return 'shift not assigned'; | |
| } | |
| } | |
| }else{ | |
| //if empty check user shift for today | |
| $userShift = UserShift::where('user_id',$user->id) | |
| ->whereBetween('created_at', [$startDate, $endDate]) | |
| ->first(); | |
| if(!empty($userShift)){ | |
| $shiftStartTime = $userShift->shift_start; | |
| $shiftEndTime = $userShift->shift_end; | |
| $shiftStartTimeForToday = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')); | |
| $shiftStartTimeForToday->setTimezone(config('settings.time_zone')); | |
| //set time | |
| $shiftStartTimeForToday = $shiftStartTimeForToday->toTimeString(); | |
| //get shift time with date | |
| $setShiftStartTime = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')) | |
| ->setTimezone(config('settings.time_zone')) | |
| ->format('Y-m-d H:i:s'); | |
| //set offset time with date | |
| $offsetStartTime = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')) | |
| ->setTimezone(config('settings.time_zone')) | |
| ->subHours(4) | |
| ->format('Y-m-d H:i:s'); | |
| //time for check | |
| $time = Carbon::now(config('settings.time_zone')); | |
| //check offset start time and shift start time | |
| if( ($time->between($offsetStartTime,$setShiftStartTime)) || | |
| ($time_now == $shiftStartTimeForToday) || ($time_now > $shiftStartTimeForToday )) | |
| { //if time now is near to shift start time | |
| }else{ | |
| // Session::flash('warning', 'Shift not assigned for you in schedule. Please request attendance.'); | |
| // redirect()->route('request-attendance.index')->send(); | |
| return 'shift not assigned'; | |
| } | |
| }else{ | |
| // Session::flash('warning', 'Shift not assigned for you in schedule. Please request attendance.'); | |
| // redirect()->route('request-attendance.index')->send(); | |
| return 'shift not assigned'; | |
| } | |
| } | |
| }else{ | |
| if($shiftDetails->count() == 1) //if there is only one applicable shift for a user | |
| { | |
| foreach ($shiftDetails as $shift) | |
| { | |
| $shiftStartTime = $shift->start_time; | |
| $shiftEndTime = $shift->end_time; | |
| } | |
| } | |
| } | |
| //change start time and end time to settings timezone | |
| $shiftStartTimeForTimezone = Carbon::createFromFormat('H:i:s', $shiftStartTime, Config('app.timezone')); | |
| $shiftStartTimeForTimezone->setTimezone(config('settings.time_zone')); | |
| $shiftStartTimeForTimezone = $shiftStartTimeForTimezone->toTimeString(); | |
| $shiftEndTimeForTimezone = Carbon::createFromFormat('H:i:s', $shiftEndTime, Config('app.timezone')); | |
| $shiftEndTimeForTimezone->setTimezone(config('settings.time_zone')); | |
| $shiftEndTimeForTimezone = $shiftEndTimeForTimezone->toTimeString(); | |
| //checking for two day shift or single day shift | |
| //if start time is greater than end time, that is two day shift | |
| if($shiftStartTimeForTimezone > $shiftEndTimeForTimezone) // to check if the shift ends the next day | |
| { | |
| $time_now = Carbon::now(config('settings.time_zone'))->toTimeString(); | |
| //offset start time for two day shift | |
| $offsetStartTime = Carbon::parse($shiftStartTimeForTimezone); | |
| $offsetStartTime = $offsetStartTime->subHours(4)->toTimeString(); | |
| //offset end time for two day shift | |
| $offsetEndTime = Carbon::parse($shiftEndTimeForTimezone); | |
| $offsetEndTime = $offsetEndTime->addHours(4)->toTimeString(); | |
| $currentDate = Carbon::now(config('settings.time_zone'))->toDateString(); | |
| $subdayWithTimezone = Carbon::now(config('settings.time_zone'))->subday()->toDateString(); | |
| if( ($time_now < $shiftStartTimeForTimezone && $time_now > $offsetStartTime) || | |
| ($time_now == $shiftStartTimeForTimezone) || ($time_now > $shiftStartTimeForTimezone && ($offsetEndTime < $time_now))) | |
| {//if time now is near to shift start time or after shift offset end time | |
| if(!empty($userOnLeave)){ | |
| return true; | |
| }else{ | |
| return false; | |
| } | |
| } | |
| else | |
| { // else check user leave on sub day | |
| if(!empty($userOnLeaveSubday)){ | |
| return true; | |
| }else{ | |
| return false; | |
| } | |
| } | |
| } | |
| else | |
| { // single day shift | |
| if(!empty($userOnLeave)){ | |
| return true; | |
| }else{ | |
| return false; | |
| } | |
| } | |
| } | |
| public static function getShiftDetails($user) | |
| { | |
| $shift = $user->userdetail; | |
| return $user->userdetail->shifts; | |
| } | |
| } |