change management integration with reduce flag
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / modals / new-change-management / new-change-management.controller.js
index 28b3eea..9eed4c1 100644 (file)
             return (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH));
         };
 
+        $scope.removeVendorFromCloudOwner = function (cloudOwner) {
+            return AaiService.removeVendorFromCloudOwner(cloudOwner)
+        };
+
         vm.isDisabledVNFmodelVersion = function (vnfTypePristine) {
             if ($scope.isNewFilterChangeManagmentEnabled()) {
                 return !vm.isSearchedVNF;
             $uibModalInstance.close();
         };
 
-        vm.uploadConfigFile = function (file) {
+        vm.uploadConfigFile = function (file, item) {
             var defer = $q.defer();
             Upload.upload({
                 url: "change-management/uploadConfigUpdateFile",
                 }]
             })
                 .then(function (configUpdateResponse) {
-                    vm.getInternalWorkFlowParameter("VNF Config Update", "FILE", "Attach configuration file").value = configUpdateResponse && JSON.parse(configUpdateResponse.data).payload;
+                    item.value = configUpdateResponse && JSON.parse(configUpdateResponse.data).payload;
                     defer.resolve(true);
                 })
                 .catch(function (error) {
             }
         };
 
+        vm.collectWorkflowFieldsValues = function () {
+            /**
+             * Transforms items with name and value properties, to associative map, e.g the array
+             * [{name: foo, value: bar}, {name: baz, value: fiz}] will become the object {foo: bar, baz: fiz}
+             */
+            return vm.getAllInternalWorkFlowParameters(
+                    vm.changeManagement.workflow
+            ).reduce(function (result, item) {
+                result[item.name] = item.value;
+                return result;
+            }, {});
+        };
+
         vm.scheduleWorkflow = function () {
             $scope.widgetParameter = ""; // needed by the scheduler?
 
             }
             var data = {
                 widgetName: 'Portal-Common-Scheduler',
-                widgetData: vm.changeManagement,
+                widgetData: Object.assign({}, vm.changeManagement, vm.collectWorkflowFieldsValues()),
                 widgetParameter: $scope.widgetParameter
             };
 
-            window.parent.postMessage(data, VIDCONFIGURATION.SCHEDULER_PORTAL_URL);
+            console.log("vm.scheduleWorkflow data:", data);
+
+            if (window.parent !== window.self) {
+                window.parent.postMessage(data, VIDCONFIGURATION.SCHEDULER_PORTAL_URL);
+            } else {
+                vm.errorMsg = {message: "Portal not found. Cannot send: " + JSON.stringify(data)};
+                throw vm.errorMsg; // prevent popup closure
+            }
         };
 
         vm.executeWorkflow = function () {
                 });
         };
 
