diff --git a/app/Events/NoteAdded.php b/app/Events/NoteAdded.php new file mode 100644 index 000000000..de5f91ce7 --- /dev/null +++ b/app/Events/NoteAdded.php @@ -0,0 +1,28 @@ +itemNoteAddedOn = $itemNoteAddedOn; + $this->note = $note; + $this->noteAddedBy = $noteAddedBy; + } +} \ No newline at end of file diff --git a/app/Helpers/IconHelper.php b/app/Helpers/IconHelper.php index b56871f83..0b243d69a 100644 --- a/app/Helpers/IconHelper.php +++ b/app/Helpers/IconHelper.php @@ -184,7 +184,9 @@ class IconHelper return 'fa-regular fa-id-card'; case 'department' : return 'fa-solid fa-building-user'; - + case 'note': + case 'notes': + return 'fas fa-sticky-note'; } } } diff --git a/app/Http/Controllers/Api/NotesController.php b/app/Http/Controllers/Api/NotesController.php new file mode 100644 index 000000000..97b7ca413 --- /dev/null +++ b/app/Http/Controllers/Api/NotesController.php @@ -0,0 +1,43 @@ +validate([ + 'note' => 'required|string|max:500', + 'type' => [ + 'required', + Rule::in(['asset']), + ], + ]); + + // This can be made dynamic by using $request->input('type') to determine which model type to add the note to. + // For now, we are only placing this on Assets + $item = Asset::findOrFail($request->input("id")); + $this->authorize('update', $item); + + event(new NoteAdded($item, Auth::user(), $validated['note'])); + + return response()->json(Helper::formatStandardApiResponse('success')); + } + + public function update(Request $request) + { + + } + public function destroy(Request $request) + { + + } +} diff --git a/app/Http/Controllers/ModalController.php b/app/Http/Controllers/ModalController.php index fab491a5f..5b8d5e0ea 100644 --- a/app/Http/Controllers/ModalController.php +++ b/app/Http/Controllers/ModalController.php @@ -32,7 +32,8 @@ class ModalController extends Controller 'statuslabel', 'supplier', 'upload-file', - 'user', + 'user', + 'add-note', ]; diff --git a/app/Listeners/LogListener.php b/app/Listeners/LogListener.php index 6dbeb7312..d0da80614 100644 --- a/app/Listeners/LogListener.php +++ b/app/Listeners/LogListener.php @@ -17,6 +17,7 @@ use App\Events\ItemAccepted; use App\Events\ItemDeclined; use App\Events\LicenseCheckedIn; use App\Events\LicenseCheckedOut; +use App\Events\NoteAdded; use App\Models\Actionlog; use App\Models\User; use App\Models\LicenseSeat; @@ -128,6 +129,23 @@ class LogListener } + + /** + * Note is added to action log + * + */ + public function onNoteAdded(NoteAdded $event) + { + $logaction = new Actionlog(); + $logaction->item_id = $event->itemNoteAddedOn->id; + $logaction->item_type = get_class($event->itemNoteAddedOn); + $logaction->note = $event->note; //this is the received alphanumeric text from the box + $logaction->created_by = $event->noteAddedBy->id; + $logaction->action_type = 'note_added'; + $logaction->save(); + } + + /** * Register the listeners for the subscriber. * @@ -141,6 +159,7 @@ class LogListener 'CheckoutAccepted', 'CheckoutDeclined', 'UserMerged', + 'NoteAdded', ]; foreach ($list as $event) { diff --git a/resources/assets/js/snipeit_modals.js b/resources/assets/js/snipeit_modals.js index 7e20e9d5d..250868bbb 100644 --- a/resources/assets/js/snipeit_modals.js +++ b/resources/assets/js/snipeit_modals.js @@ -28,7 +28,7 @@ $(function () { var baseUrl = $('meta[name="baseUrl"]').attr('content'); //handle modal-add-interstitial calls - var model, select, refreshSelector; + var model, select, refreshSelector, hasnopayload; if($('#createModal').length == 0) { $('body').append('
'); @@ -40,6 +40,7 @@ $(function () { select = link.data("select"); refreshSelector = link.data("refresh"); + hasnopayload = link.data("hasnopayload"); $('#createModal').load(link.attr('href'),function () { @@ -122,11 +123,13 @@ $(function () { $('#modal_error_msg').html(error_message).show(); return false; } - var id = result.payload.id; - var name = result.payload.name || (result.payload.first_name + " " + result.payload.last_name); - if(!id || !name) { - console.error("Could not find resulting name or ID from modal-create. Name: "+name+", id: "+id); - return false; + if(!hasnopayload) { + var id = result.payload.id; + var name = result.payload.name || (result.payload.first_name + " " + result.payload.last_name); + if (!id || !name) { + console.error("Could not find resulting name or ID from modal-create. Name: " + name + ", id: " + id); + return false; + } } $('#createModal').modal('hide'); $('#createModal').html(""); diff --git a/resources/lang/en-US/general.php b/resources/lang/en-US/general.php index 20c1cf8ae..db2830bcd 100644 --- a/resources/lang/en-US/general.php +++ b/resources/lang/en-US/general.php @@ -216,6 +216,12 @@ return [ 'no_results' => 'No Results.', 'no' => 'No', 'notes' => 'Notes', + 'note_added' => 'Note Added', + 'add_note' => 'Add Note', + 'note_edited' => 'Note Edited', + 'edit_note' => 'Edit Note', + 'note_deleted' => 'Note Deleted', + 'delete_note' => 'Delete Note', 'order_number' => 'Order Number', 'only_deleted' => 'Only Deleted Assets', 'page_menu' => 'Showing _MENU_ items', diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index b9875ddb5..e5407d30a 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -253,6 +253,15 @@ {{ Form::close() }} + + @can('update', \App\Models\Asset::class) + + @endcan + @can('delete', $asset)