Merge pull request #16495 from snipe/add_highlight_for_low_qty
Added highlight to items when the remaining is less than the min_amt
This commit is contained in:
commit
bfc122469c
22 changed files with 1895 additions and 1759 deletions
|
@ -37,8 +37,10 @@ class AccessoriesTransformer
|
|||
'purchase_date' => ($accessory->purchase_date) ? Helper::getFormattedDateObject($accessory->purchase_date, 'date') : null,
|
||||
'purchase_cost' => Helper::formatCurrencyOutput($accessory->purchase_cost),
|
||||
'order_number' => ($accessory->order_number) ? e($accessory->order_number) : null,
|
||||
'min_qty' => ($accessory->min_amt) ? (int) $accessory->min_amt : null,
|
||||
'remaining_qty' => (int) ($accessory->qty - $accessory->checkouts_count),
|
||||
'min_qty' => ($accessory->min_amt) ? (int) $accessory->min_amt : null, // Legacy - should phase out - replaced by below, for the bootstrap table formatter
|
||||
'min_amt' => ($accessory->min_amt) ? (int) $accessory->min_amt : null,
|
||||
'remaining_qty' => (int) ($accessory->qty - $accessory->checkouts_count), // Legacy - should phase out - replaced by below, for the bootstrap table formatter
|
||||
'remaining' => (int) ($accessory->qty - $accessory->checkouts_count),
|
||||
'checkouts_count' => $accessory->checkouts_count,
|
||||
'created_by' => ($accessory->adminuser) ? [
|
||||
'id' => (int) $accessory->adminuser->id,
|
||||
|
|
|
@ -46,8 +46,9 @@ class AssetModelsTransformer
|
|||
'name'=> e($assetmodel->manufacturer->name),
|
||||
] : null,
|
||||
'image' => ($assetmodel->image != '') ? Storage::disk('public')->url('models/'.e($assetmodel->image)) : null,
|
||||
'model_number' => e($assetmodel->model_number),
|
||||
'model_number' => ($assetmodel->model_number ? e($assetmodel->model_number): null),
|
||||
'min_amt' => ($assetmodel->min_amt) ? (int) $assetmodel->min_amt : null,
|
||||
'remaining' => (int) ($assetmodel->assets_count - $assetmodel->min_amt),
|
||||
'depreciation' => ($assetmodel->depreciation) ? [
|
||||
'id' => (int) $assetmodel->depreciation->id,
|
||||
'name'=> e($assetmodel->depreciation->name),
|
||||
|
|
|
@ -38,6 +38,7 @@ class LicensesTransformer
|
|||
'expiration_date' => Helper::getFormattedDateObject($license->expiration_date, 'date'),
|
||||
'seats' => (int) $license->seats,
|
||||
'free_seats_count' => (int) $license->free_seats_count,
|
||||
'remaining' => (int) $license->free_seats_count,
|
||||
'min_amt' => ($license->min_amt) ? (int) ($license->min_amt) : null,
|
||||
'license_name' => ($license->license_name) ? e($license->license_name) : null,
|
||||
'license_email' => ($license->license_email) ? e($license->license_email) : null,
|
||||
|
|
|
@ -78,28 +78,36 @@ class AccessoryPresenter extends Presenter
|
|||
'sortable' => true,
|
||||
'title' => trans('general.location'),
|
||||
'formatter' => 'locationsLinkObjFormatter',
|
||||
], [
|
||||
'field' => 'min_amt',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('general.min_amt'),
|
||||
'formatter' => 'minAmtFormatter',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'qty',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/accessories/general.total'),
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'remaining_qty',
|
||||
'field' => 'remaining',
|
||||
'searchable' => false,
|
||||
'sortable' => false,
|
||||
'visible' => false,
|
||||
'title' => trans('admin/accessories/general.remaining'),
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
],[
|
||||
'field' => 'checkouts_count',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'visible' => true,
|
||||
'title' => trans('general.checked_out'),
|
||||
], [
|
||||
'field' => 'min_qty',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('general.min_amt'),
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'purchase_date',
|
||||
'searchable' => true,
|
||||
|
@ -113,7 +121,7 @@ class AccessoryPresenter extends Presenter
|
|||
'sortable' => true,
|
||||
'title' => trans('general.purchase_cost'),
|
||||
'footerFormatter' => 'sumFormatterQuantity',
|
||||
'class' => 'text-right',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'order_number',
|
||||
'searchable' => true,
|
||||
|
|
|
@ -74,7 +74,10 @@ class AssetModelPresenter extends Presenter
|
|||
'switchable' => true,
|
||||
'title' => trans('mail.min_QTY'),
|
||||
'visible' => true,
|
||||
'formatter' => 'minAmtFormatter',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
],
|
||||
|
||||
[
|
||||
'field' => 'assets_count',
|
||||
'searchable' => false,
|
||||
|
@ -82,6 +85,19 @@ class AssetModelPresenter extends Presenter
|
|||
'switchable' => true,
|
||||
'title' => trans('admin/models/table.numassets'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
],
|
||||
|
||||
[
|
||||
'field' => 'remaining',
|
||||
'searchable' => false,
|
||||
'sortable' => false,
|
||||
'switchable' => true,
|
||||
'title' => trans('general.remaining'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
],
|
||||
[
|
||||
'field' => 'depreciation',
|
||||
|
|
|
@ -79,24 +79,30 @@ class ComponentPresenter extends Presenter
|
|||
'title' => trans('general.manufacturer'),
|
||||
'visible' => false,
|
||||
'formatter' => 'manufacturersLinkObjFormatter',
|
||||
], [
|
||||
'field' => 'min_amt',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('general.min_amt'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'formatter' => 'minAmtFormatter',
|
||||
], [
|
||||
'field' => 'qty',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/components/general.total'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
], [
|
||||
'field' => 'remaining',
|
||||
'searchable' => false,
|
||||
'sortable' => false,
|
||||
'title' => trans('admin/components/general.remaining'),
|
||||
'visible' => true,
|
||||
], [
|
||||
'field' => 'min_amt',
|
||||
'searchable' => false,
|
||||
'sortable' => false,
|
||||
'title' => trans('general.min_amt'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
], [
|
||||
'field' => 'location',
|
||||
'searchable' => true,
|
||||
|
|
|
@ -72,25 +72,31 @@ class ConsumablePresenter extends Presenter
|
|||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/consumables/general.item_no'),
|
||||
], [
|
||||
'field' => 'min_amt',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('general.min_amt'),
|
||||
'visible' => true,
|
||||
'formatter' => 'minAmtFormatter',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'qty',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/components/general.total'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
], [
|
||||
'field' => 'remaining',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/components/general.remaining'),
|
||||
'visible' => true,
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
], [
|
||||
'field' => 'min_amt',
|
||||
'searchable' => false,
|
||||
'sortable' => false,
|
||||
'title' => trans('general.min_amt'),
|
||||
'visible' => true,
|
||||
], [
|
||||
'field' => 'location',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
|
@ -123,7 +129,7 @@ class ConsumablePresenter extends Presenter
|
|||
'title' => trans('general.purchase_cost'),
|
||||
'visible' => true,
|
||||
'footerFormatter' => 'sumFormatterQuantity',
|
||||
'class' => 'text-right',
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'notes',
|
||||
'searchable' => true,
|
||||
|
|
|
@ -80,24 +80,28 @@ class LicensePresenter extends Presenter
|
|||
'sortable' => true,
|
||||
'title' => trans('general.manufacturer'),
|
||||
'formatter' => 'manufacturersLinkObjFormatter',
|
||||
], [
|
||||
'field' => 'seats',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/accessories/general.total'),
|
||||
], [
|
||||
'field' => 'free_seats_count',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/accessories/general.remaining'),
|
||||
],
|
||||
[
|
||||
], [
|
||||
'field' => 'min_amt',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('mail.min_QTY'),
|
||||
'formatter' => 'minAmtFormatter',
|
||||
],[
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
], [
|
||||
'field' => 'seats',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/accessories/general.total'),
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
], [
|
||||
'field' => 'free_seats_count',
|
||||
'searchable' => false,
|
||||
'sortable' => true,
|
||||
'title' => trans('admin/accessories/general.remaining'),
|
||||
'class' => 'text-right text-padding-number-cell',
|
||||
'footerFormatter' => 'qtySumFormatter',
|
||||
], [
|
||||
'field' => 'purchase_date',
|
||||
'searchable' => true,
|
||||
'sortable' => true,
|
||||
|
|
|
@ -1418,4 +1418,12 @@ input[type="radio"]:checked::before {
|
|||
.bootstrap-table .fixed-table-container .table tbody tr .card-view {
|
||||
display: table-row !important;
|
||||
}
|
||||
td.text-right.text-padding-number-cell {
|
||||
padding-right: 30px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
th.text-right.text-padding-number-footer-cell {
|
||||
padding-right: 20px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
|
|
@ -1049,4 +1049,12 @@ input[type="radio"]:checked::before {
|
|||
.bootstrap-table .fixed-table-container .table tbody tr .card-view {
|
||||
display: table-row !important;
|
||||
}
|
||||
td.text-right.text-padding-number-cell {
|
||||
padding-right: 30px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
th.text-right.text-padding-number-footer-cell {
|
||||
padding-right: 20px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
|
16
public/css/dist/all.css
vendored
16
public/css/dist/all.css
vendored
|
@ -22753,6 +22753,14 @@ input[type="radio"]:checked::before {
|
|||
.bootstrap-table .fixed-table-container .table tbody tr .card-view {
|
||||
display: table-row !important;
|
||||
}
|
||||
td.text-right.text-padding-number-cell {
|
||||
padding-right: 30px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
th.text-right.text-padding-number-footer-cell {
|
||||
padding-right: 20px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
.select2-container {
|
||||
|
@ -24288,4 +24296,12 @@ input[type="radio"]:checked::before {
|
|||
.bootstrap-table .fixed-table-container .table tbody tr .card-view {
|
||||
display: table-row !important;
|
||||
}
|
||||
td.text-right.text-padding-number-cell {
|
||||
padding-right: 30px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
th.text-right.text-padding-number-footer-cell {
|
||||
padding-right: 20px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
1712
public/js/dist/all.js
vendored
1712
public/js/dist/all.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"/js/build/app.js": "/js/build/app.js?id=65d7af7b9fa7fd0e05737526a0d1d282",
|
||||
"/js/build/app.js": "/js/build/app.js?id=607de09b70b83ef82a427e4b36341682",
|
||||
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=06c13e817cc022028b3f4a33c0ca303a",
|
||||
"/css/dist/skins/_all-skins.css": "/css/dist/skins/_all-skins.css?id=79aa889a1a6691013be6c342ca7391cd",
|
||||
"/css/build/overrides.css": "/css/build/overrides.css?id=6528155ed5ed8fddf4047de7f0d0298d",
|
||||
"/css/build/app.css": "/css/build/app.css?id=3422f2ca2056b952c3c361adf00c10b8",
|
||||
"/css/build/overrides.css": "/css/build/overrides.css?id=f188c07f91348503bc38f4b6683993aa",
|
||||
"/css/build/app.css": "/css/build/app.css?id=7f6827b6d2149b8eab327d00e2dd66f0",
|
||||
"/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=4ea0068716c1bb2434d87a16d51b98c9",
|
||||
"/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=7b315b9612b8fde8f9c5b0ddb6bba690",
|
||||
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=ea22079836a432d7f46a5d390c445e13",
|
||||
|
@ -19,7 +19,7 @@
|
|||
"/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=a82b065847bf3cd5d713c04ee8dc86c6",
|
||||
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=6ea836d8126de101081c49abbdb89417",
|
||||
"/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=76482123f6c70e866d6b971ba91de7bb",
|
||||
"/css/dist/all.css": "/css/dist/all.css?id=18ebb9c284b49dcf6c8e4fdb923ad923",
|
||||
"/css/dist/all.css": "/css/dist/all.css?id=fe65a4b6cd3acaf2737dec72b98b650b",
|
||||
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced1cf5f13147f7",
|
||||
"/css/dist/signature-pad.min.css": "/css/dist/signature-pad.min.css?id=6a89d3cd901305e66ced1cf5f13147f7",
|
||||
"/js/select2/i18n/af.js": "/js/select2/i18n/af.js?id=4f6fcd73488ce79fae1b7a90aceaecde",
|
||||
|
@ -111,5 +111,5 @@
|
|||
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=ceded08e0cc745a83c13647035b03406",
|
||||
"/js/build/vendor.js": "/js/build/vendor.js?id=89dffa552c6e3abe3a2aac6c9c7b466b",
|
||||
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=61285c8ac5ea7b46002ea8c451c94e60",
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=21e041dec60e0785db6d64961b13a9b0"
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=cae553daff19b328b3ba51a62f891442"
|
||||
}
|
||||
|
|
|
@ -1163,4 +1163,15 @@ input[type="radio"]:checked::before {
|
|||
/** this is needed to override ekko-lightboxes card view styles **/
|
||||
.bootstrap-table .fixed-table-container .table tbody tr .card-view {
|
||||
display: table-row !important;
|
||||
}
|
||||
}
|
||||
|
||||
td.text-right.text-padding-number-cell {
|
||||
padding-right: 30px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
th.text-right.text-padding-number-footer-cell {
|
||||
padding-right: 20px !important;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
data-show-refresh="true"
|
||||
data-show-footer="true"
|
||||
data-sort-order="asc"
|
||||
data-footer-style="footerStyle"
|
||||
id="accessoriesTable"
|
||||
class="table table-striped snipe-table"
|
||||
data-url="{{route('api.accessories.index') }}"
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
data-id-table="componentsTable"
|
||||
data-search="true"
|
||||
data-side-pagination="server"
|
||||
data-footer-style="footerStyle"
|
||||
data-show-columns="true"
|
||||
data-show-fullscreen="true"
|
||||
data-show-export="true"
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
data-id-table="consumablesTable"
|
||||
data-search="true"
|
||||
data-side-pagination="server"
|
||||
data-footer-style="footerStyle"
|
||||
data-show-columns="true"
|
||||
data-show-export="true"
|
||||
data-show-fullscreen="true"
|
||||
|
|
|
@ -238,7 +238,7 @@
|
|||
<tr>
|
||||
<th data-field="icon" data-visible="true" style="width: 40px;" class="hidden-xs" data-formatter="iconFormatter"><span class="sr-only">{{ trans('admin/hardware/table.icon') }}</span></th>
|
||||
<th class="col-sm-3" data-visible="true" data-field="created_at" data-formatter="dateDisplayFormatter">{{ trans('general.date') }}</th>
|
||||
<th class="col-sm-2" data-visible="true" data-field="admin" data-formatter="usersLinkObjFormatter">{{ trans('general.admin') }}</th>
|
||||
<th class="col-sm-2" data-visible="true" data-field="admin" data-formatter="usersLinkObjFormatter">{{ trans('general.created_by') }}</th>
|
||||
<th class="col-sm-2" data-visible="true" data-field="action_type">{{ trans('general.action') }}</th>
|
||||
<th class="col-sm-3" data-visible="true" data-field="item" data-formatter="polymorphicItemFormatter">{{ trans('general.item') }}</th>
|
||||
<th class="col-sm-2" data-visible="true" data-field="target" data-formatter="polymorphicItemFormatter">{{ trans('general.target') }}</th>
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
data-pagination="true"
|
||||
data-search="true"
|
||||
data-side-pagination="server"
|
||||
data-footer-style="footerStyle"
|
||||
data-show-columns="true"
|
||||
data-show-fullscreen="true"
|
||||
data-show-export="true"
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
data-search="true"
|
||||
data-show-footer="true"
|
||||
data-side-pagination="server"
|
||||
data-footer-style="footerStyle"
|
||||
data-show-columns="true"
|
||||
data-toolbar="#modelsBulkEditToolbar"
|
||||
data-bulk-button-id="#bulkModelsEditButton"
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
<script nonce="{{ csrf_token() }}">
|
||||
$(function () {
|
||||
|
||||
|
||||
var blockedFields = "searchable,sortable,switchable,title,visible,formatter,class".split(",");
|
||||
|
||||
var keyBlocked = function(key) {
|
||||
|
@ -241,7 +242,35 @@
|
|||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// This specifies the footer columns that should have special styles associated
|
||||
// (usually numbers)
|
||||
window.footerStyle = column => ({
|
||||
remaining: {
|
||||
classes: 'text-padding-number-footer-cell'
|
||||
},
|
||||
qty: {
|
||||
classes: 'text-padding-number-footer-cell',
|
||||
},
|
||||
purchase_cost: {
|
||||
classes: 'text-padding-number-footer-cell'
|
||||
},
|
||||
checkouts_count: {
|
||||
classes: 'text-padding-number-footer-cell'
|
||||
},
|
||||
assets_count: {
|
||||
classes: 'text-padding-number-footer-cell'
|
||||
},
|
||||
seats: {
|
||||
classes: 'text-padding-number-footer-cell'
|
||||
},
|
||||
free_seats_count: {
|
||||
classes: 'text-padding-number-footer-cell'
|
||||
},
|
||||
}[column.field]);
|
||||
|
||||
|
||||
|
||||
|
||||
// This only works for model index pages because it uses the row's model ID
|
||||
function genericRowLinkFormatter(destination) {
|
||||
|
@ -664,14 +693,16 @@
|
|||
function minAmtFormatter(row, value) {
|
||||
|
||||
if ((row) && (row!=undefined)) {
|
||||
if (value.free_seats_count <= value.min_amt) {
|
||||
return '<span class="text-danger text-bold" data-tooltip="true" title="{{ trans('admin/licenses/general.below_threshold_short') }}">' + value.min_amt + '</span>';
|
||||
|
||||
if (value.remaining <= value.min_amt) {
|
||||
return '<span class="text-danger text-bold" data-tooltip="true" title="{{ trans('admin/licenses/general.below_threshold_short') }}"><x-icon type="warning" class="text-yellow" /> ' + value.min_amt + '</span>';
|
||||
}
|
||||
return value.min_amt
|
||||
}
|
||||
|
||||
return '--';
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Create a linked phone number in the table list
|
||||
function phoneFormatter(value) {
|
||||
|
@ -906,6 +937,19 @@
|
|||
return parseFloat(decimalfixed);
|
||||
}
|
||||
|
||||
|
||||
function qtySumFormatter(data) {
|
||||
var currentField = this.field;
|
||||
var total = 0;
|
||||
var fieldname = this.field;
|
||||
|
||||
$.each(data, function() {
|
||||
var r = this;
|
||||
total += this[currentField];
|
||||
});
|
||||
return total;
|
||||
}
|
||||
|
||||
function sumFormatter(data) {
|
||||
if (Array.isArray(data)) {
|
||||
var field = this.field;
|
||||
|
|
Loading…
Add table
Reference in a new issue