+        function isCompatibleNFRole(vnf) {
+
+            return vnf.properties['nf-role'] === vm.changeManagement['vnfType'] || !vm.changeManagement['vnfType'];
+
+        }
+
+        function isValidVnf(vnf) {
+
+            let result =  isCompatibleNFRole(vnf) && vnf.properties["model-invariant-id"]
+                && vnf.properties["model-version-id"];
+
+            return result;
+        }
+
+        function loadCloudRegions() {
+            AaiService.getLcpCloudRegionTenantList(
+                vm.changeManagement.subscriberId,
+                vm.changeManagement.serviceType["service-type"],
+                function (response) {
+                    $scope.isFeatureFlagCloudOwner = featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST);
+                    $scope.cloudRegionList = _.uniqBy(response, 'cloudRegionOptionId');
+                });
+        }
+
         vm.serviceTypeChanged = function () {
-            if (!$scope.isNewFilterChangeManagmentEnabled()) {
+            if ($scope.isNewFilterChangeManagmentEnabled()) {
+                loadCloudRegions();
+            } else {
                 vm.searchVNFs();
             }
         };
             vm.vnfTypes = [];
             vm.vnfTypesTemp = [];
             vm.serviceInstances = [];
+            vm.fromVNFVersions = [];
+            vm.vnfNames = [];
+            vm.changeManagement.vnfNames = [];
 
             var instances = vm.changeManagement.serviceType["service-instances"]["service-instance"];
             // var promiseArrOfGetVnfs = preparePromiseArrOfGetVnfs(instances);
 
             vm.vnfs = [];
             vm.vfModules = [];
-            let vnfRole = $scope.isNewFilterChangeManagmentEnabled() ? vm.changeManagement.vnfType : null;
+
+            let nfRole = null;
             let cloudRegion = null;
 
+            if ($scope.isNewFilterChangeManagmentEnabled()) {
+                nfRole = vm.changeManagement.vnfType ? vm.changeManagement.vnfType : null;
+                cloudRegion = vm.changeManagement.cloudRegion ? vm.changeManagement.cloudRegion : null;
+            }
 
             AaiService.getVnfsByCustomerIdAndServiceType(
                 vm.changeManagement.subscriberId,
                 vm.changeManagement.serviceType["service-type"],
-                vnfRole,
+                nfRole,
                 cloudRegion,
-        ).
-            then(function (response) {
+            ).then(function (response) {
                     vm.isSearchedVNF = true;
                     var vnfsData = response.data.results;
                     if (vnfsData) {
                             vm.vnfTypes.push(vnf.properties['nf-role'])
                         });
                     }
+                    if ($scope.isNewFilterChangeManagmentEnabled()) {
+                        vm.loadVNFVersions();
+                    }
                 }
             );
         };
             vm.serviceInstancesToGetVersions = [];
             var versions = [];
             _.forEach(vm.vnfs, function (vnf) {
-                if (vnf.properties['nf-role'] === vm.changeManagement['vnfType']
-                    && vnf.properties["model-invariant-id"]
-                    && vnf.properties["model-version-id"]) {
+                if (isValidVnf(vnf)) {
                     vm.serviceInstancesToGetVersions.push({
                             "model-invariant-id": vnf.properties["model-invariant-id"],
                             "model-version-id": vnf.properties["model-version-id"]
         };
 
         vm.loadVNFNames = function () {
+            vm.changeManagement.vnfNames = [];
             vm.vnfNames = [];
+
             const vnfs = vm.changeManagement.fromVNFVersion ? vm.vnfs : [];
             _.forEach(vnfs, function (vnf) {
 
                 var selectedVersionNumber = getVersionNameForId(vm.changeManagement.fromVNFVersion);
 
-                if (vnf.properties['nf-role'] === vm.changeManagement.vnfType &&
+                if (isCompatibleNFRole(vnf) &&
                     selectedVersionNumber === getVersionNameForId(vnf.properties["model-version-id"])) {
                     var vServer = {};
 
             return form[itemName].$error.validateAsyncFn;
         };
 
-        vm.getIdFor = function (type, id, name) {
-            return "internal-workflow-parameter-" + type + "-" + id + "-" + (name ? name.split(' ').join('-').toLowerCase() : "");
+        vm.getIdFor = function (type, item) {
+            return "internal-workflow-parameter-" + type + "-" + item.id + "-" + (item.displayName ? item.displayName.split(' ').join('-').toLowerCase() : "");
         };
 
-        vm.getInternalWorkFlowParameters = function (workflow, type) {
-            if (workflow && vm.localWorkflowsParameters.has(workflow) && vm.localWorkflowsParameters.get(workflow).filter(parameter => parameter.type == type) != []) {
-                return vm.localWorkflowsParameters.get(workflow).filter(parameter => parameter.type == type);
+        vm.getAllInternalWorkFlowParameters = function (workflow) {
+            if (workflow && vm.localWorkflowsParameters.has(workflow) && vm.localWorkflowsParameters.get(workflow)) {
+                return vm.localWorkflowsParameters.get(workflow);
             }
             return [];
         };
 
+        vm.getInternalWorkFlowParameters = function (workflow, type) {
+            return vm.getAllInternalWorkFlowParameters(workflow).filter(parameter => parameter.type === type);
+        };
+
         vm.getInternalWorkFlowParameter = function (workflow, type, parameterName) {
-            if (workflow && vm.localWorkflowsParameters.has(workflow) && vm.localWorkflowsParameters.get(workflow).filter(parameter => parameter.type == type) != []) {
-                return vm.localWorkflowsParameters.get(workflow).filter(parameter => parameter.type == type).filter(parameter => parameter.name === parameterName)[0]
-            }
+            return vm.getInternalWorkFlowParameters(workflow, type).filter(parameter => parameter.displayName === parameterName)[0];
         };
 
         vm.getRemoteWorkflowSource = (workflow) => {