mirror of
https://github.com/snipe/snipe-it.git
synced 2025-03-05 20:52:15 -08:00
More bootstrap tables formatting
This commit is contained in:
parent
8f12486f6c
commit
04bb180a80
|
@ -5,7 +5,7 @@ use App\Models\AssetModel;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Helpers\Helper;
|
use App\Helpers\Helper;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Http\Transformers\DatatablesTransformer;
|
use App\Http\Transformers\AssetModelsTransformer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class controls all actions related to asset models for
|
* This class controls all actions related to asset models for
|
||||||
|
@ -28,7 +28,7 @@ class AssetModelsController extends Controller
|
||||||
$this->authorize('view', AssetModel::class);
|
$this->authorize('view', AssetModel::class);
|
||||||
$allowed_columns = ['id','image','name','model_number','eol','notes','created_at'];
|
$allowed_columns = ['id','image','name','model_number','eol','notes','created_at'];
|
||||||
|
|
||||||
$assetmodels = AssetModel::select(['id','image','name','model_number','eol','notes','created_at'])
|
$assetmodels = AssetModel::select(['id','image','name','model_number','eol','notes','created_at','category_id','manufacturer_id','depreciation_id','fieldset_id'])
|
||||||
->with('category','depreciation', 'manufacturer','fieldset')
|
->with('category','depreciation', 'manufacturer','fieldset')
|
||||||
->withCount('assets');
|
->withCount('assets');
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ class AssetModelsController extends Controller
|
||||||
|
|
||||||
$total = $assetmodels->count();
|
$total = $assetmodels->count();
|
||||||
$assetmodels = $assetmodels->skip($offset)->take($limit)->get();
|
$assetmodels = $assetmodels->skip($offset)->take($limit)->get();
|
||||||
return (new DatatablesTransformer)->transformDatatables($assetmodels, $total);
|
return (new AssetModelsTransformer)->transformAssetModels($assetmodels, $total);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class AssetModelsController extends Controller
|
||||||
{
|
{
|
||||||
$this->authorize('view', AssetModel::class);
|
$this->authorize('view', AssetModel::class);
|
||||||
$assetmodel = AssetModel::findOrFail($id);
|
$assetmodel = AssetModel::findOrFail($id);
|
||||||
return $assetmodel;
|
return (new AssetModelsTransformer)->transformAssetModel($assetmodel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
43
app/Http/Transformers/AssetModelsTransformer.php
Normal file
43
app/Http/Transformers/AssetModelsTransformer.php
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Http\Transformers;
|
||||||
|
|
||||||
|
use App\Models\AssetModel;
|
||||||
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
|
||||||
|
class AssetModelsTransformer
|
||||||
|
{
|
||||||
|
|
||||||
|
public function transformAssetModels (Collection $assetmodels, $total)
|
||||||
|
{
|
||||||
|
$array = array();
|
||||||
|
foreach ($assetmodels as $assetmodel) {
|
||||||
|
$array[] = self::transformAssetModel($assetmodel);
|
||||||
|
}
|
||||||
|
return (new DatatablesTransformer)->transformDatatables($array, $total);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transformAssetModel (AssetModel $assetmodel)
|
||||||
|
{
|
||||||
|
$transformed = [
|
||||||
|
'id' => $assetmodel->id,
|
||||||
|
'name' => e($assetmodel->name),
|
||||||
|
'manufacturer' => ($assetmodel->manufacturer_id) ? $assetmodel->manufacturer : null,
|
||||||
|
'image' => e($assetmodel->image),
|
||||||
|
'model_number' => e($assetmodel->model_number),
|
||||||
|
'depreciation' => ($assetmodel->depreciation) ? $assetmodel->depreciation : 'No',
|
||||||
|
'assets_count' => $assetmodel->assets_count,
|
||||||
|
'category' => ($assetmodel->category_id) ? $assetmodel->category : null,
|
||||||
|
'fieldset' => ($assetmodel->fieldset) ? $assetmodel->fieldset : null,
|
||||||
|
'eol' => ($assetmodel->eol > 0) ? $assetmodel->eol .' months': 'None',
|
||||||
|
'notes' => e($assetmodel->notes),
|
||||||
|
|
||||||
|
];
|
||||||
|
return $transformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transformAssetModelsDatatable($assetmodels) {
|
||||||
|
return (new DatatablesTransformer)->transformDatatables($assetmodels);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -26,10 +26,10 @@ class AssetsTransformer
|
||||||
'serial' => $asset->serial,
|
'serial' => $asset->serial,
|
||||||
'model' => ($asset->model) ? $asset->model : '',
|
'model' => ($asset->model) ? $asset->model : '',
|
||||||
'model_number' => $asset->model_number,
|
'model_number' => $asset->model_number,
|
||||||
'status_label' => ($asset->assetstatus) ? $asset->assetstatus : '',
|
'status_label' => ($asset->assetstatus) ? $asset->assetstatus : null,
|
||||||
'last_checkout' => $asset->last_checkout,
|
'last_checkout' => $asset->last_checkout,
|
||||||
'category' => ($asset->model->category) ? $asset->model->category : '',
|
'category' => ($asset->model->category) ? $asset->model->category : null,
|
||||||
'manufacturer' => $asset->manufacturer,
|
'manufacturer' => ($asset->model->manufacturer) ? $asset->model->manufacturer : null,
|
||||||
'notes' => $asset->notes,
|
'notes' => $asset->notes,
|
||||||
'expected_checkin' => $asset->expected_checkin,
|
'expected_checkin' => $asset->expected_checkin,
|
||||||
'order_number' => $asset->order_number,
|
'order_number' => $asset->order_number,
|
||||||
|
|
|
@ -21,6 +21,7 @@ class AssetModel extends SnipeModel
|
||||||
use Requestable, Presentable;
|
use Requestable, Presentable;
|
||||||
protected $dates = ['deleted_at'];
|
protected $dates = ['deleted_at'];
|
||||||
protected $table = 'models';
|
protected $table = 'models';
|
||||||
|
protected $hidden = ['user_id','deleted_at'];
|
||||||
|
|
||||||
// Declare the rules for the model validation
|
// Declare the rules for the model validation
|
||||||
protected $rules = array(
|
protected $rules = array(
|
||||||
|
|
|
@ -23,6 +23,7 @@ class Category extends SnipeModel
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
protected $dates = ['deleted_at'];
|
protected $dates = ['deleted_at'];
|
||||||
protected $table = 'categories';
|
protected $table = 'categories';
|
||||||
|
protected $hidden = ['user_id','deleted_at'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Category validation rules
|
* Category validation rules
|
||||||
|
|
|
@ -19,6 +19,10 @@ class Manufacturer extends SnipeModel
|
||||||
'user_id' => 'integer',
|
'user_id' => 'integer',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
protected $hidden = ['user_id','deleted_at'];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the model should inject it's identifier to the unique
|
* Whether the model should inject it's identifier to the unique
|
||||||
* validation rules before attempting validation. If this property
|
* validation rules before attempting validation. If this property
|
||||||
|
|
|
@ -16,6 +16,7 @@ class Statuslabel extends SnipeModel
|
||||||
protected $injectUniqueIdentifier = true;
|
protected $injectUniqueIdentifier = true;
|
||||||
protected $dates = ['deleted_at'];
|
protected $dates = ['deleted_at'];
|
||||||
protected $table = 'status_labels';
|
protected $table = 'status_labels';
|
||||||
|
protected $hidden = ['user_id','deleted_at'];
|
||||||
|
|
||||||
|
|
||||||
protected $rules = array(
|
protected $rules = array(
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
<th data-sortable="true" data-formatter="usersLinkObjFormatter" data-field="assigned_to">{{ trans('admin/hardware/form.checkedout_to') }}</th>
|
<th data-sortable="true" data-formatter="usersLinkObjFormatter" data-field="assigned_to">{{ trans('admin/hardware/form.checkedout_to') }}</th>
|
||||||
<th data-sortable="true" data-formatter="locationsLinkObjFormatter" data-field="location" data-searchable="true">{{ trans('admin/hardware/table.location') }}</th>
|
<th data-sortable="true" data-formatter="locationsLinkObjFormatter" data-field="location" data-searchable="true">{{ trans('admin/hardware/table.location') }}</th>
|
||||||
<th data-sortable="true" data-field="category" data-searchable="true" data-formatter="categoriesLinkObjFormatter">{{ trans('general.category') }}</th>
|
<th data-sortable="true" data-field="category" data-searchable="true" data-formatter="categoriesLinkObjFormatter">{{ trans('general.category') }}</th>
|
||||||
<th data-sortable="true" data-field="manufacturer" data-formatter="manufacturersLinkObjFormatter" data-searchable="true" data-visible="false">{{ trans('general.manufacturer') }}</th>
|
<th data-sortable="true" data-field="manufacturer" data-formatter="manufacturerssLinkObjFormatter" data-searchable="true" data-visible="false">{{ trans('general.manufacturer') }}</th>
|
||||||
<th data-sortable="true" data-field="purchase_cost" data-searchable="true" data-visible="false">{{ trans('admin/hardware/form.cost') }}</th>
|
<th data-sortable="true" data-field="purchase_cost" data-searchable="true" data-visible="false">{{ trans('admin/hardware/form.cost') }}</th>
|
||||||
<th data-sortable="true" data-field="purchase_date" data-searchable="true" data-visible="false">{{ trans('admin/hardware/form.date') }}</th>
|
<th data-sortable="true" data-field="purchase_date" data-searchable="true" data-visible="false">{{ trans('admin/hardware/form.date') }}</th>
|
||||||
<th data-sortable="false" data-field="eol" data-searchable="true">{{ trans('general.eol') }}</th>
|
<th data-sortable="false" data-field="eol" data-searchable="true">{{ trans('general.eol') }}</th>
|
||||||
|
|
|
@ -37,15 +37,16 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th data-sortable="true" data-field="id" data-visible="false">{{ trans('general.id') }}</th>
|
<th data-sortable="true" data-field="id" data-visible="false">{{ trans('general.id') }}</th>
|
||||||
<th data-sortable="true" data-field="image" data-visible="false">{{ trans('admin/hardware/table.image') }}</th>
|
<th data-sortable="true" data-field="name" data-formatter="modelsLinkFormatter">{{ trans('general.name') }}</th>
|
||||||
<th data-sortable="false" data-field="manufacturer">{{ trans('general.manufacturer') }}</th>
|
<th data-sortable="true" data-field="image" data-formatter="modelsImageFormatter" data-visible="false">{{ trans('admin/hardware/table.image') }}</th>
|
||||||
<th data-sortable="true" data-field="name" data-formatter="modelsLinkFormatter">{{ trans('admin/models/table.title') }}</th>
|
<th data-sortable="false" data-field="manufacturer" data-formatter="manufacturersLinkObjFormatter">{{ trans('general.manufacturer') }}</th>
|
||||||
|
|
||||||
<th data-sortable="true" data-field="model_number">{{ trans('admin/models/table.modelnumber') }}</th>
|
<th data-sortable="true" data-field="model_number">{{ trans('admin/models/table.modelnumber') }}</th>
|
||||||
<th data-sortable="false" data-field="assets_count">{{ trans('admin/models/table.numassets') }}</th>
|
<th data-sortable="false" data-field="assets_count">{{ trans('admin/models/table.numassets') }}</th>
|
||||||
<th data-sortable="false" data-field="depreciation">{{ trans('general.depreciation') }}</th>
|
<th data-sortable="false" data-field="depreciation" data-formatter="depreciationsLinkObjFormatter">{{ trans('general.depreciation') }}</th>
|
||||||
<th data-sortable="false" data-field="category">{{ trans('general.category') }}</th>
|
<th data-sortable="false" data-field="category" data-formatter="categoriesLinkObjFormatter">{{ trans('general.category') }}</th>
|
||||||
<th data-sortable="true" data-field="eol">{{ trans('general.eol') }}</th>
|
<th data-sortable="true" data-field="eol">{{ trans('general.eol') }}</th>
|
||||||
<th data-sortable="false" data-field="fieldset">{{ trans('admin/models/general.fieldset') }}</th>
|
<th data-sortable="false" data-field="fieldset" data-formatter="fieldsetsLinkObjFormatter">{{ trans('admin/models/general.fieldset') }}</th>
|
||||||
<th data-sortable="true" data-field="notes">{{ trans('general.notes') }}</th>
|
<th data-sortable="true" data-field="notes">{{ trans('general.notes') }}</th>
|
||||||
<th data-switchable="false" data-formatter="modelsActionsFormatter" data-searchable="false" data-sortable="false" data-field="actions">{{ trans('table.actions') }}</th>
|
<th data-switchable="false" data-formatter="modelsActionsFormatter" data-searchable="false" data-sortable="false" data-field="actions">{{ trans('table.actions') }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -55,8 +55,6 @@ $('.snipe-table').bootstrapTable({
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Handle whether or not the edit button should be disabled
|
// Handle whether or not the edit button should be disabled
|
||||||
$('.snipe-table').on('check.bs.table', function () {
|
$('.snipe-table').on('check.bs.table', function () {
|
||||||
$('#bulkEdit').removeAttr('disabled');
|
$('#bulkEdit').removeAttr('disabled');
|
||||||
|
@ -96,6 +94,7 @@ $('.snipe-table').bootstrapTable({
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make the edit/delete buttons
|
||||||
function genericActionsFormatter(destination) {
|
function genericActionsFormatter(destination) {
|
||||||
return function (value,row) {
|
return function (value,row) {
|
||||||
return '<nobr><a href="{{ url('/') }}/' + destination + '/' + row.id + '/edit" class="btn btn-sm btn-warning"><i class="fa fa-pencil"></i></a> '
|
return '<nobr><a href="{{ url('/') }}/' + destination + '/' + row.id + '/edit" class="btn btn-sm btn-warning"><i class="fa fa-pencil"></i></a> '
|
||||||
|
@ -106,21 +105,44 @@ $('.snipe-table').bootstrapTable({
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use this when we're introspecting into a column object with more than one item
|
function genericCheckinCheckoutFormatter(destination) {
|
||||||
function genericColumnArrayLinkFormatter(destination) {
|
|
||||||
return function (value,row) {
|
return function (value,row) {
|
||||||
if ((value) && (value.name)) {
|
return '<nobr><a href="{{ url('/') }}/' + destination + '/' + row.id + '/edit" class="btn btn-sm btn-warning"><i class="fa fa-pencil"></i></a> '
|
||||||
return '<a href="{{ url('/') }}/' + destination + '/' + value.id + '"> ' + value.name + '</a>';
|
+ '<a data-html="false" class="btn delete-asset btn-danger btn-sm" ' +
|
||||||
}
|
+ 'data-toggle="modal" href="" data-content="Are you sure you wish to delete this?" '
|
||||||
|
+ 'data-title="{{ trans('general.delete') }}?" onClick="return false;">'
|
||||||
|
+ '<i class="fa fa-trash"></i></a></nobr>';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var formatters = ['hardware','locations','users','manufacturers','statuslabels','models','licenses','categories','suppliers','companies'];
|
function genericPublicImageFormatter(destination) {
|
||||||
|
return function (value,row) {
|
||||||
|
if (value) {
|
||||||
|
return '<img src="{{ url('/') }}/uploads/' + destination + '/' + value + '" height="50" width="50">';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var formatters = [
|
||||||
|
'hardware',
|
||||||
|
'locations',
|
||||||
|
'users',
|
||||||
|
'manufacturers',
|
||||||
|
'statuslabels',
|
||||||
|
'models',
|
||||||
|
'licenses',
|
||||||
|
'categories',
|
||||||
|
'suppliers',
|
||||||
|
'companies',
|
||||||
|
'depreciations',
|
||||||
|
'fieldsets'
|
||||||
|
];
|
||||||
|
|
||||||
for (var i in formatters) {
|
for (var i in formatters) {
|
||||||
window[formatters[i] + 'LinkFormatter'] = genericRowLinkFormatter(formatters[i]);
|
window[formatters[i] + 'LinkFormatter'] = genericRowLinkFormatter(formatters[i]);
|
||||||
window[formatters[i] + 'LinkObjFormatter'] = genericColumnObjLinkFormatter(formatters[i]);
|
window[formatters[i] + 'LinkObjFormatter'] = genericColumnObjLinkFormatter(formatters[i]);
|
||||||
window[formatters[i] + 'ActionsFormatter'] = genericActionsFormatter(formatters[i]);
|
window[formatters[i] + 'ActionsFormatter'] = genericActionsFormatter(formatters[i]);
|
||||||
|
window[formatters[i] + 'ImageFormatter'] = genericPublicImageFormatter(formatters[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue