diff --git a/app/Http/Controllers/Licenses/LicensesController.php b/app/Http/Controllers/Licenses/LicensesController.php
index b1728469b4..bdc0dc74e1 100755
--- a/app/Http/Controllers/Licenses/LicensesController.php
+++ b/app/Http/Controllers/Licenses/LicensesController.php
@@ -256,6 +256,9 @@ class LicensesController extends Controller
else {
$checkedout_seats_count = ($total_seats_count - $available_seats_count);
}
+ if($license->isInactive()){
+ session()->flash('warning', (trans('admin/licenses/message.checkout.license_is_inactive')));
+ }
$this->authorize('view', $license);
return view('licenses.view', compact('license'))
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..39079c6ec5 100644
--- a/app/Http/Transformers/LicensesTransformer.php
+++ b/app/Http/Transformers/LicensesTransformer.php
@@ -54,7 +54,7 @@ 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'] = [
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..a1edf2cf76 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' => 'licenseInOutFormatter',
'printIgnore' => true,
];
diff --git a/resources/lang/en-US/admin/licenses/message.php b/resources/lang/en-US/admin/licenses/message.php
index 9a0219d857..29ab06cbd9 100644
--- a/resources/lang/en-US/admin/licenses/message.php
+++ b/resources/lang/en-US/admin/licenses/message.php
@@ -46,6 +46,7 @@ return array(
'not_enough_seats' => 'Not enough license seats available for checkout',
'mismatch' => 'The license seat provided does not match the license',
'unavailable' => 'This seat is not available for checkout.',
+ 'license_is_inactive' => 'This license is expired or terminated.',
),
'checkin' => array(
diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php
index b325e89f1b..7c3468537d 100644
--- a/resources/views/partials/bootstrap-table.blade.php
+++ b/resources/views/partials/bootstrap-table.blade.php
@@ -556,21 +556,30 @@
}
}
-
+ function licenseInOutFormatter(value, row) {
+ if(row.disabled || row.user_can_checkout === false) {
+ return '{{ trans('general.checkout') }}';
+ } else
+ // The user is allowed to check the license seat out and it's available
+ if ((row.available_actions.checkout === true) && (row.user_can_checkout === true)) {
+ return '{{ trans('general.checkout') }}';
+ }
+ }
// We need a special formatter for license seats, since they don't work exactly the same
// Checkouts need the license ID, checkins need the specific seat ID
function licenseSeatInOutFormatter(value, row) {
+ if (row.disabled && (row.assigned_user || row.assigned_asset)) {
+ return '{{ trans('general.checkin') }}';
+ }
if(row.disabled) {
return '{{ trans('general.checkout') }}';
- } else
+ }
// The user is allowed to check the license seat out and it's available
- if ((row.available_actions.checkout === true) && (row.user_can_checkout === true) && ((!row.asset_id) && (!row.assigned_to))) {
+ if ((row.available_actions.checkout === true) && (row.user_can_checkout === true) && ((!row.assigned_asset) && (!row.assigned_user))) {
return '{{ trans('general.checkout') }}';
}
- else {
- return '{{ trans('general.checkin') }}';
- }
+
}
function genericCheckinCheckoutFormatter(destination) {