Commit c692699f7bda203731055c6777e1d8347d9b099c

Authored by Igor Kulikov
Committed by mp-loki
1 parent 58cbb116

TB-47: Show assigned customer title in device card.

@@ -42,6 +42,20 @@ public class CustomerController extends BaseController { @@ -42,6 +42,20 @@ public class CustomerController extends BaseController {
42 } 42 }
43 } 43 }
44 44
  45 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
  46 + @RequestMapping(value = "/customer/{customerId}/title", method = RequestMethod.GET, produces = "application/text")
  47 + @ResponseBody
  48 + public String getCustomerTitleById(@PathVariable("customerId") String strCustomerId) throws ThingsboardException {
  49 + checkParameter("customerId", strCustomerId);
  50 + try {
  51 + CustomerId customerId = new CustomerId(toUUID(strCustomerId));
  52 + Customer customer = checkCustomerId(customerId);
  53 + return customer.getTitle();
  54 + } catch (Exception e) {
  55 + throw handleException(e);
  56 + }
  57 + }
  58 +
45 @PreAuthorize("hasAuthority('TENANT_ADMIN')") 59 @PreAuthorize("hasAuthority('TENANT_ADMIN')")
46 @RequestMapping(value = "/customer", method = RequestMethod.POST) 60 @RequestMapping(value = "/customer", method = RequestMethod.POST)
47 @ResponseBody 61 @ResponseBody
@@ -23,6 +23,7 @@ function CustomerService($http, $q) { @@ -23,6 +23,7 @@ function CustomerService($http, $q) {
23 var service = { 23 var service = {
24 getCustomers: getCustomers, 24 getCustomers: getCustomers,
25 getCustomer: getCustomer, 25 getCustomer: getCustomer,
  26 + getCustomerTitle: getCustomerTitle,
26 deleteCustomer: deleteCustomer, 27 deleteCustomer: deleteCustomer,
27 saveCustomer: saveCustomer 28 saveCustomer: saveCustomer
28 } 29 }
@@ -60,6 +61,17 @@ function CustomerService($http, $q) { @@ -60,6 +61,17 @@ function CustomerService($http, $q) {
60 return deferred.promise; 61 return deferred.promise;
61 } 62 }
62 63
  64 + function getCustomerTitle(customerId) {
  65 + var deferred = $q.defer();
  66 + var url = '/api/customer/' + customerId + '/title';
  67 + $http.get(url, null).then(function success(response) {
  68 + deferred.resolve(response.data);
  69 + }, function fail(response) {
  70 + deferred.reject(response.data);
  71 + });
  72 + return deferred.promise;
  73 + }
  74 +
63 function saveCustomer(customer) { 75 function saveCustomer(customer) {
64 var deferred = $q.defer(); 76 var deferred = $q.defer();
65 var url = '/api/customer'; 77 var url = '/api/customer';
@@ -26,6 +26,7 @@ import gridTemplate from './grid.tpl.html'; @@ -26,6 +26,7 @@ import gridTemplate from './grid.tpl.html';
26 26
27 export default angular.module('thingsboard.directives.grid', [thingsboardScopeElement, thingsboardDetailsSidenav]) 27 export default angular.module('thingsboard.directives.grid', [thingsboardScopeElement, thingsboardDetailsSidenav])
28 .directive('tbGrid', Grid) 28 .directive('tbGrid', Grid)
  29 + .controller('ItemCardController', ItemCardController)
29 .directive('tbGridCardContent', GridCardContent) 30 .directive('tbGridCardContent', GridCardContent)
30 .filter('range', RangeFilter) 31 .filter('range', RangeFilter)
31 .name; 32 .name;
@@ -44,14 +45,52 @@ function RangeFilter() { @@ -44,14 +45,52 @@ function RangeFilter() {
44 } 45 }
45 46
46 /*@ngInject*/ 47 /*@ngInject*/
47 -function GridCardContent($compile) { 48 +function ItemCardController() {
  49 +
  50 + var vm = this; //eslint-disable-line
  51 +
  52 +}
  53 +
  54 +/*@ngInject*/
  55 +function GridCardContent($compile, $controller) {
48 var linker = function(scope, element) { 56 var linker = function(scope, element) {
  57 +
  58 + var controllerInstance = null;
  59 +
49 scope.$watch('itemTemplate', 60 scope.$watch('itemTemplate',
50 - function(value) {  
51 - element.html(value);  
52 - $compile(element.contents())(scope); 61 + function() {
  62 + initContent();
  63 + }
  64 + );
  65 + scope.$watch('itemController',
  66 + function() {
  67 + initContent();
53 } 68 }
54 ); 69 );
  70 + scope.$watch('parentCtl',
  71 + function() {
  72 + controllerInstance.parentCtl = scope.parentCtl;
  73 + }
  74 + );
  75 + scope.$watch('item',
  76 + function() {
  77 + controllerInstance.item = scope.item;
  78 + }
  79 + );
  80 +
  81 + function initContent() {
  82 + if (scope.itemTemplate && scope.itemController && !controllerInstance) {
  83 + element.html(scope.itemTemplate);
  84 + var locals = {};
  85 + angular.extend(locals, {$scope: scope, $element: element});
  86 + var controller = $controller(scope.itemController, locals, true, 'vm');
  87 + controller.instance = controller();
  88 + controllerInstance = controller.instance;
  89 + controllerInstance.item = scope.item;
  90 + controllerInstance.parentCtl = scope.parentCtl;
  91 + $compile(element.contents())(scope);
  92 + }
  93 + }
55 }; 94 };
56 95
57 return { 96 return {
@@ -61,6 +100,7 @@ function GridCardContent($compile) { @@ -61,6 +100,7 @@ function GridCardContent($compile) {
61 parentCtl: "=parentCtl", 100 parentCtl: "=parentCtl",
62 gridCtl: "=gridCtl", 101 gridCtl: "=gridCtl",
63 itemTemplate: "=itemTemplate", 102 itemTemplate: "=itemTemplate",
  103 + itemController: "=itemController",
64 item: "=item" 104 item: "=item"
65 } 105 }
66 }; 106 };
@@ -291,6 +331,11 @@ function GridController($scope, $state, $mdDialog, $document, $q, $timeout, $tra @@ -291,6 +331,11 @@ function GridController($scope, $state, $mdDialog, $document, $q, $timeout, $tra
291 } else if (vm.config.itemCardTemplateUrl) { 331 } else if (vm.config.itemCardTemplateUrl) {
292 vm.itemCardTemplate = $templateCache.get(vm.config.itemCardTemplateUrl); 332 vm.itemCardTemplate = $templateCache.get(vm.config.itemCardTemplateUrl);
293 } 333 }
  334 + if (vm.config.itemCardController) {
  335 + vm.itemCardController = vm.config.itemCardController;
  336 + } else {
  337 + vm.itemCardController = 'ItemCardController';
  338 + }
294 339
295 vm.parentCtl = vm.config.parentCtl || vm; 340 vm.parentCtl = vm.config.parentCtl || vm;
296 341
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 </md-card-title> 43 </md-card-title>
44 </section> 44 </section>
45 <md-card-content flex> 45 <md-card-content flex>
46 - <tb-grid-card-content grid-ctl="vm" parent-ctl="vm.parentCtl" item-template="vm.itemCardTemplate" item="rowItem[n]"></tb-grid-card-content> 46 + <tb-grid-card-content grid-ctl="vm" parent-ctl="vm.parentCtl" item-controller="vm.itemCardController" item-template="vm.itemCardTemplate" item="rowItem[n]"></tb-grid-card-content>
47 </md-card-content> 47 </md-card-content>
48 <md-card-actions layout="row" layout-align="end end"> 48 <md-card-actions layout="row" layout-align="end end">
49 <md-button ng-if="action.isEnabled(rowItem[n])" ng-disabled="loading" class="md-icon-button md-primary" ng-repeat="action in vm.actionsList" 49 <md-button ng-if="action.isEnabled(rowItem[n])" ng-disabled="loading" class="md-icon-button md-primary" ng-repeat="action in vm.actionsList"
@@ -15,6 +15,4 @@ @@ -15,6 +15,4 @@
15 limitations under the License. 15 limitations under the License.
16 16
17 --> 17 -->
18 -<div class="tb-small" ng-if="item &&  
19 - item.customerId.id != parentCtl.types.id.nullUid &&  
20 - parentCtl.devicesScope === 'tenant'" translate>device.assignedToCustomer</div> 18 +<div class="tb-small" ng-show="vm.isAssignedToCustomer()">{{'device.assignedToCustomer' | translate}} '{{vm.customerTitle}}'</div>
@@ -24,7 +24,36 @@ import deviceCredentialsTemplate from './device-credentials.tpl.html'; @@ -24,7 +24,36 @@ import deviceCredentialsTemplate from './device-credentials.tpl.html';
24 /* eslint-enable import/no-unresolved, import/default */ 24 /* eslint-enable import/no-unresolved, import/default */
25 25
26 /*@ngInject*/ 26 /*@ngInject*/
27 -export default function DeviceController(userService, deviceService, customerService, $scope, $controller, $state, $stateParams, $document, $mdDialog, $q, $translate, types) { 27 +export function DeviceCardController($scope, types, customerService) {
  28 +
  29 + var vm = this;
  30 +
  31 + vm.types = types;
  32 +
  33 + vm.isAssignedToCustomer = function() {
  34 + if (vm.item && vm.item.customerId && vm.parentCtl.devicesScope === 'tenant',
  35 + vm.item.customerId.id != vm.types.id.nullUid) {
  36 + return true;
  37 + }
  38 + return false;
  39 + }
  40 +
  41 + $scope.$watch('vm.item',
  42 + function() {
  43 + if (vm.item && vm.item.customerId && vm.item.customerId.id != vm.types.id.nullUid) {
  44 + customerService.getCustomerTitle(vm.item.customerId.id).then(
  45 + function success(title) {
  46 + vm.customerTitle = title;
  47 + }
  48 + );
  49 + }
  50 + }
  51 + );
  52 +}
  53 +
  54 +
  55 +/*@ngInject*/
  56 +export function DeviceController(userService, deviceService, customerService, $scope, $controller, $state, $stateParams, $document, $mdDialog, $q, $translate, types) {
28 57
29 var customerId = $stateParams.customerId; 58 var customerId = $stateParams.customerId;
30 59
@@ -47,6 +76,7 @@ export default function DeviceController(userService, deviceService, customerSer @@ -47,6 +76,7 @@ export default function DeviceController(userService, deviceService, customerSer
47 76
48 getItemTitleFunc: getDeviceTitle, 77 getItemTitleFunc: getDeviceTitle,
49 78
  79 + itemCardController: 'DeviceCardController',
50 itemCardTemplateUrl: deviceCard, 80 itemCardTemplateUrl: deviceCard,
51 parentCtl: vm, 81 parentCtl: vm,
52 82
@@ -21,7 +21,7 @@ import thingsboardApiDevice from '../api/device.service'; @@ -21,7 +21,7 @@ import thingsboardApiDevice from '../api/device.service';
21 import thingsboardApiCustomer from '../api/customer.service'; 21 import thingsboardApiCustomer from '../api/customer.service';
22 22
23 import DeviceRoutes from './device.routes'; 23 import DeviceRoutes from './device.routes';
24 -import DeviceController from './device.controller'; 24 +import {DeviceController, DeviceCardController} from './device.controller';
25 import AssignDeviceToCustomerController from './assign-to-customer.controller'; 25 import AssignDeviceToCustomerController from './assign-to-customer.controller';
26 import AddDevicesToCustomerController from './add-devices-to-customer.controller'; 26 import AddDevicesToCustomerController from './add-devices-to-customer.controller';
27 import ManageDeviceCredentialsController from './device-credentials.controller'; 27 import ManageDeviceCredentialsController from './device-credentials.controller';
@@ -40,6 +40,7 @@ export default angular.module('thingsboard.device', [ @@ -40,6 +40,7 @@ export default angular.module('thingsboard.device', [
40 ]) 40 ])
41 .config(DeviceRoutes) 41 .config(DeviceRoutes)
42 .controller('DeviceController', DeviceController) 42 .controller('DeviceController', DeviceController)
  43 + .controller('DeviceCardController', DeviceCardController)
43 .controller('AssignDeviceToCustomerController', AssignDeviceToCustomerController) 44 .controller('AssignDeviceToCustomerController', AssignDeviceToCustomerController)
44 .controller('AddDevicesToCustomerController', AddDevicesToCustomerController) 45 .controller('AddDevicesToCustomerController', AddDevicesToCustomerController)
45 .controller('ManageDeviceCredentialsController', ManageDeviceCredentialsController) 46 .controller('ManageDeviceCredentialsController', ManageDeviceCredentialsController)