Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 275
AdminLeaveReportController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 11
4692
0.00% covered (danger)
0.00%
0 / 275
 index
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 24
 create
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 store
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 show
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 edit
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 update
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 destroy
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 selectLeaveReport
0.00% covered (danger)
0.00%
0 / 1
756
0.00% covered (danger)
0.00%
0 / 134
 editapplyleave
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 9
 updatemanageleave
0.00% covered (danger)
0.00%
0 / 1
462
0.00% covered (danger)
0.00%
0 / 79
 getUser
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 23
<?php
namespace App\Http\Controllers\Leave;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\Team;
use DB;
use Carbon\CarbonPeriod;
use Carbon\Carbon;
use App\Models\Auth\User;
use GetShiftDetailHelper;
use App\Models\Admin\Leave;
use App\Models\Leave\ApplyLeave;
use App\Models\Leave\LeaveEntitlement;
use App\Notifications\AppNotifications;
use App\Models\Leave\RejectedLeave;
use Session;
use App\Models\Auth\userRequestCollaborator;
use App\Models\Auth\UserRequestDiscuss;
use App\Helpers\LeaveHelper;
use Auth;
use App\Helpers\AttendanceHelper;
class AdminLeaveReportController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $title = '/Leave/Leave Report';
        $teams = [];
        $users = [];
        if (auth()->user()->can('View All Leave Report')) {
            $teams = Team::all();
            $users = User::all();
        } else if (
            auth()->user()->can('View Team Leave Report') ||
            auth()->user()->can('View All leave requests of assigned employees')
        ) {
            $teams = GetShiftDetailHelper::getMyteams();
            $teamId = array();
            foreach ($teams as $value) {
                array_push($teamId, $value->id);
            }
            $teamId = implode(",", $teamId);
            $users = User::select('users.name', 'users.lastName', 'users.id')
                ->leftJoin('user_details', 'users.id', '=', 'user_details.user_id')
                ->whereIn('user_details.primary_team_id', [$teamId])
                ->get();
        } else {
            $teams = [];
        }
        // For Attendance Marking
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        return view(
            'administrationForms.LeavePolicy.LeaveReport.adminLeaveReportForm',
            compact('teams', 'title', 'users', 'val', 'valTeam', 'valUser')
        );
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
    public function selectLeaveReport(Request $request)
    {
        // if(!empty($request->month_year)){
        // $startDate = Carbon::parse('01-'.$request->month_year ,Config('app.timezone'));
        // $startDate = $startDate->format('Y-m-d');
        // $endDate =  Carbon::parse('01-'.$request->month_year ,Config('app.timezone'))->endOfMonth()->format('Y-m-d');
        // }
        // else
        // {
        //     $startDate = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->fromDate ) )->format('Y-m-d');
        //     $endDate =  Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->toDate ) )->format('Y-m-d');
        // }
        $startDate = Carbon::parse($request->fromDate)->format('Y-m-d');
        $endDate = Carbon::parse($request->toDate)->format('Y-m-d');
        $endDateForQuery = Carbon::parse($request->toDate)->addDay()->format('Y-m-d');
        //$dateDayAdded = $date->addDay()->toDateString();
        $teamId = $request->teamId;
        $columnHeaders = collect(['Profile Pic', 'Employee Name', 'Team Name', 'Leave Type', 'Half Day Leave Type', '      Reason     ', 'Requested On', 'From Date', 'To Date', 'Leave Length', 'Status', 'Manager']);
        if ($teamId == 0 && isset($request->teamId) && (auth()->user()->can('View Team Leave Report') || auth()->user()->can('View All Leave Report'))) {
            if (auth()->user()->can('View Team Leave Report') && !auth()->user()->can('View All Leave Report')) {
                $getTeamIds = GetShiftDetailHelper::getMyteamIds();
                $teamIds = implode(",", $getTeamIds);
                $teamQuery = 't.id in (' . $teamIds . ')';
                // $leaveReport =  DB::select(' select DISTINCT a.id, concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                //                         (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status
                //                         from apply_leaves a
                //                         join user_details u on a.user_id = u.user_id
                //                         join team_user_detail tsd on  tsd.user_detail_id = u.id
                //                         join teams t on t.id = tsd.team_id
                //                         join users us on us.id = u.user_id
                //                         where '.$teamQuery.' and
                //                         ((a.from_date between :startDate1 and :endDate1)
                //                         or (a.to_date between :startDate2  and :endDate2)) order by us.id,a.id',
                //                          ['startDate1'=>$startDate,'endDate1'=>$endDate,
                //                          'startDate2'=>$startDate,'endDate2'=>$endDate]);
                if ($request->userid != '0') {
                    $userid = $request->userid;
                    $leaveReport = DB::select(' select DISTINCT a.id, concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                                         (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at,
                                          u.gender as gender
                                         from apply_leaves a
                                         join user_details u on a.user_id = u.user_id
                                         join teams t on t.id = u.primary_team_id
                                         join users us on us.id = u.user_id
                                         where ' . $teamQuery . ' and
                                         ((a.from_date between :startDate1 and :endDate1)
                                         or (a.to_date between :startDate2  and :endDate2)) and us.id = (' . $userid . ') order by us.id,a.id',
                        [
                            'startDate1' => $startDate,
                            'endDate1' => $endDate,
                            'startDate2' => $startDate,
                            'endDate2' => $endDate
                        ]
                    );
                } else {
                    $leaveReport = DB::select(' select DISTINCT a.id, concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                                         (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at,
                                          u.gender as gender
                                         from apply_leaves a
                                         join user_details u on a.user_id = u.user_id
                                         join teams t on t.id = u.primary_team_id
                                         join users us on us.id = u.user_id
                                         where ' . $teamQuery . ' and
                                         ((a.from_date between :startDate1 and :endDate1)
                                         or (a.to_date between :startDate2  and :endDate2)) order by us.id,a.id',
                        [
                            'startDate1' => $startDate,
                            'endDate1' => $endDate,
                            'startDate2' => $startDate,
                            'endDate2' => $endDate
                        ]
                    );
                }
            } else {
                // $leaveReport =  DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                //             (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status
                //             from apply_leaves a
                //             join user_details u on a.user_id = u.user_id
                //             join team_user_detail tsd on  tsd.user_detail_id = u.id
                //             join teams t on t.id = tsd.team_id
                //             join users us on us.id = u.user_id
                //             where ((a.from_date between :startDate1 and :endDate1)
                //             or (a.to_date between :startDate2  and :endDate2)) order by us.id,a.id',
                //             ['startDate1'=>$startDate,'endDate1'=>$endDate,
                //             'startDate2'=>$startDate,'endDate2'=>$endDate]);
                if ($request->userid != '0') {
                    $userid = $request->userid;
                    $leaveReport = DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                            (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at,
                             u.gender as gender
                            from apply_leaves a
                            join user_details u on a.user_id = u.user_id
                            join teams t on t.id = u.primary_team_id
                            join users us on us.id = u.user_id
                            where ((a.from_date between :startDate1 and :endDate1)
                            or (a.to_date between :startDate2  and :endDate2)) and us.id = (' . $userid . ') order by us.id,a.id',
                        [
                            'startDate1' => $startDate,
                            'endDate1' => $endDate,
                            'startDate2' => $startDate,
                            'endDate2' => $endDate
                        ]
                    );
                } else {
                    $leaveReport = DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                            (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at,
                             u.gender as gender
                            from apply_leaves a
                            join user_details u on a.user_id = u.user_id
                            join teams t on t.id = u.primary_team_id
                            join users us on us.id = u.user_id
                            where ((a.from_date between :startDate1 and :endDate1)
                            or (a.to_date between :startDate2  and :endDate2)) order by us.id,a.id',
                        [
                            'startDate1' => $startDate,
                            'endDate1' => $endDate,
                            'startDate2' => $startDate,
                            'endDate2' => $endDate
                        ]
                    );
                }
            }
        } elseif (isset($request->teamId) && (auth()->user()->can('View Team Leave Report') || auth()->user()->can('View All Leave Report'))) {
            // $leaveReport =  DB::select(' select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
            //                             (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status
            //                             from apply_leaves a
            //                             join user_details u on a.user_id = u.user_id
            //                             join team_user_detail tsd on  tsd.user_detail_id = u.id
            //                             join teams t on t.id = tsd.team_id
            //                             join users us on us.id = u.user_id
            //                             where t.id in (:teamId) and
            //                             ((a.from_date between :startDate1 and :endDate1)
            //                             or (a.to_date between :startDate2  and :endDate2)) order by us.id,a.id',
            //                              ['teamId' => $teamId,'startDate1'=>$startDate,'endDate1'=>$endDate,
            //                              'startDate2'=>$startDate,'endDate2'=>$endDate]);
            if ($request->userid != '0') {
                $userid = $request->userid;
                $leaveReport = DB::select(' select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                                         (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at,
                                          u.gender as gender
                                         from apply_leaves a
                                         join user_details u on a.user_id = u.user_id
                                         join teams t on t.id = u.primary_team_id
                                         join users us on us.id = u.user_id
                                         where t.id in (:teamId) and
                                         ((a.from_date between :startDate1 and :endDate1)
                                         or (a.to_date between :startDate2  and :endDate2)) 
                                         and us.id = (' . $userid . ')order by us.id,a.id',
                    [
                        'teamId' => $teamId,
                        'startDate1' => $startDate,
                        'endDate1' => $endDate,
                        'startDate2' => $startDate,
                        'endDate2' => $endDate
                    ]
                );
            } else {
                $leaveReport = DB::select(' select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                                         (select date(a.to_date)) as to_date,a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at,
                                          u.gender as gender
                                         from apply_leaves a
                                         join user_details u on a.user_id = u.user_id
                                         join teams t on t.id = u.primary_team_id
                                         join users us on us.id = u.user_id
                                         where t.id in (:teamId) and
                                         ((a.from_date between :startDate1 and :endDate1)
                                         or (a.to_date between :startDate2  and :endDate2)) order by us.id,a.id',
                    [
                        'teamId' => $teamId,
                        'startDate1' => $startDate,
                        'endDate1' => $endDate,
                        'startDate2' => $startDate,
                        'endDate2' => $endDate
                    ]
                );
            }
        } else {
            if (auth()->user()->can('View Self Leave Report')) {
                // $leaveReport =  DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                //             (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status
                //             from apply_leaves a
                //             join user_details u on a.user_id = u.user_id
                //             join team_user_detail tsd on  tsd.user_detail_id = u.id
                //             join teams t on t.id = tsd.team_id
                //             join users us on us.id = u.user_id 
                //             where ((a.from_date between :startDate1 and :endDate1)
                //             or (a.to_date between :startDate2  and :endDate2)) and 
                //                                     us.id = ('.auth()->id().') order by us.id,a.id',
                //             ['startDate1'=>$startDate,'endDate1'=>$endDate,
                //             'startDate2'=>$startDate,'endDate2'=>$endDate]);
                $leaveReport = DB::select('select concat(us.name," ",us.lastName) as name, us.id,t.team,(select date(a.from_date)) as from_date,
                            (select date(a.to_date)) as to_date, a.leave_length, a.reason, a.leave_type, a.half_day_type, a.status, a.updated_by_user, a.created_at
                            from apply_leaves a
                            join user_details u on a.user_id = u.user_id
                            join teams t on t.id = u.primary_team_id
                            join users us on us.id = u.user_id 
                            where ((a.from_date between :startDate1 and :endDate1)
                            or (a.to_date between :startDate2  and :endDate2)) and 
                                                    us.id = (' . auth()->id() . ') order by us.id,a.id',
                    [
                        'startDate1' => $startDate,
                        'endDate1' => $endDate,
                        'startDate2' => $startDate,
                        'endDate2' => $endDate
                    ]
                );
            }
        }
        $leaveReportColl = collect($leaveReport);
        $leaves = Leave::all();
        $leaveReportTempColl = collect([]);
        $toBeEncodedImages = collect([]);
        foreach ($leaveReportColl as $data) {
            $leave = collect([]);
            $leave->name = $data->name;
            $leave->team = $data->team;
            $leave->reason = $data->reason;
            $leave->from_date = $data->from_date;
            $leave->to_date = $data->to_date;
            $leave->leave_length = $data->leave_length;
            $leave->status = $data->status;
            $leave->gender = $data->gender;
            $leave->updated_by_user = $data->updated_by_user;
            $leave->created_at = $data->created_at;
            $leave->user_id = $data->id;
            if ($data->leave_type == 'full_day') {
                $leave->leave_type = $data->leave_type = "Full Day";
            } else {
                $leave->leave_type = $data->leave_type = "Half Day";
            }
            if ($data->half_day_type == 'second_half') {
                $leave->half_day_type = $data->half_day_type = "Second Half";
            } else
                if ($data->half_day_type == 'first_half') {
                    $leave->half_day_type = $data->half_day_type = "First Half";
                } else {
                    $leave->half_day_type = '---';
                }
            // user_image encoded
        
            $user = User::where(['id' => $leave->user_id])->first();
            if (!empty($user->profile_pic)) {
                $user_image = url('storage/' . $user->profile_pic);
            } else {
                if ($leave->gender == 'Male') {
                    $user_image = url("global_assets/images/favicon_io/default-avatar-boy.png");
                } else {
                    $user_image = url("global_assets/images/favicon_io/default-avatar-girl.jpg");
                }
            }
            $show_image_container = '<span style="width: 110px;"><div class="img-screen"><img src="' . $user_image . '" alt="No Image" style="width:50px;height:50px;overflow:hidden;border-radius: 50%;opacity: 0.8;filter: brightness(80%)"></div></span>';
            $manager = User::where(['id' => $leave->updated_by_user])->first();
            if (!empty($manager)) {
                if (!empty($manager->profile_pic)) {
                    $manager_image = url('storage/' . $manager->profile_pic);
                } else {
                    if (!empty($manager_data) && $manager_data->gender == 'Male') {
                        $manager_image = url("global_assets/images/favicon_io/default-avatar-boy.png");
                    } else {
                        $manager_image = url("global_assets/images/favicon_io/default-avatar-girl.jpg");
                    }
                }
                $show_manager_image_container = '<img src="' . $manager_image . '" alt="No Image" style="width:50px;height:50px;overflow:hidden;border-radius: 50%;opacity: 0.8;filter: brightness(80%)">';
            } else {
                $show_manager_image_container = '';
            }
            $requested_on = Carbon::parse($leave->created_at);
            $requested_on->setTimezone(config('settings.time_zone'));
            $requested_on = $requested_on->format(config('settings.php_date_format'));
            if ($leave->status == 'Approve') {
                $status = 'Approved';
            } else if ($leave->status == 'Reject') {
                $status = 'Rejected';
            } else if ($leave->status == 'Cancel') {
                $status = 'Cancelled';
            } else {
                $status = $leave->status;
            }
            $leaveArr = array(
                "profile_pic" => $show_image_container,
                "name" => $leave->name,
                "team" => $leave->team,
                "leave_type" => $leave->leave_type,
                "half_day_type" => $leave->half_day_type,
                "reason" => $leave->reason,
                "requested_on" => $requested_on,
                "from_date" => Carbon::parse($leave->from_date)->format(Config('settings.php_date_format')),
                "to_date" => Carbon::parse($leave->to_date)->format(Config('settings.php_date_format')),
                "leave_length" => $leave->leave_length,
                "status" => $status,
                "manager" => $show_manager_image_container . ' ' . User::where(['id' => $leave->updated_by_user])->pluck('name')->first() . ' ' . User::where(['id' => $leave->updated_by_user])->pluck('lastName')->first(),
            );
            $leaveReportTempColl->push($leaveArr);
            $checkOutDate = null;
            $checkInDate = null;
            $toBeEncodedImages->push($user_image);
        }
        $leaveReportColl = collect([]);
        $leaveReportColl = $leaveReportTempColl;
        $teams = Team::all();
        $startDate = Carbon::parse($startDate)->format(Config('settings.php_date_format'));
        $endDate = Carbon::parse($endDate)->format(Config('settings.php_date_format'));
        return view('administrationForms.LeavePolicy.LeaveReport.adminLeaveReportTable', compact('leaveReportColl', 'columnHeaders', 'startDate', 'endDate', 'leaves', 'toBeEncodedImages'));
    }
    public function editapplyleave(Request $request, $id)
    {
        $leaves = Leave::all();
        $title = '/Manage/Manage Leave';
        $applyleave = ApplyLeave::where('id', '=', $id)->first();
        $user = User::where('id', '=', $applyleave->user_id)->first();
        $name = $user->name . ' ' . $user->lastName;
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        return view('leave.editleaveform', compact('title', 'leaves', 'name', 'applyleave', 'val', 'valTeam', 'valUser'));
    }
    public function updatemanageleave(Request $request)
    {
        $leaveId = $request->leaveId;
        $leaveName = $request->leaveName;
        $status = $request->leavestatus;
        $leave = ApplyLeave::where('id', '=', $leaveId)->first();
        $user_id = $leave->user_id;
        $user = User::where('id', '=', $user_id)->first();
        $leaveBalance = LeaveHelper::getEntitlementLeave($user_id, $leaveName);
        if ($request->has('approver_comments')) {
            $approver_comments = $request->approver_comments;
        } else {
            $approver_comments = null;
        }
        if ($leaveBalance <= 0 && LeaveHelper::checkTotalLeaves($request->leaveName)) {
            return response()->json(['status' => 422, 'message' => 'Not sufficient balance', 'leaveBalance' => $leaveBalance]);
        }
        if ($leave->from_date == $leave->to_date) {
            $leave_days = Carbon::parse($leave->from_date)->format('jS M Y');
        } else {
            $leave_days = Carbon::parse($leave->from_date)->format('jS M Y') . ' to ' . Carbon::parse($leave->to_date)->format('jS M Y');
        }
        $title = "Leave request";
        if ($status == '0') {
            LeaveHelper::updateLeaveBalanceOnCancelling($leave->leave_id, $leave->leave_length, $user_id);
            $status = 'Reject';
            $rejected_leave = new RejectedLeave();
            $rejected_leave->from_date = $leave->from_date;
            $rejected_leave->to_date = $leave->to_date;
            $rejected_leave->reason = $leave->reason;
            $rejected_leave->is_process = 'true';
            $rejected_leave->user_id = $leave->user_id;
            $rejected_leave->leave_id = $leave->leave_id;
            $rejected_leave->leave_length = $leave->leave_length;
            $rejected_leave->leave_type = $leave->leave_type;
            $rejected_leave->half_day_type = $leave->half_day_type;
            $rejected_leave->approver_comments = $approver_comments;
            $rejected_leave->save();
            $leave->delete();
            $message = 'Your leave request for ' . $leave_days . ' has been rejected due to ' . $approver_comments;
            $collaboratorMessage = $user->name . ' ' . $user->lastName . "'s leave request for " . $leave_days . ' has been rejected due to ' . $approver_comments . ' by ' . auth()->user()->name . ' ' . auth()->user()->lastName;
            $msg = 'Leave rejected successfully';
            Session::flash('warning', 'Leave rejected successfully!');
        } else {
            $status = 'Approve';
            if ($leave->leave_id != $leaveName) {
                LeaveHelper::updateLeaveBalanceOnAdminCancelling($user_id, $leave->leave_id, $leave->leave_length);
                LeaveHelper::updateUserLeaveBalance($user_id, $leaveName, $leave->leave_length);
                $leave->leave_id = $leaveName;
            }
            $leave->status = 'Approve';
            $leave->is_process = 'true';
            $leave->updated_by_user = Auth::user()->id;
            $leave->save();
            $message = 'Your leave request for ' . $leave_days . ' has been approved';
            $collaboratorMessage = $user->name . ' ' . $user->lastName . "'s leave request for " . $leave_days . ' has been approved by ' . auth()->user()->name . ' ' . auth()->user()->lastName;
            $msg = 'Leave approved successfully';
            Session::flash('success', 'Leave approved successfully!');
        }
        $actionUrl = 'apply-leave.index';
        $arr = null;
        $arr = [$title, $message, $actionUrl];
        $user->notify(new AppNotifications($arr));
        //get collaborators
        $collaborators = userRequestCollaborator::where('module', 'leave')
            ->where('context_id', $leaveId)
            ->pluck('user_id')->toArray();
        //primary reporting manager
        $primaryReportingManagerId = $user->userdetail->primary_reporting_manager_id;
        $collArr = [$title, $collaboratorMessage, null];
        if (!empty($collaborators)) {
            if (in_array(auth()->user()->id, $collaborators)) {
                foreach ($collaborators as $collaborator) {
                    $collaboratorUser = User::where('id', $collaborator)->first();
                    //send notification to all collaborators
                    if (auth()->user()->id != $collaborator) {
                        $collaboratorUser->notify(new AppNotifications($collArr));
                    }
                }
            } else {
                foreach ($collaborators as $collaborator) {
                    $collaboratorUser = User::where('id', $collaborator)->first();
                    //send notification to all collaborators
                    $collaboratorUser->notify(new AppNotifications($collArr));
                }
            }
        }
        //check if user has primary reporting manager
        if ($primaryReportingManagerId != 0 || $primaryReportingManagerId != NULL) {
            $primary_manger = User::where('id', $primaryReportingManagerId)->first();
            if ($primaryReportingManagerId != Auth::user()->id) {
                $primary_manger->notify(new AppNotifications($collArr));
            }
        }
        //secondary reporting managers
        $secondaryManagers = $user->userdetail->secondaryManager;
        if (!empty($secondaryManagers)) {
            foreach ($secondaryManagers as $secondaryManager) {
                if ($primaryReportingManagerId != $secondaryManager->id && $secondaryManager->id != Auth::user()->id && !in_array($secondaryManager->id, $collaborators)) {
                    $secondaryManager->notify(new AppNotifications($collArr));
                }
            }
        }
        if ($status == 'Reject') {
            return redirect()->route('home');
        } else {
            return response()->json(['status' => 422, 'message' => $msg, 'leaveBalance' => 1]);
        }
    }
    public function getUser(Request $request)
    {
        $team = $request->team;
        $data = '<option value="0" selected="">Select Employee</option>';
        if ($team == 'Select Team' || $team == 'All') {
            if (auth()->user()->can('View All Leave Report')) {
                $users = User::all();
                foreach ($users as $user) {
                    $data .= '<option value="' . $user->id . '">' . $user->name . ' ' . $user->lastName . '</option>';
                }
            } else {
                $teams = GetShiftDetailHelper::getMyteams();
                foreach ($teams as $value) {
                    $users = User::select('users.name', 'users.lastName', 'users.id')
                        ->leftJoin('user_details', 'users.id', '=', 'user_details.user_id')
                        ->where('user_details.primary_team_id', '=', $value->id)
                        ->get();
                    foreach ($users as $user) {
                        $data .= '<option value="' . $user->id . '">' . $user->name . ' ' . $user->lastName . '</option>';
                    }
                }
            }
        } else {
            $teams = Team::where('team', '=', $team)->first();
            $users = User::select('users.name', 'users.lastName', 'users.id')
                ->leftJoin('user_details', 'users.id', '=', 'user_details.user_id')
                ->where('user_details.primary_team_id', '=', $teams->id)
                ->get();
            foreach ($users as $user) {
                $data .= '<option value="' . $user->id . '">' . $user->name . ' ' . $user->lastName . '</option>';
            }
        }
        return response()->json(['status' => 200, 'optionData' => $data]);
    }
}