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 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 86
AdminApplyLeaveController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 7
380
0.00% covered (danger)
0.00%
0 / 86
 index
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 17
 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
132
0.00% covered (danger)
0.00%
0 / 53
 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
 destroy
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 adminGetLeaveCount
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 12
<?php
namespace App\Http\Controllers\Leave;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\Leave;
use App\Models\Auth\User;
use App\Models\Leave\ApplyLeave;
use App\Models\Leave\LeaveEntitlement;
use App\Models\Admin\Weekend;
use Session;
use Carbon\Carbon;
use Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use GetShiftDetailHelper;
use App\Models\Admin\Holiday;
use App\Helpers\LeaveHelper;
use App\Models\Leave\CompOffLeave;
use App\Helpers\AttendanceHelper;
class AdminApplyLeaveController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $title = '/Leave/Apply Leave Employee';
        $users=[];
        if(auth()->user()->can('Can mark leave for all employees')){
            $users = User::all();
        }else{
            //Can mark leave for reporting employees
            $userIds =  GetShiftDetailHelper::getMyReportingEmployees();
            $users = User::whereIn('id', $userIds)->get();
        }
        $leaves = Leave::all();
        $currentYear = Carbon::now(config('settings.time_zone'))->format('Y');
        
        //get holdays for current year
       
        $getHolidays = Holiday::whereYear('date',$currentYear)->get();
        $holidays = [];
        foreach($getHolidays as $holiday){
            $holidays[] = $holiday->date;
        }
        
         // For returning attendance marking for home controller
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        return view('administrationForms.LeavePolicy.adminApplyLeaveForm',compact('title','leaves','users','holidays',
                    '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
     */
    ///function for the direct apply leave 
  public function store(Request $request)
    {   
        $today = Carbon::now(config('settings.time_zone'));
        $from_date = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->from_date ) )->format('Y-m-d');
        $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()) {
            if ($validator->messages()->has('reason')) {
                Session::flash('warning', 'Reason field is required');
            } else if ($validator->messages()->has('halfDayType')) {
                Session::flash('warning', 'Duration field is required');
            } else {
                Session::flash('warning', 'Already Taken Leave On This Date!');
            }
            return redirect()->route('admin-apply-leave.index')->withErrors($validator);
        } else {
            $leaveBalance = LeaveHelper::getEntitlementLeave($request->user_id,  $request->leave_id);
            if ($leaveBalance < $request->leave_length && LeaveHelper::checkTotalLeaves($request->leave_id)) {
                Session::flash('warning', ' Not Enough Leave Balance!');
                return redirect()->route('admin-apply-leave.index');
            }
            // Create or update leave records directly without creating a leave request
            $leave = ApplyLeave::where('user_id', $request->user_id)
                ->where('leave_id', $request->leave_id)
                ->where('from_date', $from_date)
                ->where('to_date', $to_date)
                ->first();
            if (!$leave) {
                $leave = new ApplyLeave();
                $leave->user_id = $request->user_id;
                $leave->leave_id = $request->leave_id;
                $leave->from_date = $from_date;
                if ($request->leavetype == 'full_day') {
                    $leave->to_date = $to_date;
                } else {
                    $leave->to_date = $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;
            }
            if ($leave->leave_type == "full_day") {
                $leave->half_day_type = null;
            }
            $leave->reason = $request->reason;
            $leave->is_process = 'true';
            $leave->status = 'Approve'; // Mark the leave as directly approved by admin
            $leave->save();
            LeaveHelper::updateUserLeaveBalance($leave->user_id, $leave->leave_id, $leave->leave_length);
            Session::flash('success', 'Leave Marked Successfully!');
            return redirect()->route('admin-apply-leave.index');
        }
    }
    /**
     * 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 destroy($id)
    {
        //
    }
    public function adminGetLeaveCount(Request $request)
    { 
        $leaveBalance = LeaveHelper::getEntitlementLeave($request->userId, $request->leaveId);
        
        //get leave
        $leave = Leave::find($request->leaveId);
        // For returning attendance marking for home controller
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
          return response()->json([
                'leaveBalance' => $leaveBalance,
                'totalLeaves' => $leave->n_days,
                'leave_allocation_type' => $leave->leave_allocation_type,
                'val' => $val,
                'valTeam' => $valTeam,
                'valUser' => $valUser,
            ]);
    }
    
}