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 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 101
LeaveBalanceReportController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 9
870
0.00% covered (danger)
0.00%
0 / 101
 index
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 31
 leavebalancereportdata
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 35
 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
 updateUserLeaveBalance
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 29
<?php
namespace App\Http\Controllers\Reports;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Auth\User;
use App\Models\Leave\LeaveEntitlement;
use App\Models\Admin\Leave;
use DB;
use Carbon\CarbonPeriod;
use Carbon\Carbon;
use Auth;
use Session;
use GetShiftDetailHelper;
use App\Models\Admin\UserDetail;
use App\Helpers\AttendanceHelper;
use App\Helpers\LeaveLogHelper;
class LeaveBalanceReportController extends Controller
{
     //private $dataArr, $columnHeaders;
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {   
        $title = '/Reports/Leave Balance Report';
        if(auth()->user()->can('View All Leave Balance')){
            $users = User::with('userdetailWithTeam')->get();
           
        }else if(auth()->user()->can('View Reporting Employees Leave Balance')){
            $userIds =  GetShiftDetailHelper::getMyReportingEmployees();
            $users = User::whereIn('id', $userIds)->with('userdetailWithTeam')->get();
        }
        else{
            //View Self Leave Balance
            $users = User::where('id', auth()->id())->with('userdetailWithTeam')->get();
        }
        $leaves = DB::table('leaves')->whereNull('deleted_at')->get();
        foreach ($users as $user) {
            # code...
            $leaveBalances = [];
            // return $user->userdetailWithTeam;
            //$user['team'] = isset($user['userdetailWithTeam']['teams'][0]) ? $user['userdetailWithTeam']['teams'][0]->team : '';
            $user['team'] = !empty($user->userdetail->primaryTeamName->team)  ? $user->userdetail->primaryTeamName->team : '-';
            foreach ($leaves as $leave) {
                $leaveEntitlementQuery = array(
                    'user_id' => $user->id,
                    'year' => Carbon::now()->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
                );
            }
            $user['leaveBalances'] = $leaveBalances;
        }
        // For Attendance Marking
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        // return $users;
        return view('Reports.LeaveBalanceReport',compact('users','title','leaves','val','valTeam','valUser'));
    }
    public function leavebalancereportdata(Request $request)
    {
        $column_key = array("0"=>"name","1"=>"","2" =>"","3"=>"","4"=>"");
        $where_condition = "1 = 1";
        $order_key              =   $request->input('order')[0]['column'];
        $order                  =   $column_key[$order_key];
        $dir                    =   $request->input('order')[0]['dir'];
        if(trim($dir)==''){
            $dir = 'desc';   
        }
        if ($order != '') {
            $orderBy = " ORDER BY ".$order." ".$dir;
        }
        if(null !==($request->input('search.value')) && trim($request->input('search.value'))!=''){
            $search = $request->input('search.value');
            $where_condition .= " AND (name Like '%$search%' OR lastName Like '%$search%')";
        }
        
        $count_model = User::with('userdetailWithTeam')->get();
        $total_app_count        =   $count_model;
        $totalFiltered          =   $count_model; 
        $data_model = User::whereRaw($where_condition)
              ->orderBy($order , $dir)
              ->offset( intval($request->input('start')))->limit(intval($request->input('length')))
              ->get();
     
        $data = array();
        if(count($data_model)>0){
            foreach($data_model as $database_model){
                $nestedData['name'] = $database_model->name.' '.$database_model->lastName;
                $nestedData['role'] = $database_model->getRoleNames()->first();
                // $nestedData['team'] = !empty($database_model->userdetailWithTeam()->first()) ? $database_model->userdetailWithTeam()->first()->teams[0]['team']: '';
                $nestedData['team'] = !empty($user->userdetail->primaryTeamName->team)  ? $user->userdetail->primaryTeamName->team : '';
                $edit = route('user-tab.edit',$database_model->id);
                $nestedData['edit'] = '<a href="'.$edit.'"><button  class="btn btn-info icon-pencil7"></button></a>';
                $delete = route('deleteuser',$database_model->id);
                $nestedData['delete'] = '<a href="'.$delete.'"><button  class="btn btn-danger icon-bin"></button></a>';
                $data[] = $nestedData;
            }
        }
       $json_data = array(
        "draw"            => intval( $request->input('draw')),   
        "recordsTotal"    => intval( $total_app_count ),  
        "recordsFiltered" => intval($total_app_count ),
        "data"            => $data,   // total data array
      );
      echo json_encode($json_data);exit;
    }
    /**
     * 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)
    {
    }
    /**
     * Remove the specified resource from storage.
     *
     * @return \Illuminate\Http\Response
     */
    public function updateUserLeaveBalance(Request $request)
    {
        $user = User::find($request->user_id);
        $userid=Auth::user()->id;
        $leaveLogHelper = new LeaveLogHelper;
        // update in leave entitlements
        foreach ($request->all() as $key => $value) {
            if(is_int($key)) { // means it is leave id actually.
                $leaveEntitlementFindQuery = array(
                    'user_id' => $request->user_id,
                    'leave_id' => $key,
                    'year' => Carbon::now()->year
                );
                $leaveEntitlementUpdateData = array(
                    'leave_balance' => $value
                );
                $leaveEntitlement = LeaveEntitlement::where($leaveEntitlementFindQuery)->first();
                // ->update($leaveEntitlementUpdateData);
                if(isset($leaveEntitlement)) {
                    $previousLeaveBalance = $leaveEntitlement->leave_balance;
                    $leaveEntitlement->leave_balance = $value;
                    $leaveEntitlement->save();
                    //change the leave log balance
                    if ($previousLeaveBalance < $value) {
                        $leaveLogHelper->updateLeaveLog($value - $previousLeaveBalance,"ADDED",$request->user_id,$key,"Leave add-on",$userid);
                    } else if ($previousLeaveBalance > $value) {
                        $leaveLogHelper->updateLeaveLog( $previousLeaveBalance - $value,"SUBTRACTED",$request->user_id,$key, "Leave deduction",$userid);
                    }                
                } else {
                    // create leaveentitlement
                    $leave = Leave::where('id', $key)->first();
                    // return $leave;
                    $leaveEntitlementData = array(
                        'user_id' => $request->user_id,
                        'leave_id' => $key,
                        'leave_balance' => $value,
                        'year' => Carbon::now()->year,
                        'entitled_leaves' => $leave->n_days
                    );
                    // return $leaveEntitlementData;
                    LeaveEntitlement::create($leaveEntitlementData);
                    if($value != 0){
                       $leaveLogHelper->updateLeaveLog( $value,"ADDED",$request->user_id,$key,"Leave add-on",$userid);
                    }
                }
            }
        }
        Session::flash('success', 'Leave Details Saved Successfully !');
        return redirect()->route('leave-balance-report.index');
    }
  
}