improved tenant identification
This commit is contained in:
@ -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) {
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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()
|
||||
|
@ -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'));
|
||||
}
|
||||
|
@ -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 . '::';
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -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]);
|
||||
|
||||
|
@ -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'));
|
||||
}
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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');
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
||||
|
@ -36,11 +36,8 @@ class Kernel extends HttpKernel
|
||||
// 'session.auth',
|
||||
'session.errors',
|
||||
'csrf',
|
||||
'bindings',
|
||||
'install.redirect',
|
||||
'header.x',
|
||||
'company.settings',
|
||||
'company.currencies',
|
||||
'language',
|
||||
'firewall.all',
|
||||
],
|
||||
@ -55,16 +52,16 @@ class Kernel extends HttpKernel
|
||||
'auth.disabled',
|
||||
'throttle:api',
|
||||
'permission:read-api',
|
||||
'api.company',
|
||||
'company.identify',
|
||||
'bindings',
|
||||
'company.settings',
|
||||
'company.currencies',
|
||||
'language',
|
||||
'firewall.all',
|
||||
],
|
||||
|
||||
'common' => [
|
||||
'web',
|
||||
'company.identify',
|
||||
'bindings',
|
||||
'wizard.redirect',
|
||||
],
|
||||
|
||||
@ -77,6 +74,8 @@ class Kernel extends HttpKernel
|
||||
'web',
|
||||
'auth',
|
||||
'auth.disabled',
|
||||
'company.identify',
|
||||
'bindings',
|
||||
'wizard.redirect',
|
||||
'menu.admin',
|
||||
'permission:read-admin-panel',
|
||||
@ -86,6 +85,8 @@ class Kernel extends HttpKernel
|
||||
'web',
|
||||
'auth',
|
||||
'auth.disabled',
|
||||
'company.identify',
|
||||
'bindings',
|
||||
'permission:read-admin-panel',
|
||||
],
|
||||
|
||||
@ -93,6 +94,8 @@ class Kernel extends HttpKernel
|
||||
'web',
|
||||
'auth',
|
||||
'auth.disabled',
|
||||
'company.identify',
|
||||
'bindings',
|
||||
'menu.portal',
|
||||
'permission:read-client-portal',
|
||||
],
|
||||
@ -105,11 +108,9 @@ class Kernel extends HttpKernel
|
||||
'csrf',
|
||||
'signature',
|
||||
'signed.redirect',
|
||||
'company.signed',
|
||||
'company.identify',
|
||||
'bindings',
|
||||
'header.x',
|
||||
'company.settings',
|
||||
'company.currencies',
|
||||
'language',
|
||||
'firewall.all',
|
||||
],
|
||||
@ -141,13 +142,10 @@ class Kernel extends HttpKernel
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
|
||||
// Akaunting
|
||||
'api.company' => \App\Http\Middleware\ApiCompany::class,
|
||||
'api.key' => \App\Http\Middleware\CanApiKey::class,
|
||||
'api.key' => \App\Http\Middleware\RedirectIfNoApiKey::class,
|
||||
'auth.disabled' => \App\Http\Middleware\LogoutIfUserDisabled::class,
|
||||
'auth.redirect' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'company.currencies' => \App\Http\Middleware\LoadCurrencies::class,
|
||||
'company.settings' => \App\Http\Middleware\LoadSettings::class,
|
||||
'company.signed' => \App\Http\Middleware\SignedCompany::class,
|
||||
'company.identify' => \App\Http\Middleware\IdentifyCompany::class,
|
||||
'dropzone' => \App\Http\Middleware\Dropzone::class,
|
||||
'header.x' => \App\Http\Middleware\AddXHeader::class,
|
||||
'menu.admin' => \App\Http\Middleware\AdminMenu::class,
|
||||
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use App\Traits\Users;
|
||||
|
||||
class ApiCompany
|
||||
{
|
||||
use Users;
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
$company_id = $request->get('company_id');
|
||||
|
||||
if (empty($company_id)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
// Check if user can access company
|
||||
if (!$this->isUserCompany($company_id)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
// Set company id
|
||||
session(['company_id' => $company_id]);
|
||||
|
||||
// Set the company settings
|
||||
setting()->setExtraColumns(['company_id' => $company_id]);
|
||||
setting()->load(true);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@ class Authenticate extends Middleware
|
||||
* Get the path the user should be redirected to when they are not authenticated.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return string
|
||||
* @return string|null
|
||||
*/
|
||||
protected function redirectTo($request)
|
||||
{
|
||||
@ -18,4 +18,4 @@ class Authenticate extends Middleware
|
||||
return route('login');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
59
app/Http/Middleware/IdentifyCompany.php
Normal file
59
app/Http/Middleware/IdentifyCompany.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Traits\Users;
|
||||
use Closure;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
|
||||
class IdentifyCompany
|
||||
{
|
||||
use Users;
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @param string[] ...$guards
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Illuminate\Auth\AuthenticationException
|
||||
*/
|
||||
public function handle($request, Closure $next, ...$guards)
|
||||
{
|
||||
$company_id = $request->isApi()
|
||||
? $this->getCompanyIdFromApi($request)
|
||||
: $this->getCompanyIdFromWeb($request);
|
||||
|
||||
if (empty($company_id)) {
|
||||
abort(500, 'Missing company');
|
||||
}
|
||||
|
||||
// Check if user can access company
|
||||
if ($request->isNotSigned($company_id) && $this->isNotUserCompany($company_id)) {
|
||||
throw new AuthenticationException('Unauthenticated.', $guards);
|
||||
}
|
||||
|
||||
// Set company as current
|
||||
company($company_id)->makeCurrent();
|
||||
|
||||
// Fix routes
|
||||
app('url')->defaults(['company_id' => $company_id]);
|
||||
$request->route()->forgetParameter('company_id');
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
protected function getCompanyIdFromWeb($request)
|
||||
{
|
||||
return (int) $request->route('company_id');
|
||||
}
|
||||
|
||||
protected function getCompanyIdFromApi($request)
|
||||
{
|
||||
$company_id = $request->get('company_id', $request->header('X-Company'));
|
||||
|
||||
return $company_id ?: optional($this->getFirstCompanyOfUser())->id;
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Utilities\Overrider;
|
||||
use Closure;
|
||||
|
||||
class LoadCurrencies
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
$company_id = session('company_id');
|
||||
|
||||
if (empty($company_id)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
Overrider::load('currencies');
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Utilities\Overrider;
|
||||
use Closure;
|
||||
|
||||
class LoadSettings
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
$company_id = session('company_id');
|
||||
|
||||
if (empty($company_id)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
Overrider::load('settings');
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
@ -20,15 +20,11 @@ class RedirectIfAuthenticated
|
||||
$guards = empty($guards) ? [null] : $guards;
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
if (auth()->guard($guard)->check()) {
|
||||
$user = user();
|
||||
|
||||
if ($user->contact) {
|
||||
return redirect()->route('portal.dashboard');
|
||||
}
|
||||
|
||||
return redirect()->route($user->landing_page);
|
||||
if (!auth()->guard($guard)->check()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return redirect(user()->getLandingPageOfUser());
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
|
@ -4,7 +4,7 @@ namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class CanApiKey
|
||||
class RedirectIfNoApiKey
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
@ -14,15 +14,15 @@ class CanApiKey
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if ($request['alias'] != 'core') {
|
||||
if (setting('apps.api_key')) {
|
||||
return $next($request);
|
||||
} else {
|
||||
redirect('apps/api-key/create')->send();
|
||||
}
|
||||
} else {
|
||||
{
|
||||
if ($request->get('alias') == 'core') {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
if (setting('apps.api_key')) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
return redirect()->route('apps.api-key.create');
|
||||
}
|
||||
}
|
||||
}
|
@ -3,7 +3,6 @@
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class RedirectIfNotInstalled
|
||||
{
|
||||
@ -22,11 +21,11 @@ class RedirectIfNotInstalled
|
||||
}
|
||||
|
||||
// Already in the installation wizard
|
||||
if (Str::startsWith($request->getPathInfo(), '/install')) {
|
||||
if ($request->isInstall()) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
// Not installed, redirect to installation wizard
|
||||
redirect()->route('install.requirements')->send();
|
||||
return redirect()->route('install.requirements');
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class RedirectIfWizardNotCompleted
|
||||
{
|
||||
@ -22,11 +21,11 @@ class RedirectIfWizardNotCompleted
|
||||
}
|
||||
|
||||
// Check url
|
||||
if (Str::startsWith($request->getPathInfo(), '/wizard') || Str::startsWith($request->getPathInfo(), '/settings')) {
|
||||
if ($request->isWizard(company_id()) || $request->is(company_id() . '/settings/*')) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
// Redirect to wizard
|
||||
redirect()->route('wizard.edit')->send();
|
||||
return redirect()->route('wizard.edit');
|
||||
}
|
||||
}
|
||||
|
@ -24,14 +24,14 @@ class RedirectSignedIfAuthenticated
|
||||
$page = 'dashboard';
|
||||
$params = [];
|
||||
|
||||
if ($request->segment(2) == 'invoices') {
|
||||
if ($request->segment(3) == 'invoices') {
|
||||
$page = 'invoices.show';
|
||||
|
||||
$invoice = Document::find($request->segment(3));
|
||||
$invoice = Document::find($request->segment(4));
|
||||
|
||||
$params = [$invoice->id];
|
||||
}
|
||||
|
||||
redirect()->route($prefix . $page, $params)->send();
|
||||
return redirect()->route($prefix . $page, $params);
|
||||
}
|
||||
}
|
||||
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class SignedCompany
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
$company_id = $request->get('company_id');
|
||||
|
||||
if (empty($company_id)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
// Set company id
|
||||
session(['company_id' => $company_id]);
|
||||
|
||||
// Set the company settings
|
||||
setting()->setExtraColumns(['company_id' => $company_id]);
|
||||
setting()->load(true);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
@ -9,7 +9,6 @@ use Illuminate\View\View;
|
||||
|
||||
class DocumentType
|
||||
{
|
||||
|
||||
/**
|
||||
* Bind data to the view.
|
||||
*
|
||||
@ -18,14 +17,15 @@ class DocumentType
|
||||
*/
|
||||
public function compose(View $view)
|
||||
{
|
||||
if (!empty(request()->route())) {
|
||||
$route = request()->route();
|
||||
$route = request()->route();
|
||||
|
||||
/** @var Invoices|Bills|PortalInvoices $controller */
|
||||
$controller = $route->getController();
|
||||
|
||||
$view->with(['type' => $controller->type ?? '']);
|
||||
if (empty($route)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/** @var Invoices|Bills|PortalInvoices $controller */
|
||||
$controller = $route->getController();
|
||||
|
||||
$view->with(['type' => $controller->type ?? '']);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ use Illuminate\View\View;
|
||||
|
||||
class InvoiceText
|
||||
{
|
||||
|
||||
/**
|
||||
* Bind data to the view.
|
||||
*
|
||||
@ -41,5 +40,4 @@ class InvoiceText
|
||||
|
||||
$view->with(['text_override' => $text_override]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ class Logo
|
||||
$image->make($path)->resize($width, $height)->encode();
|
||||
});
|
||||
} catch (NotReadableException | \Exception $e) {
|
||||
Log::info('Company ID: ' . session('company_id') . ' viewcomposer/logo.php exception.');
|
||||
Log::info('Company ID: ' . company_id() . ' viewcomposer/logo.php exception.');
|
||||
Log::info($e->getMessage());
|
||||
|
||||
$path = base_path('public/img/company.png');
|
||||
|
@ -27,6 +27,8 @@ class Notifications
|
||||
return;
|
||||
}
|
||||
|
||||
$path = str_replace('{company_id}/', '', $path);
|
||||
|
||||
if (!$notifications = $this->getNotifications($path)) {
|
||||
return;
|
||||
}
|
||||
|
@ -31,6 +31,8 @@ class Suggestions
|
||||
return;
|
||||
}
|
||||
|
||||
$path = str_replace('{company_id}/', '', $path);
|
||||
|
||||
if (!$suggestions = $this->getSuggestions($path)) {
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user