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 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 113
ReportsApi
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
240
0.00% covered (danger)
0.00%
0 / 113
 getReports
0.00% covered (danger)
0.00%
0 / 1
240
0.00% covered (danger)
0.00%
0 / 113
<?php
namespace App\Http\Controllers\Api;
use App\Helpers\HolidayHelper;
use App\Http\Controllers\Reports\AttendanceIndividualReportController;
use App\Models\Admin\Holiday;
use App\Models\Admin\Leave;
use App\Models\Admin\Team;
use App\Models\AttendanceRequests\UserAttendanceRequests;
use App\Models\Auth\User;
use App\Models\Leave\ApplyLeave;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class ReportsApi 
{
    public function getReports(Request $request){
        $userid = $request->user()->id;
        $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($userid != '0'){
            $userIdsQuery = ' and  us.id = '.$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) . ')';
            }
            $attendanceReport =  DB::select(
                'select 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
                                                    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]
            );
        } else {
            $attendanceReport =  DB::select(
                'select 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
                                                    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([]);
        foreach($attendanceReportColl as $data)
        {
            $userAttendanceRequest = collect([]);
            $userAttendanceRequest->name = $data->name;
            $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($user->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.jpg");
                }
            }
            $show_image_container = $user_image;
            $manager = User::where(['id' => $userAttendanceRequest->updated_by_user])->first();
            if(!empty($manager)){
                if(!empty($manager->profile_pic)){
                    $manager_image = url('storage/'.$manager->profile_pic);
                }else{
                    if($manager->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.jpg");
                    }
                }
                $show_manager_image_container = $manager_image;
            }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,
                "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" => '',
                "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;
        }
        $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'));
        $leave = ApplyLeave::leftJoin('leaves','apply_leaves.leave_id','=','leaves.id')
            ->where([['apply_leaves.user_id','=',$userid]])
            ->orderBy('apply_leaves.created_at','DESC')->get();
        return response()->json([
            "status" => "200",
            "leave_requests" => $leave,
            "attendances_requests" => $attendanceReportColl
        ]);
    }
}