refstack/refstack-ui/app/components/vendors/vendorController.js
Paul Van Eck 3c82bc3443 Add vendor UI
This adds the initial UI functionality for the UI in relations
to vendors.

Change-Id: I58a3b00a421d2d65d59014e586bacc974aa8637b
Co-Authored-By: Andrey Pavlov <andrey-mp@yandex.ru>
2016-06-13 15:08:05 -07:00

186 lines
6.8 KiB
JavaScript

/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file 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.
*/
(function () {
'use strict';
angular
.module('refstackApp')
.controller('VendorController', VendorController);
VendorController.$inject = [
'$rootScope', '$scope', '$http', '$state', '$stateParams', '$window',
'refstackApiUrl', 'raiseAlert', 'confirmModal'
];
/**
* RefStack Vendor Controller
* This controller is for the '/vendor/' details page where owner can
* view details of the Vendor and manage users.
*/
function VendorController($rootScope, $scope, $http, $state, $stateParams,
$window, refstackApiUrl, raiseAlert, confirmModal) {
var ctrl = this;
ctrl.getVendor = getVendor;
ctrl.getVendorUsers = getVendorUsers;
ctrl.registerVendor = registerVendor;
ctrl.approveVendor = approveVendor;
ctrl.declineVendor = declineVendor;
ctrl.deleteVendor = deleteVendor;
ctrl.removeUserFromVendor = removeUserFromVendor;
ctrl.addUserToVendor = addUserToVendor;
/** The vendor id extracted from the URL route. */
ctrl.vendorId = $stateParams.vendorID;
// Should only be on user-vendors-page if authenticated.
if (!$scope.auth.isAuthenticated) {
$state.go('home');
}
/**
* This will contact the Refstack API to get a vendor information.
*/
function getVendor() {
ctrl.showError = false;
ctrl.vendor = null;
// Construct the API URL based on user-specified filters.
var contentUrl = refstackApiUrl + '/vendors/' + ctrl.vendorId;
ctrl.vendorRequest =
$http.get(contentUrl).success(function(data) {
ctrl.vendor = data;
var isAdmin = $rootScope.auth.currentUser.is_admin;
ctrl.vendor.canDelete = ctrl.vendor.type != 0
&& (ctrl.vendor.can_manage || isAdmin);
ctrl.vendor.canRegister =
ctrl.vendor.type == 1;
ctrl.vendor.canApprove = isAdmin;
ctrl.vendorProperties = angular.fromJson(data.properties);
}).error(function(error) {
ctrl.showError = true;
ctrl.error =
'Error retrieving from server: ' +
angular.toJson(error);
});
}
ctrl.getVendor();
/**
* This will 'send' application for registration.
*/
function registerVendor() {
var url = [refstackApiUrl, '/vendors/', ctrl.vendorId,
'/action'].join('');
$http.post(url, {register: null}).success(function() {
ctrl.getVendor();
}).error(function(error) {
raiseAlert('danger', 'Error: ', error.detail);
});
}
/**
* This will approve application for registration.
*/
function approveVendor() {
var url = [refstackApiUrl, '/vendors/', ctrl.vendorId,
'/action'].join('');
$http.post(url, {approve: null}).success(function() {
ctrl.getVendor();
}).error(function(error) {
raiseAlert('danger', 'Error: ', error.detail);
});
}
/**
* This will decline a vendor's application for registration.
*/
function declineVendor() {
confirmModal('Please input decline reason', function(reason) {
var url = [refstackApiUrl, '/vendors/', ctrl.vendorId,
'/action'].join('');
$http.post(url, {deny: null, reason: reason}).success(
function() {
ctrl.getVendor();
}).error(function(error) {
raiseAlert('danger', 'Error: ', error.detail);
});
});
}
/**
* Delete the current vendor.
*/
function deleteVendor() {
var url = [refstackApiUrl, '/vendors/', ctrl.vendorId].join('');
$http.delete(url).success(function () {
$window.location.href = '/';
}).error(function (error) {
raiseAlert('danger', 'Error: ', error.detail);
});
}
/**
* Updates list of users in the vendor's group
*/
function getVendorUsers() {
ctrl.showError = false;
var contentUrl = refstackApiUrl + '/vendors/' + ctrl.vendorId
+ '/users';
ctrl.usersRequest =
$http.get(contentUrl).success(function(data) {
ctrl.vendorUsers = data;
ctrl.currentUser = $rootScope.auth.currentUser.openid;
}).error(function(error) {
ctrl.showError = true;
ctrl.error =
'Error retrieving from server: ' +
angular.toJson(error);
});
}
ctrl.getVendorUsers();
/**
* Removes user with specific openid from vendor's group
* @param {Object} openid
*/
function removeUserFromVendor(openid) {
var url = [refstackApiUrl, '/vendors/', ctrl.vendorId,
'/users/', btoa(openid)].join('');
$http.delete(url).success(function () {
ctrl.getVendorUsers();
}).error(function (error) {
raiseAlert('danger', 'Error: ', error.detail);
});
}
/**
* Adds a user to a vendor group given an Open ID.
* @param {Object} openid
*/
function addUserToVendor(openid) {
var url = [refstackApiUrl, '/vendors/', ctrl.vendorId,
'/users/', btoa(openid)].join('');
$http.put(url).success(function() {
ctrl.userToAdd = '';
ctrl.getVendorUsers();
}).error(function(error) {
raiseAlert('danger', 'Problem adding user. ' +
'Is the Open ID correct? Error: ',
error.detail);
});
}
}
})();