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 / 14
CRAP
4.25% covered (danger)
4.25%
11 / 259
UserTabController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 14
2244.80
4.25% covered (danger)
4.25%
11 / 259
 index
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 create
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 38
 mobileNumber
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 11
 email
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 11
 store
0.00% covered (danger)
0.00%
0 / 1
182
0.00% covered (danger)
0.00%
0 / 76
 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
72
0.00% covered (danger)
0.00%
0 / 64
 storeAttendanceUser
0.00% covered (danger)
0.00%
0 / 1
2.00
91.67% covered (success)
91.67%
11 / 12
 getAttendanceUser
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 8
 update
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 storeEngagementType
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 6
 getEngagementType
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 6
 getStartDateEndDate
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 5
 saveLocationsUser
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 19
<?php
namespace App\Http\Controllers\Admin\UserDetails;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Admin\attendanceRequest;
use App\Models\Auth\User;
use App\Models\Admin\UserDetail;
use App\Models\Admin\Department;
use App\Models\Admin\Organisation;
use App\Models\Admin\Team;
use App\Models\Admin\Shift;
use App\Models\Admin\UserAddress;
use App\Models\Admin\UserBankDetail;
use App\Models\Admin\UserDocumentDetail;
use App\Models\Leave\LeaveEntitlement;
use Spatie\Permission\Models\Role;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;
use App\Models\Admin\HolidayList;
use Session;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Validation\Rule;
use App\Notifications\AppNotifications;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\Helpers\AttendanceHelper;
use App\Models\Admin\Setting;
use App\Models\Admin\userSetting;
use App\Helpers\GeoFenceHelper;
use App\Helpers\PlatformHelper;
class UserTabController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        //tab name
        $tab = 'user';
        $title = '/Setup/Create Users';
        $organisations = Organisation::all();
        $departments = Department::all();
        $holidaylist = HolidayList::all();
        $teams =Team::all();
        $roles = Role::all();
        $shifts =Shift::all();
        $attendances =attendanceRequest::all();
        $editUserdetail = false;
        $users = User::all();
        $employee_id = '';
        $empType = null;
        $leaves = DB::table('leaves')->get();
        $leaveBalances = [];
        foreach ($leaves as $leave) {
            $leaveBalance=0;
            $leaveBalances[] = array(
                'id' => $leave->id,
                'name' => $leave->name,
                'abbr' => $leave->abbr,
                'leave_balance' => $leaveBalance
            );
        }
        if(config('settings.default_employee_id') == 'automatic')
        {
            $startId = config('settings.id_starts_from');
            $prefix = config('settings.default_id');
            for ($i=$startId; $employee_id == '' ; $i++) {
                if (UserDetail::where('employee_id', '=', $prefix.$i)->exists())
                {
                }
                else
                {
                    $employee_id = $prefix.$i;
                    break;
                }
            }
        }
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $valUser = AttendanceHelper::getAttendanceUser($request);
        $geoFenceUserLevel = GeoFenceHelper::getUserGeofencedlocation($request);
        
        // dd($geoFenceUserLevel);
        return view('administrationForms.UserDetail.User.UserTab',
        compact('title','departments','teams','roles','shifts','organisations',
        'editUserdetail','attendances','tab','users','employee_id','leaveBalances','holidaylist',
        'val','valUser','valTeam','empType','geoFenceUserLevel'));
    }
    /**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
        public function mobileNumber(Request $request)
        {
            if($request->user_id == ''){
                if (UserDetail::where('mobile_number', '=', $request->mobile_number)->exists())
                {
                    return response()->json([
                        'valid' => false
                    ]);
                }
                else
                {
                    return response()->json([
                        'valid' => true
                    ]);
                }
              }else{
                if (UserDetail::where('mobile_number', '=', $request->mobile_number)->where('user_id','!=',$request->user_id)->exists())
                {
                    return response()->json([
                        'valid' => false
                    ]);
                }
                else
                {
                    return response()->json([
                        'valid' => true
                    ]);
                }
              }
        }
        public function email(Request $request)
        {
            if($request->user_id == ''){
                if (User::where('email', '=', $request->email)->exists())
                {
                    return response()->json([
                        'valid' => false
                    ]);
                }
                else
                {
                    return response()->json([
                        'valid' => true
                    ]);
                }
              }else{
                if (User::where('email', '=', $request->email)->where('id','!=',$request->user_id)->exists())
                {
                    return response()->json([
                        'valid' => false
                    ]);
                }
                else
                {
                    return response()->json([
                        'valid' => true
                    ]);
                }
              }
        }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //tab name
        $tab = 'user';
        if($request->editUserdetail == true) //Edit form 1
        {
            $user_details_id = UserDetail::where('user_id',$request->user_id)->first();
            $email_validation = 'unique:users,email,' . $request->user_id;
            //$mobile_validation = 'unique:user_details,mobile_number,NULL,id,user_id,' . $request->user_id;
            $mobile_validation = 'unique:user_details,mobile_number,' . $user_details_id['id'];
        }else{
            $email_validation = 'unique:users';
            $mobile_validation = 'unique:user_details';
        }
        if($request->new_password == NULL){
            $new_password  = '';
            $confirm_password  = '';
        }else{
            $new_password  = 'required|min:8';
            $confirm_password  = 'required_with:new_password|same:new_password|min:8';
        }
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'lastName' => 'required',
            'email' =>  'required|'.$email_validation,
            'personal_email' => 'required',
            'gender' => 'required',
            'dob' => 'required',
            'new_password'  => $new_password,
            'confirm_password'  => $confirm_password,
            'mobile_number' => 'required|digits:10|'.$mobile_validation
        ]);
        if ($validator->fails())
        {
            return redirect()->back()->withErrors($validator)->with('tab',$tab);
        }
        $dob = Carbon::parse( Carbon::createFromFormat( config('settings.php_date_format') , $request->dob ) )->format('Y-m-d');
      
        if($request->editUserdetail == true) //Edit form 1
        {
            $user = User::find($request->user_id);
            $user->name = $request->name;
            $user->lastName = $request->lastName;
            $user->email = $request->email;
            if($request->new_password != NULL){
            if (Hash::needsRehash($request->new_password))
                {
                    $user->password = Hash::make($request->new_password);
                }
            }
            $user->save();
            $user->userDetail->update([
                    'personal_email' => $request->personal_email,
                    'gender' => $request->gender,
                    'dob'=> $dob,
                    'mobile_number'=> $request->mobile_number
            ]);
            if($request->new_password != null){
                //notification to admin
                $title = "Password changed";
                $message = $user->name . ' ' . $user->lastName."'s account password changed by ".Auth::user()->name . ' ' . Auth::user()->lastName;
                $actionUrl = null;
                $arr = null;
                $arr = [$title, $message, $actionUrl];
                $users = User::all();
                foreach ($users as $user) {
                    if($user->can('Administration Module')){
                        $user->notify(new AppNotifications($arr));
                    }
                }
            }
            Session::flash('success', 'User details Updated Successfully!');
            return redirect()->route('user-tab.edit',$request->user_id)->with('tab',$tab);
        }
        else
        {
                $user = new User();
                $user->name = $request->name;
                $user->lastName = $request->lastName;
                $user->email = $request->email;
                $user->password = Hash::make($request->new_password);
                $user->save();
                $userdetail = new UserDetail();
                $userdetail->personal_email =$request->personal_email;
                $userdetail->gender = $request->gender;
                $userdetail->dob = $dob;
                $userdetail->mobile_number = $request->mobile_number;
                $userdetail->user_id = $user->id;
                $userdetail->save();
                //notification to all
                $title = "New Employee";
                $message = $user->name . ' ' . $user->lastName." has joined today";
                $actionUrl = null;
                $arr = null;
                $arr = [$title, $message, $actionUrl];
                $all_users = User::all();
                if(!empty($all_users)){
                    foreach($all_users as $all_user){
                        if($all_user->id != $user->id){
                            $all_user->notify(new AppNotifications($arr));
                        }
                    }
                }
                Session::flash('success', 'User details created  Successfully!');
                return redirect()->route('user-tab.edit',$user->id)->with('tab',$tab);
        }
    }
    /**
     * 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(Request $request,$id)
    {
        //tab name
        $tab = 'user';
        $title = '/Setup/Edit Users';
        $user = User::find($id);
        $userPassword = $user->password;
        $userdetail = $user->userdetail;
        $user_addresses = $userdetail->userAddress;
        $user_bank_details = $userdetail->userBankdetail;
        $user_document_details = $userdetail->userDocumentdetail;
        $departments = Department::all();
        $departmentArr = $userdetail->departments;
        $teams = Team::all();
        $holidaylist = HolidayList::all();
        $teamArr =$userdetail->teams;
        $roles = Role::all();
        $roleArr = $userdetail;
        $shifts= Shift::all();
        $selectShift = $userdetail->shifts;
        $attendances = attendanceRequest::all();
        $attendanceArr = $userdetail->attendanceRequests;
        $organisations = Organisation::all();
        $editUserdetail = true;
        $users = User::all();
        $secondaryManagerArr = $userdetail->secondaryManager;
       // $employeeTeam = $user->userdetailWithTeam()->first() != null ? (count($user->userdetailWithTeam()->first()->teams) > 0 ? $user->userdetailWithTeam()->first()->teams[0]['team'] : ''): '-' ;
       $employeeTeam = !empty($user->userdetail->primaryTeamName->team)  ? $user->userdetail->primaryTeamName->team : '-';
       $leaves = DB::table('leaves')->whereNull('deleted_at')->get();
       $leaveBalances = [];
        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
            );
            // $leaveBalances[$leave->id] =  $leaveBalance;
        }
        $employee_id = '';
        if(config('settings.default_employee_id') == 'automatic')
        {
            $startId = config('settings.id_starts_from');
            $prefix = config('settings.default_id');
            for ($i=$startId; $employee_id == '' ; $i++) {
                if (UserDetail::where('employee_id', '=', $prefix.$i)->exists())
                {
                }
                else
                {
                    $employee_id = $prefix.$i;
                    break;
                }
            }
        }
        $val = AttendanceHelper::getAttendanceMarkValue();
        $valUser = $this->getAttendanceUser($id);
        $valTeam = AttendanceHelper::getAttendanceTeam($request);
        $platformUser = PlatformHelper::getPlatformUser($id);
        $empType = $this->getEngagementType($id);
        $startDateEndDate = $this->getStartDateEndDate($id);
        $geoFenceUserLevel = GeoFenceHelper::getUserGeofencedlocation($id);
        // dd($geoFenceUserLevel);
        // return $leaveBalances;
        Session::flash('warning', 'Edit User!');
        return view('administrationForms.UserDetail.User.UserTab',
        compact('user','userdetail','user_addresses','user_bank_details','departments',
        'teams','roles','shifts','organisations','editUserdetail','selectShift','teamArr',
        'departmentArr','roleArr','attendances','attendanceArr','user_document_details',
        'title','tab','users','secondaryManagerArr','leaveBalances','employee_id','employeeTeam',
        'holidaylist','val','valUser','id','valTeam','empType','startDateEndDate','geoFenceUserLevel','platformUser'));
    }
     // Store attendance marking for user
     public function storeAttendanceUser(Request $request)
     {
            //  if(auth()->user()->can('Edit Settings module')){
                 $platform_value = array_values(array_filter($request->only(['check1', 'check2', 'check3','check4'])));
                 $Platform_check = json_encode($platform_value);
                 $value = $request->input('check');
                 $user_id = $request->input('user_id');
                 $platform_check = $request->item_type;
                 $platforms = explode(',', $platform_check);
                 $valueToStore = json_encode($platforms);
                 $keyexist=userSetting::where('name','attendance')->where('category','User')->where('user_id', $user_id)->exists();
                 if($keyexist){
                     userSetting::where('name','=','attendance')->where('category','=','User')->where('user_id', $user_id)->update(['value'=>$value,'Platform_check'=>$Platform_check]);
                     // dd($id);
                 }
                else{
                 userSetting::create(['name'=>"attendance", 'value'=> $value, 'category'=> 'User','user_id'=>$user_id,'Platform_check'=>$Platform_check]);
                 // dd($value);
                  }
                  
                  return redirect()->back()->with('success', "Attendance Setting Saved Successfully!");
            //  }else{
            //       return redirect()->back()->with('warning', "You don't have permission for edit it!");
            // }
         }
    // Get attendance marking for User
    public function getAttendanceUser($id){
        $valUser = userSetting::where('name','attendance')
                                ->where('category','User')
                                ->where('user_id',$id)
                                ->first();
         if ($valUser) {
                $valUser = $valUser->value;
            } else {
                $valUser = '';
            }                                
        return $valUser;
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
    }
    // Store Engagement type for user
    public function storeEngagementType(Request $request)
    {
        $user_id = $request->user_id;
            if(auth()->user()->can('Edit Settings module')){
                $value = $request->input('emp_type');
                    UserDetail::where('user_id',$user_id)->update(['Engagement_Type'=>$value]);
                 return redirect()->back()->with('success', "Engagement type Upadated Successfully!");
            }else{
                 return redirect()->back()->with('warning', "You don't have permission for edit it!");
           }
        }
    // Get Engagement type  for User
    public function getEngagementType($id){
        $empType = UserDetail::where('user_id',$id)
                                ->first();
         if ($empType) {
                $empType = $empType->Engagement_type;
            } else {
                $empType = '';
            }                                
        return $empType;
    }
    public function getStartDateEndDate($id){
        $startDate = User::where('id', $id)
                        ->value('DOJ');
        $endDate = User::where('id', $id)
                        ->value('DOE');
                    //    dd($startDate, $endDate);
        return [$startDate, $endDate];
    }
    public function saveLocationsUser(Request $request)
    {
        $geofenceData = $request->input('geofence_data');
        // $id=$geofenceData['userId']['user_id'];
        // $this->storeAttendanceUser($request,$id);
        if (auth()->user()->can('Edit Settings module')) {
            // dd($geofenceData['userId']['user_id']);
            $dataExist=userSetting::where('name','attendance')->where('category','User')->where('user_id', $geofenceData['userId']['user_id'])->exists();
            if($dataExist){
                userSetting::where('name','=','attendance')->where('category','=','User')->where('user_id', $geofenceData['userId']['user_id'])
                            ->update(['check_in_lat'=>$geofenceData['checkin']['lat'], 'check_in_long'=>$geofenceData['checkin']['lng'],
                            'check_in_radius'=>$geofenceData['checkin']['radius'], 'check_in_address'=>$geofenceData['checkin']['location'],
                            'check_out_lat'=>$geofenceData['checkout']['lat'], 'check_out_long'=>$geofenceData['checkout']['lng'],
                            'check_out_radius'=>$geofenceData['checkout']['radius'], 'check_out_address'=>$geofenceData['checkout']['location']]);
            
            }
            else{
                if (isset($geofenceData['userId']['attendance_value'])) {
                    $value = $geofenceData['userId']['attendance_value'];
                }else{
                    $value = null;
                }
                userSetting::create(['name'=>"attendance", 'value'=> $value, 'category'=> 'User','user_id'=>$geofenceData['userId']['user_id'],
                                    'check_in_lat'=>$geofenceData['checkin']['lat'], 'check_in_long'=>$geofenceData['checkin']['lng'],
                                    'check_in_radius'=>$geofenceData['checkin']['radius'], 'check_in_address'=>$geofenceData['checkin']['location'],
                                    'check_out_lat'=>$geofenceData['checkout']['lat'], 'check_out_long'=>$geofenceData['checkout']['lng'],
                                    'check_out_radius'=>$geofenceData['checkout']['radius'], 'check_out_address'=>$geofenceData['checkout']['location']]);
            
            }
            return response()->json(['success' => true]);
        } else {
            return response()->json(['success' => false, 'error' => 'You do not have permission to edit settings.']);
        }
    }
}