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 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 152
HomeScreenDetailsController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
756
0.00% covered (danger)
0.00%
0 / 152
 details
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 90
 updateFirebaseToken
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 getWeeklyOverview
0.00% covered (danger)
0.00%
0 / 1
156
0.00% covered (danger)
0.00%
0 / 58
<?php
namespace App\Http\Controllers\Api;
use App\Helpers\GetShiftDetailHelper;
use App\Http\Controllers\Auth\AuthController;
use App\Http\Controllers\Dashboard\HomeController;
use App\Models\Dashboard\AttendanceDetail;
use App\Models\Leave\ApplyLeave;
use App\Helpers\HolidayHelper;
use App\Models\Admin\Holiday;
use App\Helpers\GeoFenceHelper;
use App\Models\Auth\UserWeeklyOff;
use DB;
use Illuminate\Support\Facades\Log;
use App\Models\Auth\User;
use Carbon\Carbon;
use App\Models\Admin\UserDetail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class HomeScreenDetailsController
{
    function details(Request $request)
    {
        $geoFenceOrgLevel = GeoFenceHelper::getOrgFence(); // This will give you both Check-In and Check-Out GeoFences
        $id = Auth::user()->id;
        $teamid = $request->user()->userdetail->primary_team_id;
        $geoFenceTeamLevel = GeoFenceHelper::getteamFence($teamid);
        $geoFenceUserLevel = GeoFenceHelper::getUserGeofencedlocation($id);
        $gender=UserDetail::where('user_id',$id)
                        ->value('gender');
        $user = $request->user();
        $this->updateFirebaseToken($request);
        $obj = new AuthController();
        $timearr = $obj->getcheckincheckouttime($request);
        if(Auth::user()->profile_pic)
            $imageurl = url('storage/'. Auth::user()->profile_pic);
        else if($gender=="Male")
            $imageurl = url('public/global_assets/images/favicon_io/default-avatar-boy.png');
        else 
        $imageurl = url('public/global_assets/images/favicon_io/default-avatar-girl.png');
        $view_all_attendance_requests = auth()->user()->can('View All Attendance request');
        $view_all_attendance_requests_of_team = auth()->user()->can('View All Attendance requests of team');
        $view_all_attendance_requests_of_assigned_employees = auth()->user()->can('View All Attendance requests of assigned employees');
        $attendance_permissions = [$view_all_attendance_requests,
            $view_all_attendance_requests_of_team,
            $view_all_attendance_requests_of_assigned_employees];
        $view_all_leave_requests = auth()->user()->can("View All leave requests");
        $view_all_leave_requests_of_team = auth()->user()->can("View All leave requests of team");
        $view_all_leave_requests_of_assigned_employees = auth()->user()->can("View All leave requests of assigned employees");
        $leave_permissions = [$view_all_leave_requests,
            $view_all_leave_requests_of_team,
            $view_all_leave_requests_of_assigned_employees];
        $your_attendance_requests = [];
        $others_attendance_requests = [];
        $your_leave_requests = [];
        $others_leave_requests = [];
        $others_attendance_requests_count = 0;
        $others_leave_requests_count = 0;
        $ob = new HomeController();
        $attendance_requests = $ob->getAttendanceRequest(new Request(),"api");
        foreach ($attendance_requests["request_attendances"] as $rq) {
            if ($rq["user"]["id"] == $user->id) {
                $your_attendance_requests[] = $rq;
            } else {
                $others_attendance_requests_count += 1;
                $found = 0;
                foreach($others_attendance_requests as $olr){
                    if($olr["user"]["id"]==$rq["user"]["id"]){
                        $found = 1;
                    }
                }
                if($found==0) {
                    $others_attendance_requests[] = $rq;
                }
            }
        }
        $leave_requests = $ob->getLeaveRequest($request,"api");
        foreach ($leave_requests["leave_reports"] as $rq) {
            if ($rq["user_id"] == $user->id) {
                $your_leave_requests[] = $rq;
            } else {
                $others_leave_requests_count += 1;
                $found = 0;
                foreach($others_leave_requests as $olr){
                    if($olr["user_id"]==$rq["user_id"]){
                        $found = 1;
                    }
                }
                if($found==0) {
                    $others_leave_requests[] = $rq;
                }
            }
        }
        $ob = new HomeController();
        $teamStatus = $ob->teamStatus($request,"api",1);
         $today = Carbon::now(config('settings.time_zone'))->format('d/m/Y');
        $todayFormatted = Carbon::now(config('settings.time_zone'))->format('Y-m-d');
        $today_time=Carbon::now(config('settings.time_zone'))->format('h:i A');
        return response()->json([
           'status' => 200,
            'message' => 'Login Successful',
            'currentDate' => $today,
            'geoFenceOrgLevel' => $geoFenceOrgLevel,
            'geoFenceUserLevel' => $geoFenceUserLevel,  //added geofence user
            'geoFenceTeamLevel' => $geoFenceTeamLevel,  //added geofence for team
            'currenttime'=>$today_time,
            'formattedDate'=>$todayFormatted,
            'checkin' => $timearr[0],
            'checkout' => $timearr[1],
            'shiftStartTime' => $timearr[2],
            'shiftEndTime' => $timearr[3],
            'username'     => $user->name,
            'user_id' => $user->id,
            'imageurl' => $imageurl,
            'logo' => asset('/public/global_assets/images/Logo.svg'),
            'orgName' => "Development\n Logo",
            'lastname' => $user->lastName,
            'attendance_permissions' => $attendance_permissions,
            'leave_permissions' => $leave_permissions,
            'your_attendance_requests' => $your_attendance_requests,
            'others_attendance_requests' => $others_attendance_requests,
            'others_attendance_requests_count' => $others_attendance_requests_count,
            'your_leave_requests' => $your_leave_requests,
            'others_leave_requests' => $others_leave_requests,
            'others_leave_requests_count' => $others_leave_requests_count,
            'teamStatus' => $teamStatus
        ]);
    }
    function updateFirebaseToken(Request $request){
        $user = $request->user();
        if($request->has("firebaseToken")){
            User::where('id', $user->id)->update(['firebase_token'=>$request->firebaseToken]);
        }
    }
    function getWeeklyOverview(Request $request){
        $user = $request->user();
        $userId = $user->id;
        $days = 5;
        $dates = [];
        $response = [];
        for($i=0;$i<5;$i++){
            $today = Carbon::now();
            $date = $today->subDays($i)->format('Y-m-d');
            $dates[] = $date;
        }
        //Leave - L
        //Absent - A
        //Present - P
        //InProgress - I
        //Holiday - H
        
        for($i=0;$i<count($dates);$i++){
            $date = $dates[$i];
            $response[$date] = 'A';
            //Check if holiday
            $holidayIds = HolidayHelper::getholidayList($userId);
            $isHoliday = count(Holiday::where('date', $date)->whereIn('id', $holidayIds)->get());
            if($isHoliday){
               // return (Holiday::where('date',$date)->get());
                $response[$date] = 'H';
                continue;
            }
            $isUserWeeklyOff = count(UserWeeklyOff::where('user_id', $userId)->where('date','=',$date)->get());
            if($isUserWeeklyOff){
                $response[$date] = 'H';
                continue;
            }
            $isLeave = count(ApplyLeave::where('user_id', '=', $userId)
              ->where('from_date','<=',$date)
              ->where('to_date','>=',$date)
              ->where('status', '=', 'Approve')
              ->get());
              if($isLeave){
                $response[$date] = 'L';
                continue;
              }
              $attendanceSettings = [1,2,3];
              $attendanceAvailable = false;
              foreach($attendanceSettings as $attendanceSetting){
                if($attendanceSetting==1){
                    $presentData = count(AttendanceDetail::where('user_id', '=', $userId)
                    ->whereDate('created_at','=',date($date))
                    ->where('attendance_setting','=',1)
                    ->get());
                }else if($attendanceSetting==2){
                    $presentData = count(AttendanceDetail::where('user_id', '=', $userId)
                    ->whereDate('check_in','=',date($date))
                    ->where('attendance_setting','=',2)
                    ->get());
                }else{
                    $presentData = count(AttendanceDetail::where('user_id', '=', $userId)
                    ->whereDate('check_in','=',date($date))
                    ->where(function ($query) {
                        $query->where('attendance_setting','=',3)
                            ->orWhereNull('attendance_setting');
                    })
                    ->whereNotNull('check_out')
                    ->get());
                }
                if($presentData)
                {
                    $attendanceAvailable = true;
                }
              }
              if($attendanceAvailable)
              {
                $response[$date] = 'P';
              }
              else
              {
                if($i==0){
                    $response[$date] = 'IN';
                }else{
                $response[$date] = 'A';
                }
              }
               
              
              
        }
        $response["status"]=200;
        return $response;
    }
}