* @version v1.0 * @since [v1.8] */ private static function getInsufficientPermissionsRedirect(): RedirectResponse { return redirect()->route('maintenances.index') ->with('error', trans('general.insufficient_permissions')); } /** * Returns a view that invokes the ajax tables which actually contains * the content for the asset maintenances listing, which is generated in getDatatable. * * @todo This should be replaced with middleware and/or policies * @see AssetMaintenancesController::getDatatable() method that generates the JSON response * @author Vincent Sposato * @version v1.0 * @since [v1.8] */ public function index() : View { $this->authorize('view', Asset::class); return view('asset_maintenances/index'); } /** * Returns a form view to create a new asset maintenance. * * @see AssetMaintenancesController::postCreate() method that stores the data * @author Vincent Sposato * @version v1.0 * @since [v1.8] * @return mixed */ public function create() : View { $this->authorize('update', Asset::class); $asset = null; if ($asset = Asset::find(request('asset_id'))) { // We have to set this so that the correct property is set in the select2 ajax dropdown $asset->asset_id = $asset->id; } // Prepare Asset Maintenance Type List $assetMaintenanceType = [ '' => 'Select an asset maintenance type', ] + AssetMaintenance::getImprovementOptions(); // Mark the selected asset, if it came in return view('asset_maintenances/edit') ->with('asset', $asset) ->with('assetMaintenanceType', $assetMaintenanceType) ->with('item', new AssetMaintenance); } /** * Validates and stores the new asset maintenance * * @see AssetMaintenancesController::getCreate() method for the form * @author Vincent Sposato * @version v1.0 * @since [v1.8] */ public function store(Request $request) : RedirectResponse { $this->authorize('update', Asset::class); // create a new model instance $assetMaintenance = new AssetMaintenance(); $assetMaintenance->supplier_id = $request->input('supplier_id'); $assetMaintenance->is_warranty = $request->input('is_warranty'); $assetMaintenance->cost = $request->input('cost'); $assetMaintenance->notes = $request->input('notes'); $asset = Asset::find($request->input('asset_id')); if ((! Company::isCurrentUserHasAccess($asset)) && ($asset != null)) { return static::getInsufficientPermissionsRedirect(); } // Save the asset maintenance data $assetMaintenance->asset_id = $request->input('asset_id'); $assetMaintenance->asset_maintenance_type = $request->input('asset_maintenance_type'); $assetMaintenance->title = $request->input('title'); $assetMaintenance->start_date = $request->input('start_date'); $assetMaintenance->completion_date = $request->input('completion_date'); $assetMaintenance->created_by = 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); } // Was the asset maintenance created? if ($assetMaintenance->save()) { // Redirect to the new asset maintenance page return redirect()->route('maintenances.index') ->with('success', trans('admin/asset_maintenances/message.create.success')); } return redirect()->back()->withInput()->withErrors($assetMaintenance->getErrors()); } /** * Returns a form view to edit a selected asset maintenance. * * @see AssetMaintenancesController::postEdit() method that stores the data * @author Vincent Sposato * @param int $assetMaintenanceId * @version v1.0 * @since [v1.8] */ public function edit($assetMaintenanceId = null) : View | RedirectResponse { $this->authorize('update', Asset::class); // Check if the asset maintenance exists $this->authorize('update', Asset::class); // Check if the asset maintenance exists if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) { // Redirect to the asset maintenance management page return redirect()->route('maintenances.index')->with('error', trans('admin/asset_maintenances/message.not_found')); } elseif ((!$assetMaintenance->asset) || ($assetMaintenance->asset->deleted_at!='')) { // Redirect to the asset maintenance management page return redirect()->route('maintenances.index')->with('error', 'asset does not exist'); } elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) { return static::getInsufficientPermissionsRedirect(); } // Prepare Improvement Type List $assetMaintenanceType = ['' => 'Select an improvement type'] + AssetMaintenance::getImprovementOptions(); return view('asset_maintenances/edit') ->with('selectedAsset', null) ->with('assetMaintenanceType', $assetMaintenanceType) ->with('item', $assetMaintenance); } /** * Validates and stores an update to an asset maintenance * * @see AssetMaintenancesController::postEdit() method that stores the data * @author Vincent Sposato * @param Request $request * @param int $assetMaintenanceId * @version v1.0 * @since [v1.8] */ public function update(Request $request, $assetMaintenanceId = null) : View | RedirectResponse { $this->authorize('update', Asset::class); // Check if the asset maintenance exists if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) { // Redirect to the asset maintenance management page return redirect()->route('maintenances.index')->with('error', trans('admin/asset_maintenances/message.not_found')); } elseif ((!$assetMaintenance->asset) || ($assetMaintenance->asset->deleted_at!='')) { // Redirect to the asset maintenance management page return redirect()->route('maintenances.index')->with('error', 'asset does not exist'); } elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) { return static::getInsufficientPermissionsRedirect(); } $assetMaintenance->supplier_id = $request->input('supplier_id'); $assetMaintenance->is_warranty = $request->input('is_warranty'); $assetMaintenance->cost = $request->input('cost'); $assetMaintenance->notes = $request->input('notes'); $asset = Asset::find(request('asset_id')); if (! Company::isCurrentUserHasAccess($asset)) { return static::getInsufficientPermissionsRedirect(); } // Save the asset maintenance data $assetMaintenance->asset_id = $request->input('asset_id'); $assetMaintenance->asset_maintenance_type = $request->input('asset_maintenance_type'); $assetMaintenance->title = $request->input('title'); $assetMaintenance->start_date = $request->input('start_date'); $assetMaintenance->completion_date = $request->input('completion_date'); if (($assetMaintenance->completion_date == null) ) { if (($assetMaintenance->asset_maintenance_time !== 0) || (! is_null($assetMaintenance->asset_maintenance_time)) ) { $assetMaintenance->asset_maintenance_time = null; } } 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); } // Was the asset maintenance created? if ($assetMaintenance->save()) { // Redirect to the new asset maintenance page return redirect()->route('maintenances.index') ->with('success', trans('admin/asset_maintenances/message.edit.success')); } return redirect()->back()->withInput()->withErrors($assetMaintenance->getErrors()); } /** * Delete an asset maintenance * * @author Vincent Sposato * @param int $assetMaintenanceId * @version v1.0 * @since [v1.8] */ public function destroy($assetMaintenanceId) : RedirectResponse { $this->authorize('update', Asset::class); // Check if the asset maintenance exists if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) { // Redirect to the asset maintenance management page return redirect()->route('maintenances.index') ->with('error', trans('admin/asset_maintenances/message.not_found')); } elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) { return static::getInsufficientPermissionsRedirect(); } // Delete the asset maintenance $assetMaintenance->delete(); // Redirect to the asset_maintenance management page return redirect()->route('maintenances.index') ->with('success', trans('admin/asset_maintenances/message.delete.success')); } /** * View an asset maintenance * * @author Vincent Sposato * @param int $assetMaintenanceId * @version v1.0 * @since [v1.8] */ public function show($assetMaintenanceId) : View | RedirectResponse { $this->authorize('view', Asset::class); // Check if the asset maintenance exists if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) { // Redirect to the asset maintenance management page return redirect()->route('maintenances.index') ->with('error', trans('admin/asset_maintenances/message.not_found')); } elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) { return static::getInsufficientPermissionsRedirect(); } return view('asset_maintenances/view')->with('assetMaintenance', $assetMaintenance); } }