From 6c1239eee501be70d2a6ff67182dc37ca2b83008 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 19 Nov 2024 10:02:04 -0600 Subject: [PATCH] cleaned - more work needs to happen --- app/Actions/Assets/UpdateAssetAction.php | 7 +- app/Http/Controllers/Api/AssetsController.php | 78 ------ .../Assets/BulkAssetsController.php | 245 +----------------- 3 files changed, 7 insertions(+), 323 deletions(-) diff --git a/app/Actions/Assets/UpdateAssetAction.php b/app/Actions/Assets/UpdateAssetAction.php index 354e1dd4fe..9c314abc58 100644 --- a/app/Actions/Assets/UpdateAssetAction.php +++ b/app/Actions/Assets/UpdateAssetAction.php @@ -157,19 +157,24 @@ class UpdateAssetAction if ($asset->save()) { // check out stuff + //$location = Location::find($asset->location_id); if (!is_null($assigned_user) && ($target = User::find($assigned_user))) { $location = $target->location_id; } elseif (!is_null($assigned_asset) && ($target = Asset::find($assigned_asset))) { $location = $target->location_id; - Asset::where('assigned_type', \App\Models\Asset::class)->where('assigned_to', $asset->id) ->update(['location_id' => $target->location_id]); } elseif (!is_null($assigned_location) && ($target = Location::find($assigned_location))) { $location = $target->id; } + if (isset($target)) { $asset->checkOut($target, auth()->user(), date('Y-m-d H:i:s'), '', 'Checked out on asset update', e($request->get('name')), $location); } + + if ($asset->image) { + $asset->image = $asset->getImageUrl(); + } } return $asset; diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index b11c6a0104..f6188396d7 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -658,84 +658,6 @@ class AssetsController extends Controller } catch (\Exception $e) { return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.something_went_wrong'))); } - - $asset->fill($request->validated()); - - if ($request->has('model_id')) { - $asset->model()->associate(AssetModel::find($request->validated()['model_id'])); - } - if ($request->has('company_id')) { - $asset->company_id = Company::getIdForCurrentUser($request->validated()['company_id']); - } - if ($request->has('rtd_location_id') && !$request->has('location_id')) { - $asset->location_id = $request->validated()['rtd_location_id']; - } - if ($request->input('last_audit_date')) { - $asset->last_audit_date = Carbon::parse($request->input('last_audit_date'))->startOfDay()->format('Y-m-d H:i:s'); - } - - /** - * this is here just legacy reasons. Api\AssetController - * used image_source once to allow encoded image uploads. - */ - if ($request->has('image_source')) { - $request->offsetSet('image', $request->offsetGet('image_source')); - } - - $asset = $request->handleImages($asset); - $model = $asset->model; - - // Update custom fields - $problems_updating_encrypted_custom_fields = false; - if (($model) && (isset($model->fieldset))) { - foreach ($model->fieldset->fields as $field) { - $field_val = $request->input($field->db_column, null); - - if ($request->has($field->db_column)) { - if ($field->element == 'checkbox') { - if(is_array($field_val)) { - $field_val = implode(',', $field_val); - } - } - if ($field->field_encrypted == '1') { - if (Gate::allows('assets.view.encrypted_custom_fields')) { - $field_val = Crypt::encrypt($field_val); - } else { - $problems_updating_encrypted_custom_fields = true; - continue; - } - } - $asset->{$field->db_column} = $field_val; - } - } - } - if ($asset->save()) { - //if (($request->filled('assigned_user')) && ($target = User::find($request->get('assigned_user')))) { - // $location = $target->location_id; - //} elseif (($request->filled('assigned_asset')) && ($target = Asset::find($request->get('assigned_asset')))) { - // $location = $target->location_id; - // - // Asset::where('assigned_type', \App\Models\Asset::class)->where('assigned_to', $asset->id) - // ->update(['location_id' => $target->location_id]); - //} elseif (($request->filled('assigned_location')) && ($target = Location::find($request->get('assigned_location')))) { - // $location = $target->id; - //} - // - //if (isset($target)) { - // $asset->checkOut($target, auth()->user(), date('Y-m-d H:i:s'), '', 'Checked out on asset update', e($request->get('name')), $location); - //} - - if ($asset->image) { - $asset->image = $asset->getImageUrl(); - } - - if ($problems_updating_encrypted_custom_fields) { - return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.encrypted_warning'))); - } else { - return response()->json(Helper::formatStandardApiResponse('success', $asset, trans('admin/hardware/message.update.success'))); - } - } - return response()->json(Helper::formatStandardApiResponse('error', null, $asset->getErrors()), 200); } diff --git a/app/Http/Controllers/Assets/BulkAssetsController.php b/app/Http/Controllers/Assets/BulkAssetsController.php index 4c3c763b30..e7a8184ddc 100644 --- a/app/Http/Controllers/Assets/BulkAssetsController.php +++ b/app/Http/Controllers/Assets/BulkAssetsController.php @@ -249,250 +249,7 @@ class BulkAssetsController extends Controller if (!empty($errors)) { return redirect($bulk_back_url)->with('bulk_asset_errors', $errors); } - return redirect()->to('index')->with('success', trans('admin/hardware/message.update.assets_do_not_exist')); - - - $has_errors = 0; - $error_array = array(); - - // Get the back url from the session and then destroy the session - - $custom_field_columns = CustomField::all()->pluck('db_column')->toArray(); - - - - - - $assets = Asset::whereIn('id', $request->input('ids'))->get(); - - - - /** - * If ANY of these are filled, prepare to update the values on the assets. - * - * Additional checks will be needed for some of them to make sure the values - * make sense (for example, changing the status ID to something incompatible with - * its checkout status. - */ - - if ( - ($request->anyFilled($custom_field_columns)) - - ) { - // Let's loop through those assets and build an update array - foreach ($assets as $asset) { - - $this->update_array = []; - - /** - * Leave out model_id and status here because we do math on that later. We have to do some - * extra validation and checks on those two. - * - * It's tempting to make these match the request check above, but some of these values require - * extra work to make sure the data makes sense. - */ - //$this->conditionallyAddItem('name') - // ->conditionallyAddItem('purchase_date') - // ->conditionallyAddItem('expected_checkin') - // ->conditionallyAddItem('order_number') - // ->conditionallyAddItem('requestable') - // ->conditionallyAddItem('supplier_id') - // ->conditionallyAddItem('warranty_months') - // ->conditionallyAddItem('next_audit_date'); - foreach ($custom_field_columns as $key => $custom_field_column) { - $this->conditionallyAddItem($custom_field_column); - } - - if (!($asset->eol_explicit)) { - if ($request->filled('model_id')) { - $model = AssetModel::find($request->input('model_id')); - if ($model->eol > 0) { - if ($request->filled('purchase_date')) { - $this->update_array['asset_eol_date'] = Carbon::parse($request->input('purchase_date'))->addMonths($model->eol)->format('Y-m-d'); - } else { - $this->update_array['asset_eol_date'] = Carbon::parse($asset->purchase_date)->addMonths($model->eol)->format('Y-m-d'); - } - } else { - $this->update_array['asset_eol_date'] = null; - } - } elseif (($request->filled('purchase_date')) && ($asset->model->eol > 0)) { - $this->update_array['asset_eol_date'] = Carbon::parse($request->input('purchase_date'))->addMonths($asset->model->eol)->format('Y-m-d'); - } - } - - /** - * Blank out fields that were requested to be blanked out via checkbox - */ - - if ($request->input('null_purchase_date')=='1') { - $this->update_array['purchase_date'] = null; - if (!($asset->eol_explicit)) { - $this->update_array['asset_eol_date'] = null; - } - } - - if ($request->input('null_next_audit_date')=='1') { - $this->update_array['next_audit_date'] = null; - } - - if ($request->filled('company_id')) { - $this->update_array['company_id'] = $request->input('company_id'); - if ($request->input('company_id') == 'clear') { - $this->update_array['company_id'] = null; - } - } - - /** - * We're trying to change the model ID - we need to do some extra checks here to make sure - * the custom field values work for the custom fieldset rules around this asset. Uniqueness - * and requiredness across the fieldset is particularly important, since those are - * fieldset-specific attributes. - */ - if ($request->filled('model_id')) { - $this->update_array['model_id'] = AssetModel::find($request->input('model_id'))->id; - } - - /** - * We're trying to change the status ID - we need to do some extra checks here to - * make sure the status label type is one that makes sense for the state of the asset, - * for example, we shouldn't be able to make an asset archived if it's currently assigned - * to someone/something. - */ - if ($request->filled('status_id')) { - $updated_status = Statuslabel::find($request->input('status_id')); - - // We cannot assign a non-deployable status type if the asset is already assigned. - // This could probably be added to a form request. - // If the asset isn't assigned, we don't care what the status is. - // Otherwise we need to make sure the status type is still a deployable one. - if ( - ($asset->assigned_to == '') - || ($updated_status->deployable == '1') && ($asset->assetstatus->deployable == '1') - ) { - $this->update_array['status_id'] = $updated_status->id; - } - - } - - /** - * We're changing the location ID - figure out which location we should apply - * this change to: - * - * 0 - RTD location only - * 1 - location ID and RTD location ID - * 2 - location ID only - * - * Note: this is kinda dumb and we should just use human-readable values IMHO. - snipe - */ - if ($request->filled('rtd_location_id')) { - - if (($request->filled('update_real_loc')) && (($request->input('update_real_loc')) == '0')) { - $this->update_array['rtd_location_id'] = $request->input('rtd_location_id'); - } - - if (($request->filled('update_real_loc')) && (($request->input('update_real_loc')) == '1')) { - $this->update_array['location_id'] = $request->input('rtd_location_id'); - $this->update_array['rtd_location_id'] = $request->input('rtd_location_id'); - } - - if (($request->filled('update_real_loc')) && (($request->input('update_real_loc')) == '2')) { - $this->update_array['location_id'] = $request->input('rtd_location_id'); - } - - } - - - /** - * ------------------------------------------------------------------------------ - * ANYTHING that happens past this foreach - * WILL NOT BE logged in the edit log_meta data - * ------------------------------------------------------------------------------ - */ - // it looks like this doesn't do anything anymore 🤔 - $changed = []; - - foreach ($this->update_array as $key => $value) { - - if ($this->update_array[$key] != $asset->{$key}) { - $changed[$key]['old'] = $asset->{$key}; - $changed[$key]['new'] = $this->update_array[$key]; - } - - } - - /** - * Start all the custom fields shenanigans - */ - - // Does the model have a fieldset? - if ($asset->model->fieldset) { - foreach ($asset->model->fieldset->fields as $field) { - - if ((array_key_exists($field->db_column, $this->update_array)) && ($field->field_encrypted == '1')) { - if (Gate::allows('admin')) { - $decrypted_old = Helper::gracefulDecrypt($field, $asset->{$field->db_column}); - - /* - * Check if the decrypted existing value is different from one we just submitted - * and if not, pull it out of the object since it shouldn't really be updating at all. - * If we don't do this, it will try to re-encrypt it, and the same value encrypted two - * different times will have different values, so it will *look* like it was updated - * but it wasn't. - */ - if ($decrypted_old != $this->update_array[$field->db_column]) { - $asset->{$field->db_column} = Crypt::encrypt($this->update_array[$field->db_column]); - } else { - /* - * Remove the encrypted custom field from the update_array, since nothing changed - */ - unset($this->update_array[$field->db_column]); - unset($asset->{$field->db_column}); - } - - /* - * These custom fields aren't encrypted, just carry on as usual - */ - } - } else { - - if ((array_key_exists($field->db_column, $this->update_array)) && ($asset->{$field->db_column} != $this->update_array[$field->db_column])) { - - // Check if this is an array, and if so, flatten it - if (is_array($this->update_array[$field->db_column])) { - $asset->{$field->db_column} = implode(', ', $this->update_array[$field->db_column]); - } else { - $asset->{$field->db_column} = $this->update_array[$field->db_column]; - } - } - } - - } // endforeach - } - - - // Check if it passes validation, and then try to save - if (!$asset->update($this->update_array)) { - - // Build the error array - foreach ($asset->getErrors()->toArray() as $key => $message) { - for ($x = 0; $x < count($message); $x++) { - $error_array[$key][] = trans('general.asset') . ' ' . $asset->id . ': ' . $message[$x]; - $has_errors++; - } - } - - } // end if saved - - } // end asset foreach - - if ($has_errors > 0) { - return redirect($bulk_back_url)->with('bulk_asset_errors', $error_array); - } - - return redirect($bulk_back_url)->with('success', trans('admin/hardware/message.update.success')); - } - // no values given, nothing to update - return redirect($bulk_back_url)->with('warning', trans('admin/hardware/message.update.nothing_updated')); + return redirect($bulk_back_url)->with('success', trans('bulk.update.success')); } /**