Files
old-wiaas-legacy/api-wiaas/client/js/components/users/create-user.directive.js
2018-06-11 11:09:35 +02:00

190 lines
6.7 KiB
JavaScript

(function() {
global.dashModule.directive('createUser', createUserDirective).controller('createUserCtrl', [
'$scope',
'$',
'$http',
'$translate',
'utilsService',
createUserCtrl
]);
function createUserDirective() {
return {restrict: 'E', templateUrl: 'users/html/createUserTemplate'};
}
function createUserCtrl($scope, $, $http, $translate, utilsService) {
let commercialLeadKeyDropped;
let listSelector;
$scope.isSelectCLVisible = isSelectCLVisible;
$scope.info = {};
$scope.roles = [];
$scope.selectedUserType = '';
$scope.startEventStyle = startEventStyle;
$scope.endEventStyle = endEventStyle;
$scope.droppedCommercialLead = droppedCommercialLead;
$scope.saveUserInDB = saveUserInDB;
$scope.getUserTypes = getUserTypes;
$scope.checkIfCLIsNeeded = checkIfCLIsNeeded;
$scope.getDataForUserCreation = getDataForUserCreation;
$scope.selectCompany = selectCompany;
$scope.selectedCompany = '';
$scope.toggleNewCompany = toggleNewCompany;
$scope.showAddNewCompany = false;
$scope.getClassForCompany = getClassForCompany;
function getDataForUserCreation() {
getUserTypes();
getCompanies();
}
function getUserTypes() {
$http({method: 'POST', url: 'users/api/getUserTypes'}).then(setUserTypes, utilsService.onHttpError);
}
function setUserTypes(response) {
$scope.roles = response.data || [];
if ($scope.selectedUserType) {
const selectedUserType = $scope.roles.find(role => {
return role.name === $scope.selectedUserType;
});
$scope.userTypeSelected = {
id: selectedUserType.id
};
}
}
function getCompanies() {
$http({
method: 'GET',
url: 'users/api/getCompanies'
}).then(setCompanies, utilsService.onHttpError);
}
function setCompanies(response) {
$scope.availableCompanies = response.data || [];
if ($scope.selectedCompany) {
const selectedCompany = $scope.availableCompanies.find(company => {
return company.name === $scope.selectedCompany;
});
$scope.companySelected = {
id: selectedCompany.id
};
}
}
function selectCompany(selectedCompany = '') {
$scope.selectedCompany = selectedCompany;
}
function checkIfCLIsNeeded(selectedUserType = '') {
$scope.selectedUserType = selectedUserType;
if ($scope.userTypeSelected.id === '2') {
getCommercialLeads();
}
}
function getCommercialLeads() {
$http({method: 'GET', url: 'users/api/getCommercialLeads'}).then(setCommercialLeads, utilsService.onHttpError);
}
function setCommercialLeads(response) {
if (response.data) {
$scope.availableCommercialLeads = response.data;
$scope.selectedCommercialLeads = [];
}
}
function isSelectCLVisible() {
return $scope.userTypeSelected && $scope.userTypeSelected.name
? $scope.userTypeSelected.name.toLowerCase() === 'customer'
: false;
}
function saveUserInDB() {
$scope.info.idUserType = $scope.userTypeSelected && $scope.userTypeSelected.id
? $scope.userTypeSelected.id
: 0;
if(!$scope.showAddNewCompany) {
$scope.info.selectedCompanyId = $scope.companySelected ? $scope.companySelected.id : 0;
delete $scope.info.companyName;
delete $scope.info.vat;
}
const params = $.param({
info: JSON.stringify($scope.info),
cl: JSON.stringify($scope.selectedCommercialLeads)
});
$http({
method: 'POST',
data: params,
url: 'users/api/saveUserInDB'
}).then(showConfirmationMessage, utilsService.onHttpError);
}
function showConfirmationMessage(response) {
if (response.data && response.data.messages) {
const messagesData = response.data.messages;
messagesData.forEach(messageData => {
const message = $translate.instant('users.forms.messages.' + messageData.message);
utilsService.displayMessage(messageData.code, message);
if (messageData.code === 'success') {
$scope.info = {};
checkIfCLIsNeeded();
if($scope.showAddNewCompany) {
getCompanies();
toggleNewCompany();
}
}
});
}
}
function startEventStyle(event, ui, from, key) {
$('.choose-cl-list').css({overflow: 'visible'});
switch (from) {
case 'available':
$('#selected-cl-list-container').addClass('allowed-drop-zone');
break;
case 'selected':
$('#available-cl-list-container').addClass('allowed-drop-zone');
break;
default:
break;
}
commercialLeadKeyDropped = key;
listSelector = from;
}
function endEventStyle() {
$('.choose-cl-list').css({'overflow-y': 'scroll'});
$('.choose-cl-list').removeClass('allowed-drop-zone');
}
function droppedCommercialLead(event, ui, from) {
if (from !== listSelector) {
if (listSelector === 'available') {
$scope.selectedCommercialLeads.push($scope.availableCommercialLeads[commercialLeadKeyDropped]);
$scope.availableCommercialLeads.splice(commercialLeadKeyDropped, 1);
} else if (listSelector === 'selected') {
$scope.availableCommercialLeads.push($scope.selectedCommercialLeads[commercialLeadKeyDropped]);
$scope.selectedCommercialLeads.splice(commercialLeadKeyDropped, 1);
}
}
$(ui.helper).css({position: 'relative', left: 0, top: 0});
}
function toggleNewCompany() {
$scope.showAddNewCompany = !$scope.showAddNewCompany;
}
function getClassForCompany() {
return $scope.showAddNewCompany ? 'select-inactive' : '';
}
}
})();