middleware('auth'); } public function index() { return view('theme::cms.companies.index'); } public function table(Request $request) { $companies = Company::query() ->select( 'companies.id', 'companies.name_english', 'companies.name_chinese', ) ->when($request->company_name, function ($query) use ($request) { $query->where(function($query2) use ($request){ $query2->orWhere('companies.name_english', 'like', '%' . $request->company_name . '%'); $query2->orWhere('companies.name_chinese', 'like', '%' . $request->company_name . '%'); }); }); return Datatables::of($companies) ->escapeColumns(['id']) ->addColumn('bookkeeping_subscription', function ($company) { // Temporary return ' Active ' . __("Expiration") . ': 2024/05/16 '; }) ->addColumn('bookkeeping_requests_count', function ($company) { // Temporary return '0'; }) ->addColumn('com_sec_subscription', function ($company) { // Temporary return ' Expired ' . __("Expiration") . ': 2023/04/16 '; }) ->addColumn('com_sec_requests_count', function ($company) { // Temporary return '0'; }) ->addColumn('actions', function ($company) { $viewAction = '' . __("View") . ''; $editAction = '' . __("Edit") . ''; $actions = $viewAction . '|' . $editAction; return $actions; }) ->make(true); } public function show(Company $company) { $roles = Role::whereIn('id', [ Role::OWNER_ROLE, Role::ADMINISTRATOR_ROLE, Role::BOOKKEEPER_ROLE, Role::COMPANY_SECRETARY_ROLE, ])->get(); $company_subscription = CompanySubscription::with('subscription')->where('company_id', $company->id)->get(); return view('theme::cms.companies.show')->with([ 'company' => $company, 'roles' => $roles, 'company_subscription' => $company_subscription, ]); } public function usersTable(Company $company) { $users = User::query() ->select( 'users.id', 'users.first_name', 'users.last_name', 'users.phone', 'users.email', 'roles.display_name', 'users.status', ) ->leftJoin('roles', 'users.role_id', '=', 'roles.id') ->where('users.company_id', $company->id); return Datatables::of($users) ->escapeColumns(['id']) ->addColumn('status', function ($user) { $status = $user->status; if ($status == 'active') { $status = '' . ucwords($status) . ''; } else if ($status == 'inactive') { $status = '' . ucwords($status) . ''; } return $status; }) ->addColumn('actions', function ($user) { $suspendAction = '' . __("Suspend user") . ''; $activateAction = '' . __("Activate user") . ''; $removeAction = '' . __("Remove user") . ''; $viewUserLogAction = 'id) . '" href="#">' . __("View user log") . ''; $editUserAction = '' . __("Edit user") . ''; $actions = ' '; return $actions; }) ->make(true); } public function accessLogsTable(Company $company) { $logs = UserAccessLog::query() ->select( 'users.email', 'user_access_logs.created_at', 'user_access_logs.event', 'user_access_logs.description', 'user_access_logs.status', ) ->leftJoin('users', 'user_access_logs.user_id', '=', 'users.id') ->where('users.company_id', $company->id); return Datatables::of($logs) ->escapeColumns(['id']) ->addColumn('date', function ($log) { return date('Ymd', strtotime($log->created_at)); }) ->addColumn('time', function ($log) { return date('H:i', strtotime($log->created_at)); }) ->addColumn('status', function ($log) { return '' . ucwords($log->status) . ''; }) ->make(true); } public function updateXeroApi(Company $company, Request $request) { $validator = Validator::make($request->all(), [ 'xero_api_key' => 'required|string|max:255', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } else { $company->update([ 'xero_api_key' => $request->xero_api_key, ]); return response()->json([ 'success' => true, 'message' => __("All changes have been saved!"), ]); } } public function sendUserInvite(Company $company, Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|string|email|max:255|unique:users', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } else { $token = ''; while (true) { $token = str()->random(20); $tokenExists = InviteUser::where('token', $token)->first(); if (!$tokenExists) { break; } } InviteUser::create([ 'email' => $request->email, 'token' => $token, 'user_id' => $request->user()->id, 'company_id' => $company->id, 'is_used' => false, ]); $url = route('register', ['token' => $token]); Mail::to($request->email)->send(new SendUserInvite($url, $company->name)); return response()->json([ 'success' => true, 'message' => __("Invitation sent!"), ]); } } }