143 lines
8.3 KiB
JavaScript
143 lines
8.3 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('layoutConfigModule')
|
|
.directive('layoutRenderer', ['events', 'expressionEventManager', 'screenConfigurationModel', 'objectValueMapperService', '$timeout', function (events, expressionEventManager, screenConfigurationModel, objectValueMapperService, $timeout) {
|
|
return {
|
|
restrict: 'E',
|
|
replace: true,
|
|
templateUrl: 'views/layout-configuration/layout-renderer/layout-renderer.html',
|
|
scope: {
|
|
screenLayout: '=',
|
|
ticket: '=',
|
|
metadata: '=',
|
|
editMode: '=',
|
|
isNew: '='
|
|
},
|
|
link: function (scope, $element) {
|
|
var screenName, handleCompanyChange = function () {
|
|
if (_.isEmpty(objectValueMapperService.getFieldByName('customer'))) {
|
|
scope.ticket.company = objectValueMapperService.getExactValueByFieldName('company');
|
|
scope.ticket.selectedCompany = !scope.ticket.selectedCompany ? scope.ticket.company : scope.ticket.selectedCompany;
|
|
}
|
|
}, handleCustomerCompanyChange = function () {
|
|
if (_.isEmpty(objectValueMapperService.getFieldByName('customer')) && scope.ticket.ticketType === EntityVO.TYPE_WORKORDER) {
|
|
scope.ticket.company = objectValueMapperService.getExactValueByFieldName('customerCompany');
|
|
scope.ticket.selectedCompany = !scope.ticket.selectedCompany ? scope.ticket.company : scope.ticket.selectedCompany;
|
|
}
|
|
};
|
|
if (scope.isNew) {
|
|
objectValueMapperService.changeMode(2, true, scope.ticket);
|
|
scope.$on(events.WIDGET_VALUE_CHANGE, function (event, obj) {
|
|
console.log('Widget value changed :' + obj.fieldName);
|
|
expressionEventManager.handleOOTBFieldValueChange(obj.fieldName);
|
|
scope.$broadcast(events.REFRESH_FIELD_VALUES); //Added to check if group field is editable on widget value change
|
|
});
|
|
scope.$on(events.FIELD_VALUE_CHANGE, function (event, field) {
|
|
console.log('Field value changed :' + field.name);
|
|
expressionEventManager.handleFieldChange(field.name);
|
|
if (field.name === 'company') {
|
|
var companyField = objectValueMapperService.getFieldByName(field.name);
|
|
if (!companyField.isLocationCompany) {
|
|
handleCompanyChange();
|
|
}
|
|
}
|
|
else if (field.name === 'customerCompany') {
|
|
handleCustomerCompanyChange();
|
|
}
|
|
});
|
|
scope.$on(events.WIDGET_VALUE_CHANGE_FROM_WIZARD, function (event, obj) {
|
|
console.log('Widget value changed :' + obj.fieldName);
|
|
expressionEventManager.handleOOTBFieldValueChange(obj.fieldName);
|
|
});
|
|
scope.$on(events.FIELD_VALUE_CHANGE_FROM_WIZARD, function (event, field) {
|
|
console.log('Field value changed :' + field.name);
|
|
expressionEventManager.handleFieldChange(field.name);
|
|
});
|
|
/*
|
|
* Handle Ticket load event
|
|
* Place any code which requires to be done when all fields are loaded
|
|
*/
|
|
var noOfFieldAreasAttached = 0, totalFieldArea;
|
|
scope.$on(events.FIELD_AREA_ATTACHED, function (e, screenName) {
|
|
totalFieldArea = totalFieldArea || $element.find('.panel-field-area').length;
|
|
noOfFieldAreasAttached++;
|
|
if (totalFieldArea === noOfFieldAreasAttached) {
|
|
console.log('All custom-area directives are loaded!');
|
|
$timeout(function () {
|
|
if (screenName === ScreenConfigurationVO.prototype.CREATE_CHANGE_SCREEN) {
|
|
screenConfigurationModel.allFieldsLoaded.basicTab = true;
|
|
if (screenConfigurationModel.allFieldsLoaded.datesTab) {
|
|
expressionEventManager.handleTicketLoad();
|
|
}
|
|
}
|
|
else {
|
|
expressionEventManager.handleTicketLoad();
|
|
}
|
|
if (scope.ticket.type === EntityVO.TYPE_INCIDENT) {
|
|
expressionEventManager.handleOOTBFieldValueChange('customer');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
if (scope.ticket.type === 'incident') {
|
|
screenName = ScreenConfigurationVO.prototype.CREATE_INCIDENT_SCREEN;
|
|
}
|
|
else if (scope.ticket.type === 'workorder') {
|
|
screenName = ScreenConfigurationVO.prototype.CREATE_WORK_ORDER_SCREEN;
|
|
}
|
|
else if (scope.ticket.type === 'change') {
|
|
screenName = ScreenConfigurationVO.prototype.CREATE_CHANGE_SCREEN;
|
|
}
|
|
else if (scope.ticket.type === 'task') {
|
|
screenName = ScreenConfigurationVO.prototype.CREATE_TASK_SCREEN;
|
|
}
|
|
}
|
|
else {
|
|
screenName = screenConfigurationModel.getScreenNameByTicketType(scope.ticket.type);
|
|
}
|
|
var screenPanels = screenConfigurationModel.screensCacheByName[screenName]
|
|
? screenConfigurationModel.screensCacheByName[screenName].panels : [];
|
|
function isPanelEmpty(panel) {
|
|
if (panel.panels) {
|
|
return panel.panels.reduce(function (isEmptyPanel, p) {
|
|
if (isEmptyPanel) {
|
|
isEmptyPanel = isPanelEmpty(p);
|
|
}
|
|
return isEmptyPanel;
|
|
}, true);
|
|
}
|
|
else {
|
|
return !screenPanels.some(function (screenPanel) {
|
|
return screenPanel.name === panel.name && (screenPanel.fields || []).length > 0;
|
|
});
|
|
}
|
|
}
|
|
scope.screenLayout.panels.forEach(function (panel) {
|
|
panel.emptyPanel = isPanelEmpty(panel);
|
|
});
|
|
scope.panelChildrenCount = function (screenPanelName) {
|
|
var screenPanel = _.find(screenPanels, { name: screenPanelName });
|
|
if (screenPanel && screenPanel.fields) {
|
|
return screenPanel.fields.length;
|
|
}
|
|
return 0;
|
|
};
|
|
scope.$on(events.TOGGLE_EDIT_MODE, handleToggleEditMode);
|
|
scope.$on(events.AFTER_SAVED_CHANGES, afterSaveChangesHandler);
|
|
scope.$on(events.DISCARD_CHANGES, handleDiscardChanges);
|
|
function handleToggleEditMode() {
|
|
scope.editMode = true;
|
|
}
|
|
function afterSaveChangesHandler() {
|
|
scope.editMode = false;
|
|
}
|
|
function handleDiscardChanges() {
|
|
scope.editMode = false;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
]);
|
|
})();
|