mirror of
https://github.com/snipe/snipe-it.git
synced 2025-03-05 20:52:15 -08:00
cleaned - more work needs to happen
This commit is contained in:
parent
dd8fb6ef4a
commit
6c1239eee5
|
@ -157,19 +157,24 @@ class UpdateAssetAction
|
||||||
|
|
||||||
if ($asset->save()) {
|
if ($asset->save()) {
|
||||||
// check out stuff
|
// check out stuff
|
||||||
|
//$location = Location::find($asset->location_id);
|
||||||
if (!is_null($assigned_user) && ($target = User::find($assigned_user))) {
|
if (!is_null($assigned_user) && ($target = User::find($assigned_user))) {
|
||||||
$location = $target->location_id;
|
$location = $target->location_id;
|
||||||
} elseif (!is_null($assigned_asset) && ($target = Asset::find($assigned_asset))) {
|
} elseif (!is_null($assigned_asset) && ($target = Asset::find($assigned_asset))) {
|
||||||
$location = $target->location_id;
|
$location = $target->location_id;
|
||||||
|
|
||||||
Asset::where('assigned_type', \App\Models\Asset::class)->where('assigned_to', $asset->id)
|
Asset::where('assigned_type', \App\Models\Asset::class)->where('assigned_to', $asset->id)
|
||||||
->update(['location_id' => $target->location_id]);
|
->update(['location_id' => $target->location_id]);
|
||||||
} elseif (!is_null($assigned_location) && ($target = Location::find($assigned_location))) {
|
} elseif (!is_null($assigned_location) && ($target = Location::find($assigned_location))) {
|
||||||
$location = $target->id;
|
$location = $target->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($target)) {
|
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);
|
$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;
|
return $asset;
|
||||||
|
|
|
@ -658,84 +658,6 @@ class AssetsController extends Controller
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.something_went_wrong')));
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -249,250 +249,7 @@ class BulkAssetsController extends Controller
|
||||||
if (!empty($errors)) {
|
if (!empty($errors)) {
|
||||||
return redirect($bulk_back_url)->with('bulk_asset_errors', $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'));
|
return redirect($bulk_back_url)->with('success', trans('bulk.update.success'));
|
||||||
|
|
||||||
|
|
||||||
$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'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue