improved tenant identification

This commit is contained in:
Denis Duliçi
2021-04-16 00:59:43 +03:00
parent 9635e6be5d
commit 2b07442260
126 changed files with 1719 additions and 999 deletions

View File

@ -69,7 +69,7 @@ class Companies extends ApiController
public function update(Company $company, Request $request)
{
try {
$company = $this->dispatch(new UpdateCompany($company, $request, session('company_id')));
$company = $this->dispatch(new UpdateCompany($company, $request));
return $this->item($company->fresh(), new Transformer());
} catch (\Exception $e) {
@ -86,7 +86,7 @@ class Companies extends ApiController
public function enable(Company $company)
{
try {
$company = $this->dispatch(new UpdateCompany($company, request()->merge(['enabled' => 1]), session('company_id')));
$company = $this->dispatch(new UpdateCompany($company, request()->merge(['enabled' => 1])));
return $this->item($company->fresh(), new Transformer());
} catch (\Exception $e) {
@ -103,7 +103,7 @@ class Companies extends ApiController
public function disable(Company $company)
{
try {
$company = $this->dispatch(new UpdateCompany($company, request()->merge(['enabled' => 0]), session('company_id')));
$company = $this->dispatch(new UpdateCompany($company, request()->merge(['enabled' => 0])));
return $this->item($company->fresh(), new Transformer());
} catch (\Exception $e) {
@ -120,7 +120,7 @@ class Companies extends ApiController
public function destroy(Company $company)
{
try {
$this->dispatch(new DeleteCompany($company, session('company_id')));
$this->dispatch(new DeleteCompany($company));
return $this->response->noContent();
} catch (\Exception $e) {

View File

@ -37,16 +37,14 @@ class Login extends Controller
{
// Attempt to login
if (!auth()->attempt($request->only('email', 'password'), $request->get('remember', false))) {
$response = [
return response()->json([
'status' => null,
'success' => false,
'error' => true,
'message' => trans('auth.failed'),
'data' => null,
'redirect' => null,
];
return response()->json($response);
]);
}
// Get user object
@ -56,49 +54,64 @@ class Login extends Controller
if (!$user->enabled) {
$this->logout();
$response = [
return response()->json([
'status' => null,
'success' => false,
'error' => true,
'message' => trans('auth.disabled'),
'data' => null,
'redirect' => null,
];
return response()->json($response);
]);
}
// Check if is customer
if ($user->can('read-client-portal')) {
$path = session('url.intended', 'portal');
$company = $user->withoutEvents(function () use ($user) {
return $user->companies()->enabled()->first();
});
// Path must start with 'portal' prefix
if (!Str::startsWith($path, 'portal')) {
$path = 'portal';
// Logout if no company assigned
if (!$company) {
$this->logout();
return response()->json([
'status' => null,
'success' => false,
'error' => true,
'message' => trans('auth.error.no_company'),
'data' => null,
'redirect' => null,
]);
}
// Redirect to portal if is customer
if ($user->can('read-client-portal')) {
$path = session('url.intended', '');
// Path must start with company id and 'portal' prefix
if (!Str::startsWith($path, $company->id . '/portal')) {
$path = route('portal.dashboard', ['company_id' => $company->id]);
}
$response = [
return response()->json([
'status' => null,
'success' => true,
'error' => false,
'message' => null,
'data' => null,
'redirect' => url($path),
];
return response()->json($response);
]);
}
$response = [
// Redirect to landing page if is user
$url = route($user->landing_page, ['company_id' => $company->id]);
return response()->json([
'status' => null,
'success' => true,
'error' => false,
'message' => null,
'data' => null,
'redirect' => redirect()->intended(route($user->landing_page))->getTargetUrl(),
];
return response()->json($response);
'redirect' => redirect()->intended($url)->getTargetUrl(),
]);
}
public function destroy()

View File

@ -42,20 +42,16 @@ class Transactions extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.transactions', 2));
if ($response['success']) {
$response['redirect'] = route('transactions.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.transactions', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['banking', 'transactions']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -97,20 +97,16 @@ class Transfers extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.transfers', 2));
if ($response['success']) {
$response['redirect'] = route('transfers.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.transfers', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['banking', 'transfers']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -11,7 +11,6 @@ use App\Models\Common\Company;
use App\Models\Setting\Currency;
use App\Traits\Uploads;
use App\Traits\Users;
use App\Utilities\Overrider;
class Companies extends Controller
{
@ -60,7 +59,7 @@ class Companies extends Controller
*/
public function store(Request $request)
{
$company_id = session('company_id');
$current_company_id = company_id();
$response = $this->ajaxDispatch(new CreateCompany($request));
@ -78,9 +77,7 @@ class Companies extends Controller
flash($message)->error()->important();
}
session(['company_id' => $company_id]);
Overrider::load('settings');
company($current_company_id)->makeCurrent();
return response()->json($response);
}
@ -94,7 +91,7 @@ class Companies extends Controller
*/
public function edit(Company $company)
{
if (!$this->isUserCompany($company->id)) {
if ($this->isNotUserCompany($company->id)) {
return redirect()->route('companies.index');
}
@ -113,9 +110,9 @@ class Companies extends Controller
*/
public function update(Company $company, Request $request)
{
$company_id = session('company_id');
$current_company_id = company_id();
$response = $this->ajaxDispatch(new UpdateCompany($company, $request, session('company_id')));
$response = $this->ajaxDispatch(new UpdateCompany($company, $request, company_id()));
if ($response['success']) {
$response['redirect'] = route('companies.index');
@ -131,9 +128,7 @@ class Companies extends Controller
flash($message)->error()->important();
}
session(['company_id' => $company_id]);
Overrider::load('settings');
company($current_company_id)->makeCurrent();
return response()->json($response);
}
@ -147,7 +142,7 @@ class Companies extends Controller
*/
public function enable(Company $company)
{
$response = $this->ajaxDispatch(new UpdateCompany($company, request()->merge(['enabled' => 1]), session('company_id')));
$response = $this->ajaxDispatch(new UpdateCompany($company, request()->merge(['enabled' => 1])));
if ($response['success']) {
$response['message'] = trans('messages.success.enabled', ['type' => trans_choice('general.companies', 1)]);
@ -165,7 +160,7 @@ class Companies extends Controller
*/
public function disable(Company $company)
{
$response = $this->ajaxDispatch(new UpdateCompany($company, request()->merge(['enabled' => 0]), session('company_id')));
$response = $this->ajaxDispatch(new UpdateCompany($company, request()->merge(['enabled' => 0])));
if ($response['success']) {
$response['message'] = trans('messages.success.disabled', ['type' => trans_choice('general.companies', 1)]);
@ -183,7 +178,7 @@ class Companies extends Controller
*/
public function destroy(Company $company)
{
$response = $this->ajaxDispatch(new DeleteCompany($company, session('company_id')));
$response = $this->ajaxDispatch(new DeleteCompany($company));
$response['redirect'] = route('companies.index');
@ -210,22 +205,21 @@ class Companies extends Controller
public function switch(Company $company)
{
if ($this->isUserCompany($company->id)) {
$old_company_id = session('company_id');
$old_company_id = company_id();
$company->makeCurrent();
session(['company_id' => $company->id]);
session(['dashboard_id' => user()->dashboards()->enabled()->pluck('id')->first()]);
Overrider::load('settings');
event(new \App\Events\Common\CompanySwitched($company, $old_company_id));
// Check wizard
if (!setting('wizard.completed', false)) {
return redirect()->route('wizard.edit');
return redirect()->route('wizard.edit', ['company_id' => $company->id]);
}
}
return redirect()->route('dashboard');
return redirect()->route('dashboard', ['company_id' => $company->id]);
}
public function autocomplete()

View File

@ -7,7 +7,6 @@ use App\Http\Requests\Common\Dashboard as Request;
use App\Jobs\Common\CreateDashboard;
use App\Jobs\Common\DeleteDashboard;
use App\Jobs\Common\UpdateDashboard;
use App\Models\Common\Company;
use App\Models\Common\Dashboard;
use App\Models\Common\Widget;
use App\Traits\DateTime;
@ -60,7 +59,7 @@ class Dashboards extends Controller
if (empty($dashboard)) {
$dashboard = $this->dispatch(new CreateDashboard([
'company_id' => session('company_id'),
'company_id' => company_id(),
'name' => trans_choice('general.dashboards', 1),
'default_widgets' => 'core',
]));
@ -89,7 +88,7 @@ class Dashboards extends Controller
*/
public function create()
{
$users = Company::find(session('company_id'))->users()->get()->sortBy('name');
$users = company()->users()->get()->sortBy('name');
return view('common.dashboards.create', compact('users'));
}
@ -130,11 +129,11 @@ class Dashboards extends Controller
*/
public function edit(Dashboard $dashboard)
{
if (!$this->isUserDashboard($dashboard->id)) {
if ($this->isNotUserDashboard($dashboard->id)) {
return redirect()->route('dashboards.index');
}
$users = Company::find(session('company_id'))->users()->get()->sortBy('name');
$users = company()->users()->get()->sortBy('name');
return view('common.dashboards.edit', compact('dashboard', 'users'));
}

View File

@ -16,7 +16,7 @@ class Import extends Controller
*/
public function create($group, $type, $route = null)
{
$path = $group . '/' . $type;
$path = company_id() . '/' . $group . '/' . $type;
if (module($group) instanceof \Akaunting\Module\Module) {
$namespace = $group . '::';

View File

@ -111,20 +111,16 @@ class Items extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.items', 2));
if ($response['success']) {
$response['redirect'] = route('items.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.items', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['common', 'items']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -182,7 +182,7 @@ class Uploads extends Controller
$folders = explode('/', $media->directory);
// Check if company can access media
if ($folders[0] != session('company_id')) {
if ($folders[0] != company_id()) {
return false;
}

View File

@ -73,7 +73,7 @@ class Updates extends Controller
Cache::forget('updates');
Cache::forget('versions');
event(new UpdateCacheCleared(session('company_id')));
event(new UpdateCacheCleared(company_id()));
return redirect()->back();
}
@ -274,7 +274,7 @@ class Updates extends Controller
set_time_limit(900); // 15 minutes
try {
$this->dispatch(new FinishUpdate($request['alias'], $request['version'], $request['installed'], session('company_id')));
$this->dispatch(new FinishUpdate($request['alias'], $request['version'], $request['installed'], company_id()));
$json = [
'success' => true,

View File

@ -110,7 +110,7 @@ class DocumentItemColumns extends Controller
$company_id = $request->get('company_id');
if (empty($company_id)) {
$company_id = session('company_id');
$company_id = company_id();
}
foreach ($fields as $key => $value) {

View File

@ -32,7 +32,7 @@ class InvoiceTemplates extends Controller
$company_id = $request->get('company_id');
if (empty($company_id)) {
$company_id = session('company_id');
$company_id = company_id();
}
foreach ($fields as $key => $value) {

View File

@ -56,7 +56,7 @@ class Items extends Controller
{
if ($request->get('type', false) == 'inline') {
$data = [
'company_id' => session('company_id'),
'company_id' => company_id(),
'name' => '',
'sale_price' => 0,
'purchase_price' => 0,

View File

@ -204,7 +204,7 @@ class Item extends Controller
try {
$this->dispatch(new CopyFiles($request['alias'], $request['path']));
event(new \App\Events\Module\Copied($request['alias'], session('company_id')));
event(new \App\Events\Module\Copied($request['alias'], company_id()));
$json = [
'success' => true,
@ -236,9 +236,9 @@ class Item extends Controller
public function install(Request $request)
{
try {
event(new \App\Events\Module\Installing($request['alias'], session('company_id')));
event(new \App\Events\Module\Installing($request['alias'], company_id()));
$this->dispatch(new InstallModule($request['alias'], session('company_id')));
$this->dispatch(new InstallModule($request['alias'], company_id()));
$name = module($request['alias'])->getName();
@ -277,7 +277,7 @@ class Item extends Controller
try {
$name = module($alias)->getName();
$this->dispatch(new UninstallModule($alias, session('company_id')));
$this->dispatch(new UninstallModule($alias, company_id()));
$message = trans('modules.uninstalled', ['module' => $name]);
@ -296,7 +296,7 @@ class Item extends Controller
try {
$name = module($alias)->getName();
$this->dispatch(new EnableModule($alias, session('company_id')));
$this->dispatch(new EnableModule($alias, company_id()));
$message = trans('modules.enabled', ['module' => $name]);
@ -315,7 +315,7 @@ class Item extends Controller
try {
$name = module($alias)->getName();
$this->dispatch(new DisableModule($alias, session('company_id')));
$this->dispatch(new DisableModule($alias, company_id()));
$message = trans('modules.disabled', ['module' => $name]);

View File

@ -19,7 +19,7 @@ class My extends Controller
{
$purchased = $this->getMyModules();
$modules = $this->getInstalledModules();
$installed = Module::where('company_id', '=', session('company_id'))->pluck('enabled', 'alias')->toArray();
$installed = Module::where('company_id', '=', company_id())->pluck('enabled', 'alias')->toArray();
return $this->response('modules.my.index', compact('purchased', 'modules', 'installed'));
}

View File

@ -119,12 +119,12 @@ class Invoices extends Controller
$codes = explode('.', $payment_method_key);
if (!isset($payment_actions[$codes[0]])) {
$payment_actions[$codes[0]] = URL::signedRoute('signed.invoices.' . $codes[0] . '.show', [$invoice->id, 'company_id' => session('company_id')]);
$payment_actions[$codes[0]] = URL::signedRoute('signed.invoices.' . $codes[0] . '.show', [$invoice->id]);
}
}
$print_action = URL::signedRoute('signed.invoices.print', [$invoice->id, 'company_id' => session('company_id')]);
$pdf_action = URL::signedRoute('signed.invoices.pdf', [$invoice->id, 'company_id' => session('company_id')]);
$print_action = URL::signedRoute('signed.invoices.print', [$invoice->id]);
$pdf_action = URL::signedRoute('signed.invoices.pdf', [$invoice->id]);
event(new \App\Events\Document\DocumentViewed($invoice));

View File

@ -128,20 +128,16 @@ class Bills extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.bills', 2));
if ($response['success']) {
$response['redirect'] = route('bills.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.bills', 1)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['purchases', 'bills']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -134,20 +134,16 @@ class Payments extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.payments', 2));
if ($response['success']) {
$response['redirect'] = route('payments.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.payments', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['purchases', 'payments']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -161,20 +161,16 @@ class Vendors extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.vendors', 2));
if ($response['success']) {
$response['redirect'] = route('vendors.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.vendors', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['purchases', 'vendors']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -159,20 +159,16 @@ class Customers extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.customers', 2));
if ($response['success']) {
$response['redirect'] = route('customers.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.customers', 1)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['sales', 'customers']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -127,20 +127,16 @@ class Invoices extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.invoices', 2));
if ($response['success']) {
$response['redirect'] = route('invoices.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.invoices', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['sales', 'invoices']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -134,20 +134,16 @@ class Revenues extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.revenues', 2));
if ($response['success']) {
$response['redirect'] = route('revenues.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['sales', 'revenues']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -92,20 +92,16 @@ class Categories extends Controller
*/
public function import(ImportRequest $request)
{
$response = $this->importExcel(new Import, $request);
$response = $this->importExcel(new Import, $request, trans_choice('general.categories', 2));
if ($response['success']) {
$response['redirect'] = route('categories.index');
$message = trans('messages.success.imported', ['type' => trans_choice('general.categories', 2)]);
flash($message)->success();
flash($response['message'])->success();
} else {
$response['redirect'] = route('import.create', ['settings', 'categories']);
$message = $response['message'];
flash($message)->error()->important();
flash($response['message'])->error()->important();
}
return response()->json($response);

View File

@ -16,7 +16,7 @@ class Modules extends Controller
*/
public function __construct()
{
$alias = request()->segment(1);
$alias = request()->segment(2);
// Add CRUD permission check
$this->middleware('permission:create-' . $alias . '-settings')->only('create', 'store', 'duplicate', 'import');

View File

@ -80,7 +80,7 @@ class Settings extends Controller
$company_id = $request->get('company_id');
if (empty($company_id)) {
$company_id = session('company_id');
$company_id = company_id();
}
$company = Company::find($company_id);

View File

@ -31,7 +31,7 @@ class Companies extends Controller
*/
public function edit()
{
$company = Company::find(session('company_id'));
$company = Company::find(company_id());
return view('wizard.companies.edit', compact('company'));
}
@ -46,7 +46,7 @@ class Companies extends Controller
public function update(Request $request)
{
// Company
$company = Company::find(session('company_id'));
$company = Company::find(company_id());
$fields = $request->all();