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 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 134
CompOffLeaveReportController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 8
930
0.00% covered (danger)
0.00%
0 / 134
 index
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 16
 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
132
0.00% covered (danger)
0.00%
0 / 58
 updateFromHomePage
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 55
 destroy
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
<?php
namespace App\Http\Controllers\Leave;
use App\Http\Controllers\FirebaseController\FirebaseCloudMessaging;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Leave\ApplyLeave;
use App\Models\Leave\RejectedLeave;
use App\Models\Leave\LeaveEntitlement;
use App\Models\Auth\User;
use Session;
use Auth;
use DB;
use Carbon\Carbon;
use App\Notifications\AppNotifications;
use GetShiftDetailHelper;
use App\Models\Auth\userRequestCollaborator;
use App\Models\Auth\UserRequestDiscuss;
use App\Helpers\LeaveHelper;
use App\Models\Leave\CompOffLeave;
use App\Models\Admin\Leave;
use App\Models\Leave\RejectedCompOffLeave;
use App\Helpers\AttendanceHelper;
class CompOffLeaveReportController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $title = '/Leave/Approve Comp Off Leave Balance';
        $Appliedleave = [];
        if (auth()->user()->can('View All leave requests')) {
            $compOffleave = CompOffLeave::where('status', 'pending')->whereHas('user', function ($query) {
              $query->whereNull('deleted_at');
            })->orderBy('created_at', 'DESC')->get();
        } else if (auth()->user()->can('View All leave requests of team')) {
            $userIds =  GetShiftDetailHelper::getMyteamMembers();
            $compOffleave = CompOffLeave::whereIn('user_id', $userIds)->where('status', 'pending')->whereHas('user', function ($query) {
             $query->whereNull('deleted_at');
            })->orderBy('created_at', 'DESC')->get();
        } else {
            //View All leave requests of assigned employees
            $userIds =  GetShiftDetailHelper::getMyReportingEmployees();
            $compOffleave = CompOffLeave::whereIn('user_id', $userIds)->where('status', 'pending')->whereHas('user', function ($query) {
             $query->whereNull('deleted_at');
            })->orderBy('created_at', 'DESC')->get();
        }
        // For Attendance Marking
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        return view('administrationForms.LeavePolicy.LeaveReport.CompOffLeaveReportTable', compact('title', 'compOffleave','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)
    {
        $todayDate = Carbon::now(config('settings.time_zone'));
        if ($request->has('approver_comments')) {
            $status = $request->status_reject;
            $approver_comments = $request->approver_comments;
        } else {
            $approver_comments = null;
            $status = $request->status;
            if ($status == '') {
                return redirect()->back()->with('warning', 'Please select status and update');
            }
        }
        $leaves = CompOffLeave::find($id);
        if($leaves->is_future == 'false'){
            $leaves->is_process = 'true';
        } 
        $leaves->approved_date = $todayDate;
        $leaves->update(['status' => $status]);
        
      
        //notification to user
        $user = User::find($leaves->user_id);
        $date = Carbon::parse($leaves->date)->format('jS M Y');
        
        if ($status == 'Approve') {
            $leave_status = 'approved';
        } else if ($status == 'Reject') {
            $leave_status = 'rejected';
        }
        $title = "Leave request";
        if ($request->has('approver_comments') && $status == 'Reject') {
            $rejected_leave = new RejectedCompOffLeave();
            $rejected_leave->date = $leaves->date;
            $rejected_leave->is_process = 'true';
            $rejected_leave->is_future = $leaves->is_future;
            $rejected_leave->user_id = $leaves->user_id;
            $rejected_leave->leave_id = $leaves->leave_id;
            $rejected_leave->approver_comments = $approver_comments;
            $rejected_leave->save();
            $leaves->delete();
            $message = 'Your Comp Off leave for ' . $date . ' has been ' . $leave_status . ' due to ' . $approver_comments;
        }else{
            
            if($leaves->is_future == 'false'){
                $leaveEntitlementFindQuery = array(
                    'user_id' => $user->id,
                    'leave_id' => $leaves->leave_id,
                    'year' => Carbon::now(config('settings.time_zone'))->year
                );
               
                
                $leaveEntitlement = LeaveEntitlement::where($leaveEntitlementFindQuery)->first();
               
                if(isset($leaveEntitlement)) {
                    $leaveEntitlement->leave_balance = 1 + $leaveEntitlement->leave_balance;
                    $leaveEntitlement->save();
                } else {
                    $checkCompOffLeave = Leave::where('id',$leaves->leave_id)->first();
    
                    $leaveEntitlementData = array(
                        'user_id' => $user->id,
                        'leave_id' => $leaves->leave_id,
                        'leave_balance' => 1,
                        'year' => Carbon::now(config('settings.time_zone'))->year,
                        'entitled_leaves' => $checkCompOffLeave->n_days
                    );
                    // return $leaveEntitlementData;
                    LeaveEntitlement::create($leaveEntitlementData);
                }
                $message = 'Your Comp Off leave for ' . $date . ' has been ' . $leave_status;
            }else{
                $message = 'Your Comp Off leave for ' . $date . ' has been ' . $leave_status.'. Leave balance will add,  when mark attendance ';
            }
           
        }
        $actionUrl = 'comp-off-leave-report.index';
        $arr = null;
        $arr = [$title, $message, $actionUrl];
        $user->notify(new AppNotifications($arr));
        $firebaseObject = new FirebaseCloudMessaging();
        $firebaseObject->sendFirebaseNotification($title,$message,$user->id);
        if ($status == 'Approve') {
            Session::flash('success', ' Comp Off Leave Balance Approved Successfully!');
        } else {
            Session::flash('warning', ' Comp Off Leave Balance Rejected Successfully!');
        }
        //return redirect()->route('leave-report.index')->withErrors($this);
        return redirect()->back()->withErrors($this);
    }
    public function updateFromHomePage(Request $request, $id)
    {
        $todayDate = Carbon::now(config('settings.time_zone'));
        if ($request->has('approver_comments')) {
            $status = $request->status_reject;
            $approver_comments = $request->approver_comments;
        } else {
            $approver_comments = null;
            $status = $request->status;
            if ($status == '') {
                return redirect()->back()->with('warning', 'Please select status and update');
            }
        }
        $leaves = CompOffLeave::find($id);
        if($leaves->is_future == 'false'){
            $leaves->is_process = 'true';
        } 
        $leaves->approved_date = $todayDate;
        $leaves->update(['status' => $status]);
        
      
        //notification to user
        $user = User::find($leaves->user_id);
        $date = Carbon::parse($leaves->date)->format('jS M Y');
        
        if ($status == 'Approve') {
            $leave_status = 'approved';
        } else if ($status == 'Reject') {
            $leave_status = 'rejected';
        }
        $title = "Leave request";
        if ($request->has('approver_comments') && $status == 'Reject') {
            $rejected_leave = new RejectedCompOffLeave();
            $rejected_leave->date = $leaves->date;
            $rejected_leave->is_process = 'true';
            $rejected_leave->is_future = $leaves->is_future;
            $rejected_leave->user_id = $leaves->user_id;
            $rejected_leave->leave_id = $leaves->leave_id;
            $rejected_leave->approver_comments = $approver_comments;
            $rejected_leave->save();
            $leaves->delete();
            $message = 'Your Comp Off leave for ' . $date . ' has been ' . $leave_status . ' due to ' . $approver_comments;
        }else{
            
            if($leaves->is_future == 'false'){
                $leaveEntitlementFindQuery = array(
                    'user_id' => $user->id,
                    'leave_id' => $leaves->leave_id,
                    'year' => Carbon::now(config('settings.time_zone'))->year
                );
               
                
                $leaveEntitlement = LeaveEntitlement::where($leaveEntitlementFindQuery)->first();
               
                if(isset($leaveEntitlement)) {
                    $leaveEntitlement->leave_balance = 1 + $leaveEntitlement->leave_balance;
                    $leaveEntitlement->save();
                } else {
                    $checkCompOffLeave = Leave::where('id',$leaves->leave_id)->first();
    
                    $leaveEntitlementData = array(
                        'user_id' => $user->id,
                        'leave_id' => $leaves->leave_id,
                        'leave_balance' => 1,
                        'year' => Carbon::now(config('settings.time_zone'))->year,
                        'entitled_leaves' => $checkCompOffLeave->n_days
                    );
                    // return $leaveEntitlementData;
                    LeaveEntitlement::create($leaveEntitlementData);
                }
                $message = 'Your Comp Off leave for ' . $date . ' has been ' . $leave_status;
            }else{
                $message = 'Your Comp Off leave for ' . $date . ' has been ' . $leave_status.'. Leave balance will add,  when mark attendance ';
            }
           
        }
        $actionUrl = 'comp-off-leave-report.index';
        $arr = null;
        $arr = [$title, $message, $actionUrl];
        $user->notify(new AppNotifications($arr));
        if ($status == 'Approve') {
            //Session::flash('success', 'Approve Leave Successful!');
            return response()->json(['status' => 200, 'message' => 'Approved Request Successful!']);
        } else {
            //Session::flash('warning', 'Reject Leave Successful!');
            return response()->json(['status' => 200, 'message' => 'Rejected Request Successful!']);
        }
        return response()->json(['status' => 200, 'message' => '']);
        
    }
    
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
    
}