diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php
index e8f37d8574..584e4693d2 100644
--- a/app/Http/Controllers/Api/AssetsController.php
+++ b/app/Http/Controllers/Api/AssetsController.php
@@ -905,6 +905,7 @@ class AssetsController extends Controller
$asset->expected_checkin = null;
$asset->last_checkout = null;
+ $asset->last_checkin = now();
$asset->assigned_to = null;
$asset->assignedTo()->disassociate($asset);
$asset->accepted = null;
diff --git a/app/Http/Controllers/Assets/AssetCheckinController.php b/app/Http/Controllers/Assets/AssetCheckinController.php
index fd5cee30ea..5f79e7b19c 100644
--- a/app/Http/Controllers/Assets/AssetCheckinController.php
+++ b/app/Http/Controllers/Assets/AssetCheckinController.php
@@ -68,6 +68,7 @@ class AssetCheckinController extends Controller
$asset->expected_checkin = null;
$asset->last_checkout = null;
+ $asset->last_checkin = now();
$asset->assigned_to = null;
$asset->assignedTo()->disassociate($asset);
$asset->assigned_type = null;
diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php
index c9a88ea0f1..68ca88a2eb 100644
--- a/app/Http/Controllers/ReportsController.php
+++ b/app/Http/Controllers/ReportsController.php
@@ -545,6 +545,10 @@ class ReportsController extends Controller
$header[] = trans('admin/hardware/table.checkout_date');
}
+ if ($request->filled('checkin_date')) {
+ $header[] = trans('admin/hardware/table.last_checkin_date');
+ }
+
if ($request->filled('expected_checkin')) {
$header[] = trans('admin/hardware/form.expected_checkin');
}
@@ -651,6 +655,14 @@ class ReportsController extends Controller
$assets->whereBetween('assets.last_checkout', [$checkout_start, $checkout_end]);
}
+ if (($request->filled('checkin_date_start'))) {
+ $assets->whereBetween('last_checkin', [
+ Carbon::parse($request->input('checkin_date_start'))->startOfDay(),
+ // use today's date is `checkin_date_end` is not provided
+ Carbon::parse($request->input('checkin_date_end', now()))->endOfDay(),
+ ]);
+ }
+
if (($request->filled('expected_checkin_start')) && ($request->filled('expected_checkin_end'))) {
$assets->whereBetween('assets.expected_checkin', [$request->input('expected_checkin_start'), $request->input('expected_checkin_end')]);
}
@@ -835,6 +847,12 @@ class ReportsController extends Controller
$row[] = ($asset->last_checkout) ? $asset->last_checkout : '';
}
+ if ($request->filled('checkin_date')) {
+ $row[] = ($asset->last_checkin)
+ ? Carbon::parse($asset->last_checkin)->format('Y-m-d')
+ : '';
+ }
+
if ($request->filled('expected_checkin')) {
$row[] = ($asset->expected_checkin) ? $asset->expected_checkin : '';
}
diff --git a/app/Models/Asset.php b/app/Models/Asset.php
index d95aec51ce..1c17856234 100644
--- a/app/Models/Asset.php
+++ b/app/Models/Asset.php
@@ -73,6 +73,7 @@ class Asset extends Depreciable
protected $casts = [
'purchase_date' => 'date',
'last_checkout' => 'datetime',
+ 'last_checkin' => 'datetime',
'expected_checkin' => 'date',
'last_audit_date' => 'datetime',
'next_audit_date' => 'date',
diff --git a/database/migrations/2023_08_17_202638_add_last_checkin_to_assets.php b/database/migrations/2023_08_17_202638_add_last_checkin_to_assets.php
new file mode 100644
index 0000000000..74048ce941
--- /dev/null
+++ b/database/migrations/2023_08_17_202638_add_last_checkin_to_assets.php
@@ -0,0 +1,36 @@
+dateTime('last_checkin')->after('last_checkout')->nullable();
+ });
+
+ DB::statement(
+ "UPDATE " . DB::getTablePrefix() . "assets SET last_checkin=(SELECT MAX(" . DB::getTablePrefix() . "action_logs.action_date) FROM " . DB::getTablePrefix() . "action_logs WHERE item_type='App\\\Models\\\Asset' AND " . DB::getTablePrefix() . "action_logs.item_id=" . DB::getTablePrefix() . "assets.id AND " . DB::getTablePrefix() . "action_logs.action_type='checkin from')"
+ );
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('assets', function (Blueprint $table) {
+ $table->dropColumn('last_checkin');
+ });
+ }
+}
diff --git a/resources/lang/en/admin/hardware/table.php b/resources/lang/en/admin/hardware/table.php
index 10629fd22c..06b60bfd83 100644
--- a/resources/lang/en/admin/hardware/table.php
+++ b/resources/lang/en/admin/hardware/table.php
@@ -14,6 +14,7 @@ return [
'dl_csv' => 'Download CSV',
'eol' => 'EOL',
'id' => 'ID',
+ 'last_checkin_date' => 'Last Checkin Date',
'location' => 'Location',
'purchase_cost' => 'Cost',
'purchase_date' => 'Purchased',
diff --git a/resources/views/reports/custom.blade.php b/resources/views/reports/custom.blade.php
index ff78f21686..5b0bd384ee 100644
--- a/resources/views/reports/custom.blade.php
+++ b/resources/views/reports/custom.blade.php
@@ -141,6 +141,11 @@
{{ trans('admin/hardware/table.checkout_date') }}
+
+