Skip to content

Commit

Permalink
VCST-646: Returns should check permission on Order UI (#15)
Browse files Browse the repository at this point in the history
fix: Added permission check for toolbar button and widget for Odrer UI
  • Loading branch information
OlegoO authored Mar 1, 2024
1 parent ffb1a0a commit ada9a53
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 100 deletions.
150 changes: 75 additions & 75 deletions src/VirtoCommerce.ReturnModule.Web/Scripts/blades/items-list.tpl.html
Original file line number Diff line number Diff line change
@@ -1,80 +1,80 @@
<div class="blade-static">
<div class="form-group">
<p class="form-count">{{'platform.list.count' | translate}}: <span class="count">{{lineItems.length | number:0}}</span></p>
</div>
<div class="form-group">
<p class="form-count">{{'platform.list.count' | translate}}: <span class="count">{{lineItems.length | number:0}}</span></p>
</div>
</div>
<div class="blade-content __xlarge-wide">
<div class="blade-inner">
<div class="inner-block">
<form name="orderForm" novalidate></form>
<div class="table-wrapper">
<table class="table">
<thead>
<tr>
<th class="table-col __product-control" ng-show="!blade.editMode">
<label class="form-control __checkbox">
<input type="checkbox" ng-model="blade.selectedAll" ng-change="checkAll(blade.selectedAll)" />
<span class="check"></span>
</label>
</th>
<th class="table-col">{{ 'return.blades.items-list.labels.item-name' | translate }}</th>
<th class="table-col" width="33%">{{ 'return.blades.items-list.labels.reason' | translate }}</th>
<th class="table-col" width="17%" ng-if="blade.editMode">{{ 'return.blades.items-list.labels.sku' | translate }}</th>
<th class="table-col">{{ 'return.blades.items-list.labels.quantity' | translate }}</th>
<th class="table-col">{{ 'return.blades.items-list.labels.price' | translate }}</th>
</tr>
</thead>
<tbody>
<tr class="table-item" ng-repeat-start="data in lineItems" ng-class="{'__selected': $index === blade.selectedNodeId}" ng-click='blade.selectedNodeId = $index'>
<td class="table-col" ng-show="!blade.editMode">
<label class="form-control __checkbox">
<input type="checkbox" ng-model="data.selected" ng-change="updateSelectionList()">
<span class="check"></span>
</label>
</td>
<td class="table-col">
<div class="table-item">
{{ data.name }}
</div>
</td>
<td class="table-col">
<div class="form-input __inline">
<div class="form-input">
<input ng-model="data.reason" ng-model-options="{ updateOn: 'blur' }">
</div>
</div>
</td>
<td class="table-col" ng-if="blade.editMode">
<div class="table-item">
{{ data.sku }}
</div>
</td>
<td class="table-col">
<div class="form-input __mini __inline">
<div class="form-input __mini __number">
<input smart-float
type="number"
min="{{ blade.editMode ? 1 : 0 }}"
max="{{ data.availableQuantity }}"
ng-change="updateSelectionList()"
oninput="this.value = this.value < this.min ? Math.abs(Math.max(this.min, this.value)) : Math.min(this.max, this.value)"
num-type="integer"
required
ng-model="data.quantity"
ng-model-options="{ updateOn: 'blur' }">
</div>
</div>
</td>
<td class="table-col">
<div class="form-input __mini">
<input min="0", money mask-money="!blade.isVisiblePrices" required ng-model="data.price" ng-model-options="{ updateOn: 'blur' }" ng-change="blade.recalculateFn()">
</div>
</td>
</tr>
<tr ng-repeat-end class="table-item" ng-class="{'__selected': $index === blade.selectedNodeId}" ng-click='blade.selectedNodeId = $index'></tr>
</tbody>
</table>
</div>
</div>
<div class="blade-inner">
<div class="inner-block">
<form name="orderForm" novalidate></form>
<div class="table-wrapper">
<table class="table">
<thead>
<tr>
<th class="table-col __product-control" ng-show="!blade.editMode">
<label class="form-control __checkbox">
<input type="checkbox" ng-model="blade.selectedAll" ng-change="checkAll(blade.selectedAll)" />
<span class="check"></span>
</label>
</th>
<th class="table-col">{{ 'return.blades.items-list.labels.item-name' | translate }}</th>
<th class="table-col" width="33%">{{ 'return.blades.items-list.labels.reason' | translate }}</th>
<th class="table-col" width="17%" ng-if="blade.editMode">{{ 'return.blades.items-list.labels.sku' | translate }}</th>
<th class="table-col">{{ 'return.blades.items-list.labels.quantity' | translate }}</th>
<th class="table-col">{{ 'return.blades.items-list.labels.price' | translate }}</th>
</tr>
</thead>
<tbody>
<tr class="table-item" ng-repeat-start="data in lineItems" ng-class="{'__selected': $index === blade.selectedNodeId}" ng-click='blade.selectedNodeId = $index'>
<td class="table-col" ng-show="!blade.editMode">
<label class="form-control __checkbox">
<input type="checkbox" ng-model="data.selected" ng-change="updateSelectionList()">
<span class="check"></span>
</label>
</td>
<td class="table-col">
<div class="table-item">
{{ data.name }}
</div>
</td>
<td class="table-col">
<div class="form-input __inline">
<div class="form-input">
<input ng-model="data.reason" ng-model-options="{ updateOn: 'blur' }">
</div>
</div>
</td>
<td class="table-col" ng-if="blade.editMode">
<div class="table-item">
{{ data.sku }}
</div>
</td>
<td class="table-col">
<div class="form-input __mini __inline">
<div class="form-input __mini __number">
<input smart-float
type="number"
min="{{ blade.editMode ? 1 : 0 }}"
max="{{ data.availableQuantity }}"
ng-change="updateSelectionList()"
oninput="this.value = this.value < this.min ? Math.abs(Math.max(this.min, this.value)) : Math.min(this.max, this.value)"
num-type="integer"
required
ng-model="data.quantity"
ng-model-options="{ updateOn: 'blur' }">
</div>
</div>
</td>
<td class="table-col">
<div class="form-input __mini">
<input min="0" money mask-money="!blade.isVisiblePrices" required ng-model="data.price" ng-model-options="{ updateOn: 'blur' }" ng-change="blade.recalculateFn()">
</div>
</td>
</tr>
<tr ng-repeat-end class="table-item" ng-class="{'__selected': $index === blade.selectedNodeId}" ng-click='blade.selectedNodeId = $index'></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,13 @@ angular.module('virtoCommerce.returnModule')
template: 'Modules/$(VirtoCommerce.Return)/Scripts/blades/order-list.tpl.html',
isClosingDisabled: false,
hideDelete: true,
isExpanded: true
isExpanded: true,
};

