diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 367ab1c10cf5..53b256ef053a 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -30,6 +30,7 @@
use App\Models\License;
use App\Models\Location;
use App\Models\Maintenance;
+use App\Models\Supplier;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
@@ -52,6 +53,7 @@ abstract class Controller extends BaseController
'licenses' => License::class,
'locations' => Location::class,
'models' => AssetModel::class,
+ 'suppliers' => Supplier::class,
'users' => User::class,
];
@@ -66,6 +68,7 @@ abstract class Controller extends BaseController
'licenses' => 'private_uploads/licenses/',
'locations' => 'private_uploads/locations/',
'models' => 'private_uploads/models/',
+ 'suppliers' => 'private_uploads/suppliers/',
'users' => 'private_uploads/users/',
];
@@ -80,6 +83,7 @@ abstract class Controller extends BaseController
'licenses' => 'license',
'locations' => 'location',
'models' => 'model',
+ 'suppliers' => 'supplier',
'users' => 'user',
];
diff --git a/app/Models/Actionlog.php b/app/Models/Actionlog.php
index 786246778cd6..030850b50e44 100755
--- a/app/Models/Actionlog.php
+++ b/app/Models/Actionlog.php
@@ -518,6 +518,8 @@ public function uploads_file_path()
return 'private_uploads/locations/'.$this->filename;
case Maintenance::class:
return 'private_uploads/maintenances/'.$this->filename;
+ case Supplier::class:
+ return 'private_uploads/suppliers/'.$this->filename;
case User::class:
return 'private_uploads/users/'.$this->filename;
default:
diff --git a/app/Models/Supplier.php b/app/Models/Supplier.php
index 2c99330604e0..25e763c95773 100755
--- a/app/Models/Supplier.php
+++ b/app/Models/Supplier.php
@@ -3,15 +3,18 @@
namespace App\Models;
use App\Http\Traits\UniqueUndeletedTrait;
+use App\Models\Traits\HasUploads;
use App\Models\Traits\Searchable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use Watson\Validating\ValidatingTrait;
use \Illuminate\Database\Eloquent\Relations\Relation;
+use App\Models\Traits\Loggable;
class Supplier extends SnipeModel
{
use HasFactory;
use SoftDeletes;
+ use HasUploads;
protected $table = 'suppliers';
@@ -42,6 +45,7 @@ class Supplier extends SnipeModel
use ValidatingTrait;
use UniqueUndeletedTrait;
use Searchable;
+ use Loggable;
/**
* The attributes that should be included when searching the model.
diff --git a/database/migrations/2025_11_10_205136_change_suppliers_notes_to_text.php b/database/migrations/2025_11_10_205136_change_suppliers_notes_to_text.php
new file mode 100644
index 000000000000..e155623a67f2
--- /dev/null
+++ b/database/migrations/2025_11_10_205136_change_suppliers_notes_to_text.php
@@ -0,0 +1,28 @@
+text('notes')->change();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('text', function (Blueprint $table) {
+ //
+ });
+ }
+};
diff --git a/resources/views/suppliers/view.blade.php b/resources/views/suppliers/view.blade.php
index bc216a964e93..dfee233e1bf3 100755
--- a/resources/views/suppliers/view.blade.php
+++ b/resources/views/suppliers/view.blade.php
@@ -100,6 +100,26 @@
+
+
+
+
+
+
+
+
+ {{ trans('general.files') }}
+ {!! ($supplier->uploads->count() > 0 ) ? ''.number_format($supplier->uploads->count()).'' : '' !!}
+
+
+
+
+
+
+
+ {{ trans('button.upload') }}
+
+
@@ -243,6 +263,14 @@ class="table table-striped snipe-table"
+
+
@@ -318,6 +346,9 @@ class="table table-striped snipe-table"
+ @can('update', \App\Models\Supplier::class)
+ @include ('modals.upload-file', ['item_type' => 'supplier', 'item_id' => $supplier->id])
+ @endcan
@stop
@section('moar_scripts')
diff --git a/routes/api.php b/routes/api.php
index b05770545568..dbb9348f7e4a 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -1348,7 +1348,7 @@
'index'
]
)->name('api.files.index')
- ->where(['object_type' => 'accessories|audits|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
+ ->where(['object_type' => 'accessories|audits|assets|components|consumables|hardware|licenses|locations|maintenances|models|suppliers|users']);
// Get a file
Route::get('{object_type}/{id}/files/{file_id}',
@@ -1357,7 +1357,7 @@
'show'
]
)->name('api.files.show')
- ->where(['object_type' => 'accessories|audits|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
+ ->where(['object_type' => 'accessories|audits|assets|components|consumables|hardware|licenses|locations|maintenances|models|suppliers|users']);
// Upload files(s)
Route::post('{object_type}/{id}/files',
@@ -1366,7 +1366,7 @@
'store'
]
)->name('api.files.store')
- ->where(['object_type' => 'accessories|audits|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
+ ->where(['object_type' => 'accessories|audits|assets|components|consumables|hardware|licenses|locations|maintenances|models|suppliers|users']);
// Delete files(s)
Route::delete('{object_type}/{id}/files/{file_id}/delete',
@@ -1375,6 +1375,6 @@
'destroy'
]
)->name('api.files.destroy')
- ->where(['object_type' => 'accessories|assets|components|consumables|hardware|licenses|locations|maintenances|models|users']);
+ ->where(['object_type' => 'accessories|assets|components|consumables|hardware|licenses|locations|maintenances|models|suppliers|users']);
}); // end API routes
diff --git a/routes/web.php b/routes/web.php
index 53595cb8a377..47e1c460037f 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -716,7 +716,7 @@
'show'
]
)->name('ui.files.show')
- ->where(['object_type' => 'assets|audits|maintenances|hardware|models|users|locations|accessories|consumables|licenses|components']);
+ ->where(['object_type' => 'assets|audits|maintenances|hardware|models|users|locations|accessories|consumables|licenses|suppliers|components']);
// Upload files(s)
Route::post('{object_type}/{id}/files',
@@ -725,7 +725,7 @@
'store'
]
)->name('ui.files.store')
- ->where(['object_type' => 'assets|audits|maintenances|hardware|models|users|locations|accessories|consumables|licenses|components']);
+ ->where(['object_type' => 'assets|audits|maintenances|hardware|models|users|locations|accessories|consumables|licenses|suppliers|components']);
// Delete files(s)
Route::delete('{object_type}/{id}/files/{file_id}/delete',
@@ -734,7 +734,7 @@
'destroy'
]
)->name('ui.files.destroy')
- ->where(['object_type' => 'assets|maintenances|hardware|models|users|locations|accessories|consumables|licenses|components']);
+ ->where(['object_type' => 'assets|maintenances|hardware|models|users|locations|accessories|consumables|licenses|suppliers|components']);
});
diff --git a/storage/private_uploads/suppliers/.gitignore b/storage/private_uploads/suppliers/.gitignore
new file mode 100644
index 000000000000..c96a04f008ee
--- /dev/null
+++ b/storage/private_uploads/suppliers/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file