aboutsummaryrefslogtreecommitdiffstats
path: root/d2ice.att.io/app/main
diff options
context:
space:
mode:
authorPaul McGoldrick <paul.mcgoldrick@att.com>2017-09-28 10:36:03 -0700
committerPaul McGoldrick <paul.mcgoldrick@att.com>2017-09-28 10:36:03 -0700
commit1cd02f285d4d778dddfe34024da4b31afdc0afcd (patch)
tree91a597f81d6e9f75e9766db0dc4f6ac9b9ac5d58 /d2ice.att.io/app/main
parent0e6fb5a0e199c00d5998052465f86a7a6812a474 (diff)
initial seed code commit VVP-9
Change-Id: I4d48180db7eba7cb7c299ab618f04d2092868085 Signed-off-by: Paul McGoldrick <paul.mcgoldrick@att.com>
Diffstat (limited to 'd2ice.att.io/app/main')
-rwxr-xr-xd2ice.att.io/app/main/activation/activate/activateUser.controller.js60
-rwxr-xr-xd2ice.att.io/app/main/activation/activate/activateUser.html39
-rwxr-xr-xd2ice.att.io/app/main/activation/activate/activateUser.module.js58
-rwxr-xr-xd2ice.att.io/app/main/activation/addVendorContact/addVendorContact.controller.js111
-rwxr-xr-xd2ice.att.io/app/main/activation/addVendorContact/addVendorContact.html111
-rwxr-xr-xd2ice.att.io/app/main/activation/addVendorContact/addVendorContact.less82
-rwxr-xr-xd2ice.att.io/app/main/activation/addVendorContact/addVendorContact.module.js67
-rwxr-xr-xd2ice.att.io/app/main/activation/addVf/addVf.controller.js277
-rwxr-xr-xd2ice.att.io/app/main/activation/addVf/addVf.html130
-rwxr-xr-xd2ice.att.io/app/main/activation/addVf/addVf.less176
-rwxr-xr-xd2ice.att.io/app/main/activation/addVf/addVf.module.js67
-rwxr-xr-xd2ice.att.io/app/main/activation/contactUs/contactUs.controller.js57
-rwxr-xr-xd2ice.att.io/app/main/activation/contactUs/contactUs.html53
-rwxr-xr-xd2ice.att.io/app/main/activation/contactUs/contactUs.less59
-rwxr-xr-xd2ice.att.io/app/main/activation/contactUs/contactUs.module.js67
-rwxr-xr-xd2ice.att.io/app/main/activation/inviteMembers/inviteMembers.controller.js97
-rwxr-xr-xd2ice.att.io/app/main/activation/inviteMembers/inviteMembers.html72
-rwxr-xr-xd2ice.att.io/app/main/activation/inviteMembers/inviteMembers.less86
-rwxr-xr-xd2ice.att.io/app/main/activation/inviteMembers/inviteMembers.module.js67
-rwxr-xr-xd2ice.att.io/app/main/activation/login/login.controller.js119
-rwxr-xr-xd2ice.att.io/app/main/activation/login/login.html90
-rwxr-xr-xd2ice.att.io/app/main/activation/login/login.less109
-rwxr-xr-xd2ice.att.io/app/main/activation/login/login.module.js68
-rwxr-xr-xd2ice.att.io/app/main/activation/register/register.controller.js122
-rwxr-xr-xd2ice.att.io/app/main/activation/register/register.html127
-rwxr-xr-xd2ice.att.io/app/main/activation/register/register.less100
-rwxr-xr-xd2ice.att.io/app/main/activation/register/register.module.js67
-rwxr-xr-xd2ice.att.io/app/main/activation/resendActivation/resendActivation.controller.js79
-rwxr-xr-xd2ice.att.io/app/main/activation/resendActivation/resendActivation.html61
-rwxr-xr-xd2ice.att.io/app/main/activation/resendActivation/resendActivation.less67
-rwxr-xr-xd2ice.att.io/app/main/activation/resendActivation/resendActivation.module.js68
-rwxr-xr-xd2ice.att.io/app/main/activation/resetPassword/resetPassword.controller.js95
-rwxr-xr-xd2ice.att.io/app/main/activation/resetPassword/resetPassword.html64
-rwxr-xr-xd2ice.att.io/app/main/activation/resetPassword/resetPassword.less84
-rwxr-xr-xd2ice.att.io/app/main/activation/resetPassword/resetPassword.module.js68
-rwxr-xr-xd2ice.att.io/app/main/activation/terms/terms.controller.js56
-rwxr-xr-xd2ice.att.io/app/main/activation/terms/terms.html105
-rwxr-xr-xd2ice.att.io/app/main/activation/terms/terms.less65
-rwxr-xr-xd2ice.att.io/app/main/activation/terms/terms.module.js68
-rwxr-xr-xd2ice.att.io/app/main/activation/updatePassword/updatePassword.controller.js95
-rwxr-xr-xd2ice.att.io/app/main/activation/updatePassword/updatePassword.html76
-rwxr-xr-xd2ice.att.io/app/main/activation/updatePassword/updatePassword.less85
-rwxr-xr-xd2ice.att.io/app/main/activation/updatePassword/updatePassword.module.js68
-rwxr-xr-xd2ice.att.io/app/main/admin/admin.module.js89
-rwxr-xr-xd2ice.att.io/app/main/admin/checklist-template/checklist-template.controller.js241
-rwxr-xr-xd2ice.att.io/app/main/admin/checklist-template/checklist-template.html174
-rwxr-xr-xd2ice.att.io/app/main/admin/checklist-template/checklist-template.less552
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/account.controller.js150
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/account.html159
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/account.less215
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/account.module.js85
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/notifications/notifications.controller.js140
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/notifications/notifications.html60
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/notifications/notifications.less348
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.controller.js98
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.html66
-rwxr-xr-xd2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.less45
-rwxr-xr-xd2ice.att.io/app/main/dashboard/checklist/checklist.controller.js445
-rwxr-xr-xd2ice.att.io/app/main/dashboard/checklist/checklist.html117
-rwxr-xr-xd2ice.att.io/app/main/dashboard/checklist/checklist.less826
-rwxr-xr-xd2ice.att.io/app/main/dashboard/dashboard/dashboard.controller.js235
-rwxr-xr-xd2ice.att.io/app/main/dashboard/dashboard/dashboard.html111
-rwxr-xr-xd2ice.att.io/app/main/dashboard/dashboard/dashboard.less189
-rwxr-xr-xd2ice.att.io/app/main/dashboard/detailed-view/detailed-view.controller.js245
-rwxr-xr-xd2ice.att.io/app/main/dashboard/detailed-view/detailed-view.html109
-rwxr-xr-xd2ice.att.io/app/main/dashboard/detailed-view/detailed-view.less400
-rwxr-xr-xd2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.directive.js308
-rwxr-xr-xd2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.html38
-rwxr-xr-xd2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.less47
-rwxr-xr-xd2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.module.js48
-rwxr-xr-xd2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard-container.html192
-rwxr-xr-xd2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard.less255
-rwxr-xr-xd2ice.att.io/app/main/dashboard/main.module.js107
-rwxr-xr-xd2ice.att.io/app/main/dashboard/main/main.html172
-rwxr-xr-xd2ice.att.io/app/main/dashboard/overview/overview.controller.js833
-rwxr-xr-xd2ice.att.io/app/main/dashboard/overview/overview.html212
-rwxr-xr-xd2ice.att.io/app/main/dashboard/overview/overview.less575
-rwxr-xr-xd2ice.att.io/app/main/documentation/documentation.controller.js74
-rwxr-xr-xd2ice.att.io/app/main/documentation/documentation.html47
-rwxr-xr-xd2ice.att.io/app/main/documentation/documentation.less96
-rwxr-xr-xd2ice.att.io/app/main/documentation/documentation.module.js74
-rwxr-xr-xd2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.html41
-rwxr-xr-xd2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.less61
-rwxr-xr-xd2ice.att.io/app/main/errors/404.html190
-rwxr-xr-xd2ice.att.io/app/main/main.controller.js60
-rwxr-xr-xd2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.controller.js66
-rwxr-xr-xd2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.html56
-rwxr-xr-xd2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.less54
-rwxr-xr-xd2ice.att.io/app/main/modals/audit-log/audit-log.controller.js95
-rwxr-xr-xd2ice.att.io/app/main/modals/audit-log/audit-log.html76
-rwxr-xr-xd2ice.att.io/app/main/modals/audit-log/audit-log.less49
-rwxr-xr-xd2ice.att.io/app/main/modals/change-date/change-date.controller.js75
-rwxr-xr-xd2ice.att.io/app/main/modals/change-date/change-date.html62
-rwxr-xr-xd2ice.att.io/app/main/modals/change-progress/change-progress.controller.js71
-rwxr-xr-xd2ice.att.io/app/main/modals/change-progress/change-progress.html65
-rwxr-xr-xd2ice.att.io/app/main/modals/checklist/checklist.controller.js238
-rwxr-xr-xd2ice.att.io/app/main/modals/checklist/checklist.html107
-rwxr-xr-xd2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.controller.js105
-rwxr-xr-xd2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.html58
-rwxr-xr-xd2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.less173
-rwxr-xr-xd2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.controller.js92
-rwxr-xr-xd2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.html55
-rwxr-xr-xd2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.less106
-rwxr-xr-xd2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.controller.js100
-rwxr-xr-xd2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.html62
-rwxr-xr-xd2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.controller.js124
-rwxr-xr-xd2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.html100
-rwxr-xr-xd2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.less68
-rwxr-xr-xd2ice.att.io/app/main/modals/feedback/feedback.controller.js82
-rwxr-xr-xd2ice.att.io/app/main/modals/feedback/feedback.html57
-rwxr-xr-xd2ice.att.io/app/main/modals/feedback/feedback.less44
-rwxr-xr-xd2ice.att.io/app/main/modals/general-log-modal/general-log-modal.controller.js63
-rwxr-xr-xd2ice.att.io/app/main/modals/general-log-modal/general-log-modal.html45
-rwxr-xr-xd2ice.att.io/app/main/modals/general-log-modal/general-log-modal.less72
-rwxr-xr-xd2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.controller.js74
-rwxr-xr-xd2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.html52
-rwxr-xr-xd2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.less151
-rwxr-xr-xd2ice.att.io/app/main/modals/next-steps/next-steps.controller.js278
-rwxr-xr-xd2ice.att.io/app/main/modals/next-steps/next-steps.html138
-rwxr-xr-xd2ice.att.io/app/main/modals/next-steps/next-steps.less307
-rwxr-xr-xd2ice.att.io/app/main/modals/select-el-modal/select-el-modal.controller.js78
-rwxr-xr-xd2ice.att.io/app/main/modals/select-el-modal/select-el-modal.html56
-rwxr-xr-xd2ice.att.io/app/main/modals/select-el-modal/select-el-modal.less54
-rwxr-xr-xd2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.controller.js63
-rwxr-xr-xd2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.html49
-rwxr-xr-xd2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.less135
-rwxr-xr-xd2ice.att.io/app/main/modals/set-eng-stage/set_eng_stage_modal.html58
-rwxr-xr-xd2ice.att.io/app/main/modals/status/status.controller.js125
-rwxr-xr-xd2ice.att.io/app/main/modals/status/status.html59
-rwxr-xr-xd2ice.att.io/app/main/modals/status/status.less44
-rwxr-xr-xd2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.controller.js78
-rwxr-xr-xd2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.html55
-rwxr-xr-xd2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.less49
-rwxr-xr-xd2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.controller.js73
-rwxr-xr-xd2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.html97
-rwxr-xr-xd2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.less61
-rwxr-xr-xd2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.controller.js202
-rwxr-xr-xd2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.html101
-rwxr-xr-xd2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.less49
139 files changed, 17177 insertions, 0 deletions
diff --git a/d2ice.att.io/app/main/activation/activate/activateUser.controller.js b/d2ice.att.io/app/main/activation/activate/activateUser.controller.js
new file mode 100755
index 00000000..39e60123
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/activate/activateUser.controller.js
@@ -0,0 +1,60 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.activation.activateUser')
+ .controller('ActivateUserController', ["$state", "usersService", "$log", "$stateParams", LoginController]);
+
+ function LoginController($state, usersService, $log, $stateParams) {
+ var init = function () {
+ usersService.activateUser($stateParams.userID, $stateParams.token)
+ .then(function (response) {
+ $state.go('app.login', {activation_success: response.data.activation_success,
+ engagement_uuid: response.data.engagement_uuid});
+ })
+ .catch(function (error) {
+ $log.error(error);
+ $state.go('app.login', {message: error.message.detail});
+ });
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/activation/activate/activateUser.html b/d2ice.att.io/app/main/activation/activate/activateUser.html
new file mode 100755
index 00000000..2041a607
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/activate/activateUser.html
@@ -0,0 +1,39 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div></div>
diff --git a/d2ice.att.io/app/main/activation/activate/activateUser.module.js b/d2ice.att.io/app/main/activation/activate/activateUser.module.js
new file mode 100755
index 00000000..b2e1f169
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/activate/activateUser.module.js
@@ -0,0 +1,58 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.activation.activateUser', [])
+ .config(config);
+
+ function config($stateProvider) {
+ $stateProvider
+ .state('app.activateUser', {
+ url: '/activate/:userID/:token',
+ views: {
+ 'main@': {
+ templateUrl: 'main/activation/activate/activateUser.html',
+ controller : 'ActivateUserController as vm'
+ }
+ },
+ params: {}
+ });
+ }
+})();
diff --git a/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.controller.js b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.controller.js
new file mode 100755
index 00000000..c8859a7d
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.controller.js
@@ -0,0 +1,111 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.addVendorContact')
+ .controller('AddVendorContactController', ["$state", "vfService", "usersService", "$log", "$rootScope",
+ AddVendorContactController]);
+
+ function AddVendorContactController($state, vfService, usersService, $log, $rootScope) {
+
+ var vm = this;
+ vm.data = {};
+
+ var init = function() {
+ $rootScope.ice.loader.show = true;
+ $rootScope.headerTitle = "";
+ $rootScope.headerSubTitle = "";
+
+ vm.choices = [{ VirtualFunction: '', TargetLab: '', TargetAic: '',is_service_provider_internal: '' }];
+
+ vfService.getCompanies()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.companies = response.data;
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+
+ };
+
+ vm.submitForm = function () {
+ vm.data.company = vm.data.company.uuid;
+
+ $rootScope.ice.loader.show = true;
+ usersService.addVendorContact(vm.data)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ if (response.data.is_active) {
+ $state.go('app.dashboard.overview');
+ } else {
+ $state.go('app.resend_activation');
+ }
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ vm.Msg = response.status + " : " + response.statusText;
+ vm.bgColor = "#FFEBEB"; // RED #FFEBEB green DFF0D9
+ $log.error(error);
+ });
+ };
+
+ vm.addNewChoice = function (){
+ var newItemNo = vm.choices.length + 1;
+ vm.choices.push({ 'id': newItemNo });
+ };
+
+ vm.removeChoice = function (){
+ var lastItem = vm.choices.length - 1;
+ vm.choices.splice(lastItem);
+ };
+
+ init();
+ }
+
+})();
+
diff --git a/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.html b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.html
new file mode 100755
index 00000000..ff9bd6e6
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.html
@@ -0,0 +1,111 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".addVendorContact-form"></ice-loader>
+
+<div class="container">
+ <div class="row">
+ <div class="col-md-2"></div>
+
+ <form name="addVendorContactForm" ng-submit="vm.submitForm()" novalidate class="addVendorContact-form col-md-8">
+
+ <div class="form-group" ng-class="{ 'has-error' : addVendorContactForm.company.$invalid && !addVendorContactForm.company.$pristine }">
+ <label class="ice-form-label required">Company</label>
+ <select style="width:100%" name="company" ng-model="vm.data.company" ng-options="company.name for company in vm.companies track by company.uuid" class="form-control" required></select>
+ <div class="ice-form-error" data-ng-show="addVendorContactForm.company.$error">
+ <span ng-show="addVendorContactForm.company.$error.required && !addVendorContactForm.company.$pristine" class="help-block">Please select a company</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : addVendorContactForm.fullName.$invalid && !addVendorContactForm.fullName.$pristine }">
+ <label class="ice-form-label required">Full Name</label>
+ <input type="text" name="fullname" class="form-control" ng-model="vm.data.full_name" ng-minlength="3" ng-maxlength="50" maxlength="50" required>
+ <div class="ice-form-error" data-ng-show="addVendorContactForm.fullname.$error">
+ <span ng-show="addVendorContactForm.fullname.$error.required && !addVendorContactForm.fullname.$pristine">Name is a required field.</span>
+ <span ng-show="addVendorContactForm.fullname.$error.minlength">Full Name is too short.</span>
+ <span ng-show="addVendorContactForm.fullname.$error.maxlength">Full Name is too long.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : addVendorContactForm.email.$invalid && !addVendorContactForm.email.$pristine }">
+ <label class="ice-form-label required">Email</label>
+ <input type="email" name="email" class="form-control" ng-model="vm.data.email" ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' maxlength="254" required>
+ <div class="ice-form-error" data-ng-show="addVendorContactForm.email.$error">
+ <span ng-show="addVendorContactForm.email.$error.required && !addVendorContactForm.email.$pristine">Email is a required field.</span>
+ <span ng-show="addVendorContactForm.email.$invalid && !addVendorContactForm.email.$pristine" class="help-block">Enter a valid email.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : addVendorContactForm.phone.$invalid && !addVendorContactForm.phone.$pristine }">
+ <label class="ice-form-label required">Phone</label>
+ <input type="text" name="phone" class="form-control" ng-pattern="/^[\+\-0-9]+$/" ng-model="vm.data.phone_number" ng-minlength="3" ng-maxlength="30" required>
+ <div class="ice-form-error" data-ng-show="addVendorContactForm.phone.$error">
+ <span ng-show="addVendorContactForm.phone.$error.required && !addVendorContactForm.phone.$pristine">Phone is a required field.</span>
+ <span ng-show="addVendorContactForm.phone.$error.minlength" class="help-block">Phone is too short.</span>
+ <span ng-show="addVendorContactForm.phone.$error.maxlength" class="help-block">Phone is too long.</span>
+ <span ng-show="addVendorContactForm.phone.$error.pattern" class="help-block">Phone must consist of numbers only.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : userForm.password.$invalid && !userForm.password.$pristine }">
+ <input type="checkbox" ng-model="vm.data.regular_email_updates" />&nbsp;I agree to receive regular email updates.
+ </div>
+
+ <div class="form-group">
+ <input type="checkbox" ng-model="vm.data.terms" required />&nbsp;I accept the AT&T's {{'program.name' | i18next}} Terms of Service and Privacy Policy.
+ </div>
+
+ <div id="frm-field-63-container" class="frm_form_field form-field frm_top_container">
+ <label class="frm_primary_label">reCAPTCHA
+ <span class="frm_required"></span>
+ </label>
+ <div id="field-7lj3ma" class="g-recaptcha" data-sitekey="6LeMMwYTAAAAACSY-OLibN7rdFHSnY9karY3VXW2"></div>
+ <div id="divre-captcha-err" class="frm_error_hide">reCAPTCHA is invalid.</div>
+ </div>
+ <input type="hidden" name="item_key" value="xxx" />
+
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!addVendorContactForm.$valid">Sign Up</button>
+
+ <a ui-sref="app.login" class="login">Already have an account?</a>
+
+ </form>
+
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.less b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.less
new file mode 100755
index 00000000..166962d9
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.less
@@ -0,0 +1,82 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.addVendorContact {
+
+ .add-button
+ {
+ float:left;
+ .sprite;
+ .sprite.add;
+ }
+
+ .remove-button
+ {
+ width:100px;
+ height:40px;
+ line-height:20px;
+ vertical-align:middle;
+ padding-left:10px;
+ float:left;
+ }
+
+ .login-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ a.register {
+ text-decoration: underline;
+ float: right;
+ margin: 10px 0 0 0;
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.module.js b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.module.js
new file mode 100755
index 00000000..c7b7396a
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVendorContact/addVendorContact.module.js
@@ -0,0 +1,67 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.addVendorContact', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.addVendorContact', {
+ url : '/addVendorContact',
+ views : {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller : 'MainController as vm'
+ },
+ 'content@app.addVendorContact': {
+ templateUrl: 'main/activation/addVendorContact/addVendorContact.html',
+ controller : 'AddVendorContactController as vm'
+ }
+ },
+ bodyClass: 'addVendorContact'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/addVf/addVf.controller.js b/d2ice.att.io/app/main/activation/addVf/addVf.controller.js
new file mode 100755
index 00000000..5a00c170
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVf/addVf.controller.js
@@ -0,0 +1,277 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.addVf')
+ .controller('AddVfController', ["$scope", "$state", "vfService", "toastService", "$location", "$rootScope",
+ "localStorageService", 'usersService', '$log', AddVfController])
+ .directive('addVf', function () {
+ return {
+ restrict: 'AEC',
+ templateUrl: 'main/activation/addVf/addVf.html',
+ link: function(scope, elm, attrs) {
+
+ },
+ controller: AddVfController,
+ controllerAs: 'vm',
+ scope: {
+ isModal: '=isModal'
+ }
+ }
+ });
+
+ function AddVfController($scope, $state, vfService, toastService, $location, $rootScope,localStorageService,
+ usersService, $log) {
+ var vm = this;
+ vm.data = [];
+ vm.isModal = $scope.isModal;
+ vm.user = usersService.getUserData();
+ if (vm.user == undefined) {
+ $state.go('app.login');
+ }
+
+ $rootScope.headerTitle = "Add Virtual Function";
+ $rootScope.headerSubTitle = "<center>Please use the form below to submit the virtual functions you would " +
+ "like to engage with ICE.<br/>Please do note that each VF will be tracked separately.</center>";
+
+ if (!vm.isModal && $location.search().activation_success) {
+ toastService.setToast('You have successfully activated your account', 'success', {displayFor: 'modal'});
+ }
+
+ var targetLabDate1 = [];
+ //vm.targetLabDate = iceConstants.targetLabDate;
+ vm.targetLabDate = monthesPlus12();
+
+
+ $rootScope.ice.loader.show = true;
+ vfService.getDeployTargets()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.deployTargets = response.data;
+ }
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+
+ vfService.getECOMPReleases()
+ .then(function (response) {
+ if (response.status === 200) {
+ vm.ECOMPReleases = response.data;
+ }
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+
+ vm.choices = [{VirtualFunction: '', TargetLab: '', TargetAic: '', is_service_provider_internal: ''}];
+
+ vm.addNewChoice = function () {
+ var newItemNo = vm.choices.length + 1;
+ vm.choices.push({'id': newItemNo});
+ };
+
+ vm.removeChoice = function (index) {
+ vm.choices.splice(index,1);
+ };
+
+ vm.submitForm = function () {
+ var is_service_provider_internal;
+ var jsonAddVf = [];
+ angular.forEach(vm.choices, function (value, key) {
+ if (value.is_service_provider_internal == true) {
+ is_service_provider_internal = "True";
+ } else {
+ is_service_provider_internal = "False";
+ }
+ vm.item = [];
+ var jsonItem = new Object();
+ jsonItem.virtual_function = value.VirtualFunction;
+ var objDate = new Date(Date.parse((value.TargetLab) + moment().format("z")));
+ jsonItem.target_lab_entry_date = objDate.getFullYear() + "-"
+ + addZero(objDate.getMonth()+1) + "-" + addZero(objDate.getDate());
+ jsonItem.version = value.VFVersion;
+ jsonItem.target_aic_uuid = value.TargetAic;
+ jsonItem.ecomp_release = value.ECOMPRelease;
+ jsonItem.is_service_provider_internal = (is_service_provider_internal === "True");
+ jsonAddVf.push(jsonItem);
+ });
+
+ $rootScope.ice.loader.show = true;
+ vfService.addVfs(JSON.stringify(jsonAddVf))//vm.data))
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ localStorageService.setJson("vfs", response.data);
+
+ if (!vm.isModal) {
+ if (response.data.is_active) {
+ $state.go('app.dashboard.overview');
+ } else {
+ $state.go('app.resend_activation');
+ }
+ } else {
+ $scope.$emit('onUpdateEngagements',{
+ select: {
+ uuid:response.data[0].engagement.uuid,page_type:'overview',
+ sub_id:undefined
+ }
+ });
+ $scope.$emit('moveWizardNextStep', response.data[0]);
+ }
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+
+ vm.skipAddVf = function () {
+ if (!vm.isModal && $location.search().activation_success) {
+ $state.go('app.dashboard.overview');
+ } else {
+ $state.go('app.resend_activation');
+ }
+ };
+ vm.myDate = new Date();
+ vm.minDate = new Date(
+ vm.myDate.getFullYear(),
+ vm.myDate.getMonth(),
+ vm.myDate.getDate());
+ vm.maxDate = new Date(
+ vm.myDate.getFullYear() + 2,
+ vm.myDate.getMonth(),
+ vm.myDate.getDate());
+
+ }
+
+
+ var monthesPlus12 = function()
+ {
+ var i;
+ var arrMonthYear=[];
+ var startingMonth = (new Date().getMonth()+1);
+ var startingYear = (new Date().getFullYear());
+ for (i = startingMonth ; i<=12;i++)
+ {
+ arrMonthYear.push({"val": monthZero(i) + "-" + startingYear, "nam": MonthNumToName(i) + " " +
+ startingYear});
+ }
+ for (i=1; i < startingMonth ; i++)
+ {
+ arrMonthYear.push({"val": monthZero(i) + "-" + (startingYear+1), "nam": MonthNumToName(i) + " " +
+ (startingYear + 1)});
+ }
+ return(arrMonthYear);
+ }
+
+ var monthZero = function(m)
+ {
+ var ret = m;
+ if (m<10)
+ {
+ ret = "0"+m;
+ }
+ return(ret);
+ }
+
+ var MonthNumToName = function(m)
+ {
+ var MonthName;
+ switch (m)
+ {
+ case 1:
+ MonthName = "January";
+ break;
+ case 2:
+ MonthName = "February";
+ break;
+ case 3:
+ MonthName = "March";
+ break;
+ case 4:
+ MonthName = "April";
+ break;
+ case 5:
+ MonthName = "May";
+ break;
+ case 6:
+ MonthName = "June";
+ break;
+ case 7:
+ MonthName = "July";
+ break;
+ case 8:
+ MonthName = "August";
+ break;
+ case 9:
+ MonthName = "September";
+ break;
+ case 10:
+ MonthName = "October";
+ break;
+ case 11:
+ MonthName = "November";
+ break;
+ case 12:
+ MonthName = "December";
+ break;
+ }
+ return(MonthName);
+ }
+
+ var addZero = function(x)
+ {
+ if (x<10)
+ {
+ return("0"+x);
+ }
+ else
+ {
+ return(x);
+ }
+ }
+})();
+
diff --git a/d2ice.att.io/app/main/activation/addVf/addVf.html b/d2ice.att.io/app/main/activation/addVf/addVf.html
new file mode 100755
index 00000000..4dff7b0b
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVf/addVf.html
@@ -0,0 +1,130 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".addVf-form"></ice-loader>
+<div class="container">
+ <div class="row">
+ <div class="col-md-2"></div>
+ <form name="addVfForm" ng-submit="vm.submitForm()" novalidate class="addVf-form col-md-8">
+ <div class="table-container-flex">
+ <div class="table">
+ <!-- Table body -->
+ <div class="body">
+ <div data-ng-repeat="choice in vm.choices" class="data-row-wrapper">
+ <ng-form name="vfItemForm">
+ <div class="flex-container data-row">
+ <!-- Text -->
+ <div class="add-vf-wizard text">
+ Use the form below to add your VF.Try to be as accurate as you can around the information to
+ make sure the validation can accomplished as possible.
+ </div>
+ </div>
+ <div class="flex-container data-row">
+ <!-- Virtual Function -->
+ <div class="table-col-general flex-item">
+ <div id="vf-name-title">VF Name</div>
+ <input type="text" name="virtualFunction" class="form-control" ng-model="choice.VirtualFunction" maxlength="32" class="form-control" placeholder="VF Name" required ng-pattern="/^[a-zA-Z0-9-]*$/">
+ <div class="ice-form-error" data-ng-show="vfItemForm.virtualFunction.$error">
+ <span ng-show="vfItemForm.virtualFunction.$error.pattern">VF Name can be alphanumeric or/and Hyphen</span>
+ </div>
+ </div>
+ </div>
+ <div class="flex-container data-row">
+ <h3 id="title-key-metadata">Key Metadata</h3>
+ </div>
+ <div class="flex-container data-row fields_key_metadata">
+ <!-- ECOMP Release -->
+ <div class="table-col-general flex-item">
+ <select ng-model="choice.ECOMPRelease" id="ecomp-release" class="form-control" required>
+ <option value="" selected disabled>ECOMP Release</option>
+ <option ng-repeat="dt in vm.ECOMPReleases" value="{{dt.uuid}}">
+ {{dt.name}}
+ </option>
+ </select>
+ </div>
+ <!-- Target AIC Version -->
+ <div class="table-col-general flex-item ">
+ <select ng-model="choice.TargetAic" id="aic-version" class="form-control" required>
+ <option value="" selected disabled>AIC Version</option>
+ <option ng-repeat="dt in vm.deployTargets" value="{{dt.uuid}}">
+ {{dt.name}} {{dt.version}}
+ </option>
+ </select>
+ </div>
+ <!-- VF Version -->
+ <div class="table-col-general flex-item">
+ <input type="text" name="VFversion" id="id-vf-version" class="form-control" ng-model="choice.VFVersion" maxlength="32" class="form-control" placeholder="VF Version" required >
+ </div>
+ <!-- Delete VF -->
+ <div class="table-col-general flex-item" ng-if="vm.choices.length > 1">
+ <!--
+ <div class="reject_large" ng-click='vm.removeChoice()' ng-show="$last"><span class="reject_large"></span>Remove</div>
+ -->
+ <div class="remove-button" ng-click='vm.removeChoice($index)' ><span class="remove-icon"></span>Remove</div>
+ </div>
+ </div>
+ <div class="flex-container data-row">
+ <!-- Target Lab Entry -->
+ <div class="table-col-general flex-item">
+ <div id="vf-name-title">Target Lab Entry Date</div>
+ <md-datepicker id="e2e-lab-entry-date" md-min-date="vm.minDate" ng-click="ctrl.openCalendarPane($event)" ng-model-options="{timezone: 'gmt'}" class="btn btn-default datepicker_btn" ng-model="choice.TargetLab" md-placeholder="E2E Lab Entry Date"></md-datepicker>
+ <input type="hidden" id="add-vf-hidden-target-lab-date" value="{{choice.TargetLab | date2: 'MMMM doo yyyy' : timeGapLocal}}"/>
+ </div>
+ </div>
+ <div class="add-vf-confirm-checkbox">
+ <input type="checkbox" name="is_service_provider_internal" ng-model="choice.is_service_provider_internal" />
+ The virtual function is only developed internally inside AT&T.
+ </div>
+ </ng-form>
+ </div>
+ </div>
+ <div class="footer">
+ <div class="action-row-wrapper">
+ <a ng-if="!vm.isModal" class="add-button" ng-click='vm.addNewChoice()'>
+ <span class="add-icon"></span>
+ <span class="add-text">Add another VF</span>
+ </a>
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!addVfForm.$valid">Submit your VF</button>
+ <a id="skip-add-vf-singup" ng-if="!vm.isModal" class="" ng-click="vm.skipAddVf()">Skip VF creation</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/activation/addVf/addVf.less b/d2ice.att.io/app/main/activation/addVf/addVf.less
new file mode 100755
index 00000000..dd78bae3
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVf/addVf.less
@@ -0,0 +1,176 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.add-vf {
+
+ .reject_large {
+ .actions-sprite;
+ .actions-sprite.reject_large;
+ cursor: pointer;
+ }
+
+ .table{
+ margin-bottom: 0;
+ }
+
+ .table-container-flex {
+
+
+ .action-row-wrapper, .data-row-wrapper {
+ padding: 5px 10px;
+ margin-bottom:5px;
+
+ }
+
+ .data-row-wrapper:nth-child(even) {
+ background: rgba(158, 158, 158, 0.28);
+
+
+ }
+
+ .data-row-wrapper:nth-child(odd) {
+ border-bottom: 1px solid;
+ border-top: 1px solid;
+ border-color: @main_color_q;
+ }
+
+ .data-row-wrapper:first-child {
+ border-top: none;
+ }
+
+ .data-row-wrapper:last-child {
+ border-bottom:none;
+ }
+ .flex-item {
+ padding-left:0px;
+ }
+ .flex-item:nth-child(1) {
+ padding: 5px 15px 5px 0px;
+ flex-grow: 25;
+ }
+
+ .flex-item:nth-child(2) {
+ flex-grow: 25;
+ }
+
+ .flex-item:nth-child(3) {
+ flex-grow: 25;
+ }
+
+ .flex-item:nth-child(4) {
+ flex-grow: 25;
+ }
+ .flex-item:nth-child(5) {
+ flex-grow: 25;
+ }
+
+ }
+
+ .add-vf-confirm-checkbox {
+ display: block;
+ clear: both;
+ }
+
+ .add-button {
+ display: block;
+ .add-text {
+ .a_16_m;
+ vertical-align: top;
+ margin-left: 6px;
+ }
+ .add-icon {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ }
+ }
+
+ .remove-button {
+ width:100px;
+ height:40px;
+ line-height:20px;
+ vertical-align:middle;
+ padding-left:10px;
+ float:left;
+ .a_16_m;
+ margin-top: 8px;
+ cursor: pointer;
+
+ .remove-icon {
+ display: inline-block;
+ vertical-align: text-top;
+ margin-right: 6px;
+ .sprite;
+ .sprite.delete-circle;
+ cursor: pointer;
+ }
+ }
+
+ .lineColor
+ {
+ margin: 2px;
+ }
+
+ .addVf-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ #skip-add-vf-singup {
+ margin-top: 10px;
+ display: block;
+ text-decoration: underline;
+ text-align: left;
+ .a_16_r;
+ }
+
+
+}
diff --git a/d2ice.att.io/app/main/activation/addVf/addVf.module.js b/d2ice.att.io/app/main/activation/addVf/addVf.module.js
new file mode 100755
index 00000000..bac2c90b
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/addVf/addVf.module.js
@@ -0,0 +1,67 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.addVf', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.addVf', {
+ url : '/addVf',
+ views : {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller : 'MainController as vm'
+ },
+ 'content@app.addVf': {
+ templateUrl: 'main/activation/addVf/addVf.html',
+ controller : 'AddVfController as vm'
+ }
+ },
+ bodyClass: 'add-vf'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/contactUs/contactUs.controller.js b/d2ice.att.io/app/main/activation/contactUs/contactUs.controller.js
new file mode 100755
index 00000000..bed33798
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/contactUs/contactUs.controller.js
@@ -0,0 +1,57 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.contactUs')
+ .controller('ContactUsController', ["$rootScope", ContactUsController]);
+
+ function ContactUsController($rootScope) {
+
+ var vm = this;
+
+ $rootScope.headerTitle = "Contact Us";
+ $rootScope.headerSubTitle = "Please fill in the details below";
+
+ }
+
+})();
+
diff --git a/d2ice.att.io/app/main/activation/contactUs/contactUs.html b/d2ice.att.io/app/main/activation/contactUs/contactUs.html
new file mode 100755
index 00000000..653ebc1d
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/contactUs/contactUs.html
@@ -0,0 +1,53 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="container">
+
+ <div class="row">
+ <div class="col-md-2"></div>
+
+ <form name="contactUsForm" ng-submit="vm.submitForm()" novalidate class="contact-us-form col-md-8">
+
+
+
+ </form>
+
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/contactUs/contactUs.less b/d2ice.att.io/app/main/activation/contactUs/contactUs.less
new file mode 100755
index 00000000..befbb342
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/contactUs/contactUs.less
@@ -0,0 +1,59 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.contact-us {
+
+ .contact-us-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/contactUs/contactUs.module.js b/d2ice.att.io/app/main/activation/contactUs/contactUs.module.js
new file mode 100755
index 00000000..9259671d
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/contactUs/contactUs.module.js
@@ -0,0 +1,67 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.contactUs', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.contactus', {
+ url : '/contactUs',
+ views : {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller : 'MainController as vm'
+ },
+ 'content@app.contactus': {
+ templateUrl: 'main/activation/contactUs/contactUs.html',
+ controller : 'ContactUsController as vm'
+ }
+ },
+ bodyClass: 'contact-us'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.controller.js b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.controller.js
new file mode 100755
index 00000000..72ff43c0
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.controller.js
@@ -0,0 +1,97 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.activation.inviteMembers')
+ .controller('InviteMembersController', ["$state", "vfService", "$rootScope", "$log", InviteMembersController]);
+
+ function InviteMembersController($state, vfService, $rootScope, $log) {
+ var vm = this;
+ vm.data = [];
+
+ var init = function() {
+ $rootScope.headerTitle = "Invite Team Members";
+ $rootScope.headerSubTitle = "You can invite as many team members to collaborate around your virtual" +
+ " function as you would like. Please do remember that anyone invited to collaborate with you around" +
+ " the virtual function will have equal access.";
+ vm.choices = [{ Email: '' }];
+ };
+
+ vm.submitForm = function () {
+ var jsonInviteMembers=[];
+ angular.forEach(vm.choices, function(value, key) {
+ vm.item=[];
+ var jsonItem = new Object();
+ jsonItem.email = value.email;
+ jsonInviteMembers.push(jsonItem);
+ });
+
+ $rootScope.ice.loader.show = true;
+ vfService.inviteMembers(JSON.stringify(jsonInviteMembers))
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ if (response.data.is_active) {
+ $state.go('app.dashboard.overview');
+ } else {
+ $state.go('app.resend_activation');
+ }
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ vm.addNewChoice = function () {
+ var newItemNo = vm.choices.length + 1;
+ vm.choices.push({ 'id': newItemNo });
+ };
+
+ vm.removeChoice = function () {
+ var lastItem = vm.choices.length - 1;
+ vm.choices.splice(lastItem);
+ };
+
+ init();
+ }
+})();
+
diff --git a/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.html b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.html
new file mode 100755
index 00000000..60fa01d5
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.html
@@ -0,0 +1,72 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".inviteMembers-form"></ice-loader>
+
+<div class="container">
+
+ <div class="row">
+
+ <div class="col-md-2"></div>
+
+ <form name="inviteMembersForm" ng-submit="vm.submitForm()" novalidate class="inviteMembers-form col-md-8">
+ <div>
+ <div style="clear:both;"></div>
+ <fieldset data-ng-repeat="choice in choices|limitTo:10">
+ <div id="containera">
+ <div style="width:400px;height:50px;line-height:20px;;float:left">
+ <input type="email" name="email" class="form-control" ng-model="choice.Email" maxlength="50" ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' class="form-control" required>
+ <div class="ice-form-error" data-ng-show="inviteMembersForm.email.$error">
+ <span ng-show="inviteMembersForm.email.$error.required && !inviteMembersForm.email.$pristine">Email is a required field.</span>
+ <span ng-show="inviteMembersForm.email.$invalid && !inviteMembersForm.email.$pristine" class="help-block">Enter a valid email.</span>
+ </div>
+ </div>
+ </div>
+ <div style="width:200px;height:50px;line-height:20px; vertical-align:middle;padding-left:10px;float:left">
+ <a ng-click='removeChoice()' ng-show="$last">Remove</a>
+ </div>
+ </fieldset>
+ </div>
+
+ <a ng-if="choices.length < 10" class="add-button" ng-click='vm.addNewChoice()'>Invite another team member</a>
+
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!inviteMembersForm.$valid">Send invitations</button>
+
+ </form>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.less b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.less
new file mode 100755
index 00000000..9eb02dc3
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.less
@@ -0,0 +1,86 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.inviteMembers {
+
+ .inviteMembers-title {
+ height: 130px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-start;
+ h1 {.p_24; margin: 20px 0 10px 0;}
+ h2 {.p_16_m; margin: 0;}
+ }
+
+ .add-button {
+ &:after {
+ .sprite;
+ .sprite.add;
+ display: block;
+ }
+ }
+
+ .remove-button {
+ width:100px;
+ height:40px;
+ line-height:20px;
+ vertical-align:middle;
+ padding-left:10px;
+ float:left;
+ }
+
+ .inviteMembers-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.module.js b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.module.js
new file mode 100755
index 00000000..61d8f1f0
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/inviteMembers/inviteMembers.module.js
@@ -0,0 +1,67 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.inviteMembers', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.inviteMembers', {
+ url : '/inviteMembers',
+ views : {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller : 'MainController as vm'
+ },
+ 'content@app.inviteMembers': {
+ templateUrl: 'main/activation/inviteMembers/inviteMembers.html',
+ controller : 'InviteMembers as vm'
+ }
+ },
+ bodyClass: 'inviteMembers'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/login/login.controller.js b/d2ice.att.io/app/main/activation/login/login.controller.js
new file mode 100755
index 00000000..9ed5f1be
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/login/login.controller.js
@@ -0,0 +1,119 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.login')
+ .controller('LoginController', ["$state", "usersService", "$log", "$rootScope", "$location", "toastService",
+ "$stateParams", LoginController]);
+
+ function LoginController($state, usersService, $log, $rootScope, $location, toastService, $stateParams) {
+ var vm = this;
+ vm.data = {};
+ $rootScope.headerTitle = "Login";
+ $rootScope.headerSubTitle = "Please use the form below to login";
+ usersService.resetUserData();
+ var t="";
+
+ if ($state.params.message){
+ toastService.setToast($state.params.message, 'danger');
+ $log.warn($state.params.message);
+ }
+
+ if ($location.search().t != undefined){
+ t = "token"+$location.search().t
+ }
+
+ vm.data.invitation = $location.search().invitation;
+
+ vm.submitForm = function () {
+ $rootScope.ice.loader.show = true;
+ usersService.login(JSON.stringify(vm.data), t)
+ .then(function (response) {
+ if (response.status === 200) {
+ $rootScope.ice.loader.show = false;
+
+ usersService.setUserActivationSuccess($state.params.activation_success);
+
+ if(response.data.isResetPwdFlow!=undefined && response.data.isResetPwdFlow==true){
+ $state.go("app.updatePassword");
+ }
+ else{
+ // This is a workaround to remove slash at the beginning.
+ // The slash is there because the ui-router does not support optional
+ // params in URL address, and I used regex:
+ // url: '/login{enggement_uuid: (?:/[^/]+)?}' and the value returned for engagement_uuid
+ // contains slash at the start.
+ var engagement_uuid = $state.params.engagement_uuid;
+ if (response.data.eng_uuid != undefined)
+ engagement_uuid = response.data.eng_uuid;
+
+ if (engagement_uuid){
+ engagement_uuid = engagement_uuid.replace('/','');
+ $state.go("app.dashboard.overview", {"engagement_uuid": engagement_uuid});
+ } else {
+ $state.go("app.dashboard.dashboard");
+ }
+ }
+ }
+ })
+ .catch(function (error) {
+ if(error && error.message && error.message.detail) {
+ toastService.setToast(error.message.detail, 'danger');
+ } else {
+ toastService.setToast(error.message, 'danger');
+ }
+
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ if(error.status===403){ // The server will return 403 if the user.is_active==false
+ $log.error('User is not active, redirecting to resend_activation page');
+ $state.go("app.resend_activation", {"message": "Please activate your account first"});
+ }
+ if(error.status===302){ // The server will return 302 if the temporary password has expired
+ $log.error('Temporary password has expired, redirecting to reset_password page');
+ $state.go('app.resetPassword', {"message":"Your temporary password has expired, please" +
+ " generate a new one"});
+ }
+ });
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/activation/login/login.html b/d2ice.att.io/app/main/activation/login/login.html
new file mode 100755
index 00000000..d095fda1
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/login/login.html
@@ -0,0 +1,90 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".login-form"></ice-loader>
+
+<div class="container">
+
+ <div class="row">
+ <div class="col-md-2"></div>
+ <form name="loginForm" ng-submit="vm.submitForm()" novalidate
+ class="login-form col-md-8">
+ <div class="form-group"
+ ng-class="{ 'has-error' : loginForm.email.$invalid && !loginForm.email.$pristine }">
+ <label class="ice-form-label required">Email</label> <input
+ type="email" name="email" class="form-control"
+ ng-model="vm.data.email" maxlength="254" required ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'>
+ <div class="ice-form-error" data-ng-show="loginForm.email.$error">
+ <span
+ ng-show="loginForm.email.$error.required && !loginForm.email.$pristine">Email
+ is a required field.</span>
+ <span ng-show="loginForm.email.$error.pattern">Enter a valid email.</span>
+ </div>
+ </div>
+
+ <div class="form-group"
+ ng-class="{ 'has-error' : loginForm.password.$invalid && !loginForm.password.$pristine }">
+ <label class="ice-form-label required">Password</label> <input
+ type="password" name="password" class="form-control"
+ ng-model="vm.data.password" ng-maxlength="32" maxlength="32"
+ required>
+ <div class="ice-form-error" data-ng-show="loginForm.password.$error">
+ <span
+ ng-show="loginForm.password.$error.required && !loginForm.password.$pristine">Password
+ is a required field.</span> <span
+ ng-show="loginForm.password.$error.minlength">Password is
+ too short.</span> <span ng-show="loginForm.password.$error.maxlength">Password
+ is too long.</span>
+ </div>
+ </div>
+
+ <button type="submit" class="btn btn-primary"
+ data-ng-disabled="!loginForm.$valid">Login</button>
+
+ <div class="leftLink">
+ <a ui-sref="app.resetPassword">Reset your password?</a>
+ </div>
+ <div class="rightLink">
+ <a id="id-dont-have-an-account" ui-sref="app.register">Don't
+ have an account?</a>
+ </div>
+ </form>
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/login/login.less b/d2ice.att.io/app/main/activation/login/login.less
new file mode 100755
index 00000000..9dd6a9f7
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/login/login.less
@@ -0,0 +1,109 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.login {
+
+ .login-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ a.register {
+ text-decoration: underline;
+ float: right;
+ margin: 10px 0 0 0;
+ }
+
+
+ .leftLink
+ {
+ padding-top:5px;
+ width:50%;
+ text-align:left;
+ float:left;
+
+ a,
+ a:hover,
+ a:active,
+ a:focus
+ {
+ .m_14_r;
+ cursor: pointer;
+ }
+
+ a{
+ text-decoration:underline;
+ }
+ }
+
+ .rightLink
+ {
+ font-size:14px;
+ padding-top:5px;
+ width:50%;
+ text-align:right;
+ float:left;
+
+ a,
+ a:hover,
+ a:active,
+ a:focus
+ {
+ .m_14_r;
+ cursor: pointer;
+ }
+
+ a{
+ text-decoration:underline;
+ }
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/login/login.module.js b/d2ice.att.io/app/main/activation/login/login.module.js
new file mode 100755
index 00000000..9953063b
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/login/login.module.js
@@ -0,0 +1,68 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.login', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.login', {
+ url: '/login{engagement_uuid: (?:/[^/]+)?}',
+ views: {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller: 'MainController as vm'
+ },
+ 'content@app.login': {
+ templateUrl: 'main/activation/login/login.html',
+ controller: 'LoginController as vm'
+ }
+ },
+ params: {message: null, activation_success: undefined},
+ bodyClass: 'login'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/register/register.controller.js b/d2ice.att.io/app/main/activation/register/register.controller.js
new file mode 100755
index 00000000..e4e525a7
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/register/register.controller.js
@@ -0,0 +1,122 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.register')
+ .controller('RegisterController', ["usersService", "$state", "$location", "vfService", "$rootScope",
+ "toastService", "$log",'$i18next', RegisterController]);
+
+ function RegisterController(usersService, $state, $location, vfService, $rootScope, toastService, $log,$i18next) {
+
+ var vm = this;
+ vm.data = {};
+ var programName = $i18next.t('program.name');
+ var init = function()
+ {
+
+ $rootScope.headerTitle = "Sign Up";
+ $rootScope.headerSubTitle = "Please use the form to Sign Up to " +programName;
+
+ usersService.resetUserData();
+
+ var companyParam = $location.search().company;
+
+ vm.data.full_name = $location.search().full_name;
+ vm.data.email = $location.search().email;
+ vm.data.phone_number = $location.search().phone_number;
+
+ $rootScope.ice.loader.show = true;
+ vfService.getCompanies()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200){
+ vm.vendors = response.data;
+ if (companyParam != undefined) {
+ angular.forEach(vm.vendors, function (value, key) {
+ if (value.uuid === companyParam) {
+ vm.data.company = value.name;
+ };
+ });
+ }
+ }
+ })
+ .catch(function (error){
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ vm.submitForm = function () {
+ if(grecaptcha.getResponse().length != 0)
+ {
+ $rootScope.ice.loader.show = true;
+ if (vm.data.regular_email_updates != true) {
+ vm.data.regular_email_updates = false;
+ }
+ vm.data.inviter_uuid = $location.search().inviter_uuid;
+ vm.data.eng_uuid = $location.search().eng_uuid;
+ vm.data.invitation = $location.search().invitation;
+ vm.data.is_contact_user = ($location.search().is_contact_user === "true");
+ vm.email = $location.search().email;
+
+ usersService.register(vm.data)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ $state.go('app.resend_activation');
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ });
+ $rootScope.PleaseFill = "";
+ } else {
+ toastService.setToast('Please fill CAPTCHA!', 'danger');
+ $log.warn("Please fill CAPTCHA!");
+ }
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/activation/register/register.html b/d2ice.att.io/app/main/activation/register/register.html
new file mode 100755
index 00000000..b6af8ce4
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/register/register.html
@@ -0,0 +1,127 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".register-form"></ice-loader>
+
+<div class="container">
+ <script type='text/javascript' src='https://www.google.com/recaptcha/api.js?ver=1'></script>
+ <div class="row">
+ <div class="col-md-2"></div>
+
+ <form name="registerForm" ng-submit="vm.submitForm()" novalidate class="register-form col-md-8">
+ <div class="form-group" ng-class="{ 'has-error' : registerForm.company.$invalid && !registerForm.company.$pristine }">
+ <label class="ice-form-label required">Company</label>
+ <select ng-model="vm.data.company" name="company" class="form-control" required>
+ <option value="">Please select a company</option>
+ <option ng-repeat="vendor in vm.vendors" value="{{vendor.name}}" ng-selected="vendor.name===vm.data.company">
+ {{vendor.name}}
+ </option>
+ </select>
+ <div class="ice-form-error" data-ng-show="registerForm.company.$error">
+ <span ng-show="registerForm.company.$error.required && !registerForm.company.$pristine" class="help-block">Please select a company</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : registerForm.fullName.$invalid && !registerForm.fullName.$pristine }">
+ <label class="ice-form-label required">Full Name</label>
+ <input type="text" name="fullname" class="form-control" ng-model="vm.data.full_name" ng-minlength="3" ng-maxlength="50" maxlength="50" required ng-pattern="/^[a-zA-Z0-9 ]*$/">
+ <div class="ice-form-error" data-ng-show="registerForm.fullname.$error">
+ <span ng-show="registerForm.fullname.$error.required && !registerForm.fullname.$pristine">Name is a required field.</span>
+ <span ng-show="registerForm.fullname.$error.minlength">Full Name is too short.</span>
+ <span ng-show="registerForm.fullname.$error.maxlength">Full Name is too long.</span>
+ <span ng-show="registerForm.fullname.$error.pattern">Full Name must be alphanumeric</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : registerForm.email.$invalid && !registerForm.email.$pristine }">
+ <label class="ice-form-label required">Email</label>
+ <input type="email" name="email" class="form-control" ng-model="vm.data.email" maxlength="254" ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' required>
+ <div class="ice-form-error" data-ng-show="registerForm.email.$error">
+ <span ng-show="registerForm.email.$error.required && !registerForm.email.$pristine">Email is a required field.</span>
+ <span ng-show="registerForm.email.$invalid && !registerForm.email.$error.required && !registerForm.email.$pristine">Enter a valid email.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : registerForm.phone.$invalid && !registerForm.phone.$pristine }">
+ <label class="ice-form-label required">Phone</label>
+ <input type="text" name="phone" class="form-control phone-place-holder" ng-intl-tel-input ng-model="vm.data.phone_number" required ng-minlength="6" ng-maxlength="30">
+ <div class="ice-form-error" data-ng-show="registerForm.phone.$error">
+ <span ng-show="registerForm.phone.$error.required && !registerForm.phone.$pristine">Phone is a required field.</span>
+ <span ng-show="registerForm.phone.$error.minlength" class="help-block">Phone is too short.</span>
+ <span ng-show="registerForm.phone.$error.maxlength" class="help-block">Phone is too long.</span>
+ <span ng-show="registerForm.phone.$dirty && registerForm.phone.$invalid" class="help-block">Phone format invalid</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : registerForm.password.$invalid && !registerForm.password.$pristine }">
+ <label class="ice-form-label required">Password</label>
+ <input type="password" name="password" class="form-control" ng-model="vm.data.password" ng-minlength="4" ng-maxlength="32" maxlength="32" required autocomplete="new-password">
+ <div class="ice-form-error" data-ng-show="registerForm.password.$error">
+ <span ng-show="registerForm.password.$error.required && !registerForm.password.$pristine">Password is a required field.</span>
+ <span ng-show="registerForm.password.$error.minlength" class="help-block">Password is too short.</span>
+ <span ng-show="registerForm.password.$error.maxlength" class="help-block">Password is too long.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : userForm.password.$invalid && !userForm.password.$pristine }">
+ <input type="checkbox" ng-model="vm.data.regular_email_updates" />&nbsp;I agree to receive regular email updates from AT&T {{'program.name' | i18next}}.
+ </div>
+
+ <div class="form-group">
+ <input type="checkbox" ng-model="vm.data.terms" required />&nbsp;I accept the <a href="" ui-sref="app.terms" title="AT&T's {{'program.name' | i18next}} Terms of Service and Privacy Policy" target="_blank">AT&T's {{'program.name' | i18next}} Terms of Service and Privacy Policy</a>.
+ </div>
+
+ <div id="frm-field-63-container" class="form-group frm_form_field form-field frm_top_container">
+ <!--
+ <label class="ice-form-label required">
+ <span class="frm_required"></span>
+ </label>
+ -->
+ <div id="field-7lj3ma" class="g-recaptcha" data-sitekey="6LeMMwYTAAAAACSY-OLibN7rdFHSnY9karY3VXW2"></div>
+ </div>
+ <input type="hidden" name="item_key" value="xxx" />
+ <span>{{PleaseFill}} </span>
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!registerForm.$valid">Sign Up</button>
+
+ <a ui-sref="app.login" class="login">Already have an account?</a>
+
+ </form>
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/register/register.less b/d2ice.att.io/app/main/activation/register/register.less
new file mode 100755
index 00000000..7df0cce9
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/register/register.less
@@ -0,0 +1,100 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.register {
+ .phone-place-holder::-webkit-input-placeholder {
+ opacity: 0.7;
+ }
+ .phone-place-holder::-moz-placeholder {
+ opacity: 0.7;
+ }
+ .phone-place-holder:-moz-placeholder {
+ opacity: 0.7;
+ }
+ .phone-place-holder:-ms-input-placeholder {
+ opacity: 0.7;
+ }
+
+ .register-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ a,
+ a:hover,
+ a:active,
+ a:focus
+ {
+ .m_14_r;
+ cursor: pointer;
+ }
+
+ a.login, a.login:hover{
+ .m_14_r;
+ float: right;
+ margin: 5px 0 0 0;
+ }
+
+ a.login{
+ text-decoration: underline;
+ }
+
+ .form-group {
+ a {
+ font-size:14px;
+ text-decoration:underline;
+
+ &:hover {
+ font-size:14px;
+ }
+ }
+ }
+}
diff --git a/d2ice.att.io/app/main/activation/register/register.module.js b/d2ice.att.io/app/main/activation/register/register.module.js
new file mode 100755
index 00000000..e463ceb1
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/register/register.module.js
@@ -0,0 +1,67 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.register', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.register', {
+ url : '/signUp',
+ views : {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller : 'MainController as vm'
+ },
+ 'content@app.register': {
+ templateUrl: 'main/activation/register/register.html',
+ controller : 'RegisterController as vm'
+ }
+ },
+ bodyClass: 'register'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/resendActivation/resendActivation.controller.js b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.controller.js
new file mode 100755
index 00000000..374d9005
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.controller.js
@@ -0,0 +1,79 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.activation.resendActivation')
+ .controller('resendActivationController', ["usersService", "toastService", "$rootScope", "$state", "$log",
+ resendActivationController]);
+
+ function resendActivationController(usersService, toastService, $rootScope, $state, $log) {
+ var vm = this;
+ vm.data = [];
+
+ var init = function() {
+ $rootScope.headerTitle = "Activate Your Account";
+ $rootScope.headerSubTitle = "Please follow the instructions below to activate your account.";
+
+ if ($state.params.message){
+ toastService.setToast($state.params.message, 'danger');
+ }
+
+ vm.activated=false; //True false
+ vm.showHideMsg = false;
+ vm.showHideWait = false;
+ };
+
+ vm.submitForm = function () {
+ $rootScope.ice.loader.show = true;
+ usersService.resendActivationMail()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/activation/resendActivation/resendActivation.html b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.html
new file mode 100755
index 00000000..cc2cc91b
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.html
@@ -0,0 +1,61 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".active-form"></ice-loader>
+
+<div class="container">
+
+ <div class="row">
+ <div class="col-md-2"></div>
+ <form name="resendActivationForm" ng-submit="vm.submitForm()" novalidate class="active-form col-md-8">
+ <p>
+ You have successfully created your account! To begin using this site you will need to activate your account via the email we have just sent to your email address.
+ <br/><br/>
+ Please note that sometimes activation emails end up in users spam/junk folders, so please check there.
+ <br/><br/>
+ If you have not received it, please click the resend the Activation Email button below.
+ </p>
+ <button type="submit" class="btn btn-primary">Resend Activation Email</button>
+
+ <div class="leftLink">
+ Still having problems? Please contact us at <a href="mailto:d2ice@att.com">d2ice@att.com</a>
+ </div>
+ </form>
+ <div class="col-md-2"></div>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/activation/resendActivation/resendActivation.less b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.less
new file mode 100755
index 00000000..5d2277cb
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.less
@@ -0,0 +1,67 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.resend-activation {
+
+ .active-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ .leftLink{
+ padding-top:5px;
+ width:50%;
+ text-align:left;
+ float:left;
+
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/resendActivation/resendActivation.module.js b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.module.js
new file mode 100755
index 00000000..90a28339
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resendActivation/resendActivation.module.js
@@ -0,0 +1,68 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.resendActivation', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.resend_activation', {
+ url : '/resendActivation',
+ views : {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller : 'MainController as vm'
+ },
+ 'content@app.resend_activation': {
+ templateUrl: 'main/activation/resendActivation/resendActivation.html',
+ controller : 'resendActivationController as vm'
+ }
+ },
+ params: {message: null},
+ bodyClass: 'resend-activation'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/resetPassword/resetPassword.controller.js b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.controller.js
new file mode 100755
index 00000000..9702c2e4
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.controller.js
@@ -0,0 +1,95 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.activation.resetPassword')
+ .controller('ResetPasswordController', ["$state", "usersService", "toastService", "$rootScope", "$window",
+ "$log", ResetPasswordController]);
+
+ function ResetPasswordController($state, usersService, toastService, $rootScope, $window,$log)
+ {
+ var vm = this;
+ vm.data = {};
+ var ngReq = true;
+ $rootScope.headerTitle = "Reset Your Password";
+ $rootScope.headerSubTitle = "Please follow the instructions below to reset your password";
+
+ if($state.params.message!=undefined && $state.params.message!=""){
+ toastService.setToast($state.params.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.warn($state.params.message);
+ }
+
+ vm.submitForm = function()
+ {
+ $rootScope.ice.loader.show = true;
+ var jsonEmail =
+ {
+ email : vm.data.email
+ };
+ toastService.clearToast()
+ usersService.sendResetPwdInstructions(jsonEmail)
+ .then(function (response) {
+ if (response.status === 200) {
+ toastService.setToast('An email with detailed instructions on how to reset your password was sent to your Email.', 'success');
+ ngReq = false;
+ vm.data.email = "";
+ $rootScope.ice.loader.show = false;
+ }
+ else
+ {
+ toastService.setToast('Error sending reset password instructions email.', 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error)
+ {
+ toastService.setToast(error.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ });
+ };
+
+ vm.sendMail = function()
+ {
+ $window.open("mailto:d2ice@att.com","_self");
+ }
+ }
+})();
diff --git a/d2ice.att.io/app/main/activation/resetPassword/resetPassword.html b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.html
new file mode 100755
index 00000000..41d90a69
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.html
@@ -0,0 +1,64 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".resetPassword-form"></ice-loader>
+
+<div class="container">
+
+ <div class="row">
+ <div class="col-md-2"></div>
+ <form name="resetPasswordForm" ng-submit="vm.submitForm()" novalidate class="resetPassword-form col-md-8">
+ <div class="form-group" ng-class="{ 'has-error' : resetPasswordForm.email.$invalid && !resetPasswordForm.email.$pristine }">
+ <label class="ice-form-label required">Email</label>
+ <input type="email" name="email" class="form-control" ng-model="vm.data.email" maxlength="254" required>
+ <div class="ice-form-error" data-ng-show="resetPasswordForm.email.$error">
+ <span ng-show="resetPasswordForm.email.$error.required && !resetPasswordForm.email.$pristine && ngReq">Email is a required field.</span>
+ <span ng-show="resetPasswordForm.email.$invalid && !resetPasswordForm.email.$error.required && !resetPasswordForm.email.$pristine">Enter a valid email.</span>
+ </div>
+ </div>
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!resetPasswordForm.$valid">Send Instructions</button>
+
+ <div class="leftLink">
+ Still having problems? Please contact <a ng-click="vm.sendMail()">d2ice@att.com</a>
+ </div>
+
+ </form>
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/resetPassword/resetPassword.less b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.less
new file mode 100755
index 00000000..18f79364
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.less
@@ -0,0 +1,84 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.resetPassword {
+
+ .resetPassword-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ a.register {
+ text-decoration: underline;
+ float: right;
+ margin: 10px 0 0 0;
+ }
+
+ .leftLink {
+ width:100%;
+ padding-top:5px;
+ text-align:left;
+
+ a,
+ a:hover,
+ a:active,
+ a:focus
+ {
+ .m_14_r;
+ cursor: pointer;
+ }
+
+ a{
+ text-decoration:underline;
+ }
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/resetPassword/resetPassword.module.js b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.module.js
new file mode 100755
index 00000000..792e51dd
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/resetPassword/resetPassword.module.js
@@ -0,0 +1,68 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.resetPassword',[])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.resetPassword', {
+ url: '/resetPassword',
+ views: {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller: 'MainController as vm'
+ },
+ 'content@app.resetPassword': {
+ templateUrl: 'main/activation/resetPassword/resetPassword.html',
+ controller: 'ResetPasswordController as vm'
+ }
+ },
+ params: {message: null},
+ bodyClass: 'resetPassword'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/terms/terms.controller.js b/d2ice.att.io/app/main/activation/terms/terms.controller.js
new file mode 100755
index 00000000..9eabdc25
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/terms/terms.controller.js
@@ -0,0 +1,56 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.terms')
+ .controller('TermsController', ["$rootScope", TermsController]);
+
+ function TermsController($rootScope)
+ {
+ var vm = this;
+ vm.data = {};
+
+ $rootScope.headerTitle = "Terms of Service";
+ $rootScope.headerSubTitle = "Last updated 2016-06-10";
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/terms/terms.html b/d2ice.att.io/app/main/activation/terms/terms.html
new file mode 100755
index 00000000..fd39eb99
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/terms/terms.html
@@ -0,0 +1,105 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="container">
+
+ <div class="row">
+ <div class="col-md-2"></div>
+
+ <form name="termsForm" class="terms-form col-md-8">
+
+ <p>The {{'serviceProvider.name' | i18next}} Domain 2 ICE ({{'program.name' | i18next}}) are maintained by {{'serviceProvider.name' | i18next}} Foundry (“{{'serviceProvider.name' | i18next}}”) for use by any one interested in incubating or validating their Virtual Function (VF) against our Domain 2.0 architecture. When you or any other person, employee or representative authorized by you (collectively referred to as “You” or “Your”) use the {{'serviceProvider.name' | i18next}} Domain 2.0 ICE, You accept the Terms and Conditions stated below (the “Terms and Conditions”).  Do not use the {{'program.name' | i18next}} if You do not agree with these Terms and Conditions.</p>
+
+ <ol>
+
+ <li><p><strong>Content Ownership.</strong> The {{'serviceProvider.name' | i18next}} Domain 2.0 ICE (“{{'program.name' | i18next}}”) provide You access to technical resources, such as product, service, and network information, and community forums and contain trademarks, service marks, logos, copyrights, other intellectual property, including, without limitation, text, data, graphics, audio, video, and product, service, network, process, and technical descriptions and information (collectively, the "Content") owned by, licensed to, and/or supplied to {{'serviceProvider.name' | i18next}}. As between You, {{'serviceProvider.name' | i18next}} its third party Content licensors and suppliers, {{'serviceProvider.name' | i18next}} or such third party Content licensors and suppliers are the sole owners of all Content on the {{'program.name' | i18next}}, including, without limitation, all copyrights, trademarks, service marks, patent, trade secret, and other intellectual property rights thereto. {{'serviceProvider.name' | i18next}} is the sole owner of the {{'program.name' | i18next}}. The {{'program.name' | i18next}} may contain links and references to third-party websites, which are provided for the convenience.  {{'serviceProvider.name' | i18next}} is not responsible for the content or information contained on such third party websites</p></li>
+
+ <li><p><strong>Account Registration.</strong> In order to use certain features of the {{'program.name' | i18next}}, You will be asked to create a user Account and password (an "Account") and provide certain information ("Registration Data"). You agree: (i) that the Registration Data You provide will be true, accurate, current and complete at the time You provide it; (ii) to maintain and update such Registration Data to keep it true, accurate, current and complete; and (iii) that {{'serviceProvider.name' | i18next}} may contact You and require You to confirm some or all of Your Registration Data before using certain features of the {{'program.name' | i18next}}. You are responsible for maintaining the confidentiality of Your Account credentials and for all activities, charges and/or liabilities that occur from Your Account, whether or not authorized by You. You must immediately notify {{'serviceProvider.name' | i18next}} of any unauthorized use of Your Account credentials or any other breach of security of which You become aware. We will not be liable for any loss or damage arising from Your failure to comply with this section.</p></li>
+
+ <li><p><strong>Limited License.</strong> Subject to Your compliance with these Terms and Conditions, and in consideration of Your promises reflected herein, {{'serviceProvider.name' | i18next}} grants to You a limited, non-exclusive, revocable, non-transferable license to access, view and use the {{'program.name' | i18next}}, including the Content contained therein, subject to any access restrictions or fees {{'serviceProvider.name' | i18next}} may establish from time to time. You may download, view, copy and print the Content solely for Your own use; provided that, without the express prior written permission of {{'serviceProvider.name' | i18next}}, such Content may not be adapted, modified, published, displayed, transmitted, transferred, shared with or disseminated to anyone for any purpose which is inconsistent with the business purpose of these {{'program.name' | i18next}}, facilitates unfair competition with these {{'program.name' | i18next}}, or exploits these {{'program.name' | i18next}} in any way or which is inappropriate under applicable US or international law. You are not permitted to distribute, assign, transfer or sublicense any right to use the {{'program.name' | i18next}}, either in whole or in part, to any third party. </p></li>
+
+ <li><p><strong>Use Restrictions.</strong> Notwithstanding the foregoing license grant, You may not resell, redistribute, broadcast or transfer the Content or use the Content in a searchable, machine-readable database or file except through the authorized access to these {{'program.name' | i18next}}. Unless separately and specifically authorized in writing by {{'serviceProvider.name' | i18next}}, You may not rent, lease, sublicense, distribute, transfer, copy, reproduce, publicly display, publish, adapt, modify, create derivative works, mine, harvest, collect, store or time-share these {{'program.name' | i18next}}, any part thereof, or any of the Content received or accessed therefrom to or through any person or entity.  Access to any restricted area of the {{'program.name' | i18next}} without the authorization of {{'serviceProvider.name' | i18next}} is prohibited. You agree to use these {{'program.name' | i18next}}, including, without limitation, any restricted area, and the Content contained herein for lawful purposes only. You may not utilize logos, marks, or other distinctive graphics, video, or audio material in Your links, without {{'serviceProvider.name' | i18next}}’s express written permission, which {{'serviceProvider.name' | i18next}} may withhold in its discretion. You may not link in any manner reasonably likely to (i) imply affiliation with or endorsement or sponsorship by {{'serviceProvider.name' | i18next}}, (ii) cause confusion, mistake, or deception, (iii) dilute {{'serviceProvider.name' | i18next}}'s trademarks or service marks, or (iv) otherwise violate state or federal law. In addition, You may only link to the home page of the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}} unless {{'serviceProvider.name' | i18next}} authorizes You to do otherwise. You may not use spiders, robots, data mining techniques or other automated devices or programs to catalog, download or programs to catalog, download or otherwise reproduce, store or distribute Content available on the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}}.  You may not use any such automated means to manipulate the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}} or attempt to exceed the limited authorization and access granted to You under these Terms and Conditions.  You may not resell use of, or access to, the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}} to any third party.
+
+ <li><p><strong>Forums.</strong> {{'serviceProvider.name' | i18next}} may make forums available within the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}} to help developers request and provide development help and share tips.  By submitting comments, posts, content, information, or messages (“Posts”) to such forums, You represent and warrant that: (i) You own and control all rights to the content in Your Posts, that You transmit or otherwise make available, or You have the lawful right to distribute, reproduce, and provide such content; (ii) the Posts are accurate and not misleading; and (iii) providing such Posts does not: (a) violate this Agreement or (b) violate the rights of, or cause any injury to, any person or entity. Further, You grant us a royalty-free, perpetual, irrevocable license to use such Posts.  Also, You understand and agree that {{'serviceProvider.name' | i18next}} retains the right to reformat, excerpt or translate any Posts submitted by You. You understand and agree that {{'serviceProvider.name' | i18next}} will not be liable for any Posts publicly posted or privately transmitted on these Web Sites. You understand and agree that we cannot guarantee the identity, statements or representations of any other users with whom You may interact in the course of using these Web Sites. Additionally, we cannot guarantee that any Posts obtained from our users or otherwise, is accurate, complete, authentic, current or reliable. Your use of the forums, if any, will further be governed by the {{'serviceProvider.name' | i18next}} Community Rules available for review within the forums.  Those rules are incorporated into these Terms and Conditions by this reference.  Users should be aware that forums and discussion groups are public and not private communications. Further, users acknowledge that Postings by other users are not endorsed by {{'serviceProvider.name' | i18next}}, and that such Posts shall not be considered as having been reviewed, screened or approved by {{'serviceProvider.name' | i18next}}.</p>
+
+ <p>You agree not to submit or transmit any Post that (a) is libelous, defamatory, vulgar or obscene, pornographic, sexually offensive or explicit, harmful or harassing, threatening, hateful, racially, culturally, ethnically or otherwise objectionable or offensive, discriminatory or abusive; (b) violates any law or regulation or the rights of others; (c) infringes any copyright, trademark or other intellectual property right, or any proprietary or personal rights or confidentiality obligations of others; or (d)  is a solicitation for funding, advertising or solicitation for goods or services; or (e) (iv) which is used to unlawfully collude against another person in restraint of trade and competition.  You are solely responsible and liable for any such activity, behavior, use and conduct.  This means that You, and not {{'serviceProvider.name' | i18next}} or its, suppliers, or licensors, are entirely responsible for all Posts You submit or transmit.  {{'serviceProvider.name' | i18next}} reserves the right to filter, edit, or control all Your Posts and does not guarantee the accuracy, integrity or quality of Your Post.  Under no circumstances will {{'serviceProvider.name' | i18next}} or its suppliers, or licensors be liable in any way to You for any Posts, including, but not limited to, any errors or omissions in any content, information, or messages, or any loss or damage of any kind incurred as a result of the use of any such content, information or messages posted, emailed, transmitted.  You shall be solely liable for any damages resulting from any infringement of copyright, trademark or other proprietary right, or any other harm resulting from Your Post to a forum.  {{'serviceProvider.name' | i18next}} does not and cannot review every Post by You on forums and is not responsible for any Post.  {{'serviceProvider.name' | i18next}} reserves the right to delete, move or edit, at its sole discretion, any Post that does not comply with this paragraph. You acknowledge that any Post may be edited, removed, modified, published, transmitted and displayed by {{'serviceProvider.name' | i18next}}.   {{'serviceProvider.name' | i18next}} is under no obligation to use any Post you transmit or submit. You agree that {{'serviceProvider.name' | i18next}} is not under any obligation of confidentiality, express or implied, with respect to Your Post. <p>
+
+ <p>Any Post, comments, content, information or materials sent to us, including, but not limited to, data,  ideas, answers, questions, comments, suggestions, feedback or the like,  (collectively, "Feedback"), is non-confidential and shall become our sole property. We shall have no obligation to You of any kind, monetary or non-monetary, with respect to such Feedback and shall be free to reproduce, use, disclose, exhibit, display, transform, create derivative works from and distribute the Feedback to others without limitation or obligation.  You acknowledge that {{'serviceProvider.name' | i18next}} has absolutely no liability for alleged infringement or misappropriation in connection with such information/Post. The submission of such information/Post to {{'serviceProvider.name' | i18next}} will in no way prevent, or require, the purchase, manufacture or use of any products, services, plans or ideas by {{'serviceProvider.name' | i18next}} for any purpose whatsoever.</p></li>
+
+ <li><p><strong>Consent to Monitoring and Disclosure.</strong> You acknowledge that {{'serviceProvider.name' | i18next}} reserves the right, and may from time to time, monitor Your access and use of the {{'program.name' | i18next}} and Your Posts. {{'serviceProvider.name' | i18next}}, at its sole discretion and without further notice to You, may (but is not obligated to) review, censor or prohibit the transmission or receipt of any Post which {{'serviceProvider.name' | i18next}} deems inappropriate or that violates these Terms or Conditions or any {{'serviceProvider.name' | i18next}} Policy. During monitoring, Posts may be examined, recorded, copied, and used for authorized purposes. Your use of the {{'program.name' | i18next}}, authorized or unauthorized, constitutes consent to such monitoring. </p></li>
+
+ <li><p><strong>Copyright Complaints.</strong> {{'serviceProvider.name' | i18next}} respects the intellectual property rights of others. If You believe that Your work has been copied and has been posted, stored or transmitted by or through the {{'program.name' | i18next}} in a way that constitutes copyright infringement, please submit a notification pursuant to the Digital Millennium Copyright Act ("DMCA") in accordance with the process detailed at http://www.att.net/general-info/claims.html and directed to:  Designated Agent: Manager of Security & Copyright Infringement, 1800 Perimeter Park Drive, Suite 100, Morrisville, NC 27560, Phone: (919) 319-5737, Fax: (919) 319-8154, E-mail: copyright@att.com.</p></li>
+
+ <li><p><strong>Privacy.</strong> It is the policy of {{'serviceProvider.name' | i18next}} to respect the privacy of its customers and any persons who visit its web sites.  For this reason, {{'serviceProvider.name' | i18next}} has established a Privacy Policy, the terms of which are available for Your review at:  www.att.com/privacy.  Subject to these Terms and Conditions, the relevant provisions of said Privacy Policy are incorporated by this reference.</p></li>
+
+ <li><p><strong>Subject to Change.</strong> {{'serviceProvider.name' | i18next}} reserves the right to modify these Terms and Conditions, the Privacy Statement, and the business policies and practices associated with the use of these {{'program.name' | i18next}}. Such modifications may include, without limitation, implementation of user priorities, implementation of rules for use by You, and discontinuance of functional aspects of the {{'program.name' | i18next}}, and changes in prices. {{'serviceProvider.name' | i18next}} may also add, withdraw or modify any Content contained within these {{'program.name' | i18next}} at any time in its sole discretion.  Your use of these {{'program.name' | i18next}} is Your agreement to be bound by such changes.</p></li>
+
+ <li><p><strong>Term.</strong> The period during which You are entitled to use the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}} (“Term”) begins on the date upon which You agree to these Terms and Conditions. {{'serviceProvider.name' | i18next}} may revoke or terminate the License granted in its sole discretion at any time. Without limiting the generality of the foregoing, we may revoke or terminate the License if You: (i) breach any obligation in these Terms and Conditions or in any other agreement between You and us, (ii) violate any policy or guideline applicable to the {{'program.name' | i18next}}, Content, or any other {{'serviceProvider.name' | i18next}} service, or (iii) use these {{'program.name' | i18next}} or Content specifically authorized in these Terms and Conditions, without our prior written permission.   Additionally, either You or {{'serviceProvider.name' | i18next}} may terminate this License at any time without cause, but termination of this License will not relieve You of the obligations under these Terms and Conditions that You assumed by using these {{'program.name' | i18next}}.</p></li>
+
+ <li><p><strong>Termination of {{'serviceProvider.name' | i18next}} Web Site and Service.</strong> {{'serviceProvider.name' | i18next}} may discontinue, terminate, suspend or shut down the {{'serviceProvider.name' | i18next}} Web Site, {{'program.name' | i18next}}, particular {{'program.name' | i18next}}, and/or remove Content at any time and for any or no reason. We are not obligated to give notice of such discontinuation, termination, suspension, removal or shut-down.  Your License shall automatically terminate, if {{'serviceProvider.name' | i18next}} discontinues, terminates, suspends or shut downs the {{'serviceProvider.name' | i18next}} Web Site.</p></li>
+
+ <li><p><strong>Application Agreement(s).</strong>  These Terms and Conditions relate solely to Your access to, and use of, the {{'program.name' | i18next}} and Content.  No commitments, obligations, terms or restrictions are imposed upon either party with respect to any Application(s) by virtue of these Terms and Conditions.  Any agreements between You and {{'serviceProvider.name' | i18next}} regarding Applications will be governed by a separate agreement(s).</p></li>
+
+ <li><p><strong>Trademarks. </strong>The {{'serviceProvider.name' | i18next}} name, trade names, trademarks and logo, as well as all related product and service names, design marks and slogans, are the property of {{'serviceProvider.name' | i18next}}, and may not be used by You for any purpose unless specifically authorized in writing, and in advance, by {{'serviceProvider.name' | i18next}}.  All other names, marks and logos are the names, marks and logos of their respective owners.  All right, title and interest, including, without limitation, all copyrights, trademarks and other intellectual property rights, in the {{'program.name' | i18next}} and Content belong to {{'serviceProvider.name' | i18next}}, its licensors, or suppliers.</p></li>
+
+ <li><p><strong>Connectivity; Delay in Service.</strong> You are responsible for all costs and expenses associated with establishing and maintaining Your connection to these {{'program.name' | i18next}}. Neither {{'serviceProvider.name' | i18next}}, nor any of its licensors or suppliers (including its and their officers, directors, managers, employees, affiliates, agents, or representatives) shall be liable for any loss or liability resulting, directly or indirectly, from delays or interruptions due to electric or mechanic equipment failures,  interconnection problems, defects, weather, strikes, walkouts, fire, acts of nature, riots, armed conflicts, acts of war or other like causes. {{'serviceProvider.name' | i18next}} shall have no responsibility to provide You access to these {{'program.name' | i18next}} during any such interruption.</p></li>
+
+ <li><p><strong>Limitation of Liability.</strong> YOU ASSUME FULL RESPONSIBILITY FOR IMPLEMENTING SUFFICIENT PROCEDURES AND CHECKS TO SATISFY YOUR REQUIREMENTS FOR ACCURACY AND SUITABILITY OF THESE {{'program.name' | i18next}} AND THE CONTENT, AND FOR MAINTAINING ANY MEANS WHICH YOU MAY REQUIRE FOR THE RECONSTRUCTION OF LOST DATA OR SUBSEQUENT MANIPULATIONS OR ANALYSES OF THE CONTENT PROVIDED UNDER THIS AGREEMENT. YOU ACKNOWLEDGE AND AGREE THAT {{'serviceProvider.name' | i18next}}, ITS AFFILIATES, LICENSORS, AND SUPPLIERS (INCLUDING ITS OR THEIR OFFICERS, DIRECTORS, MANAGERS, EMPLOYEES, AFFILIATES, AGENTS,  AND REPRESENTATIVES (“LIMITED LIABILITY PARTIES” FOR THE REMAINDER OF THIS PARAGRAPH) WILL NOT BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM AN INABILITY TO ACCESS OR USE THE {{'program.name' | i18next}} AND/OR CONTENT AVAILABLE ON OR ACCESSIBLE THROUGH THE {{'program.name' | i18next}}. THESE LIMITATIONS ON THE LIABILITY OF THE LIMITED LIABILITY PARTIES APPLY WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER TORTIOUS ACTION ARISING OUT OF OR IN CONNECTION WITH THE CONTENT AVAILABLE ON OR ACCESSIBLE THROUGH THE {{'program.name' | i18next}} AND THE LIMITATIONS APPLY EVEN IF LIMITED LIABILITY PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  YOU AGREE AND ACKNOWLEDGE THAT THESE LIMITATIONS ON THE LIABILITY OF LIMITED LIABILITY PARTIES REFLECT A REASONABLE ALLOCATION OF RISK AND THAT SUCH ALLOCATION OF RISK IS A SIGNIFICANT INDUCMENT FOR {{'serviceProvider.name' | i18next}} TO ALLOW YOU TO ACCESS AND USE THE {{'program.name' | i18next}}.  IN NO EVENT WILL THE AGGREGATE, TOTAL LIABILITY OF THE LIMITED LIABILITY PARTIES FOR DAMAGES, INJURY, LOSSES AND CAUSES OF ACTION, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM OR RELATING TO ACCESS OR USE OF THE {{'program.name' | i18next}} EXCEED TEN DOLLARS ($10.00). BECAUSE SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY IN THOSE JURISDICTIONS. IN SUCH JURISDICTIONS, THE LIMITED LIABILITY PARTIES¿ LIABILITY IS LIMITED TO THE GREATEST EXTENT PERMITTED BY LAW.</p></li>
+
+ <li><p><strong>Disclaimer of Warranties.</strong> BROWSING AND USE OF THE {{'program.name' | i18next}} AND CONTENT IS AT YOUR OWN RISK. YOU ACKNOWLEDGE THAT INACCURACIES MAY OCCUR, AND THAT {{'serviceProvider.name' | i18next}} AND ITS LICENSORS AND SUPPLIERS DO NOT WARRANT THE ACCURACY OR SUITABILITY OF THE {{'program.name' | i18next}} AND CONTENT FOR ANY PURPOSE. FURTHERMORE, THE {{'program.name' | i18next}} AND CONTENT MAY CONTAIN LINKS TO THIRD PARTY WEBSITES NOT UNDER THE CONTROL OR OPERATION OF {{'serviceProvider.name' | i18next}}. {{'serviceProvider.name' | i18next}} PROVIDES ANY SUCH LINKS ONLY AS A CONVENIENCE FOR YOU AND IS NOT RESPONSIBLE FOR ANY SUCH LINKED SITES, THE CONTENT ON ANY SUCH LINKED SITES OR A SITE LINKED TO OR FROM ANY SUCH LINKED SITES. YOU ASSUME ALL RESPONSIBILITY AND RISK FOR USE OF THE {{'program.name' | i18next}}, THE CONTENT AND THE INTERNET GENERALLY. ACCESS TO AND/OR USE OF THE {{'program.name' | i18next}} AND CONTENT PROVIDED ON OR AVAILABLE THROUGH THE {{'program.name' | i18next}} ARE PROVIDED OR MADE AVAILABLE ON AN ¿AS IS¿ AND ¿AS AVAILABLE¿ BASIS WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, NON-INFRINGEMENT OR IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. NO ADVICE OR INFORMATION GIVEN BY {{'serviceProvider.name' | i18next}}, ITS AFFILIATES OR IT LICENSORS, OR SUPPLIERS WILL CREATE ANY WARRANTY. FURTHER, NEITHER {{'serviceProvider.name' | i18next}} NOR ITS AFFILIATES, LICENSORS, OR SUPPLIERS WARRANT THAT CONTENT PROVIDED ON OR AVAILABLE THROUGH THE {{'program.name' | i18next}} WILL BE UN-INTERRUPTABLE, ACCURATE, COMPLETE, USEFUL, FUNCTIONAL OR ERROR FREE, OR THAT CONTENT OR MATERIAL PROVIDED ON OR AVAILABLE THROUGH THE {{'program.name' | i18next}} IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. ANY CONTENT AVAILABLE ON OR ACCESSIBLE THROUGH THE {{'program.name' | i18next}} MAY INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS.</p></li>
+
+ <li><p><strong>Indemnification.</strong> You agree to release, indemnify, defend and hold {{'serviceProvider.name' | i18next}}, its affiliates and/or its licensors, and suppliers and their affiliates, officers, directors, managers, employees, agents and representatives  harmless from losses, damages, claims, demands, suits, liabilities, fines, penalties, and expenses, including reasonable attorneys’ fees, made by any third party due to or arising out of Your access to or use of the {{'serviceProvider.name' | i18next}} {{'program.name' | i18next}} or the Content, the violation by You of these Terms and Conditions, the infringement by You of any intellectual property or other right of any person or entity, and/or any Posts You submit or transmit to any Forums.
+
+ <li><p><strong>Severability.</strong> If any of these Terms and Conditions are held to be invalid or unenforceable with respect to a party, the remainder of these Terms and Conditions, or the application of such provision to persons other than those to whom it is held invalid or unenforceable shall not be affected and each remaining provision of these Terms and Conditions shall be valid and enforceable to the fullest extent permitted by law.</p></li>
+
+ <li><p><strong>Publicity.</strong> Nothing contained in these Terms and Conditions will be construed as granting to You any right to use or refer to in advertising, publicity, promotion, marketing or other activities, any name, trade name, trade or service mark or any other designation of {{'serviceProvider.name' | i18next}}, its licensors, or suppliers, including any contraction, abbreviation or simulation of any kind of the foregoing, unless specifically authorized in writing, and in advance, by {{'serviceProvider.name' | i18next}}, its licensors, or suppliers.</p></li>
+
+ <li><p><strong>International Use.</strong> {{'serviceProvider.name' | i18next}} controls and operates these {{'program.name' | i18next}} from its offices in the United States of America. {{'serviceProvider.name' | i18next}} does not represent that Content accessible via the {{'program.name' | i18next}} is appropriate or available for use in all geographic locations, especially some locations outside the United States, and accessing such from certain locations may be illegal and prohibited.  If You access or use such Content from such locations, You are acting on Your own initiative, and {{'serviceProvider.name' | i18next}} is not responsible for Your compliance with local laws or other applicable legal or regulatory restrictions.  You agree that You will not access or use the {{'program.name' | i18next}} or Content where prohibited by applicable law, rule or regulation.  You represent and warrant that You are not (a) located in any country that is subject to a U.S. Government embargo, or that has been designated by the U.S. Government as a “terrorist supporting” country, or (b) listed on any U.S. Government list of prohibited or restricted parties including the Treasury Department’s list of Specially Designated Nationals or the U.S. Department of Commerce Denied Persons List or Entity List. You also agree that You will not use the {{'program.name' | i18next}} or Content for any purposes prohibited by United States law.</p></li>
+
+ <li><p><strong>Governing Law.</strong> The laws of the State of Texas, excluding its conflicts-of-law rules, shall govern this Agreement and Your use of these {{'program.name' | i18next}} and Content. You agree that any claim or dispute with {{'serviceProvider.name' | i18next}} relating in any way to Your use of the {{'program.name' | i18next}} or Content shall be commenced and heard in the state or federal courts of the State of Texas, County of Dallas, and You agree and expressly consent to the exercise of personal jurisdiction in the courts of the State of Texas, in connection with any such dispute.  You and {{'serviceProvider.name' | i18next}} agree that any cause of action arising out of or related to or use of the {{'program.name' | i18next}} or Content  must commence within one (1) year after the cause of action arises.  Otherwise, such cause of action is permanently barred.  Because some jurisdictions do not permit such time bars, this limitation may not apply in all situations.</p></li>
+
+ <li><p><strong>Miscellaneous.</strong> {{'serviceProvider.name' | i18next}}’s failure to exercise or enforce any right or provision of these Terms and Conditions will not constitute a waiver of such right or provision unless acknowledged and agreed to by {{'serviceProvider.name' | i18next}} in writing.  Neither the course of conduct between the parties nor trade practice will act to modify any provision of these Terms and Conditions. </p></li>
+
+ </ol>
+
+ </form>
+
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/terms/terms.less b/d2ice.att.io/app/main/activation/terms/terms.less
new file mode 100755
index 00000000..e809c9d6
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/terms/terms.less
@@ -0,0 +1,65 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.terms {
+
+ .terms-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ a.register {
+ text-decoration: underline;
+ float: right;
+ margin: 10px 0 0 0;
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/terms/terms.module.js b/d2ice.att.io/app/main/activation/terms/terms.module.js
new file mode 100755
index 00000000..68a429cf
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/terms/terms.module.js
@@ -0,0 +1,68 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.terms', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.terms', {
+ url: '/terms',
+ views: {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller: 'MainController as vm'
+ },
+ 'content@app.terms': {
+ templateUrl: 'main/activation/terms/terms.html',
+ controller: 'TermsController as vm'
+ }
+ },
+ params: {message: null},
+ bodyClass: 'terms'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/updatePassword/updatePassword.controller.js b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.controller.js
new file mode 100755
index 00000000..364dcc77
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.controller.js
@@ -0,0 +1,95 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.updatePassword')
+ .controller('UpdatePasswordController', ["$state", "usersService", "localStorageService", "$rootScope", "toastService", "$window", UpdatePasswordController]);
+
+ function UpdatePasswordController($state, usersService, localStorageService, $rootScope, toastService, $window) {
+
+ var vm = this;
+ vm.data = {};
+
+ var ngReq = true;
+
+ $rootScope.headerTitle = "Update Your Password";
+ $rootScope.headerSubTitle = "Please follow the instructions below to update your password";
+
+ vm.submitForm = function()
+ {
+ $rootScope.ice.loader.show = true;
+ var jsonPasswordConfirm =
+ {
+ password : vm.data.password,
+ confirm_password : vm.data.confirm_password
+ }
+
+ usersService.updatePassword(usersService.getUserData().uuid, jsonPasswordConfirm)
+ .then(function (response) {
+ if (response.status === 200) {
+ toastService.setToast('Password was updated Successfully!', 'success');
+ ngReq = false;
+ vm.data.password = "";
+ vm.data.confirm_password = "";
+ $rootScope.ice.loader.show = false;
+ //$timeout(function() { $state.go("app.dashboard"); }, 2000);
+ $state.go('app.dashboard.dashboard', {"messagePass": "Password was updated Successfully!"});
+ }
+ else
+ {
+ toastService.setToast('Error updating your password.', 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ });
+ };
+
+ vm.sendMail = function()
+ {
+ $window.open("mailto:d2ice@att.com","_self");
+ }
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/activation/updatePassword/updatePassword.html b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.html
new file mode 100755
index 00000000..65569cdb
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.html
@@ -0,0 +1,76 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".updatePassword-form"></ice-loader>
+
+<div class="container">
+
+ <div class="row">
+ <div class="col-md-2"></div>
+ <form name="updatePasswordForm" ng-submit="vm.submitForm()" novalidate class="updatePassword-form col-md-8">
+ <div class="form-group" ng-class="{ 'has-error' : updatePasswordForm.password.$invalid && !updatePasswordForm.password.$pristine }">
+ <label class="ice-form-label">Password</label>
+ <input type="password" name="password" class="form-control" ng-model="vm.data.password" maxlength="32" ng-minlength="4" required >
+ <div class="ice-form-error" data-ng-show="updatePasswordForm.password.$error">
+ <span ng-show="updatePasswordForm.password.$error.required && !updatePasswordForm.password.$pristine && ngReq">Password is required field.</span>
+ <span ng-show="updatePasswordForm.password.$error.minlength && ngReq" >Password is too short.</span>
+ <span ng-show="updatePasswordForm.password.$error.maxlength" >Password is too long.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : updatePasswordForm.confirm_password.$invalid && !updatePasswordForm.confirm_password.$pristine }">
+ <label class="ice-form-label">Confirm password</label>
+ <input type="password" name="confirm_password" class="form-control" ng-model="vm.data.confirm_password" maxlength="32" required >
+ <div class="ice-form-error" data-ng-show="updatePasswordForm.confirm_password.$error">
+ <span ng-show="updatePasswordForm.confirm_password.$error.required && !updatePasswordForm.confirm_password.$pristine && ngReq">Confirm password is required field.</span>
+ <span ng-show="!updatePasswordForm.confirm_password.$error.required && updatePasswordForm.confirm_password.$error.noMatch && updatePasswordForm.password.$dirty">Passwords do not match.</span>
+ </div>
+ </div>
+
+
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!updatePasswordForm.$valid">Update Password</button>
+
+ <div class="leftLink">
+ Still having problems? Please contact <a ng-click="vm.sendMail()">d2ice@att.com</a>
+ </div>
+
+ </form>
+ <div class="col-md-2"></div>
+ </div>
+
+</div>
diff --git a/d2ice.att.io/app/main/activation/updatePassword/updatePassword.less b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.less
new file mode 100755
index 00000000..a6524df5
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.less
@@ -0,0 +1,85 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.updatePassword {
+
+ .updatePassword-form {
+ margin-top: 20px;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ a.register {
+ text-decoration: underline;
+ float: right;
+ margin: 10px 0 0 0;
+ }
+
+ .leftLink{
+ padding-top:5px;
+ width:50%;
+ text-align:left;
+ float:left;
+
+ a,
+ a:hover,
+ a:active,
+ a:focus
+ {
+ .m_14_r;
+ cursor: pointer;
+ }
+
+ a{
+ text-decoration:underline;
+ }
+ }
+
+}
diff --git a/d2ice.att.io/app/main/activation/updatePassword/updatePassword.module.js b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.module.js
new file mode 100755
index 00000000..b00e619b
--- /dev/null
+++ b/d2ice.att.io/app/main/activation/updatePassword/updatePassword.module.js
@@ -0,0 +1,68 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.activation.updatePassword', [])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.updatePassword', {
+ url: '/updatePassword{engagement_uuid: (?:/[^/]+)?}',
+ views: {
+ 'main@': {
+ templateUrl: 'core/layouts/full-page-with-header/full-page-with-header.html',
+ controller: 'MainController as vm'
+ },
+ 'content@app.updatePassword': {
+ templateUrl: 'main/activation/updatePassword/updatePassword.html',
+ controller: 'UpdatePasswordController as vm'
+ }
+ },
+ params: {message: null,messagePass:null},
+ bodyClass: 'updatePassword'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/admin/admin.module.js b/d2ice.att.io/app/main/admin/admin.module.js
new file mode 100755
index 00000000..391461d0
--- /dev/null
+++ b/d2ice.att.io/app/main/admin/admin.module.js
@@ -0,0 +1,89 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.main.admin')
+ .config(config);
+
+ function config($stateProvider) {
+ $stateProvider
+ .state('app.admin', {
+ url: '/admin',
+ views: {
+ 'navigation@app': {
+ templateUrl: 'core/navigation/layouts/admin-navigation/navigation.html',
+ controller: 'adminNavigationController as vm'
+ }
+ },
+ bodyClass: 'nav-admin',
+ resolve: { authenticate: authenticate }
+ })
+ .state('app.admin.checklisttemplate', {
+ url: '/admin/checklist-template',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/admin/checklist-template/checklist-template.html',
+ controller: 'checklistTemplateController as vm'
+ }
+ },
+ params: {template_uuid: undefined},
+ bodyClass: 'checklist-template',
+ });
+
+ function authenticate(usersService, $q, $timeout, $state) {
+ var result = usersService.isAdmin(usersService.getUserData());
+
+ if(result === true) {
+ return $q.when();
+ } else {
+ $timeout(function() {
+ $state.go('app.login');
+ });
+ }
+
+ return $q.reject();
+ }
+ }
+
+
+
+})();
diff --git a/d2ice.att.io/app/main/admin/checklist-template/checklist-template.controller.js b/d2ice.att.io/app/main/admin/checklist-template/checklist-template.controller.js
new file mode 100755
index 00000000..e3033544
--- /dev/null
+++ b/d2ice.att.io/app/main/admin/checklist-template/checklist-template.controller.js
@@ -0,0 +1,241 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.main.admin')
+ .controller('checklistTemplateController', ["_", "$scope", "checklistService", "$stateParams", "toastService",
+ "$uibModal", "$log", checklistTemplateController]);
+
+ function checklistTemplateController(_, $scope, checklistService, $stateParams, toastService, $uibModal, $log) {
+ var vm = this;
+ var templateToRevert;
+
+ var init = function(){
+ if ($stateParams['template_uuid']){
+ vm.inlineEditingElements = {};
+ vm.wysiwyg_menu = [
+ ['bold', 'italic', 'strikethrough', 'underline'],
+ ['unordered-list', 'ordered-list', 'outdent', 'indent']
+ ];
+
+ checklistService.getChecklistTemplate($stateParams['template_uuid'])
+ .then(function (response) {
+ if (response.status === 200) {
+ vm.template = response.data;
+ registerWatchers();
+ orderTemplateItems();
+ templateToRevert = angular.copy(response.data);
+ initFirstLineItemSelection();
+ }
+ })
+ .catch(function (err){
+ $log.error("got error with getChecklistTemplate");
+ });
+ }
+ };
+
+ vm.switchElementInlineEditing = function(elementName) {
+ vm.inlineEditingElements[elementName] = !vm.inlineEditingElements[elementName];
+ };
+
+ vm.save = function() {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/general-prompt-modal/general-prompt-modal.html',
+ controller: 'generalPromptModalController',
+ controllerAs: 'vm',
+ resolve: {
+ modalDetails: function () {
+ return {
+ "upper_headline": 'Master Checklist Template: ',
+ "upper_headline_value": vm.template.name,
+ "headline": 'Are you done editing?',
+ "is_message":true,
+ "message": 'Editing a master checklist template will effect all checklists currently ' +
+ 'created of that type and will also restart the validation for all active engagements',
+ "approve": 'Yes',
+ "cancelText": 'No',
+ "is_close_modal_button":false
+ };
+ }
+ }
+ });
+
+ modalInstance.result.then(function (saveApproved) {
+ if(saveApproved) {
+ checklistService.saveChecklistTemplate(vm.template)
+ .then(function (response) {
+ if (response.status === 200) {
+ templateToRevert = angular.copy(vm.template);
+ toastService.setToast("Template was saved successfully.", 'success');
+ }
+ })
+ .catch(function (err){
+ toastService.setToast("Problem occurred while saving template.", 'danger');
+ $log.error("got error with saveChecklistTemplate");
+ });
+ }
+ });
+ };
+
+ vm.cancel = function() {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/general-prompt-modal/general-prompt-modal.html',
+ controller: 'generalPromptModalController',
+ controllerAs: 'vm',
+ resolve: {
+ modalDetails: function () {
+ return {
+ "upper_headline": 'Master Checklist Template: ',
+ "upper_headline_value": vm.template.name,
+ "headline": 'Are you sure you want to revert all changes?',
+ "is_message":false,
+ "approve": 'Yes',
+ "cancelText": 'No',
+ "is_close_modal_button":false
+ };
+ }
+ }
+ });
+
+ modalInstance.result.then(function (revertApproved) {
+ if(revertApproved) {
+ vm.template = angular.copy(templateToRevert);
+ initFirstLineItemSelection();
+ toastService.setToast("All changes discarded.", 'success');
+ }
+ });
+ };
+
+ vm.deleteSection = function(sectionToDelete) {
+ _.remove(vm.template.sections, function(section) {return sectionToDelete === section;});
+ initFirstLineItemSelection();
+ };
+
+ vm.selectLineItem = function(lineItem, section, $event) {
+ if(vm.selectedLineItem != lineItem) {
+ vm.selectedSection = section;
+ vm.selectedLineItem = lineItem;
+ $scope.$$postDigest(function () {
+ // Make extended window follow selected decision line
+ if ($event != undefined)
+ {
+ var line_item_bottom_offset = angular.element($event.target).prop('offsetHeight') + angular.element($event.target).prop('offsetTop');
+ var extendended_item_height = angular.element("#line-item-extended").prop('offsetHeight');
+ var diff_between_elements = line_item_bottom_offset - extendended_item_height;
+ if (diff_between_elements > 0) {
+ angular.element("#line-item-extended").css('margin-top',(20+diff_between_elements) +'px');
+ } else {
+ angular.element("#line-item-extended").css('margin-top','');
+ }
+ }
+ });
+ }
+ };
+
+ vm.addLineItem = function(section) {
+ if(section) {
+ var maxWeight = _.maxBy(section.lineItems, function(lineItem) {return lineItem.weight;}) + 1;
+ var newLineItem = {"uuid": "newEntity",
+ "name": "Untitled line item",
+ "description": "Please add a description",
+ "weight": maxWeight,
+ "validation_instructions": "Please add validation instructions for the line item."};
+
+ section.lineItems.push(newLineItem);
+ }
+ };
+
+ vm.addSection = function() {
+ if(vm.template) {
+ var maxWeight = _.maxBy(vm.template.sections, function(section) {return section.weight;}) + 1;
+ var newSection = {"uuid": "newEntity",
+ "name": "Untitled section",
+ "description": "Section added from portal",
+ "validation_instructions": "valid instructions",
+ "weight": maxWeight,
+ "lineItems": []};
+
+ vm.template.sections.push(newSection);
+ }
+ };
+
+ vm.deleteLineItem = function(lineItemToDelete) {
+ _.remove(vm.selectedSection.lineItems, function(lineItem) {return lineItemToDelete === lineItem;});
+ initFirstLineItemSelection();
+ };
+
+ vm.isSaveInvalid = function() {
+ var result = false;
+ if(vm.template) {
+ result = _.find(vm.template.sections, function(section) { return section.lineItems.length === 0; }) != undefined;
+ }
+
+ return result;
+ };
+
+ var registerWatchers = function() {
+ $scope.$watch('vm.template.name', function(newVal, OldVal){
+ $stateParams.templateName = newVal;
+ }, true);
+ };
+
+ var initFirstLineItemSelection = function () {
+ vm.selectedSection = vm.template.sections && vm.template.sections.length > 0
+ ? vm.template.sections[0]
+ : undefined;
+
+ vm.selectedLineItem = vm.selectedSection ? vm.selectedSection.lineItems[0] : undefined;
+
+ angular.element("#line-item-extended").css('margin-top','');
+ };
+
+ var orderTemplateItems = function() {
+ if(vm.template) {
+ vm.template.sections = _.orderBy(vm.template.sections, 'weight');
+
+ _.forEach(vm.template.sections, function(section) {
+ section.lineItems = _.orderBy(section.lineItems, 'weight');
+ });
+ }
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/admin/checklist-template/checklist-template.html b/d2ice.att.io/app/main/admin/checklist-template/checklist-template.html
new file mode 100755
index 00000000..cea7b11b
--- /dev/null
+++ b/d2ice.att.io/app/main/admin/checklist-template/checklist-template.html
@@ -0,0 +1,174 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<form name="checklistTemplateForm" class="checklist-template" ng-show="vm.template">
+ <div id="cl-header" class="row">
+ <div class="col-sm-8 checklist-template-topic" >
+ <h1 id="cl-title">
+ <span id="edit-template-btn" class="sprite edit-medium edit-checklist" ng-click="vm.switchElementInlineEditing('templateName')"></span>
+ <span class="template-topic">Master Checklist Template:</span>
+ <span ng-if="!vm.inlineEditingElements['templateName']" name="{{vm.template.name}}" class="template-name">{{vm.template.name}}</span>
+ <span class="form-group" ng-class="{ 'has-error' : checklistTemplateForm.editTemplateName.$invalid && checklistTemplateForm.editTemplateName.$dirty }">
+ <input ng-show="vm.inlineEditingElements['templateName']" class="checklist-template-edit-item edit-template-name" type="text" name="editTemplateName" ng-blur="vm.switchElementInlineEditing('templateName')" ng-model="vm.template.name" required ng-minlength="1" ng-maxlength="24">
+ <div class="ice-form-error" data-ng-show="checklistTemplateForm.editTemplateName.$error">
+ <span ng-show="checklistTemplateForm.editTemplateName.$error.required && checklistTemplateForm.editTemplateName.$dirty">Template name is a required field.</span>
+ <span ng-show="checklistTemplateForm.editTemplateName.$error.minlength" class="help-block">Template name is too short.</span>
+ <span ng-show="checklistTemplateForm.editTemplateName.$error.maxlength" class="help-block">Template name is too long.</span>
+ </div>
+ </span>
+ </h1>
+ <div class="topic-description">
+ Editing a master checklist template will affect all checklists currently created of that type
+ and will also restart the validation for all active engagements.
+ </div>
+ </div>
+ <span class="col-sm-4 cl-action-buttons-frame">
+ <div id="state-actions" class="row">
+ <div class="save-button col-md-6"><button class="btn btn-gradient-success" ng-click="vm.save() " data-ng-disabled="checklistTemplateForm.$invalid || vm.isSaveInvalid()" id="save-button">Save</button></div>
+ <div class="col-md-6"><button id="state-actions-btn-reject" class="btn btn-gradient-danger" ng-click="vm.cancel()" id="cancel-button">Cancel</button></div>
+ </div>
+ </span>
+ </div>
+ <article class="row" ng-class="blocked-area" id="checklist-main-section" >
+ <ul class="col-md-6" id="line-item-list">
+ <li data-ng-repeat="section in vm.template.sections">
+ <h2>
+ <span class="section-topic">Section {{$index+1}}: </span><span ng-show="!vm.inlineEditingElements[section.$$hashKey]">{{section.name}}</span>
+ <span class="form-group" ng-class="{ 'has-error' : checklistTemplateForm.editSectionName{{$index}}.$invalid && checklistTemplateForm.editSectionName{{$index}}.$dirty }">
+ <input ng-show="vm.inlineEditingElements[section.$$hashKey]" id="edit-section-input-{{$index}}" class="checklist-template-edit-item edit-section-name" type="text" name="editSectionName{{$index}}" ng-blur="vm.switchElementInlineEditing(section.$$hashKey)" ng-model="section.name" required ng-minlength="1" ng-maxlength="64">
+ <span class="edit-checklist template-edit-item" id="edit-section-btn-{{$index}}" ng-click="vm.switchElementInlineEditing(section.$$hashKey)"></span>
+ <span class="remove-item" ng-click="vm.deleteSection(section)"></span>
+ <div class="ice-form-error" data-ng-show="checklistTemplateForm.editSectionName{{$index}}.$error">
+ <span ng-show="checklistTemplateForm.editSectionName{{$index}}.$error.required && checklistTemplateForm.editSectionName{{$index}}.$dirty">Section name is a required field.</span>
+ <span ng-show="checklistTemplateForm.editSectionName{{$index}}.$error.minlength" class="help-block">Section name is too short.</span>
+ <span ng-show="checklistTemplateForm.editSectionName{{$index}}.$error.maxlength" class="help-block">Section name is too long.</span>
+ </div>
+ </span>
+ </h2>
+ <ul>
+ <li data-ng-repeat="lineItem in section.lineItems" class="line-item-row" ng-class="{'selected-line' : lineItem === vm.selectedLineItem}" id="select-lineitem-btn-{{$parent.$index}}.{{$index}}" ng-click="vm.selectLineItem(lineItem, section, $event)">
+ <span class="col-sm-2 col-xs-2 col-md-2">
+ <span class="lineitem-changed-icon" ng-show="vm.inlineEditingElements[lineItem.uuid] != undefined"></span>
+ <span ng-class="vm.inlineEditingElements[lineItem.uuid] != undefined ? '' : 'lineitem-index'"></span>{{$parent.$index+1}}.{{$index+1}}
+ </span>
+ <span class="col-sm-9 col-xs-9 col-md-9">{{lineItem.name}}</span>
+ <div class="col-sm-1 col-xs-1 col-md-1">&nbsp;</div>
+ <span class="selected-line-connector"></span>
+ </li>
+ <li class="cl-add-item-line">
+ <span class="add-button" ng-click="vm.addLineItem(section);" id="add-lineitem-btn"></span>
+ <span>Add Another line item</span>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <aside class="col-md-6" id="line-item-extended">
+ <header class="row">
+ <h2 ng-show="vm.selectedSection" class="col-sm-11 col-xs-11 col-md-11"><span class="bold">{{vm.selectedSection.name}} -</span>
+ <span ng-show="!vm.inlineEditingElements[vm.selectedLineItem.uuid]">{{vm.selectedLineItem.name}}</span>
+ <span class="form-group" ng-class="{ 'has-error' : checklistTemplateForm.editLineItemName.$invalid && checklistTemplateForm.editLineItemName.$dirty }">
+ <input ng-show="vm.inlineEditingElements[vm.selectedLineItem.uuid]" class="checklist-template-edit-item edit-lineitem-name" type="text"
+ name="editLineItemName" ng-model="vm.selectedLineItem.name" required ng-minlength="1" ng-maxlength="64" id="edit-line-item-name-input">
+ <div class="ice-form-error" data-ng-show="checklistTemplateForm.editLineItemName.$error">
+ <span ng-show="checklistTemplateForm.editLineItemName.$error.required && checklistTemplateForm.editLineItemName.$dirty">Line item name is a required field.</span>
+ <span ng-show="checklistTemplateForm.editLineItemName.$error.minlength" class="help-block">Line item name is too short.</span>
+ <span ng-show="checklistTemplateForm.editLineItemName.$error.maxlength" class="help-block">Line item name is too long.</span>
+ </div>
+ </span>
+ </h2>
+ <span ng-class="!vm.inlineEditingElements[vm.selectedLineItem.uuid] ? 'edit-checklist template-edit-item' : 'glyphicon glyphicon-ok edit-checklist glyphicon-cursor-approve-changes'" ng-show="!checklistTemplateForm.$invalid" ng-click="vm.switchElementInlineEditing(vm.selectedLineItem.uuid)" id="edit-lineitem-btn"></span>
+ <span ng-show="vm.selectedLineItem" class="remove-item" ng-click="vm.deleteLineItem(vm.selectedLineItem)" id="delete-lineitem-btn"></span>
+ </header>
+ <section ng-show="!vm.inlineEditingElements[vm.selectedLineItem.uuid]" id="line-item-description" ng-bind-html="vm.selectedLineItem.description | htmlspecialchars | htmlstylespan"></section>
+ <span class="form-group" ng-class="{ 'has-error' : checklistTemplateForm.editLineitemDescription.$invalid && checklistTemplateForm.editLineitemDescription.$dirty }">
+ <wysiwyg textarea-id="edit-lineitem-description"
+ ng-show="vm.inlineEditingElements[vm.selectedLineItem.uuid]"
+ textarea-class="form-control"
+ textarea-name="editLineitemDescriptionTextArea"
+ name="editLineitemDescription"
+ textarea-height="160px"
+ ng-model="vm.selectedLineItem.description"
+ class="ice-wysiwyg checklist-template-edit-item edit-lineitem-description"
+ enable-bootstrap-title="true"
+ textarea-menu="vm.wysiwyg_menu"
+ required
+ textarea-required="True"
+ ng-minlength="1"
+ id="edit-lineitem-description-input">
+ </wysiwyg>
+ <div class="ice-form-error" data-ng-show="checklistTemplateForm.editLineitemDescription.$error">
+ <span ng-show="checklistTemplateForm.editLineitemDescription.$error.required && checklistTemplateForm.editLineitemDescription.$dirty">Line item description is a required field.</span>
+ <span ng-show="checklistTemplateForm.editLineitemDescription.$error.minlength" class="help-block">Line item description is too short.</span>
+ <span ng-show="checklistTemplateForm.editLineitemDescription.$error.maxlength" class="help-block">Line item description is too long.</span>
+ </div>
+ </span>
+
+ <section ng-show="vm.selectedLineItem" id="line-item-validation-instructions">
+ <h3>Validation Instructions</h3>
+ <p ng-if="!vm.inlineEditingElements[vm.selectedLineItem.uuid]" ng-bind-html="vm.selectedLineItem.validation_instructions | htmlspecialchars | htmlstylespan"></p>
+ <span class="form-group" ng-class="{ 'has-error' : checklistTemplateForm.validationInstruction.$invalid && checklistTemplateForm.validationInstruction.$dirty }">
+ <wysiwyg textarea-id="validation-instruction"
+ ng-show="vm.inlineEditingElements[vm.selectedLineItem.uuid]"
+ textarea-class="form-control"
+ textarea-name="validationInstructionTextArea"
+ name="validationInstruction"
+ textarea-height="160px"
+ ng-model="vm.selectedLineItem.validation_instructions"
+ class="ice-wysiwyg"
+ enable-bootstrap-title="true"
+ textarea-menu="vm.wysiwyg_menu"
+ required
+ textarea-required="True"
+ ng-minlength="1">
+ </wysiwyg>
+ <div class="ice-form-error" data-ng-show="checklistTemplateForm.validationInstruction.$error">
+ <span ng-show="checklistTemplateForm.validationInstruction.$error.required && checklistTemplateForm.validationInstruction.$dirty">Validation Instructions is a required field.</span>
+ </div>
+ </span>
+ </section>
+ <header class="row" ng-show="!vm.selectedLineItem">
+ <h2 class="col-sm-8 col-xs-8 col-md-8"><span class="bold">There is no line item to display</span>
+ </h2>
+ </header>
+ </aside>
+ </article>
+</form>
+<div class="another-section" ng-show="vm.template">
+ <span class="add-another-section" ng-click="vm.addSection()"></span>
+ <span>Add Another Section</span>
+</div>
diff --git a/d2ice.att.io/app/main/admin/checklist-template/checklist-template.less b/d2ice.att.io/app/main/admin/checklist-template/checklist-template.less
new file mode 100755
index 00000000..7077958e
--- /dev/null
+++ b/d2ice.att.io/app/main/admin/checklist-template/checklist-template.less
@@ -0,0 +1,552 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.cl-add-item-line {
+ width: 80%;
+
+ .add-button {
+ .sprite;
+ .sprite.small-grey-add;
+ display: inline-block;
+ cursor: pointer;
+ position:relative;
+ top:3px;
+ }
+}
+
+.cl-action-button{
+ width: 30%;
+ margin-bottom: 2%;
+ margin-right: 3%;
+ &:last-child {
+ margin-right: 0;
+ }
+
+}
+
+.checklist-template-edit-item {
+ padding: 5px;
+ &.edit-template-name{
+ .a_24_r;
+ }
+
+ &.edit-section-name{
+ .m_24;
+ }
+
+ &.edit-lineitem-name{
+ .m_18;
+ background-color: white;
+ line-height: normal;
+ }
+ &.edit-lineitem-description{
+ .m_18;
+ width: 100%;
+ line-height: normal;
+ }
+}
+
+.glyphicon-cursor-approve-changes {
+ display: inline-block;
+ cursor: pointer;
+ position:relative;
+ top:3px;
+ float: right;
+}
+
+.lineitem-changed-icon {
+ .sprite;
+ .sprite.grey-check-mark;
+ display: inline-block;
+ cursor: pointer;
+ position:relative;
+ top:3px;
+ margin-left: -15px;
+}
+
+.remove-item {
+ .sprite;
+ .sprite.red-delete;
+ display: inline-block;
+ cursor: pointer;
+ position:relative;
+ top:3px;
+ float: right;
+ margin-right: 1%;
+}
+
+.template-edit-item {
+ .sprite;
+ .sprite.edit-medium;
+ display: inline-block;
+ cursor: pointer;
+ position:relative;
+ top:3px;
+ float: right;
+}
+
+.add-another-section {
+ .sprite;
+ .sprite.big-grey-add;
+ display: inline-block;
+ cursor: pointer;
+ position:relative;
+ top:3px;
+}
+
+.another-section {
+ border-top: 1px dashed ;
+ padding-top: 0.5%;
+}
+
+
+.checklist-template {
+ height:100%;
+
+ #checklist-main-section {
+ padding-left: 12px;
+ }
+
+ .ice-form-error {
+ text-transform: none;
+ }
+
+ .section-topic{
+ padding-left: 4%;
+ .m_24_m;
+ }
+
+ .lineitem-index{
+ padding-left: 5%;
+ }
+
+ .lineitem-icon-and-index{
+ padding-left: 0px;
+ }
+
+ #cl-header {
+ height:12%;
+ padding-top:1%;
+ padding-bottom: 2%;
+
+ .checklist-template-topic{
+ border-right: 1px solid;
+
+ #cl-title {
+ padding-left: 0px;
+
+ .template-name {
+ .a_24_r;
+ }
+
+ .template-topic {
+ .a_24_m;
+ }
+ }
+
+ .edit-checklist {
+ display: inline-block;
+ margin-right: 5px;
+ cursor: pointer;
+ }
+ }
+ }
+
+
+
+
+
+ #state-actions .btn {
+ width: 100%;
+ }
+
+ .action-buttons{
+ width: 100%;
+ margin-bottom: 7px;
+ }
+
+
+
+ .add-icon {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ }
+
+
+ .add-button {
+ margin-top: 8px;
+ .add-text {
+ .a_16_m;
+ vertical-align: top;
+ margin-left: 6px;
+ }
+
+ }
+
+
+
+
+ #cl-title h1 {
+ .a_24_r;
+ margin: 0 0 30px 0;
+ }
+
+ h3 {
+ .m_18_m;
+ }
+ h2 {
+ margin: 0 0 10px 0;
+ .a_24_m;
+ position: relative;
+ .add-people,
+ .add-step {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ margin-left: 8px;
+ cursor: pointer;
+ }
+ }
+
+ .main-section {
+ margin-top: 30px;
+ }
+ }
+
+
+ #state-bar {
+ float:none;
+ height: 5%;
+
+ }
+
+
+
+ #cl-header > #cl-title > span.bold {
+ .a_24_m;
+ }
+
+
+ .cl-action-buttons-frame{
+ list-style: none;
+ display: inline;
+ padding-top: 20px;
+ }
+
+
+
+ #line-item-list {
+ list-style: none;
+ padding-right:15px;
+ }
+
+
+ #line-item-list > li {
+ margin-bottom: 25px;
+ }
+ #line-item-list > li > h2 {
+ text-transform: capitalize;
+ border-bottom: 1px solid;
+ border-color: @main_color_q;
+ width: 100%;
+ margin-bottom: 0px;
+ padding-left: 5px;
+ .m_24;
+ }
+ #line-item-list > li > h2 > span.bold {
+ .m_24_m;
+ }
+
+ #line-item-list > li > ul {
+ list-style: none;
+ }
+ #line-item-list > li > ul >li.line-item-row {
+ border-bottom: 1px solid;
+ border-color: @main_color_q;
+ line-height: 30px;
+ padding: 0px;
+ vertical-align: middle;
+ height: 30px;
+ .m_16_r;
+ cursor: pointer;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .value-icon {
+ padding: 0px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .value-icon span {
+ display: inline-block;
+ position: relative;
+ top: 3px;
+ margin-right: 5px;
+ margin-left: 3px;
+ width:15px;
+ height:15px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .auto-icon {
+ text-align:right;
+ padding: 0px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .auto-icon span {
+ display: inline-block;
+ position: relative;
+ top: 3px;
+ margin-right: 3px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row.selected-line {
+ background-color: @bg_color_a;
+ border-left: 2px solid;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-color: @main_color_a;
+ position:relative;
+ z-index:1;
+ top: -1px;
+ left: -2px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row.selected-line > .selected-line-connector {
+ position: absolute;
+ right: -19px;
+ width: 20px;
+ height: 30px;
+ top: -2px;
+ background-color: @bg_color_a;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-color: @main_color_a;
+ }
+ #line-item-extended {
+ background-color: @bg_color_a;
+ border: 2px solid;
+ border-color: @main_color_a;
+ padding:15px;
+ @media (min-width: 992px) {
+ max-height: 100%;
+ overflow-y: auto;
+ }
+ }
+ #line-item-extended >header {
+ padding: 0 30px;
+ padding-bottom: 0px;
+ }
+ #line-item-extended >header > h2 {
+ text-transform: capitalize;
+ padding:0px;
+ margin:0px;
+ line-height:32px;
+ .m_18_r;
+ }
+ #line-item-extended > header > h2 > span.bold {
+ .m_18_m;
+ }
+ #line-item-extended >header > #decision-actions {
+ list-style: none;
+ text-align: right;
+ margin:0px;
+ }
+ #line-item-extended >header > #decision-actions > li {
+ display: inline-block;
+ margin-left: 2px;
+ .sprite;
+ }
+ #line-item-extended >header > #decision-actions.active > li {
+ cursor:pointer;
+ }
+
+ #line-item-extended >header > #decision-actions > li.not-relevant-btn {
+ .sprite.not-relevant-btn;
+ }
+
+ #line-item-extended >header > #decision-actions.active > li.not-relevant-btn:hover {
+ .sprite.not-relevant-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.not-relevant-btn.active {
+ .sprite.not-relevant-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.denied-cl-btn {
+ .sprite.denied-cl-btn;
+ }
+ #line-item-extended >header > #decision-actions.active > li.denied-cl-btn:hover {
+ .sprite.denied-cl-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.denied-cl-btn.active {
+ .sprite.denied-cl-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.approved-cl-btn {
+ .sprite.approved-cl-btn;
+ }
+ #line-item-extended >header > #decision-actions.active > li.approved-cl-btn:hover {
+ .sprite.approved-cl-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.approved-cl-btn.active {
+ .sprite.approved-cl-btn-active;
+ }
+
+
+ #line-item-extended > #line-item-description {
+ margin: 0 15px;
+ .m_16_r;
+ }
+
+ #line-item-extended > #line-item-validation-instructions {
+ .m_14_r;
+ background-color: #fff;
+ border: 1px solid;
+ border-color: @main_color_a;
+ padding: 15px;
+ margin-top: 15px;
+ }
+
+ #line-item-extended > #line-item-validation-instructions h3 {
+ text-transform: capitalize;
+ margin: 0px;
+ .m_18_m;
+ }
+
+ #line-item-extended > #line-item-validation-instructions p {
+ margin-top: 5px;
+
+ }
+
+ #line-item-extended > #line-item-validation-instructions p ul {
+ padding-left: 15px;
+ }
+
+ #line-item-extended > #line-item-audit-logs {
+ padding:0 15px;
+ }
+
+ #line-item-extended > #line-item-audit-logs > h3 {
+ text-transform: capitalize;
+ .m_18_m;
+
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list {
+ list-style:none;
+
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li {
+ margin: 0 15px 10px;
+ border-bottom: 2px solid;
+ border-color: @main_color_q;
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li > .audit-creator {
+ .m_16_m;
+ margin:0px;
+ padding:0px;
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li > .audit-date {
+ text-align:right;
+ .m_14_r;
+ padding:0px;
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li > .audit-text {
+ .m_16_r;
+ margin-bottom:0px;
+ padding:0px;
+ }
+
+ #line-item-extended > #line-item-audit-logs > #new-audit-log-from {
+ margin: 0 0 15px;
+ }
+
+ #line-item-extended > #line-item-audit-logs > #new-audit-log-from #new-audit-log-text {
+ border-color: @main_color_q;
+ margin-bottom:15px;
+ }
+
+ .btn-gradient-primary {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #37B2E5;
+ *background-color: #37B2E5;
+ background-image: -moz-linear-gradient(top, #0079AB, #37B2E5);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0079AB), to(#37B2E5));
+ background-image: -webkit-linear-gradient(top, #0079AB, #37B2E5);
+ background-image: -o-linear-gradient(top, #0079AB, #37B2E5);
+ background-image: linear-gradient(to bottom, #0079AB, #37B2E5);
+ background-repeat: repeat-x;
+ border-color: #37B2E5;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0079AB', endColorstr='#37B2E5', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+
+ .btn-gradient-success {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #41A02C;
+ *background-color: #41A02C;
+ background-image: -moz-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#A2E652), to(#41A02C));
+ background-image: -webkit-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -o-linear-gradient(top, #A2E652, #41A02C);
+ background-image: linear-gradient(to bottom, #A2E652, #41A02C);
+ background-repeat: repeat-x;
+ border-color: #41A02C;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#A2E652', endColorstr='#41A02C', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+
+ .btn-gradient-danger {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #AE0020;
+ *background-color: #AE0020;
+ background-image: -moz-linear-gradient(top, #F74658, #AE0020);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#F74658), to(#AE0020));
+ background-image: -webkit-linear-gradient(top, #F74658, #AE0020);
+ background-image: -o-linear-gradient(top, #F74658, #AE0020);
+ background-image: linear-gradient(to bottom, #F74658, #AE0020);
+ background-repeat: repeat-x;
+ border-color: #AE0020;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F74658', endColorstr='#AE0020', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+
diff --git a/d2ice.att.io/app/main/dashboard/account/account.controller.js b/d2ice.att.io/app/main/dashboard/account/account.controller.js
new file mode 100755
index 00000000..da648f73
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/account.controller.js
@@ -0,0 +1,150 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.dashboard.account')
+ .controller('DashboardAccountController', ["$state", "usersService", "vfService", "$log",
+ "$rootScope", "toastService", dashboardAccountController]);
+
+ function dashboardAccountController($state,usersService,vfService, $log, $rootScope, toastService) {
+
+ var vm = this;
+ vm.data = {};
+
+ var init = function()
+ {
+
+ vm.user = usersService.getUserData();
+
+ if (vm.user == undefined) {
+ $state.go('app.login');
+ return;
+ }
+
+ var user_uuid = vm.user.uuid;
+
+ $rootScope.ice.loader.show = true;
+ usersService.getIceUser(user_uuid)
+ .then
+ (function (response)
+ {
+ if (response.status === 200)
+ {
+ vm.data.full_name = response.data.full_name;
+ vm.data.email = response.data.email;
+ vm.data.phone_number = response.data.phone_number;
+ vm.data.password = ''; //user.password;
+ vm.data.ssh_key = response.data.ssh_public_key;
+ vm.data.company = response.data.company.name;
+ vm.data.access_key = response.data.rgwa_access_key;
+ vm.data.access_secret = "•••••••••••••••";
+ $rootScope.ice.loader.show = false;
+ }
+ else
+ {
+ toastService.setToast('Error getting account', 'danger');
+ $log.error("Error getting account: " + uuid);
+ $rootScope.ice.loader.show = false;
+ }
+ }
+ ).catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+
+ vfService.getCompanies()
+ .then(function (response) {
+ if (response.status === 200)
+ {
+ vm.companies = response.data;
+ }
+ })
+ .catch(function (error)
+ {
+ $log.error(error.message);
+ });
+
+
+
+ };
+
+ init();
+
+ vm.getAccessSecret = function ()
+ {
+ usersService.getRGWASecret()
+ .then
+ (function (response)
+ {
+ if (response.status === 200)
+ {
+ vm.data.access_secret = response.data.rgwa_secret_key;
+ }
+ else
+ {
+ toastService.setToast('Error getting user\'s access secret', 'danger');
+ $log.error("Error getting access secret: " + uuid);
+ $rootScope.ice.loader.show = false;
+ }
+ }
+ ).catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+ }
+
+ vm.submitForm = function ()
+ {
+ var user = usersService.getUserData();
+ usersService.updateAccount(user.uuid, vm.data)
+ .then(function (response) {
+ if (response.status === 200) {
+ toastService.setToast('Account was updated successfully!', 'success');
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message.detail, 'danger');
+ });
+ };
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/dashboard/account/account.html b/d2ice.att.io/app/main/dashboard/account/account.html
new file mode 100755
index 00000000..de792d3a
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/account.html
@@ -0,0 +1,159 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".account-form"></ice-loader>
+
+<h2>Account</h2>
+
+<div data-ng-if="vm.stage!==vm.stages.intake">
+ <progress-directive progress="{{vm.progress}}"
+ callback="vm.updateProgress"
+ enable-edit="vm.isEngagementEL()"
+ engagement-uuid="{{vm.uuid}}"></progress-directive>
+</div>
+
+<!--div class="row main-section" -->
+<div class="row main-section">
+<get-started-modal></get-started-modal>
+
+
+ <div class="col-md-8 steps">
+
+ <form name="accountForm" ng-submit="vm.submitForm()" novalidate class="account-form col-md-8">
+<!--
+ <div class="form-group">
+ <h2>Account</h2>
+ </div>
+ -->
+ <div class="form-group" ng-class="{ 'has-error' : registerForm.company.$invalid && !registerForm.company.$pristine }">
+ <label class="ice-form-label required">Company</label>
+ <select ng-model="vm.data.company" name="company" class="form-control" required>
+ <option value>Please Select</option>
+ <option ng-repeat="company in vm.companies" value="{{company.name}}" ng-selected="company.name===vm.data.company">
+ {{company.name}}
+ </option>
+ </select>
+ <div class="ice-form-error" data-ng-show="accountForm.company.$error">
+ <span ng-show="accountForm.company.$error.required && !accountForm.company.$pristine" class="help-block">Please select company</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : accountForm.fullName.$invalid && !accountForm.fullName.$pristine }">
+ <label class="ice-form-label required">Full Name</label>
+ <input type="text" name="fullname" class="form-control" ng-model="vm.data.full_name" ng-minlength="3" ng-maxlength="50" maxlength="50" required>
+ <div class="ice-form-error" data-ng-show="accountForm.fullname.$error">
+ <span ng-show="accountForm.fullname.$error.required && !accountForm.fullname.$pristine">Full Name is a required field.</span>
+ <span ng-show="accountForm.fullname.$error.minlength">Full Name is too short.</span>
+ <span ng-show="accountForm.fullname.$error.maxlength">Full Name is too long.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : accountForm.email.$invalid && !accountForm.email.$pristine }">
+ <label class="ice-form-label">Email</label>
+ <input id={{vm.data.email}} type="email" name="email" class="form-control" ng-model="vm.data.email" maxlength="254" ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' disabled>
+ <div class="ice-form-error" data-ng-show="accountForm.email.$error">
+ <span ng-show="accountForm.email.$error.required && !accountForm.email.$pristine">Email is a required field.</span>
+ <span ng-show="accountForm.email.$invalid && !accountForm.email.$pristine" class="help-block">Enter a valid email.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : accountForm.phone.$invalid && !accountForm.phone.$pristine }">
+ <label class="ice-form-label required">Phone</label>
+ <input type="text" name="phone" class="form-control" ng-intl-tel-input ng-model="vm.data.phone_number" required ng-minlength="6" ng-maxlength="30">
+ <div class="has-error ice-form-error" data-ng-show="accountForm.phone.$error">
+ <span ng-show="accountForm.phone.$error.required && !accountForm.phone.$pristine">Phone is a required field.</span>
+ <span ng-show="accountForm.phone.$error.minlength" class="help-block">Phone is too short.</span>
+ <span ng-show="accountForm.phone.$error.maxlength" class="help-block">Phone is too long.</span>
+ <span ng-show="accountForm.phone.$invalid" class="help-block">Phone format invalid</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : accountForm.password.$invalid && !accountForm.password.$pristine }" >
+ <label class="ice-form-label">Password</label>
+ <input type="password" name="password" class="form-control" ng-model="vm.data.password" ng-minlength="4" ng-maxlength="32" maxlength="32" >
+ <div class="ice-form-error" data-ng-show="accountForm.password.$error">
+ <span ng-show="accountForm.password.$error.required && !accountForm.password.$pristine">Password is a required field.</span>
+ <span ng-show="accountForm.password.$error.required && accountForm.$submitted ">Password is required.</span>
+ <span ng-show="accountForm.password.$error.minlength" class="help-block">Password is too short.</span>
+ <span ng-show="accountForm.password.$error.maxlength" class="help-block">Password is too long.</span>
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : accountForm.confirm_password.$invalid && !accountForm.confirm_password.$pristine }">
+ <label class="ice-form-label">Confirm password</label>
+ <input type="password" name="confirm_password" class="form-control" ng-model="vm.data.confirm_password" ng-minlength="4" ng-maxlength="32" maxlength="32" >
+ <div class="ice-form-error" data-ng-show="accountForm.confirm_password.$error">
+ <span ng-show="accountForm.confirm_password.$error.required && !accountForm.confirm_password.$pristine">Confirm password is required field.</span>
+
+ <span ng-show="!accountForm.confirm_password.$error.required && accountForm.confirm_password.$error.noMatch && accountForm.password.$dirty">Passwords do not match.</span>
+
+ </div>
+ </div>
+
+ <div class="form-group" ng-class="{ 'has-error' : accountForm.password.$invalid && !accountForm.password.$pristine }">
+ <label class="ice-form-label">SSH Key</label>
+ <textarea name="ssh_key" class="form-control" ng-model="vm.data.ssh_key" ng-focus="clearMsg()" ></textarea>
+ <div class="ice-form-error" data-ng-show="accountForm.password.$error">
+ </div>
+ </div>
+
+ <button type="submit" id="upate-account" class="btn btn-primary" data-ng-disabled="!accountForm.$valid">Update</button>
+ </form>
+
+ </div>
+
+ <div class="col-md-4 right-panel">
+ <div class="personImage"></div>
+ <div class="line-separator col-md-12"></div>
+ <h3 id="storage-credentials">Your Storage Credentials</h3>
+ <div class="storage-credentials">
+
+ <div id="access-key-title">Access Key:
+ <div class="access-key" id="access-key-value">{{vm.data.access_key}}</div>
+ </div>
+
+ <div id="access-secret-title">Access Secret (<span class="show-secret" ng-click="vm.getAccessSecret()" role="button" id="show-access-secret">Show</span>)
+ <div class="access-secret" id="access-secret-value" type="password">{{vm.data.access_secret}}</div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+</div>
+
diff --git a/d2ice.att.io/app/main/dashboard/account/account.less b/d2ice.att.io/app/main/dashboard/account/account.less
new file mode 100755
index 00000000..d32db492
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/account.less
@@ -0,0 +1,215 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.account {
+
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ .content {
+
+ .steps-progress-wrapper {
+ margin-top: 10px;
+ }
+
+ h1 {
+ .a_36;
+ margin: 0 0 30px 0;
+ }
+
+ h2 {
+ margin: 0 0 10px 0;
+ .a_24_m;
+ position: relative;
+ .add-people,
+ .add-step {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ margin-left: 8px;
+ cursor: pointer;
+ }
+ }
+
+ h3 {
+ .a_20_m;
+ }
+
+ .main-section {
+ margin-top: 30px;
+ }
+
+ .steps {
+
+ border-right: dashed 1px @main_color_a;
+ height: 100%;
+ padding-right: 20px;
+
+ ul {
+ li.step {
+
+ &.selected {
+ background-color: #DEF3FF;
+ }
+
+ list-style: none;
+ position: relative;
+ padding: 10px 10px 10px 4px;
+
+ .description {
+
+ .m_16_r;
+ border-bottom: dashed 1px @main_color_n;
+ padding: 10px 0;
+
+ input {
+ position: absolute;
+ top: 10px;
+ left: 0;
+ margin-right: 20px;
+ }
+
+ .step-text {
+ margin-left: 20px;
+ }
+
+ .step-state {
+ position: absolute;
+ top: 24px;
+ &.todo {
+ .steps-sprite;
+ .steps-sprite.todo;
+ display: inline-block;
+ }
+ &.confirmed {
+ .steps-sprite;
+ .steps-sprite.confirmed;
+ display: inline-block;
+ }
+ &.completed {
+ .steps-sprite;
+ .steps-sprite.completed;
+ display: inline-block;
+ }
+ &.completed-non-el {
+ .steps-sprite;
+ .steps-sprite.completed-non-el;
+ display: inline-block;
+ }
+ }
+ }
+ .details {
+ .m_12_r;
+ margin-bottom: 20px;
+ .actions {
+ float: right;
+ margin-top: 4px;
+
+ .moveto-confirmed {
+ .sprite;
+ .sprite.success;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .moveto-todo {
+ .sprite;
+ .sprite.delete-circle;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .moveto-delete {
+ .sprite;
+ .sprite.delete;
+ display: inline-block;
+ cursor: pointer;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .right-panel {
+ height: 100%;
+ padding-left: 20px;
+ padding-bottom: 5px;
+
+ .personImage
+ {
+ .profiles-sprite;
+ .profiles-sprite.profile-large;
+ display: block;
+ }
+
+ .line-separator {
+ border-bottom: solid lightgrey;
+ margin: 20px 0;
+ }
+
+ .storage-credentials {
+ .m_18_r;
+ }
+
+ .access-key {
+ margin-bottom: 10px;
+ .m_16_r;
+ }
+
+ .access-secret {
+ margin-bottom: 10px;
+ .m_16_r;
+ }
+
+ .show-secret {
+ .underline;
+ cursor: pointer;
+ }
+ }
+ }
+}
diff --git a/d2ice.att.io/app/main/dashboard/account/account.module.js b/d2ice.att.io/app/main/dashboard/account/account.module.js
new file mode 100755
index 00000000..052cbbfb
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/account.module.js
@@ -0,0 +1,85 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.dashboard.account')
+ .config(config);
+
+ function config($stateProvider) {
+ $stateProvider
+ .state('app.account', {
+ url: '/account',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/account/account.html',
+ controller: 'DashboardAccountController as vm'
+ },
+ 'navigation@app': {
+ templateUrl: 'core/navigation/layouts/account-navigation/navigation.html',
+ controller: 'accountNavigationController as vm'
+ }
+ },
+ params: {engagement_uuid: null},
+ bodyClass: 'account'
+ })
+ .state('app.account.notifications', {
+ url: '/account/notifications',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/account/notifications/notifications.html',
+ controller: 'DashboardNotificationsController as vm'
+ }
+ },
+ bodyClass: 'notifications'
+ })
+ .state('app.account.userProfile', {
+ url: '/account/userProfile',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/account/user-profile-settings/user-profile-settings.html',
+ controller: 'accountUserProfileSettingsController as vm'
+ }
+ },
+ bodyClass: 'account'
+ });
+ }
+})();
diff --git a/d2ice.att.io/app/main/dashboard/account/notifications/notifications.controller.js b/d2ice.att.io/app/main/dashboard/account/notifications/notifications.controller.js
new file mode 100755
index 00000000..0e9542dd
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/notifications/notifications.controller.js
@@ -0,0 +1,140 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.dashboard.account')
+ .controller('DashboardNotificationsController', ["$state","pageService","usersService", "toastService", "$rootScope", "$scope", "$log", dashboardNotificationsController]);
+
+ function dashboardNotificationsController($state,pageService, usersService, toastService, $rootScope, $scope, $log) {
+ var vm = this;
+ vm.data = {};
+ var init = function()
+ {
+ pageService.setPage('notification');
+ $rootScope.timeGapLocal = moment().format("z");// timeGap();
+ $rootScope.ampm = moment().format('A');
+ $rootScope.mom =moment().tz( moment.tz.guess()).format('z');
+
+ vm.pagination_num_of_objects = 10;
+ vm.current_starting_offset = "0";
+ vm.page_num = 1;
+ vm.user = usersService.getUserData();
+ if (vm.user == undefined) {
+ $state.go('app.login');
+ return;
+ }
+ vm.getNotifications(true)
+ }
+
+ vm.getNotifications = function (reset) {
+ var user_uuid = vm.user.uuid;
+ $rootScope.ice.loader.show = true;
+ vm.current_starting_offset = (vm.page_num-1)*vm.pagination_num_of_objects;
+ usersService.getNotificationsDescription(vm.user.uuid,vm.current_starting_offset,vm.pagination_num_of_objects)
+ .then
+ (function (response)
+ {
+ if (response.status === 200)
+ {
+ vm.notifications = response.data['serilizedActivitySet'];
+ vm.num_of_returned_items = response.data['num_of_objects'];
+ vm.notifications_display_list = vm.notifications;
+ if (reset){
+ usersService.resetNotificationNum(user_uuid)
+ .then
+ (function (response)
+ {
+ if (response.status === 200)
+ {
+ $scope.$emit('eventClearNotifications',0);
+ }
+ }
+ )
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ $rootScope.ice.loader.show = false;
+ }
+ else
+ {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ }
+ )
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ }
+ );
+ };
+
+ vm.delNotification = function(uuid)
+ {
+ var itemIndex = 0;
+
+ for(var i=0; i < vm.notifications.length; i++)
+ {
+ if (vm.notifications[i].uuid == uuid)
+ {
+ itemIndex = i;
+ break;
+ }
+ }
+ usersService.notificationsDelete(uuid)
+ .then
+ (function (response) {
+ if (response.status != 400){
+ vm.notifications.splice(itemIndex , 1);
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ init();
+ }
+})(); \ No newline at end of file
diff --git a/d2ice.att.io/app/main/dashboard/account/notifications/notifications.html b/d2ice.att.io/app/main/dashboard/account/notifications/notifications.html
new file mode 100755
index 00000000..f92cc41a
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/notifications/notifications.html
@@ -0,0 +1,60 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".account-form"></ice-loader>
+
+<div class="row">
+ <div class="col-md-12" id="notifications">
+ <h2>Notifications</h2>
+ </div>
+ <div class="col-md-12">
+ <form name="notificationsForm" novalidate class="notifications-form">
+ <content class="row col-md-12" id="notifications-results">
+ <div class=" row hoverCyan " dir-paginate="notification in vm.notifications_display_list | itemsPerPage: vm.pagination_num_of_objects"
+ total-items="vm.num_of_returned_items" current-page="vm.page_num"
+ ng-class="{lineColor: ($index % 2 == 0),boldFont: !notification.is_read}" track by notification.uuid >
+ <div class="electricity col-md-1"></div>
+ <div class="col-md-10" id="table-col-{{notification.uuid}}"><notifications activity="notification.activity"></notifications></div>
+ <div class="col-md-1"><span class="delete" id="del-notification-{{notification.uuid}}" ng-click = "vm.delNotification(notification.uuid)"></span></div>
+ </div>
+ </div>
+ <dir-pagination-controls on-page-change="vm.getNotifications(false)" class="col-md-12" id="notifications-pagination"></dir-pagination-controls>
+ </content>
+ </form>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/account/notifications/notifications.less b/d2ice.att.io/app/main/dashboard/account/notifications/notifications.less
new file mode 100755
index 00000000..7981be89
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/notifications/notifications.less
@@ -0,0 +1,348 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.engagement_link {
+ text-decoration: underline;
+ cursor:pointer;
+}
+.notifications {
+
+ .table{
+ margin-bottom: 0;
+ }
+
+ .table-container-flex {
+
+ .data-row-wrapper {
+ padding: 10px 20px;
+ }
+
+ .flex-item:nth-child(1) {
+ padding-left: 5px;
+ padding-top: 15px;
+ flex-grow: 2;
+ }
+
+ .flex-item:nth-child(2) {
+ padding-top: 12px;
+ flex-grow: 93;
+ }
+
+ .flex-item:nth-child(3) {
+ padding-top: 12px;
+ flex-grow: 5;
+ }
+
+ }
+
+ .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus
+ {
+ background-color: #DEF3FF;
+ border-color: #DDDDDD;
+ color: #000000;
+ cursor:pointer;
+ z-index:2;
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .lineColor
+ {
+ background-color:#F6F3F3;
+ }
+
+ .electricity
+ {
+ .sprite;
+ .sprite.electricity;
+ display: block;
+ margin-top: 10px;
+ margin-left: 10px;
+ }
+
+ .delete
+ {
+ .sprite;
+ .sprite.delete-circle;
+ display: block;
+ cursor:pointer;
+ margin-top: 11px;
+ }
+
+
+ .fLeft
+ {
+ float:left;
+ height:50px;
+ }
+
+ .hoverCyan
+ {
+ line-height: 40px;
+ &:hover {
+ background-color: #DEF3FF;
+ }
+ }
+
+ .boldFont
+ {
+ font-weight: bold;
+ }
+
+ .marginLeft60
+ {
+ margin-left:-60px;
+ }
+
+ .height510
+ {
+ height:510px;
+ margin-top:-30px;
+ }
+
+ .height50
+ {
+ height:50px;
+ line-height:50px;
+ width:1100px;
+ }
+
+ .marginLeft5
+ {
+ margin-left:5px;
+ }
+
+ .marginTop5
+ {
+ margin-top:5px;
+ margin-left: 40px;
+ }
+
+ .personImage
+ {
+ .profiles-sprite;
+ .profiles-sprite.profile-large;
+ display: block;
+ }
+
+ .textAlignCenter
+ {
+ text-align:center;
+ width:1100px
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+ .pad17
+ {
+ padding-top:17px;
+ display: block;
+ }
+
+ .content {
+
+ .steps-progress-wrapper {
+ margin-top: 10px;
+ }
+
+ h1 {
+ .a_36;
+ margin: 0 0 30px 0;
+ }
+
+ h2 {
+ margin: 0 0 10px 0;
+ .a_24_m;
+ position: relative;
+ .add-people,
+ .add-step {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ margin-left: 8px;
+ cursor: pointer;
+ }
+ }
+
+ .main-section {
+ margin-top: 30px;
+ }
+
+ .steps {
+
+
+ height: 100%;
+ padding-right: 20px;
+
+ ul {
+ li.step {
+
+ &.selected {
+ background-color: #DEF3FF;
+ }
+
+ list-style: none;
+ position: relative;
+ padding: 10px 10px 10px 4px;
+
+ .description {
+
+ .m_16_r;
+
+ padding: 10px 0;
+
+ input {
+ position: absolute;
+ top: 10px;
+ left: 0;
+ margin-right: 20px;
+ }
+
+ .step-text {
+ margin-left: 20px;
+ }
+
+ .step-state {
+ position: absolute;
+ top: 24px;
+ &.todo {
+ .steps-sprite;
+ .steps-sprite.todo;
+ display: inline-block;
+ }
+ &.confirmed {
+ .steps-sprite;
+ .steps-sprite.confirmed;
+ display: inline-block;
+ }
+ &.completed {
+ .steps-sprite;
+ .steps-sprite.completed;
+ display: inline-block;
+ }
+ &.completed-non-el {
+ .steps-sprite;
+ .steps-sprite.completed-non-el;
+ display: inline-block;
+ }
+ }
+ }
+ .details {
+ .m_12_r;
+ margin-bottom: 20px;
+ .actions {
+ float: right;
+ margin-top: 4px;
+
+ .moveto-confirmed {
+ .sprite;
+ .sprite.success;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .moveto-todo {
+ .sprite;
+ .sprite.delete-circle;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .moveto-delete {
+ .sprite;
+ .sprite.delete;
+ display: inline-block;
+ cursor: pointer;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .team-and-logs {
+ height: 100%;
+ padding-left: 20px;
+ .team {
+ ul.team-avatars {
+
+ li {
+ list-style: none;
+ display: inline-block;
+ margin-right: 10px;
+ .profiles-sprite;
+ .profiles-sprite.profile-medium;
+
+ &.me {
+ .profiles-sprite;
+ .profiles-sprite.avatar-blue;
+ }
+ }
+ }
+ }
+
+ .activity-log {
+ ul.activity-log-details {
+ li {
+ list-style: none;
+ position: relative;
+ margin-left: 30px;
+
+ &:before {
+ content: '';
+ display: inline-block;
+ .sprite;
+ .sprite.electricity;
+ position: absolute;
+ top: 0;
+ left: -30px;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.controller.js b/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.controller.js
new file mode 100755
index 00000000..6d51a440
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.controller.js
@@ -0,0 +1,98 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.dashboard.account')
+ .controller('accountUserProfileSettingsController', ['toastService', 'usersService',
+ accountUserProfileSettingsController]);
+
+ function accountUserProfileSettingsController(toastService, usersService) {
+ var vm = this;
+
+ var init = function()
+ {
+ usersService.getIceUser()
+ .then
+ (function (response) {
+ vm.receiveEmails = response.data.regular_email_updates;
+ vm.receiveEmailsEveryTime = response.data.email_updates_on_every_notification;
+ vm.receiveDigestEmails = response.data.email_updates_daily_digest;
+
+ vm.receiveNotifications = vm.receiveEmailsEveryTime || vm.receiveDigestEmails;
+ }
+ ).catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+ };
+
+ vm.submitForm = function() {
+ var user = usersService.getUserData();
+ var userData = {};
+
+ userData.regular_email_updates = vm.receiveEmails;
+ userData.email_updates_on_every_notification = vm.receiveEmailsEveryTime;
+ userData.email_updates_daily_digest = vm.receiveDigestEmails;
+ userData.company = user.company.name;
+ userData.full_name = user.full_name;
+ userData.email = user.email;
+ userData.phone_number = user.phone_number;
+
+ usersService.updateAccount(user.uuid, userData)
+ .then(function (response) {
+ if (response.status === 200) {
+ toastService.setToast('User profile settings was updated successfully!', 'success');
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message.detail, 'danger');
+ });
+ };
+
+ vm.changeReceiveNotifications = function() {
+ if(!vm.receiveNotifications) {
+ vm.receiveEmailsEveryTime = false;
+ vm.receiveDigestEmails = false;
+ }
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.html b/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.html
new file mode 100755
index 00000000..521c73ab
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.html
@@ -0,0 +1,66 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".user-profile-settings-form"></ice-loader>
+<h2 id="user-profile-settings-title">Settings</h2>
+<form name="userProfileSettingsForm" ng-submit="vm.submitForm()" novalidate class="user-profile-settings-form col-md-6">
+ <div class="form-check">
+ <label class="form-check-label">
+ <input class="form-check-input" id="receive-emails" ng-model="vm.receiveEmails" type="checkbox"> I want to receive regular email updates and information from {{'program.name' | i18next}}
+ </label>
+ </div>
+ <hr>
+ <div class="form-check">
+ <label class="form-check-label">
+ <input class="form-check-input" id="receive-notifications" ng-model="vm.receiveNotifications" ng-click="vm.changeReceiveNotifications()" type="checkbox"> I want to receive email notifications when something happens on {{'program.name' | i18next}}
+ </label>
+ <div class="receive-email-options">
+ <div class="form-check">
+ <label class="form-check-label">
+ <input class="form-check-input" id="receive-emails-every-time" ng-model="vm.receiveEmailsEveryTime" ng-disabled="!vm.receiveNotifications" type="checkbox"> I want to receive an email every time
+ </label>
+ </div>
+ <div class="form-check">
+ <label class="form-check-label">
+ <input class="form-check-input" id="receive-digest-emails" ng-model="vm.receiveDigestEmails" ng-disabled="!vm.receiveNotifications" type="checkbox"> I want to receive a daily digest email
+ </label>
+ </div>
+ </div>
+ </div>
+ <button type="submit" id="update-account-user-profile-settings" class="btn btn-primary" data-ng-disabled="userProfileSettingsForm.$invalid">Update</button>
+</form>
diff --git a/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.less b/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.less
new file mode 100755
index 00000000..41ad47ec
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/account/user-profile-settings/user-profile-settings.less
@@ -0,0 +1,45 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.user-profile-settings-form {
+ .receive-email-options {
+ padding-left: 20px;
+ }
+}
+
+
diff --git a/d2ice.att.io/app/main/dashboard/checklist/checklist.controller.js b/d2ice.att.io/app/main/dashboard/checklist/checklist.controller.js
new file mode 100755
index 00000000..293134cd
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/checklist/checklist.controller.js
@@ -0,0 +1,445 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.dashboard.checklist',[])
+ .controller('DashboardChecklistController', ["$scope", "$stateParams", "$rootScope", "checklistService",
+ "iceConstants", "usersService", "$uibModal", "toastService", "$log", DashboardChecklistController]);
+ function DashboardChecklistController($scope, $stateParams, $rootScope, checklistService, iceConstants,
+ usersService, $uibModal, toastService, $log) {
+
+ var vm = this;
+ vm.data = {};
+ var engagementUuid = $stateParams.engagement_uuid;
+ vm.checklistUuid = $stateParams.sub_id;
+ vm.selected_decision = false;
+
+ var init = function() {
+ if (vm.checklistUuid == null)
+ return;
+
+ checklistService.getChecklist(vm.checklistUuid)
+ .then(function (response) {
+ if (response.status === 200) {
+ vm.data = response.data;
+ vm.data.states = iceConstants.checklist_states;
+ vm.me = usersService.getUserData();
+ vm.is_peer_reviewer = usersService.isPeerReviewer(vm.me, response.data.checklist.engagement.peer_reviewer.uuid);
+ // if state pending dont allow changing data manually
+ if(vm.data.checklist.associated_files) {
+ vm.has_files = true;
+ }
+ else {
+ vm.has_files = false;
+ }
+ vm.formatDecisions();
+
+ }
+ })
+ .catch(function (error) {
+ if (error.status === 410) {
+ $rootScope.$broadcast('onUpdateEngagements',{
+ select:{
+ uuid: $stateParams.engagement_uuid,
+ view_type : 'overview',
+ sub_id: undefined
+ }
+ });
+ }
+ else{
+ $log.error(error.message);
+ return false;
+ }
+ });
+ };
+
+
+ vm.formatDecisions = function () {
+ var section_counter = 0;
+ vm.data.checklistDecisions = _.orderBy(vm.data.checklistDecisions, 'weight');
+ angular.forEach(vm.data.checklistDecisions, function(section,section_key) {
+ section_counter ++;
+ section.counter = section_counter;
+ var decision_counter = 0;
+ section.decisions = _.orderBy(section.decisions, 'weight');
+ angular.forEach(section.decisions,function(decision,decision_key) {
+ decision_counter++;
+ // add text of section and line number E.g 2.1
+ decision.counter = section_counter+'.'+decision_counter;
+
+ // set selected decision default value
+ if (vm.selected_decision == false)
+ {
+ vm.selected_decision = decision;
+ vm.selectDecision(decision);
+ }
+
+ // choose which decision value to show
+ var view_value;
+ switch(vm.data.checklist.state)
+ {
+ case 'peer_review':
+ view_value = decision.peer_review_value;
+ break;
+ case 'review':
+ case 'approval':
+ case 'handoff':
+ case 'closed':
+ view_value = decision.review_value;
+ break;
+ }
+
+ // choose which ucib to show
+ var view_value_css;
+ switch(view_value)
+ {
+ case 'approved':
+ view_value_css = 'sprite approved-cl';
+ break;
+ case 'denied':
+ view_value_css = 'sprite denied-cl';
+ break;
+ case 'not_relevant':
+ view_value_css = 'sprite not-relevant-cl';
+ break;
+ }
+
+ // choose which line item type icon to show
+ var auto_icon_css
+ switch(decision.lineitem.line_type)
+ {
+ case 'auto':
+ auto_icon_css = 'sprite automation-state';
+ }
+ vm.data.checklistDecisions[section_key].decisions[decision_key]['selected-value'] = view_value
+ vm.data.checklistDecisions[section_key].decisions[decision_key]['view_value'] = view_value;
+ vm.data.checklistDecisions[section_key].decisions[decision_key]['view_value_css'] = view_value_css;
+ vm.data.checklistDecisions[section_key].decisions[decision_key]['auto_icon_css'] = auto_icon_css;
+ });
+ });
+ // after decision change refresh which state buttons to shows
+ vm.refreshStateOptions();
+
+ };
+
+ // set decision value
+ vm.setDecision = function(decision,value) {
+ checklistService.putChecklistDecision(decision.uuid,{value:value})
+ .then(function (response) {
+ if (response.status === 200) {
+ switch(vm.data.checklist.state)
+ {
+ case 'peer_review':
+ decision.peer_review_value = value;
+ break;
+ case 'review':
+ decision.review_value = value;
+ break;
+ }
+ vm.formatDecisions();
+ }
+ });
+
+ };
+
+ // decice which state change buttons to choose
+ vm.refreshStateOptions = function () {
+ var force_break = false;
+ vm.is_able_to_approve = true;
+ angular.forEach(vm.data.checklistDecisions, function (section,key) {
+ if (!force_break)
+ angular.forEach(section.decisions, function (decision,key) {
+ if (!force_break){
+ // if not all decisions have value only only next_step
+ if ( decision['view_value'] != 'approved' && decision['view_value'] != 'not_relevant' ) {
+ vm.is_able_to_approve = false;
+ force_break=true;
+ }
+ }
+ });
+
+ });
+ };
+
+ // set state
+ vm.stateAction = function(action) {
+ switch(action)
+ {
+ case 'approve':
+ var postData = {};
+ postData["description"] = '';
+ postData["decline"] = "False";
+ checklistService.setState(vm.data.checklist.uuid, postData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $rootScope.$broadcast('onUpdateEngagements',{select:{uuid:engagementUuid,page_type:'overview',sub_id:vm.data.checklist.uuid}});
+ }
+ else {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ });
+ break;
+ case 'reject':
+ vm.openSetState(action,vm.data.checklist);
+ break;
+ case 'next_step':
+ vm.openNextSteps(vm.data.checklist);
+ break;
+ }
+ };
+
+ vm.formatDate = function (create_time) {
+ var region = moment().tz( moment.tz.guess()).format('z');
+ var dt = "";
+ dt = moment(create_time).local().format('YYYY-MM-DD hh:mm:ss A') + " " + region;
+ return dt;
+ };
+
+ // add decision log
+ vm.submitDecisionAuditLog = function () {
+
+ var jsonPost = {"description":vm.selected_decision.new_audit_log_description};
+ checklistService.createAuditlogDecisionChecklist(vm.selected_decision.uuid, jsonPost)
+ .then(function (response) {
+ if (response.status === 200)
+ {
+ if (vm.data.decisionAuditLogs[vm.selected_decision.uuid] == undefined)
+ vm.data.decisionAuditLogs[vm.selected_decision.uuid] = []
+ vm.data.decisionAuditLogs[vm.selected_decision.uuid].push(response.data);
+ vm.selected_decision.new_audit_log_description = ""
+ }
+ else
+ {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+ }
+
+ // choose active decision
+ vm.selectDecision = function(decision,$event) {
+ if(vm.selected_decision != decision || vm.selected_decision.selected === undefined) {
+ // remove status from previos decision
+ vm.selected_decision.selected = false;
+
+ // populate new decision
+ vm.selected_decision = decision;
+ vm.selected_decision.selected = true;
+
+ $scope.$$postDigest(function () {
+ // Make extended window follow selected decision line
+ if ($event != undefined)
+ {
+ var line_item_bottom_offset = angular.element($event.target).prop('offsetHeight') + angular.element($event.target).prop('offsetTop');
+ var extendended_item_height = angular.element("#line-item-extended").prop('offsetHeight');
+ var diff_between_elements = line_item_bottom_offset - extendended_item_height;
+ if (diff_between_elements > 0)
+ {
+ angular.element("#line-item-extended").css('margin-top',(20+diff_between_elements) +'px')
+ } else {
+ angular.element("#line-item-extended").css('margin-top','')
+ }
+ }
+ });
+ }
+ };
+
+ // next steps modal
+ vm.openNextSteps = function(checklist) {
+ var modalInstance = $uibModal.open(
+ {
+ templateUrl: 'main/modals/next-steps/next-steps.html',
+ controller: 'NextStepsModalController',
+ controllerAs: 'vm',
+ size: 'lg',
+ resolve: {
+ engagement_team: function () {
+ return checklist.engagement.engagement_team;
+ },
+ title: function () {
+ return checklist.name;
+ },
+ associated_files: function () {
+ return checklist.repo_associated_files;
+ },
+ engagement_uuid: function () {
+ return checklist.engagement.uuid;
+ },
+ checklist: function () {
+ return checklist;
+ },
+ nextstep: function () {
+ return undefined;
+ }
+
+ }
+ });
+
+ modalInstance.result.then(function (data) {
+ if (data === 200) {
+ $rootScope.$broadcast('onUpdateEngagements',{select:{uuid:engagementUuid,page_type:'overview',sub_id:checklist.uuid}});
+ }
+ }, function () {
+ });
+ };
+
+ // set state modal
+ vm.openSetState = function(action,checklist) {
+ var modalInstance = $uibModal.open(
+ {
+ templateUrl: 'main/modals/checklist/state-approve-or-reject/state-approve-or-reject.html',
+ controller: 'stateDecisionModalController',
+ controllerAs: 'vm',
+ resolve: {
+ checklist: function () {return checklist},
+ action: function () {return action}
+ }
+ });
+
+ modalInstance.result.then(function (data) {
+ if (data) {
+ $rootScope.$broadcast('onUpdateEngagements',{select:{uuid:engagementUuid,page_type:'overview',sub_id:checklist.uuid}});
+ }
+ }, function () {
+ });
+
+ };
+
+ vm.openJenkinsLogModal = function () {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/general-log-modal/general-log-modal.html',
+ controller: 'GeneralLogModalController',
+ controllerAs: 'vm',
+ size: 'general-log-modal',
+ resolve: {
+ modalDetails: function () {
+ return {
+ "headline": 'Jenkins log',
+ "body": vm.data.checklist.jenkins_log,
+ };
+ }
+ }
+ });
+ };
+
+ // audit log modal
+ vm.auditLog = function() {
+
+ var auditLogData = {
+ name:vm.data.checklist.name,
+ uuid:vm.data.checklist.uuid,
+ checklistAuditLogs: vm.data.checklistAuditLogs
+
+ };
+
+ var modalInstance = $uibModal.open(
+ {
+ templateUrl: 'main/modals/audit-log/audit-log.html',
+ controller: 'AuditLogModalController',
+ controllerAs: 'vm',
+ size: 'lg'
+
+ ,
+ resolve: {
+ wizardData: function () {
+ return auditLogData;
+ }
+ }
+ });
+
+ modalInstance.result.then(function (data) {
+ if (data) {
+ vm.data.checklistAuditLogs.push(data);
+ }
+ }, function () {
+ $log.debug('Modal dismissed at: ' + new Date());
+ });
+ };
+
+ // edit checklist
+ vm.editChecklist = function() {
+ var checklistData = {
+ uuid:vm.data.checklist.uuid,
+ name:vm.data.checklist.name,
+ templates:vm.data.checklist.templates,
+ selectedTemplateUuid:vm.data.checklist.template.uuid,
+ selectedTemplateName:vm.data.checklist.template.name,
+ associatedFiles:vm.data.checklist.associated_files,
+ state:vm.data.checklist.state
+ };
+
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/checklist/checklist.html',
+ controller: 'ChecklistModalController',
+ controllerAs: 'vm',
+ size: 'lg'
+ ,
+ resolve: {
+ wizardData: function () {
+ return checklistData;
+ },
+ engagementUuid: function () {
+ return engagementUuid;
+ },
+ modal_type: function () {
+ return 'update';
+ }
+ }
+ });
+ modalInstance.result.then(function (data) {
+ if (data) {
+ vm.data.checklist.name = data.checklist_name;
+ vm.data.checklist.associated_files = data.associated_files;
+ }
+ });
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/dashboard/checklist/checklist.html b/d2ice.att.io/app/main/dashboard/checklist/checklist.html
new file mode 100755
index 00000000..b8da8836
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/checklist/checklist.html
@@ -0,0 +1,117 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="checkList" ng-disabled="true" ng-if="vm.data != false">
+<section id="state-bar" class="row ">
+ <ul class="nav nav-justified col-md-12">
+ <li ng-attr-id="{{ vm.data.checklist.state.replace('_',' ') == state ? 'state'+'_'+vm.data.checklist.name : ''}}" ng-class="{'active' : vm.data.checklist.state.replace('_',' ') == state}" data-ng-repeat="state in vm.data.states" >
+ <span class="state-icon sprite {{state.replace(' ','_')}}-state"></span>{{$index + 1}}. {{state}}
+ </li>
+ </ul>
+</section>
+<header class="row" id="cl-header"> <!-- start of header -->
+ <h1 class="col-sm-12 col-xs-12 col-md-6" id="cl-title"> <!-- start of title -->
+ <span id="edit-checklist" class="sprite edit-medium" ng-if="vm.data.checklist.state != 'closed' && !vm.is_peer_reviewer" ng-click="vm.editChecklist()" ></span>
+ <span class="bold" >Checklist:</span>
+ <span id="cl-name-id">{{vm.data.checklist.name}}</span>
+ </h1> <!-- end of title -->
+ <div class = "cl-action-buttons-frame col-sm-12 col-xs-12 col-md-6">
+
+ <div ng-if="vm.data.checklist.state != 'closed'" id="state-actions" class="">
+ <button class="btn btn-gradient-success" ng-if="vm.data.checklist.state != 'pending' && vm.data.checklist.state != 'automation' && (vm.data.checklist.state == 'pending' || vm.is_able_to_approve)" ng-click="vm.stateAction('approve')">
+ {{vm.data.checklist.state == 'pending' ? 'Automate' : vm.data.checklist.state == 'handoff' ? 'Handoff complete?' : 'Approve'}}
+ </button>
+ <button id="state-actions-btn-reject" class="btn btn-gradient-danger" ng-if="vm.has_files && vm.data.checklist.state != 'handoff' && vm.data.checklist.state != 'pending' && vm.data.checklist.state != 'automation'" ng-click="vm.stateAction('reject')">Reject</button>
+ <button id="state-actions-btn-add-next-steps" class="btn btn-gradient-primary" ng-if="vm.data.checklist.state != 'handoff' && vm.data.checklist.state != 'pending'" ng-click="vm.stateAction('next_step')">Add Next Steps</button>
+ </div>
+ <ul class="" id="cl-side-actions"> <!-- start of side actions -->
+ <li><span id="audit-log" ng-click="vm.auditLog()">Audit Log ({{vm.data.checklistAuditLogs.length}})</span></li>
+ <li><span id="jenkins-log" ng-click="vm.openJenkinsLogModal()">Jenkins Log</span></li>
+
+ </ul>
+ </div>
+</header>
+
+<article class="row" ng-class="{'blocked-area' : vm.data.checklist.state == 'pending' || vm.data.checklist.state == 'automation' }" id="checklist-main-section" >
+ <ul class="col-md-6" id="line-item-list"> <!-- start of line item list -->
+ <li data-ng-repeat="section in vm.data.checklistDecisions | toArray:false"><h2><span class="bold">Section {{section.counter}}:</span> {{section.section.name}}</h2> <!-- start of section -->
+ <ul>
+ <li data-ng-repeat="decision in section.decisions | toArray:false" class="line-item-row" ng-class="{'selected-line' : decision.selected }" ng-click="vm.selectDecision(decision,$event)"> <!-- start if line item row -->
+ <span class="col-sm-2 col-xs-2 col-md-2 value-icon"><span ng-class="decision.view_value_css" id="{{decision.uuid}}_{{decision.view_value}}" ></span>{{decision.counter}}</span>
+ <span class="col-sm-9 col-xs-9 col-md-9" ng-class="decision.lineitem.line_type" name="{{decision.lineitem.name}}">{{decision.lineitem.name}}</span>
+ <span class="col-sm-1 col-xs-1 col-md-1 auto-icon"><span ng-class="decision.auto_icon_css"></span></span>
+ <span class="selected-line-connector"></span>
+ </li> <!-- end of line item row -->
+ </ul>
+ </li> <!-- end of section -->
+ </ul> <!-- end of line item list -->
+ <aside class="col-md-6" id="line-item-extended"> <!-- start of line item extended view -->
+ <header class="row"> <!-- start of line-item extended header -->
+ <h2 class="col-sm-8 col-xs-8 col-md-8"><span class="bold">{{vm.selected_decision.counter}} -</span> {{vm.selected_decision.lineitem.name}}</h2>
+ <ul class="col-sm-4 col-xs-4 col-md-4" ng-if="(vm.data.checklist.state == 'review' || vm.data.checklist.state == 'peer_review' ) &&
+ vm.selected_decision.lineitem.line_type == 'manual'" ng-class="{'active' : vm.selected_decision.lineitem.line_type == 'manual'}" id="decision-actions">
+ <li class="not-relevant-btn" ng-class="{'active' : vm.selected_decision['selected-value'] == 'not_relevant'}" ng-click="vm.selected_decision.lineitem.line_type == 'manual' && vm.setDecision(vm.selected_decision,'not_relevant')"></li>
+ <li class="denied-cl-btn" ng-class="{'active' : vm.selected_decision['selected-value'] == 'denied'}" ng-click="vm.selected_decision.lineitem.line_type == 'manual' && vm.setDecision(vm.selected_decision,'denied')"></li>
+ <li class="approved-cl-btn" ng-class="{'active' : vm.selected_decision['selected-value'] == 'approved'}" ng-click="vm.selected_decision.lineitem.line_type == 'manual' && vm.setDecision(vm.selected_decision,'approved')"></li>
+ </ul>
+ </header> <!-- end of line-item extended header -->
+ <section id="line-item-description" ng-bind-html="vm.selected_decision.lineitem.description | htmlspecialchars | htmlstylespan"></section>
+ <section id="line-item-validation-instructions">
+ <h3>Validation Instructions</h3>
+ <p ng-bind-html="vm.selected_decision.lineitem.validation_instructions | htmlspecialchars"></p>
+ </section>
+ <section id="line-item-audit-logs" class="row"> <!-- start of line item audit logs -->
+ <h3 class="col-md-12">audit logs</h3>
+ <ul id="audit-log-list" class="col-md-12"> <!-- start of audit log list- -->
+ <li class="row" ng-repeat="auditlog in vm.data.decisionAuditLogs[vm.selected_decision.uuid] | orderBy:'create_time'">
+ <h4 class="col-md-6 audit-creator">{{auditlog.creator.full_name}}</h4><span class="col-md-6 audit-date">{{vm.formatDate(auditlog.create_time)}}</span>
+ <p id="line-item-audit-log-{{$index}}" class="col-md-12 audit-text">{{auditlog.description}}</p>
+ </li>
+
+ </ul> <!-- end of audit log list -->
+ <form name="checklistAuditLog" id="new-audit-log-from" ng-submit="vm.submitDecisionAuditLog()" novalidate class="row col-md-12"> <!-- start of new audit log form -->
+ <textarea name="TextBox" class="col-sm-12 col-xs-12 col-md-12" ng-model="vm.selected_decision.new_audit_log_description" id="new-audit-log-text" ng-trim="false" required></textarea>
+ <div data-ng-show="checklistAuditLog.TextBox.$error" class="ice-form-error">
+ <span ng-show="checklistAuditLog.TextBox.$error.pattern">Inserted text should not include any special chars such as: \%_* ."</span>
+ </div>
+ <button type="submit" class="col-sm-12 col-xs-12 col-md-12 btn btn-gradient-primary" id="submit-new-audit-lop-text">Add Log Entry</button>
+ </form> <!-- end of new audit log form -->
+ </section> <!-- end of line item audit logs -->
+ </aside> <!-- end of line item extended view -->
+</article> <!-- end of line item -->
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/checklist/checklist.less b/d2ice.att.io/app/main/dashboard/checklist/checklist.less
new file mode 100755
index 00000000..5e0d228e
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/checklist/checklist.less
@@ -0,0 +1,826 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.cl-action-button{
+ width: 30%;
+ margin-bottom: 2%;
+ margin-right: 3%;
+ &:last-child {
+ margin-right: 0;
+ }
+
+}
+#main .popover {
+ max-width: 330px;
+}
+// Pop over rules
+.popover {
+ border: 2px solid #15B3E8;
+ .m_14_r;
+ z-index:100000;
+}
+
+.popover .popover-title {
+ background-color: white;
+ margin-top: 5px;
+ .a_18_m;
+ padding: 5px 10px;
+}
+
+.popover .popover-content {
+ padding: 5px 10px;
+ .m_16_r;
+}
+.popover .popover-content ul{
+ list-style-type: none;// square;
+ padding-left:0px;
+ margin-left:0px;
+ .m_16_r;
+ word-wrap: break-word;
+}
+.cl-action-control {
+ padding-left:8%
+}
+
+.checkList {
+ height:100%;
+ > #checklist-main-section {
+ height:80% !important;
+ }
+
+ .blocked-area {
+ pointer-events: none;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ background-color: white;
+ }
+
+ #modal_header_checklist {
+ margin-top:0px;
+ padding: 0 29px;
+ }
+
+ #modal-header-checklist-15 {
+ margin-top:0px;
+ padding: 0 15px;
+ }
+
+ .rows {
+
+ }
+
+
+ .font-deco {
+ text-decoration-line: underline;
+ text-decoration-style: dashed;
+ }
+
+ .lineColor
+ {
+ background-color:#F6F3F3;
+ }
+
+ .font_header
+ {
+ .m_18_m;
+ }
+
+ .font_header_chk_name
+ {
+ .m_18_r;
+ }
+
+ .font_user_name
+ {
+ .m_18_m;
+ }
+
+ .font_date
+ {
+ .m_14_r;
+ }
+
+ .font_line
+ {
+ border-bottom: 1px solid grey;
+ }
+
+ .font_desc
+ {
+ .m_16_r;
+ text-align:left;
+ }
+
+ .pad0
+ {
+ padding:0px;
+ }
+
+ .dash
+ {
+ border-bottom: dashed 1px;
+ border-color: @main_color_q;
+ padding: 0px;
+ }
+
+ .italic
+ {
+ font-style:italic;
+ }
+
+
+ #modal-title {
+ margin: 0px;
+ }
+
+ .checkList-form {
+ max-height: 100%;
+ //overflow-y: auto;
+ //overflow-x: hidden;
+
+ #audit-log-lines {
+
+ }
+
+
+ #checklist-subject
+ {
+ padding:0 15px;
+ margin-bottom: 0px;
+ }
+
+ .checklist-modal-multi-select {
+ margin-top: 1%;
+
+ .btn-group .btn {
+ .m_14_m;
+ }
+ }
+
+ .btn {
+ width: 100%;
+ }
+
+ .action-buttons{
+ width: 100%;
+ margin-bottom: 7px;
+ }
+
+ .col-no-pad
+ {
+ padding:0px;
+ }
+
+ .col-no-top
+ {
+ margin:0px 0px 0px 0px;
+ }
+
+ .text-right
+ {
+ text-align:right;
+ }
+
+ .modal-header {
+ display: flex;
+ flex-direction: row;
+
+ h2, h3 {
+ display: inline-block;
+ flex-grow: 10;
+ }
+ }
+
+ .font_title
+ {
+ .a_16_m;
+ }
+
+ .add-icon {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ }
+
+
+ .add-button {
+ margin-top: 8px;
+ display: block;
+ .add-text {
+ .a_16_m;
+ vertical-align: top;
+ margin-left: 6px;
+ }
+
+ }
+
+ .margin_btm
+ {
+ margin-bottom:12px;
+ }
+
+ .margin_top
+ {
+ margin-top:12px;
+ }
+
+ .margin_btm5
+ {
+ margin-bottom: 5px;
+ }
+
+
+ .personImage
+ {
+ .profiles-sprite;
+ .profiles-sprite.profile-large;
+ display: block;
+ }
+
+ .table{
+ margin-bottom: 0;
+ }
+
+ .table-container-flex {
+
+ .data-row-wrapper {
+ padding: 10px 20px;
+ }
+
+ .flex-item:nth-child(1) {
+ padding-left: 0;
+ flex-grow: 25;
+ }
+
+ .flex-item:nth-child(2) {
+ flex-grow: 25;
+ }
+
+ .flex-item:nth-child(3) {
+ flex-grow: 25;
+ }
+
+ .flex-item:nth-child(4) {
+ flex-grow: 25;
+ }
+
+ }
+
+ .table-container-flex-a {
+
+ .data-row-wrapper {
+ padding: 10px 20px;
+ }
+
+ .flex-item-a:nth-child(1) {
+
+ padding-left: 0;
+ flex-grow: 40;
+ width:90%;
+ float:left;
+ }
+
+ .flex-item-a:nth-child(2) {
+
+ flex-grow: 25;
+ width:10%;
+ float:left;
+ }
+ }
+ //.a_16_m;
+
+ .remove-icon {
+ cursor: pointer;
+ vertical-align: text-top;
+ //.sprite;
+ //.sprite.delete;//-circle;
+ .actions-sprite;
+ .actions-sprite.delete_large;
+
+ display:block;
+ position:relative;
+ top:11px;
+ }
+
+
+
+
+ //.btn-primary-with-margin {
+ // border: 1px solid #8799A3;
+ // border-radius: 6px;
+ // background: #1E79B0; /* For browsers that do not support gradients */
+ // background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ // background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ // background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ // background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ // margin-bottom:7px;
+ //}
+ //
+ //.btn-primary {
+ // border: 1px solid #8799A3;
+ // border-radius: 6px;
+ // background: #1E79B0; /* For browsers that do not support gradients */
+ // background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ // background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ // background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ // background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ //}
+
+
+ .flex-item-a:nth-child(0) {
+ padding-left: 0;
+ flex-grow: 40;
+ width:80%
+ }
+
+ .flex-item-a:nth-child(1) {
+ flex-grow: 25;
+ width:20%;
+ }
+
+ //.content {
+
+ .steps-progress-wrapper {
+ margin-top: 10px;
+ }
+
+ .fnt
+ {
+ font-size:20px;
+ }
+
+ h1 {
+ .a_36;
+ margin: 0 0 30px 0;
+ }
+
+ h3 {
+ .m_18_m;
+ }
+ h2 {
+ margin: 0 0 10px 0;
+ .a_24_m;
+ position: relative;
+ .add-people,
+ .add-step {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ margin-left: 8px;
+ cursor: pointer;
+ }
+ }
+
+ .main-section {
+ margin-top: 30px;
+ }
+ }
+
+ // dashboard css
+ padding:0 20px;
+
+ #state-bar {
+ float:none;
+ height: 5%;
+
+ }
+ #state-bar > ul {
+ border-bottom: dashed 1px;
+ border-color: @main_color_q;
+ padding-bottom:2px;
+ }
+ #state-bar > ul > li {
+ .m_14_r;
+ text-transform: uppercase;
+ text-align: left;
+ }
+ #state-bar > ul > li.active {
+ font-family:@font-omnes-bold;
+ }
+
+ #state-bar > ul > li > .state-icon {
+ display: inline-block;
+ position: relative;
+ top: 2px;
+ margin-right:5px;
+ }
+
+ #cl-header {
+ height:12%;
+ padding-top:1%;
+ }
+
+ #cl-header > #cl-title {
+ padding-left: 0px;
+ .a_24;
+ }
+ #cl-header > #cl-title > span.bold {
+ .a_24_m;
+ }
+ #cl-header > #cl-title > #edit-checklist {
+ display: inline-block;
+ margin-right: 5px;
+ cursor: pointer;
+ }
+
+ #cl-side-actions {
+ list-style: none;
+ margin-top: 5px;
+ }
+
+
+ #cl-side-actions > li {
+ display:inline-block;
+ margin-left:5px;
+ .n_12_m;
+ }
+
+ .cl-action-buttons-frame{
+
+ list-style: none;
+ text-align: right;
+ }
+
+ .cl-btn-associated {
+ border-bottom: 1px solid;
+ border-color: @main_color_l;
+ .a_26_m;
+ }
+
+ .cl-btn-cl-audit {
+ margin-right: 15%;
+ border-bottom: 1px solid;
+ border-color: @main_color_l;
+ }
+
+
+ #state-actions {
+ display: inline-block;
+ border-bottom: 1px solid;
+ border-color: @main_color_q;
+ padding-bottom: 5px;
+ }
+ #state-actions button {
+ margin-left: 10px;
+ }
+ #state-actions button:first-child {
+ margin-left: 0px;
+ }
+ #cl-side-actions span {
+ cursor: pointer;
+ border-bottom: 2px solid @main_color_m;
+ //text-transform: uppercase;
+ border-bottom: 1px solid;
+ border-color: @main_color_q;
+
+ }
+
+
+ #line-item-list {
+ list-style: none;
+ padding-right:15px;
+ }
+
+
+ #line-item-list > li {
+ margin-bottom: 25px;
+ }
+ #line-item-list > li > h2 {
+ text-transform: capitalize;
+ border-bottom: 1px solid;
+ border-color: @main_color_q;
+ width: 100%;
+ margin-bottom: 0px;
+ padding-left: 5px;
+ .m_24;
+ }
+ #line-item-list > li > h2 > span.bold {
+ .m_24_m;
+ }
+
+ #line-item-list > li > ul {
+ list-style: none;
+ }
+ #line-item-list > li > ul >li.line-item-row {
+ border-bottom: 1px solid;
+ border-color: @main_color_q;
+ line-height: 30px;
+ padding: 0px;
+ vertical-align: middle;
+ height: 30px;
+ .m_16_r;
+ cursor: pointer;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .value-icon {
+ padding: 0px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .value-icon span {
+ display: inline-block;
+ position: relative;
+ top: 3px;
+ margin-right: 5px;
+ margin-left: 3px;
+ width:15px;
+ height:15px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .auto-icon {
+ text-align:right;
+ padding: 0px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row .auto-icon span {
+ display: inline-block;
+ position: relative;
+ top: 3px;
+ margin-right: 3px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row.selected-line {
+ background-color: @bg_color_a;
+ border-left: 2px solid;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-color: @main_color_a;
+ position:relative;
+ z-index:1;
+ top: -1px;
+ left: -2px;
+ }
+
+ #line-item-list > li > ul >li.line-item-row.selected-line > .selected-line-connector {
+ position: absolute;
+ right: -19px;
+ width: 20px;
+ height: 30px;
+ top: -2px;
+ background-color: @bg_color_a;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-color: @main_color_a;
+ }
+ #line-item-extended {
+ background-color: @bg_color_a;
+ border: 2px solid;
+ border-color: @main_color_a;
+ padding:15px;
+ @media (min-width: 992px) {
+ max-height: 100%;
+ overflow-y: auto;
+ }
+ }
+ #line-item-extended >header {
+ padding: 0 30px;
+ padding-bottom: 0px;
+ }
+ #line-item-extended >header > h2 {
+ text-transform: capitalize;
+ padding:0px;
+ margin:0px;
+ line-height:32px;
+ .m_18_r;
+ }
+ #line-item-extended > header > h2 > span.bold {
+ .m_18_m;
+ }
+ #line-item-extended >header > #decision-actions {
+ list-style: none;
+ text-align: right;
+ margin:0px;
+ }
+ #line-item-extended >header > #decision-actions > li {
+ display: inline-block;
+ margin-left: 2px;
+ .sprite;
+ }
+ #line-item-extended >header > #decision-actions.active > li {
+ cursor:pointer;
+ }
+
+ #line-item-extended >header > #decision-actions > li.not-relevant-btn {
+ .sprite.not-relevant-btn;
+ }
+
+ #line-item-extended >header > #decision-actions.active > li.not-relevant-btn:hover {
+ .sprite.not-relevant-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.not-relevant-btn.active {
+ .sprite.not-relevant-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.denied-cl-btn {
+ .sprite.denied-cl-btn;
+ }
+ #line-item-extended >header > #decision-actions.active > li.denied-cl-btn:hover {
+ .sprite.denied-cl-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.denied-cl-btn.active {
+ .sprite.denied-cl-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.approved-cl-btn {
+ .sprite.approved-cl-btn;
+ }
+ #line-item-extended >header > #decision-actions.active > li.approved-cl-btn:hover {
+ .sprite.approved-cl-btn-active;
+ }
+ #line-item-extended >header > #decision-actions > li.approved-cl-btn.active {
+ .sprite.approved-cl-btn-active;
+ }
+
+
+ #line-item-extended > #line-item-description {
+ margin: 0 15px;
+ .m_16_r;
+ }
+
+ #line-item-extended > #line-item-validation-instructions {
+ .m_14_r;
+ background-color: #fff;
+ border: 1px solid;
+ border-color: @main_color_a;
+ padding: 15px;
+ margin-top: 15px;
+ }
+
+ #line-item-extended > #line-item-validation-instructions h3 {
+ text-transform: capitalize;
+ margin: 0px;
+ .m_18_m;
+ }
+
+ #line-item-extended > #line-item-validation-instructions p {
+ margin-top: 5px;
+
+ }
+
+ #line-item-extended > #line-item-validation-instructions p ul {
+ padding-left: 15px;
+ }
+
+ #line-item-extended > #line-item-audit-logs {
+ padding:0 15px;
+ }
+
+ #line-item-extended > #line-item-audit-logs > h3 {
+ text-transform: capitalize;
+ .m_18_m;
+
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list {
+ list-style:none;
+
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li {
+ margin: 0 15px 10px;
+ border-bottom: 2px solid;
+ border-color: @main_color_q;
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li > .audit-creator {
+ .m_16_m;
+ margin:0px;
+ padding:0px;
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li > .audit-date {
+ text-align:right;
+ .m_14_r;
+ padding:0px;
+ }
+ #line-item-extended > #line-item-audit-logs > #audit-log-list > li > .audit-text {
+ .m_16_r;
+ margin-bottom:0px;
+ padding:0px;
+ }
+
+ #line-item-extended > #line-item-audit-logs > #new-audit-log-from {
+ margin: 0 0 15px;
+ }
+
+ #line-item-extended > #line-item-audit-logs > #new-audit-log-from #new-audit-log-text {
+ border-color: @main_color_q;
+ margin-bottom:15px;
+ }
+
+ .btn-gradient-primary {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #37B2E5;
+ *background-color: #37B2E5;
+ background-image: -moz-linear-gradient(top, #0079AB, #37B2E5);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0079AB), to(#37B2E5));
+ background-image: -webkit-linear-gradient(top, #0079AB, #37B2E5);
+ background-image: -o-linear-gradient(top, #0079AB, #37B2E5);
+ background-image: linear-gradient(to bottom, #0079AB, #37B2E5);
+ background-repeat: repeat-x;
+ border-color: #37B2E5;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0079AB', endColorstr='#37B2E5', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+ .btn-sample:hover,
+ .btn-sample:focus,
+ .btn-sample:active,
+ .btn-sample.active,
+ .btn-sample.disabled,
+ .btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #37B2E5;
+ *background-color: #003bb3;
+ }
+
+ .btn-gradient-success {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #41A02C;
+ *background-color: #41A02C;
+ background-image: -moz-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#A2E652), to(#41A02C));
+ background-image: -webkit-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -o-linear-gradient(top, #A2E652, #41A02C);
+ background-image: linear-gradient(to bottom, #A2E652, #41A02C);
+ background-repeat: repeat-x;
+ border-color: #41A02C;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#A2E652', endColorstr='#41A02C', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+ .btn-sample:hover,
+ .btn-sample:focus,
+ .btn-sample:active,
+ .btn-sample.active,
+ .btn-sample.disabled,
+ .btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #41A02C;
+ *background-color: #003bb3;
+ }
+
+ .btn-gradient-danger {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #AE0020;
+ *background-color: #AE0020;
+ background-image: -moz-linear-gradient(top, #F74658, #AE0020);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#F74658), to(#AE0020));
+ background-image: -webkit-linear-gradient(top, #F74658, #AE0020);
+ background-image: -o-linear-gradient(top, #F74658, #AE0020);
+ background-image: linear-gradient(to bottom, #F74658, #AE0020);
+ background-repeat: repeat-x;
+ border-color: #AE0020;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F74658', endColorstr='#AE0020', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+ .btn-sample:hover,
+ .btn-sample:focus,
+ .btn-sample:active,
+ .btn-sample.active,
+ .btn-sample.disabled,
+ .btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #AE0020;
+ *background-color: #003bb3;
+ }
+
+
+
+
+}
diff --git a/d2ice.att.io/app/main/dashboard/dashboard/dashboard.controller.js b/d2ice.att.io/app/main/dashboard/dashboard/dashboard.controller.js
new file mode 100755
index 00000000..b6183b79
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/dashboard/dashboard.controller.js
@@ -0,0 +1,235 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.dashboard.dashboard',['angularUtils.directives.dirPagination', 'ngFileSaver'])
+ .controller('DashboardMainController', ["$rootScope", "pageService", "stepsService", "vfService", "usersService",
+ "iceConstants", "localStorageService", "FileSaver", "Blob", "cmsService", "$uibModal", "$log", dashboardMainController]);
+
+ function dashboardMainController($rootScope, pageService, stepsService, vfService, usersService, iceConstants,
+ localStorageService, FileSaver, Blob, cmsService, $uibModal, $log) {
+ var vm = this;
+
+ var init = function () {
+ pageService.setPage('dashboard');
+ cmsService.setAnnouncementToast();
+ localStorageService.setJson("ice.settings.eng_uuid",undefined);
+ vm.stages = iceConstants.stages;
+ vm.stages.all = 'All';
+ vm.search_keyword = '';
+ vm.search_stage = 'All';
+ vm.statistic_stage_filter = 'All';
+ vm.current_starting_offset = "0";
+ vm.num_of_returned_items = 0;
+ vm.pagination_num_of_objects = 8;
+ vm.me = vm.user = usersService.getUserData();
+ vm.isAdminRo = usersService.isUserInRole(iceConstants.roles.admin_ro);
+ vm.isEngagmentEL = usersService.isUserInRole(iceConstants.roles.el);
+ vm.isEngagmentLead = usersService.isEngagementEL(vm.team);
+ vm.isAdmin = usersService.isAdmin(vm.me);
+ vm.page_num = 1;
+ vm.searchEngagements(1);
+ vm.request_statistics_data();
+ getUserNextSteps();
+ };
+
+ vm.request_statistics_data = function(){
+ vfService.getEngagements(vm.me.uuid)
+ .then(function (response) {
+ if (response.status === 200 && response.data && response.data !== '') {
+ vm.enagements_search_list = response.data;
+ var vfc_array = undefined;
+ var vfc_num = 0;
+ var eng_num = 0;
+ vm.enagements_search_list.forEach(function (engagement) {
+ if(vm.statistic_stage_filter == "All") {
+ eng_num++;
+ if (engagement.engagement_stage == "Validated" || engagement.engagement_stage == "Completed") {
+ if (engagement.vfc.length > 1) {
+ vfc_array = engagement.vfc.split(", ").length;
+ vfc_num += vfc_array;
+ }
+ }
+ }
+ else {
+ if(engagement.engagement_stage == vm.statistic_stage_filter){
+ eng_num++;
+ if (engagement.vfc.length > 1 && (engagement.engagement_stage == "Validated" || engagement.engagement_stage == "Completed")) {
+ vfc_array = engagement.vfc.split(", ").length;
+ vfc_num += vfc_array;
+ }
+ }
+ }
+
+ });
+
+ vm.vfc_num = vfc_num;
+ vm.eng_num = eng_num;
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+
+ };
+
+ vm.onStageChange = function() {
+ vm.page_num = 1;
+
+ vm.searchEngagements();
+ };
+
+ vm.onKeywordChange = function() {
+ vm.page_num = 1;
+
+ vm.searchEngagements();
+ };
+
+ vm.searchEngagements = function () {
+ vm.current_starting_offset = (vm.page_num-1)*vm.pagination_num_of_objects;
+ vm.postData = {'stage': vm.search_stage, 'keyword': vm.search_keyword, 'offset': vm.current_starting_offset, 'limit': vm.pagination_num_of_objects};
+ vfService.getExpandedEngagements(vm.postData)
+ .then(function (response) {
+ if (response.status === 200 && response.data && response.data !== '') {
+ vm.vf_search_list = response.data['array'];
+ vm.num_of_returned_items = response.data['num_of_objects'];
+ vm.vf_search_list.forEach(function (vf){
+ var progress_needed_data = {
+ enable_edit: false,
+ completion_date: vf.engagement__target_completion_date,
+ ecomp_release: vf.ecomp_release__name,
+ vnf_version: vf.version,
+ aic_version: vf.deployment_target__version,
+ aic_instantiation_time:vf.engagement__aic_instantiation_time,
+ asdc_onboarding_time:vf.engagement__asdc_onboarding_time,
+ heat_validated_time:vf.engagement__heat_validated_time,
+ image_scan_time: vf.engagement__image_scan_time,
+ engagement_uuid: vf.engagement__uuid,
+ manual_id: vf.engagement__engagement_manual_id,
+ name: vf.vf__name,
+ starred: false
+ };
+ vf.progress_needed_data = progress_needed_data;
+ vf.starred_users.forEach(function (user) {
+ if (vm.me.uuid == user) {
+ vf.progress_needed_data.starred = true;
+ }
+ });
+
+
+ });
+ vm.vf_display_list = vm.vf_search_list;
+
+ addStatusesLoadedAttr();
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ vm.goToEngagement = function(uuid){
+ $rootScope.$broadcast('searchSelectEngagement',uuid);
+ };
+
+ vm.exportEngagementCSV = function() {
+ var stage = vm.search_stage || "";
+ var keyword = vm.search_keyword || "";
+ $rootScope.ice.loader.show = true;
+
+ vfService.exportEngagementsCSV(stage, keyword)
+ .then(function(response) {
+ if(response && response.data) {
+ var data = new Blob([response.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
+ FileSaver.saveAs(data, 'D2Ice.xlsx');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ vm.openCMSReadMoreModal = function(cmsPost) {
+ if(cmsPost) {
+ $uibModal.open({
+ templateUrl: 'main/modals/cms-post-modal/cms-post-modal.html',
+ controller: 'cmsPostModalController',
+ controllerAs: 'vm',
+ size: 'cms-post-read-more',
+ resolve: {
+ post: function () {
+ return cmsPost;
+ }
+ }
+ });
+ } else {
+ $log.warn("Cannot open cms post.")
+ }
+ };
+
+ function getUserNextSteps() {
+ vm.userNextSteps = [];
+
+ stepsService.getByUser()
+ .then(function(response) {
+ vm.userNextSteps = response.data.data;
+ vm.userNextStepsCount = response.data.count;
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ };
+
+ function addStatusesLoadedAttr() {
+ angular.element(document).ready(function () {
+ var statusesTitleElement = angular.element( document.querySelector('#dashboard-title'));
+ if(statusesTitleElement && statusesTitleElement.length === 1) {
+ statusesTitleElement.attr('list-loaded', 'true');
+ }
+ });
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/dashboard/dashboard/dashboard.html b/d2ice.att.io/app/main/dashboard/dashboard/dashboard.html
new file mode 100755
index 00000000..c03251b9
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/dashboard/dashboard.html
@@ -0,0 +1,111 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="dashboard-view row">
+ <div class="col-md-8 " id="dashboard-main-panel">
+ <header class="row col-md-12" id="dashboard-header">
+ <h1 class="col-md-4" id="dashboard-title">Statuses</h1>
+ <span class="col-md-8 search-filters">
+ Stage
+ <select id="search-filter-stage" class="form-control search-filter-stage" ng-model="vm.search_stage" ng-change='vm.onStageChange()' ng-options="stage for stage in vm.stages ">
+ <option value="all" selected>All</option>
+ <option value="Intake">Intake</option>
+ <option value="Active">Active</option>
+ <option value="3">3</option>
+ </select>
+ <input type="text"
+ id="search-filter-keyword"
+ ng-model="vm.search_keyword"
+ ng-model-options="{ debounce: 150 }"
+ placeholder="Search by EID, VF or VFC"
+ class="form-control"
+ ng-change='vm.onKeywordChange()'
+ >
+ </span>
+ </header>
+ <content class="row col-md-12" id="search-results">
+ <div class="col-md-12 progress-bar-row" dir-paginate="engagement in vm.vf_display_list | itemsPerPage: vm.pagination_num_of_objects" total-items="vm.num_of_returned_items" current-page="vm.page_num" track by engagement.engagement__uuid >
+ <progress-directive
+ progress="{{engagement.engagement__progress}}"
+ enable-edit=false
+ data="engagement.progress_needed_data"
+ statuses=true
+ enable-refresh=false>
+ </progress-directive>
+ </div>
+ <span class="col-md-12" id="export-to-csv" ng-click="vm.exportEngagementCSV()">Export to Excel >></span>
+ <dir-pagination-controls on-page-change="vm.searchEngagements()" class="col-md-12" id="engagements-pagination"></dir-pagination-controls>
+ </content>
+ </div>
+ <aside class="col-md-4 " id="dashboard-side-panel">
+ <div class="col-md-12" id="assgined-nextsteps">
+ <div id="next-steps-header">Assigned To You ({{vm.userNextStepsCount}})</div>
+ <ul id="next-steps-list">
+ <h4 class="engagement-title" ng-if="vm.userNextSteps.length == 0">No next steps are assigned to you.</h4>
+ <li data-ng-repeat="step in vm.userNextSteps | orderBy: 'due_date'" class="next-step-details">
+ <div class="next-step-details-header row">
+ <h2 class="engagement-title col-md-8" name="{{step.engagement_manual_id}}" ng-click="vm.goToEngagement(step.engagement_uuid)">Engagement - <span class="engagement-name">{{step.engagement_manual_id}}: {{step.vf_name}}</span></h2>
+ <span class="due-date col-md-4">
+ <i class="fa fa-clock-o"></i>
+ <span class="due-date-icon" name="duedate-{{step.due_date}}"></span>{{step.due_date | date2: 'EEEE MMMM doo yyyy'}}
+ </span>
+ </div>
+ <p class="next-step-description" name="description-{{step.engagement_manual_id}}" ng-bind-html="step.description | htmlspecialchars"></p>
+ <span class="next-step-creation" name="creator-full-name-{{step.creator_full_name}}">Added at {{step.create_time | date2: 'EEEE MMMM doo yyyy'}} by {{step.creator_full_name}}</span>
+ </li>
+ </ul>
+ </div>
+ <div class="line-seperator col-md-12" data-ng-if="vm.isEngagmentEL || vm.isAdmin || vm.isAdminRo" ></div>
+ <div class="col-md-12" data-ng-if="vm.isEngagmentEL || vm.isAdmin || vm.isAdminRo" id="statistics">
+ <div id="statistics-header" class="row">
+ <h2 class="col-md-4">Statistics</h2>
+ <span class="col-md-8 search-filters">
+ Stage
+ <select class="search-filter-stage" ng-model="vm.statistic_stage_filter" ng-change='vm.request_statistics_data()' ng-options="stage for stage in vm.stages "></select>
+ </span>
+ </div>
+
+ <div id="statistics-list" class="row">
+ <span class="col-md-8 statistic-name">Validations</span><span class="col-md-4 statistic-count" id="id-validations-num">{{vm.vfc_num}}</span>
+ <span class="col-md-8 statistic-name">Engagements</span><span class="col-md-4 statistic-count" id="id-engagements-num">{{vm.eng_num}}</span>
+ </div>
+ </div>
+ <div class="line-seperator col-md-12"></div>
+ <ice-news-and-announcement limit="5" show-description="true"></ice-news-and-announcement>
+ </aside>
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/dashboard/dashboard.less b/d2ice.att.io/app/main/dashboard/dashboard/dashboard.less
new file mode 100755
index 00000000..4c824796
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/dashboard/dashboard.less
@@ -0,0 +1,189 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ .dashboard .content-container #content {
+ height: 100%;
+ overflow-y: auto;
+ }
+.dashboard-view {
+ padding: 10px;
+
+ .steps-progress-wrapper {
+ border:none;
+ background-color: @main_color_p;
+ }
+
+
+ #dashboard-main-panel {
+ #dashboard-header {
+ #dashboard-title {
+ .a_26_m;
+ margin:0px;
+ line-height:40px;
+ }
+ .search-filters {
+ text-align: right;
+ .m_16_m;
+ line-height:40px;
+ .search-filter-stage {
+ margin-left:10px;
+ display: inline-block;
+ width: 40%;
+ }
+ #search-filter-keyword {
+ margin-left:10px;
+ display: inline-block;
+ width: 40%;
+ }
+
+ }
+ }
+ #search-results {
+ .progress-bar-row {
+ padding:0px;
+ }
+
+ .progress-bar-row:nth-child(even) .steps-progress-wrapper {
+ background-color: @func_color_r;
+ }
+
+ #export-to-csv {
+ text-align : right;
+ .m_14_m;
+ text-decoration: underline;
+ cursor:pointer;
+ }
+ #engagements-pagination {
+ text-align:center;
+ .pagination {
+ margin:0px;
+ }
+ }
+
+ }
+
+ }
+ #dashboard-side-panel {
+ border-left: solid 1px @main_color_gray;
+
+ #assgined-nextsteps {
+ border: 1px solid @toolbar_background_color;
+ padding:0px;
+
+ #next-steps-header {
+ background-color: @toolbar_background_color;
+ .p_22_m;
+ padding: 10px 10px 0;
+ }
+ #next-steps-list {
+ list-style:none;
+ padding: 0 15px;
+ .next-step-details {
+ border-bottom: 1px dashed @main_color_a;
+ padding-bottom:10px;
+
+ .next-step-details-header {
+ .engagement-title {
+ cursor:pointer;
+ .m_14_m;
+ margin-top: 15px;
+ margin-bottom: 0px;
+ .engagement-name {
+ text-decoration: underline;
+ }
+ }
+ .due-date {
+ .m_14_m;
+ margin-top: 10px;
+ margin-bottom: 0px;
+ text-align:right;
+ .due-date-icon {
+ }
+ }
+ }
+ .next-step-description {
+ .m_18_r;
+ margin: 3px 0px;
+ line-height: 20px;
+ }
+ .next-step-creation {
+ .m_14_r;
+ }
+
+ }
+ .next-step-details:last-child {
+ padding:0px;
+ border:none;
+ }
+ }
+ }
+ .line-seperator {
+ border-bottom: dashed 1px @main_color_gray;
+ margin: 20px 0;
+ }
+ #statistics {
+
+ border: 1px solid @main_color_gray;
+ padding:15px;
+
+ #statistics-header {
+ margin-bottom: 10px;
+ h2 {
+ .m_24_m;
+ color: @main_color_gray;
+ margin: 0px;
+ }
+ .search-filters {
+ text-align: right;
+ .search-filter-stage {
+ margin-left:10px;
+ width:50%;
+
+ }
+ }
+ }
+ #statistics-list {
+ .statistic-name {
+ }
+ .statistic-count {
+ text-align:right;
+ }
+ }
+ }
+ }
+}
diff --git a/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.controller.js b/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.controller.js
new file mode 100755
index 00000000..c8af53f7
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.controller.js
@@ -0,0 +1,245 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.dashboard.main')
+ .controller('detailedViewController', ["$rootScope", "$stateParams", "vfcService", "dtsiteService", "usersService",
+ "$uibModal", "vfService", "$log", "_", detailedViewController]);
+
+ function detailedViewController($rootScope, $stateParams, vfcService, dtsiteService, usersService, $uibModal, vfService, $log, _) {
+ var vm = this;
+
+ var init = function () {
+ $rootScope.timeGapLocal = moment().format("z");// timeGap();
+ $rootScope.ampm = moment().format('A');
+ $rootScope.mom = moment().tz(moment.tz.guess()).format('z');
+ vm.is_aic_edit_mode = false;
+ vm.is_ecomp_edit_mode = false;
+ vm.aic_loaded = false;
+ vm.ecomp_loaded = false;
+
+ if($stateParams.engagement != undefined) {
+ vm.engagement = $stateParams.engagement;
+ }
+
+ if (vm.engagement != undefined)
+ {
+ vm.me = usersService.getUserData();
+ vfService.getSingleEngagement(vm.me.uuid,vm.engagement.uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+
+ if (response.status === 200 && response.data && response.data !== '') {
+ var vf_data = response.data;
+
+ vm.engagement_manual_id = vf_data.engagement.engagement_manual_id;
+ vm.vf_name = vf_data.name;
+ vm.vf_version = vf_data.version;
+ vm.vf_uuid = vf_data.uuid;
+ vm.ecomp_release = vf_data.ecomp_release;
+ vm.target_lab = new Date(vf_data.target_lab_entry_date);
+ vm.dtversion = vf_data.deployment_target;
+ vm.selected_dt_uuid = vm.dtversion.uuid;
+ vm.selected_ecomp_uuid = vm.ecomp_release.uuid;
+ vm.me = usersService.getUserData();
+ vm.name = vm.engagement.name;
+ vm.isEngagementEL = usersService.isEngagementEL(vf_data.engagement.engagement_team);
+ vm.isAdmin = usersService.isAdmin(vm.me);
+ initDTsites();
+ initVfcs();
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+
+ }
+ };
+
+
+ vm.addVfc = function () {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/detailed-view/vfc/detailed-view-vfc-modal.html',
+ controller: 'detailedViewVFCModalController',
+ controllerAs: 'vm',
+ resolve: {
+ vf_uuid: function () {
+ return vm.vf_uuid;
+ },
+ }
+ });
+ modalInstance.result.then(function (data) {
+ if (data) {
+ initVfcs();
+ }
+ });
+ };
+ this.personArray = [vm.dtversion,vm.vf_uuid];
+
+ vm.editValidationDetails = function () {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/validation-details/detailed-view-validation-details-modal.html',
+ controller: 'validationDetailsModalController',
+ controllerAs: 'vm',
+ resolve: {
+ vf_uuid: function () {
+ return vm.vf_uuid;
+ }
+ }
+ });
+ modalInstance.result.then(function (data) {
+ if (data) {
+ init();
+ }
+ });
+ };
+
+ vm.addDTS = function () {
+ if(vm.isEngagementEL || vm.isAdmin) {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.html',
+ controller: 'detailedViewDtsitesModalController',
+ controllerAs: 'vm',
+ resolve: {
+ vf_uuid: function () {
+ return vm.vf_uuid;
+ },
+ }
+ });
+
+ modalInstance.result.then(function (data) {
+ if (data) {
+ if(data === 200) {
+ initDTsites();
+ }
+ }
+ });
+ }
+ };
+
+
+ vm.changeTargetLabEntry = function(){
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/target-lab-entry/change-lab-entry-date.html',
+ controller: 'ChangeLabEntryDateModalController',
+ controllerAs: 'vm',
+ resolve: {
+ targetLabDate: function () {
+ return vm.target_lab;
+ },
+ engagementUuid: function () {
+ return vm.engagement.uuid;
+ }
+ }
+ });
+ modalInstance.result.then(function (data) {
+ if (!data){
+ return;
+ }
+ else {
+ vm.target_lab = new Date(data.target_date);
+ $log.debug("data.target_date",data.target_date)
+ $log.debug("vm.target_lab",vm.target_lab)
+ }
+ }, function () {
+ $log.error('Modal dismissed at: ' + new Date());
+ });
+ };
+ //In case user press the delete icon next to a VFC, this function would be activated
+ vm.deleteVfc = function(vfc_uuid){
+ vfcService.delete(vfc_uuid,vm.vf_uuid)
+ .then(function (response) {
+ if (response.status === 204) {
+ initVfcs();
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ };
+
+ vm.deleteDTSite = function(vfUuid, dtsUuid){
+ dtsiteService.delete(vm.vf_uuid, dtsUuid)
+ .then(function (response) {
+ if (response.status === 204) {
+ initDTsites();
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ };
+
+
+ var initDTsites = function() {
+ if(vm.isEngagementEL || vm.isAdmin) {
+ $rootScope.ice.loader.show = true;
+ dtsiteService.getVFSites(vm.vf_uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.dtsites = response.data;
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ };
+
+ var initVfcs = function() {
+ $rootScope.ice.loader.show = true;
+ vfcService.get(vm.vf_uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.vfcs = response.data;
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.html b/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.html
new file mode 100755
index 00000000..02eb760a
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.html
@@ -0,0 +1,109 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div id="detailed-view">
+ <div class="row">
+ <h1 ><span class="bold">{{vm.engagement_manual_id + ': '}}</span>{{vm.vf_name}} </h1>
+ </div>
+ <div class="vfc-main-section row">
+ <div class="col-xs-4 col-md-4 vfc-steps">
+ <div id="validation-details">
+ <div id="validation-details-header">
+ <span id="vd-title">Validation Details</span><span class="add-vdetails"></span>
+ <i class="edit-target-completion fa fa-pencil-square-o" id="update-validation-details" ng-click="vm.editValidationDetails()" class="add-vdetails" ></i>
+ </div>
+ <div id="validation-details-content">
+ <div >
+ <div class ="line ecomp_release_field " ng-if="!vm.is_ecomp_edit_mode"><span id="ecomp-release-headline">ECOMP Release:</span> <span id="ecomp_version_{{vm.ecomp_release.name}}">{{vm.ecomp_release.name}}</span></div>
+ </div>
+ <div>
+ <div class ="line dtversion_field" ng-if = "vm.is_aic_edit_mode === false"><span id="target-aic-version-headline">Target AIC Version:</span><span id="aic_version_{{vm.dtversion.version}}">{{vm.dtversion.version}}</span></div>
+ </div>
+ <div>
+ <div class ="line dtversion_field" ng-if = "vm.is_aic_edit_mode === false"><span id="vf-version-headline">VF Version: </span> <span id="vf_version_{{vm.vf_version}}">{{vm.vf_version}}</span></div>
+ </div>
+ </div>
+ </div>
+ <div id="target-lab-entry">
+ <div id="target-lab-entry-header">
+ <span>Target Lab Entry</span>
+ <i class="edit-target-completion fa fa-pencil-square-o" id="change-lab-entry-date" data-ng-click="vm.changeTargetLabEntry()" aria-hidden="true"></i>
+ </div>
+ <div id="target-lab-entry-content">
+ <h4 class="target-lab-entry-content">{{vm.target_lab | date:'shortDate'}}</h4>
+ </div>
+ </div>
+ <div id="deployment-targets">
+ <div id="deployment-targets-header">
+ <span>Deployment Targets </span><span ng-click="vm.addDTS()" class="add-vfc"></span>
+ <i class="edit-target-completion fa fa-pencil-square-o" id="add-dt" ng-show="vm.isEngagementEL || vm.isAdmin" ng-click="vm.addDTS()" class="add-vfc" aria-hidden="true"></i>
+ </div>
+ <div id="deployment-targets-content">
+ <ul>
+ <li class="step row" data-ng-repeat="dts in vm.dtsites track by dts.uuid" ng-mouseover="hoverEdit = true" ng-mouseleave="hoverEdit = false">
+ <span id="visible-dts-{{dts.name}}" class = "col-md-10">{{dts.name}}</span>
+
+ <span class = "remove-button col-md-2" ng-if="vm.dtsites.length > 0" ng-click='vm.deleteDTSite(vm.vf.uuid, dts.uuid)'>
+ <span ng-show="hoverEdit"><span id="remove-dts-{{dts.uuid}}" class="remove-icon"></span></span>
+ </span>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="col-xs-4 col-md-4 vfc-column">
+ <div id="virtual-function-components" ng-if="vm.isEngagementEL || vm.isAdmin" >
+ <div id="virtual-function-header">
+ <span>Virtual Function Components </span><span id="virtual-vfc" ng-click="vm.addVfc()" class="add-vfc"></span>
+ <i class="edit-target-completion fa fa-pencil-square-o" ng-show="vm.isEngagementEL || vm.isAdmin" id="add-vfc" ng-if="vm.isEngagementEL || vm.isAdmin" ng-click="vm.addVfc()" class = "add-vfc" ></i>
+ </div>
+ <div id="virtual-function-content">
+ <ul>
+ <li class="step row" data-ng-repeat="vfc in vm.vfcs track by vfc.uuid" ng-mouseover="hoverEdit = true" ng-mouseleave="hoverEdit = false">
+ <span id="visible-dts-{{vfc.name}}" class = "col-md-10"> {{vfc.name +' (' + vfc.external_ref_id + ')'}} </span>
+
+ <span class="remove-button col-md-2" ng-if="vm.vfcs.length > 0 && (vm.isEngagementEL || vm.isAdmin)" ng-click='vm.deleteVfc(vfc.uuid)'>
+ <span ng-show="hoverEdit"><span id="remove-vfc-{{vfc.uuid}}" class="remove-icon"></span></span>
+ </span>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</div>
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.less b/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.less
new file mode 100755
index 00000000..dbac5c2d
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/detailed-view/detailed-view.less
@@ -0,0 +1,400 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#detailed-view {
+
+ padding:0px 30px 0px 30px;
+
+ .glyphicon-cursor-detailed-view {
+ cursor: pointer;
+ margin-left: 0.5%;
+ }
+
+ .detailed-view-edit-mode {
+ cursor: pointer;
+ margin-left: 0.5%;
+ display: inline-block;
+ position: relative;
+ top: 3px;
+ .sprite;
+ .sprite.edit-medium;
+ }
+
+ .hide-element {
+ display:none;
+ }
+
+ .show-select {
+ display:block;
+ margin-bottom: 3%;
+ }
+
+ .row > h1 {
+ padding: 0px;
+ margin-bottom: 0px;
+
+ .a_36;
+
+ .bold {
+ .a_36_m;
+ }
+ }
+
+ .remove-button {
+ height: 10px;
+ .a_16_m;
+ cursor: pointer;
+
+
+ .remove-icon {
+ .sprite;
+ .sprite.delete;
+ cursor: pointer;
+ display: block;
+ position: relative;
+ }
+ }
+
+ .steps-progress-wrapper {
+ margin-top: 10px;
+ }
+
+
+
+ h2 {
+ display: inline-block;
+ margin: 0 0 10px 0;
+ .a_24_m;
+ font-size: 20px;
+ position: relative;
+ .add-vfc {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ margin-left: 8px;
+ cursor: pointer;
+ position: relative;
+ top: 3px;
+ }
+ }
+
+ .main-section {
+ margin-top: 30px;
+ }
+
+ .steps-header {
+
+ .steps-filter {
+ display: inline-block;
+ float: right;
+ .a_16_m;
+ .todo {
+ .sprite;
+ .sprite.todo;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .completed {
+ .sprite;
+ .sprite.pending;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .confirmed {
+ .sprite;
+ .sprite.approved;
+ display: inline-block;
+ cursor: pointer;
+ }
+ }
+ }
+
+ .vfc-column {
+ height: 100%;
+ padding-right: 20px;
+ padding-left: 20px;
+ padding-top: 20px;
+
+ ul {
+ li.step {
+
+ list-style: none;
+ position: relative;
+ padding: 5px 10px 0px 4px;
+ font-size: 16px;
+ }
+ }
+ }
+
+ .vfc-steps {
+ border-right: dashed 1px @main_color_a;
+ height: 100%;
+ padding-right: 20px;
+ padding-left: 0px;
+ padding-top: 20px;
+
+ ul {
+ li.step {
+
+ list-style: none;
+ position: relative;
+ padding: 5px 10px 0px 4px;
+ font-size: 16px;
+ &:hover {
+ background-color: #DEF3FF;
+
+ .details {
+ .actions {
+ span {
+ visibility: visible;
+ }
+ }
+ }
+
+ }
+
+ &.completed {
+ background-color: #dddddd;
+ opacity: 0.7;
+ }
+
+ .description {
+
+ .m_16_r;
+ border-bottom: dashed 1px @main_color_n;
+ padding: 10px 0;
+
+ input {
+ position: absolute;
+ top: 10px;
+ left: 0;
+ margin-right: 20px;
+ }
+
+ .step-text {
+ margin-left: 20px;
+ }
+
+ .step-state {
+
+ position: absolute;
+ top: 24px;
+
+ &.todo {
+ .steps-sprite;
+ .steps-sprite.todo;
+ display: inline-block;
+ }
+ &.confirmed {
+ .steps-sprite;
+ .steps-sprite.confirmed;
+ display: inline-block;
+ }
+ &.completed {
+ .steps-sprite;
+ .steps-sprite.completed;
+ display: inline-block;
+ }
+ &.completed-non-el {
+ .steps-sprite;
+ .steps-sprite.completed-non-el;
+ display: inline-block;
+ }
+ }
+
+ }
+ .details {
+ .m_12_r;
+ margin: 6px 0 10px 0;
+
+ .actions {
+ float: right;
+ margin-top: 2px;
+
+ span {
+ visibility: hidden;
+ }
+
+ .moveto-confirmed {
+ .actions-sprite;
+ .actions-sprite.approve_large;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .moveto-todo {
+ .actions-sprite;
+ .actions-sprite.reject_large;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .moveto-delete {
+ .actions-sprite;
+ .actions-sprite.delete_large;
+ display: inline-block;
+ cursor: pointer;
+ }
+ }
+ }
+ }
+ }
+
+ }
+ #deployment-targets {
+ border: 1px solid @engagement_team_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #deployment-targets-header {
+ background-color: @engagement_team_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .edit-target-completion {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ #deployment-targets-content {
+ .f-type._16_r;
+ margin: 15px;
+ }
+ }
+ #virtual-function-components {
+ border: 1px solid @engagement_status_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #virtual-function-header {
+ background-color: @engagement_status_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .edit-target-completion {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ #virtual-function-content {
+ .f-type._16_r;
+ margin: 15px;
+ }
+ }
+
+ #target-lab-entry {
+ border: 1px solid @target_completion_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #target-lab-entry-header {
+ background-color: @target_completion_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .edit-target-completion {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ #target-lab-entry-content {
+ .f-type._16_r;
+ margin: 15px;
+ }
+ }
+ #validation-details {
+ border: 1px solid #4990E2;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #validation-details-header {
+ background-color: #4990E2;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .edit-target-completion {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ #validation-details-content {
+ .f-type._16_r;
+ margin: 15px;
+ }
+ }
+ .team-and-logs {
+ height: 100%;
+ padding-left: 20px;
+ padding-top: 20px;
+ margin-left: -1px;
+ border-left: dashed 1px @main_color_a;
+
+ .line{
+ margin-bottom: 10px;
+ }
+
+ }
+
+ .add-next-step-form {
+ .ice-wysiwyg {
+ height: 200px;
+ .wysiwyg-menu > div {
+ background-color: #f1f1f1;
+ padding: 2px;
+ }
+ }
+ }
+
+ .vfc-main-section {
+ margin-top: 0px;
+ }
+}
diff --git a/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.directive.js b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.directive.js
new file mode 100755
index 00000000..3676e51c
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.directive.js
@@ -0,0 +1,308 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+ angular
+ .module('ice.dashboard.get-started-modal')
+ .directive('getStartedModal', function () {
+ return {
+ restrict: 'AEC',
+ scope: {},
+ link: function (scope, elm, attrs) {
+ scope.$emit('openGettingStartedWizardLoaded');
+ },
+ controller: ['$rootScope', '$scope', '$uibModal', 'toastService', '$log',
+ function ($rootScope, $scope, $uibModal, toastService, $log) {
+
+ var gm = this;
+ gm.data = {};
+
+ gm.openModal = function () {
+ toastService.clearToast();
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/dashboard/get-started-modal/wizard/wizard-container.html',
+ controller: 'ModalCtrl',
+ controllerAs: 'wizard',
+ resolve: {
+ wizardData: function () {
+ return gm.wizardData;
+ }
+ },
+ backdrop: 'static'
+ });
+ };
+
+ $scope.$on('openGettingStartedWizard', function (event, args) {
+
+ gm.wizardData = args;
+ gm.openModal();
+ });
+ }],
+ controllerAs: 'gm'
+ };
+ })
+ .controller('ModalCtrl', ['$rootScope', '$scope', '$uibModalInstance', 'vfService', 'usersService', 'localStorageService', 'wizardData', 'toastService', '$log', '$i18next',
+ function ($rootScope, $scope, $uibModalInstance, vfService, usersService, localStorageService, wizardData, toastService, $log, $i18next) {
+
+ var wizard = this;
+ wizard.steps = [];
+ wizard.data = {};
+ wizard.user = wizardData.user;
+ wizard.is_service_provider_internal = wizardData.is_service_provider_internal;
+ wizard.eng_uuid = wizardData.eng_uuid;
+ wizard.requiredStep = wizardData.requiredStep;
+
+ var serviceProviderName = $i18next.t('serviceProvider.name');
+
+ var availableSteps = {
+ addVF: {name: 'addVF', title: 'Add a VF'},
+ addSponsor: {
+ name: 'addContact',
+ title: 'Add ' + serviceProviderName +' Sponsor',
+ mode: 'sponsor',
+ submitButton: 'Add ' + serviceProviderName + ' Sponsor'
+ },
+ addVendor: {
+ name: 'addContact',
+ title: 'Add Vendor Contact',
+ mode: 'vendor',
+ submitButton: 'Add Vendor Cotact',
+ },
+ inviteMembers: {name: 'inviteMembers', title: 'Invite Team Members'},
+ addSSH: {name: 'addSSH', title: 'Add SSH Key'}
+ };
+
+ wizard.setStep = function (step) {
+ wizard.currentStep = step
+ wizard.title = step.title;
+ step.completed = true;
+ };
+
+ function initWizard() {
+
+ $rootScope.ice.loader.show = true;
+
+ if (wizardData.showActivationMessage) {
+ toastService.setToast('You have successfully activated your account!', 'success', {displayFor: 'modal'});
+ }
+
+ wizard.stepIndex = 0;
+
+ if (wizard.requiredStep) {
+ wizard.steps.push(availableSteps[wizard.requiredStep]);
+ wizard.setStep(wizard.steps[wizard.stepIndex]);
+ $rootScope.ice.loader.show = false;
+ return;
+ }
+
+ if (!wizard.eng_uuid || wizard.eng_uuid === "") {
+ wizard.steps.push(availableSteps.addVF);
+ }
+ if (wizard.user.is_service_provider_contact === true && !wizard.is_service_provider_internal) {
+ wizard.steps.push(availableSteps.addVendor);
+ } else if (!wizard.user.is_service_provider_contact) {
+ wizard.steps.push(availableSteps.addSponsor);
+ }
+
+ getCompanies();
+
+ wizard.steps.push(availableSteps.inviteMembers);
+
+ var userData = usersService.getUserData() || {};
+ var ssh_public_key = userData.ssh_public_key;
+ if ((wizard.user.ssh_public_key === "" || wizard.user.ssh_public_key === null) &&
+ (ssh_public_key === "" || ssh_public_key === null)) {
+ wizard.steps.push(availableSteps.addSSH);
+ }
+
+ $rootScope.ice.loader.show = false;
+ wizard.setStep(wizard.steps[wizard.stepIndex]);
+ }
+
+ initWizard();
+
+ wizard.getCurrentStep = function () {
+ return wizard.currentStep.name;
+ };
+
+ wizard.nextStep = function () {
+ wizard.clearMessage();
+ wizard.stepIndex++;
+
+ if (wizard.stepIndex === (wizard.steps.length)) {
+ wizard.closeWizard();
+ return;
+ }
+
+ wizard.setStep(wizard.steps[wizard.stepIndex]);
+ };
+
+ wizard.closeWizard = function () {
+ wizard.clearMessage();
+ $uibModalInstance.close();
+
+ };
+
+ wizard.clearMessage = function () {
+ toastService.clearToast();
+ };
+
+ wizard.onAddContactSubmit = function () {
+ $rootScope.ice.loader.show = true;
+ wizard.data.addContact.eng_uuid = wizard.eng_uuid;
+
+ if (wizard.user.is_main_vendor_contact === true && !wizard.is_service_provider_internal) {
+ wizard.data.addContact.company = wizard.data.addContact.company;
+ } else if (!wizard.user.is_main_vendor_contact) {
+ wizard.data.addContact.company = wizard.data.attCompanyUuid;
+ }
+
+ usersService.addVendorContact(wizard.data.addContact)
+ .then(function (response) {
+ if (response.status === 200) {
+ $rootScope.ice.loader.show = false;
+ wizard.nextStep();
+ }
+ }, function (error) {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $log.error(error.message);
+ $rootScope.ice.loader.show = false;
+ })
+ .catch(function (error) {
+ wizard.Msg = error.status + " : " + error.statusText;
+ wizard.bgColor = "#FFEBEB"; // RED #FFEBEB green DFF0D9
+ $log.error(error);
+ $rootScope.ice.loader.show = false;
+ });
+ };
+
+ wizard.onInviteSubmit = function () {
+ $rootScope.ice.loader.show = true;
+ var is_service_provider_internal;
+ var jsonInviteMembers = [];
+ angular.forEach(wizard.inviteMembers.choices, function (value, key) {
+ wizard.item = [];
+ var jsonItem = new Object();
+ jsonItem.email = value.email;
+ jsonItem.eng_uuid = wizard.eng_uuid;
+ jsonInviteMembers.push(jsonItem);
+ });
+
+ vfService.inviteMembers(JSON.stringify(jsonInviteMembers))
+ .then(function (response) {
+ if (response.status === 200) {
+ wizard.nextStep();
+ }
+ $rootScope.ice.loader.show = false;
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message.detail, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ });
+ };
+
+ wizard.inviteMembers = {
+ choices: [
+ {
+ email: '',
+ eng_uuid: ''
+ }]
+ };
+
+ wizard.addNewChoice = function () {
+ var newItemNo = wizard.inviteMembers.choices.length + 1;
+ wizard.inviteMembers.choices.push({'id': newItemNo});
+ };
+
+ wizard.removeChoice = function () {
+ var lastItem = wizard.inviteMembers.choices.length - 1;
+ wizard.inviteMembers.choices.splice(lastItem);
+ };
+
+ wizard.onAddSSHSubmit = function () {
+ $rootScope.ice.loader.show = true;
+ usersService.setSSHKey(wizard.user.uuid, wizard.data.addSSH)
+ .then(function (response) {
+ if (response.status === 200) {
+ usersService.getIceUser()
+ .then(function (response) {
+ if (response.status === 200 && response.data && response.data !== '') {
+ wizard.user = response.data;
+ $rootScope.ice.loader.show = false;
+ $scope.$emit('onUpdateEngagements');
+ }
+ });
+ wizard.nextStep();
+ }
+
+ }).catch(function (error) {
+ toastService.setToast(error.message.detail, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message.detail);
+ });
+ };
+
+ $scope.$on('moveWizardNextStep', function (event, args) {
+ wizard.is_service_provider_internal = args.is_service_provider_internal;
+ wizard.eng_uuid = args.engagement.uuid;
+ wizard.nextStep();
+ });
+
+ function getCompanies() {
+ vfService.getCompanies()
+ .then(function (response) {
+ if (response.status === 200) {
+ wizard.companies = response.data;
+ if(wizard.companies!=undefined){
+ for(var i=0; i<wizard.companies.length; i++){
+ if(wizard.companies[i].name=="AT&T"){
+ wizard.data.attCompanyUuid=wizard.companies[i].uuid;
+ break;
+ }
+ }
+ }
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ }
+ }]);
+})();
diff --git a/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.html b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.html
new file mode 100755
index 00000000..13ccaa3d
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.html
@@ -0,0 +1,38 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
diff --git a/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.less b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.less
new file mode 100755
index 00000000..81381198
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.less
@@ -0,0 +1,47 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+.getting-started-wizard {
+
+ ul.step-indication {
+ li {
+ display: inline;
+ }
+ }
+}
diff --git a/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.module.js b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.module.js
new file mode 100755
index 00000000..6e54399a
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/get-started-modal/get-started-modal.module.js
@@ -0,0 +1,48 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.dashboard.get-started-modal', ['ngAnimate', 'ui.bootstrap', 'ice.activation.addVf']);
+
+
+})();
diff --git a/d2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard-container.html b/d2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard-container.html
new file mode 100755
index 00000000..97628a62
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard-container.html
@@ -0,0 +1,192 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-toast is-modal="true"></ice-toast>
+<div class="getting-started-wizard">
+ <ice-loader selector=".modal-content"></ice-loader>
+
+ <div class="modal-header">
+ <h2 name="{{wizard.title}}" class="modal-title">{{wizard.title}}</h2>
+ <ul class="step-indication" ng-if="wizard.steps.length > 1">
+ <li ng-repeat="step in wizard.steps" ng-class="{selected: step.completed}">{{$index + 1}}</li>
+ </ul>
+
+ <button id="close-wizard-button" type="button" ng-click="wizard.closeWizard()" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span></button>
+ </div>
+ <div class="modal-body">
+
+ <div ng-switch="wizard.getCurrentStep()" class="slide-frame">
+ <div ng-switch-when="addVF">
+ <add-vf is-modal="true"></add-vf>
+ </div>
+
+ <div ng-switch-when="addContact">
+ <div>
+ Please take a couple of moments to provide some additional details around your virtual function to
+ get the process started. Do note that you can exit this wizard at any time to complete these items.
+ </div>
+
+ <form name="addContactForm" ng-submit="wizard.onAddContactSubmit()" novalidate
+ class="addVendorContact-form col-md-12">
+
+ <div class="form-group" ng-if="wizard.currentStep.mode === 'vendor'"
+ ng-class="{ 'has-error' : addContactForm.company.$invalid && !addContactForm.company.$pristine }">
+ <label class="ice-form-label required">Company</label>
+ <select style="width:100%" name="company" ng-model="wizard.data.addContact.company"
+ ng-options="company.uuid as company.name for company in wizard.companies track by company.uuid"
+ class="form-control" ng-required="wizard.currentStep.mode === 'vendor'"></select>
+ <div class="ice-form-error" data-ng-show="addContactForm.company.$error">
+ <span
+ ng-show="addContactForm.company.$error.required && !addContactForm.company.$pristine"
+ class="help-block">Please select a company</span>
+ </div>
+ </div>
+
+ <div class="form-group"
+ ng-class="{ 'has-error' : addContactForm.fullName.$invalid && !addContactForm.fullName.$pristine }">
+ <label class="ice-form-label required">Full Name</label>
+ <input type="text" name="fullname" class="form-control"
+ ng-model="wizard.data.addContact.full_name"
+ ng-minlength="3" ng-maxlength="50" maxlength="50" required>
+ <div class="ice-form-error" data-ng-show="addContactForm.fullname.$error">
+ <span
+ ng-show="addContactForm.fullname.$error.required && !addContactForm.fullname.$pristine">Full Name is a required field.</span>
+ <span ng-show="addContactForm.fullname.$error.minlength">Full Name is too short.</span>
+ <span ng-show="addContactForm.fullname.$error.maxlength">Full Name is too long.</span>
+ </div>
+ </div>
+
+ <div class="form-group"
+ ng-class="{ 'has-error' : addContactForm.email.$invalid && !addContactForm.email.$pristine }">
+ <label class="ice-form-label required">Email</label>
+ <input type="email" name="email" class="form-control" ng-model="wizard.data.addContact.email"
+ ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/'
+ maxlength="254"
+ required>
+ <div class="ice-form-error" data-ng-show="addContactForm.email.$error">
+ <span
+ ng-show="addContactForm.email.$error.required && !addContactForm.email.$pristine">Email is a required field.</span>
+ <span ng-show="addContactForm.email.$invalid && !addContactForm.email.$pristine"
+ class="help-block">Enter a valid email.</span>
+ </div>
+ </div>
+
+ <div class="form-group"
+ ng-class="{ 'has-error' : addContactForm.phone.$invalid && !addContactForm.phone.$pristine }">
+ <label class="ice-form-label required">Phone</label>
+ <input type="text" name="phone" class="form-control" ng-intl-tel-input ng-model="wizard.data.addContact.phone_number" required ng-minlength="6" ng-maxlength="30">
+ <div class="ice-form-error" data-ng-show="addContactForm.phone.$error">
+ <span
+ ng-show="addContactForm.phone.$error.required && !addContactForm.phone.$pristine">Phone is a required field.</span>
+ <span ng-show="addContactForm.phone.$error.minlength"
+ class="help-block">Phone is too short.</span>
+ <span ng-show="addContactForm.phone.$error.maxlength"
+ class="help-block">Phone is too long.</span>
+ <span ng-show="addContactForm.phone.$error.pattern" class="help-block">Phone must consist of numbers only.</span>
+ <span ng-show="addContactForm.phone.$invalid" class="help-block">Phone format invalid</span>
+
+ </div>
+ </div>
+ <button class="btn btn-primary" type="submit" data-ng-disabled="!addContactForm.$valid">
+ {{wizard.currentStep.submitButton}}
+ </button>
+ </form>
+ </div>
+
+ <div ng-switch-when="inviteMembers">
+ <div>
+ You can invite up to 10 team members at a time to collaborate around your virtual function as you would like.
+ Please do remember that <em>anyone</em> who is invited to collaborate around the virtual function will have equal access.
+ </div>
+
+ <form name="inviteMembersForm" ng-submit="wizard.onInviteSubmit()" novalidate
+ class="inviteMembers-form col-md-12">
+ <div>
+ <fieldset data-ng-repeat="choice in wizard.inviteMembers.choices|limitTo:10">
+ <div id="containera" class="input-wrapper"><input type="email" name="email" class="form-control" ng-model="choice.email" maxlength="50" class="form-control" ng-pattern='/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' required></div>
+ <div class="ice-form-error" data-ng-show="inviteMembersForm.email.$error">
+ <span
+ ng-show="inviteMembersForm.email.$error.required && !inviteMembersForm.email.$pristine">Email is a required field.</span>
+ <span ng-show="inviteMembersForm.email.$invalid && !inviteMembersForm.email.$pristine"
+ class="help-block">Enter a valid email.</span>
+ </div>
+ <div class="remove-button" ng-click='wizard.removeChoice()' ng-show="$last"><span class="remove-icon"></span>Remove</div>
+ </fieldset>
+ </div>
+ <a ng-if="wizard.inviteMembers.choices.length < 10" class="add-button" ng-click='wizard.addNewChoice()'>
+ <span class="add-icon"></span>
+ <span class="add-text">Invite another team member</span>
+ </a>
+
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!inviteMembersForm.$valid">Send
+ invitations
+ </button>
+
+ </form>
+ </div>
+
+ <div ng-switch-when="addSSH">
+ <div>
+ It looks like you have not yet added your SSH key to your profile. You can add one
+ now. Please do remember that only team members who have added SSH keys to their
+ profile can add files.
+ </div>
+ <form name="addSSHForm" ng-submit="wizard.onAddSSHSubmit()" novalidate class="addSsh-form col-md-12">
+
+ <div class="form-group"
+ ng-class="{ 'has-error' : addSSHForm.key.$invalid && !addSSHForm.key.$pristine }">
+ <label class="ice-form-label required">SSH Key</label>
+ <textarea type="text" name="key" class="form-control" ng-model="wizard.data.addSSH.ssh_key"
+ ng-minlength="3" ng-maxlength="2048" required></textarea>
+ <div class="ice-form-error" data-ng-show="addSSHForm.key.$error">
+ <span
+ ng-show="addSSHForm.key.$error.required && !addSSHForm.key.$pristine"
+ class="help-block">Please enter your SSH key</span>
+ </div>
+ </div>
+
+ <button class="btn btn-primary" data-ng-disabled="!addSSHForm.$valid" type="submit">Add SSH Key</button>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard.less b/d2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard.less
new file mode 100755
index 00000000..4398d975
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/get-started-modal/wizard/wizard.less
@@ -0,0 +1,255 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.dev-button {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.reject_large {
+ .actions-sprite;
+ .actions-sprite.reject_large;
+ cursor: pointer;
+}
+
+.modal-content {
+ .getting-started-wizard {
+ .modal-header {
+ display: flex;
+ flex-direction: row;
+
+ h2, h3 {
+ display: inline-block;
+ flex-grow: 10;
+ }
+ }
+
+ .modal-body {
+ .btn {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+ }
+ }
+}
+
+.getting-started-wizard {
+
+
+
+
+
+ md-datepicker.btn.datepicker_btn {
+ .md-datepicker-input {
+ width: 100%;
+ text-align: center;
+ line-height: 32px;
+ }
+ }
+ #vf-name-title {
+ font-size: 16px;
+ }
+ #title-key-metadata{
+ font-size: 16px;
+ position: relative;
+ top: 20px;
+ left: 30px;
+ background: white;
+ padding: 0 20px;
+ margin-top: -15px;
+ }
+ .fields_key_metadata{
+ border:1px solid #ccc;
+ padding: 26px 10px;
+
+ }
+ /* Override addVf pages styles */
+ .container {
+ width: auto;
+
+ .col-md-2 { width: 0; }
+ .col-md-8 { width: 100%; }
+
+ .table-container-flex .flex-item {
+ padding: 5px 5px;
+ }
+
+ .remove-button {
+ display: none;
+ }
+ }
+
+ .table-container-flex {
+
+ .flex-item:nth-child(1) {
+ padding-left: 0;
+ flex-grow: 33;
+ }
+
+ .flex-item:nth-child(2) {
+ flex-grow: 33;
+ }
+
+ .flex-item:nth-child(3) {
+ flex-grow: 33;
+ }
+
+ }
+
+ ul.step-indication {
+ list-style: none;
+ display: inline-block;
+
+ li {
+ display: inline-block;
+ background-color: #DDDDDD;
+ width: 30px;
+ height: 30px;
+ margin-right: 10px;
+ padding: 6px 11px;
+ .m_14_m;
+
+ &.selected {
+ .p_14_m;
+ background-color: #1370A3;
+ }
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+ }
+
+ .addVendorContact-form {
+ padding: 20px 0 0 0;
+
+ button {
+ margin-top: 10px;
+ }
+ }
+
+ .inviteMembers-form {
+ padding: 20px 0 0 0;
+
+ button {
+ margin-top: 10px;
+ }
+
+ .add-button {
+ margin-top: 8px;
+ display: block;
+ .add-text {
+ .a_16_m;
+ vertical-align: top;
+ margin-left: 6px;
+ }
+ .add-icon {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ }
+ }
+
+ .remove-button {
+ vertical-align:middle;
+ .a_16_m;
+ cursor: pointer;
+
+ .remove-icon {
+ display: inline-block;
+ vertical-align: text-top;
+ margin-right: 6px;
+ .sprite;
+ .sprite.delete-circle;
+ cursor: pointer;
+ }
+ }
+
+
+ .remove-button {
+ vertical-align:middle;
+ .a_16_m;
+ cursor: pointer;
+
+ .reject-large {
+ display: inline-block;
+ vertical-align: text-top;
+ margin-right: 6px;
+ .sprite;
+ .sprite.delete-circle;
+ cursor: pointer;
+ }
+ }
+
+ .input-wrapper {
+ margin-bottom: 10px;
+ }
+
+ }
+
+ .addVf-form {
+ padding: 0;
+ }
+
+ .addSsh-form {
+ padding: 0;
+
+ .form-group {
+ margin-top: 20px;
+ }
+
+ button {
+ margin-top: 10px;
+ }
+
+ textarea {
+ min-height: 80px;
+ }
+ }
+
+}
diff --git a/d2ice.att.io/app/main/dashboard/main.module.js b/d2ice.att.io/app/main/dashboard/main.module.js
new file mode 100755
index 00000000..01a34a84
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/main.module.js
@@ -0,0 +1,107 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.dashboard.main', ['ice.dashboard.get-started-modal'])
+ .config(config);
+
+ function config($stateProvider) {
+
+ $stateProvider
+ .state('app.dashboard', {
+ abstract: true,
+ views: {
+ 'navigation@app': {
+ templateUrl: 'core/navigation/layouts/horizontal-navigation/navigation.html',
+ controller: 'NavigationController as vm'
+ }
+ },
+ bodyClass: 'dashboard'
+ }).
+ state('app.dashboard.dashboard', {
+ url: '/dashboard/dashboard',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/dashboard/dashboard.html',
+ controller: 'DashboardMainController as vm'
+ },
+ },
+ params: {engagement_uuid: null,engagement:null,messagePass: null},
+ bodyClass: 'dashboard'
+ }).
+ state('app.dashboard.overview', {
+ url: '/dashboard/overview',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/overview/overview.html',
+ controller: 'OverviewMainController as vm'
+ },
+ },
+ params: {engagement_uuid: null,engagement:null,messagePass: null},
+ bodyClass: 'dashboard'
+ }).
+ state('app.dashboard.detailedview', {
+ url: '/dashboard/detailedview',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/detailed-view/detailed-view.html',
+ controller: 'detailedViewController as vm'
+ },
+ },
+ params: {engagement_uuid: null,engagement:null},
+ bodyClass: 'dashboard'
+ }).
+ state('app.dashboard.checklist', {
+ url: '/dashboard/checklist',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/dashboard/checklist/checklist.html',
+ controller: 'DashboardChecklistController as vm'
+ },
+ },
+ params: {engagement_uuid: null,sub_id:null,engagement:null},
+ bodyClass: 'dashboard'
+ });
+
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/dashboard/main/main.html b/d2ice.att.io/app/main/dashboard/main/main.html
new file mode 100755
index 00000000..f768619e
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/main/main.html
@@ -0,0 +1,172 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="row main-wrapper">
+<ice-loader selector=".steps"></ice-loader>
+<ice-loader selector=".activity-log"></ice-loader>
+<div class="row">
+ <div class="col-md-8">
+ <span id="star-engagement-action_{{vm.name}}" class="sprite starred" ng-class="vm.starred == true ? 'is_starred' : 'not_starred'" ng-click="vm.starEngagement()"></span>
+ <h1>{{vm.name}}</h1>
+ </div>
+ <span class="col-md-8 git-repo-url" ng-if="vm.git_repo_url && vm.stage!=vm.stages.intake"><B>GIT:</B>&nbsp;{{vm.git_repo_url}}</span>
+</div>
+<step-stages-directive stage="vm.stage" eng-name="{{vm.vf_name}}" reviewer="{{vm.reviewer_uuid}}" stage-num="vm.stage_num" eng-uuid="{{vm.uuid}}"></step-stages-directive>
+<div data-ng-if="vm.stage!=vm.stages.intake">
+ <progress-directive progress="{{vm.progress}}"
+ vf="{{vm.vf}}"
+ callback="vm.updateProgress"
+ enable-edit="vm.isEngagementEL || vm.isAdmin"
+ completion-date="{{vm.completion_date}}"
+ engagement-uuid="{{vm.uuid}}"></progress-directive>
+</div>
+<div class="row main-section">
+ <div class="col-md-8 steps">
+ <div class="row steps-header">
+ <h2 class="col-md-6">Next Steps<span data-ng-if="vm.isEngagementEL || vm.isAdmin" id="add-next-step-button" class="add-step" data-ng-click="vm.addStep()"></span></h2>
+ <span class="col-md-6 filter-wrapper row">
+ <span >Files<multiselect id="selected-file-filter-dropdown" class="state-filter" ng-model="vm.chosen_files_filter" options="item for item in vm.files_filter_options" data-multiple="true" scroll-after-rows="5" filter-after-rows="5" ng-change="vm.is_all_files()" ms-header="Select files" tabindex="-1">
+ </multiselect></span>
+ <span >States<multiselect class="state-filter" ng-model="vm.selected_state_filter" options="item for item in vm.states_select" id="selected-state-filter-dropdown" data-multiple="true" scroll-after-rows="5" filter-after-rows="5" ng-change="vm.update_next_steps_choice()" ms-header="Select states" tabindex="-1">
+ </multiselect></span>
+ </span>
+ </div>
+ <ul class="step-indication">
+ <li class="step" data-ng-repeat="step in vm.steps | orderBy: 'due_date' as filtered_result track by step.uuid" ng-if="vm.is_match_both_filters(step)">
+ <div class="step-wrapper row" id="step-{{step.uuid}}" data-ng-class="{'completed': vm.states.completed==step.state && !vm.isEngagementEL, 'confirmed': vm.states.confirmed==step.state}">
+ <aside class="next-step-actions" data-ng-if="vm.isEngagementEL || vm.isAdmin">
+ <span class="moveto-confirmed"
+ data-ng-if="vm.states.confirmed != step.state && vm.states.completed==step.state"
+ title="Confirm"
+ data-ng-click="vm.updateStep(step.uuid,vm.states.confirmed)" id="confirmed_{{step.uuid}}"></span>
+ <span class="moveto-todo"
+ data-ng-if="vm.states.confirmed!=step.state && vm.states.todo!=step.state"
+ title="Deny"
+ data-ng-click="vm.updateStep(step.uuid,vm.states.todo)" id="todo_{{step.uuid}}"></span>
+ <span class="moveto-delete"
+ title="Delete"
+ data-ng-if="vm.states.confirmed != step.state"
+ data-ng-click="vm.deleteStep(step.uuid)" id="delete-{{step.uuid}}"></span>
+ </aside>
+ <div class="description col-xs-8 col-sm-8 col-md-8">
+ <div class="last-action-details">
+ <span class="name" id="{{step.last_updater.full_name}}_{{step.last_update_type}}">
+ {{step.last_updater && step.last_updater.full_name || step.creator.full_name}}
+ &nbsp;{{step.last_update_type}}:&nbsp;
+ </span>
+ <span class="time">{{(step.last_update_time) | date2: 'EEEE MMMM doo yyyy'}} at {{(step.last_update_time) | date: 'hh:mm' : timeGapLocal }} {{ampm}} {{mom}}</span>
+ </div>
+ <div id={{step.uuid}} class="step-state {{step.state | lowercase}}" data-ng-click="(step.state==vm.states.todo || step.state==vm.states.completed) && vm.toggleCompleted(step.uuid)"></div>
+ <div class="step-text" ng-bind-html="step.description | htmlspecialchars"></div>
+ </div>
+ <div class="details col-xs-4 col-sm-4 col-md-4">
+ <span class="next-step-due-date" ng-if="step['due_date'].length >0"><span class="icon"></span>{{(step['due_date']) | date2: 'EEEE MMMM doo yyyy'}}</span>
+ <span ng-if="step.engagement != null" class="edit-next-step glyphicon glyphicon-pencil" ng-click="vm.editStep(step)"></span>
+
+ <ul class="next-step-team-mates">
+
+ <li data-ng-repeat="member in step['assignees'] track by member.uuid"
+ data-ng-class="{'me': member.uuid == vm.me.uuid}"
+ title="{{member.full_name}} ({{member.email}})">
+ </li>
+ </ul>
+ <span uib-popover-template="'myPopoverTemplate.html'"
+ popover-title="Associated Files"
+ popover-trigger="mouseenter"
+ popover-html='true'
+ popover-placement="left"
+ class="" ng-if="step.files.length > 0">Associated Files ({{step.files.length}})</span>
+ <script type="text/ng-template" id="myPopoverTemplate.html">
+ <ul>
+ <li ng-repeat="file in step['files'] track by $index">- {{file}}</li>
+ </ul>
+ </script>
+ </div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <div class="col-md-4 team-and-logs">
+
+ <div id="engagement-status">
+ <h2>Current Status<span ng-if="vm.isEngagementEL || vm.isAdmin" ng-click="vm.addStatus()" id="add-status"></span><span ng-if="(vm.isEngagementEL || vm.isAdmin) && vm.status" ng-click="vm.editStatus()" id="edit-status"></span></h2>
+ <span id="status-update-details" ng-if="vm.status">
+ Last updated {{(vm.status.update_time) | date2: 'EEEE MMMM doo yyyy'}} at {{(vm.status.update_time) | date: 'hh:mm' : timeGapLocal }} {{ampm}} {{mom}}
+ by {{vm.status.creator.full_name}}
+ </span>
+ <p id="status-description">{{vm.status.description == undefined && 'No status update has been provided yet.' || vm.status.description }}</p>
+ </div>
+
+ <div class="team">
+ <h2><span>Team Members</span><span id="team-members-plus-button-id" ng-click="vm.addPeople()" class="add-people" ng-if="vm.name.length > 0"></span></h2>
+ <ul class="team-avatars">
+ <li id="c-l-te-am-me-mb-er-s-po-po-ve-r"
+ data-ng-repeat="member in vm.team track by member.uuid"
+ data-ng-class="{'me': member.uuid == vm.me.uuid}"
+ uib-popover-template="'myClTeamMembersPopoverTemplate.html'"
+ popover-trigger='mouseenter'
+ popover-html='true'
+ popover-placement='bottom'
+ >
+ <script type="text/ng-template" id="myClTeamMembersPopoverTemplate.html">
+ <span class="row">
+ <span class="popover-title-name col-md-12">{{member.full_name}} -<span class="popover-title-company">{{member.company.name}}</span></span>
+ <span class="popover-role-title col-md-12"> {{member.role.name == 'el' ? 'Engagement Lead' : '' }} {{member.role.name == 'el' && vm.reviewer_uuid == member.uuid ? ' - ' : ''}} {{vm.reviewer_uuid == member.uuid ? 'Reviewer' : ''}}</span>
+ <span class="popover-details">
+ <span class="popover-details-topic col-md-4">Email:</span><span class="popover-details-detail col-md-8">{{member.email}}</span>
+ <span class="popover-details-topic col-md-4">Phone:</span><span class="popover-details-detail col-md-8">{{member.phone_number}}</span>
+ </span>
+ </span>
+ </script>
+ </li>
+ </ul>
+ </div>
+
+ <div class="activity-log">
+ <h2>Activity Log</h2>
+ <ul class="activity-log-details">
+ <li data-ng-repeat="activity in vm.activities track by activity.uuid">
+ <notifications activity="activity"></notifications>
+ </li>
+ </ul>
+ </div>
+
+ </div>
+
+</div>
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/overview/overview.controller.js b/d2ice.att.io/app/main/dashboard/overview/overview.controller.js
new file mode 100755
index 00000000..19d9839f
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/overview/overview.controller.js
@@ -0,0 +1,833 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+//test
+ 'use strict';
+
+ angular
+ .module('ice.dashboard.overview',[])
+ .controller('OverviewMainController', ["$scope","$rootScope", "_","$stateParams", "statusService", "stepsService", "vfService", "usersService", "iceConstants", "$uibModal", "cmsService", "toastService", "$state", "$log", overviewMainController]);
+
+ function overviewMainController($scope,$rootScope,_, $stateParams, statusService, stepsService, vfService, usersService, iceConstants, $uibModal, cmsService, toastService, $state, $log) {
+ var vm = this;
+
+ vm.sortableOptions = {
+ handle: ' .order-nextstep',
+ axis: 'y',
+ update: function(e, ui) {
+ stepsService.order_next_steps(vm.engagement.uuid, vm.steps)
+ .then(function (response) {
+ if (response.status === 200) {
+ $log.debug('updated');
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ }
+ };
+
+ var init = function () {
+ cmsService.setAnnouncementToast();
+ $rootScope.timeGapLocal = moment().format("z");// timeGap();
+ $rootScope.ampm = moment().format('A');
+ $rootScope.mom =moment().tz( moment.tz.guess()).format('z');
+
+ vm.engagement = $stateParams.engagement;
+
+ if (vm.engagement != undefined)
+ {
+ vm.me = usersService.getUserData();
+ vfService.getSingleEngagement(vm.me.uuid,vm.engagement.uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+
+ if (response.status === 200 && response.data && response.data !== '') {
+ vm.vf = response.data;
+ vm.is_service_provider_internal = vm.vf.is_service_provider_internal;
+ vm.name = vm.vf.name;
+ vm.manual_id = vm.vf.engagement.engagement_manual_id;
+ if(!vm.vf.git_repo_url || vm.vf.git_repo_url==-1){
+ vm.git_repo_url = false;
+ }
+ else {
+ vm.git_repo_url = vm.vf.git_repo_url;
+ }
+ vm.storage_bucket_url = vm.manual_id + '_' + vm.name.toLowerCase();
+ vm.team = vm.vf.engagement.engagement_team;
+ vm.me = usersService.getUserData();
+ vm.stages = iceConstants.stages;
+ vm.stage = vm.vf.engagement.engagement_stage;
+ vm.stage_num = 0;
+ vm.set_stage_num(vm.stage);
+ vm.in_overview_page = true;
+ vm.uuid = vm.engagement.uuid;
+ vm.progress = vm.vf.engagement.progress;
+ vm.completion_date = vm.vf.engagement.target_completion_date;
+ vm.starred = false;
+ vm.isEngagmentLead = usersService.isUserInRole('el');
+ vm.isEngagementEL = usersService.isEngagementEL(vm.team);
+ vm.isAdmin = usersService.isAdmin(vm.me);
+ vm.does_user_role_allow_action_array = [vm.isAdmin, vm.isEngagementEL];
+ vm.unremoveable_users_from_eng_team_array = [vm.vf.engagement.reviewer.uuid, vm.vf.engagement.peer_reviewer.uuid,
+ vm.vf.engagement.creator.uuid]
+ if (vm.vf.engagement.contact_user != null) {
+ vm.unremoveable_users_from_eng_team_array.push(vm.vf.engagement.contact_user.uuid);
+ }
+ vm.states = iceConstants.states;
+ vm.states_select = serializeStates(iceConstants.states);
+ vm.selected_state_filter = getSelectedStatesByUserType();
+ vm.steps = [];
+ vm.vf_name = vm.vf.name;
+ vm.vf.engagement.starred_engagement.forEach(function(user) {
+ if (vm.me.uuid == user.uuid)
+ vm.starred = true;
+ });
+ vm.all_states = false;
+ vm.all_files = true;
+ initSteps();
+ vm.initActivityLogs();
+ vm.files = vm.vf.files;
+ vm.files_filter_options = [];
+ vm.files_filter_options = vm.files_filter_options.concat(vm.files);
+ vm.files_filter_options.push("Any file");
+ vm.chosen_files_filter = ["Any file"];
+ vm.show_step = true;
+ vm.status = false;
+ statusService.get(vm.uuid)
+ .then(function (response) {
+ if (response.status === 200)
+ {
+ vm.status = response.data;
+ } else
+ {
+ $log.error(response);
+ }
+ })
+ .catch(function (error) {
+ vm.status = false;
+ $log.error(error.message);
+ });
+ vm.progress_needed_data = getEngagementProgressData();
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+
+ }
+ };
+
+ vm.set_stage_num = function(state) {
+ switch (state) {
+ case 'Intake':
+ vm.stage_num = 1;
+ break;
+ case 'Active':
+ vm.stage_num = 2;
+ break;
+ case 'Validated':
+ vm.stage_num = 3;
+ break;
+ case 'Completed':
+ vm.stage_num = 4;
+ break;
+ };
+ };
+
+ vm.checkIfAdmin = function(user){
+ return usersService.isAdmin(user);
+ };
+
+
+ vm.is_user_allowed = function(){
+ if(_.includes(vm.does_user_role_allow_action_array, true) == true){
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
+
+ vm.is_able_to_delete = function(requested_user){
+ if(vm.is_user_allowed() && !_.includes(vm.unremoveable_users_from_eng_team_array, requested_user.uuid)
+ && !vm.checkIfAdmin(requested_user)) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ };
+
+
+ vm.remove_user_from_eng = function(requested_user){
+ if(vm.is_able_to_delete(requested_user)) {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/general-prompt-modal/general-prompt-modal.html',
+ controller: 'generalPromptModalController',
+ controllerAs: 'vm',
+ resolve: {
+ modalDetails: function () {
+ return {
+ "upper_headline": 'Remove user from engagement team: ',
+ "upper_headline_value": requested_user.full_name,
+ "headline": 'Are you sure you would like to remove the user out of the team members?',
+ "is_message":false,
+ "message": '',
+ "approve": 'Yes',
+ "cancelText": 'No',
+ "is_close_modal_button":true
+ };
+ }
+ }
+ });
+ //in order to close the ui-popover before opening the confirmation modal.
+ angular.element('body').click();
+
+ modalInstance.result.then(function (approve_deletion) {
+ if(approve_deletion) {
+ var data = {'eng_uuid': vm.vf.engagement.uuid, 'user_uuid': requested_user.uuid}
+ vfService.remove_user_from_eng(data).then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 204) {
+ $rootScope.$broadcast('onUpdateEngagements',{select : {uuid:vm.engagement.uuid,page_type:'overview',sub_id:undefined}});
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ });
+ }
+ else {
+ toastService.setToast('Action is not allowed.', 'danger');
+ $rootScope.ice.loader.show = false;
+ return;
+ }
+ };
+
+
+ $scope.is_match_both_filters = function () {
+ return function (step) {
+
+ var result = false;
+
+ if(vm.all_files && vm.all_states) {
+ result = true;
+ }
+ else if (vm.all_states && vm.is_contain_files(step)){
+ result = true;
+ }
+ else if (vm.all_files && vm.is_same_state(step.state)){
+ result = true;
+ }
+ else if (vm.is_contain_files(step) && vm.is_same_state(step.state)){
+ result = true;
+ }
+
+ if (result) {
+ return step;
+ }
+ return false;
+ }
+ }
+
+ vm.is_all_files = function() {
+ vm.all_files = vm.chosen_files_filter.indexOf("Any file") !== -1;
+ }
+
+ vm.is_contain_files = function(step) {
+ if (step.files) {
+ for (var i = 0; i < step.files.length; i++) {
+ if (vm.chosen_files_filter.indexOf(step.files[i]) !== -1) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ };
+
+ vm.is_same_state = function(step_state){
+ return vm.selected_state_filter.indexOf(step_state) !== -1;
+ };
+
+ vm.update_next_steps_choice = function(){
+ if(vm.selected_state_filter.indexOf("All") !== -1){
+ vm.all_states = true;
+ }
+ else {
+ vm.all_states = false;
+ }
+ };
+
+ vm.editStatus = function () {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/status/status.html',
+ controller: 'StatusModalController',
+ controllerAs: 'vm',
+ size: 'lg',
+ resolve: {
+
+ engagement_uuid: function () {
+ return vm.engagement.uuid;
+ },
+ action: function () {
+ return 'edit';
+ }
+ }
+ });
+
+ // Update the progress after modal closed.
+ modalInstance.result.then(function (data) {
+ if (data) {
+ vm.status = data;
+ }
+ }, function () {
+ $log.debug('Modal dismissed at: ' + new Date());
+ });
+ };
+
+ vm.addStatus = function () {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/status/status.html',
+ controller: 'StatusModalController',
+ controllerAs: 'vm',
+ size: 'lg',
+ resolve: {
+
+ engagement_uuid: function () {
+ return vm.engagement.uuid;
+ },
+ action: function () {
+ return 'add';
+ }
+ }
+ });
+
+ // Update the progress after modal closed.
+ modalInstance.result.then(function (data) {
+ if (data) {
+ vm.status = data;
+ }
+ }, function () {
+ $log.debug('Modal dismissed at: ' + new Date());
+ });
+ };
+
+ vm.deleteStep = function(step_uuid){
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/general-prompt-modal/general-prompt-modal.html',
+ controller: 'generalPromptModalController',
+ controllerAs: 'vm',
+ resolve: {
+ modalDetails: function () {
+ return {
+ "headline": 'Delete Step',
+ "is_message":true,
+ "message": 'Are you sure you want to delete this step?',
+ "approve": 'Delete Step',
+ "is_close_modal_button":true
+ };
+ }
+ }
+ });
+
+ modalInstance.result.then(function (deletionApproved) {
+ if(deletionApproved) {
+ stepsService.delete(step_uuid)
+ .then(function (response) {
+ if (response.status === 204) {
+ initSteps();
+ initActivityLogs();
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ }
+ });
+ };
+
+ // next steps modal
+ vm.editStep = function (nextstep) {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/next-steps/next-steps.html',
+ controller: 'NextStepsModalController',
+ controllerAs: 'vm',
+ size: 'lg',
+ resolve: {
+
+ engagement_team: function () {
+ return vm.team;
+ },
+ title: function () {
+ return vm.engagement.name;
+ },
+ associated_files: function () {
+ return vm.files;
+ },
+ engagement_uuid: function () {
+ return vm.engagement.uuid;
+ },
+ checklist: function () {
+ return undefined;
+ },
+ nextstep: function () {
+ return nextstep;
+ }
+ }
+ });
+
+ // Update the progress after modal closed.
+ modalInstance.result.then(function (data) {
+ if (data) {
+ initSteps();
+ }
+ }, function () {
+ $log.debug('Modal dismissed at: ' + new Date());
+ });
+ };
+
+ vm.addStep = function () {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/next-steps/next-steps.html',
+ controller: 'NextStepsModalController',
+ controllerAs: 'vm',
+ size: 'lg',
+ resolve: {
+ engagement_team: function () {
+ return vm.team;
+ },
+ title: function () {
+ return vm.engagement.name;
+ },
+ associated_files: function () {
+ return vm.files;
+ },
+ engagement_uuid: function () {
+ return vm.engagement.uuid;
+ },
+ checklist: function () {
+ return undefined;
+ },
+ nextstep: function () {
+ return undefined;
+ }
+ }
+ });
+
+ // Update the progress after modal closed.
+ modalInstance.result.then(function (data) {
+ if (data) {
+ data.forEach(function (step) {
+ step['creator'] = vm.me;
+ vm.steps.push(step);
+ });
+ initSteps();
+ }
+ }, function () {
+ $log.debug('Modal dismissed at: ' + new Date());
+ });
+ };
+
+ $rootScope.$on('onUpdateNextSteps', function (event, args) {
+ if(args.eng_uuid && args.stage){
+ vm.uuid = args.eng_uuid;
+ vm.stage = args.stage;
+ }
+ else{
+ $log.error("onUpdateNextStep expecting args");
+ return;
+ }
+ initSteps();
+ });
+
+ vm.starEngagement = function () {
+
+ vfService.putStarredEngagements(vm.engagement.uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200 && response.data && response.data !== '') {
+ if (vm.starred == true)
+ vm.starred = false
+ else
+ vm.starred = true
+ $rootScope.$broadcast('onUpdateEngagements',{select : {uuid:vm.engagement.uuid,page_type:'overview',sub_id:undefined}});
+
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+
+ vm.updateStep = function (stepUuid, stepState) {
+ var data = {"state":stepState};
+ stepsService.update(stepUuid, data)
+ .then(function (response) {
+ if (response.status === 200) {
+ var step = getStepByUuid(stepUuid);
+ if (step){
+ initSteps();
+ vm.initActivityLogs();
+ }
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ });
+ };
+
+ vm.toggleCompleted = function (stepUuid) {
+ var step = getStepByUuid(stepUuid);
+ if (step){
+ if(step.state == vm.states.incomplete){
+ vm.updateStep(stepUuid, iceConstants.states.completed);
+ }else if(step.state == vm.states.completed){
+ vm.updateStep(stepUuid, iceConstants.states.incomplete);
+ }
+
+ }
+ };
+
+ vm.updateProgress = function(data) {
+ if (data && data.progress){
+ vm.progress = data.progress;
+ } else if (data && data.target_date){
+ vm.completion_date = data.target_date;
+ vm.target_completion_date = data.target_date;
+ }
+ };
+
+ vm.addPeople = function () {
+
+ var args = {
+ user: vm.me,
+ eng_uuid: vm.engagement.uuid,
+ is_service_provider_internal: vm.is_service_provider_internal,
+ requiredStep: 'inviteMembers'
+ };
+
+ $rootScope.$broadcast('openGettingStartedWizard', args);
+ };
+
+ var initSteps = function() {
+ $rootScope.ice.loader.show = true;
+ stepsService.get(vm.uuid, vm.stage)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.steps = [];
+ response.data.forEach(function (step) {
+ vm.steps.push(step);
+ });
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ vm.initActivityLogs = function() {
+ $rootScope.ice.loader.show = true;
+ vfService.getActivities(vm.uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.activities = response.data;
+
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ var getStepByUuid = function(stepUuid) {
+ var foundStep;
+ if (vm.steps) {
+ vm.steps.forEach(function (step) {
+ if (step.uuid === stepUuid) {
+ foundStep = step;
+ }
+ });
+ }
+ return foundStep;
+ };
+
+ var serializeStates = function(states) {
+ var result = []
+ for(var key in states) {
+ result.push(states[key])
+ }
+
+ return result;
+ };
+
+ var getSelectedStatesByUserType = function() {
+ var result = [];
+
+// if(vm.isEngagementEL || vm.isAdmin) {
+// result.push("All","Completed","Incomplete");
+// } else { //For normal users:
+ result.push("Incomplete")
+// }
+
+ return result;
+ };
+
+ var getEngagementProgressData = function() {
+ var result = {
+ "enable_edit": ((vm.isEngagementEL || vm.isAdmin) && vm.in_overview_page),
+ "completion_date":vm.vf.engagement.target_completion_date,
+ "ecomp_release": vm.vf.ecomp_release.name,
+ "vnf_version": vm.vf.version,
+ "aic_version":vm.vf.deployment_target.version,
+ "aic_instantiation_time":vm.vf.engagement.aic_instantiation_time,
+ "asdc_onboarding_time":vm.vf.engagement.asdc_onboarding_time,
+ "heat_validated_time":vm.vf.engagement.heat_validated_time,
+ "image_scan_time":vm.vf.engagement.image_scan_time,
+ "engagement_uuid": vm.uuid, manual_id: vm.manual_id
+ };
+
+ return result;
+ };
+
+ vm.archiveEngagement = function() {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/archive-engagement-modal/archive-engagement-modal.html',
+ controller: 'archiveEngagementModalController',
+ controllerAs: 'vm',
+ resolve: {
+ engagementDetails: function () {
+ return {
+ "manual_id": vm.manual_id,
+ "name": vm.name,
+ "engagement": vm.engagement
+ };
+ }
+ }
+ });
+
+ modalInstance.result.then(function (archiveReason) {
+ if(archiveReason && vm.engagement && vm.engagement.uuid) {
+ vfService.archiveEngagement(vm.engagement.uuid, archiveReason)
+ .then(function() {
+ $state.go('app.dashboard.dashboard');
+ toastService.setToast("Engagement '" + vm.engagement.name + "' archived successfully.", 'success');
+ })
+ .catch (function(error) {
+ toastService.setToast("Server failed archiving engagement.", 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ } else {
+ toastService.setToast("No reason was supplied, therefor engagement cannot be archived.", 'danger');
+ }
+ });
+ };
+
+ vm.changeReviewer = function() {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/select-el-modal/select-el-modal.html',
+ controller: 'selectELModalController',
+ controllerAs: 'vm',
+ resolve: {
+ // We are not allow the reviewer and peer reviewer to be the same:
+ excludeUuids: function () {
+ return [vm.engagement.peer_reviewer_uuid];
+ },
+ selectedOption: function() {
+ return vm.engagement.reviewer_uuid;
+ }
+ }
+ });
+
+ modalInstance.result.then(function (userUuid) {
+ if(vm.engagement && vm.engagement.uuid) {
+
+ if (userUuid == vm.engagement.peer_reviewer_uuid) {
+ vfService.switchEngagementReviewers(vm.engagement.uuid, userUuid, vm.engagement.reviewer_uuid)
+ .then(function (response) {
+ vm.engagement.reviewer_uuid = response.data.reviewer;
+ vm.engagement.peer_reviewer_uuid = response.data.peerreviewer;
+ toastService.setToast("Reviewer and peer reviewer updated successfully.", 'success');
+ })
+ .catch(function (error) {
+ toastService.setToast("Server failed to update engagement reviewers.", 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ } else {
+ vfService.updateEngagementReviewer(vm.engagement.uuid, userUuid)
+ .then(function(response){
+ _.remove(vm.team, function(user) {return user.uuid === vm.engagement.reviewer_uuid;});
+ vm.team.push(response.data);
+ vm.engagement.reviewer_uuid = response.data.uuid;
+ toastService.setToast("Reviewer updated successfully.", 'success');
+ })
+ .catch(function(error) {
+ toastService.setToast("Server failed to update engagement reviewer.", 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }} else {
+ toastService.setToast("Problem occurred while updating reviewer - missing engagement uuid.", 'danger');
+ }
+ })
+ };
+
+ vm.changePeerReviewer = function() {
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/select-el-modal/select-el-modal.html',
+ controller: 'selectELModalController',
+ controllerAs: 'vm',
+ resolve: {
+ // We are not allow the reviewer and peer reviewer to be the same:
+ excludeUuids: function () {
+ return [vm.engagement.reviewer_uuid];
+ },
+ selectedOption: function() {
+ return vm.engagement.peer_reviewer_uuid;
+ }
+ }
+ });
+
+ modalInstance.result.then(function (userUuid) {
+ if(vm.engagement && vm.engagement.uuid) {
+
+ if (userUuid == vm.engagement.reviewer_uuid) {
+ vfService.switchEngagementReviewers(vm.engagement.uuid, vm.engagement.peer_reviewer_uuid, userUuid)
+ .then(function (response) {
+ vm.engagement.reviewer_uuid = response.data.reviewer;
+ vm.engagement.peer_reviewer_uuid = response.data.peerreviewer;
+ toastService.setToast("Peer reviewer and reviewer updated successfully.", 'success');
+ })
+ .catch(function (error) {
+ toastService.setToast("Server failed to update engagement reviewers.", 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ } else {
+ vfService.updateEngagementPeerReviewer(vm.engagement.uuid, userUuid)
+ .then(function(response) {
+ $log.debug("vm.team", vm.team);
+ _.remove(vm.team, function(user) {return user.uuid === vm.engagement.peer_reviewer_uuid;});
+ vm.team.push(response.data);
+ vm.engagement.peer_reviewer_uuid = response.data.uuid;
+ toastService.setToast("Peer reviewer updated successfully.", 'success');
+ })
+ .catch(function(error) {
+ toastService.setToast("Server failed to update engagement peer reviewer.", 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }} else {
+ toastService.setToast("Problem occurred while updating peer reviewer - missing engagement uuid.", 'danger');
+ }
+ })
+ };
+
+ vm.updateEngagementStatus = function() {
+ vm.vf.engagement.progress = parseInt(vm.progress);
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/update-engagement-status-modal/update-engagement-status-modal.html',
+ controller: 'updateEngagementStatusModalController',
+ controllerAs: 'vm',
+ resolve: {
+ engagement: function () {
+ // We will deliver a copy of the engagement so if the user hit 'Cancel' we won't change the original:
+ return angular.copy(vm.vf.engagement);
+ }
+ }
+ });
+
+ modalInstance.result.then(function (result) {
+ vfService.updateEngagement(result.engagement, result.status)
+ .then(function(response) {
+ vm.vf.engagement = result.engagement;
+ vm.progress = vm.vf.engagement.progress;
+ vm.progress_needed_data = getEngagementProgressData();
+ vm.status = response.data;
+ toastService.setToast("Engagement status updated successfully.", 'success');
+ })
+ .catch(function(error){
+ toastService.setToast("Server failed to update engagement status.", 'danger');
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ })
+ };
+
+ vm.changeTargetCompletion = function(){
+ var modalInstance = $uibModal.open({
+ templateUrl: 'main/modals/change-date/change-date.html',
+ controller: 'ChangeDateModalController',
+ controllerAs: 'vm',
+ resolve: {
+ completionDate: function () {
+ return vm.vf.engagement.target_completion_date;
+ },
+ engagementUuid: function () {
+ return vm.engagement.uuid;
+ }
+ }
+ });
+
+ modalInstance.result.then(function (data) {
+ if (!data){
+ return;
+ }
+ vm.completion_date = data.target_date || vm.vf.engagement.target_completion_date;
+ vm.vf.engagement.target_completion_date = vm.completion_date;
+ }, function () {
+ $log.debug('Modal dismissed at: ' + new Date());
+ });
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/dashboard/overview/overview.html b/d2ice.att.io/app/main/dashboard/overview/overview.html
new file mode 100755
index 00000000..d1b3fc40
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/overview/overview.html
@@ -0,0 +1,212 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="no-display-text" ng-if="vm.engagement == undefined"></div>
+
+<div ng-class="vm.engagement == undefined ? 'no-display' : 'overview main-wrapper'">
+ <ice-loader selector=".steps"></ice-loader>
+ <ice-loader selector=".activity-log"></ice-loader>
+ <div class="row">
+ <div class="col-md-6">
+ <span id="star-engagement-action" class="sprite starred" ng-class="vm.starred == true ? 'is_starred' : 'not_starred'" ng-click="vm.starEngagement()"></span>
+ <h1 id="engagement-title">
+ <span class="manual-id" id="title-id-{{vm.manual_id}}: {{vm.name}}">{{vm.manual_id}}: </span>{{vm.name}}
+ </h1>
+ <span ng-show="vm.isEngagementEL || vm.isAdmin" uib-dropdown uib-dropdown-toggle on-toggle="toggled(open)" id="admin-actions-dropdown" class="admin-actions-dropdown sprite">
+ <ul class="dropdown-menu" uib-dropdown-menu role="menu">
+ <li role="menuitem" ng-show="vm.isAdmin"><a data-ng-click="vm.archiveEngagement()">Archive</a></li>
+ <li class="divider" ng-show="vm.isAdmin"></li>
+ <li role="menuitem" ng-show="vm.isAdmin"><a data-ng-click="vm.changeReviewer()">Change Reviewer</a></li>
+ <li class="divider" ng-show="vm.isAdmin"></li>
+ <li role="menuitem" ng-show="vm.isAdmin"><a data-ng-click="vm.changePeerReviewer()">Change Peer Reviewer</a></li>
+ <li class="divider" ng-show="vm.isAdmin" ></li>
+ <li role="menuitem" ng-show="vm.isEngagementEL || vm.isAdmin" ><a data-ng-click="vm.updateEngagementStatus()">Update Status</a></li>
+ </ul>
+ </span>
+ </div>
+ <div class="col-md-6 row">
+ <span class="col-md-12 git-repo-url" ng-if="vm.git_repo_url && vm.stage!=vm.stages.intake" id="git-url"><B>GIT:</B>&nbsp;{{vm.git_repo_url}}</span>
+ <span class="col-md-11 line-separator" ng-if="vm.git_repo_url && vm.stage!=vm.stages.intake"></span>
+ <span class="col-md-12 storage-bucket-url" ng-if="vm.stage!=vm.stages.intake" id="bucket-url"><B>STORAGE BUCKET:</B>&nbsp;{{vm.storage_bucket_url}}</span>
+ </div>
+ </div>
+ <step-stages-directive stage="vm.stage" eng-name="{{vm.vf_name}}" team="vm.team" stage-num="vm.stage_num" eng-uuid="{{vm.uuid}}"></step-stages-directive>
+ <div data-ng-if="vm.stage!=vm.stages.intake">
+ <progress-directive
+ progress="{{vm.progress}}"
+ callback="vm.updateProgress"
+ data="vm.progress_needed_data">
+ </progress-directive>
+ </div>
+
+ <div class="row main-section">
+ <div class="col-md-8 steps">
+ <div class="row steps-header">
+ <h2 class="col-md-6">Next Steps<span data-ng-if="vm.isEngagementEL || vm.isAdmin" id="add-next-step-button" class="add-step fa fa-plus-circle" data-ng-click="vm.addStep()"></span></h2>
+ <span class="col-md-6 filter-wrapper row">
+ <span >Files<multiselect id="selected-file-filter-dropdown" class="state-filter" ng-model="vm.chosen_files_filter" options="item for item in vm.files_filter_options" data-multiple="true" scroll-after-rows="5" filter-after-rows="5" ng-change="vm.is_all_files()" ms-header="Select files" tabindex="-1">
+ </multiselect></span>
+ <span >States<multiselect class="state-filter" ng-model="vm.selected_state_filter" options="item for item in vm.states_select" id="selected-state-filter-dropdown" data-multiple="true" scroll-after-rows="5" filter-after-rows="5" ng-change="vm.update_next_steps_choice()" ms-header="Select states" tabindex="-1">
+ </multiselect></span>
+ </span>
+ </div>
+ <ul class="step-indication" ui-sortable="vm.sortableOptions" ng-model="vm.steps" >
+ <li class="step" data-ng-repeat="step in sorted_results=( vm.steps | filter:is_match_both_filters()) track by step.uuid" >
+ <!-- ng-if="vm.is_match_both_filters(step)" -->
+ <div class="step-wrapper row" id="step-{{step.uuid}}" data-ng-class="{'completed': vm.states.completed==step.state && !vm.isEngagementEL, 'confirmed': vm.states.confirmed==step.state}">
+ <aside class="next-step-actions" data-ng-show="vm.isEngagementEL || vm.isAdmin">
+ <span class="order-nextstep fa fa-bars"></span>
+ <span ng-show="step.engagement" class="edit-next-step fa fa-pencil-square-o" ng-click="vm.editStep(step)"></span>
+ <span class="moveto-delete fa fa-minus-circle"
+ title="Delete"
+ data-ng-if="vm.states.confirmed != step.state"
+ data-ng-click="vm.deleteStep(step.uuid)" id="delete-{{step.uuid}}"></span>
+ </aside>
+ <div class="description col-xs-8 col-sm-8 col-md-8">
+ <div class="last-action-details">
+ <span class="name" id="{{step.last_updater.full_name}}_{{step.last_update_type}}">
+ <!--When the nex step is not related to engagement that's means it ssh key next step and we will display 'System Next Step' as tha last updater-->
+ {{step.engagement ? (step.last_updater && step.last_updater.full_name || step.creator.full_name) : "System Next Step"}}
+ &nbsp;{{step.last_update_type}}:&nbsp;
+ </span>
+ <span class="time">{{(step.last_update_time) | date2: 'EEEE MMMM doo yyyy'}} at {{(step.last_update_time) | date: 'hh:mm' : timeGapLocal }} {{ampm}} {{mom}}</span>
+ </div>
+ <div id={{step.uuid}} class="step-state {{step.state | lowercase}} fa" ng-class="{'fa-check-circle': step.state == 'Completed', 'fa-check-circle-o': step.state == 'Incomplete'}" data-ng-click="(step.state==vm.states.incomplete || step.state==vm.states.completed) && vm.toggleCompleted(step.uuid)"></div>
+ <div id="step-description-{{$index}}" class="step-text" ng-bind-html="step.description | htmlspecialchars"></div>
+ </div>
+ <div class="details col-xs-4 col-sm-4 col-md-4">
+ <span class="next-step-due-date" ng-if="step['due_date'].length >0"><span class="icon fa fa-clock-o"></span>{{(step['due_date']) | date2: 'EEEE MMMM doo yyyy'}}</span>
+ <ul class="next-step-team-mates">
+ <li data-ng-repeat="member in step['assignees'] track by member.uuid"
+ data-ng-class="{'me': member.uuid == vm.me.uuid}"
+ class="fa fa-user-circle-o"
+ title="{{member.full_name}} ({{member.email}})">
+ </li>
+ </ul>
+ <span uib-popover-template="'myPopoverTemplate.html'"
+ popover-title="Associated Files"
+ popover-trigger="outsideClick"
+ popover-html='true'
+ popover-placement="bottom"
+ class="associated-files"
+ id="associated-files">Associated Files <span class="fa fa-caret-square-o-down"></span></span>
+ <script type="text/ng-template" id="myPopoverTemplate.html">
+ <span id="associated-files-empty-msg" ng-if="!step.files || step.files.length === 0">There are no files for this next step</span>
+ <ul>
+ <li id="file{{$index}}" ng-repeat="file in step.files track by $index">- {{file}}</li>
+ </ul>
+ </script>
+ </div>
+ </div>
+ </li>
+ <h4 ng-show="!sorted_results || sorted_results.length === 0">No next steps matching filtered results.</h4>
+ </ul>
+ </div>
+ <div class="col-md-4 team-and-logs">
+ <div id="engagement-target-completion">
+ <div id="target-completion-header">
+ <span>Target Completion</span>
+ <i class="edit-target-completion fa fa-pencil-square-o" ng-show="vm.isEngagementEL || vm.isAdmin" data-ng-click="vm.changeTargetCompletion()" aria-hidden="true"></i>
+ </div>
+ <div id="target-completion-content">
+ <h4 class="target-completion-content">{{vm.completion_date | date:'shortDate'}}</h4>
+ </div>
+ </div>
+ <div id="engagement-status">
+ <div id="engagement-status-header">
+ <span>Current Status</span>
+ <i class="add-engagement-status fa fa-plus-circle" ng-show="vm.isEngagementEL || vm.isAdmin" ng-click="vm.addStatus()" aria-hidden="true"></i>
+ </div>
+ <div id="engagement-status-content">
+ <h4 class="engagement-status-content">
+ <i class="edit-engagement-status fa fa-pencil-square-o pull-right" ng-show="(vm.isEngagementEL || vm.isAdmin) && vm.status" ng-click="vm.editStatus()" aria-hidden="true"></i>
+ <span id="status-update-details" ng-if="vm.status">
+ Last updated {{(vm.status.update_time) | date2: 'EEEE MMMM doo yyyy'}} at {{(vm.status.update_time) | date: 'hh:mm' : timeGapLocal }} {{ampm}} {{mom}}
+ by {{vm.status.creator.full_name}}
+ </span>
+ <p id="status-description">{{vm.status.description == undefined && 'No status update has been provided yet.' || vm.status.description }}</p>
+ </h4>
+ </div>
+ </div>
+ <div id="engagement-team">
+ <div id="engagement-team-header">
+ <span>Team Members</span>
+ <i class="add-team-member fa fa-plus-circle" id="team-members-plus-button-id" ng-show="vm.name.length > 0" data-ng-click="vm.addPeople()" aria-hidden="true"></i>
+ </div>
+ <div class="engagement-team-content">
+ <ul class="team-avatars">
+ <li id="team-member-{{member.full_name}}"
+ data-ng-repeat="member in vm.team track by member.uuid"
+ data-ng-class="{'me': member.uuid == vm.me.uuid}"
+ uib-popover-template="'myClTeamMembersPopoverTemplate.html'"
+ popover-trigger='outsideClick'
+ popover-html='true'
+ class="team-member-avatar fa fa-user-circle-o"
+ popover-placement='bottom'>
+ <script type="text/ng-template" id="myClTeamMembersPopoverTemplate.html">
+ <span class="row">
+ <span id="team-member-title" class="popover-title-name col-md-12">
+ {{member.full_name}}
+ <span ng-show="member.company && member.company.name" class="popover-title-company"> - {{member.company.name}}</span>
+ <span class="popover-role-title ">{{vm.engagement.reviewer_uuid == member.uuid ? 'Reviewer' : ''}}{{vm.engagement.peer_reviewer_uuid == member.uuid ? 'Peer Reviewer' : ''}}</span>
+ </span>
+ <span class="popover-details">
+ <span class="popover-details-topic col-md-4">Email:</span><span id="team-member-email" class="popover-details-detail col-md-8">{{member.email}}</span>
+ <span ng-show="member.phone_number" class="popover-details-topic col-md-4">Phone:</span><span id="team-member-phone" class="popover-details-detail col-md-8">{{member.phone_number}}</span>
+ </span>
+ <span id="remove-member" ng-if="vm.is_able_to_delete(member)" class="remove-user-from-eng" ng-click="vm.remove_user_from_eng(member)">
+ <span>Remove</span><span class="remove-icon"></span>
+ </span>
+ </span>
+ </script>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="activity-log">
+ <div id="activity-log-header">Activity Log</div>
+ <ul class="activity-log-details">
+ <li data-ng-repeat="activity in vm.activities track by activity.uuid">
+ <notifications id="activity-log-{{$index}}" activity="activity"></notifications>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/dashboard/overview/overview.less b/d2ice.att.io/app/main/dashboard/overview/overview.less
new file mode 100755
index 00000000..48f76a47
--- /dev/null
+++ b/d2ice.att.io/app/main/dashboard/overview/overview.less
@@ -0,0 +1,575 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.dashboard {
+
+ .remove-user-from-eng {
+ .x_16_r;
+ float: right;
+ cursor: pointer;
+ .remove-icon {
+ .sprite;
+ .sprite.red-delete;
+ display: inline-block;
+ margin-left: 8px;
+ position: relative;
+ top: 3px;
+ }
+ }
+
+ .popover-title-name {
+ .a_18_m;
+ }
+
+ .popover-title-company {
+ .a_18_r;
+ }
+
+ .popover-role-title {
+ .n_16_i;
+ }
+
+ .popover-details {
+ .popover-details-topic {
+ .m_16_m;
+ }
+ .popover-details-detail {
+ word-wrap: break-word;
+
+ .m_16_r;
+ }
+ }
+
+ .content-container #content .main-wrapper {
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 10px ;
+ }
+
+ .no-display-text{
+ .a_36_m;
+ }
+
+ .no-display{
+ display: none;
+ }
+
+ .overview {
+ #engagement-title {
+ color: @toolbar_background_color;
+ }
+ .manual-id {
+ .m_36_m;
+ color: @toolbar_background_color;
+ }
+
+ .filter-wrapper {
+ text-align: right;
+ padding:0px;
+ span {
+ padding: 0px;
+ margin-left: 5px;
+
+ }
+ .form-control-main-view{
+ margin-left: 5px;
+ display: inline;
+ padding: 6px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ }
+ }
+
+ .state-filter {
+ button {
+ padding: 0px 5px 0px 8px;
+ margin-bottom: 1px;
+ }
+
+ span {
+ right: 6px !important;
+ top: 9px !important;
+ }
+
+ a {
+ font-size: 14px;
+ }
+ }
+
+ .steps-progress-wrapper {
+ margin-top: 10px;
+ }
+
+ h1 {
+ display: inline-block;
+ .a_36;
+ margin: 0 0 30px 0;
+ }
+
+ h2 {
+ display: inline-block;
+ margin: 0 0 10px 0;
+ .a_24_m;
+ position: relative;
+ .add-people,
+ .add-step {
+ display: inline-block;
+ margin-left: 8px;
+ cursor: pointer;
+ position: relative;
+ top: 2px;
+ }
+ }
+
+ .main-section {
+ margin-top: 30px;
+ }
+
+ .steps-header {
+ background-color: @toolbar_background_color;
+ color: @main_color_p;
+ padding: 10px 0px 0px 0px;
+ margin: 0px 0px 0px -5px;
+
+ h2 {
+ font-size: 20px;
+ color: @main_color_p;
+ }
+
+ .steps-filter {
+ display: inline-block;
+ float: right;
+ .a_16_m;
+ .todo {
+ .sprite;
+ .sprite.todo;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .completed {
+ .sprite;
+ .sprite.pending;
+ display: inline-block;
+ cursor: pointer;
+ }
+ .confirmed {
+ .sprite;
+ .sprite.approved;
+ display: inline-block;
+ cursor: pointer;
+ }
+ }
+ }
+
+ #engagement-target-completion {
+ border: 1px solid @target_completion_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #target-completion-header {
+ background-color: @target_completion_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .edit-target-completion {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ .target-completion-content {
+ .f-type._16_r;
+ margin: 15px;
+ }
+ }
+
+ #engagement-status {
+ border: 1px solid @engagement_status_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #engagement-status-header {
+ background-color: @engagement_status_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .add-engagement-status {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ .engagement-status-content {
+ .f-type._16_r;
+ margin: 15px;
+
+ #status-update-details {
+ display:block;
+ .m_12_r;
+ }
+
+ #status-description {
+ margin: 3px 0px 0px 0px;
+ .m_16_r;
+ }
+
+ .edit-engagement-status {
+ font-size: 21px;
+ padding-left: 6px;
+ cursor:pointer;
+ color: @main_color_m;
+ }
+ }
+ }
+
+ #engagement-team {
+ border: 1px solid @engagement_team_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #engagement-team-header {
+ background-color: @engagement_team_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+
+ .add-team-member {
+ font-size: 21px;
+ vertical-align: middle;
+ padding-left: 6px;
+ cursor:pointer;
+ }
+ }
+
+ .engagement-team-content {
+ .f-type._16_r;
+ margin: 15px;
+
+ ul.team-avatars {
+ li.team-member-avatar {
+ font-size: 40px;
+ cursor:pointer;
+ color: @engagement_team_color;
+ }
+
+ li {
+ list-style: none;
+ display: inline-block;
+ margin-right: 10px;
+ }
+ }
+ }
+ }
+
+ #star-engagement-action {
+ display: inline-block;
+ cursor:pointer;
+ position: relative;
+ bottom: 3px;
+ margin-right: 5px;
+ }
+
+ #star-engagement-action.not_starred{
+ .sprite.starred;
+ }
+
+ #star-engagement-action.is_starred {
+ .sprite.starred-selected;
+ }
+
+ #star-engagement-action.not_starred:hover{
+ .sprite.starred-selected;
+ }
+
+ #star-engagement-action.is_starred:hover {
+ .sprite.starred;
+ }
+
+ .steps {
+ padding-bottom: 140px;
+ padding-right: 20px;
+ padding-left: 20px;
+
+ ul {
+ li.step {
+ border-bottom: dashed 1px @main_color_n;
+ .step-wrapper {
+ border-left: 2px solid transparent;
+ margin: 7px 0px 7px 1px;
+ &:hover {
+ border-left: 2px solid @main_color_a;
+ background-color: #DEF3FF;
+
+ .description {
+ .step-state {
+ &.incomplete {
+ color: @main_color_d;
+ opacity: 0.7;
+ }
+ }
+ }
+ }
+ }
+ .next-step-actions {
+ display:none;
+ height: 100%;
+ width: 20px;
+ position: relative;
+ padding-top: 10px;
+ float: left;
+ left: -18px;
+ margin-right: -20px;
+
+ > span {
+ margin-bottom: 3px;
+ cursor: pointer;
+ display:block;
+ }
+ .order-nextstep {
+ color: @main_color_o;
+ cursor:pointer;
+ }
+ .edit-next-step {
+ cursor:pointer;
+ color: @main_color_o;
+ }
+ .moveto-confirmed {
+ .actions-sprite;
+ .actions-sprite.approve_large;
+
+ }
+ .moveto-todo {
+ .actions-sprite;
+ .actions-sprite.reject_large;
+ }
+ .moveto-delete {
+ cursor:pointer;
+ color: @main_color_o;
+ }
+
+ }
+ &:hover {
+ .next-step-actions {
+ display:block;
+ }
+ .details {
+ .actions {
+ span {
+ visibility: visible;
+ }
+ }
+ }
+ }
+
+ div.completed {
+ opacity: 0.7;
+ }
+ div.confirmed {
+ opacity: 0.7;
+ }
+
+ .details {
+ text-align: right;
+ .next-step-due-date {
+ color: @main_color_m;
+ font-weight: bold;
+
+ .icon {
+ display: inline-block;
+ margin-right: 5px;
+ position: relative;
+ }
+ }
+
+ .associated-files {
+ color: @main_color_m;
+ font-weight: bold;
+ cursor: pointer;
+ }
+
+ ul.next-step-team-mates {
+ li {
+ list-style: none;
+ display: inline-block;
+ font-size: 27px;
+ padding-left: 5px;
+ color: @engagement_team_color;
+
+ &.me {
+ color: @main_color_a;
+ }
+ }
+
+ }
+
+ }
+ list-style: none;
+ position: relative;
+
+ .description {
+ .m_16_r;
+
+ padding:5px;
+
+ input {
+ position: absolute;
+ top: 10px;
+ left: 0;
+ margin-right: 20px;
+ }
+
+ .step-text {
+ margin-left: 35px;
+ }
+ .last-action-details {
+ .m_12_r;
+ .name {
+ font-weight: bold;
+ .m_12_m;
+
+ }
+ }
+ .step-state {
+ position: absolute;
+ top: 25px;
+ font-size: 25px;
+
+ &.incomplete {
+ color: @main_color_o;
+ display: inline-block;
+ }
+ &.completed {
+ color: @main_color_d;
+ display: inline-block;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .team-and-logs {
+ border-left: dashed 1px @main_color_a;
+ padding-left: 20px;
+ padding-right: 20px;
+
+ .activity-log {
+
+ border: 1px solid @engagement_team_color;
+ padding:0px;
+ margin-bottom: 20px;
+
+ #activity-log-header {
+ background-color: @engagement_team_color;
+ .p_18_m;
+ padding: 5px 5px 0;
+ line-height: 35px;
+ }
+ ul.activity-log-details {
+ margin:15px;
+ li {
+ list-style: none;
+ position: relative;
+ margin: 0 0 10px;
+
+ }
+ }
+ }
+
+ }
+
+ .admin-actions-dropdown {
+ .sprite.admin-dropdown;
+ color: @main_color_a;
+ font-size: 20px;
+ vertical-align: 4px;
+ margin-left: 5px;
+ cursor: pointer;
+ display: inline-block;
+ }
+ }
+
+ .add-next-step-form {
+ .ice-wysiwyg {
+ height: 200px;
+ .wysiwyg-menu > div {
+ background-color: #f1f1f1;
+ padding: 2px;
+ }
+ }
+ }
+
+ .git-repo-url{
+ text-align: left;
+ .m_16_m;
+ }
+
+ .storage-bucket-url{
+ text-align: left;
+ .m_16_m;
+ }
+
+ .line-separator {
+ border-bottom: solid thin;
+ margin-top: 5px;
+ margin-bottom: 7px;
+ align-items: left;
+ }
+}
+
+.intl-tel-input {
+ width: 100%;
+}
+
+.iti-flag {
+ background-image: url(images/flags.png);
+}
diff --git a/d2ice.att.io/app/main/documentation/documentation.controller.js b/d2ice.att.io/app/main/documentation/documentation.controller.js
new file mode 100755
index 00000000..6e3ebb27
--- /dev/null
+++ b/d2ice.att.io/app/main/documentation/documentation.controller.js
@@ -0,0 +1,74 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.documentation')
+ .controller('documentationController', ["cmsService", "$stateParams", "$log", documentationController]);
+
+ function documentationController(cmsService, $stateParams, $log) {
+ var vm = this;
+
+ var init = function()
+ {
+ loadPageData();
+ };
+
+ function loadPageData() {
+ if($stateParams.page_id) {
+ cmsService.getPage($stateParams.page_id)
+ .then(function(response) {
+ if(response && response.data) {
+ vm.pageId = $stateParams.page_id;
+ vm.pageTitle = response.data["title"];
+ vm.pageContent = response.data["content"];
+ vm.publishDate = response.data["publish_date"];
+ }
+ })
+ .catch(function(error) {
+ $log.error(error);
+ });
+ }
+ }
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/documentation/documentation.html b/d2ice.att.io/app/main/documentation/documentation.html
new file mode 100755
index 00000000..44b7c0d8
--- /dev/null
+++ b/d2ice.att.io/app/main/documentation/documentation.html
@@ -0,0 +1,47 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".documentation-content"></ice-loader>
+<div class="row documentation-container">
+ <div class="col-md-12">
+ <h1 class="page-title" id="center-{{vm.pageTitle}}">{{vm.pageTitle}}</h1>
+ <span ng-show="vm.publishDate" class="page-publish">Updated at {{vm.publishDate | date2: 'EEEE MMMM doo yyyy'}}</span>
+ <div class="page-content" id="{{vm.pageId}}" ng-bind-html="vm.pageContent"></div>
+ </div>
+</div>
+
diff --git a/d2ice.att.io/app/main/documentation/documentation.less b/d2ice.att.io/app/main/documentation/documentation.less
new file mode 100755
index 00000000..7b7f188b
--- /dev/null
+++ b/d2ice.att.io/app/main/documentation/documentation.less
@@ -0,0 +1,96 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.documentation-container {
+ .page-title {
+ .a_26_m;
+ margin:0px;
+ }
+
+ .page-publish {
+ .f-type._14_m;
+
+ bottom: 10px;
+ }
+
+ .page-content{
+ .f-type._16_r;
+ margin-top: 10px;
+
+ ul {
+ padding-left: 30px;
+ }
+
+ h1 {
+ font-weight: bold;
+ }
+
+ h2 {
+ font-weight: bold;
+ }
+
+ h3 {
+ font-weight: bold;
+ }
+
+ table {
+ border-right: 1px solid @main_color_c;
+ border-left: 1px solid @main_color_c;
+
+ tr {
+ border-bottom: 1px solid @main_color_c;
+ border-top: 1px solid @main_color_c;
+ border-collapse: collapse;
+
+ td {
+ padding: 0 0 0 7px;
+ }
+ }
+
+ thead {
+ background-color: @main_color_c;
+ color: @main_color_p;
+ font-weight: bold;
+ }
+ }
+ }
+}
+
+#documentation-side-panel {
+ border-left: dashed 1px @main_color_a;
+}
diff --git a/d2ice.att.io/app/main/documentation/documentation.module.js b/d2ice.att.io/app/main/documentation/documentation.module.js
new file mode 100755
index 00000000..fb944e0d
--- /dev/null
+++ b/d2ice.att.io/app/main/documentation/documentation.module.js
@@ -0,0 +1,74 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.documentation')
+ .config(config);
+
+ function config($stateProvider) {
+ $stateProvider
+ .state('app.documentation', {
+ views: {
+ 'navigation@app': {
+ templateUrl: 'core/navigation/layouts/documentation-navigation/navigation.html',
+ controller: 'documentationNavigationController as vm'
+ },
+ 'sidebar@app': {
+ templateUrl: 'main/documentation/sidebar/documentation.sidebar.html'
+ }
+ },
+ bodyClass: 'documentation',
+ params: {displaySidebar: true}
+ })
+ .state('app.documentation.page', {
+ url: '/documentation',
+ views: {
+ 'content@app': {
+ templateUrl: 'main/documentation/documentation.html',
+ controller: 'documentationController as vm'
+ }
+ },
+ bodyClass: 'documentation',
+ params: {displaySidebar: true, page_id: undefined}
+ });
+ }
+})();
diff --git a/d2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.html b/d2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.html
new file mode 100755
index 00000000..c6381a7d
--- /dev/null
+++ b/d2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.html
@@ -0,0 +1,41 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<aside id="documentation-side-panel" class="col-md-12">
+ <ice-news-and-announcement limit="5" show-description="false"></ice-news-and-announcement>
+</aside>
diff --git a/d2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.less b/d2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.less
new file mode 100755
index 00000000..51694fe9
--- /dev/null
+++ b/d2ice.att.io/app/main/documentation/sidebar/documentation.sidebar.less
@@ -0,0 +1,61 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#documentation-side-panel {
+ .tooltip-title {
+ font-size: 18px;
+ }
+
+ #tooltip-description {
+ font-size: 16px;
+ }
+
+ #news-and-announcements-header {
+ font-size: 18px;
+ }
+
+ #news-and-announcements-list {
+ .news-and-announcements-details {
+ .news-and-announcements-details-header {
+ .news-and-announcements-details-title {
+ font-size: 16px;
+ }
+ }
+ }
+ }
+}
diff --git a/d2ice.att.io/app/main/errors/404.html b/d2ice.att.io/app/main/errors/404.html
new file mode 100755
index 00000000..62309745
--- /dev/null
+++ b/d2ice.att.io/app/main/errors/404.html
@@ -0,0 +1,190 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Page Not Found :(</title>
+ <style>
+ ::-moz-selection {
+ background: #b3d4fc;
+ text-shadow: none;
+ }
+
+ ::selection {
+ background: #b3d4fc;
+ text-shadow: none;
+ }
+
+ html {
+ padding: 30px 10px;
+ font-size: 20px;
+ line-height: 1.4;
+ color: #737373;
+ background: #f0f0f0;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ }
+
+ html,
+ input {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ }
+
+ body {
+ max-width: 500px;
+ padding: 30px 20px 50px;
+ border: 1px solid #b3b3b3;
+ border-radius: 4px;
+ margin: 0 auto;
+ box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
+ background: #fcfcfc;
+ }
+
+ h1 {
+ margin: 0 10px;
+ font-size: 50px;
+ text-align: center;
+ }
+
+ h1 span {
+ color: #bbb;
+ }
+
+ h3 {
+ margin: 1.5em 0 0.5em;
+ }
+
+ p {
+ margin: 1em 0;
+ }
+
+ ul {
+ padding: 0 0 0 40px;
+ margin: 1em 0;
+ }
+
+ .container {
+ max-width: 380px;
+ margin: 0 auto;
+ }
+
+ /* google search */
+
+ #goog-fixurl ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+
+ #goog-fixurl form {
+ margin: 0;
+ }
+
+ #goog-wm-qt,
+ #goog-wm-sb {
+ border: 1px solid #bbb;
+ font-size: 16px;
+ line-height: normal;
+ vertical-align: top;
+ color: #444;
+ border-radius: 2px;
+ }
+
+ #goog-wm-qt {
+ width: 220px;
+ height: 20px;
+ padding: 5px;
+ margin: 5px 10px 0 0;
+ box-shadow: inset 0 1px 1px #ccc;
+ }
+
+ #goog-wm-sb {
+ display: inline-block;
+ height: 32px;
+ padding: 0 10px;
+ margin: 5px 0 0;
+ white-space: nowrap;
+ cursor: pointer;
+ background-color: #f5f5f5;
+ background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+ background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+ background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+ background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ }
+
+ #goog-wm-sb:hover,
+ #goog-wm-sb:focus {
+ border-color: #aaa;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+ background-color: #f8f8f8;
+ }
+
+ #goog-wm-qt:hover,
+ #goog-wm-qt:focus {
+ border-color: #105cb6;
+ outline: 0;
+ color: #222;
+ }
+
+ input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="container">
+ <h1>Not found <span>:(</span></h1>
+ <p>Sorry, but the page you were trying to view does not exist.</p>
+ <p>It looks like this was the result of either:</p>
+ <ul>
+ <li>a mistyped address</li>
+ <li>an out-of-date link</li>
+ </ul>
+ <script>
+ var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
+ </script>
+ <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
+ </div>
+ </body>
+</html>
diff --git a/d2ice.att.io/app/main/main.controller.js b/d2ice.att.io/app/main/main.controller.js
new file mode 100755
index 00000000..9c91aae9
--- /dev/null
+++ b/d2ice.att.io/app/main/main.controller.js
@@ -0,0 +1,60 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.main',[])
+ .controller('MainController', MainController)//;
+ .config(function($mdDateLocaleProvider) {
+ $mdDateLocaleProvider.formatDate = function (date) {
+ return date ? moment(date).format('MMMM Do YYYY') : '';
+ };
+
+ $mdDateLocaleProvider.parseDate = function (dateString) {
+ var m = moment(dateString, 'YYYY-MM-DD', true);
+ return m.isValid() ? m.toDate() : new Date(NaN);
+ };
+ });
+
+ function MainController($scope, $rootScope) {
+
+ }
+
+})(); \ No newline at end of file
diff --git a/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.controller.js b/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.controller.js
new file mode 100755
index 00000000..3c1226cb
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.controller.js
@@ -0,0 +1,66 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('archiveEngagementModalController', ['$uibModalInstance','engagementDetails',archiveEngagementModalController]);
+
+ function archiveEngagementModalController($uibModalInstance, engagementDetails) {
+
+ var vm = this;
+ var init = function () {
+ if(engagementDetails) {
+ vm.engagement = engagementDetails;
+ }
+ };
+
+ vm.closeModal = function () {
+ $uibModalInstance.dismiss();
+ };
+
+ vm.archiveEngagement = function() {
+ $uibModalInstance.close(vm.reason);
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.html b/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.html
new file mode 100755
index 00000000..7d4b5b07
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.html
@@ -0,0 +1,56 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="archive-engagement-modal">
+ <div class="modal-header row">
+ <button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div id="archive-engagement-title" class="archive-engagement-title"><span>Archive Engagement</span></div>
+ <span class="archive-engagement-reason">Please provide a short reason for why you are archiving this engagement.</span>
+ </div>
+ <div class="modal-body row">
+ <form name="archiveEngagementForm" ng-submit="vm.archiveEngagement()" novalidate="" class="">
+ <div class="form-group" ng-class="{ 'has-error' : archiveEngagementForm.reason.$invalid && archiveEngagementForm.reason.$dirty }">
+ <textarea type="text" name="reason" class="form-control" ng-model="vm.reason" required=""></textarea>
+ <div class="ice-form-error" data-ng-show="archiveEngagementForm.reason.$error">
+ <span ng-show="archiveEngagementForm.reason.$error.required && archiveEngagementForm.reason.$dirty" class="help-block ng-hide" aria-hidden="true">Please enter a reason</span>
+ </div>
+ </div>
+ <button id="submit-modal" class="btn btn-primary col-md-12" data-ng-disabled="archiveEngagementForm.$invalid" type="submit">Submit</button>
+ </form>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.less b/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.less
new file mode 100755
index 00000000..da2f8503
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/archive-engagement-modal/archive-engagement-modal.less
@@ -0,0 +1,54 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.archive-engagement-modal {
+ padding: 0px 15px 0px 15px;
+
+ .archive-engagement-title {
+ .a_24_m;;
+ }
+
+ .archive-engagement-reason {
+ .m_16_r;
+ }
+
+ .modal-body {
+ top: 10px;
+ }
+}
+
diff --git a/d2ice.att.io/app/main/modals/audit-log/audit-log.controller.js b/d2ice.att.io/app/main/modals/audit-log/audit-log.controller.js
new file mode 100755
index 00000000..84e7fbc6
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/audit-log/audit-log.controller.js
@@ -0,0 +1,95 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('AuditLogModalController', ['$rootScope', '$uibModalInstance', 'checklistService', 'wizardData',
+ 'toastService', '$log', AuditLogModalController]);
+
+ function AuditLogModalController($rootScope, $uibModalInstance, checklistService, wizardData, toastService, $log) {
+ var vm = this;
+
+ var init = function()
+ {
+ var arr = [];
+ var i;
+ var region = moment().tz( moment.tz.guess()).format('z');
+ var dt = "";
+ vm.name = wizardData.name;
+ vm.checklistAuditLogs = wizardData.checklistAuditLogs;
+ vm.checklistAuditLogs.forEach(function (cl)
+ {
+ dt = moment(cl.create_time).local().format('YYYY-MM-DD hh:mm:ss A') + " " + region;
+ arr.push({"name":cl.creator.full_name,"dt":dt,"desc":cl.description});
+ });
+ vm.checklistAuditLogs = arr;
+ }
+
+ init();
+
+ vm.submitForm = function ()
+ {
+ var jsonPost = {"description":vm.description};
+ checklistService.createAuditlogChecklist(wizardData.uuid, jsonPost)
+ .then(function (response) {
+ if (response.status === 200)
+ {
+ $uibModalInstance.close(response.data);
+ vm.closeModal();
+ }
+ else
+ {
+ toastService.setToast(response.error, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $log.error(error.message);
+ });
+ };
+
+ vm.closeModal = function(){
+ toastService.clearToast();
+ $uibModalInstance.close();
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/audit-log/audit-log.html b/d2ice.att.io/app/main/modals/audit-log/audit-log.html
new file mode 100755
index 00000000..a4ad06f7
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/audit-log/audit-log.html
@@ -0,0 +1,76 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-loader selector=".checkList-form"></ice-loader>
+
+<div class="modal-header checkList">
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <ice-toast is-modal="true"></ice-toast>
+ <div id="modal-title" class="row ">
+ <div class=" dash col-md-12 col-md-12 ">
+ <span class="font_header">Checklist: </span>
+ <span class="font_header_chk_name margin_btm italic">{{vm.name}}</span>
+ </div>
+ </div>
+</div>
+
+<div class="modal-body checkList auditlog">
+ <form name="AuditLogForm" ng-submit="vm.submitForm()" novalidate class="checkList-form">
+ <div class=" margin_top">
+ <h2>Audit Log</h2>
+ </div>
+ <div class="audit-log-items" id="audit-log-lines" data-ng-repeat="auditLog in vm.checklistAuditLogs">
+ <div class="row" >
+ <span class="col-md-6 font_user_name">
+ {{auditLog.name}}
+ </span>
+ <span class="col-md-6 text-right font_date">
+ {{auditLog.dt}}
+ </span>
+ <div class=" col-md-12 font_desc margin_btm5" ng-bind-html="auditLog.desc"></div>
+ </div>
+ </div>
+ <textarea name="inputBox" rows="3" class="form-control col-md-12 margin_top textarea-checklist-audit" ng-model="vm.description" ng-trim="false" ng-pattern="/^[a-zA-Z0-9\&\,\.\ ]*$/"required ></textarea>
+ <div data-ng-show="AuditLogForm.inputBox.$error" class="ice-form-error">
+ <span ng-show="AuditLogForm.inputBox.$error.required && !AuditLogForm.inputBox.$pristine">Please add a Description.</span>
+ <span ng-show="AuditLogForm.inputBox.$error.pattern">Inserted text should not include any special chars such as: \%_*."</span>
+ </div>
+
+ <button type="submit" class="btn btn-primary margin_top" data-ng-disabled="!AuditLogForm.$valid">Add Log Entry</button>
+ </form>
+</div>
diff --git a/d2ice.att.io/app/main/modals/audit-log/audit-log.less b/d2ice.att.io/app/main/modals/audit-log/audit-log.less
new file mode 100755
index 00000000..7ba728e6
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/audit-log/audit-log.less
@@ -0,0 +1,49 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.auditlog {
+
+ .audit-log-items {
+ border-bottom: 1px solid;
+ margin-bottom: 5px;
+ }
+
+ .textarea-checklist-audit {
+ resize: none;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/change-date/change-date.controller.js b/d2ice.att.io/app/main/modals/change-date/change-date.controller.js
new file mode 100755
index 00000000..35290c99
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/change-date/change-date.controller.js
@@ -0,0 +1,75 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('ChangeDateModalController', ["$uibModalInstance", "completionDate", "engagementUuid", "vfService", "$rootScope", "toastService", changeDateModalController]);
+
+ function changeDateModalController($uibModalInstance, completionDate, engagementUuid, vfService, $rootScope, toastService) {
+
+ var vm = this;
+ //vm.completionDate = new Date(completionDate);
+ vm.completionDate = completionDate;
+
+ vm.dateOptions = {
+ minDate: new Date(),
+ showWeeks: true
+ };
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+
+ vm.submitForm = function(){
+ var postData={"target_date": moment(vm.completionDate).format("YYYY-MM-DD")};
+ vfService.updateDaysLeft(engagementUuid, postData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(postData);
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.status + ': Error changing completion date!', 'danger');
+ });
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/change-date/change-date.html b/d2ice.att.io/app/main/modals/change-date/change-date.html
new file mode 100755
index 00000000..4d3e0b59
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/change-date/change-date.html
@@ -0,0 +1,62 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<form name="updateProgressForm" ng-submit="vm.submitForm()" novalidate class="update-progress-form">
+ <div class="modal-header">
+ <h3 class="modal-title" id="modal-title">Target Completion Date</h3>
+ <button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+ <div class="modal-body">
+ <div class="form-group" ng-class="{ 'has-error' : updateProgressForm.date.$invalid && !updateProgressForm.date.$pristine }">
+
+ <!--<input type="text" name="date" class="form-control" ng-model="vm.completionDate" ng-minlength="1" ng-maxlength="2" maxlength="2" required>-->
+
+ <div>{{vm.completionDate | date:'fullDate' }}</div>
+
+ <div class="ice-form-error" data-ng-show="updateProgressForm.date.$error">
+ <span ng-show="updateProgressForm.date.$error.required && !updateProgressForm.date.$pristine">Date is required field!</span>
+ </div>
+ </div>
+
+ <uib-datepicker ng-model="vm.completionDate" class="well well-sm" datepicker-options="vm.dateOptions"></uib-datepicker>
+
+ </div>
+ <div class="modal-footer">
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!updateProgressForm.$valid">Save</button>
+ </div>
+</form>
diff --git a/d2ice.att.io/app/main/modals/change-progress/change-progress.controller.js b/d2ice.att.io/app/main/modals/change-progress/change-progress.controller.js
new file mode 100755
index 00000000..e28b2528
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/change-progress/change-progress.controller.js
@@ -0,0 +1,71 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.modals',[])
+ .controller('ChangeProgressModalController', ["$uibModalInstance", "progress", "engagementUuid", "vfService",
+ "$log", "toastService", ChangeProgressModalController]);
+
+ function ChangeProgressModalController($uibModalInstance, progress, engagementUuid, vfService, $log, toastService) {
+
+ var vm = this;
+ vm.progress = progress;
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+
+ vm.submitForm = function(){
+ var postData={"progress": vm.progress};
+ vfService.updateProgress(engagementUuid, postData)
+ .then(function (response) {
+ if (response.status === 202) {
+ $uibModalInstance.close(postData);
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ });
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/change-progress/change-progress.html b/d2ice.att.io/app/main/modals/change-progress/change-progress.html
new file mode 100755
index 00000000..adfb7e7a
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/change-progress/change-progress.html
@@ -0,0 +1,65 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<form name="updateProgressForm" ng-submit="vm.submitForm()" novalidate class="update-progress-form">
+ <div class="modal-header">
+ <h3 class="modal-title" id="modal-title">Specify Progress in %</h3>
+ <button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+
+ <div class="modal-body">
+ <div class="form-group" ng-class="{ 'has-error' : updateProgressForm.progress.$invalid && !updateProgressForm.progress.$pristine }">
+ <input type="text"
+ name="progress"
+ class="form-control"
+ ng-model="vm.progress"
+ ng-minlength="1"
+ ng-maxlength="3"
+ maxlength="3"
+ ng-pattern="/^[1-9][0-9]?$|^100|^0$/"
+ required>
+ <div class="ice-form-error" data-ng-show="updateProgressForm.progress.$error">
+ <span ng-show="updateProgressForm.progress.$error.required && !updateProgressForm.progress.$pristine">Progress is a required field!</span>
+ <span ng-show="updateProgressForm.progress.$error.pattern && !updateProgressForm.progress.$pristine">Progress value is not valid!</span>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="submit" class="btn btn-primary" id="engagement-progress-submit" data-ng-disabled="!updateProgressForm.$valid">Save</button>
+ </div>
+</form>
diff --git a/d2ice.att.io/app/main/modals/checklist/checklist.controller.js b/d2ice.att.io/app/main/modals/checklist/checklist.controller.js
new file mode 100755
index 00000000..4a20b53d
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/checklist/checklist.controller.js
@@ -0,0 +1,238 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('ChecklistModalController', ['toastService', '$rootScope', '$uibModalInstance', 'checklistService',
+ 'engagementUuid', 'modal_type', 'wizardData', '$log', ChecklistModalController]);
+
+ function ChecklistModalController(toastService, $rootScope, $uibModalInstance, checklistService, engagementUuid,
+ modal_type, wizardData, $log) {
+ var vm = this;
+ vm.checkListAssociatedFiles = [];
+ vm.selectedCheckListAssociatedFiles = [];
+ vm.isDisabled = false;
+
+ var init = function() {
+ switch(modal_type) {
+ case 'create':
+ vm.create = true;
+ vm.createUpadeTitle = "Create";
+ vm.modalType = 'create';
+ vm.modalTitle = "Create";
+ checklistService.getDataForCreateChecklist(engagementUuid)
+ .then(function (response) {
+ if (response.status === 200) {
+ vm.checkListTemplatesLists = [];
+ vm.checkListTemplates = response.data.checkListTemplates;
+ angular.forEach(response.data.checkListAssociatedFiles, function (value, key) {
+ vm.checkListAssociatedFiles.push({File: value});
+ });
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ });
+ break;
+ case 'update':
+ vm.update = true;
+ vm.createUpadeTitle = "Update";
+ vm.modalType = 'udpate';
+ vm.modalTitle = "Update";
+ vm.checklistUuid = wizardData.uuid;
+ vm.checkListName = wizardData.name;
+ checklistService.getDataForCreateChecklist(engagementUuid)
+ .then(function (response) {
+ if (response.status === 200) {
+ vm.checkListAssociatedFiles = []
+ angular.forEach(response.data.checkListAssociatedFiles, function (value, key) {
+ vm.checkListAssociatedFiles.push({File: value});
+ });
+ $rootScope.ice.loader.show = false;
+
+ vm.selectedCheckListAssociatedFiles =[]
+
+ angular.forEach(wizardData.associatedFiles, function(val, key1) {
+ vm.selectedCheckListAssociatedFiles.push({File: val});
+ });
+
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ });
+ vm.selectedTemplateUuid = wizardData.selectedTemplateUuid;
+ vm.selectedTemplateName = wizardData.selectedTemplateName;
+
+ break;
+ }
+ }
+ init();
+
+ vm.addFile = function ()
+ {
+ var newItemNo = vm.selectedCheckListAssociatedFiles.length + 1;
+ vm.selectedCheckListAssociatedFiles.push({'id': newItemNo});
+ };
+
+ vm.removeFile = function (index)
+ {
+ vm.selectedCheckListAssociatedFiles.splice(index,1);
+ };
+
+ vm.closeModal = function(){
+ toastService.clearToast();
+ $rootScope.$emit('onChecklistUpdate');
+ $uibModalInstance.close(vm.checkListName);
+ $uibModalInstance.close();
+ };
+
+
+ vm.submitForm = function ()
+ {
+ vm.isDisabled = true;
+ var checklist_files = [];
+ switch(modal_type){
+ case 'create':
+ angular.forEach(vm.selectedCheckListAssociatedFiles, function(val, key1) {
+ checklist_files.push(val.File);
+ });
+ var jsonPost = {
+ "checkListAssociatedFiles": checklist_files,
+ "checkListName": vm.checkListName,
+ "checkListTemplateUuid" : vm.selectedTemplateUuid
+ };
+
+ checklistService.createChecklist(engagementUuid, jsonPost)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.data);
+ $rootScope.ice.loader.show = false;
+ vm.closeModal();
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message || 'Error creating check list.', 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ vm.isDisabled = false;
+ $log.error(error.message);
+ });
+ break;
+ case 'update':
+
+ var updated_file_list = [];
+ angular.forEach(vm.selectedCheckListAssociatedFiles, function(val, key1) {
+ updated_file_list.push(val.File);
+ });
+ $log.debug("update", updated_file_list);
+ var jsonPut = {
+ "checklistUuid": vm.checklistUuid,
+ "checkListAssociatedFiles": updated_file_list,
+ "checkListName": vm.checkListName,
+ "checkListTemplateUuid" : vm.selectedTemplateUuid
+ };
+ checklistService.putDataForChecklist(vm.checklistUuid, jsonPut)
+ .then(function (response) {
+ if (response.status === 200) {
+ $rootScope.$broadcast('onUpdateEngagements',{select:{uuid: engagementUuid, view_type : 'checklist', sub_id: vm.checklistUuid}});
+ $rootScope.ice.loader.show = false;
+
+ var response_data = {};
+ response_data.checklist_name = vm.checkListName;
+ response_data.associated_files = updated_file_list;
+ var array1 = vm.checkListAssociatedFiles.sort();
+ var array2 = updated_file_list.sort();
+
+ var is_same_files = (array1.length == array2.length) && array1.every(function(element, index) {
+ return element === array2[index];
+ });
+ // if file list changed reject checklist
+ if (!is_same_files && wizardData.state != 'pending')
+ {
+ var postData = {};
+ postData["description"] = "Rejected due to file list change";
+ postData["decline"] = "True";
+
+ checklistService.setState(vm.checklistUuid, postData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $rootScope.$broadcast('onUpdateEngagements');
+ }
+ else {
+ toastService.setToast(response.error, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ vm.isDisabled = false;
+ return;
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ vm.isDisabled = false;
+ return;
+ });
+ }
+
+ $uibModalInstance.close(response_data);
+ vm.closeModal();
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error.message);
+ vm.isDisabled = false;
+
+ });
+ break;
+ default:
+ $log.debug('no submit action found');
+ vm.isDisabled = false;
+ break;
+ }
+ }
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/checklist/checklist.html b/d2ice.att.io/app/main/modals/checklist/checklist.html
new file mode 100755
index 00000000..d308c9d2
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/checklist/checklist.html
@@ -0,0 +1,107 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-toast is-modal="true"></ice-toast>
+<ice-loader selector=".checkList-form"></ice-loader>
+<div class="modal-header checkList">
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div class="row margin_btm">
+ <h2 id="modal-header-checklist-15">{{vm.createUpadeTitle}} Checklist</h2>
+ </div>
+</div>
+<div class="modal-body checkList">
+ <form name="checkListForm" ng-submit="vm.submitForm()" novalidate class="checkList-form">
+
+ <div class="row margin_btm" ng-show ="vm.create" id="checklist-subject">
+ Use the form below to create checklist. Please do note that if a file is already associated with another checklist you will need to remove it from that checklist first to be able to associate it.
+ </div>
+ <div class="row margin_btm" ng-show ="vm.update" id="checklist-subject-update">
+ Use the form below to update the checklist. Please do note that if a file is already associated with another checklist you will need to remove it from that checklist first to be able to associate it.
+ </div>
+ <div class="row margin_btm">
+ <div class="col-md-8 row">
+ <h3 id="checklist-name-title" class="col-md-12">Name</h3>
+ <div class="col-md-12"><input type="text" placeholder="Checklist Name" name="checkListName" class="form-control" ng-model="vm.checkListName" maxlength="32" ng-trim="false" ng-pattern="/^[a-zA-Z0-9\&\ ]*$/" required></div>
+ </div>
+ <div class="col-md-4 row">
+ <h3 id="checklist-template-title" class="col-md-12">Checklist Template</h3>
+ <div class="col-md-12">
+ <select id="please-select" ng-model="vm.selectedTemplateUuid" class="form-control" ng-if="vm.modalType === 'create'" required >
+ <option value>Please Select</option>
+ <option id="{{dt.name}}" ng-repeat="dt in vm.checkListTemplates" value="{{dt.uuid}}" ng-selected="{{dt.Selected == true}}">
+ {{dt.name}}
+ </option>
+ </select>
+ </div>
+ <div ng-if="vm.modalType != 'create'" class="col-md-12">
+ <span class="fnt">
+ <input type="text" ng-model="vm.selectedTemplateName" class="form-control" disabled="true" />
+ </span>
+ </div>
+ </div>
+ </div>
+ <div class="row margin_btm">
+ <h3 id="associated-files-title" class="col-md-12 col-no-top">Associate Files</h3>
+
+ <multiselect
+ ng-model="vm.selectedCheckListAssociatedFiles"
+ options="file.File for file in vm.checkListAssociatedFiles"
+ data-multiple="true"
+ scroll-after-rows="5"
+ filter-after-rows="5"
+ class = "col-md-12 checklist-modal-multi-select"
+ ms-header = "Select all associated files for the checklist"
+ ms-selected="{{vm.selectedCheckListAssociatedFiles.length > 1 ? vm.selectedCheckListAssociatedFiles.length + ' Associated files' : vm.selectedCheckListAssociatedFiles.length + ' Associated file'}} selected"
+ id="select-associated-files"
+ tabindex="-1">
+ </multiselect>
+ </div>
+ <div data-ng-show="checkListForm.checkListName.$error" class="ice-form-error">
+ <span ng-show="checkListForm.checkListName.$error.required && !checkListForm.checkListName.$pristine">Name is a required field.</span>
+ <span ng-show="checkListForm.checkListName.$error.maxlength">Provided name is too long.</span>
+ <span ng-show="checkListForm.checkListName.$error.pattern">Name should not include any special chars such as: ,\%_*."</span>
+ </div>
+ <div class="row margin_btm">
+ <div class="col-md-12">
+ <button id="btn-create-checklist" type="submit" class="btn btn-primary" data-ng-disabled="!checkListForm.$valid || vm.isDisabled">{{vm.modalTitle}} Checklist</button>
+ </div>
+ </div>
+ </form>
+</div>
+
+
diff --git a/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.controller.js b/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.controller.js
new file mode 100755
index 00000000..160b57cc
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.controller.js
@@ -0,0 +1,105 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('stateDecisionModalController', ['$rootScope','$uibModalInstance', 'checklistService',
+ 'toastService', 'action', 'checklist', '$log', stateDecisionModalController]);
+
+ function stateDecisionModalController($rootScope, $uibModalInstance, checklistService, toastService, action,
+ checklist, $log) {
+
+ var vm = this;
+
+ var init = function () {
+ vm.description = null;
+ vm.checklist_name = checklist.name;
+ vm.state = checklist.state;
+ vm.action = action;
+ vm.modalText = (vm.state == 'pending') ? "Are you sure you want to move the checklist state to Automation?":
+ "Please use the button below to either approve or reject the " +
+ "checklist.<br>You can also add a log entry comment.";
+ };
+
+ vm.submitForm = function(decision) {
+ var postData = {};
+ if (vm.description != null) {
+ postData["description"] = vm.description;
+ }
+ else{
+ postData["description"] = '';
+ }
+
+ if (decision === true) {
+ postData["decline"] = "False";
+ }
+ else {
+ postData["decline"] = "True";
+ }
+
+
+
+ checklistService.setState(checklist.uuid, postData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.data);
+ vm.closeModal();
+ }
+ else {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ });
+
+ };
+
+ vm.closeModal = function () {
+ $uibModalInstance.close();
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.html b/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.html
new file mode 100755
index 00000000..4db81b1f
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.html
@@ -0,0 +1,58 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+
+ <form name="approveOrRejectState" id="approve-or-reject-state" novalidate>
+ <div class="row modal-header ">
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <span class="state-title"><span class="bold">Checklist:</span> {{vm.checklist_name}}</span>
+ <div class = "state-title-border"></div>
+ </div>
+ <div class = "row decision-modal-body">
+ <div class = "modal-title" id="modal-title">{{vm.state.replace('_',' ') | capitalize}}</div>
+ <div class = "decision-comment"><div ng-bind-html="vm.modalText"></div></div>
+ <textarea name="entry_comment"rows="3" class = "col-md-12 comment-textarea" ng-model="vm.description" ng-trim="false" ng-pattern="/^[a-zA-Z0-9\&\,\.\ "></textarea>
+ </div>
+ <div data-ng-show="approveOrRejectState.entry_comment.$error" class="ice-form-error">
+ <span ng-show="approveOrRejectState.entry_comment.$error.pattern">Inserted text should not include any special chars such as: \%_*."</span>
+ </div>
+ <div class = "row modal_buttons">
+ <button id="approve-state" type="submit" class="col-md-12 btn btn-gradient-success" ng-if="vm.action == 'approve'" ng-click="vm.submitForm(true)">{{vm.state == 'pending' ? 'Automate' : 'Approve'}}</button>
+ <button id="reject-state" type="submit" class="col-md-12 btn btn-gradient-danger" ng-if="vm.action == 'reject'" ng-click="vm.submitForm(false)">Reject</button>
+ </div>
+ </form>
diff --git a/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.less b/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.less
new file mode 100755
index 00000000..08bf14e9
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/checklist/state-approve-or-reject/state-approve-or-reject.less
@@ -0,0 +1,173 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.modal-open .modal {
+ z-index: 30000 !important;
+}
+
+#approve-or-reject-state {
+
+ .modal-title {
+ .a_22_m;
+ }
+
+ .decision-modal-body {
+ margin-bottom: 8px;
+ margin-top: 10px;
+ }
+
+ .decision-comment {
+ .m_14_r;;
+ }
+
+ .modal_buttons {
+ .custom-button {
+ position: relative;
+ width: 30%;
+ float: left;
+ display: inline-block;
+ }
+ .custom-space {
+ position: relative;
+ width: 5%;
+ float: left;
+ min-height: 1px;
+ }
+ }
+
+ .state-title .bold {
+ .m_18_m;
+ }
+ .state-title {
+ .m_18_r;
+ }
+ .state-title-border {
+ border-bottom: dashed 1px;
+ border-color: @main_color_q;
+ margin-left: 0px;
+ }
+
+ .comment-textarea {
+ resize: vertical;
+ }
+
+ .btn-gradient-success {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #41A02C;
+ *background-color: #41A02C;
+ background-image: -moz-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#A2E652), to(#41A02C));
+ background-image: -webkit-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -o-linear-gradient(top, #A2E652, #41A02C);
+ background-image: linear-gradient(to bottom, #A2E652, #41A02C);
+ background-repeat: repeat-x;
+ border-color: #41A02C;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#A2E652', endColorstr='#41A02C', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+ .btn-sample:hover,
+ .btn-sample:focus,
+ .btn-sample:active,
+ .btn-sample.active,
+ .btn-sample.disabled,
+ .btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #41A02C;
+ *background-color: #003bb3;
+ }
+
+ .btn-gradient-danger {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #AE0020;
+ *background-color: #AE0020;
+ background-image: -moz-linear-gradient(top, #F74658, #AE0020);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#F74658), to(#AE0020));
+ background-image: -webkit-linear-gradient(top, #F74658, #AE0020);
+ background-image: -o-linear-gradient(top, #F74658, #AE0020);
+ background-image: linear-gradient(to bottom, #F74658, #AE0020);
+ background-repeat: repeat-x;
+ border-color: #AE0020;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F74658', endColorstr='#AE0020', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+ .btn-sample:hover,
+ .btn-sample:focus,
+ .btn-sample:active,
+ .btn-sample.active,
+ .btn-sample.disabled,
+ .btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #AE0020;
+ *background-color: #003bb3;
+ }
+
+ .btn-gradient-default {
+ font-weight: bold;
+ color: #B3B3B3;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #D0D0D0;
+ *background-color: #D0D0D0;
+ background-image: -moz-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#FCFCFC), to(#D0D0D0));
+ background-image: -webkit-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: -o-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: linear-gradient(to bottom, #FCFCFC, #D0D0D0);
+ background-repeat: repeat-x;
+ border-color: #D0D0D0;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FCFCFC', endColorstr='#D0D0D0', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ }
+ .btn-sample:hover,
+ .btn-sample:focus,
+ .btn-sample:active,
+ .btn-sample.active,
+ .btn-sample.disabled,
+ .btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #D0D0D0;
+ *background-color: #003bb3;
+ }
+
+}
diff --git a/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.controller.js b/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.controller.js
new file mode 100755
index 00000000..09773283
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.controller.js
@@ -0,0 +1,92 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('cmsPostModalController', ['$uibModalInstance', 'cmsService','post', '$log', cmsPostModalController]);
+
+ function cmsPostModalController($uibModalInstance, cmsService, post, $log) {
+
+ var vm = this;
+ var init = function () {
+ if(post) {
+ vm.post = post;
+ } else {
+ cmsService.getLastAnnouncementPost()
+ .then(function(response) {
+ if(response && response.data && response.data.length === 1) {
+ vm.post = response.data[0];
+ }
+ })
+ .catch(function(error) {
+ $log.error(error);
+ });
+ }
+
+ loadRecentPosts();
+ };
+
+ vm.closeModal = function (bool) {
+ $uibModalInstance.close(bool);
+ };
+
+ vm.loadSelectedPostData = function(post) {
+ if(post) {
+ vm.post = post;
+ }
+ };
+
+ function loadRecentPosts() {
+ var limit = 5;
+ var fromLastDays = "";
+
+ cmsService.getPosts(limit, fromLastDays, ['Announcement', 'News'])
+ .then(function(response) {
+ vm.recentPosts = response.data;
+ })
+ .catch(function(error) {
+ $log.error(error);
+ });
+ }
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.html b/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.html
new file mode 100755
index 00000000..cd51c5e3
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.html
@@ -0,0 +1,55 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="toast-read-more-container">
+ <div class="modal-header row">
+ <span class="toast-read-more-title" id="toast-title-id">{{vm.post.title}}</span>
+ <p class="toast-read-more-creation ng-binding">Posted at {{vm.post.publish_date | date2: 'EEEE MMMM doo yyyy'}} by {{vm.post.user.username}}</p>
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+ <div class="modal-body row toast-read-more-content" id="toast-description" ng-bind-html="vm.post.content"></div>
+ <div class="recent-cms-posts-container row">
+ <div class="line-separator col-md-12"></div>
+ <span class="recent-cms-posts-title">Most recent news & announcements</span>
+ <ul class="recent-cms-posts">
+ <li class="row" data-ng-repeat="post in vm.recentPosts track by post.id" ng-class="{'selected': (post.id === vm.post.id)}" ng-click="vm.loadSelectedPostData(post)">
+ <span class="col-md-7">{{post.title}}</span><span class="col-md-5 post-creation">Posted at {{post.publish_date | date2: 'EEEE MMMM doo yyyy'}} by {{post.user.username}}</span>
+ </li>
+ </ul>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.less b/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.less
new file mode 100755
index 00000000..832ef012
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/cms-post-modal/cms-post-modal.less
@@ -0,0 +1,106 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.toast-read-more-container {
+ padding: 0 20px;
+ word-wrap: break-word;
+
+ .recent-cms-posts-container {
+ .line-separator {
+ border-bottom: solid 1px @main_color_m;
+ margin: 20px 0;
+ }
+
+ .recent-cms-posts-title {
+ .a_16_m;
+
+ }
+
+ ul.recent-cms-posts {
+ margin-top: 3px;
+
+ li {
+ .f-type._16_m;
+ list-style: none;
+ position: relative;
+ line-height: 28px;
+ cursor: pointer;
+
+ .post-creation {
+ .f-type._12_r;
+ }
+
+ &:before {
+ content: '';
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ }
+ }
+
+ li.selected {
+ background-color: @func_color_r;
+ }
+ }
+ }
+}
+
+.toast-read-more-title {
+ .a_26_m;
+ line-height: 26px;
+}
+
+.toast-read-more-creation {
+ display: block;
+}
+
+.toast-read-more-content {
+ .m_18_r;
+ line-height: 20px;
+ padding: 10px 20px 0;
+}
+
+.modal-cms-post-read-more {
+ width: 70%;
+ margin: 0px auto;
+ height: 100%;
+
+ .modal-content {
+ height: 100%;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.controller.js b/d2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.controller.js
new file mode 100755
index 00000000..e14a9f88
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.controller.js
@@ -0,0 +1,100 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('detailedViewDtsitesModalController', ["$rootScope", "$uibModalInstance", "$stateParams",
+ "dtsiteService", "toastService", "vf_uuid", "$log", detailedViewDtsitesModalController]);
+
+ function detailedViewDtsitesModalController($rootScope, $uibModalInstance, $stateParams, dtsiteService, toastService,
+ vf_uuid, $log) {
+
+ var vm = this;
+
+ var init = function () {
+ if($stateParams.engagement != undefined) {
+ vm.vf = $stateParams.engagement.vf;
+ }
+ getDTsites();
+
+ };
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+
+ vm.json = '';
+
+ vm.submitForm = function(){
+ var postData={
+ "name": vm.json,
+ "vf_uuid": vf_uuid
+ };
+
+ dtsiteService.add(postData)
+ .then(function (response) {
+ $uibModalInstance.close(response.status);
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ });
+ };
+
+ var getDTsites = function() {
+ $rootScope.ice.loader.show = true;
+ dtsiteService.get()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.dtsites = response.data;
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ init();
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.html b/d2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.html
new file mode 100755
index 00000000..901cd624
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/detailed-view/dtsite/detailed-view-dtsites-modal.html
@@ -0,0 +1,62 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<form name="addDTSite" ng-submit="vm.submitForm()" novalidate class="update-progress-form">
+ <div class="modal-header">
+ <h3 class="modal-title" id="modal-title">Add Deployment Target</h3>
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+
+ <div class="modal-body">
+
+ <div class="table-col-general flex-item">
+ <select ng-model="vm.json" class="form-control" required>
+ <option value>Please Select</option>
+ <option ng-repeat="site in vm.dtsites" value="{{site.name}}">
+ {{site.name}}
+ </option>
+ </select>
+
+ </div>
+ <br>
+ </div>
+
+ <div class="modal-footer">
+ <button type="submit" id="add-dt-save-button" class="btn btn-primary" data-ng-disabled="!addDTSite.$valid">Add Deployment Target</button>
+ </div>
+</form>
diff --git a/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.controller.js b/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.controller.js
new file mode 100755
index 00000000..983d8d99
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.controller.js
@@ -0,0 +1,124 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('detailedViewVFCModalController', ["$rootScope", "$uibModalInstance", "vfcService", "toastService",
+ "vf_uuid", "usersService", "$log", detailedViewVFCModalController]);
+
+ function detailedViewVFCModalController($rootScope, $uibModalInstance, vfcService, toastService, vf_uuid, usersService, $log) {
+
+ var vm = this;
+
+ var init = function () {
+ vm.me = usersService.getUserData();
+
+ getVendors()
+ };
+
+ vm.vfcs = [{name:'',external_ref_id:'',company:''}];
+ vm.companies = [];
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+
+ vm.addNewChoice = function () {
+ var newItemNo = vm.vfcs.length + 1;
+ vm.vfcs.push({'id': newItemNo});
+ };
+
+ vm.removeChoice = function (index) {
+ vm.vfcs.splice(index,1);
+ };
+
+ vm.submitForm = function(){
+ var jsonAddVfc = [];
+ angular.forEach(vm.vfcs, function (value, key) {
+ vm.item = [];
+ var jsonItem = new Object();
+ jsonItem.name = value.name;
+ jsonItem.external_ref_id = value.external_ref_id;
+ jsonItem.company = value.company;
+ jsonAddVfc.push(jsonItem);
+ });
+
+ var postData={
+ "vfcs": jsonAddVfc,
+ "vf_uuid": vf_uuid,
+ "creator": vm.me,
+ };
+
+ vfcService.add(postData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.status);
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ });
+ };
+
+ var getVendors = function() {
+ $rootScope.ice.loader.show = true;
+ vfcService.getCompanies()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.companies = response.data;
+ if(vm.companies.length === 0 ){
+ console.warn("No vendors pulled, request was successfull")
+ }
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.html b/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.html
new file mode 100755
index 00000000..7ac2097f
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.html
@@ -0,0 +1,100 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+
+<div class="modal-header">
+ <h3 class="modal-title" id="modal-title">Add Virtual Function Components (VFCs)</h3>
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+</div>
+
+<div class = "modal-body">
+
+ <div class = "vfc-explain">Please use the from below to associate the various VFCs to the virtual function
+ and engagement. You can either choose a company or create a new company if it is not listed.</div>
+
+ <form name="addVfcForm" ng-submit="vm.submitForm()">
+
+
+ <div data-ng-repeat="vfc in vm.vfcs" class="row">
+ <!--<div class="flex-container data-row">-->
+ <ng-form name="vfcItemForm">
+ <div class="col-md-6">
+ <input type="text" name="name" placeholder="Name" class="form-control" ng-model="vfc.name" ng-trim="false" ng-pattern="/^[a-zA-Z0-9\&\ \-\_]*$/" maxlength="32" required>
+ </div>
+ <div class="col-md-6 ">
+ <input type="text" name="extRefID" placeholder="Ext. Ref ID" class="form-control" ng-model="vfc.external_ref_id" ng-pattern="/^[a-zA-Z0-9]*$/" maxlength="20" required><br>
+ </div>
+
+
+ <!-- Virtual Function Component's external ref id-->
+ <div class="col-md-6 flex-item">
+ <select ng-model="vfc.company" id="add-vfc-choose-company" class="form-control" required>
+ <option value>Please Select</option>
+ <option ng-repeat="company in vm.companies" value="{{company.name}}">
+ {{company.name}}
+ </option>
+ </select>
+ </div>
+ <div class="col-md-6 flex-item">
+ <input type="text" name="newCompany" placeholder="or create a new company" id="add-vfc-manually-enter-company" class="form-control" ng-model="vfc.company" maxlength="32" ng-trim="false" ng-pattern="/^[a-zA-Z0-9\&\ \-\_]*$/" required>
+ </div>
+ <div class="head flex-container">
+ <div id="add-vfc-remove-obj-from-list" class="vfc-remove-button" ng-if="vm.vfcs.length > 1" ng-click='vm.removeChoice($index)'>
+ <div class="remove-icon" ></div>
+ </div>
+ </div>
+
+ <div class="ice-form-error col-md-12" ng-show="(vfcItemForm.name.$error || vfcItemForm.vfc_extRefID.$error || vfcItemForm.newCompany.$error)">
+ <div ng-show="(vfcItemForm.name.$error.required && !vfcItemForm.name.$pristine) || (vfcItemForm.extRefID.$error.required && !(vfcItemForm.extRefID.$pristine)) || (vfcItemForm.newCompany.$error.required && !(vfcItemForm.newCompany.$pristine))">Please make sure to type a name and Ext. Ref ID for the VFC.</div>
+ <div ng-show="vfcItemForm.name.$error.maxlength || vfcItemForm.extRefID.$error.maxlength || vfcItemForm.newCompany.$error.maxlength"> Name / Ext. Ref ID / new company name is too long.</div>
+ <div ng-show="vfcItemForm.name.$error.pattern || vfcItemForm.extRefID.$error.pattern || vfcItemForm.newCompany.$error.pattern"> Name / Ext. Ref ID / new company name should not include any special chars such as: .,\%" </div>
+ </div>
+ </ng-form>
+ </div>
+
+ <div data-ng-disabled="!addVfcForm.$valid">
+ <a ng-if="!vm.isModal" id="add-vfc-modal" class="modal-add-vfc" ng-click='vm.addNewChoice()'>
+ <span class="add-icon"></span><span class="add-text">Add VFC</span>
+ </a>
+ </div>
+ <div class="modal-footer">
+ <button type="submit" id="add-vfc-save-button" class="btn btn-primary" data-ng-disabled="!addVfcForm.$valid">Add VFCs</button>
+ </div>
+
+ </form>
+</div>
diff --git a/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.less b/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.less
new file mode 100755
index 00000000..5ce9098d
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/detailed-view/vfc/detailed-view-vfc-modal.less
@@ -0,0 +1,68 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.vfc-remove-button {
+ width: 20px;
+ height: 40px;
+ float: right;
+ .a_16_m;
+ cursor: pointer;
+ margin: 14px 0 0 0;
+
+ .remove-icon {
+ .sprite;
+ .sprite.delete-circle;
+ cursor: pointer;
+ display: block;
+ }
+}
+
+.modal-add-vfc {
+ margin-top: 8px;
+ display: block;
+ .add-text {
+ .a_16_m;
+ vertical-align: top;
+ margin-left: 6px;
+ }
+ .add-icon {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/feedback/feedback.controller.js b/d2ice.att.io/app/main/modals/feedback/feedback.controller.js
new file mode 100755
index 00000000..acee617b
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/feedback/feedback.controller.js
@@ -0,0 +1,82 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('FeedbackModalController', ['$rootScope','$uibModalInstance', 'feedbackService',
+ 'action', 'toastService', '$log', FeedbackModalController]);
+
+ function FeedbackModalController($rootScope, $uibModalInstance, feedbackService, action, toastService, $log) {
+ var vm = this;
+
+ var init = function() {
+ vm.action = action;
+ vm.feedback_modal_description = '';
+ };
+
+ init();
+
+ vm.submitForm = function ()
+ {
+ var feedbackPostData = {"description":vm.feedback_modal_description};
+ if (action == 'add') {
+ feedbackService.add(feedbackPostData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.data);
+ toastService.setToast('Feedback was sent successfully.', 'success');
+ } else {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+ }
+ };
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/feedback/feedback.html b/d2ice.att.io/app/main/modals/feedback/feedback.html
new file mode 100755
index 00000000..88912c84
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/feedback/feedback.html
@@ -0,0 +1,57 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="modal-header">
+ <h3 class="modal-title">{{ 'Add' }} Feedback</h3>
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+</div>
+<div class="modal-body feedback-modal-body">
+ <span>Use the form below to {{'add' }} the current feedback.</span>
+ <form name="feedbackForm" ng-submit="vm.submitForm()" novalidate class="feedback-modal-form">
+ <textarea class="col-sm-12 col-xs-12 col-md-12 feedback-modal-description" name="description" required ng-model="vm.feedback_modal_description"></textarea>
+ <div class="ice-form-error" data-ng-show="feedbackForm.description.$error">
+ <span ng-show="feedbackForm.description.$error.required && !feedbackForm.description.$pristine">Description is a required field.</span>
+ </div>
+
+ <div class="modal-footer">
+ <button type="submit" id="add-feedback-save-button" class="btn btn-primary" data-ng-disabled="!feedbackForm.$valid">{{'Add'}} feedback</button>
+ </div>
+ </form>
+</div>
+
+
diff --git a/d2ice.att.io/app/main/modals/feedback/feedback.less b/d2ice.att.io/app/main/modals/feedback/feedback.less
new file mode 100755
index 00000000..5d7fd8b3
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/feedback/feedback.less
@@ -0,0 +1,44 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.feedback-modal-body {
+ .feedback-modal-description {
+ border-color: @main_color_q;
+ margin-bottom:15px;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.controller.js b/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.controller.js
new file mode 100755
index 00000000..98fb2c14
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.controller.js
@@ -0,0 +1,63 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('GeneralLogModalController', ['$uibModalInstance', 'modalDetails', GeneralLogModalController]);
+
+ function GeneralLogModalController($uibModalInstance, modalDetails) {
+
+ var vm = this;
+
+ var init = function() {
+ if(modalDetails) {
+ vm.headline = modalDetails.headline || 'General log modal';
+ vm.body = modalDetails.body || 'There is no body';
+ }
+ };
+
+ init();
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.html b/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.html
new file mode 100755
index 00000000..f87a8ac7
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.html
@@ -0,0 +1,45 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="general-log-containter">
+ <div class="modal-header row general-log-subtitle">
+ <span class="general-log-modal-title" id="general-log-modal-title-id">{{vm.headline}}</span>
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+ <pre class="modal-body row general-log-body" id="general-log-modal-body-id" ng-bind-html="vm.body"></pre>
+</div>
diff --git a/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.less b/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.less
new file mode 100755
index 00000000..e48ed525
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/general-log-modal/general-log-modal.less
@@ -0,0 +1,72 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+
+.general-log-containter {
+ height: inherit;
+ padding: 0 20px 30px;
+ word-wrap: break-word;
+
+ .general-log-subtitle {
+ padding-bottom: 10px;
+ }
+
+ .general-log-body {
+ height: inherit;
+ overflow:scroll;
+ padding: 0px 20px 0;
+ .m_18_r;
+ line-height: 20px;
+ }
+}
+
+.general-log-modal-title {
+ .a_26_m;
+ line-height: 26px;
+}
+
+.modal-general-log-modal {
+ width: 70%;
+ margin: 0px auto;
+ height: 100%;
+
+ .modal-content {
+ height: 100%;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.controller.js b/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.controller.js
new file mode 100755
index 00000000..f887a5ee
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.controller.js
@@ -0,0 +1,74 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('generalPromptModalController', ['$uibModalInstance','modalDetails',generalPromptModalController]);
+
+ function generalPromptModalController($uibModalInstance, modalDetails) {
+
+ var vm = this;
+ var init = function () {
+ if(modalDetails) {
+ vm.upper_headline = modalDetails.upper_headline;
+ vm.upper_headline_value = modalDetails.upper_headline_value;
+ vm.headline = modalDetails.headline || 'D2ICE';
+ vm.message = modalDetails.message || 'Are you sure?';
+ vm.closeCallback = modalDetails.closeCallback;
+ vm.approveText = modalDetails.approve || 'Approve';
+ vm.cancelText = modalDetails.cancel || 'Cancel';
+ vm.is_close_modal_button = modalDetails.is_close_modal_button;
+ vm.is_message = modalDetails.is_message;
+ }
+ };
+
+ vm.closeModal = function (bool) {
+ if(vm.closeCallback) {
+ vm.closeCallback(bool);
+ }
+
+ $uibModalInstance.close(bool);
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.html b/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.html
new file mode 100755
index 00000000..3bd31887
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.html
@@ -0,0 +1,52 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="modal-header">
+ <button ng-if=vm.is_close_modal_button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div ng-if=vm.upper_headline class="general-prompt-upper-dash">
+ <div id="general-prompt-upper-headline" class="general-prompt-upper-headline">{{vm.upper_headline}}<span ng-if=vm.upper_headline class="upper-headline-value">{{vm.upper_headline_value}}</span></div>
+ </div>
+ <div class="general-prompt-title"><span class="bold" id="general-prompt-title">{{vm.headline}}</span></div>
+</div>
+<div class="modal-body row general-prompt-body">
+ <div ng-if=vm.is_message class="general-prompt-text-details" ng-bind-html="vm.message"></div>
+ <div ng-if=!vm.is_message>&nbsp;</div>
+ <button id="general-prompt-approve-btn" type="submit" class="col-md-5 btn btn-gradient-success" ng-click="vm.closeModal(true)">{{vm.approveText}}</button>
+ <span class="col-md-2"></span>
+ <button id="general-prompt-cancel-btn" type="submit" class="col-md-5 btn btn-gradient-danger" ng-click="vm.closeModal(false)">{{vm.cancelText}}</button>
+</div>
diff --git a/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.less b/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.less
new file mode 100755
index 00000000..d367cdaa
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/general-prompt-modal/general-prompt-modal.less
@@ -0,0 +1,151 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.general-prompt-text-details {
+ .l_14_r;
+ padding: 3% 0% 3% 0%;
+}
+
+.general-prompt-upper-headline {
+ .l_14_m;
+}
+.general-prompt-upper-dash {
+ border-bottom: dashed 1px #5a5a5a;
+ margin-bottom: 15px;
+}
+.upper-headline-value{
+ .l_14_i;
+}
+
+.general-prompt-body{
+ margin: 0px;
+}
+
+.general-prompt-title {
+ .m_18_r;
+
+ .bold {
+ .a_18_m;
+ }
+
+}
+
+
+.btn-gradient-success {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #41A02C;
+ *background-color: #41A02C;
+ background-image: -moz-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#A2E652), to(#41A02C));
+ background-image: -webkit-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -o-linear-gradient(top, #A2E652, #41A02C);
+ background-image: linear-gradient(to bottom, #A2E652, #41A02C);
+ background-repeat: repeat-x;
+ border-color: #41A02C;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#A2E652', endColorstr='#41A02C', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.btn-sample:hover,
+.btn-sample:focus,
+.btn-sample:active,
+.btn-sample.active,
+.btn-sample.disabled,
+.btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #41A02C;
+ *background-color: #003bb3;
+}
+
+.btn-gradient-danger {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #AE0020;
+ *background-color: #AE0020;
+ background-image: -moz-linear-gradient(top, #F74658, #AE0020);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#F74658), to(#AE0020));
+ background-image: -webkit-linear-gradient(top, #F74658, #AE0020);
+ background-image: -o-linear-gradient(top, #F74658, #AE0020);
+ background-image: linear-gradient(to bottom, #F74658, #AE0020);
+ background-repeat: repeat-x;
+ border-color: #AE0020;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F74658', endColorstr='#AE0020', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.btn-sample:hover,
+.btn-sample:focus,
+.btn-sample:active,
+.btn-sample.active,
+.btn-sample.disabled,
+.btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #AE0020;
+ *background-color: #003bb3;
+}
+
+.btn-gradient-default {
+ font-weight: bold;
+ color: #B3B3B3;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #D0D0D0;
+ *background-color: #D0D0D0;
+ background-image: -moz-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#FCFCFC), to(#D0D0D0));
+ background-image: -webkit-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: -o-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: linear-gradient(to bottom, #FCFCFC, #D0D0D0);
+ background-repeat: repeat-x;
+ border-color: #D0D0D0;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FCFCFC', endColorstr='#D0D0D0', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.btn-sample:hover,
+.btn-sample:focus,
+.btn-sample:active,
+.btn-sample.active,
+.btn-sample.disabled,
+.btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #D0D0D0;
+ *background-color: #003bb3;
+}
diff --git a/d2ice.att.io/app/main/modals/next-steps/next-steps.controller.js b/d2ice.att.io/app/main/modals/next-steps/next-steps.controller.js
new file mode 100755
index 00000000..b90921ff
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/next-steps/next-steps.controller.js
@@ -0,0 +1,278 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('NextStepsModalController', ['$rootScope', '$uibModalInstance', 'stepsService', 'engagement_team',
+ 'title', 'associated_files', 'engagement_uuid', 'checklist', 'nextstep', 'toastService', '$log', NextStepsModalController]);
+
+ function NextStepsModalController($rootScope, $uibModalInstance, stepsService, engagement_team, title,
+ associated_files, engagement_uuid, checklist, nextstep, toastService, $log) {
+
+ var vm = this;
+ vm.nextSteps = [{assigneesUuids: '',description: '', files: '', duedate: ''}];
+
+ var init = function() {
+
+ vm.myDate = new Date();
+ vm.minDate = new Date(
+ vm.myDate.getFullYear(),
+ vm.myDate.getMonth(),
+ vm.myDate.getDate());
+ vm.maxDate = new Date(
+ vm.myDate.getFullYear() + 2,
+ vm.myDate.getMonth(),
+ vm.myDate.getDate());
+ vm.onlyWeekendsPredicate = function (date) {
+ var day = date.getDay();
+ return day === 0 || day === 6;
+ };
+
+ vm.wysiwyg_menu = [
+ ['bold', 'italic', 'strikethrough', 'underline'],
+ ['unordered-list', 'ordered-list', 'outdent', 'indent']
+ ];
+ vm.select_str = {File: 'Select All'};
+ vm.select_all_flag = false;
+ vm.associated_files = [];
+ vm.associated_files.push( vm.select_str);
+ vm.assigness = [];
+ vm.title = title;
+ if (checklist == undefined)
+ {
+ vm.checklist = {};
+ vm.checklist.uuid = undefined;
+ } else {
+ vm.checklist = checklist;
+ }
+
+ var unique_files = [];
+ angular.forEach(associated_files, function (value, key) {
+ if (unique_files.indexOf(value) == -1) {
+ unique_files.push(value);
+ vm.associated_files.push({File: value});
+ }
+ });
+ angular.forEach(engagement_team, function (value, key) {
+ vm.assigness.push({name: value.full_name, id: value.uuid});
+ });
+ vm.edit = false;
+
+ if (nextstep != undefined)
+ {
+ vm.edit = true;
+ var current = {};
+ current.description = nextstep.description;
+ current.files = [];
+ current.duedate = new Date(nextstep.due_date);
+ var unique_files = [];
+ angular.forEach(nextstep.files, function(val, key1) {
+ if (unique_files.indexOf(value) == -1) {
+ unique_files.push(value);
+ current.files.push({File: val});
+ }
+ });
+
+ current.assigneesUuids = [];
+ angular.forEach(nextstep.assignees, function(val, key1) {
+ current.assigneesUuids.push({name : val.full_name, id :val.uuid});
+
+ });
+ vm.nextSteps = [current];
+ }
+ };
+
+ init();
+
+ vm.get_chosen_files_num = function(ns){
+ if (ns.files.length == associated_files.length+1) {
+ return ns.files.length - 1;
+ }
+ return ns.files.length
+ }
+
+ vm.add_all_associated_files = function (ns , choose_option){
+ if (choose_option == true) {
+ ns.files = [];
+ ns.files.push({File: 'Select All'});
+ _.forEach(associated_files, function (value, key) {
+ ns.files.push({File: value});
+ });
+ }
+ else {
+ vm.select_all_flag = false;
+ ns.files = [];
+ }
+ return;
+ }
+
+ vm.pull_select_all_from_list = function(ns){
+ var shortened_files_list = [];
+ _.forEach(ns.files, function(item) {
+ if (!_.isEqual(item, vm.select_str)) {
+ shortened_files_list.push(item);
+ }
+ });
+ ns.files = shortened_files_list;
+ }
+
+ vm.verify_files_choice = function(ns){
+ _.forEach(ns.files, function(item) {
+ if (ns.files.length == associated_files.length && vm.select_all_flag) {
+ if (item === vm.select_str) {
+ vm.select_all_flag = false;
+ vm.pull_select_all_from_list(ns);
+ }
+ else {
+ vm.add_all_associated_files(ns, false)
+ }
+ }
+ else if (ns.files.length == associated_files.length && !vm.select_all_flag) {
+ ns.files.push({File: 'Select All'});
+ vm.select_all_flag = true;
+ }
+ else if (item === vm.select_str) {
+ vm.select_all_flag = true;
+ vm.add_all_associated_files(ns, true)
+ }
+ })
+ }
+
+ vm.addNewStep = function () {
+ var newItemNo = vm.nextSteps.length + 1;
+ vm.nextSteps.push({'id': newItemNo});
+ };
+
+ vm.removeStep = function (index) {
+ vm.nextSteps.splice(index,1);
+ };
+
+ vm.closeModal = function(){
+ $rootScope.ice.loader.show = false;
+ toastService.clearToast();
+ $uibModalInstance.close();
+ };
+
+ vm.submitForm = function () {
+
+ var jsonNextSteps = [];
+
+ var objDate;
+ var strDate;
+ angular.forEach(vm.nextSteps, function(value, key) {
+ var next_step = {};
+ next_step.files = [];
+ if (value.files.length > associated_files.length) {
+ vm.pull_select_all_from_list(value);
+ }
+ angular.forEach(value.files, function(val, key1) {
+ next_step.files.push(val.File);
+ });
+ next_step.assigneesUuids = [];
+ angular.forEach(value.assigneesUuids, function(val, key1) {
+ next_step.assigneesUuids.push(val.id);
+ });
+
+ // TODO exho correct format in one command
+ objDate = new Date(Date.parse((value.duedate) + moment().format("z")));
+ next_step.duedate = objDate.getFullYear() + "-" + addZero(objDate.getMonth()+1) + "-" + addZero(objDate.getDate());
+ next_step.description = value.description;
+ jsonNextSteps.push(next_step);
+ });
+ var checklist_uuid = vm.checklist.uuid;
+ var engUuid = engagement_uuid;
+ if (vm.edit){
+ stepsService.edit(engagement_uuid, nextstep.uuid,jsonNextSteps[0])
+ .then(function (response) {
+ if (response.status === 202) {
+ $uibModalInstance.close(response.data);
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error adding next step!', 'danger', {displayFor: 'modal'});
+ });
+ } else if (vm.checklist.uuid == undefined) {
+
+ stepsService.add(engagement_uuid, jsonNextSteps)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.data);
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error adding next step!', 'danger', {displayFor: 'modal'});
+ });
+ } else {
+ stepsService.createChecklistNextStep(checklist_uuid, engUuid, jsonNextSteps)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.status);
+ vm.closeModal();
+ }
+ else
+ {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger', {displayFor: 'modal'});
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ };
+
+ var addZero = function(x)
+ {
+ if (x<10)
+ {
+ return("0"+x);
+ } else
+ {
+ return(x);
+ }
+ }
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/next-steps/next-steps.html b/d2ice.att.io/app/main/modals/next-steps/next-steps.html
new file mode 100755
index 00000000..588247e8
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/next-steps/next-steps.html
@@ -0,0 +1,138 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<ice-toast is-modal="true"></ice-toast>
+<div class="modal-header next-steps">
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div class="data-row-wrapper col-md-12 checklist-name" >
+ <span class="font_header">
+ {{vm.checklist.uuid == undefined && 'Engagement' || 'Checklist' }}:
+ </span>
+ <span class="font_header_chk_name margin_btm">
+ {{vm.title}}
+ </span>
+ </div>
+</div>
+<div class="modal-body next-steps">
+ <form name="nextStepsForm" ng-submit="vm.submitForm()" novalidate class="checkList-form" style="position:relative">
+ <div class="data-row-wrapper addNextSteps">
+ <div class="row">
+ <div class="col-md-12">
+ <span class="font_header_add_next">
+ <h2>{{vm.edit ? 'Edit' : 'Add'}} Next Steps</h2>
+ </span>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12">
+ <span class="m_18_r">Use the form below to {{vm.edit ? 'edit next step' : 'add next steps'}}. You will need to specify assignees, which files it applies to and the due date.</span>
+ </div>
+ </div>
+ </div>
+ <div data-ng-repeat="nextStep in vm.nextSteps" ng-class="{lineColor: ($index % 2 != 0)}" class="data-row-wrapper repeaterNextStep">
+ <div class="form-group row posRelative">
+ <span class="remove-icon posAbsDelBtn" ng-if="vm.nextSteps.length > 1" ng-click='vm.removeStep($index)'></span>
+ <div class="col-md-12">
+ <wysiwyg textarea-id="description"
+ textarea-class="form-control"
+ textarea-name="description"
+ name="description"
+ textarea-height="160px"
+ ng-required="true"
+ ng-model="nextStep.description"
+ class="ice-wysiwyg"
+ enable-bootstrap-title="true"
+ textarea-menu="vm.wysiwyg_menu"
+ required>
+ </wysiwyg>
+ </div>
+ <div class="col-md-12 padTop4">
+ <multiselect
+ ng-model="nextStep.files"
+ options="c.File for c in vm.associated_files"
+ name="{{vm.associated_files}}"
+ data-multiple="true"
+ scroll-after-rows="5"
+ filter-after-rows="5"
+ ng-required='vm.checklist.uuid != undefined'
+ ms-selected="{{nextStep.files.length > 1 ? vm.get_chosen_files_num(nextStep) + ' files' : nextStep.files.length + ' file'}} selected"
+ class = "ms"
+ ms-header = "Select all associated files to this next step"
+ id="associated-files-list"
+ tabindex="-1"
+ change="vm.verify_files_choice(nextStep)"
+ >
+ </multiselect>
+ </div>
+ <div class="col-md-6 padTop10">
+ <multiselect
+ ng-model="nextStep.assigneesUuids"
+ options="c.name for c in vm.assigness"
+ data-multiple="true"
+ scroll-after-rows="5"
+ filter-after-rows="5"
+ ng-required='vm.checklist.uuid != undefined'
+ ms-header = "Select assignees"
+ ms-selected="{{nextStep.assigneesUuidss.length > 1 ? nextStep.assigneesUuidss.length + ' assignees' : nextStep.assigneesUuidss.length + ' assignee'}} selected"
+ id="select-assigness"
+ tabindex="-1">
+ </multiselect>
+ </div>
+ <div class="col-md-6 padTop10">
+ <div flex-gt-xs>
+ <md-datepicker ng-model-options="{timezone: 'gmt'}" md-min-date="vm.minDate" class="btn btn-default" ng-model="nextStep.duedate" md-placeholder="Add a Due Date" data-ng-required="true" ></md-datepicker>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="data-row-wrapper " ng-if="!vm.edit">
+ <div class="col-md-12 padLeft0">
+ <a class="add-button" ng-click='vm.addNewStep()'>
+ <span class="add-icon"></span>
+ <span class="add-text" >Add Another Next Step</span>
+ </a>
+ </div>
+ </div>
+ <div class="data-row-wrapper ">
+ <button type="submit" id="btn-submit" class="btn btn-primary" data-ng-disabled="!nextStepsForm.$valid">Submit Next Steps</button>
+ </div>
+ <div class="data-row-wrapper text-right font-deco" ng-click="vm.closeModal()">
+ Skip for now
+ </div>
+ </form>
+</div>
diff --git a/d2ice.att.io/app/main/modals/next-steps/next-steps.less b/d2ice.att.io/app/main/modals/next-steps/next-steps.less
new file mode 100755
index 00000000..faf3eb9e
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/next-steps/next-steps.less
@@ -0,0 +1,307 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.md-datepicker-calendar-pane {
+ z-index:30001;
+}
+md-datepicker.btn {
+ width:100%;
+ padding: 0px;
+ position: relative;
+
+ .md-button.md-icon-button.md-datepicker-button {
+ float:left;
+ min-height: 0px;
+ height: 32px;
+ z-index: 2;
+ width: 100%;
+ padding: 0px;
+ margin: 0px;
+ md-icon {
+ display:none;
+ }
+ }
+
+ .md-datepicker-input-container{
+
+ line-height: 28px;
+ border-bottom:none;
+ margin-left: 0px;
+ position: absolute;
+ left: 0px;
+ padding-left: 0px;
+ width: 100%
+ }
+
+ .md-datepicker-input {
+ width: 100%;
+ text-align: left;
+ line-height: 32px;
+ padding-left: 10px;
+ margin: 0px;
+ }
+ .md-datepicker-input::-webkit-input-placeholder {
+ color: #555;
+ }
+ .md-datepicker-triangle-button {
+ top: 7px;
+ }
+ .md-datepicker-triangle-button .md-datepicker-expand-triangle {
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid transparent;
+ border-bottom: 4px solid transparent;
+ }
+
+ .md-datepicker-triangle-button .md-datepicker-expand-triangle:before {
+ position: absolute;
+ top: -13px;
+ left: -3px;
+ display: inline-block;
+ border-left: 3.8px solid transparent;
+ border-right: 3.8px solid transparent;
+ border-top: 7px solid transparent;
+ border-bottom: 5.9px solid #555555;
+ content: '';
+ }
+
+ .md-datepicker-triangle-button .md-datepicker-expand-triangle:after {
+ position: absolute;
+ top: 1px;
+ left: -3px;
+ display: inline-block;
+ border-left: 3.8px solid transparent;
+ border-right: 3.8px solid transparent;
+ border-top: 5.9px solid #555555;
+ border-bottom: 7px solid transparent;
+ content: '';
+ }
+
+}
+
+.dropdown-menu li[data-ng-if="modelValue().length > 0"] {
+ display:none;
+}
+.next-steps
+{
+ md-datepicker .md-datepicker-input {
+ text-align: center;
+ }
+
+}
+
+.next-steps {
+
+ .checklist-name
+ {
+ padding-left:0px;
+ border-bottom:1px dashed;
+ }
+
+ .addNextSteps
+ {
+
+ margin-bottom:10px;margin-top:10px;
+ }
+
+ .repeaterNextStep
+ {
+
+ margin-bottom:10px;
+ padding-left:10px;
+ padding-right:10px;
+ padding-left:10px;
+ padding-top:10px;
+ padding-bottom:10px;
+ border:1px solid;
+ border-color:#CCCCCC;
+ }
+
+ .padTop4
+ {
+ padding-top:4px;
+ }
+
+ .padTop10
+ {
+ padding-top:10px;
+ }
+
+ .padLeft0
+ {
+ padding-left:0px;
+ }
+
+ .add-header
+ {
+ .a_16_m;
+ }
+
+ .ice-wysiwyg {
+ height: 200px;
+ .wysiwyg-menu > div {
+ background-color: #f1f1f1;
+ padding: 2px;
+ }
+ }
+
+ .font-deco {
+ text-decoration-line: underline;
+ text-decoration-style: dashed;
+ }
+
+ .text-right
+ {
+ text-align:right;
+ }
+
+ .font_header
+ {
+ margin_top:0px;
+ .m_18_m;
+ }
+
+ .font_header_add_next
+ {
+ .a_24_m;
+ }
+
+ .font_header_chk_name
+ {
+ .m_18_r;
+ }
+
+ .margin_btm
+ {
+ margin-bottom:12px;
+ }
+
+ .ms
+ {
+ background-color:yellow;
+ }
+
+ multiselect > .btn-group
+ {
+ width:100%;
+ }
+ multiselect > .btn-group > .btn
+ {
+ width:100%;
+ }
+ multiselect > .btn-group > .dropdown-menu
+ {
+ width:100%;
+ }
+
+ form > .lineColor
+ {
+ background-color:#F6F3F3;
+ }
+
+ .add-icon {
+ .sprite;
+ .sprite.add;
+ display: inline-block;
+ }
+
+ .add-button {
+ margin-top: 8px;
+ display: block;
+ .add-text {
+ .a_16_m;
+ vertical-align: top;
+ margin-left: 6px;
+ }
+ }
+
+ .remove-icon {
+ cursor: pointer;
+ vertical-align: text-top;
+ //.sprite;
+ //.sprite.delete;//-circle;
+ .actions-sprite;
+ .actions-sprite.delete_large;
+
+ display:block;
+ position:relative;
+ top:11px;
+ }
+
+ .posRelative
+ {
+ position:relative;
+ }
+
+ .posAbsDelBtn
+ {
+ position:absolute;
+ top:10px;
+ right:20px;
+ z-index:40000;
+ }
+
+ #btn-submit {
+ width: 100%;
+ }
+
+ .btn-primary {
+ border: 1px solid #8799A3;
+ border-radius: 6px;
+ background: #1E79B0; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(#1E79B0, #62ADD5); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(#1E79B0, #62ADD5); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(#1E79B0, #62ADD5); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(#1E79B0, #62ADD5); /* Standard syntax (must be last) */
+ }
+
+
+
+ .datepickerdemoBasicUsage {
+ /** Demo styles for mdCalendar. */ }
+ .datepickerdemoBasicUsage md-content {
+ padding-bottom: 200px; }
+ .datepickerdemoBasicUsage .validation-messages {
+ font-size: 12px;
+ color: #dd2c00;
+ margin-left: 15px; }
+
+
+
+
+}
diff --git a/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.controller.js b/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.controller.js
new file mode 100755
index 00000000..9b73e706
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.controller.js
@@ -0,0 +1,78 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('selectELModalController', ['$uibModalInstance', 'excludeUuids', 'selectedOption', 'usersService',
+ '_', '$log', selectELModalController]);
+
+ function selectELModalController($uibModalInstance, excludeUuids, selectedOption, usersService, _, $log) {
+ var vm = this;
+ vm.show_warning = false;
+ var init = function () {
+ usersService.getEngagementLeads()
+ .then(function(response) {
+ vm.engagementLeads = _.filter(response.data, function(el) {
+ return el.uuid;
+ });
+
+ vm.selectedUserUuid = _.find(vm.engagementLeads, ['uuid', selectedOption]);
+ })
+ .catch(function(error) {
+ $log.error(error);
+ vm.closeModal();
+ });
+ };
+
+ vm.closeModal = function () {
+ $uibModalInstance.dismiss();
+ };
+
+ vm.onUserSelect = function() {
+ if(vm.selectedUserUuid) {
+ $uibModalInstance.close(vm.selectedUserUuid);
+ }
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.html b/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.html
new file mode 100755
index 00000000..fa285a6d
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.html
@@ -0,0 +1,56 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="select-engagement-lead-modal">
+ <div class="modal-header row">
+ <button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div id="archive-engagement-title" class="select-engagement-lead-title"><span>Select Engagement Lead</span></div>
+ <span class="select-engagement-lead-description">Please select engagement lead from the list below.</span>
+ </div>
+ <div class="modal-body row">
+ <div class="form-group">
+ <select style="width:100%" name="selected-user" ng-model="vm.selectedUserUuid" ng-change="vm.onUserSelect()"
+ ng-options="el.uuid as el.full_name for el in vm.engagementLeads track by el.uuid" class="form-control">
+ </select>
+ </div>
+ <div class="modal-body">
+ Engagement lead cannot be both reviewer and peer reviewer.<br>
+ If you assign the same user to two roles, we will automatically switch the other users' role.
+ </div>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.less b/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.less
new file mode 100755
index 00000000..6371cf7e
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/select-el-modal/select-el-modal.less
@@ -0,0 +1,54 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.select-engagement-lead-modal {
+ padding: 0px 15px 0px 15px;
+
+ .select-engagement-lead-title {
+ .a_24_m;;
+ }
+
+ .select-engagement-lead-description {
+ .m_16_r;
+ }
+
+ .modal-body {
+ top: 10px;
+ }
+}
+
diff --git a/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.controller.js b/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.controller.js
new file mode 100755
index 00000000..3824870d
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.controller.js
@@ -0,0 +1,63 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('setEngStageModalController', ['$rootScope','$uibModalInstance','stage','eng_name','current_stage', setEngStageModalController]);
+
+ function setEngStageModalController($rootScope, $uibModalInstance,stage, eng_name, current_stage) {
+
+ var vm = this;
+ var init = function () {
+ vm.stage = stage;
+ vm.current_stage = current_stage;
+ vm.modalText = "Are you sure you want to set the Engagement's stage to "+vm.stage+"?";
+ vm.eng_name = eng_name;
+ }
+
+ vm.closeModal = function (bool) {
+ $uibModalInstance.close(bool);
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.html b/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.html
new file mode 100755
index 00000000..362eb93b
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.html
@@ -0,0 +1,49 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="modal-header row">
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div class="set-stage-title"><span class="bold">Engagement:</span> {{vm.eng_name}}</div>
+</div>
+<div class="modal-body row">
+ <span class="set-stage-title"><span class="bold">Current stage:</span> {{vm.current_stage.replace('_',' ') | capitalize}}</span>
+ <div class="set-stage-modal-text-details" id="modal-message-{{vm.stage}}" ng-bind-html="vm.modalText"></div>
+ <button type="submit" class="col-md-5 btn btn-gradient-success" ng-click="vm.closeModal(true)">Approve</button>
+ <span class="col-md-2"></span>
+ <button type="submit" class="col-md-5 btn btn-gradient-danger" ng-click="vm.closeModal(false)">Cancel</button>
+</div>
diff --git a/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.less b/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.less
new file mode 100755
index 00000000..af7d5ba1
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/set-eng-stage/set-eng-stage-modal.less
@@ -0,0 +1,135 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.set-stage-modal-text-details {
+ .m_18_r;
+ padding: 3% 0% 3% 0%;
+}
+
+.set-stage-title {
+ .m_18_r;
+
+ .bold {
+ .a_18_m;
+ }
+
+}
+
+.btn-gradient-success {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #41A02C;
+ *background-color: #41A02C;
+ background-image: -moz-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#A2E652), to(#41A02C));
+ background-image: -webkit-linear-gradient(top, #A2E652, #41A02C);
+ background-image: -o-linear-gradient(top, #A2E652, #41A02C);
+ background-image: linear-gradient(to bottom, #A2E652, #41A02C);
+ background-repeat: repeat-x;
+ border-color: #41A02C;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#A2E652', endColorstr='#41A02C', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.btn-sample:hover,
+.btn-sample:focus,
+.btn-sample:active,
+.btn-sample.active,
+.btn-sample.disabled,
+.btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #41A02C;
+ *background-color: #003bb3;
+}
+
+.btn-gradient-danger {
+ font-weight: bold;
+ color: #FFFFFF;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #AE0020;
+ *background-color: #AE0020;
+ background-image: -moz-linear-gradient(top, #F74658, #AE0020);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#F74658), to(#AE0020));
+ background-image: -webkit-linear-gradient(top, #F74658, #AE0020);
+ background-image: -o-linear-gradient(top, #F74658, #AE0020);
+ background-image: linear-gradient(to bottom, #F74658, #AE0020);
+ background-repeat: repeat-x;
+ border-color: #AE0020;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F74658', endColorstr='#AE0020', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.btn-sample:hover,
+.btn-sample:focus,
+.btn-sample:active,
+.btn-sample.active,
+.btn-sample.disabled,
+.btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #AE0020;
+ *background-color: #003bb3;
+}
+
+.btn-gradient-default {
+ font-weight: bold;
+ color: #B3B3B3;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #D0D0D0;
+ *background-color: #D0D0D0;
+ background-image: -moz-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#FCFCFC), to(#D0D0D0));
+ background-image: -webkit-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: -o-linear-gradient(top, #FCFCFC, #D0D0D0);
+ background-image: linear-gradient(to bottom, #FCFCFC, #D0D0D0);
+ background-repeat: repeat-x;
+ border-color: #D0D0D0;
+ border-color: #888;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FCFCFC', endColorstr='#D0D0D0', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.btn-sample:hover,
+.btn-sample:focus,
+.btn-sample:active,
+.btn-sample.active,
+.btn-sample.disabled,
+.btn-sample[disabled] {
+ color: #FFFFFF;
+ background-color: #D0D0D0;
+ *background-color: #003bb3;
+}
diff --git a/d2ice.att.io/app/main/modals/set-eng-stage/set_eng_stage_modal.html b/d2ice.att.io/app/main/modals/set-eng-stage/set_eng_stage_modal.html
new file mode 100755
index 00000000..adf81be3
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/set-eng-stage/set_eng_stage_modal.html
@@ -0,0 +1,58 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+
+<form name="approveOrRejectStage" id="approve-or-reject-stage" novalidate>
+ <div class="row modal-header ">
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <span class="state-title bold"><span class="bold">Engagement:</span> {{vm.engagement_name}}</span>
+ <div class="state-title-border"></div>
+ </div>
+
+
+ <div class = "row decision-modal-body">
+ <div class = "modal-title">Current stage: {{vm.stage.replace('_',' ') | capitalize}}</div>
+ <div class = "decision-comment" id="stage-{{vm.stage}}"><div ng-bind-html="vm.modalText"></div></div>
+ </div>
+ <div class = "row modal_buttons">
+ <button type="submit" class="col-md-5 btn btn-gradient-success" ng-click="vm.closeModal(true)">Approve</button>
+ <span class="col-md-2"></span>
+ <button type="submit" class="col-md-5 btn btn-gradient-danger" ng-click="vm.closeModal(false)">Reject</button>
+ </div>
+
+</form>
diff --git a/d2ice.att.io/app/main/modals/status/status.controller.js b/d2ice.att.io/app/main/modals/status/status.controller.js
new file mode 100755
index 00000000..9a90ec52
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/status/status.controller.js
@@ -0,0 +1,125 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('StatusModalController', ['$rootScope', '$uibModalInstance', 'statusService', 'engagement_uuid',
+ 'action', 'toastService', '$log', StatusModalController]);
+
+ function StatusModalController($rootScope, $uibModalInstance, statusService, engagement_uuid, action, toastService, $log) {
+ var vm = this;
+
+ var init = function() {
+ vm.engagement_uuid = engagement_uuid;
+ vm.action = action;
+ if (action == 'edit') {
+ statusService.get(engagement_uuid)
+ .then(function (response) {
+ if (response.status === 200)
+ {
+ vm.status = response.data;
+ vm.status_modal_description = vm.status.description;
+ vm.eng_status_uuid = vm.status.uuid;
+ } else
+ {
+ $log.error(response);
+ }
+ })
+ .catch(function (error) {
+ vm.status = false;
+ $log.error(error.message);
+ });
+ } else {
+ vm.status_modal_description = '';
+ }
+ };
+
+ init();
+
+ vm.submitForm = function ()
+ {
+ var jsonPost = {"description":vm.status_modal_description};
+ if (action == 'edit') {
+ jsonPost.eng_status_uuid = vm.eng_status_uuid;
+ statusService.update(vm.engagement_uuid, jsonPost)
+ .then(function (response) {
+ if (response.status === 200)
+ {
+ $uibModalInstance.close(response.data);
+ vm.closeModal();
+ }
+ else
+ {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+ } else {
+ statusService.add(vm.engagement_uuid, jsonPost)
+ .then(function (response) {
+ if (response.status === 200)
+ {
+
+ $uibModalInstance.close(response.data);
+ vm.closeModal();
+ }
+ else
+ {
+ toastService.setToast(response.error, 'danger');
+ $rootScope.ice.loader.show = false;
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.message, 'danger');
+ $log.error(error.message);
+ });
+ }
+ };
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/status/status.html b/d2ice.att.io/app/main/modals/status/status.html
new file mode 100755
index 00000000..83c50d2b
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/status/status.html
@@ -0,0 +1,59 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="modal-header">
+ <h3 class="modal-title" id="modal-title">{{vm.action == 'edit' && 'Current' || 'Add' }} Status</h3>
+ <button type="button" ng-click="vm.closeModal()" id="close-modal-button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+</div>
+<div class="modal-body status-modal-body">
+ <span>Use the form below to {{vm.action == 'edit' && 'update' || 'add' }} the current status of the engagement.</span>
+ <form name="statusForm" ng-submit="vm.submitForm()" novalidate class="status-modal-form">
+ <textarea class="col-sm-12 col-xs-12 col-md-12 status-modal-description" name="description" ng-maxlength="256" required ng-model="vm.status_modal_description" ng-pattern="/^[a-zA-Z0-9\&\,\.\ ]*$/"></textarea>
+ <div class="ice-form-error" data-ng-show="statusForm.description.$error">
+ <span ng-show="statusForm.description.$error.required && !statusForm.description.$pristine">Description is a required field.</span>
+ <span ng-show="statusForm.description.$error.maxlength">Description is too long.</span>
+ <span ng-show="statusForm.description.$error.pattern">Description should not include any special chars such as: *^-\%_"</span>
+ </div>
+
+ <div class="modal-footer">
+ <button type="submit" id="add-vfc-save-button" class="btn btn-primary" data-ng-disabled="!statusForm.$valid">{{vm.action == 'edit' && 'Update current' || 'Add' }} status</button>
+ </div>
+ </form>
+</div>
+
+
diff --git a/d2ice.att.io/app/main/modals/status/status.less b/d2ice.att.io/app/main/modals/status/status.less
new file mode 100755
index 00000000..ae5f7945
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/status/status.less
@@ -0,0 +1,44 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.status-modal-body {
+ .status-modal-description {
+ border-color: @main_color_q;
+ margin-bottom:15px;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.controller.js b/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.controller.js
new file mode 100755
index 00000000..a300d3da
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.controller.js
@@ -0,0 +1,78 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('ChangeLabEntryDateModalController', ["$uibModalInstance", "targetLabDate", "engagementUuid", "vfService", "$rootScope", "toastService", changeLabEntryDateModalController]);
+
+ function changeLabEntryDateModalController($uibModalInstance, targetLabDate, engagementUuid, vfService, $rootScope, toastService) {
+
+ var vm = this;
+ //vm.completionDate = new Date(completionDate);
+ vm.targetLabDate = targetLabDate;
+ vm.dateOptions = {
+ minDate: new Date(),
+ showWeeks: true
+ };
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+
+ vm.myDate = new Date();
+ vm.minDate = moment(vm.myDate).format("YYYY-MM-DD")
+ vm.maxDate = moment(vm.myDate).add(2, 'years').format("YYYY-MM-DD");
+
+ vm.submitForm = function(){
+ var postData={"target_date": moment(vm.targetLabDate).format("YYYY-MM-DD")};
+ vfService.updateLabEntryDaysLeft(engagementUuid, postData)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(postData);
+ }
+ })
+ .catch(function (error) {
+ toastService.setToast(error.status + ': Error changing completion date!', 'danger');
+ });
+ };
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.html b/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.html
new file mode 100755
index 00000000..cfd30f79
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.html
@@ -0,0 +1,55 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<form name="updateTargetLabDate" ng-submit="vm.submitForm()" novalidate class="update-target-lab-form">
+ <div class="modal-header">
+ <h3 class="modal-title" id="modal-title">Target Lab Entry</h3>
+ <button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+ <div class="modal-body">
+ <div class="form-group" ng-class="{ 'has-error' : updateTargetLabDate.date.$invalid && !updateTargetLabDate.date.$pristine }">
+ <md-datepicker id="lab-entry-date" md-min-date="vm.minDate" ng-click="ctrl.openCalendarPane($event)" ng-model-options="{timezone: 'gmt'}" class="btn btn-default datepicker_btn edit-target-lab-date-modal" ng-model="vm.targetLabDate" md-placeholder="Choose Lab Entry Date"></md-datepicker>
+ <input type="hidden" id="input-lab-entry-date" value="{{vm.targetLabDate }}"/>
+ <span ng-show="updateTargetLabDate.date.$error.required && !updateTargetLabDate.date.$pristine">Date is required field!</span>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="submit" class="btn btn-primary" data-ng-disabled="!updateTargetLabDate.$valid">Save</button>
+ </div>
+</form>
diff --git a/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.less b/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.less
new file mode 100755
index 00000000..8aa6f3be
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/target-lab-entry/change-lab-entry-date.less
@@ -0,0 +1,49 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ .edit-target-lab-date-modal {
+ .md-datepicker-input-container {
+ .md-datepicker-input {
+ width: 100%;
+ text-align: left;
+ line-height: 32px;
+ padding-left: 95px;
+ margin: 0px;
+ }
+ }
+ } \ No newline at end of file
diff --git a/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.controller.js b/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.controller.js
new file mode 100755
index 00000000..f9afa320
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.controller.js
@@ -0,0 +1,73 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+(function () {
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('updateEngagementStatusModalController', ['$uibModalInstance', 'engagement', updateEngagementStatusModalController]);
+
+ function updateEngagementStatusModalController($uibModalInstance, engagement) {
+ var vm = this;
+ var init = function () {
+ vm.engagement = engagement;
+ formatDates();
+ };
+
+ vm.closeModal = function () {
+ $uibModalInstance.dismiss();
+ };
+
+ vm.updateEngagement = function() {
+ formatDates();
+ $uibModalInstance.close({"engagement": vm.engagement, "status": vm.status});
+ };
+
+ var formatDates = function() {
+ if(vm.engagement.target_completion_date){ vm.engagement.target_completion_date = new Date(vm.engagement.target_completion_date); }
+ if(vm.engagement.heat_validated_time){ vm.engagement.heat_validated_time = new Date(vm.engagement.heat_validated_time); }
+ if(vm.engagement.image_scan_time){ vm.engagement.image_scan_time = new Date(vm.engagement.image_scan_time); }
+ if(vm.engagement.aic_instantiation_time){ vm.engagement.aic_instantiation_time = new Date(vm.engagement.aic_instantiation_time); }
+ if(vm.engagement.asdc_onboarding_time){ vm.engagement.asdc_onboarding_time = new Date(vm.engagement.asdc_onboarding_time); }
+ };
+
+ init();
+ }
+})();
diff --git a/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.html b/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.html
new file mode 100755
index 00000000..29abb24e
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.html
@@ -0,0 +1,97 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="update-engagement-status-modal">
+ <div class="modal-header row">
+ <button type="button" ng-click="vm.closeModal()" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <div id="update-engagement-status-title" class="update-engagement-status-title"><span>Update Status</span></div>
+ <span class="update-engagement-status-description">Use the form below to update status details of the engagement.</span>
+ </div>
+ <div class="modal-body row">
+ <form name="updateEngagementStatusForm" ng-submit="vm.updateEngagement()" novalidate="" class="">
+ <div class="form-group" ng-class="{ 'has-error' : updateEngagementStatusForm.progress.$invalid && updateEngagementStatusForm.progress.$dirty }">
+ <span class="form-field-title">Progress in %</span>
+ <input type="number" name="progress" class="form-control" ng-model="vm.engagement.progress" required="" min="0" max="100"/>
+ <div class="ice-form-error" data-ng-show="updateEngagementStatusForm.progress.$error">
+ <span ng-show="updateEngagementStatusForm.progress.$error.required && updateEngagementStatusForm.progress.$dirty" class="help-block ng-hide" aria-hidden="true">Please enter progress</span>
+ </div>
+ </div>
+ <div class="form-group" ng-class="{ 'has-error' : updateEngagementStatusForm.targetCompletion.$invalid && updateEngagementStatusForm.targetCompletion.$dirty }">
+ <span class="form-field-title">Target Completion Date</span>
+ <md-datepicker ng-click="ctrl.openCalendarPane($event)" class="btn btn-default" ng-model="vm.engagement.target_completion_date"></md-datepicker>
+ <input type="hidden" name="targetCompletion" class="form-control" ng-model="vm.engagement.target_completion_date" required=""/>
+ <div class="ice-form-error" data-ng-show="updateEngagementStatusForm.targetCompletion.$error">
+ <span ng-show="updateEngagementStatusForm.targetCompletion.$error.date && updateEngagementStatusForm.targetCompletion.$dirty" class="help-block ng-hide" aria-hidden="true">Please enter target completion date</span>
+ </div>
+ </div>
+ <div class="panel panel-default">
+ <div class="panel-heading">Validation Criteria</div>
+ <div class="panel-body">
+ <div class="form-group">
+ <span class="form-field-title">HEAT Validated</span>
+ <md-datepicker ng-click="ctrl.openCalendarPane($event)" class="btn btn-default" ng-model="vm.engagement.heat_validated_time"></md-datepicker>
+ <input type="hidden" name="heatValidated" class="form-control" ng-model="vm.engagement.heat_validated_time"/>
+ </div>
+ <div class="form-group">
+ <span class="form-field-title">Image Scan</span>
+ <md-datepicker ng-click="ctrl.openCalendarPane($event)" class="btn btn-default" ng-model="vm.engagement.image_scan_time"></md-datepicker>
+ <input type="hidden" name="imageScan" class="form-control" ng-model="vm.engagement.image_scan_time"/>
+ </div>
+ <div class="form-group">
+ <span class="form-field-title">AIC Instantiation</span>
+ <md-datepicker ng-click="ctrl.openCalendarPane($event)" class="btn btn-default" ng-model="vm.engagement.aic_instantiation_time"></md-datepicker>
+ <input type="hidden" name="aicInstantiation" class="form-control" ng-model="vm.engagement.aic_instantiation_time"/>
+ </div>
+ <div class="form-group">
+ <span class="form-field-title">ASDC Onboarding</span>
+ <md-datepicker ng-click="ctrl.openCalendarPane($event)" class="btn btn-default" ng-model="vm.engagement.asdc_onboarding_time"></md-datepicker>
+ <input type="hidden" name="asdcOnboarding" class="form-control" ng-model="vm.engagement.asdc_onboarding_time"/>
+ </div>
+ </div>
+ </div>
+ <div class="form-group" ng-class="{ 'has-error' : updateEngagementStatusForm.status.$invalid && updateEngagementStatusForm.status.$dirty }">
+ <span class="form-field-title">Status</span>
+ <textarea type="text" name="status" class="form-control" ng-model="vm.status" required=""></textarea>
+ <div class="ice-form-error" data-ng-show="updateEngagementStatusForm.status.$error">
+ <span ng-show="updateEngagementStatusForm.status.$error.required && updateEngagementStatusForm.status.$dirty" class="help-block ng-hide" aria-hidden="true">Please enter status</span>
+ </div>
+ </div>
+ <button class="btn btn-primary col-md-12" data-ng-disabled="updateEngagementStatusForm.$invalid" type="submit">Submit</button>
+ </form>
+ </div>
+</div>
diff --git a/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.less b/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.less
new file mode 100755
index 00000000..8bce9da3
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/update-engagement-status-modal/update-engagement-status-modal.less
@@ -0,0 +1,61 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+.update-engagement-status-modal {
+ padding: 0px 15px 0px 15px;
+
+ .update-engagement-status-title {
+ .a_24_m;;
+ }
+
+ .update-engagement-status-description {
+ .m_16_r;
+ }
+
+ .form-field-title{
+ .m_16_r;
+ }
+
+ .modal-body {
+ top: 10px;
+ }
+
+ .md-datepicker-input {
+ max-width: none;
+ }
+}
diff --git a/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.controller.js b/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.controller.js
new file mode 100755
index 00000000..1370e367
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.controller.js
@@ -0,0 +1,202 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+(function () {
+
+
+ 'use strict';
+
+ angular
+ .module('ice.modals')
+ .controller('validationDetailsModalController', ["$rootScope", "$uibModalInstance", "vfcService", "vfService", "$stateParams", "toastService", "vf_uuid", "usersService", "$log", "_", validationDetailsModalController]);
+
+ function validationDetailsModalController($rootScope, $uibModalInstance, vfcService,vfService, $stateParams,toastService, vf_uuid, usersService,$log,_) {
+
+ var vm = this;
+ var init = function () {
+ if($stateParams.engagement) {
+ vm.engagement = $stateParams.engagement;
+ }
+ vm.me = usersService.getUserData();
+ vfService.getSingleEngagement(vm.me.uuid,vm.engagement.uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+
+ if (response.status === 200 && response.data && response.data !== '') {
+ var vf_data = response.data;
+ vm.engagement_manual_id = vf_data.engagement.engagement_manual_id;
+ vm.vf_name = vf_data.name;
+ vm.vf_uuid = vf_data.uuid;
+ vm.ecomp_release = vf_data.ecomp_release;
+ vm.target_lab = new Date(vf_data.target_lab_entry_date);
+ vm.dtversion = vf_data.deployment_target;
+ vm.selected_dt_uuid = vm.dtversion.uuid;
+ vm.selected_ecomp_uuid = vm.ecomp_release.uuid;
+ vm.me = usersService.getUserData();
+ vm.name = vm.engagement.name;
+ vm.isEngagementEL = usersService.isEngagementEL(vf_data.engagement.engagement_team);
+ vm.isAdmin = usersService.isAdmin(vm.me);
+ vm.choices = [{TargetLab: '', TargetAic: ''}];
+ getDeployTargets();
+ getECOMPReleases();
+ getVFVersion();
+ }
+ })
+ .catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ };
+
+ vm.closeModal = function(){
+ $uibModalInstance.close();
+ };
+
+ vm.addNewChoice = function () {
+ var newItemNo = vm.choices.length + 1;
+ vm.choices.push({'id': newItemNo});
+ };
+
+ function getDeployTargets() {
+ vfService.getDeployTargets()
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.deployTargets = response.data;
+ if (_.filter(vm.deployTargets, {'uuid': vm.dtversion.uuid}).length === 0) {
+ vm.dtversion.disabled = true;
+ vm.deployTargets.push(vm.dtversion);
+ }
+ }
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ function getECOMPReleases(){
+ vfService.getECOMPReleases()
+ .then(function (response) {
+ if (response.status === 200) {
+ vm.ECOMPReleases = response.data;
+ if (_.filter(vm.ECOMPReleases, {'uuid':vm.ecomp_release.uuid}).length === 0) {
+ vm.ecomp_release.disabled = true;
+ vm.ECOMPReleases.push(vm.ecomp_release);
+ }
+ }
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ }
+ function getVFVersion(){
+ vfService.getVFVersion(vf_uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ if (response.status === 200) {
+ vm.VFVersion = response.data;
+ }
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.debug(error);
+ });
+ }
+ vm.removeChoice = function (index) {
+ vm.choices.splice(index,1);
+ };
+
+ vm.submitForm = function(){
+ var validationDetailsSelection = {
+ "vf_uuid": vm.vf_uuid,
+ "version": vm.VFVersion,
+ "target_aic_uuid": vm.TargetAic,
+ "ecomp_release": vm.ECOMPRelease
+ };
+
+ vfService.updateVfs(validationDetailsSelection,vm.vf_uuid)
+ .then(function (response) {
+ if (response.status === 200) {
+ $uibModalInstance.close(response.status);
+ }
+ })
+ .catch(function (error) {
+ $log.error(error);
+ toastService.setToast(error.status + ': Error changing progress!', 'danger');
+ });
+ };
+
+ vm.update_deployment_target = function(){
+ if(vm.dtversion.uuid == vm.selected_dt_uuid){
+ return
+ }
+ angular.forEach(vm.dt_AIC_versions, function (value, key) {
+ if (value.uuid === vm.selected_dt_uuid) {
+ vm.dtversion = value;
+ };
+ });
+ vfService.updateDeployTargets(vm.engagement.uuid, vm.selected_dt_uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ vm.set_edit_mode('aic');
+ };
+ vm.update_ECOMP_release = function(){
+ if( vm.ecomp_release.uuid == vm.selected_ecomp_uuid){
+ return;
+ }
+ _.each(vm.ECOMPReleases, function (value, key) {
+ if (value.uuid === vm.selected_ecomp_uuid) {
+ vm.ecomp_release = value;
+ };
+ });
+ vfService.updateECOMPReleases(vm.engagement.uuid, vm.selected_ecomp_uuid)
+ .then(function (response) {
+ $rootScope.ice.loader.show = false;
+ }).catch(function (error) {
+ $rootScope.ice.loader.show = false;
+ $log.error(error);
+ });
+ vm.set_edit_mode('ecomp');
+ };
+
+ init();
+ }
+
+})();
diff --git a/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.html b/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.html
new file mode 100755
index 00000000..48e3fe2a
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.html
@@ -0,0 +1,101 @@
+<!--
+============LICENSE_START==========================================
+org.onap.vvp/portal
+===================================================================
+Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the “License”);
+you may not use this software except in compliance with the License.
+You may obtain a copy of the License at
+
+ http:www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+Unless otherwise specified, all documentation contained herein is licensed
+under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+you may not use this documentation except in compliance with the License.
+You may obtain a copy of the License at
+
+ https:creativecommons.org/licenses/by/4.0/
+
+Unless required by applicable law or agreed to in writing, documentation
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+============LICENSE_END============================================
+
+ECOMP is a trademark and service mark of AT&T Intellectual Property.-->
+<div class="modal-header">
+ <h3 class="modal-title" id="modal-title">Validation Details (ECOMP, AIC, VF Version)</h3>
+ <button type="button" ng-click="vm.closeModal()"
+ id="close-modal-button" class="close" data-dismiss="modal"
+ aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+</div>
+<div class="modal-body">
+
+ <form name="ValidationDetailsForm" id="validation-details-form" ng-submit="vm.submitForm()">
+
+ <ng-form name="vfcItemForm">
+ <div class="row">
+ <div class="col-md-12 field-title" id="vf-version">VF Version</div>
+ <div class="col-md-12">
+ <input type="text" name="VFversion" id="id-vf-version"
+ ng-model="vm.VFVersion" maxlength="32"
+ class="form-control" >
+ </div>
+ <div class="ice-form-error"
+ data-ng-show="vfItemForm.VFVersion.$error">
+ <span ng-show="vfItemForm.VFVersion.$error.pattern">VF
+ Version can be alphanumeric or/and Hyphen</span>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12 field-title" id="target-aic-version-headline">Target AIC Version</div>
+ <div class="col-md-12">
+ <select id="aic-version-select" ng-model="vm.TargetAic"
+ class="form-control">
+ <option value="" selected disabled>AIC Version</option>
+ <option meta-order="{{$index}}"
+ ng-repeat="dt in vm.deployTargets"
+ id="aic_select_options_{{dt.version}}" value="{{dt.uuid}}"
+ ng-disabled="dt.disabled">{{dt.name}} {{dt.version}}
+ {{dt.disabled ? "- Deprecated" : ""}}</option>
+ </select>
+ </div>
+ </div>
+ <div class="row">
+ <div class="field-title col-md-12">ECOMP Release</div>
+ <div class="col-md-12">
+ <select id="ecomp-release-select" ng-model="vm.ECOMPRelease"
+ class="form-control">
+ <option value="" selected disabled>ECOMP Release</option>
+ <option meta-order="{{$index}}"
+ ng-repeat="dt in vm.ECOMPReleases"
+ id="ecomp-select-options-{{dt.name}}" value="{{dt.uuid}}"
+ ng-disabled="dt.disabled">{{dt.name}} {{dt.disabled ?
+ "- Deprecated" : ""}}</option>
+ </select>
+ </div>
+ </div>
+ </ng-form>
+ <div class="modal-footer">
+ <button type="submit" id="edit-validation-setails-save-button"
+ class="btn btn-primary" data-ng-disabled="!ValidationDetailsForm.$valid">Save
+ Validation Details</button>
+ </div>
+
+ </form>
+</div>
diff --git a/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.less b/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.less
new file mode 100755
index 00000000..08fd5ea8
--- /dev/null
+++ b/d2ice.att.io/app/main/modals/validation-details/detailed-view-validation-details-modal.less
@@ -0,0 +1,49 @@
+//
+// ============LICENSE_START==========================================
+// org.onap.vvp/portal
+// ===================================================================
+// Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+// ===================================================================
+//
+// Unless otherwise specified, all software contained herein is licensed
+// under the Apache License, Version 2.0 (the “License”);
+// you may not use this software except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//
+//
+// Unless otherwise specified, all documentation contained herein is licensed
+// under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+// you may not use this documentation except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https:creativecommons.org/licenses/by/4.0/
+//
+// Unless required by applicable law or agreed to in writing, documentation
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// ============LICENSE_END============================================
+//
+// ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#validation-details-form {
+ #edit-validation-setails-save-button {
+ margin-top: 15px;
+ }
+
+ .field-title {
+ .m_16_m;
+ margin-bottom: 2px;
+ margin-top: 5px;
+ }
+}