Skip to content

Commit 00c3943

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents dffcb62 + 605022a commit 00c3943

32 files changed

+247
-49
lines changed

app/Helpers/IconHelper.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public static function icon($type) {
1616
case 'clone':
1717
return 'far fa-clone';
1818
case 'delete':
19+
case 'upload deleted':
1920
return 'fas fa-trash';
2021
case 'create':
2122
return 'fa-solid fa-plus';

app/Http/Controllers/Api/AssetModelsController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public function index(Request $request) : JsonResponse | array
5050
'fieldset',
5151
'deleted_at',
5252
'updated_at',
53+
'require_serial',
5354
];
5455

5556
$assetmodels = AssetModel::select([
@@ -69,6 +70,7 @@ public function index(Request $request) : JsonResponse | array
6970
'models.fieldset_id',
7071
'models.deleted_at',
7172
'models.updated_at',
73+
'models.require_serial'
7274
])
7375
->with('category', 'depreciation', 'manufacturer', 'fieldset.fields.defaultValues', 'adminuser')
7476
->withCount('assets as assets_count');

app/Http/Controllers/Api/UploadedFilesController.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,7 @@ public function index(Request $request, $object_type, $id) : JsonResponse | arra
5151
];
5252

5353

54-
$uploads = Actionlog::select('action_logs.*')
55-
->whereNotNull('filename')
56-
->where('item_type', self::$map_object_type[$object_type])
57-
->where('item_id', $object->id)
58-
->where('action_type', '=', 'uploaded')
54+
$uploads = self::$map_object_type[$object_type]::withTrashed()->find($id)->uploads()
5955
->with('adminuser');
6056

