"use strict"; /** * Created by andey on 11-01-2016. */ (function () { 'use strict'; angular.module('assetModule') .controller('AssetUpdateController', ['$scope', '$timeout', 'configurationModel', 'metadataModel', 'userModel', 'searchModel', 'createTicketModel', 'categoriesService', function ($scope, $timeout, configurationModel, metadataModel, userModel, searchModel, createTicketModel, categoriesService) { $scope.asset = { installationDate: { 'date': undefined, 'time': undefined } }; $scope.assetEntity = { ticketType: EntityVO.TYPE_ASSET, classId: "", assetUpdateFields: $scope.assetUpdateFields }; function loadSitesList(companyName) { return searchModel.getSitesByCompany(companyName) .then(function (response) { $scope.sites = response.objects; $scope.state.tooManySites = response.exceedsChunkSize; }); } function resetCategories(events) { if ($scope.assetUpdateFields.productName || $scope.assetUpdateFields.productCategoryTier1 || $scope.assetUpdateFields.productCategoryTier2 || $scope.assetUpdateFields.productCategoryTier3 || $scope.assetUpdateFields.productModelVersion) { $scope.assetEntity.company = $scope.asset.company; $scope.$broadcast(events.CLEAR_CATEGORY_DETAILS, $scope.assetEntity.company); } } function initForBulkUpdate() { if ($scope.assetUpdateFields.status) { $scope.asset.selectedStatus = _.first($scope.assetMetadata.statuses); $scope.updateStatusReason(); } } function initForSingleAsset(selectedAsset) { if ($scope.assetUpdateFields.name) { $scope.asset.name = selectedAsset.name; } if ($scope.assetUpdateFields.status && selectedAsset.status) { $scope.asset.selectedStatus = _.find($scope.assetMetadata.statuses, { name: selectedAsset.status.value }); if ($scope.assetUpdateFields.statusReason) { $scope.updateStatusReason(selectedAsset.status.reason); } } if ($scope.assetUpdateFields.partNumber) { $scope.asset.partNumber = selectedAsset.partNumber; } if ($scope.assetUpdateFields.manufacturer) { $scope.asset.manufacturer = selectedAsset.manufacturer; } if ($scope.assetUpdateFields.supplier) { $scope.asset.supplier = selectedAsset.supplier; } //lifecycleDates not available in ConsoleItemVO. Backend has to send these values to preload values from console if ($scope.assetUpdateFields.installationDate && selectedAsset.lifecycleDates && selectedAsset.lifecycleDates.installationDate) { $scope.asset.installationDate.value = selectedAsset.lifecycleDates.installationDate; $scope.asset.installationDate.date = moment(selectedAsset.lifecycleDates.installationDate).toDate(); $scope.asset.installationDate.time = moment(selectedAsset.lifecycleDates.installationDate).toDate(); } if ($scope.assetUpdateFields.room) { $scope.asset.room = selectedAsset.room; } if ($scope.assetUpdateFields.floor) { $scope.asset.floor = selectedAsset.floor; } //assetExtension not available in ConsoleItemVO if ($scope.assetUpdateFields.primaryCapability && selectedAsset.assetExtension) { $scope.asset.primaryCapability = _.find($scope.primaryCapabilities, { name: selectedAsset.assetExtension.primaryCapability }); } if (($scope.assetUpdateFields.productName || $scope.assetUpdateFields.productCategoryTier1 || $scope.assetUpdateFields.productCategoryTier2 || $scope.assetUpdateFields.productCategoryTier3 || $scope.assetUpdateFields.productModelVersion) && selectedAsset.allCategories) { $scope.asset.allCategories = selectedAsset.allCategories; } } function init() { $scope.state = { tooManyCompanies: false, isDataLoading: false }; $scope.selections = { companies: [] }; $scope.datePickerOptions = { startingDay: configurationModel.getWeekStartingDay(), 'show-weeks': false }; $scope.assetDate = { installationDatePicker: { open: false } }; metadataModel.getMetadataByType(EntityVO.TYPE_ASSET).then(function (metadata) { $scope.assetMetadata = metadata; $scope.primaryCapabilities = $scope.assetMetadata.primaryCapabilities; if ($scope.assetUpdateFields.productName || $scope.assetUpdateFields.productCategoryTier1 || $scope.assetUpdateFields.productCategoryTier2 || $scope.assetUpdateFields.productCategoryTier3 || $scope.assetUpdateFields.productModelVersion) { $scope.asset.allCategories = _.cloneDeep(categoriesService.populateCategories([{ name: 'product', tiers: {} }], $scope.assetMetadata)); } $scope.assetEntity.company = { name: $scope.assetMetadata.systemConfigurations.defaultCompany }; if ($scope.linkParams.selectedItem.length > 1) { initForBulkUpdate(); } else { var selectedAsset = _.cloneDeep($scope.linkParams.selectedItem[0]); initForSingleAsset(selectedAsset); } }); userModel.getFullCurrentUserData().then(function () { $scope.state.isDataLoading = true; searchModel.getOperatingCompanies(null, -1).then(function (result) { $scope.selections.companies = _.cloneDeep(result.companies); $scope.state.tooManyCompanies = result.exceedsChunkSize; //Load company if single asset selected if (($scope.linkParams.selectedItem.length < 2) && $scope.assetUpdateFields.company && $scope.linkParams.selectedItem[0].company) { $scope.asset.company = _.find($scope.selections.companies, { name: $scope.linkParams.selectedItem[0].company.name }); if ($scope.asset.company) { //Setting company value for product category $scope.assetEntity.company = $scope.asset.company; } if ($scope.assetUpdateFields.site) { loadSitesList($scope.asset.company.name).then(function () { if ($scope.linkParams.selectedItem[0].site.name) { $scope.asset.site = _.find($scope.sites, { name: $scope.linkParams.selectedItem[0].site.name }); } $scope.state.isDataLoading = false; }); } else { $scope.state.isDataLoading = false; } } else { $scope.state.isDataLoading = false; } }); }); } $scope.updateStatusReason = function (statusReason) { if ($scope.assetUpdateFields.statusReason && !_.isEmpty($scope.asset.selectedStatus.statusReasons)) { $scope.asset.selectedStatusReason = _.find($scope.asset.selectedStatus.statusReasons, { name: statusReason }) || {}; } else if ($scope.assetUpdateFields.statusReason) { $scope.asset.selectedStatusReason = {}; } }; $scope.getCompaniesByType = function (text, type) { return searchModel.getCompaniesByText(text, -1, { "companyType": type }).then(function (data) { if (type === 'Supplier') { $scope.isTooltipOpenSupplier = $scope.exceedsChunkSizeSupplier = data.exceedsChunkSize; } else if (type === 'Manufacturer') { $scope.isTooltipOpenManufacturer = $scope.exceedsChunkSizeManufacturer = data.exceedsChunkSize; } $timeout(function () { $scope.isTooltipOpenManufacturer = false; $scope.isTooltipOpenSupplier = false; }, 10000); return data.companies; }); }; $scope.onInputFocusBlur = function () { $scope.isTooltipOpenManufacturer = false; $scope.isTooltipOpenSupplier = false; }; $scope.setCompany = function (company) { $scope.asset.company = company; loadSitesList($scope.asset.company.name); resetCategories(); }; $scope.setCompanyByType = function (item, type) { $scope.asset[type] = item.name; }; $scope.setSite = function (site) { $scope.asset.site = site; $scope.asset.siteGroup = site.siteGroup; }; $scope.openDatePicker = function (calendar) { calendar.open = true; }; $scope.updateDateTime = function (type) { if (($scope.asset[type].date && !$scope.asset[type].time) || (!$scope.asset[type].date && $scope.asset[type].time)) { $scope.asset[type].time = _.clone($scope.asset[type].date); } var timeObj = moment($scope.asset[type].time); $scope.asset[type].value = moment($scope.asset[type].date).set('hours', timeObj.get('hours')).set('minutes', timeObj.get('minutes')).valueOf(); }; $scope.setPrimaryCapability = function (item) { $scope.asset.primaryCapability = item; }; $scope.getSitesByText = function (searchText) { return searchModel.getSitesByText(searchText); }; $scope.getList = function (type, term) { return createTicketModel.getList(type, term); }; init(); } ]); })();