bladeNavigationService.showBlade(orderListBlade, currentBlade);
},
canExecuteMethod: () => true
canExecuteMethod: () => true,
permission: 'return:create'
}
];

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<div class="blade-static">
<div class="form-group">
<div style="display: flex;align-items: center;">
<div class="form-input" style="flex-grow: 1;">
<div class="form-input __search">
<input placeholder="{{ 'platform.placeholders.search-keyword' | translate }}" ng-model="blade.searchKeyword" ng-keyup="$event.which === 13 && blade.refresh()" style="width: 80%;" />
<button class="btn __other" type="button" style="position: relative;right: 45px;">
<i class="btn-ico fa fa-remove" title="Clear" ng-click="clearKeyword()"></i>
</button>
</div>
<p class="form-count">{{'platform.list.count' | translate}}: <span class="count">{{pageSettings.totalItems | number:0}}</span></p>
</div>
<div class="form-group">
<div style="display: flex;align-items: center;">
<div class="form-input" style="flex-grow: 1;">
<div class="form-input __search">
<input placeholder="{{ 'platform.placeholders.search-keyword' | translate }}" ng-model="blade.searchKeyword" ng-keyup="$event.which === 13 && blade.refresh()" style="width: 80%;" />
<button class="btn __other" type="button" style="position: relative;right: 45px;">
<i class="btn-ico fa fa-remove" title="Clear" ng-click="clearKeyword()"></i>
</button>
</div>
<p class="form-count">{{'platform.list.count' | translate}}: <span class="count">{{pageSettings.totalItems | number:0}}</span></p>
</div>
</div>
</div>
</div>
<div class="blade-static __bottom" ng-if="pageSettings.itemsPerPageCount < pageSettings.totalItems" ng-include="'pagerTemplate.html'"></div>
<div class="blade-content __xxlarge-wide">
<div class="blade-inner">
<div class="inner-block" ng-init="setGridOptions('returnlist-grid', {
<div class="blade-inner">
<div class="inner-block" ng-init="setGridOptions('returnlist-grid', {
useExternalSorting: true,
data: 'listEntries',
rowTemplate: 'return-list.row.html',
Expand All @@ -31,14 +31,14 @@
{ name: 'createdBy', displayName: 'return.blades.return-list.labels.created-by'},
{ name: 'itemsCount', displayName: 'return.blades.return-list.labels.items-count', enableSorting: false }
]})">
<div class="note" ng-if="!listEntries.length">{{ 'platform.list.no-data' | translate }}</div>
<div class="table-wrapper" ng-if="listEntries.length">
<div ui-grid="gridOptions" ui-grid-auto-resize ui-grid-save-state ui-grid-resize-columns ui-grid-move-columns ui-grid-pinning ui-grid-height></div>
</div>
</div>
<div class="note" ng-if="!listEntries.length">{{ 'platform.list.no-data' | translate }}</div>
<div class="table-wrapper" ng-if="listEntries.length">
<div ui-grid="gridOptions" ui-grid-auto-resize ui-grid-save-state ui-grid-resize-columns ui-grid-move-columns ui-grid-pinning ui-grid-height></div>
</div>
</div>
</div>
</div>

