From e12c7473f8d32e40c669dfce0596f4d91d6d4622 Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Tue, 7 Jan 2025 09:08:36 -0800 Subject: [PATCH] tinkering with the polymorphic eager load --- app/Http/Controllers/ReportsController.php | 9 ++++---- app/Http/Traits/CheckoutableTrait.php | 24 ++++++++++++++++++++++ app/Models/Asset.php | 2 ++ app/Models/CheckoutAcceptance.php | 4 +++- 4 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 app/Http/Traits/CheckoutableTrait.php diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index fbe0aa0384..4b50b4e747 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -1117,7 +1117,8 @@ class ReportsController extends Controller if ($showDeleted) { $query->withTrashed()->with(['assignedTo']); - } else { + } + else { $query->with(['assignedTo' => function ($query) { $query->withTrashed(); }]); @@ -1129,10 +1130,10 @@ class ReportsController extends Controller $filtered = $chunk->filter(function ($acceptance) { $acceptance_checkoutable_flag = false; - if($acceptance->checkoutable) { - $acceptance_checkoutable_flag = $acceptance->assignedTo; + if ($acceptance->checkoutable){ + $acceptance_checkoutable_flag = $acceptance->checkoutable->assignedTo(); } - // Return true if criteria match + // Return true if user return $acceptance->checkoutable_type === 'App\Models\Asset' && $acceptance_checkoutable_flag; })->map(function ($acceptance) { diff --git a/app/Http/Traits/CheckoutableTrait.php b/app/Http/Traits/CheckoutableTrait.php new file mode 100644 index 0000000000..f97e18ea4a --- /dev/null +++ b/app/Http/Traits/CheckoutableTrait.php @@ -0,0 +1,24 @@ +assignedType() === self::USER; + } + + public function checkedOutToLocation(): bool + { + return $this->assignedType() === self::LOCATION; + } + + public function checkedOutToAsset(): bool + { + return $this->assignedType() === self::ASSET; + } +} \ No newline at end of file diff --git a/app/Models/Asset.php b/app/Models/Asset.php index ce8b870eb2..839f0ac22c 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Events\CheckoutableCheckedOut; use App\Exceptions\CheckoutNotAllowed; use App\Helpers\Helper; +use App\Http\Traits\CheckoutableTrait; use App\Http\Traits\UniqueUndeletedTrait; use App\Models\Traits\Acceptable; use App\Models\Traits\Searchable; @@ -33,6 +34,7 @@ class Asset extends Depreciable protected $with = ['model', 'adminuser']; use CompanyableTrait; + use CheckoutableTrait; use HasFactory, Loggable, Requestable, Presentable, SoftDeletes, ValidatingTrait, UniqueUndeletedTrait; public const LOCATION = 'location'; diff --git a/app/Models/CheckoutAcceptance.php b/app/Models/CheckoutAcceptance.php index b1c6c79141..69afc3c853 100644 --- a/app/Models/CheckoutAcceptance.php +++ b/app/Models/CheckoutAcceptance.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Http\Traits\CheckoutableTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -11,6 +12,7 @@ use Illuminate\Notifications\Notifiable; class CheckoutAcceptance extends Model { use HasFactory, SoftDeletes, Notifiable; + use CheckoutableTrait; protected $casts = [ 'accepted_at' => 'datetime', @@ -35,7 +37,7 @@ class CheckoutAcceptance extends Model /** * The resource that was is out * - * @return Illuminate\Database\Eloquent\Relations\MorphTo + * @return \Illuminate\Database\Eloquent\Relations\MorphTo */ public function checkoutable() {