diff --git a/app/Http/Controllers/Accessories/AccessoriesController.php b/app/Http/Controllers/Accessories/AccessoriesController.php index f0b54a9498..7d4e697b98 100755 --- a/app/Http/Controllers/Accessories/AccessoriesController.php +++ b/app/Http/Controllers/Accessories/AccessoriesController.php @@ -115,6 +115,33 @@ class AccessoriesController extends Controller } + /** + * Returns a view that presents a form to clone an accessory. + * + * @author [J. Vinsmoke] + * @param int $accessoryId + * @since [v6.0] + * @return View + */ + public function getClone($accessoryId = null) + { + + $this->authorize('create', Accesory::class); + + // Check if the asset exists + if (is_null($accessory_to_clone = Accessory::find($accessoryId))) { + // Redirect to the asset management page + return redirect()->route('accessory.index')->with('error', trans('admin/accessories/message.does_not_exist')); + } + + $accessory = clone $accessory_to_clone; + $accessory->id = null; + $accessory->location_id = null; + + return view('accessories/edit') + ->with('item', $accessory); + + } /** * Save edited Accessory from form post diff --git a/app/Http/Controllers/Assets/BulkAssetsController.php b/app/Http/Controllers/Assets/BulkAssetsController.php index bcaa3900b6..7f9e812ab4 100644 --- a/app/Http/Controllers/Assets/BulkAssetsController.php +++ b/app/Http/Controllers/Assets/BulkAssetsController.php @@ -102,8 +102,11 @@ class BulkAssetsController extends Controller || ($request->filled('company_id')) || ($request->filled('status_id')) || ($request->filled('model_id')) + || ($request->filled('next_audit_date')) || ($request->filled('null_purchase_date')) || ($request->filled('null_expected_checkin_date')) + || ($request->filled('null_next_audit_date')) + ) { foreach ($assets as $assetId) { @@ -116,7 +119,8 @@ class BulkAssetsController extends Controller ->conditionallyAddItem('requestable') ->conditionallyAddItem('status_id') ->conditionallyAddItem('supplier_id') - ->conditionallyAddItem('warranty_months'); + ->conditionallyAddItem('warranty_months') + ->conditionallyAddItem('next_audit_date'); if ($request->input('null_purchase_date')=='1') { $this->update_array['purchase_date'] = null; @@ -126,6 +130,10 @@ class BulkAssetsController extends Controller $this->update_array['expected_checkin'] = null; } + if ($request->input('null_next_audit_date')=='1') { + $this->update_array['next_audit_date'] = null; + } + if ($request->filled('purchase_cost')) { $this->update_array['purchase_cost'] = Helper::ParseCurrency($request->input('purchase_cost')); } diff --git a/app/Http/Transformers/AccessoriesTransformer.php b/app/Http/Transformers/AccessoriesTransformer.php index e812beb23e..cdc94ebed9 100644 --- a/app/Http/Transformers/AccessoriesTransformer.php +++ b/app/Http/Transformers/AccessoriesTransformer.php @@ -51,6 +51,8 @@ class AccessoriesTransformer 'checkin' => false, 'update' => Gate::allows('update', Accessory::class), 'delete' => Gate::allows('delete', Accessory::class), + 'clone' => Gate::allows('create', Accessory::class), + ]; $permissions_array['user_can_checkout'] = false; diff --git a/app/Http/Transformers/AssetMaintenancesTransformer.php b/app/Http/Transformers/AssetMaintenancesTransformer.php index 6e7c2d5b2c..7766d7cd3a 100644 --- a/app/Http/Transformers/AssetMaintenancesTransformer.php +++ b/app/Http/Transformers/AssetMaintenancesTransformer.php @@ -45,6 +45,10 @@ class AssetMaintenancesTransformer 'name'=> e($assetmaintenance->asset->location->name), ] : null, + 'rtd_location' => ($assetmaintenance->asset->defaultLoc) ? [ + 'id' => (int) $assetmaintenance->asset->defaultLoc->id, + 'name'=> e($assetmaintenance->asset->defaultLoc->name), + ] : null, 'notes' => ($assetmaintenance->notes) ? e($assetmaintenance->notes) : null, 'supplier' => ($assetmaintenance->supplier) ? ['id' => $assetmaintenance->supplier->id, 'name'=> e($assetmaintenance->supplier->name)] : null, 'cost' => Helper::formatCurrencyOutput($assetmaintenance->cost), diff --git a/config/logging.php b/config/logging.php index 65b717750d..7cb5d86039 100644 --- a/config/logging.php +++ b/config/logging.php @@ -112,27 +112,31 @@ $config = [ 'handler' => \Rollbar\Laravel\MonologHandler::class, 'access_token' => env('ROLLBAR_TOKEN'), 'level' => env('ROLLBAR_LEVEL', 'error'), - 'check_ignore' => function($isUncaught, $args, $payload) { - if (App::environment('production') && is_object($args) && get_class($args) == Rollbar\ErrorWrapper::class && $args->errorLevel == E_WARNING ) { - \Log::info("IGNORING E_WARNING in production mode: ".$args->getMessage()); - return true; // "TRUE - you should ignore it!" - } - $needle = "ArieTimmerman\\Laravel\\SCIMServer\\Exceptions\\SCIMException"; - if (App::environment('production') && is_string($args) && strncmp($args, $needle, strlen($needle) ) === 0 ) { - \Log::info("String: '$args' looks like a SCIM Exception; ignoring error"); - return true; //yes, *do* ignore it - } - return false; - }, ], ], ]; -// Only add rollbar if the .env has a rollbar token if ((env('APP_ENV')=='production') && (env('ROLLBAR_TOKEN'))) { + // Only add rollbar if the .env has a rollbar token $config['channels']['stack']['channels'] = ['single', 'rollbar']; + + // and only add the rollbar filter under the same conditions + // Note: it will *not* be cacheable + $config['channels']['rollbar']['check_ignore'] = function ($isUncaught, $args, $payload) { + if (App::environment('production') && is_object($args) && get_class($args) == Rollbar\ErrorWrapper::class && $args->errorLevel == E_WARNING ) { + \Log::info("IGNORING E_WARNING in production mode: ".$args->getMessage()); + return true; // "TRUE - you should ignore it!" + } + $needle = "ArieTimmerman\\Laravel\\SCIMServer\\Exceptions\\SCIMException"; + if (App::environment('production') && is_string($args) && strncmp($args, $needle, strlen($needle) ) === 0 ) { + \Log::info("String: '$args' looks like a SCIM Exception; ignoring error"); + return true; //yes, *do* ignore it + } + return false; + }; + } diff --git a/resources/lang/en/admin/accessories/general.php b/resources/lang/en/admin/accessories/general.php index e9a2e69ff6..84a3e83383 100644 --- a/resources/lang/en/admin/accessories/general.php +++ b/resources/lang/en/admin/accessories/general.php @@ -16,5 +16,6 @@ return array( 'update' => 'Update Accessory', 'use_default_eula' => 'Use the primary default EULA instead.', 'use_default_eula_disabled' => 'Use the primary default EULA instead. No primary default EULA is set. Please add one in Settings.', + 'clone' => 'Clone Accessory', ); diff --git a/resources/views/accessories/view.blade.php b/resources/views/accessories/view.blade.php index fd31722204..a34cf572c4 100644 --- a/resources/views/accessories/view.blade.php +++ b/resources/views/accessories/view.blade.php @@ -39,6 +39,11 @@ {{ trans('admin/accessories/general.edit') }} @endcan + @can('update', \App\Models\Accessory::class) +
  • + {{ trans('admin/accessories/general.clone') }} +
  • + @endcan @endcan diff --git a/resources/views/hardware/bulk.blade.php b/resources/views/hardware/bulk.blade.php index f6e94028be..a8515ab817 100755 --- a/resources/views/hardware/bulk.blade.php +++ b/resources/views/hardware/bulk.blade.php @@ -144,6 +144,25 @@ + +
    + +
    +
    + + +
    + + {!! $errors->first('next_audit_date', '') !!} +
    +
    + +
    +
    +
    diff --git a/resources/views/reports/asset_maintenances.blade.php b/resources/views/reports/asset_maintenances.blade.php index b4b9933094..e8d86fcb36 100644 --- a/resources/views/reports/asset_maintenances.blade.php +++ b/resources/views/reports/asset_maintenances.blade.php @@ -46,6 +46,8 @@ {{ trans('admin/asset_maintenances/form.completion_date') }} {{ trans('admin/asset_maintenances/form.asset_maintenance_time') }} {{ trans('admin/asset_maintenances/form.cost') }} + {{ trans('general.location') }} + {{ trans('admin/hardware/form.default_location') }} {{ trans('general.admin') }} {{ trans('admin/asset_maintenances/form.notes') }} diff --git a/routes/web/accessories.php b/routes/web/accessories.php index 3166b36cd9..35ec73e7df 100644 --- a/routes/web/accessories.php +++ b/routes/web/accessories.php @@ -42,6 +42,14 @@ Route::group(['prefix' => 'accessories', 'middleware' => ['auth']], function () [Accessories\AccessoriesFilesController::class, 'show'] )->name('show.accessoryfile'); + Route::get('{accessoryId}/clone', + [Accessories\AccessoriesController::class, 'getClone'] + )->name('clone/accessories'); + + Route::post('{accessoryId}/clone', + [Accessories\AccessoriesController::class, 'postCreate'] + ); + }); Route::resource('accessories', Accessories\AccessoriesController::class, [