Added supplier file uploads

This commit is contained in:
snipe
2025-11-10 20:47:45 +00:00
parent e1d3714445
commit 34daffcdf4
7 changed files with 50 additions and 7 deletions

View File

@@ -30,6 +30,7 @@ use App\Models\Consumable;
use App\Models\License; use App\Models\License;
use App\Models\Location; use App\Models\Location;
use App\Models\Maintenance; use App\Models\Maintenance;
use App\Models\Supplier;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
@@ -52,6 +53,7 @@ abstract class Controller extends BaseController
'licenses' => License::class, 'licenses' => License::class,
'locations' => Location::class, 'locations' => Location::class,
'models' => AssetModel::class, 'models' => AssetModel::class,
'suppliers' => Supplier::class,
'users' => User::class, 'users' => User::class,
]; ];
@@ -66,6 +68,7 @@ abstract class Controller extends BaseController
'licenses' => 'private_uploads/licenses/', 'licenses' => 'private_uploads/licenses/',
'locations' => 'private_uploads/locations/', 'locations' => 'private_uploads/locations/',
'models' => 'private_uploads/models/', 'models' => 'private_uploads/models/',
'suppliers' => 'private_uploads/suppliers/',
'users' => 'private_uploads/users/', 'users' => 'private_uploads/users/',
]; ];
@@ -80,6 +83,7 @@ abstract class Controller extends BaseController
'licenses' => 'license', 'licenses' => 'license',
'locations' => 'location', 'locations' => 'location',
'models' => 'model', 'models' => 'model',
'suppliers' => 'supplier',
'users' => 'user', 'users' => 'user',
]; ];

View File

@@ -518,6 +518,8 @@ class Actionlog extends SnipeModel
return 'private_uploads/locations/'.$this->filename; return 'private_uploads/locations/'.$this->filename;
case Maintenance::class: case Maintenance::class:
return 'private_uploads/maintenances/'.$this->filename; return 'private_uploads/maintenances/'.$this->filename;
case Supplier::class:
return 'private_uploads/suppliers/'.$this->filename;
case User::class: case User::class:
return 'private_uploads/users/'.$this->filename; return 'private_uploads/users/'.$this->filename;
default: default:

View File

@@ -3,15 +3,18 @@
namespace App\Models; namespace App\Models;
use App\Http\Traits\UniqueUndeletedTrait; use App\Http\Traits\UniqueUndeletedTrait;
use App\Models\Traits\HasUploads;
use App\Models\Traits\Searchable; use App\Models\Traits\Searchable;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Watson\Validating\ValidatingTrait; use Watson\Validating\ValidatingTrait;
use \Illuminate\Database\Eloquent\Relations\Relation; use \Illuminate\Database\Eloquent\Relations\Relation;
use App\Models\Traits\Loggable;
class Supplier extends SnipeModel class Supplier extends SnipeModel
{ {
use HasFactory; use HasFactory;
use SoftDeletes; use SoftDeletes;
use HasUploads;
protected $table = 'suppliers'; protected $table = 'suppliers';
@@ -42,6 +45,7 @@ class Supplier extends SnipeModel
use ValidatingTrait; use ValidatingTrait;
use UniqueUndeletedTrait; use UniqueUndeletedTrait;
use Searchable; use Searchable;
use Loggable;
/** /**
* The attributes that should be included when searching the model. * The attributes that should be included when searching the model.

View File

@@ -100,6 +100,26 @@
</span> </span>
</a> </a>
</li> </li>
<li>
<a href="#files" data-toggle="tab">
<span class="hidden-lg hidden-md">
<i class="fas fa-barcode fa-2x"></i>
</span>
<span class="hidden-xs hidden-sm">
{{ trans('general.files') }}
{!! ($supplier->uploads->count() > 0 ) ? '<span class="badge badge-secondary">'.number_format($supplier->uploads->count()).'</span>' : '' !!}
</span>
</a>
</li>
<li class="pull-right">
<a href="#" data-toggle="modal" data-target="#uploadFileModal">
<x-icon type="paperclip" />
{{ trans('button.upload') }}
</a>
</li>
</ul> </ul>
@@ -243,6 +263,14 @@
</div><!-- /.table-responsive --> </div><!-- /.table-responsive -->
</div><!-- /.tab-pane --> </div><!-- /.tab-pane -->
<div class="tab-pane fade" id="files">
<div class="row">
<div class="col-md-12">
<x-filestable object_type="suppliers" :object="$supplier" />
</div> <!-- /.col-md-12 -->
</div> <!-- /.row -->
</div>
</div><!--/.col-md-9--> </div><!--/.col-md-9-->
</div><!--/.col-md-9--> </div><!--/.col-md-9-->
</div><!--/.col-md-9--> </div><!--/.col-md-9-->
@@ -318,6 +346,9 @@
</div> </div>
</div> </div>
@can('update', \App\Models\Supplier::class)
@include ('modals.upload-file', ['item_type' => 'supplier', 'item_id' => $supplier->id])
@endcan
@stop @stop
@section('moar_scripts') @section('moar_scripts')

View File

@@ -1348,7 +1348,7 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
'index' 'index'
] ]
)->name('api.files.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 // Get a file
Route::get('{object_type}/{id}/files/{file_id}', Route::get('{object_type}/{id}/files/{file_id}',
@@ -1357,7 +1357,7 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
'show' 'show'
] ]
)->name('api.files.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) // Upload files(s)
Route::post('{object_type}/{id}/files', Route::post('{object_type}/{id}/files',
@@ -1366,7 +1366,7 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
'store' 'store'
] ]
)->name('api.files.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) // Delete files(s)
Route::delete('{object_type}/{id}/files/{file_id}/delete', Route::delete('{object_type}/{id}/files/{file_id}/delete',
@@ -1375,6 +1375,6 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'api-throttle:api']], fu
'destroy' 'destroy'
] ]
)->name('api.files.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 }); // end API routes

View File

@@ -716,7 +716,7 @@ Route::group(['middleware' => 'web'], function () {
'show' 'show'
] ]
)->name('ui.files.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) // Upload files(s)
Route::post('{object_type}/{id}/files', Route::post('{object_type}/{id}/files',
@@ -725,7 +725,7 @@ Route::group(['middleware' => 'web'], function () {
'store' 'store'
] ]
)->name('ui.files.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) // Delete files(s)
Route::delete('{object_type}/{id}/files/{file_id}/delete', Route::delete('{object_type}/{id}/files/{file_id}/delete',
@@ -734,7 +734,7 @@ Route::group(['middleware' => 'web'], function () {
'destroy' 'destroy'
] ]
)->name('ui.files.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']);
}); });

View File

@@ -0,0 +1,2 @@
*
!.gitignore