From e796c0da4ad86f153bbdd5ae02e8d67c8653813e Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Wed, 10 Sep 2025 12:08:14 -0700 Subject: [PATCH] disallows checkout of expired or terminated licenses --- app/Http/Transformers/LicenseSeatsTransformer.php | 2 +- app/Http/Transformers/LicensesTransformer.php | 4 ++-- app/Models/License.php | 12 ++++++++++++ app/Presenters/LicensePresenter.php | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/Http/Transformers/LicenseSeatsTransformer.php b/app/Http/Transformers/LicenseSeatsTransformer.php index 17025e7f9f..d018934e18 100644 --- a/app/Http/Transformers/LicenseSeatsTransformer.php +++ b/app/Http/Transformers/LicenseSeatsTransformer.php @@ -51,7 +51,7 @@ class LicenseSeatsTransformer 'reassignable' => (bool) $seat->license->reassignable, 'notes' => e($seat->notes), 'user_can_checkout' => (($seat->assigned_to == '') && ($seat->asset_id == '')), - 'disabled' => $seat->unreassignable_seat, + 'disabled' => $seat->unreassignable_seat || $seat->license->isInactive(), ]; $permissions_array['available_actions'] = [ diff --git a/app/Http/Transformers/LicensesTransformer.php b/app/Http/Transformers/LicensesTransformer.php index 24822efeca..e3fa1776e1 100644 --- a/app/Http/Transformers/LicensesTransformer.php +++ b/app/Http/Transformers/LicensesTransformer.php @@ -54,11 +54,11 @@ class LicensesTransformer 'updated_at' => Helper::getFormattedDateObject($license->updated_at, 'datetime'), 'deleted_at' => Helper::getFormattedDateObject($license->deleted_at, 'datetime'), 'user_can_checkout' => (bool) ($license->free_seats_count > 0), - + 'disabled' => $license->isInactive(), ]; $permissions_array['available_actions'] = [ - 'checkout' => Gate::allows('checkout', License::class), + 'checkout' => Gate::allows('checkout', $license), 'checkin' => Gate::allows('checkin', License::class), 'clone' => Gate::allows('create', License::class), 'update' => Gate::allows('update', License::class), diff --git a/app/Models/License.php b/app/Models/License.php index ecd1b003e3..f80886236c 100755 --- a/app/Models/License.php +++ b/app/Models/License.php @@ -296,6 +296,18 @@ class License extends Depreciable } $this->attributes['termination_date'] = $value; } + + public function isInactive(): bool +{ + $day = now()->startOfDay(); + + $expired = $this->expiration_date && $this->asDateTime($this->expiration_date)->startofDay()->lessThanOrEqualTo($day); + + $terminated = $this->termination_date && $this->asDateTime($this->termination_date)->startofDay()->lessThanOrEqualTo($day); + + + return $expired || $terminated; +} /** * Sets free_seat_count attribute * diff --git a/app/Presenters/LicensePresenter.php b/app/Presenters/LicensePresenter.php index b0518ef264..6975a58d88 100644 --- a/app/Presenters/LicensePresenter.php +++ b/app/Presenters/LicensePresenter.php @@ -202,7 +202,7 @@ class LicensePresenter extends Presenter 'switchable' => false, 'title' => trans('general.checkin').'/'.trans('general.checkout'), 'visible' => true, - 'formatter' => 'licensesInOutFormatter', + 'formatter' => 'licenseSeatInOutFormatter', 'printIgnore' => true, ];