6157
$offset = ($request->input('offset') > $uploads->count()) ? $uploads->count() : abs($request->input('offset'));
@@ -206,7 +202,7 @@ public function destroy($object_type, $id, $file_id) : JsonResponse
206202
Storage::delete(self::$map_storage_path[$object_type].'/'.$log->filename);
207203
}
208204
// Delete the record of the file
209-
if ($log->delete()) {
205+
if ($log->logUploadDelete($object, $log->filename)) {
210206
return response()->json(Helper::formatStandardApiResponse('success', null, trans_choice('general.file_upload_status.delete.success', 1)), 200);
211207
}
212208

app/Http/Controllers/AssetModelsController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public function store(StoreAssetModelRequest $request) : RedirectResponse
8282
$model->notes = $request->input('notes');
8383
$model->created_by = auth()->id();
8484
$model->requestable = $request->has('requestable');
85+
$model->require_serial = $request->input('require_serial', 0);
8586

8687
if ($request->input('fieldset_id') != '') {
8788
$model->fieldset_id = $request->input('fieldset_id');
@@ -155,7 +156,7 @@ public function update(StoreAssetModelRequest $request, AssetModel $model) : Red
155156
$model->category_id = $request->input('category_id');
156157
$model->notes = $request->input('notes');
157158
$model->requestable = $request->input('requestable', '0');
158-
159+
$model->require_serial = $request->input('require_serial', 0);
159160
$model->fieldset_id = $request->input('fieldset_id');
160161

161162
if ($model->save()) {

app/Http/Controllers/Assets/AssetsController.php

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,35 @@ public function store(ImageUploadRequest $request) : RedirectResponse
110110
// This is only necessary on create, not update, since bulk editing is handled
111111
// differently
112112
$asset_tags = $request->input('asset_tags');
113+
$model = AssetModel::find($request->input('model_id'));
114+
$serial_errors = [];
115+
$serials = $request->input('serials');
113116

114117
$settings = Setting::getSettings();
115118

119+
//Validate required serial based on model setting
120+
for ($a = 1, $aMax = count($asset_tags); $a <= $aMax; $a++) {
121+
if ($model && $model->require_serial === 1 && empty($serials[$a])) {
122+
$serial_errors["serials.$a"] = trans('admin/hardware/form.serial_required', ['number' => $a]);
123+
}
124+
125+
}
126+
127+
if (!empty($serial_errors)) {
128+
return redirect()->back()
129+
->withInput()
130+
->withErrors($serial_errors);
131+
}
132+
133+
$asset = null;
134+
$companyId = Company::getIdForCurrentUser($request->input('company_id'));
116135
$successes = [];
117136
$failures = [];
118-
$serials = $request->input('serials');
119-
$asset = null;
120137

121-
for ($a = 1; $a <= count($asset_tags); $a++) {
138+
for ($a = 1, $aMax = count($asset_tags); $a <= $aMax; $a++) {
122139
$asset = new Asset();
123-
$asset->model()->associate(AssetModel::find($request->input('model_id')));
140+
141+
$asset->model()->associate($model);
124142
$asset->name = $request->input('name');
125143

126144
// Check for a corresponding serial
@@ -132,7 +150,7 @@ public function store(ImageUploadRequest $request) : RedirectResponse
132150
$asset->asset_tag = $asset_tags[$a];
133151
}
134152

135-
$asset->company_id = Company::getIdForCurrentUser($request->input('company_id'));
153+
$asset->company_id = $companyId;
136154
$asset->model_id = $request->input('model_id');
137155
$asset->order_number = $request->input('order_number');
138156
$asset->notes = $request->input('notes');
@@ -172,7 +190,6 @@ public function store(ImageUploadRequest $request) : RedirectResponse
172190

173191
// Update custom fields in the database.
174192
// Validation for these fields is handled through the AssetRequest form request
175-
$model = AssetModel::find($request->get('model_id'));
176193

177194
if (($model) && ($model->fieldset)) {
178195
foreach ($model->fieldset->fields as $field) {
@@ -453,6 +470,13 @@ public function update(ImageUploadRequest $request, Asset $asset) : RedirectResp
453470
]);
454471

455472

473+
//Validate required serial based on model setting
474+
if ($model && $model->require_serial === 1 && empty($serial[1])) {
475+
return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
476+
->with('warning', trans('admin/hardware/form.serial_required_post_model_update', [
477+
'asset_model' => $model->name
478+
]));
479+
}
456480
if ($asset->save()) {
457481
return Helper::getRedirectOption($request, $asset->id, 'Assets')
458482
->with('success', trans('admin/hardware/message.update.success'));

app/Http/Controllers/BulkAssetModelsController.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ public function update(Request $request): View | RedirectResponse
9292
$update_array['min_amt'] = $request->input('min_amt');
9393
}
9494

95-
95+
if ($request->filled('require_serial')) {
96+
$update_array['require_serial'] = $request->input('require_serial');
97+
}
9698

9799
if (count($update_array) > 0) {
98100
AssetModel::whereIn('id', $models_raw_array)->update($update_array);

app/Http/Controllers/UploadedFilesController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public function destroy($object_type, $id, $file_id) : RedirectResponse
148148
Storage::delete(self::$map_storage_path[$object_type].'/'.$log->filename);
149149
}
150150
// Delete the record of the file
151-
if ($log->delete()) {
151+
if ($log->logUploadDelete($object, $log->filename)) {
152152
return redirect()->back()->withFragment('files')->with('success', trans_choice('general.file_upload_status.delete.success', 1));
153153
}
154154

app/Http/Transformers/ActionlogsTransformer.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,20 @@ private function clean_field($value)
5050

5151
public function transformActionlog (Actionlog $actionlog, $settings = null)
5252
{
53+
5354
$icon = $actionlog->present()->icon();
5455

56+
if (($actionlog->filename!='') && ($actionlog->action_type!='upload deleted')) {
57+
$icon = Helper::filetype_icon($actionlog->filename);
58+
}
59+
5560
static $custom_fields = false;
5661

5762
if ($custom_fields === false) {
5863
$custom_fields = CustomField::all();
5964
}
6065

61-
if ($actionlog->filename!='') {
62-
$icon = Helper::filetype_icon($actionlog->filename);
63-
}
66+
6467

6568
// This is necessary since we can't escape special characters within a JSON object
6669
if (($actionlog->log_meta) && ($actionlog->log_meta!='')) {

app/Http/Transformers/AssetModelsTransformer.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public function transformAssetModel(AssetModel $assetmodel)
6565
'default_fieldset_values' => $default_field_values,
6666
'eol' => ($assetmodel->eol > 0) ? $assetmodel->eol.' months' : 'None',
6767
'requestable' => ($assetmodel->requestable == '1') ? true : false,
68+
'require_serial' => $assetmodel->require_serial,
6869
'notes' => Helper::parseEscapedMarkedownInline($assetmodel->notes),
6970
'created_by' => ($assetmodel->adminuser) ? [
7071
'id' => (int) $assetmodel->adminuser->id,

app/Models/Accessory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class Accessory extends SnipeModel
6666
'company_id' => 'integer|nullable',
6767
'location_id' => 'exists:locations,id|nullable|fmcs_location',
6868
'min_amt' => 'integer|min:0|nullable',
69-
'purchase_cost' => 'numeric|nullable|gte:0|max:9999999999999',
69+
'purchase_cost' => 'numeric|nullable|gte:0|max:99999999999999999.99',
7070
'purchase_date' => 'date_format:Y-m-d|nullable',
7171
];
7272

0 commit comments

Comments
 (0)