From 6cf7df22cd61c6a4167783cc76787316c12ea298 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 13:28:34 -0700 Subject: [PATCH 01/12] Fix eol rate on asset show page --- resources/views/hardware/view.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index a59b0534b2a7..2bbc0b07c1de 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -957,7 +957,7 @@ class="form-inline"
- {{ Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date) }} + {{ (int) Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date, true) }} {{ trans('admin/hardware/form.months') }}
From 1122cd85672b954c01a7fd9aff445b2dc5faec8e Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 13:33:15 -0700 Subject: [PATCH 02/12] Fix eol rate in asset transformer --- app/Http/Transformers/AssetsTransformer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php index 378fba28738d..b6579845469d 100644 --- a/app/Http/Transformers/AssetsTransformer.php +++ b/app/Http/Transformers/AssetsTransformer.php @@ -42,7 +42,7 @@ public function transformAsset(Asset $asset) 'requestable' => ($asset->requestable ? true : false), 'model_number' => (($asset->model) && ($asset->model->model_number)) ? e($asset->model->model_number) : null, - 'eol' => (($asset->asset_eol_date != '') && ($asset->purchase_date != '')) ? Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date).' months' : null, + 'eol' => (($asset->asset_eol_date != '') && ($asset->purchase_date != '')) ? (int) Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date, true) . ' months' : null, 'asset_eol_date' => ($asset->asset_eol_date != '') ? Helper::getFormattedDateObject($asset->asset_eol_date, 'date') : null, 'status_label' => ($asset->assetstatus) ? [ 'id' => (int) $asset->assetstatus->id, From 824271078e6557087ca26a686dda348f724a3be5 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 13:55:12 -0700 Subject: [PATCH 03/12] Fix eol rate in AssetsController --- app/Http/Controllers/Assets/AssetsController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php index 6bd530a0e51c..9578acea6378 100755 --- a/app/Http/Controllers/Assets/AssetsController.php +++ b/app/Http/Controllers/Assets/AssetsController.php @@ -318,7 +318,7 @@ public function update(ImageUploadRequest $request, Asset $asset) : RedirectResp $asset->eol_explicit = false; } elseif ($request->filled('asset_eol_date')) { $asset->asset_eol_date = $request->input('asset_eol_date', null); - $months = Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date); + $months = (int) Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date, true); if($asset->model->eol) { if($months != $asset->model->eol > 0) { $asset->eol_explicit = true; From 9be27bdf076fb2bc8ac7591f564ff9a570e8391c Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:35:14 -0700 Subject: [PATCH 04/12] Add failing test for creating asset maintenance --- .../Ui/CreateAssetMaintenanceTest.php | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/Feature/AssetMaintenances/Ui/CreateAssetMaintenanceTest.php b/tests/Feature/AssetMaintenances/Ui/CreateAssetMaintenanceTest.php index 6bfa46ed9eb8..e50cd50a12a9 100644 --- a/tests/Feature/AssetMaintenances/Ui/CreateAssetMaintenanceTest.php +++ b/tests/Feature/AssetMaintenances/Ui/CreateAssetMaintenanceTest.php @@ -2,6 +2,8 @@ namespace Tests\Feature\AssetMaintenances\Ui; +use App\Models\Asset; +use App\Models\Supplier; use App\Models\User; use Tests\TestCase; @@ -13,4 +15,41 @@ public function testPageRenders() ->get(route('maintenances.create')) ->assertOk(); } + + public function testCanCreateAssetMaintenance() + { + $actor = User::factory()->superuser()->create(); + + $asset = Asset::factory()->create(); + $supplier = Supplier::factory()->create(); + + $this->actingAs($actor) + ->followingRedirects() + ->post(route('maintenances.store'), [ + 'title' => 'Test Maintenance', + 'asset_id' => $asset->id, + 'supplier_id' => $supplier->id, + 'asset_maintenance_type' => 'Maintenance', + 'start_date' => '2021-01-01', + 'completion_date' => '2021-01-10', + 'is_warranty' => '1', + 'cost' => '100.00', + 'notes' => 'A note', + ]) + ->assertOk(); + + $this->assertDatabaseHas('asset_maintenances', [ + 'asset_id' => $asset->id, + 'supplier_id' => $supplier->id, + 'asset_maintenance_type' => 'Maintenance', + 'title' => 'Test Maintenance', + 'is_warranty' => 1, + 'start_date' => '2021-01-01', + 'completion_date' => '2021-01-10', + 'asset_maintenance_time' => '9', + 'notes' => 'A note', + 'cost' => '100.00', + 'created_by' => $actor->id, + ]); + } } From e439f1f42b669b6350403de2dff29f2c158831c6 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:35:46 -0700 Subject: [PATCH 05/12] Fix eol rate in AssetMaintenancesController --- app/Http/Controllers/AssetMaintenancesController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AssetMaintenancesController.php b/app/Http/Controllers/AssetMaintenancesController.php index 0d18ae1e1b08..b1de001c0dad 100644 --- a/app/Http/Controllers/AssetMaintenancesController.php +++ b/app/Http/Controllers/AssetMaintenancesController.php @@ -117,7 +117,7 @@ public function store(Request $request) : RedirectResponse ) { $startDate = Carbon::parse($assetMaintenance->start_date); $completionDate = Carbon::parse($assetMaintenance->completion_date); - $assetMaintenance->asset_maintenance_time = $completionDate->diffInDays($startDate); + $assetMaintenance->asset_maintenance_time = (int) $completionDate->diffInDays($startDate, true); } // Was the asset maintenance created? From ab8f4454d1f61957f44f68ced477ac448dc782b5 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:38:46 -0700 Subject: [PATCH 06/12] Add failing test for updating asset maintenance --- .../Ui/EditAssetMaintenanceTest.php | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php b/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php index 0b3b68108580..0e0f5b81c355 100644 --- a/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php +++ b/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php @@ -2,7 +2,9 @@ namespace Tests\Feature\AssetMaintenances\Ui; +use App\Models\Asset; use App\Models\AssetMaintenance; +use App\Models\Supplier; use App\Models\User; use Tests\TestCase; @@ -14,4 +16,43 @@ public function testPageRenders() ->get(route('maintenances.edit', AssetMaintenance::factory()->create()->id)) ->assertOk(); } + + public function testCanUpdateAssetMaintenance() + { + $actor = User::factory()->superuser()->create(); + + $assetMaintenance = AssetMaintenance::factory()->create(); + + $asset = Asset::factory()->create(); + $supplier = Supplier::factory()->create(); + + $this->actingAs($actor) + ->followingRedirects() + ->put(route('maintenances.update', $assetMaintenance->id), [ + 'title' => 'Test Maintenance', + 'asset_id' => $asset->id, + 'supplier_id' => $supplier->id, + 'asset_maintenance_type' => 'Maintenance', + 'start_date' => '2021-01-01', + 'completion_date' => '2021-01-10', + 'is_warranty' => '1', + 'cost' => '100.00', + 'notes' => 'A note', + ]) + ->assertOk(); + + $this->assertDatabaseHas('asset_maintenances', [ + 'asset_id' => $asset->id, + 'supplier_id' => $supplier->id, + 'asset_maintenance_type' => 'Maintenance', + 'title' => 'Test Maintenance', + 'is_warranty' => 1, + 'start_date' => '2021-01-01', + 'completion_date' => '2021-01-10', + 'asset_maintenance_time' => '9', + 'notes' => 'A note', + 'cost' => '100.00', + ]); + } + } From 63a1ee0047b5cf48489130462aa3e418254f3b77 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:38:54 -0700 Subject: [PATCH 07/12] Fix eol rate in AssetMaintenancesController --- app/Http/Controllers/AssetMaintenancesController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AssetMaintenancesController.php b/app/Http/Controllers/AssetMaintenancesController.php index b1de001c0dad..8ab710b03b9e 100644 --- a/app/Http/Controllers/AssetMaintenancesController.php +++ b/app/Http/Controllers/AssetMaintenancesController.php @@ -210,7 +210,7 @@ public function update(Request $request, AssetMaintenance $maintenance) : View | ) { $startDate = Carbon::parse($maintenance->start_date); $completionDate = Carbon::parse($maintenance->completion_date); - $maintenance->asset_maintenance_time = $completionDate->diffInDays($startDate); + $maintenance->asset_maintenance_time = (int) $completionDate->diffInDays($startDate, true); } // Was the asset maintenance created? From a28ff22d03634aa842eb72fda62e3d82fb7bbfab Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:44:06 -0700 Subject: [PATCH 08/12] Fix eol rate in ReportsController --- app/Http/Controllers/ReportsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php index ae2896e6e89d..05cc2e7dfac4 100644 --- a/app/Http/Controllers/ReportsController.php +++ b/app/Http/Controllers/ReportsController.php @@ -1081,10 +1081,10 @@ public function exportAssetMaintenancesReport() : Response $row[] = e($assetMaintenance->start_date); $row[] = e($assetMaintenance->completion_date); if (is_null($assetMaintenance->asset_maintenance_time)) { - $improvementTime = intval(Carbon::now() - ->diffInDays(Carbon::parse($assetMaintenance->start_date))); + $improvementTime = (int) Carbon::now() + ->diffInDays(Carbon::parse($assetMaintenance->start_date), true); } else { - $improvementTime = intval($assetMaintenance->asset_maintenance_time); + $improvementTime = (int) $assetMaintenance->asset_maintenance_time; } $row[] = $improvementTime; $row[] = trans('general.currency') . Helper::formatCurrencyOutput($assetMaintenance->cost); From 658bef447dd74d7384d966f7c951aa8aa996b738 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:55:13 -0700 Subject: [PATCH 09/12] Fix eol rate in Actionlog --- app/Models/Actionlog.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Models/Actionlog.php b/app/Models/Actionlog.php index a14910208ea7..3a8fcf1cb9f6 100755 --- a/app/Models/Actionlog.php +++ b/app/Models/Actionlog.php @@ -295,13 +295,13 @@ public function daysUntilNextAudit($monthInterval = 12, $asset = null) $now = Carbon::now(); $last_audit_date = $this->created_at; // this is the action log's created at, not the asset itself $next_audit = $last_audit_date->addMonth($monthInterval); // this actually *modifies* the $last_audit_date - $next_audit_days = round($now->diffInDays($next_audit, true)); + $next_audit_days = (int) round($now->diffInDays($next_audit, true)); $override_default_next = $next_audit; // Override the default setting for interval if the asset has its own next audit date if (($asset) && ($asset->next_audit_date)) { $override_default_next = Carbon::parse($asset->next_audit_date); - $next_audit_days = round($override_default_next->diffInDays($now, true)); + $next_audit_days = (int) round($override_default_next->diffInDays($now, true)); } // Show as negative number if the next audit date is before the audit date we're looking at From 25fb1abc95845c280bd1defeb3df58160f44f52d Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 15:58:11 -0700 Subject: [PATCH 10/12] Fix eol rate in AssetObserver --- app/Observers/AssetObserver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Observers/AssetObserver.php b/app/Observers/AssetObserver.php index b44d098123b5..c807ac4d1d11 100644 --- a/app/Observers/AssetObserver.php +++ b/app/Observers/AssetObserver.php @@ -171,7 +171,7 @@ public function saving(Asset $asset) // determine if explicit and set eol_explicit to true if (!is_null($asset->asset_eol_date) && !is_null($asset->purchase_date)) { if($asset->model->eol > 0) { - $months = Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date); + $months = (int) Carbon::parse($asset->asset_eol_date)->diffInMonths($asset->purchase_date, true); if($months != $asset->model->eol) { $asset->eol_explicit = true; } From 167001ed54f02644a2ac744d543ba3357a9d6636 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 16:01:32 -0700 Subject: [PATCH 11/12] Fix eol rate in tests --- tests/Feature/Assets/Ui/EditAssetTest.php | 2 +- tests/Feature/Checkins/Api/AssetCheckinTest.php | 2 +- tests/Feature/Checkins/Ui/AssetCheckinTest.php | 2 +- tests/Feature/Checkouts/Api/AssetCheckoutTest.php | 2 +- tests/Feature/Checkouts/Ui/AssetCheckoutTest.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Feature/Assets/Ui/EditAssetTest.php b/tests/Feature/Assets/Ui/EditAssetTest.php index 328067e89367..f443f6640008 100644 --- a/tests/Feature/Assets/Ui/EditAssetTest.php +++ b/tests/Feature/Assets/Ui/EditAssetTest.php @@ -98,7 +98,7 @@ public function testNewCheckinIsLoggedIfStatusChangedToUndeployable() $this->assertEquals($achived_status->id, $asset->status_id); Event::assertDispatched(function (CheckoutableCheckedIn $event) use ($currentTimestamp) { - return Carbon::parse($event->action_date)->diffInSeconds($currentTimestamp) < 2; + return (int) Carbon::parse($event->action_date)->diffInSeconds($currentTimestamp, true) < 2; }, 1); } diff --git a/tests/Feature/Checkins/Api/AssetCheckinTest.php b/tests/Feature/Checkins/Api/AssetCheckinTest.php index 0e041fc73aa1..7ce3d05619ff 100644 --- a/tests/Feature/Checkins/Api/AssetCheckinTest.php +++ b/tests/Feature/Checkins/Api/AssetCheckinTest.php @@ -72,7 +72,7 @@ public function testAssetCanBeCheckedIn() Event::assertDispatched(function (CheckoutableCheckedIn $event) use ($currentTimestamp) { // this could be better mocked but is ok for now. - return Carbon::parse($event->action_date)->diffInSeconds($currentTimestamp) < 2; + return (int) Carbon::parse($event->action_date)->diffInSeconds($currentTimestamp, true) < 2; }, 1); } diff --git a/tests/Feature/Checkins/Ui/AssetCheckinTest.php b/tests/Feature/Checkins/Ui/AssetCheckinTest.php index 9c7b371e2b39..4f1c62cf2ce3 100644 --- a/tests/Feature/Checkins/Ui/AssetCheckinTest.php +++ b/tests/Feature/Checkins/Ui/AssetCheckinTest.php @@ -86,7 +86,7 @@ public function testAssetCanBeCheckedIn() Event::assertDispatched(function (CheckoutableCheckedIn $event) use ($currentTimestamp) { // this could be better mocked but is ok for now. - return Carbon::parse($event->action_date)->diffInSeconds($currentTimestamp) < 2; + return (int) Carbon::parse($event->action_date)->diffInSeconds($currentTimestamp, true) < 2; }, 1); } diff --git a/tests/Feature/Checkouts/Api/AssetCheckoutTest.php b/tests/Feature/Checkouts/Api/AssetCheckoutTest.php index ded38896426f..0a62ef6e4487 100644 --- a/tests/Feature/Checkouts/Api/AssetCheckoutTest.php +++ b/tests/Feature/Checkouts/Api/AssetCheckoutTest.php @@ -209,6 +209,6 @@ public function testLastCheckoutUsesCurrentDateIfNotProvided() $asset->refresh(); - $this->assertTrue(Carbon::parse($asset->last_checkout)->diffInSeconds(now()) < 2); + $this->assertTrue((int) Carbon::parse($asset->last_checkout)->diffInSeconds(now(), true) < 2); } } diff --git a/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php b/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php index f364064a1d6d..00197917522e 100644 --- a/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php +++ b/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php @@ -249,7 +249,7 @@ public function testLastCheckoutUsesCurrentDateIfNotProvided() $asset->refresh(); - $this->assertTrue(Carbon::parse($asset->last_checkout)->diffInSeconds(now()) < 2); + $this->assertTrue((int) Carbon::parse($asset->last_checkout)->diffInSeconds(now(), true) < 2); } public function testAssetCheckoutPageIsRedirectedIfModelIsInvalid() From 4d978e0fc6799975f8be76c50d1864052fac0e40 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 12 Mar 2025 16:04:16 -0700 Subject: [PATCH 12/12] Fix eol rate in upcoming audit notification --- .../views/notifications/markdown/upcoming-audits.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/notifications/markdown/upcoming-audits.blade.php b/resources/views/notifications/markdown/upcoming-audits.blade.php index e623941d2525..c6b9bf445b0d 100644 --- a/resources/views/notifications/markdown/upcoming-audits.blade.php +++ b/resources/views/notifications/markdown/upcoming-audits.blade.php @@ -9,7 +9,7 @@ @php $next_audit_date = Helper::getFormattedDateObject($asset->next_audit_date, 'date', false); $last_audit_date = Helper::getFormattedDateObject($asset->last_audit_date, 'date', false); -$diff = Carbon::parse(Carbon::now())->diffInDays($asset->next_audit_date, false); +$diff = (int) Carbon::parse(Carbon::now())->diffInDays($asset->next_audit_date, true); $icon = ($diff <= 7) ? '🚨' : (($diff <= 14) ? '⚠️' : ' '); @endphp |{{ $icon }}| [{{ $asset->present()->name }}]({{ route('hardware.show', $asset->id) }}) | {{ $last_audit_date }}| {{ $next_audit_date }} | {{ $diff }} | {{ ($asset->supplier ? e($asset->supplier->name) : '') }}|{{ ($asset->assignedTo ? $asset->assignedTo->present()->name() : '') }}|{{ $asset->notes }}