From 177fadba8abfc7fd03dc7aef873be771a66b62ce Mon Sep 17 00:00:00 2001 From: Abdullah Alansari Date: Thu, 19 Nov 2015 07:41:32 +0300 Subject: [PATCH] Add better scoping for companayable children --- .../admin/AssetMaintenancesController.php | 2 +- app/controllers/admin/ReportsController.php | 4 +- app/models/Company.php | 51 +++++++++---------- app/models/License.php | 4 +- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/app/controllers/admin/AssetMaintenancesController.php b/app/controllers/admin/AssetMaintenancesController.php index d5016a5a15..b7434b1ddf 100644 --- a/app/controllers/admin/AssetMaintenancesController.php +++ b/app/controllers/admin/AssetMaintenancesController.php @@ -57,7 +57,7 @@ $maintenances = AssetMaintenance::with('asset','supplier','asset.company') ->whereNull('deleted_at'); - $maintenances = Company::scopeCompanayableChildren('asset', $maintenances); + $maintenances = Company::scopeCompanayableChildren(['asset'], $maintenances); if (Input::has('search')) { $maintenances = $maintenances->TextSearch(e(Input::get('search'))); diff --git a/app/controllers/admin/ReportsController.php b/app/controllers/admin/ReportsController.php index a8ac3e906f..0fd41d704a 100644 --- a/app/controllers/admin/ReportsController.php +++ b/app/controllers/admin/ReportsController.php @@ -556,7 +556,7 @@ class ReportsController extends AdminController $assetMaintenances = \AssetMaintenance::with( 'asset', 'supplier', 'asset.company' ) ->orderBy( 'created_at', 'DESC' ); - $assetMaintenances = Company::scopeCompanayableChildren( 'asset', $assetMaintenances )->get(); + $assetMaintenances = Company::scopeCompanayableChildren( [ 'asset' ], $assetMaintenances )->get(); return View::make( 'backend/reports/asset_maintenances', compact( 'assetMaintenances' ) ); @@ -575,7 +575,7 @@ class ReportsController extends AdminController $assetMaintenances = AssetMaintenance::with( 'asset', 'supplier' ) ->orderBy( 'created_at', 'DESC' ); - $assetMaintenances = Company::scopeCompanayableChildren( 'asset', $assetMaintenances )->get(); + $assetMaintenances = Company::scopeCompanayableChildren( [ 'asset' ], $assetMaintenances )->get(); $rows = [ ]; diff --git a/app/models/Company.php b/app/models/Company.php index d0dd7af435..ea430d8f1e 100644 --- a/app/models/Company.php +++ b/app/models/Company.php @@ -13,6 +13,14 @@ final class Company extends Elegant return $settings->full_multiple_companies_support == 1; } + private static function scopeCompanayablesDirectly($query, $column = 'company_id') + { + $company_id = Sentry::getUser()->company_id; + + if ($company_id == NULL) { return $query; } + else { return $query->where($column, '=', $company_id); } + } + public static function getSelectList() { $select_company = Lang::get('admin/companies/general.select_company'); @@ -65,43 +73,34 @@ final class Company extends Elegant public static function scopeCompanayables($query, $column = 'company_id') { if (!static::isFullMultipleCompanySupportEnabled()) { return $query; } - else - { - $company_id = Sentry::getUser()->company_id; - - if ($company_id == NULL) { return $query; } - else { return $query->where($column, '=', $company_id); } - } + else { return static::scopeCompanayablesDirectly($query, $column); } } - public static function scopeCompanayableChildren($companyable_name, $query) + public static function scopeCompanayableChildren(array $companyable_names, $query) { - if (!static::isFullMultipleCompanySupportEnabled()) { return $query; } + if (count($companyable_names) == 0) { throw new Exception('-_-'); } + else if (!static::isFullMultipleCompanySupportEnabled()) { return $query; } else { - return $query->whereHas($companyable_name, function ($query) + $f = function ($q) { - static::scopeCompanayables($query); - }); + static::scopeCompanayablesDirectly($q); + }; + + $q = $query->whereHas($companyable_names[0], $f); + + for ($i = 1; $i < count($companyable_names); $i++) + { + $q = $q->orWhereHas($companyable_names[$i], $f); + } + + return $q; } } public static function scopeActionLogs($query) { - if (!static::isFullMultipleCompanySupportEnabled()) { return $query; } - else - { - $f = function ( $q ) - { - static::scopeCompanayables( $q ); - }; - - return $query - ->whereHas( 'accessorylog', $f ) - ->orWhereHas( 'assetlog', $f ) - ->orWhereHas( 'licenselog', $f ) - ->orWhereHas( 'consumablelog', $f ); - } + return static::scopeCompanayableChildren(['accessorylog', 'assetlog', 'licenselog', 'consumablelog'], $query); } public static function getName($companayable) diff --git a/app/models/License.php b/app/models/License.php index a650af687b..9822fc5179 100755 --- a/app/models/License.php +++ b/app/models/License.php @@ -71,7 +71,7 @@ class License extends Depreciable */ public static function assetcount() { - return Company::scopeCompanayableChildren('license', LicenseSeat::with('license')) + return Company::scopeCompanayableChildren(['license'], LicenseSeat::with('license')) ->whereNull('deleted_at') ->count(); } @@ -94,7 +94,7 @@ class License extends Depreciable */ public static function availassetcount() { - return Company::scopeCompanayableChildren('license', LicenseSeat::with('license')) + return Company::scopeCompanayableChildren(['license'], LicenseSeat::with('license')) ->whereNull('assigned_to') ->whereNull('asset_id') ->whereNull('deleted_at')