SmartIT_Extensions/BMC/smart-it-full/scripts/app/person/create-person-controller.js

138 lines
6.1 KiB
JavaScript

"use strict";
/**
* Created by geetha arvind on 12/22/2015.
*/
(function () {
'use strict';
angular.module('personModule')
.controller('createPersonController', ["$scope", "$state", "$q", "$modalInstance", "i18nService", "systemAlertService", "userModel", "searchModel", "personModel", "metadataModel", "screenConfigurationModel", "personCompany", function ($scope, $state, $q, $modalInstance, i18nService, systemAlertService, userModel, searchModel, personModel, metadataModel, screenConfigurationModel, personCompany) {
'ngInject';
var person = {
type: EntityVO.TYPE_PERSON
};
function init() {
$scope.state = {
dataIsLoading: true,
tooManyCompanies: false
};
$scope.selections = {};
$scope.person = person;
initAlertForDirtyForm();
var userPromise = searchModel.getOperatingCompanies(null, -1).then(function (response) {
$scope.selections.companies = _.cloneDeep(response.companies);
$scope.state.tooManyCompanies = response.exceedsChunkSize;
}), personPromise = metadataModel.getPersonMetadata(EntityVO.TYPE_PERSON).then(function (personData) {
angular.extend(person, personData);
$scope.person.company = userModel.userFullData.company;
$scope.person.isVIP = _.find(personData.vip, { name: 'No' });
$scope.person.clientSensitivity = _.find(personData.clientSensitivities, { name: 'Standard' });
$scope.person.clientType = _.find(personData.clientTypes, { name: 'Customer' });
$scope.person.contactType = _.find(personData.contactTypes, { name: 'Customer' });
});
screenConfigurationModel
.loadScreenConfigurationAndCustomFieldLabels(ScreenConfigurationVO.prototype.PERSON_DETAILS_SCREEN, EntityVO.TYPE_PERSON);
$q.all([personPromise, userPromise]).then(function () {
if (personCompany) {
$scope.updateCompany(personCompany);
}
$scope.state.dataIsLoading = false;
});
}
$scope.updateCompany = function (newCompany) {
$scope.person.company = {
name: newCompany.name,
id: newCompany.id
};
$scope.person.organization = '';
$scope.person.department = '';
$scope.person.site = '';
};
$scope.getCompaniesByName = function (name) {
return searchModel.getCompaniesByText(name).then(function (response) {
return response.companies;
});
};
$scope.getOrganizationsAndUpdate = function (company) {
$scope.organizationsLoading = true;
personModel.getOrganizationList(company.name).then(function (data) {
$scope.organizations = data;
}).finally(function () {
$scope.organizationsLoading = false;
});
};
$scope.getDepartmentsAndUpdate = function (organization, company) {
$scope.departmentsLoading = true;
personModel.getDepartmentList(organization, company.name).then(function (data) {
$scope.departments = data;
}).finally(function () {
$scope.departmentsLoading = false;
});
};
$scope.getSitesAndUpdate = function (company) {
$scope.sitesLoading = true;
personModel.getSiteList(company.name).then(function (data) {
$scope.sites = data;
}).finally(function () {
$scope.sitesLoading = false;
});
};
$scope.createPerson = function () {
$scope.state.dataIsLoading = true;
personModel.createPerson($scope.person).then(function (result) {
$modalInstance.close(result);
}).catch(function (error) {
if (error && error.data) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
}).finally(function () {
$scope.state.dataIsLoading = false;
});
};
$scope.cancel = function () {
$modalInstance.dismiss();
};
var isFormDirty = function () {
return $scope.createCustomerForm.$dirty || !_.isEmpty(person.firstName)
|| !_.isEmpty(person.lastName);
};
function initAlertForDirtyForm() {
$scope.$on('$stateChangeStart', function (event, toState, toParams) {
if (isFormDirty()) {
event.preventDefault();
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.labels.yes'),
data: {
stateName: toState.name,
stateParams: toParams
}
},
{
text: i18nService.getLocalizedString('common.labels.no')
}
]
});
modalInstance.result.then(function (data) {
if (!_.isEmpty(data)) {
person = {};
$scope.createCustomerForm.$setPristine();
$modalInstance.dismiss();
$state.transitionTo(data.stateName, data.stateParams);
}
});
}
else {
$modalInstance.dismiss();
}
});
}
init();
}]).value('personCompany', null);
}());