diff --git a/app/Http/Controllers/Api/AssetMaintenancesController.php b/app/Http/Controllers/Api/AssetMaintenancesController.php index 4b47c323c2..c2a375d122 100644 --- a/app/Http/Controllers/Api/AssetMaintenancesController.php +++ b/app/Http/Controllers/Api/AssetMaintenancesController.php @@ -76,6 +76,8 @@ class AssetMaintenancesController extends Controller 'supplier', 'is_warranty', 'status_label', + 'assigned_to', + 'assigned_type', ]; $order = $request->input('order') === 'asc' ? 'asc' : 'desc'; diff --git a/app/Http/Controllers/AssetMaintenancesController.php b/app/Http/Controllers/AssetMaintenancesController.php index b5a50925ea..2da715a755 100644 --- a/app/Http/Controllers/AssetMaintenancesController.php +++ b/app/Http/Controllers/AssetMaintenancesController.php @@ -117,15 +117,26 @@ class AssetMaintenancesController extends Controller $assetMaintenance->completion_date = $request->input('completion_date'); $assetMaintenance->user_id = Auth::id(); - if (($assetMaintenance->completion_date !== null) - && ($assetMaintenance->start_date !== '') - && ($assetMaintenance->start_date !== '0000-00-00') - ) { - $startDate = Carbon::parse($assetMaintenance->start_date); - $completionDate = Carbon::parse($assetMaintenance->completion_date); - $assetMaintenance->asset_maintenance_time = $completionDate->diffInDays($startDate); + // This asset is checked out - let's see to whom + if ($asset->assigned_to) { + + $assetMaintenance->assigned_to = $asset->assigned_to; + if ($asset->assignedType() == 'asset') { + $assetMaintenance->assigned_type = \App\Models\Asset::class; + } elseif ($asset->assignedType() == 'location') { + $assetMaintenance->assigned_type = \App\Models\Location::class; + } else { + $assetMaintenance->assigned_type = \App\Models\User::class; + } + } + + $startDate = Carbon::parse($assetMaintenance->start_date); + $completionDate = Carbon::parse($assetMaintenance->completion_date); + $assetMaintenance->asset_maintenance_time = $completionDate->diffInDays($startDate); + + // Was the asset maintenance created? if ($assetMaintenance->save()) { // Redirect to the new asset maintenance page diff --git a/app/Http/Transformers/AssetMaintenancesTransformer.php b/app/Http/Transformers/AssetMaintenancesTransformer.php index 88ac447c25..d7933692a5 100644 --- a/app/Http/Transformers/AssetMaintenancesTransformer.php +++ b/app/Http/Transformers/AssetMaintenancesTransformer.php @@ -57,6 +57,11 @@ class AssetMaintenancesTransformer 'id' => (int) $assetmaintenance->asset->defaultLoc->id, 'name'=> e($assetmaintenance->asset->defaultLoc->name), ] : null, + 'assigned_to' => (($assetmaintenance->asset) && ($assetmaintenance->asset->defaultLoc)) ? [ + 'id' => (int) $assetmaintenance->asset->defaultLoc->id, + 'type'=> e($assetmaintenance->asset->defaultLoc->name), + 'name'=> e($assetmaintenance->asset->defaultLoc->name), + ] : null, 'notes' => ($assetmaintenance->notes) ? Helper::parseEscapedMarkedownInline($assetmaintenance->notes) : null, 'supplier' => ($assetmaintenance->supplier) ? ['id' => $assetmaintenance->supplier->id, 'name'=> e($assetmaintenance->supplier->name)] : null, 'cost' => Helper::formatCurrencyOutput($assetmaintenance->cost), diff --git a/app/Models/AssetMaintenance.php b/app/Models/AssetMaintenance.php index 5f66783cbb..bfb50f7835 100644 --- a/app/Models/AssetMaintenance.php +++ b/app/Models/AssetMaintenance.php @@ -53,6 +53,8 @@ class AssetMaintenance extends Model implements ICompanyableChild 'asset_maintenance_time', 'notes', 'cost', + 'assigned_type', + 'assigned_to', ]; use Searchable; diff --git a/app/Models/Location.php b/app/Models/Location.php index 2965ff2fc0..256f486073 100755 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -239,6 +239,21 @@ class Location extends SnipeModel ->with('children'); } + /** + * Establishes the location -> maintenances relationship + * + * This would only be used to return maintenances that this user + * created. + * + * @author A. Gianotto + * @since [v6.3.1] + * @return \Illuminate\Database\Eloquent\Relations\Relation + */ + public function assetmaintenances() + { + return $this->hasMany(\App\Models\AssetMaintenance::class, 'assigned_to')->where('assigned_type', 'App\Models\Location')->withTrashed(); + } + /** * Establishes the asset -> location assignment relationship * diff --git a/app/Models/User.php b/app/Models/User.php index f739ef8b0f..85a68d0cd0 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -299,6 +299,21 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo * @return \Illuminate\Database\Eloquent\Relations\Relation */ public function assetmaintenances() + { + return $this->hasMany(\App\Models\AssetMaintenance::class, 'assigned_to')->where('assigned_type', 'App\Models\User')->withTrashed(); + } + + /** + * Establishes the user -> maintenances relationship + * + * This would only be used to return maintenances that this user + * created. + * + * @author A. Gianotto + * @since [v6.3.1] + * @return \Illuminate\Database\Eloquent\Relations\Relation + */ + public function admin() { return $this->hasMany(\App\Models\AssetMaintenance::class, 'user_id')->withTrashed(); } diff --git a/database/migrations/2024_02_28_151402_add_user_location_to_maintenances.php b/database/migrations/2024_02_28_151402_add_user_location_to_maintenances.php new file mode 100644 index 0000000000..5635ac54a4 --- /dev/null +++ b/database/migrations/2024_02_28_151402_add_user_location_to_maintenances.php @@ -0,0 +1,39 @@ +string('assigned_type')->nullable()->default(null); + $table->integer('assigned_to')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('asset_maintenances', function (Blueprint $table) { + if (Schema::hasColumn('asset_maintenances', 'assigned_type')) { + $table->dropColumn('assigned_type'); + } + + if (Schema::hasColumn('assigned_to', 'assigned_to')) { + $table->dropColumn('assigned_to'); + } + }); + } +}