<script type="text/ng-template" id="return-list.row.html">
<div ng-click="grid.appScope.selectNode(row.entity)" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid" ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'" class="ui-grid-cell" ng-class="{'ui-grid-row-header-cell': col.isRowHeader, '__hovered': grid.appScope.contextMenuEntity === row.entity, '__selected': row.entity.id===grid.appScope.selectedNodeId }" role="{{col.isRowHeader ? 'rowheader' : 'gridcell' }}" ui-grid-cell context-menu="grid.appScope.contextMenuEntity = row.entity" data-target="cml_menu"></div>
<div ng-click="grid.appScope.selectNode(row.entity)" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid" ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'" class="ui-grid-cell" ng-class="{'ui-grid-row-header-cell': col.isRowHeader, '__hovered': grid.appScope.contextMenuEntity === row.entity, '__selected': row.entity.id===grid.appScope.selectedNodeId }" role="{{col.isRowHeader ? 'rowheader' : 'gridcell' }}" ui-grid-cell context-menu="grid.appScope.contextMenuEntity = row.entity" data-target="cml_menu"></div>
</script>
10 changes: 6 additions & 4 deletions src/VirtoCommerce.ReturnModule.Web/Scripts/return.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ angular.module(moduleName, [])
});
}]
)
.run(['platformWebApp.mainMenuService', 'platformWebApp.widgetService', '$state', 'platformWebApp.toolbarService', 'platformWebApp.bladeNavigationService',
(mainMenuService, widgetService, $state, toolBarService, bladeNavigationService) => {
.run(['platformWebApp.mainMenuService', 'platformWebApp.widgetService', '$state', 'platformWebApp.toolbarService',
'platformWebApp.bladeNavigationService', 'platformWebApp.authService',
(mainMenuService, widgetService, $state, toolBarService, bladeNavigationService, authService) => {
//Register module in main menu
var menuItem = {
path: 'browse/Return',
Expand All @@ -46,7 +47,8 @@ angular.module(moduleName, [])

var relatedReturnsWidget = {
controller: 'virtoCommerce.returnModule.relatedReturnsWidgetController',
template: 'Modules/$(VirtoCommerce.Return)/Scripts/widgets/order-related-returns-widget.tpl.html'
template: 'Modules/$(VirtoCommerce.Return)/Scripts/widgets/order-related-returns-widget.tpl.html',
isVisible: function (blade) { return authService.checkPermission('return:read'); }
};
widgetService.registerWidget(relatedReturnsWidget, 'customerOrderDetailWidgets');

Expand All @@ -72,7 +74,7 @@ angular.module(moduleName, [])
bladeNavigationService.showBlade(itemsListBlade, blade);
},
canExecuteMethod: (blade) => true,
hide: (blade) => blade.id !== "orderDetail"
hide: (blade) => blade.id !== "orderDetail" || !authService.checkPermission('return:create')
}

toolBarService.tryRegister(makeReturnCommand, 'virtoCommerce.orderModule.operationDetailController');
Expand Down

0 comments on commit ada9a53

Please sign in to comment.