userDetail = $userDetail; } /** * This function is use for search query in Datatable. * Also for sorting function we are using join query for appropriate sorting result * @param $request * @return $this|array|Builder */ public function prepareSearchQuery($request) { $searchQuery = []; try { $searchQuery = $this->query()->select( 'users.id', 'users.name', //'status', 'users.email', 'users.created_at', 'roles.name as role_name', 'roles.id as role_id' ) ->join('model_has_roles', 'users.id', '=', 'model_has_roles.model_id') ->join('roles', 'model_has_roles.role_id', '=', 'roles.id') ->where('roles.name', '!=', config('access.users.admin_role')) ->where('roles.name', '!=', config('access.users.super_admin_role')); $columns = ['', 'id', 'name', 'status', 'created_at']; if (isset($request['status']) && $request['status'] != '') { $searchQuery = $searchQuery->where('users.status', $request['status']); } if (isset($request['name']) && $request['name'] != '') { $searchQuery = $searchQuery->where('users.name', 'like', '%' . $request['name'] . '%'); } if (isset($request['order']) && $request['order'] != "") { $searchQuery = $searchQuery->orderBy( $columns[$request['order'][0]['column']], $request['order'][0]['dir'] ); } } catch (Exception $ex) { Log::error($ex->getMessage()); } return $searchQuery; } /** * This function is for the format the Datatable columns * * @param $request * @return object */ public function getForDataTable($request): object { $response = (object)[]; try { $dataTableQuery = $this->prepareSearchQuery($request); // ->orderBy('id', 'DESC'); $response = Datatables::of($dataTableQuery) /*->addColumn( 'checkbox_action', function ($user) { return $user->user_checkbox_action; } )*/ ->addIndexColumn() /*->addColumn( 'status', function ($user) { return $user->user_status_action; } )*/ ->addColumn( 'email', function ($user) { return $user->email; } ) ->addColumn( 'created_at', function ($user) { return (($user->created_at) ? defaultDateTimeFormat($user->created_at) : '-'); } ) ->addColumn( 'action', function ($user) { if ( !empty($user->roles[0]['name']) != config('access.users.admin_role') || !empty($user->roles[0]['name']) != config('access.users.super_admin_role') || loggedInUser()->isSuperAdmin() || loggedInUser()->isAdmin() ) { return $user->user_action_buttons; } return ""; } ) ->setRowId( function ($user) { return 'recordRow-' . $user->id; } ) ->rawColumns(['status', 'action', 'checkbox_action']) ->make(true); } catch (Exception $ex) { Log::error($ex->getMessage()); } return $response; } /** * This function is for the create user * * @param array $request * @return User * @throws GeneralException */ public function create($request): User { try { $userData['name'] = $request['name'] ?? Constant::NULL; $userData['email'] = $request['email'] ?? Constant::NULL; $userData['mobile'] = $request['mobile'] ?? Constant::NULL; $userData['dharma_id'] = $request['dharma_id'] ?? Constant::NULL; $userData['status'] = '1' ?? Constant::NULL; $userData['username'] = generateUsername($request['name']) ?? Constant::NULL; $userData['gender'] = $request['gender'] ?? Constant::NULL; if(!empty($request['avatar'])) { $imageName = uploadImage($request, 'avatar', Constant::USER_IMAGE_UPLOAD_PATH . Constant::SLASH); $userData['avatar'] = $imageName['image_name'] ?? Constant::NULL; } $user = $this->query()->create($userData); $user->assignRole(config('access.users.shravak')); if($user) { $userDetailData['user_id'] = $user->id ?? Constant::NULL; $userDetailData['jati_id'] = $request['jati_id'] ?? Constant::NULL; $userDetailData['profession'] = $request['profession'] ?? Constant::NULL; $userDetailData['profession_speciality'] = $request['profession_speciality'] ?? Constant::NULL; /*$userDetailData['location'] = $request['location'] ?? Constant::NULL; $userDetailData['native_place'] = $request['native_place'] ?? Constant::NULL;*/ $userDetail = $this->userDetail->query()->create($userDetailData); } return $user; } catch (\Exception $ex) { Log::error($ex); throw new GeneralException(__('message.create_user_error')); } } /** * This function is for the update user * * @param object $user * @param array $request * @return User * @throws GeneralException */ public function update(object $user, $request): User { try { $userData['name'] = $request['name'] ?? $user->name; $userData['email'] = $request['email'] ?? $user->email; $userData['mobile'] = $request['mobile'] ?? $user->mobile; $userData['dharma_id'] = $request['dharma_id'] ?? $user->dharma_id; $userData['status'] = '1' ?? $user->status; $userData['username'] = $user->username; $userData['gender'] = $request['gender'] ?? $user->gender; if(!empty($request['avatar'])) { $imageName = uploadImage($request, 'avatar', Constant::SANT_IMAGE_UPLOAD_PATH . Constant::SLASH, $user->getRawOriginal('avatar')); $userData['avatar'] = $imageName['image_name'] ?? $user->avatar; } $userUpdated = $this->query()->where('id',$user->id)->update($userData); $userDetail = UserDetail::where('user_id',$user->id)->first(); if($userDetail) { $userDetailData['user_id'] = $user->id; $userDetailData['jati_id'] = $request['jati_id'] ?? $userDetail->jati_id; $userDetailData['profession'] = $request['profession'] ?? $userDetail->profession; $userDetailData['profession_speciality'] = $request['profession_speciality'] ?? $userDetail->profession_speciality; /* $userDetailData['location'] = $request['location'] ?? $userDetail->location; $userDetailData['native_place'] = $request['native_place'] ?? $userDetail->native_place;*/ $userDetailUpdated = $this->userDetail->query()->where('user_id',$user->id)->update($userDetailData); } return $user; } catch (\Exception $ex) { Log::error($ex); throw new GeneralException(__('message.update_user_error')); } } /** * This function is for the multiple records action from the grid * * @param string $actionType * @param array $data * @return bool * @throws GeneralException */ public function gridActions(string $actionType, array $data): bool { try { switch ($actionType) { case Constant::STATUS_ACTIVE: $this->query()->whereIn('id', $data)->update(['status' => Constant::STATUS_ONE]); return Constant::STATUS_TRUE; case Constant::STATUS_INACTIVE: $this->query()->whereIn('id', $data)->update(['status' => Constant::STATUS_ZERO]); return Constant::STATUS_TRUE; case Constant::STATUS_DELETE: $this->query()->whereIn('id', $data)->delete(); return Constant::STATUS_TRUE; default: break; } } catch (Exception $ex) { Log::error($ex->getMessage()); throw new GeneralException(__('message.delete_user_error')); } } }