mirror of
https://github.com/snipe/snipe-it.git
synced 2025-03-05 20:52:15 -08:00
gui seemingly working, other good progress - api next
This commit is contained in:
parent
47d132703e
commit
c91dfaf9df
|
@ -3,9 +3,7 @@
|
||||||
namespace App\Actions\Assets;
|
namespace App\Actions\Assets;
|
||||||
|
|
||||||
use App\Events\CheckoutableCheckedIn;
|
use App\Events\CheckoutableCheckedIn;
|
||||||
use App\Helpers\Helper;
|
|
||||||
use App\Http\Requests\ImageUploadRequest;
|
use App\Http\Requests\ImageUploadRequest;
|
||||||
use App\Http\Requests\Request;
|
|
||||||
use App\Models\Asset;
|
use App\Models\Asset;
|
||||||
use App\Models\AssetModel;
|
use App\Models\AssetModel;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
|
@ -32,16 +30,16 @@ class UpdateAssetAction
|
||||||
$rtd_location_id = null,
|
$rtd_location_id = null,
|
||||||
$byod = false,
|
$byod = false,
|
||||||
$image_delete = false,
|
$image_delete = false,
|
||||||
$serials = null,
|
$serial = null,
|
||||||
$name = null,
|
$name = null,
|
||||||
$company_id = null,
|
$company_id = null,
|
||||||
$model_id = null,
|
$model_id = null,
|
||||||
$order_number = null,
|
$order_number = null,
|
||||||
$asset_tags = null,
|
$asset_tag = null,
|
||||||
$notes = null,
|
$notes = null,
|
||||||
)
|
): \App\Models\SnipeModel {
|
||||||
{
|
|
||||||
|
|
||||||
|
dump($purchase_date);
|
||||||
$asset->status_id = $status_id;
|
$asset->status_id = $status_id;
|
||||||
$asset->warranty_months = $warranty_months;
|
$asset->warranty_months = $warranty_months;
|
||||||
$asset->purchase_cost = $purchase_cost;
|
$asset->purchase_cost = $purchase_cost;
|
||||||
|
@ -100,28 +98,14 @@ class UpdateAssetAction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is gonna be a whole issue with validation - i'm assuming it's because we're using the same blade
|
$asset->serial = $serial;
|
||||||
// to do both create (which allows multiple creates) and update. should be fixable.
|
|
||||||
// and why is the offset 1 and not 0? very confusing.
|
|
||||||
$serial = $serials;
|
|
||||||
$asset->serial = $serials;
|
|
||||||
|
|
||||||
if (is_array($serials)) {
|
|
||||||
$asset->serial = $serial[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
$asset->name = $name;
|
$asset->name = $name;
|
||||||
$asset->company_id = Company::getIdForCurrentUser($company_id);
|
$asset->company_id = Company::getIdForCurrentUser($company_id);
|
||||||
$asset->model_id = $model_id;
|
$asset->model_id = $model_id;
|
||||||
$asset->order_number = $order_number;
|
$asset->order_number = $order_number;
|
||||||
|
|
||||||
// same thing as serials above
|
$asset->asset_tag = $asset_tag;
|
||||||
$asset_tags = $asset_tags;
|
|
||||||
$asset->asset_tag = $asset_tags;
|
|
||||||
|
|
||||||
if (is_array($asset_tags)) {
|
|
||||||
$asset->asset_tag = $asset_tags[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
$asset->notes = $notes;
|
$asset->notes = $notes;
|
||||||
|
|
||||||
|
@ -156,11 +140,8 @@ class UpdateAssetAction
|
||||||
|
|
||||||
session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
|
session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
|
||||||
|
|
||||||
if ($asset->save()) {
|
$asset->save();
|
||||||
return redirect()->to(Helper::getRedirectOption($request, $assetId, 'Assets'))
|
|
||||||
->with('success', trans('admin/hardware/message.update.success'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->back()->withInput()->withErrors($asset->getErrors());
|
return $asset;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Actions\Assets\DestroyAssetAction;
|
use App\Actions\Assets\DestroyAssetAction;
|
||||||
use App\Actions\Assets\StoreAssetAction;
|
use App\Actions\Assets\StoreAssetAction;
|
||||||
|
use App\Actions\Assets\UpdateAssetAction;
|
||||||
use App\Events\CheckoutableCheckedIn;
|
use App\Events\CheckoutableCheckedIn;
|
||||||
use App\Exceptions\CheckoutNotAllowed;
|
use App\Exceptions\CheckoutNotAllowed;
|
||||||
use App\Http\Requests\Assets\StoreAssetRequest;
|
use App\Http\Requests\Assets\StoreAssetRequest;
|
||||||
|
@ -650,6 +651,12 @@ class AssetsController extends Controller
|
||||||
*/
|
*/
|
||||||
public function update(UpdateAssetRequest $request, Asset $asset): JsonResponse
|
public function update(UpdateAssetRequest $request, Asset $asset): JsonResponse
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
|
UpdateAssetAction::run($asset, $request, ...$request->validated());
|
||||||
|
} catch (CheckoutNotAllowed $e) {
|
||||||
|
return response()->json(Helper::formatStandardApiResponse('error', null, $e->getMessage()), 200);
|
||||||
|
}
|
||||||
|
|
||||||
$asset->fill($request->validated());
|
$asset->fill($request->validated());
|
||||||
|
|
||||||
if ($request->has('model_id')) {
|
if ($request->has('model_id')) {
|
||||||
|
|
|
@ -233,6 +233,15 @@ class AssetsController extends Controller
|
||||||
public function update(UpdateAssetRequest $request, Asset $asset): RedirectResponse
|
public function update(UpdateAssetRequest $request, Asset $asset): RedirectResponse
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
$serials = $request->input('serials');
|
||||||
|
$asset_tags = $request->input('asset_tags');
|
||||||
|
if (is_array($request->input('serials'))) {
|
||||||
|
$serial = $serials[1];
|
||||||
|
}
|
||||||
|
if (is_array($request->input('asset_tags'))) {
|
||||||
|
$asset_tag = $asset_tags[1];
|
||||||
|
}
|
||||||
|
|
||||||
$asset = UpdateAssetAction::run(
|
$asset = UpdateAssetAction::run(
|
||||||
asset: $asset,
|
asset: $asset,
|
||||||
request: $request,
|
request: $request,
|
||||||
|
@ -248,75 +257,67 @@ class AssetsController extends Controller
|
||||||
rtd_location_id: $request->validated('rtd_location_id'),
|
rtd_location_id: $request->validated('rtd_location_id'),
|
||||||
byod: $request->validated('byod'),
|
byod: $request->validated('byod'),
|
||||||
image_delete: $request->validated('image_delete'),
|
image_delete: $request->validated('image_delete'),
|
||||||
serials: null, // this needs to be set up in request somehow
|
serial: $serial, // this needs to be set up in request somehow
|
||||||
name: $request->validated('name'),
|
name: $request->validated('name'),
|
||||||
company_id: $request->validated('company_id'),
|
company_id: $request->validated('company_id'),
|
||||||
model_id: $request->validated('model_id'),
|
model_id: $request->validated('model_id'),
|
||||||
order_number: $request->validated('order_number'),
|
order_number: $request->validated('order_number'),
|
||||||
asset_tags: null, // same as serials
|
asset_tag: $asset_tag, // same as serials
|
||||||
notes: $request->validated('notes'),
|
notes: $request->validated('notes'),
|
||||||
);
|
);
|
||||||
return redirect()->back()->with('success', trans('admin/hardware/message.update.success'));
|
return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
|
||||||
|
->with('success', trans('admin/hardware/message.update.success'));
|
||||||
|
} catch (\Watson\Validating\ValidationException $e) {
|
||||||
|
$errors = $e->getErrors();
|
||||||
|
return redirect()->back()->withInput()->withErrors($errors);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
report($e);
|
report($e);
|
||||||
return redirect()->back()->with('error', trans('admin/hardware/message.update.error'));
|
return redirect()->back()->with('error', trans('admin/hardware/message.update.error'), $asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// serials????
|
// serials????
|
||||||
$serial = $request->input('serials');
|
//$asset->name = $request->input('name');
|
||||||
$asset->serial = $request->input('serials');
|
//$asset->company_id = Company::getIdForCurrentUser($request->input('company_id'));
|
||||||
|
//$asset->model_id = $request->input('model_id');
|
||||||
if (is_array($request->input('serials'))) {
|
//$asset->order_number = $request->input('order_number');
|
||||||
$asset->serial = $serial[1];
|
//
|
||||||
}
|
//
|
||||||
|
//
|
||||||
$asset->name = $request->input('name');
|
//$asset->notes = $request->input('notes');
|
||||||
$asset->company_id = Company::getIdForCurrentUser($request->input('company_id'));
|
//
|
||||||
$asset->model_id = $request->input('model_id');
|
//$asset = $request->handleImages($asset);
|
||||||
$asset->order_number = $request->input('order_number');
|
//
|
||||||
|
//// Update custom fields in the database.
|
||||||
$asset_tags = $request->input('asset_tags');
|
//$model = AssetModel::find($request->get('model_id'));
|
||||||
$asset->asset_tag = $request->input('asset_tags');
|
//if (($model) && ($model->fieldset)) {
|
||||||
|
// foreach ($model->fieldset->fields as $field) {
|
||||||
if (is_array($request->input('asset_tags'))) {
|
//
|
||||||
$asset->asset_tag = $asset_tags[1];
|
// if ($field->field_encrypted == '1') {
|
||||||
}
|
// if (Gate::allows('assets.view.encrypted_custom_fields')) {
|
||||||
|
// if (is_array($request->input($field->db_column))) {
|
||||||
$asset->notes = $request->input('notes');
|
// $asset->{$field->db_column} = Crypt::encrypt(implode(', ', $request->input($field->db_column)));
|
||||||
|
// } else {
|
||||||
$asset = $request->handleImages($asset);
|
// $asset->{$field->db_column} = Crypt::encrypt($request->input($field->db_column));
|
||||||
|
// }
|
||||||
// Update custom fields in the database.
|
// }
|
||||||
$model = AssetModel::find($request->get('model_id'));
|
// } else {
|
||||||
if (($model) && ($model->fieldset)) {
|
// if (is_array($request->input($field->db_column))) {
|
||||||
foreach ($model->fieldset->fields as $field) {
|
// $asset->{$field->db_column} = implode(', ', $request->input($field->db_column));
|
||||||
|
// } else {
|
||||||
if ($field->field_encrypted == '1') {
|
// $asset->{$field->db_column} = $request->input($field->db_column);
|
||||||
if (Gate::allows('assets.view.encrypted_custom_fields')) {
|
// }
|
||||||
if (is_array($request->input($field->db_column))) {
|
// }
|
||||||
$asset->{$field->db_column} = Crypt::encrypt(implode(', ', $request->input($field->db_column)));
|
// }
|
||||||
} else {
|
//}
|
||||||
$asset->{$field->db_column} = Crypt::encrypt($request->input($field->db_column));
|
//
|
||||||
}
|
//session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
|
||||||
}
|
//
|
||||||
} else {
|
//if ($asset->save()) {
|
||||||
if (is_array($request->input($field->db_column))) {
|
// return redirect()->to(Helper::getRedirectOption($request, $assetId, 'Assets'))
|
||||||
$asset->{$field->db_column} = implode(', ', $request->input($field->db_column));
|
// ->with('success', trans('admin/hardware/message.update.success'));
|
||||||
} else {
|
//}
|
||||||
$asset->{$field->db_column} = $request->input($field->db_column);
|
//
|
||||||
}
|
//return redirect()->back()->withInput()->withErrors($asset->getErrors());
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
|
|
||||||
|
|
||||||
if ($asset->save()) {
|
|
||||||
return redirect()->to(Helper::getRedirectOption($request, $assetId, 'Assets'))
|
|
||||||
->with('success', trans('admin/hardware/message.update.success'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->back()->withInput()->withErrors($asset->getErrors());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -29,9 +29,19 @@ class UpdateAssetRequest extends ImageUploadRequest
|
||||||
*/
|
*/
|
||||||
public function rules()
|
public function rules()
|
||||||
{
|
{
|
||||||
|
$modelRules = (new Asset)->getRules();
|
||||||
|
// TODO: make sure this actually works
|
||||||
|
if ((Setting::getSettings()->digit_separator === '1.234,56' || '1,234.56') && is_string($this->input('purchase_cost'))) {
|
||||||
|
// If purchase_cost was submitted as a string with a comma separator
|
||||||
|
// then we need to ignore the normal numeric rules.
|
||||||
|
// Since the original rules still live on the model they will be run
|
||||||
|
// right before saving (and after purchase_cost has been
|
||||||
|
// converted to a float via setPurchaseCostAttribute).
|
||||||
|
$modelRules = $this->removeNumericRulesFromPurchaseCost($modelRules);
|
||||||
|
}
|
||||||
$rules = array_merge(
|
$rules = array_merge(
|
||||||
parent::rules(),
|
parent::rules(),
|
||||||
(new Asset)->getRules(),
|
$modelRules,
|
||||||
// this is to overwrite rulesets that include required, and rewrite unique_undeleted
|
// this is to overwrite rulesets that include required, and rewrite unique_undeleted
|
||||||
[
|
[
|
||||||
'image_delete' => ['bool'],
|
'image_delete' => ['bool'],
|
||||||
|
@ -49,6 +59,21 @@ class UpdateAssetRequest extends ImageUploadRequest
|
||||||
if (Setting::getSettings()->digit_separator === '1.234,56' && is_string($this->input('purchase_cost'))) {
|
if (Setting::getSettings()->digit_separator === '1.234,56' && is_string($this->input('purchase_cost'))) {
|
||||||
$rules['purchase_cost'] = ['nullable', 'string'];
|
$rules['purchase_cost'] = ['nullable', 'string'];
|
||||||
}
|
}
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function removeNumericRulesFromPurchaseCost(array $rules): array
|
||||||
|
{
|
||||||
|
$purchaseCost = $rules['purchase_cost'];
|
||||||
|
|
||||||
|
// If rule is in "|" format then turn it into an array
|
||||||
|
if (is_string($purchaseCost)) {
|
||||||
|
$purchaseCost = explode('|', $purchaseCost);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rules['purchase_cost'] = array_filter($purchaseCost, function ($rule) {
|
||||||
|
return $rule !== 'numeric' && $rule !== 'gte:0';
|
||||||
|
});
|
||||||
|
|
||||||
return $rules;
|
return $rules;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ class Asset extends Depreciable
|
||||||
use CompanyableTrait;
|
use CompanyableTrait;
|
||||||
use HasFactory, Loggable, Requestable, Presentable, SoftDeletes, ValidatingTrait, UniqueUndeletedTrait;
|
use HasFactory, Loggable, Requestable, Presentable, SoftDeletes, ValidatingTrait, UniqueUndeletedTrait;
|
||||||
|
|
||||||
|
protected $throwValidationExceptions = true;
|
||||||
|
|
||||||
public const LOCATION = 'location';
|
public const LOCATION = 'location';
|
||||||
public const ASSET = 'asset';
|
public const ASSET = 'asset';
|
||||||
public const USER = 'user';
|
public const USER = 'user';
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
'topSubmit' => true,
|
'topSubmit' => true,
|
||||||
'helpText' => trans('help.assets'),
|
'helpText' => trans('help.assets'),
|
||||||
'helpPosition' => 'right',
|
'helpPosition' => 'right',
|
||||||
'formAction' => ($item->id) ? route('hardware.update', ['hardware' => $item->id]) : route('hardware.store'),
|
'formAction' => ($item->id) ? route('hardware.update', ['asset' => $item->id]) : route('hardware.store'),
|
||||||
'index_route' => 'hardware.index',
|
'index_route' => 'hardware.index',
|
||||||
'options' => [
|
'options' => [
|
||||||
'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']),
|
'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']),
|
||||||
|
|
Loading…
Reference in a new issue