190 lines
6.7 KiB
JavaScript
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' : '';
|
|
}
|
|
}
|
|
})();
|