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 / 163
AttendanceRequestsReportController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 9
1260
0.00% covered (danger)
0.00%
0 / 162
 index
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 21
 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
 selectAttendanceReport
0.00% covered (danger)
0.00%
0 / 1
272
0.00% covered (danger)
0.00%
0 / 112
 getUser
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 23
<?php
namespace App\Http\Controllers\Reports;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\Team;
use App\Models\Admin\UserDetail;
use DB;
use Carbon\CarbonPeriod;
use Carbon\Carbon;
use App\Models\Auth\User;
use GetShiftDetailHelper;
use App\Models\AttendanceRequests\UserAttendanceRequests;
use App\Models\Dashboard\AttendanceDetail;
use App\Notifications\AppNotifications;
use App\Helpers\AttendanceHelper;
use Session;
ini_set('memory_limit', '256M');
class AttendanceRequestsReportController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    // public function index(Request $request)
    // {
    //     $title = '/Reports/Attendance Requests';
    //     $teams = [];
    //     $users = [];
    //     if (auth()->user()->can('View All Attendance Report')) {
    //         $teams = Team::all();
    //         $users = User::all();
    //     }else if(auth()->user()->can('View Team Attendance Report')||
    //     auth()->user()->can('View Reporting Employees Report')){
    //         $teams =  GetShiftDetailHelper::getMyteams();
    //         $teamIds = array();
    //         foreach ($teams as $value) {
    //             $teamIds[] = $value->id;
    //         }
    //         $teamId = implode(",",$teamIds);
    //         $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('Reports.AttendanceRequestsReportForm', compact('teams', 'title', 'users', 'val', 'valTeam', 'valUser'));
    // }
            public function index(Request $request)
        {
            $title = '/Reports/Attendance Requests';
            $teams = [];
            $users = [];
            if (auth()->user()->can('View All Attendance Report')) {
                $teams = Team::all();
                $users = User::all();
            } elseif (auth()->user()->can('View Team Attendance Report') || auth()->user()->can('View Reporting Employees Report')) {
                $teams = GetShiftDetailHelper::getMyteams();
                $teamIds = [];
                foreach ($teams as $value) {
                    $teamIds[] = $value->id;
                }
                $teamId = implode(",", $teamIds);
                $users = User::select('users.name', 'users.lastName', 'users.id')
                    ->leftJoin('user_details', 'users.id', '=', 'user_details.user_id')
                    ->whereIn('user_details.primary_team_id', $teamIds)
                    ->get();
            } else {
                $teams = [];
            }
            // For Attendance Marking
            $val = AttendanceHelper::getAttendanceMarkValue();
            $valTeam = AttendanceHelper::getAttendanceTeam($request);
            $valUser = AttendanceHelper::getAttendanceUser($request);
            return view('Reports.AttendanceRequestsReportForm', 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 selectAttendanceReport(Request $request)
    {
        $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;
        $selectedDateWithTimezone = Carbon::parse($startDate . '000000', config('settings.time_zone'))->setTimezone(config('app.time_zone'));
        $selectedEndDateWithTimezone = Carbon::parse($endDateForQuery . '000000', config('settings.time_zone'))->setTimezone(config('app.time_zone'));
        $columnHeaders = collect(['Profile Pic', 'Name', 'Team', 'Requested On', 'Requested For', 'Type', 'Request Date', 'Request Time', 'Reason', 'Status', 'Manager']);
        $userIds = '';
        $userIdsQuery = '';
        if (
            auth()->user()->can('View Reporting Employees Report') &&
            !auth()->user()->can('View Team Attendance Report') &&
            !auth()->user()->can('View All Attendance Report')
        ) {
            $getuserIds = GetShiftDetailHelper::getMyReportingEmployeesIds();
            $userIdsQuery = ' and  us.id in (' . implode(',', $getuserIds) . ')';
        }
        if ($request->userid != '0') {
            $userIdsQuery = ' and  us.id = ' . $request->userid;
        }
        if ($teamId == 0) {
            $teamQuery = '';
            if (
                (auth()->user()->can('View Reporting Employees Report') ||
                    auth()->user()->can('View Team Attendance Report')) &&
                !auth()->user()->can('View All Attendance Report')
            ) {
                $getTeamIds = GetShiftDetailHelper::getMyteamIds();
                $teamQuery = 'and  t.id in (' . implode(',', $getTeamIds) . ')';
            }
            // print_r("inside");
            $attendanceReport = DB::select(
                'select us.profile_pic as profile_pic, us.id,concat( us.name," ",us.lastName) as name,t.team,a.check_in as check_in,
                a.check_out as check_out,a.comments as comments,a.status, a.updated_by_user,a.requested_for, a.created_at,
                u.gender as gender
                                                    from user_attendance_requests 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
                                                    AND  ((a.check_in between :startDate1 and :endDate1))
                                                    where us.deleted_at IS  NULL ' . $teamQuery . $userIdsQuery . '
                                                    order by us.id,a.id;',
                ['startDate1' => $selectedDateWithTimezone, 'endDate1' => $selectedEndDateWithTimezone]
            );
            // dd($attendanceReport);
        } else {
            $attendanceReport = DB::select(
                'select us.profile_pic as profile_pic, us.id,concat(us.name," ",us.lastName) as name,t.team,a.check_in as check_in,
                                                    a.check_out as check_out,a.comments as comments,
                                                    a.status, a.updated_by_user,a.requested_for, a.created_at,
                                                    u.gender as gender
                                                    from user_attendance_requests 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  AND  ((a.check_in between :startDate1 and :endDate1))
                                                    where us.deleted_at IS  NULL and  u.primary_team_id in (' . $teamId . ') ' . $userIdsQuery . '
                                                    order by us.id,a.id;',
                ['startDate1' => $selectedDateWithTimezone, 'endDate1' => $selectedEndDateWithTimezone]
            );
        }
        $attendanceReportColl = collect($attendanceReport);
        $userAttendanceRequests = UserAttendanceRequests::all();
        $attendanceReportTempColl = collect([]);
        $toBeEncodedImages = collect([]);
        foreach ($attendanceReportColl as $data) {
            $userAttendanceRequest = collect([]);
            $userAttendanceRequest->profile_pic = $data->profile_pic;
            $userAttendanceRequest->name = $data->name;
            $userAttendanceRequest->gender = $data->gender;
            $userAttendanceRequest->team = $data->team;
            $userAttendanceRequest->comments = $data->comments;
            $userAttendanceRequest->check_in = $data->check_in;
            $userAttendanceRequest->check_out = $data->check_out;
            $userAttendanceRequest->status = $data->status;
            $userAttendanceRequest->updated_by_user = $data->updated_by_user;
            $userAttendanceRequest->requested_for = $data->requested_for;
            $userAttendanceRequest->created_at = $data->created_at;
            $userAttendanceRequest->user_id = $data->id;
            $user = User::where(['id' => $userAttendanceRequest->user_id])->first();
            if (!empty($user->profile_pic)) {
                $user_image = url('storage/' . $user->profile_pic);
            } else {
                if ($userAttendanceRequest->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.png");
                }
            }
            $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' => $userAttendanceRequest->updated_by_user])->first();
            $manager_id = $userAttendanceRequest->updated_by_user;
            $manager_data = UserDetail::where('user_id', '=', $manager_id)->first();
            if (!empty($manager)) {
                // dd($manager_data);
                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.png");
                    }
                }
                $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%)"></div></span>';
            } else {
                $show_manager_image_container = '';
            }
            $requested_on = Carbon::parse($userAttendanceRequest->created_at);
            $requested_on->setTimezone(config('settings.time_zone'));
            $requested_on = $requested_on->format(config('settings.php_date_format'));
            $checkin_date = Carbon::parse($userAttendanceRequest->check_in);
            $checkin_date->setTimezone(config('settings.time_zone'));
            $checkin_date = $checkin_date->format(config('settings.php_date_format'));
            $checkin_time = Carbon::parse($userAttendanceRequest->check_in);
            $checkin_time->setTimezone(config('settings.time_zone'));
            $checkin_time = $checkin_time->format(Config('settings.time_format'));
            $checkout_date = Carbon::parse($userAttendanceRequest->check_out);
            $checkout_date->setTimezone(config('settings.time_zone'));
            $checkout_date = $checkout_date->format(config('settings.php_date_format'));
            $checkout_time = Carbon::parse($userAttendanceRequest->check_out);
            $checkout_time->setTimezone(config('settings.time_zone'));
            $checkout_time = $checkout_time->format(Config('settings.time_format'));
            $leaveArr = array(
                "profile_pic" => $show_image_container,
                "name" => $userAttendanceRequest->name,
                // "gender" => $userAttendanceRequest->gender,
                "team" => $userAttendanceRequest->team,
                "requested_on" => $requested_on,
                "requested_for" => $userAttendanceRequest->requested_for,
                "type" => "Checkin",
                "requested_date" => $checkin_date,
                "requested_time" => $checkin_time,
                "reason" => $userAttendanceRequest->comments,
                "status" => ucfirst($userAttendanceRequest->status),
                "manager" => $show_manager_image_container . ' ' . User::where(['id' => $userAttendanceRequest->updated_by_user])->pluck('name')->first() . ' ' . User::where(['id' => $userAttendanceRequest->updated_by_user])->pluck('lastName')->first(),
            );
            $leaveArr1 = array(
                "profile_pic" => '',
                "name" => '',
                "team" => '',
                // "gender"=>'',
                "requested_on" => '',
                "requested_for" => '',
                "type" => "Checkout",
                "requested_date" => $checkout_date,
                "requested_time" => $checkout_time,
                "reason" => '',
                "status" => '',
                "manager" => '',
            );
            $attendanceReportTempColl->push($leaveArr, $leaveArr1);
            $checkOutDate = null;
            $checkInDate = null;
            $toBeEncodedImages->push($user_image);
        }
        $attendanceReportColl = collect([]);
        $attendanceReportColl = $attendanceReportTempColl;
        $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('Reports.AttendanceRequestsReport', compact('attendanceReportColl', 'columnHeaders', 'startDate', 'endDate', 'toBeEncodedImages'));
    }
    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]);
    }
}