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 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 391
ApplyLeaveController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
8010
0.00% covered (danger)
0.00%
0 / 391
 index
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 14
 create
0.00% covered (danger)
0.00%
0 / 1
812
0.00% covered (danger)
0.00%
0 / 121
 store
0.00% covered (danger)
0.00%
0 / 1
756
0.00% covered (danger)
0.00%
0 / 117
 storeApi
0.00% covered (danger)
0.00%
0 / 1
342
0.00% covered (danger)
0.00%
0 / 83
 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
6
0.00% covered (danger)
0.00%
0 / 10
 destroy
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 getLeaveCount
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 8
 checkLeaveexists
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 33
<?php
namespace App\Http\Controllers\Leave;
use App\Http\Controllers\FirebaseController\FirebaseCloudMessaging;
use App\Helpers\LeaveLogHelper;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\Leave;
use App\Models\Auth\User;
use App\Models\Auth\UserWeeklyOff;
use App\Models\Leave\ApplyLeave;
use App\Models\Leave\LeaveEntitlement;
use App\Models\Admin\Weekend;
use Illuminate\Support\Facades\Validator;
use Session;
use Carbon\Carbon;
use Auth;
use DB;
use Illuminate\Support\Facades\Log;
//use App\Models\NotificationModel\NotificationList;
use App\Notifications\ApplyLeaveNotifications;
use App\Models\Admin\Holiday;
use App\Helpers\HolidayHelper;
use App\Helpers\LeaveHelper;
use App\Helpers\AttendanceHelper;
use App\Models\Schedule\ScheduleDetail;
use App\Models\Admin\UserDetail;
use App\Models\Admin\UserDetailUser;
use App\Models\Admin\Team;
use Gate;
class ApplyLeaveController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $title = '/Leave/Leave Report';
        $leave = ApplyLeave::orderBy('created_at', 'DESC')->get();
        $currentYear = Carbon::now()->year;
        $data = DB::table("apply_leaves")
            ->join("leaves", "leaves.id", "=", "apply_leaves.leave_id")
            ->select("apply_leaves.id as apply_leave_id", "apply_leaves.*", "leaves.*")
            ->whereRaw('year(from_date) = ?', [$currentYear])
            ->orwhereRaw('year(to_date) = ?', [$currentYear])
            ->orderByDesc('apply_leaves.created_at')
            ->get();
        // For returning attendance marking for home controller
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        return view('leave.applyLeaveTable', compact('title', 'leave', 'data', 'val', 'valTeam', 'valUser'));
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $requestType = $request->requestType;
        $title = '/Leave/Apply Leave';
        $leaves = Leave::all();
        $user = Auth::user();
        // $BeforeDays = Leave::where('name', 'Casual Leave - Paid')
        //     ->value('applied_before');
        // if ($BeforeDays != null) {
        //     $appliedBeforeDays = $BeforeDays;
        // } else {
        //     $appliedBeforeDays = null;
        // }
        $applyBeforeDays = Leave::where('system_generated', '!=', 1)->get();
        foreach ($applyBeforeDays as $applyBeforeDay) {
            $beforeDayId[] = ['id'=>$applyBeforeDay->id, 'number'=>$applyBeforeDay->applied_before];
        }
        foreach ($applyBeforeDays as $applyBeforeDay) {
            $beforeDayNumber[] = [$applyBeforeDay->applied_before];
        }
        //user on weekend
        $weekendday = array();
        $userAttendanceSelfService = [];
        $userInfo = UserDetail::where('user_id', Auth()->user()->id)->first();
        if (!empty($userInfo)) {
            $userAttendanceSelfService = $userInfo->attendanceRequests->where('name', 'Self Service');
        }
        // if (Gate::check('Super Admin')) {
           if (!count($userAttendanceSelfService) > 0){ 
            //dd("1");
            $propertiesWithValueone = null;
            $propertiesWithValueZero = null;
            $nestedData = null;
        } else {
            $userdetails = UserDetail::where('user_id', $user->id)->select('id', 'user_id', 'primary_reporting_manager_id')->get();
            foreach ($userdetails as $userdetail) {
                $id = $userdetail->id;
                $userid = $userdetail->user_id;
                $primary_reporting_manager_id = $userdetail->primary_reporting_manager_id;
                $matchingUserIds[$userid] = UserDetailUser::where('user_detail_id', $id)
                    ->pluck('user_id')
                    ->toArray();
                if (isset($matchingUserIds[$userid])) {
                    $matchingUserIds[$userid] = User::whereIn('id', $matchingUserIds[$userid])
                        ->pluck('name', 'id')
                        ->toArray();
                }
            }
            $names = array_values($matchingUserIds[$userid]);
            // dd($names);
            if (count($names) == 2) {
                $managerNames = '<b>' . $names[0] . '</b>/' . $names[1];
            } elseif (count($names) > 2) {
                $limitedNames = array_slice($names, 0, 2);
                $managerNames = '<b>' . $limitedNames[0] . '</b>/' . $limitedNames[1] . '<b >/..</b>';
            } elseif (count($names) == 1) {
                $managerNames = $names[0];
            } else {
                $managerNames = '';
            }
            $nestedData = json_encode($names);
            if (!empty($user->userdetail->shifts)) {
                $teamId = $user->userdetail->primary_team_id;
                $team = Team::find($teamId);
                if ($team->has_schedule == 1) {
                    $shift = ScheduleDetail::where('user_id', $user->id)->latest()->first();
                    if ($shift) {
                        $propertiesWithValueone = "";
                        $date = $shift->created_at;
                        $details = ScheduleDetail::where('user_id', $user->id)
                            ->whereDate('created_at', $date)
                            ->where('is_active', 1)
                            ->where(function ($query) {
                                $query->where('mon', 1)
                                    ->orWhere('tue', 1)
                                    ->orWhere('wed', 1)
                                    ->orWhere('thu', 1)
                                    ->orWhere('fri', 1)
                                    ->orWhere('sat', 1)
                                    ->orWhere('sun', 1);
                            })
                            ->get();
                        //->orderBy('created_at','DESC')->get();
                        $combinedValues = [];
                        // through each schedule detail in the collection
                        foreach ($details as $scheduleDetail) {
                            // Loop through each property and update the combined values array
                            foreach ($scheduleDetail->getAttributes() as $property => $value) {
                                // If the property is not set in the combined values array, set it to the current value
                                if (!isset($combinedValues[$property])) {
                                    $combinedValues[$property] = $value;
                                }
                                // If the property is set in the combined values array and the current value is 1, update it to 1
                                elseif ($value === 1) {
                                    $combinedValues[$property] = 1;
                                }
                            }
                        }
                        $propertiesWithValueZero = [];
                        foreach ($combinedValues as $property => $value) {
                            // Check if the value is 0
                            if ($value === 0) {
                                $propertiesWithValueZero[] = $property;
                            }
                        }
                        
                        if($requestType=="api"){
                            return json_encode([
                                "weekends" =>$propertiesWithValueZero, 
                            ]);
                        }
                    }
                    else{
                        $propertiesWithValueZero[] = 0;
                        $propertiesWithValueone[] = 0;
                    }
                    
                } else {
                    $propertiesWithValueZero = "";
                    $weekend = $user->userdetail->shifts[0]->weekend;
                    $weekendAttributes = [
                        'mon' => $weekend->monday,
                        'tue' => $weekend->tuesday,
                        'wed' => $weekend->wednesday,
                        'thu' => $weekend->thursday,
                        'fri' => $weekend->friday,
                        'sat' => $weekend->saturday,
                        'sun' => $weekend->sunday,
                    ];
                    $propertiesWithValueone = [];
                    foreach ($weekendAttributes as $property => $value) {
                        if ($value === 1) {
                            $propertiesWithValueone[] = $property;
                            
                        }
                    }
                    
                    if($requestType=="api"){
                        return json_encode([
                            "weekends" =>$propertiesWithValueone, 
                        ]);
                    }
                }
                // if (!empty($weekend) && isset($weekend))
                // {
                //         if ($weekend['monday'] == 1) {
                //             array_push($weekendday, '1');
                //         }
                //         if ($weekend['tuesday'] == 1) {
                //             array_push($weekendday, '2');
                //         }
                //         if ($weekend['wednesday'] == 1) {
                //             array_push($weekendday, '3');
                //         }
                //         if ($weekend['thursday'] == 1) {
                //             array_push($weekendday, '4');
                //         }
                //         if ($weekend['friday'] == 1) {
                //             array_push($weekendday, '5');
                //         }
                //         if ($weekend['saturday'] == 1) {
                //             array_push($weekendday, '6');
                //         }
                //         if ($weekend['sunday'] == 1) {
                //             array_push($weekendday, '0');
                //         }
                // }
            }
        }
        $holidayIds = HolidayHelper::getholidayList($user->id);
        //dd($holidayIds);
        $currentYear = Carbon::now(config('settings.time_zone'))->format('Y');
        //get holdays for current year
        $getHolidays = Holiday::whereYear('date', $currentYear)->whereIn('id', $holidayIds)->get();
        $holidays = [];
        foreach ($getHolidays as $holiday) {
            $holidays[] = $holiday->date;
        }
        //dd($holidays);
        //leave balance
        $leaveBalances = [];
        foreach ($leaves as $leave) {
            if($leave->status === '0'){
                $leaveEntitlementQuery = array(
                    'user_id' => Auth::user()->id,
                    'year' => Carbon::now(config('settings.time_zone'))->year,
                    'leave_id' => $leave->id
                );
                $leaveEntitlementArr = LeaveEntitlement::where($leaveEntitlementQuery)->get();
                $leaveBalance = null;
                foreach ($leaveEntitlementArr as $leaveEntitlement) {
                    $leaveBalance = $leaveEntitlement->leave_balance;
                }
                if ($leaveBalance == null) {
                    $leaveBalance = 0;
                }
                $leaveBalances[] = array(
                    'id' => $leave->id,
                    'name' => $leave->name,
                    'abbr' => $leave->abbr,
                    'leave_balance' => $leaveBalance,
                    'n_days' => $leave->n_days,
                    'leave_allocation_type' => $leave->leave_allocation_type
                );
                //dd($leaveBalances);
            }
        }
        // For returning attendance marking for home controller
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        return view('leave.applyLeaveForm', compact('leaves', 'nestedData', 'propertiesWithValueZero', 'propertiesWithValueone', 'title', 'holidays', 'weekendday', 'leaveBalances', 'val', 'valTeam', 'valUser','beforeDayNumber','beforeDayId'));
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $requestType = $request->requestType;
        // $from_date = Carbon::parse($request->from_date ,'UTC');
        // $f = $from_date->format('Y-m-d');
        // $to_date = Carbon::parse($request->to_date ,'UTC');
        // $t = $to_date->format('Y-m-d');
        // $request->request->add(['f' =>$f ]);
        // $request->request->add(['t' =>$t ]);
        $today = Carbon::now(config('settings.time_zone'));
        $to_date = '';
        $from_date = '';
        if ($request->from_date) {
            $from_date = Carbon::parse(Carbon::createFromFormat(config('settings.php_date_format'), $request->from_date))->format('Y-m-d');
        }
        if ($request->from_date) {
            $to_date = Carbon::parse(Carbon::createFromFormat(config('settings.php_date_format'), $request->to_date))->format('Y-m-d');
        }
        $t = $to_date;
        $f = $from_date;
        $request->request->add(['f' => $f]);
        $request->request->add(['t' => $t]);
        if ($request->leavetype == 'full_day') {
            $validator = Validator::make($request->all(), [
                'reason' => 'required',
                'spoken_to' => 'required',
                'f' => 'required|unique:apply_leaves,from_date,' . $f . ',id,user_id,' . Auth::user()->id,
                't' => 'required|unique:apply_leaves,to_date,' . $t . ',id,user_id,' . Auth::user()->id,
            ]);
        } else {
            $validator = Validator::make($request->all(), [
                'reason' => 'required',
                'spoken_to' => 'required',
                // 'f' => 'required|unique:apply_leaves,from_date,' . $f . ',id,user_id,' . Auth::user()->id,
                'f' => 'required|unique:apply_leaves,half_day_type,' . $f . ',id,user_id,' . Auth::user()->id,
                'halfDayType' => 'required'
            ]);
        }
        if ($validator->fails()) {
            if ($validator->messages()->has('reason')) {
                if($requestType=="api"){
                    return json_encode(["warning" => "Reason field is required"]);
                }
                Session::flash('warning', 'Reason field is required');
            } else if ($validator->messages()->has('halfDayType')) {
                if($requestType=="api"){
                    return json_encode(["warning" => "Duration field is required"]);
                }
                Session::flash('warning', 'Duration field is required');
            } else {
                if($requestType=="api"){
                    return json_encode(["warning" => "Already Taken Leave On This Date!"]);
                }
                Session::flash('warning', 'Already Taken Leave On This Date!');
            }
            return redirect()->route('apply-leave.create')->withErrors($validator)->with('hideModal', true);
        } else {
            $leaveBalance = LeaveHelper::getEntitlementLeave(Auth::user()->id, $request->leave_id);
            if ($request->leavetype == 'full_day') {
                if ($leaveBalance < $request->leave_length && LeaveHelper::checkTotalLeaves($request->leave_id)) {
                    if($requestType=="api"){
                        return json_encode(["warning" => " Not Enough Leave Balance!","leave_bal" => $leaveBalance]);
                    }
                    Session::flash('warning', ' Not Enough Leave Balance!');
                    return redirect()->route('apply-leave.create')->with('hideModal', true);
                }
            }
            else{
                if ($leaveBalance < 0.5 && LeaveHelper::checkTotalLeaves($request->leave_id)) {
                    if($requestType=="api"){
                        return json_encode(["warning" => " Not Enough Leave Balance!","leave_bal" => $leaveBalance]);
                    }
                    Session::flash('warning', ' Not Enough Leave Balance!');
                    return redirect()->route('apply-leave.create')->with('hideModal', true);
                }
            }  
            $leave = new ApplyLeave();
            //$leave->from_date = Carbon::parse($request->from_date ,'UTC');
            //$leave->from_date = $leave->from_date->format('Y-m-d');
            $leave->from_date = $from_date;
            if ($request->leavetype == 'full_day') {
                //$leave->to_date = Carbon::parse($request->to_date ,'UTC');
                //$leave->to_date = $leave->to_date->format('Y-m-d');
                $leave->to_date = $to_date;
            } else {
                $leave->to_date = $leave->from_date;
            }
            $leave->leave_length = $request->leave_length;
            $leave->leave_type = $request->leavetype;
            $leave->half_day_type = $request->halfDayType;
            if ($leave->leave_type == "half_day") {
                $leave->leave_length = 0.5;
                $leave_type = "Half Day";
            }
            if ($leave->leave_type == "full_day") {
                $leave->half_day_type = null;
                $leave_type = "Full Day";
            }
            $leave->reason = $request->reason;
            $leave->spoken_to = $request->spoken_to;
            $leave->is_process = 'false';
            $leave->status = 'Pending';
            $leave->user_id = Auth::user()->id;
            $leave->leave_id = $request->leave_id;
            $leave->save();
            LeaveHelper::updateLeaveBalance($leave->leave_id, $leave->leave_length);
            $leaveLog = new LeaveLogHelper;
            $leaveLog->updateLeaveLog($leave->leave_length,"SUBTRACTED",$leave->user_id,$leave->leave_id, $leave->reason,null);
        
            //get user team
            $user = Auth::user();
            // $userAttendanceTeam =$user->userdetail->teams;
            // foreach($userAttendanceTeam as $userTeam)
            // {
            //     $userInTeam = $userTeam->team;
            // }
            //primary team name
            $userInTeam = $user->userdetail->primaryTeamName->team;
            $user = User::find(Auth::user()->id);
            //title and message for app notifications 
            $title = "Leave Request";
            $message = $leave_type . " requested by " . $user->name . ' ' . $user->lastName;
            $actionUrl = 'leave-report.index';
            //mail notifications
            $subjectLine = 'AMS Notification : ' . $leave_type . " Leave requested by " . $user->name . ' ' . $user->lastName . ' for ' . $request->from_date;
            $mailArr = null;
            if ($leave->leave_type == "full_day") {
                $mailArr = [
                    $subjectLine,
                    $userInTeam,
                    $user->name . ' ' . $user->lastName,
                    $leave_type,
                    $request->from_date,
                    $request->to_date,
                    $title,
                    $message,
                    $actionUrl
                ];
            } else {
                $mailArr = [
                    $subjectLine,
                    $userInTeam,
                    $user->name . ' ' . $user->lastName,
                    $leave_type,
                    ucwords(str_replace("_", " ", $leave->half_day_type)),
                    $request->from_date,
                    $title,
                    $message,
                    $actionUrl
                ];
            }
            //primary reporting manager
            $primary_reporting_manager_id = $user->userdetail->primary_reporting_manager_id;
            //secondary reporting manager
            $secondaryManagers = $user->userdetail->secondaryManager;
            if ($primary_reporting_manager_id != 0) {
                //primary reporting manager
                $primary_reporting_manager = User::find($primary_reporting_manager_id);
            //check if user is exists  
            if(!empty($primary_reporting_manager)){
            //mail notification
            $primary_reporting_manager->notify(new ApplyLeaveNotifications($mailArr));
            $firebaseObject = new FirebaseCloudMessaging();
            $firebaseObject->sendFirebaseNotification($title,$message,$primary_reporting_manager->id);
            }
        }
        //secondary reporting managers
        if (count($user->userdetail->secondaryManager) > 0) {
            foreach ($user->userdetail->secondaryManager as $secondaryManager) {
                if ($primary_reporting_manager_id != $secondaryManager->id){
                
                //mail notification
                $secondaryManager->notify(new ApplyLeaveNotifications($mailArr));
                $firebaseObject = new FirebaseCloudMessaging();
                $firebaseObject->sendFirebaseNotification($title,$message,$secondaryManager->id);
                } 
            }
        }
        if($requestType=="api"){
            return json_encode(["success" => "Leave Submit Successfully!"]);
        }
            Session::flash('success', 'Leave Submit Successfully!');
            return redirect()->back();
        }
    }
    public function storeApi(Request $request)
    {
        //Session::flash('warning', 'Reason field is required');
        // $from_date = Carbon::parse($request->from_date ,'UTC');
        // $f = $from_date->format('Y-m-d');
        // $to_date = Carbon::parse($request->to_date ,'UTC');
        // $t = $to_date->format('Y-m-d');
        // $request->request->add(['f' =>$f ]);
        // $request->request->add(['t' =>$t ]);
        $today = Carbon::now(config('settings.time_zone'));
        $to_date= ''; $from_date='';
        if($request->from_date){
            $from_date = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->from_date ) )->format('Y-m-d');
        }
        if($request->to_date){
            $to_date = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->to_date ) )->format('Y-m-d');
        }
        $t = $to_date;  $f = $from_date;
        $request->request->add(['f' =>$f ]);
        $request->request->add(['t' =>$t ]);
        if($request->leavetype == 'full_day'){
            $validator = Validator::make($request->all(), [
                'reason' => 'required',
                'f' => 'required|unique:apply_leaves,from_date,' . $f . ',id,user_id,' . Auth::user()->id,
                't' => 'required|unique:apply_leaves,to_date,' . $t . ',id,user_id,' . Auth::user()->id,
            ]);
        }else{
            $validator = Validator::make($request->all(), [
                'reason' => 'required',
                'f' => 'required|unique:apply_leaves,from_date,' . $f . ',id,user_id,' . Auth::user()->id,
                'halfDayType' => 'required' ]);
        }
        if ($validator->fails())
        {
            $status = "";
            $warning = "";
            if ($validator->messages()->has('reason'))
            {
                $status = "200";
                $warning = "Reason field is required";
            }else if($validator->messages()->has('halfDayType')){
                $status = "200";
                $warning = "Duration field is required";
            }else{
                $status = "200";
                $warning = "Already Taken Leave On This Date!";
            }
            return json_encode([
                "status" => $status,
                "message" => $warning
            ]);
        }
        else
        {
            $leaveBalance= LeaveHelper::getEntitlementLeave(Auth::user()->id,  $request->leave_id);
            if($leaveBalance < $request->leave_length && LeaveHelper::checkTotalLeaves($request->leave_id)){
                return json_encode([
                    "status" => "200",
                    "message" => "Not Enough Leave Balance"
                ]);
            }
            $leave = new ApplyLeave();
            //$leave->from_date = Carbon::parse($request->from_date ,'UTC');
            //$leave->from_date = $leave->from_date->format('Y-m-d');
            $leave->from_date = $from_date;
            if($request->leavetype == 'full_day'){
                //$leave->to_date = Carbon::parse($request->to_date ,'UTC');
                //$leave->to_date = $leave->to_date->format('Y-m-d');
                $leave->to_date = $to_date;
            }else{
                $leave->to_date =  $leave->from_date;
            }
            $leave->leave_length = $request->leave_length;
            $leave->leave_type = $request->leavetype;
            $leave->half_day_type = $request->halfDayType;
            if($leave->leave_type == "half_day")
            {
                $leave->leave_length = 0.5;
                $leave_type = "Half Day";
            }
            if($leave->leave_type == "full_day")
            {
                $leave->half_day_type = null;
                $leave_type = "Full Day";
            }
            $leave->reason = $request->reason;
            $leave->is_process = 'false';
            $leave->status = 'Pending';
            $leave->user_id = Auth::user()->id;
            $leave->leave_id = $request->leave_id;
            $leave->save();
            LeaveHelper::updateLeaveBalance($leave->leave_id ,$leave->leave_length);
            //get user team
            $user = Auth::user();
            // $userAttendanceTeam =$user->userdetail->teams;
            // foreach($userAttendanceTeam as $userTeam)
            // {
            //     $userInTeam = $userTeam->team;
            // }
            //primary team name
            $userInTeam = $user->userdetail->primaryTeamName->team;
            $user = User::find(Auth::user()->id);
            //title and message for app notifications
            $title = "Leave Request";
            $message = $leave_type." requested by ".$user->name . ' ' . $user->lastName;
            $actionUrl = 'leave-report.index';
            //mail notifications
            $subjectLine = 'AMS Notification : '.$leave_type." Leave requested by ".$user->name . ' ' . $user->lastName.' for '.$request->from_date;
            $mailArr = null;
            if($leave->leave_type == "full_day")
            {
                $mailArr = [$subjectLine, $userInTeam, $user->name.' '. $user->lastName,
                    $leave_type ,$request->from_date, $request->to_date,$title,
                    $message,$actionUrl];
            }else{
                $mailArr = [$subjectLine, $userInTeam, $user->name.' '. $user->lastName,
                    $leave_type ,ucwords(str_replace("_", " ", $leave->half_day_type)),
                    $request->from_date,$title,
                    $message,$actionUrl];
            }
//
            //primary reporting manager
            $primary_reporting_manager_id = $user->userdetail->primary_reporting_manager_id;
            //secondary reporting manager
            $secondaryManagers = $user->userdetail->secondaryManager;
            if ($primary_reporting_manager_id != 0) {
                //primary reporting manager
                $primary_reporting_manager = User::find($primary_reporting_manager_id);
                //check if user is exists
                if(!empty($primary_reporting_manager)){
                    //mail notification
                    //           $primary_reporting_manager->notify(new ApplyLeaveNotifications($mailArr));
                }
            }
            //secondary reporting managers
            if (count($user->userdetail->secondaryManager) > 0) {
                foreach ($user->userdetail->secondaryManager as $secondaryManager) {
                    if ($primary_reporting_manager_id != $secondaryManager->id){
                        //mail notification
                        //                 $secondaryManager->notify(new ApplyLeaveNotifications($mailArr));
                    }
                }
            }
            return json_encode([
                "status" => "200",
                "message" => "success"
            ]);
        }
    }
    /**
     * 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)
    {
        $leaves = ApplyLeave::find($id);
        $leaves->is_process = 'true';
        $leaves->update($request->all());
        LeaveHelper::updateLeaveBalanceOnCancelling($leaves->status, $leaves->leave_id, $leaves->leave_length);
        $leaveLog = new LeaveLogHelper;
        $leaveLog->updateLeaveLog($leaves->leave_length,"ADDED",$leaves->user_id,$leaves->leave_id,"Cancelled Leave",null);
        if($requestType=="api"){
            return json_encode(["warning" => "Leave Cancelled Successfully!"]);
        }
        Session::flash('warning', 'Leave Cancelled Successfully!');
        return redirect()->route('apply-leave.index')->withErrors($this);
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $leave = ApplyLeave::find($id);
        $leave->delete();
        return redirect()->route('apply-leave.index')->with('success', 'Leave Deleted Successfully');
    }
    public function getLeaveCount(Request $request)
    {
        if (isset($request->user_id)) {
            $leaveBalance = LeaveHelper::getEntitlementLeave($request->user_id, $request->leaveId);
        } else {
            $leaveBalance = LeaveHelper::getEntitlementLeave(Auth::user()->id, $request->leaveId);
        }
        //get leave
        $leave = Leave::find($request->leaveId);
       
        return response()->json([
            'leaveBalance' => $leaveBalance,
            'totalLeaves' => $leave->n_days,
            'leave_allocation_type' => $leave->leave_allocation_type
        ]);
    }
//     public function checkLeaveexists(Request $request)
//     {
//         $fromdate = Carbon::parse(Carbon::createFromFormat(config('settings.php_date_format'), $request->from_date))->format('Y-m-d');
//         $todate = Carbon::parse(Carbon::createFromFormat(config('settings.php_date_format'), $request->to_date))->format('Y-m-d');
//         if (isset($request->userId)) {
//             $userid = $request->userId;
//         } else {
//             $userid = Auth::user()->id;
//         }
//         $halfdaytype = $request->halfdaytype;
//         $dates = array();
//         $current = strtotime($fromdate);
//         $date2 = strtotime($todate);
//         $stepVal = '+1 day';
//         while ($current <= $date2) {
//             $dates[] = date('Y-m-d', $current);
//             $current = strtotime($stepVal, $current);
//         }
//         foreach ($dates as $value) {
//             $applyleaves = ApplyLeave::where('user_id', '=', $userid)
//                 ->where('from_date', '<=', $value)
//                 ->where('to_date', '>=', $value)
//                 ->get();
//             if($applyleaves != null && $applyleaves->leave_type == "half_day"){
//                 $dayType = $applyleaves->half_day_type;
//                 dd($dayType);
//                 if($dayType == $halfdaytype){
//                 $value = Carbon::parse($value)->format(config('settings.php_date_format'));
                
//                     return response()->json([
//                         'status' => '100',
//                         'message' => 'Already Taken Leave On ' . $dayType . ' of ' . $value
//                     ]);
//                 }    
//             }
//             if (isset($applyleaves) && !empty($applyleaves) && $applyleaves->leave_type == "full_day") {
//                 $value = Carbon::parse($value)->format(config('settings.php_date_format'));
//                 return response()->json([
//                     'status' => '100',
//                     'message' => 'Already Taken Leave On ' . $value
//                 ]);
//             }
//         }
//         return response()->json([
//             'status' => '200',
//             'message' => 'success'
//         ]);
//     }
public function checkLeaveexists(Request $request)
{
    $fromdate = Carbon::parse(Carbon::createFromFormat(config('settings.php_date_format'), $request->from_date))->format('Y-m-d');
    $todate = Carbon::parse(Carbon::createFromFormat(config('settings.php_date_format'), $request->to_date))->format('Y-m-d');
    if (isset($request->userId)) {
        $userid = $request->userId;
    } else {
        $userid = Auth::user()->id;
    }
    $halfdaytype = $request->halfdaytype;
    $dates = array();
    $current = strtotime($fromdate);
    $date2 = strtotime($todate);
    $stepVal = '+1 day';
    while ($current <= $date2) {
        $dates[] = date('Y-m-d', $current);
        $current = strtotime($stepVal, $current);
    }
    foreach ($dates as $value) {
        $applyleaves = ApplyLeave::where('user_id', '=', $userid)
            ->where('from_date', '<=', $value)
            ->where('to_date', '>=', $value)
            ->get();
        foreach ($applyleaves as $applyleave) {
            if ($applyleave->leave_type == "half_day") {
                $dayType = $applyleave->half_day_type;
                if ($dayType == $halfdaytype) {
                    $value = Carbon::parse($value)->format(config('settings.php_date_format'));
                    return response()->json([
                        'status' => '100',
                        'message' => 'Already Taken Leave On ' . $dayType . ' of ' . $value
                    ]);
                }
            }
            if ($applyleave->leave_type == "full_day") {
                $value = Carbon::parse($value)->format(config('settings.php_date_format'));
                return response()->json([
                    'status' => '100',
                    'message' => 'Already Taken Leave On ' . $value
                ]);
            }
        }
    }
    return response()->json([
        'status' => '200',
        'message' => 'success'
    ]);
}
}