userRepository = $userRepository; } public function index() { return view('staff::staffs'); } public function data(Request $request) { $staffQuery = Staff::query()->with('user.role','department')->whereHas('user', function($query){ $query->where('id', '>', 1); }); if ($request->has('filter')) { $filter = $request->filter; $staffQuery = $staffQuery->where(function($query) use($filter) { if(isset($filter['role']['value'])){ $roles = $filter['role']['value']; $query->whereHas('user', function($query) use($roles){ $query->whereIn('role_id', $roles); }); } if(isset($filter['department']['value'])){ $departments = $filter['department']['value']; $query->whereIn('department_id', $departments); } if(isset($filter['badges']['value'])){ $badges = array_map('intval', $filter['badges']['value']); $query->whereJsonContains('badges', $badges); } if(isset($filter['upline']['value'])){ $upline = $filter['upline']['value']; $query->whereHas('user', function($query) use($upline){ $query->where('parent_id', $upline); }); } if(isset($filter['is_active']['value'])){ $status = $filter['is_active']['value']; $query->whereHas('user', function($query) use($status){ $query->where('is_active', $status); }); } if(isset($filter['global']['value'])){ $search = $filter['global']['value']; $query->whereHas('user', function($query) use($search){ $query->where(DB::raw("concat(first_name, ' ', last_name)"), 'like', '%' . $search . '%'); $query->orWhere('email', 'like', '%' . $search . '%'); $query->orWhere('phone', 'like', '%' . $search . '%'); }); } }); } $statistics['total_staffs'] = $staffQuery->clone()->count(); $statistics['total_active'] = $staffQuery->clone()->whereHas('user', function($query){ $query->where('is_active', 1); })->count(); $statistics['total_inactive'] = $staffQuery->clone()->whereHas('user', function($query){ $query->where('is_active', 0); })->count(); $staffs = $staffQuery->clone()->join('users', 'staff.user_id', '=', 'users.id')->orderByRaw("concat(users.first_name, ' ', users.last_name)")->paginate($request->rows); $roles = Role::where('id', '>', 1)->where('type','staff')->get(); if(isModuleActive('RolePermissionPlus')){ $roles = Role::where('id', '>', 1)->get(); } $departments = Department::where('status', 1)->orderBy('name')->get(); $badges = JobRequestBadge::where('active', 1)->orderByRaw('-`order` DESC')->get(); return response()->json([ 'staffs' => StaffResource::collection($staffs)->response()->getData(), 'statistics' => $statistics, 'roles' => $roles, 'departments' => $departments, 'badges' => $badges ]); } public function store(CreateStaffRequest $request) { try { $user = new User; if($request->hasFile('photo')) { $user->avatar= $this->saveAvatar($request->file('photo'),200,200); } $user->first_name = $request->first_name; $user->last_name = $request->last_name; $user->email = $request->email; $user->username = $request->username; $user->phone = $request->phone; $user->role_id = $request->role_id; $user->parent_id = $request->parent_id; $user->password = bcrypt($request->password); $user->is_active = filter_var($request->is_active, FILTER_VALIDATE_BOOLEAN); $user->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d'); $user->created_at = Carbon::parse($request->created_at)->format('Y-m-d'); $user->email_verified_at = Carbon::now(); $user->save(); $staff = new Staff; if($request->hasFile('ott_photo')) { $staff->ott_photo = $this->saveOtt($request->file('ott_photo')); } $staff->user_id = $user->id; $staff->department_id = $request->department_id; $staff->badges = $request->badges != null ? array_map('intval', $request->badges) : null; $staff->bank_name = $request->bank_name; $staff->bank_branch_name = $request->branch_name; $staff->bank_account_name = $request->account_name; $staff->bank_account_no = $request->account_number; $staff->date_of_joining = Carbon::parse($request->created_at)->format('Y-m-d'); $staff->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d'); $staff->address = $request->address; $staff->phone = $request->phone;; $staff->save(); //affiliate user if(isModuleActive('Affiliate')){ $affiliateRepo = new AffiliateRepository(); $affiliateRepo->affiliateUser($user->id); } if (isModuleActive('MLMDownline') && $request->parent_id != null) { if ($request->parent_id > 0) { app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, $request->parent_id); } else { app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, null); } } return response()->json([ 'message' => 'Staff Created Successfully.' ]); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function update(UpdateStaffRequest $request, $id) { try { $user = User::findOrFail($id); if($request->hasFile('photo')) { $this->deleteImage($user->avatar); $user->avatar= $this->saveAvatar($request->file('photo'),200,200); } $user->first_name = $request->first_name; $user->last_name = $request->last_name; $user->email = $request->email; $user->username = $request->username; $user->phone = $request->phone; $user->role_id = $request->role_id; $user->parent_id = $request->parent_id; $user->is_active = filter_var($request->is_active, FILTER_VALIDATE_BOOLEAN); $user->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d'); $user->created_at = Carbon::parse($request->created_at)->format('Y-m-d'); $user->save(); $staff = $user->staff; if($request->hasFile('ott_photo')) { $this->deleteImage( $staff->ott_photo); $staff->ott_photo = $this->saveOtt($request->file('ott_photo')); } $staff->department_id = $request->department_id; $staff->bank_name = $request->bank_name; $staff->bank_branch_name = $request->branch_name; $staff->bank_account_name = $request->account_name; $staff->bank_account_no = $request->account_number; $staff->date_of_joining = Carbon::parse($request->created_at)->format('Y-m-d'); $staff->date_of_birth = Carbon::parse($request->date_of_birth)->format('Y-m-d'); $staff->address = $request->address; $staff->phone = $request->phone;; $staff->save(); if (isModuleActive('MLMDownline') && $request->parent_id != null) { if ($request->parent_id > 0) { app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, $request->parent_id); } else { app(\Modules\MLMDownline\Repositories\UplineRepository::class)->assignUpline($user, null); } } return response()->json([ 'staff' => $staff, 'message' => 'Staff Updated Successfully.' ]); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updateStatus($id, Request $request) { try { $user = User::findOrFail($id); if($user){ $user->is_active = !$user->is_active; $user->save(); return response()->json([ 'message' => 'Staff Active Status Updated Successfully' ]); } } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updateBadges($id, Request $request) { try { $request->validate([ 'badges' => 'nullable|array' ]); $user = User::findOrFail($id); if($user){ $staff = $user->staff; $staff->badges = $request->badges; $staff->save(); return response()->json([ 'staff' => $staff, 'message' => 'Staff Badges Updated Successfully' ]); } } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updatePassword($id, Request $request) { try { $request->validate([ 'password' => 'required|min:8|confirmed', 'password_confirmation' => 'required', ]); $user = User::findOrFail($id); if($user){ $user->password = bcrypt($request->password); $user->save(); return response()->json([ 'message' => 'Staff Password Updated Successfully' ]); } } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function uplines(Request $request) { $uplines = Staff::with(['user:id,first_name,last_name,email,avatar,role_id','user.role:id,name'])->whereHas('user.role', function($query){ $query->where('id', '>', 1)->orderBy('first_name'); })->get(['user_id']); return response()->json([ 'uplines' => $uplines ]); } }