"use strict"; /** * Created by andey on 25-07-2017. */ (function () { 'use strict'; angular.module('customWidgetsModule') .service('widgetDependencyHandlerService', ['objectValueMapperService', 'categoriesService', 'systemAlertService', 'i18nService', 'expressionEvaluatorService', 'events', '$rootScope', function (objectValueMapperService, categoriesService, systemAlertService, i18nService, expressionEvaluatorService, events, $rootScope) { function _handleValueChange(fieldName, action) { if (fieldName === 'locationCompany' || fieldName === 'serviceType') { handleLocationCompanyChange(fieldName); } else if (fieldName === 'impactedService') { handleAffectedServiceChange(fieldName); } else if (fieldName === 'causalCI') { handleAffectedAssetChange(fieldName); } else if (fieldName === 'customer' || fieldName === 'requestedFor' || fieldName === 'contact') { handlePersonNameChange(fieldName, action); } else if (fieldName === 'changeClass') { handleTicketClassChange(fieldName); } else if (fieldName === 'organization') { handleOrganizationChange(fieldName); } else if (fieldName === 'site') { handleCustomerSiteChange(); } else if (fieldName === 'status') { handleStatusChange(fieldName); } else if (fieldName === 'operational') { handleOpertaionalCategoryChange(); } else if (fieldName === 'company') { handleCompanyValueChange(); } } function handleCompanyValueChange() { if (_.isEmpty(objectValueMapperService.getFieldByName('customer')) && objectValueMapperService.getExactValueByFieldName('company')) { var menuFieldsList = objectValueMapperService.getFieldsByType('dynamicSelectionField'); _.forEach(menuFieldsList, function (menuField) { if (menuField.readOnlyCondition) { menuField.isReadOnly = expressionEvaluatorService.evaluate(menuField.readOnlyCondition); return; } if (menuField.readOnly) { return; } menuField.isReadOnly = false; }); var affectedAssetList = objectValueMapperService.getFieldsByType('affectedAsset'); _.forEach(affectedAssetList, function (affectedAsset) { if (affectedAsset.readOnlyCondition) { affectedAsset.isReadOnly = expressionEvaluatorService.evaluate(affectedAsset.readOnlyCondition); return; } if (affectedAsset.readOnly) { return; } affectedAsset.isReadOnly = false; }); var priority = objectValueMapperService.getFieldsByType('priority'); if (priority && priority[0] && priority[0].members) { if (priority[0].readOnlyCondition) { var isReadOnly = expressionEvaluatorService.evaluate(priority[0].readOnlyCondition); priority[0].isReadOnly = isReadOnly; _.forEach(priority[0].members, function (member) { member.isReadOnly = isReadOnly; }); return; } if (priority[0].readOnly) { return; } priority[0].isReadOnly = false; _.forEach(priority[0].members, function (member) { member.isReadOnly = false; }); } var categoriesList = objectValueMapperService.getFieldsByType('category'); _.forEach(categoriesList, function (categoryField) { if (categoryField.readOnlyCondition) { categoryField.isReadOnly = expressionEvaluatorService.evaluate(categoryField.readOnlyCondition); return; } if (categoryField.readOnly) { return; } categoryField.isReadOnly = false; }); } } function handleStatusChange(fieldName) { if (objectValueMapperService.getTicketType() === 'workorder' && objectValueMapperService.getValueByFieldName(fieldName) === 'Closed') { systemAlertService.error({ text: i18nService.getLocalizedStringwithParams('action.ticket.close.message', [ i18nService.getLocalizedString('ticket.type.workorder') ]), icon: 'icon-exclamation_triangle' }); } } function handleTicketClassChange(fieldName) { var fieldValue = objectValueMapperService.getValueByFieldName(fieldName); fieldValue = fieldValue.timing.name ? fieldValue.timing.name : fieldValue.timing; var actualDates = objectValueMapperService.getFieldByName('actualDates'); var scheduledDates = objectValueMapperService.getFieldByName('scheduledDates'); if (actualDates) { if (fieldValue === 'Latent') { actualDates.isRequired = true; } else { actualDates.isRequired = false; } } if (scheduledDates) { if (fieldValue === 'Latent') { scheduledDates.isReadOnly = true; } else { scheduledDates.isReadOnly = false; } } } function handleLocationCompanyChange(fieldName) { var fieldValue = objectValueMapperService.getValueByFieldName(fieldName); var categoriesList = objectValueMapperService.getFieldsByType('category'); _.forEach(categoriesList, function (categoryField) { if (categoryField.value) { categoryField.value.locationCompany = fieldValue; categoryField.triggerClear = true; } }); } function handleAffectedServiceChange(fieldName) { var fieldValue = objectValueMapperService.getValueByFieldName(fieldName); var category = objectValueMapperService.getValueByFieldName('product'); if (category && fieldValue.ci && fieldValue.ci.product && fieldValue.ci.product.categorizations && fieldValue.ci.product.categorizations.length) { category.cognitiveFlag = false; updateCategoryField(category, fieldValue.ci.product.categorizations[0].tiers); } } function handleOrganizationChange(fieldName) { var fieldValue = objectValueMapperService.getValueByFieldName(fieldName); var customer = objectValueMapperService.getFieldByName('customer') || objectValueMapperService.getFieldByName('requestedFor'); customer.organization = fieldValue && fieldValue.organization; } function handleAffectedAssetChange(fieldName) { var fieldValue = objectValueMapperService.getValueByFieldName(fieldName); var category = objectValueMapperService.getValueByFieldName('resolutionProduct'); if (category && fieldValue.ci.product && fieldValue.ci.product.categorizations && fieldValue.ci.product.categorizations.length) { category.cognitiveFlag = false; updateCategoryField(category, fieldValue.ci.product.categorizations[0].tiers); } } function handlePersonNameChange(fieldName, action) { if (fieldName === 'customer' || fieldName === 'requestedFor') { var customer = _.cloneDeep(objectValueMapperService.getFieldByName(fieldName)), previousCustomer, customerPhone, customerEmail, customerCompany, customerOrg, categoriesList, menuFieldsList, affectedAssetList, priority, locationCompany; previousCustomer = customer.previousValue; customer = customer.value; if (!_.isEmpty(customer)) { customerPhone = objectValueMapperService.getFieldByName('customerPhone'); if (customerPhone) { customerPhone.value.phoneNumber = customerPhone.ootbValue = customer.phone; } customerEmail = objectValueMapperService.getFieldByName('customerEmail'); if (customerEmail) { customerEmail.value.internetEmail = customerEmail.ootbValue = customer.email; } customerCompany = objectValueMapperService.getFieldByName('customerCompany'); if (customerCompany) { customerCompany.value = customer.company.name; } customerOrg = objectValueMapperService.getFieldByName('organization'); if (customerOrg && customerOrg.value) { if (customerOrg.value.customerOrg || !_.isUndefined(customerOrg.value.customerOrg)) { customerOrg.value.customerOrg = customerOrg.ootbValue = customer.organization; } else { customerOrg.value.organization = customerOrg.ootbValue = customer.organization; } } updateCustomerSite(customer, fieldName); locationCompany = objectValueMapperService.getFieldByName('locationCompany'); if (locationCompany) { locationCompany.ticketCompany = customer.company; } if ((!locationCompany || (locationCompany && !locationCompany.locationCompanySelected)) && (!previousCustomer || (previousCustomer && previousCustomer.company.name !== customer.company.name))) { //set the isReadOnly property to false for create screen on customer selection categoriesList = objectValueMapperService.getFieldsByType('category'); _.forEach(categoriesList, function (categoryField) { if (action !== 'cancel') { categoryField.triggerClear = true; } if (categoryField.readOnlyCondition) { categoryField.isReadOnly = expressionEvaluatorService.evaluate(categoryField.readOnlyCondition); return; } if (categoryField.readOnly) { return; } categoryField.isReadOnly = false; }); } menuFieldsList = objectValueMapperService.getFieldsByType('dynamicSelectionField'); _.forEach(menuFieldsList, function (menuField) { if (menuField.readOnlyCondition) { menuField.isReadOnly = expressionEvaluatorService.evaluate(menuField.readOnlyCondition); return; } if (menuField.readOnly) { return; } menuField.isReadOnly = false; }); affectedAssetList = objectValueMapperService.getFieldsByType('affectedAsset'); _.forEach(affectedAssetList, function (affectedAsset) { if (affectedAsset.readOnlyCondition) { affectedAsset.isReadOnly = expressionEvaluatorService.evaluate(affectedAsset.readOnlyCondition); return; } if (affectedAsset.readOnly) { return; } affectedAsset.isReadOnly = false; }); priority = objectValueMapperService.getFieldsByType('priority'); if (priority && priority[0] && priority[0].members) { if (priority[0].readOnlyCondition) { var isReadOnly = expressionEvaluatorService.evaluate(priority[0].readOnlyCondition); priority[0].isReadOnly = isReadOnly; _.forEach(priority[0].members, function (member) { member.isReadOnly = isReadOnly; }); return; } if (priority[0].readOnly) { return; } priority[0].isReadOnly = false; _.forEach(priority[0].members, function (member) { member.isReadOnly = false; }); } } else { customerCompany = objectValueMapperService.getFieldByName('customerCompany'); if (customerCompany) { customerCompany.value = ''; } customerPhone = objectValueMapperService.getFieldByName('customerPhone'); if (!_.isEmpty(customerPhone)) { customerPhone.value.phoneNumber = customerPhone.ootbValue = ''; } customerEmail = objectValueMapperService.getFieldByName('customerEmail'); if (!_.isEmpty(customerEmail)) { customerEmail.value.internetEmail = customerEmail.ootbValue = ''; } customerOrg = objectValueMapperService.getFieldByName('organization'); if (!_.isEmpty(customerOrg) && customerOrg.value) { if (customerOrg.value.customerOrg || !_.isUndefined(customerOrg.value.customerOrg)) { customerOrg.value.customerOrg = customerOrg.ootbValue = ''; } else { customerOrg.value.organization = customerOrg.ootbValue = ''; } } var customerSite = objectValueMapperService.getFieldByName('site'); if (!_.isEmpty(customerSite) && customerSite.dataType === 'widget') { if (!_.isEmpty(customerSite)) { customerSite.setValue({ site: { name: '', id: '', attributeMap: { companyName: '', siteAddress: '', regionName: '', siteGroupName: '', siteId: '' } }, siteGroup: { name: '', attributeMap: { regionName: '' } }, region: { name: '' } }); } } locationCompany = objectValueMapperService.getFieldByName('locationCompany'); if (locationCompany) { locationCompany.ticketCompany = null; if (!locationCompany.locationCompanySelected) { locationCompany.value = null; } } if (!locationCompany || (locationCompany && !locationCompany.locationCompanySelected)) { //set the isReadOnly property to true for create screen on removing customer categoriesList = objectValueMapperService.getFieldsByType('category'); _.forEach(categoriesList, function (categoryField) { if (action !== 'cancel') { categoryField.triggerClear = true; } categoryField.isReadOnly = true; }); } menuFieldsList = objectValueMapperService.getFieldsByType('dynamicSelectionField'); _.forEach(menuFieldsList, function (menuField) { if (menuField.name === 'company' || menuField.name === 'customerCompany') { if (menuField.readOnlyCondition) { menuField.isReadOnly = expressionEvaluatorService.evaluate(menuField.readOnlyCondition); return; } if (menuField.readOnly) { return; } } else { menuField.isReadOnly = true; } }); affectedAssetList = objectValueMapperService.getFieldsByType('affectedAsset'); _.forEach(affectedAssetList, function (affectedAsset) { affectedAsset.isReadOnly = true; }); priority = objectValueMapperService.getFieldsByType('priority'); if (priority && priority[0] && priority[0].members) { priority[0].isReadOnly = true; _.forEach(priority[0].members, function (member) { member.isReadOnly = true; }); } } } else if (fieldName === 'contact') { var contact = objectValueMapperService.getValueByFieldName('contact'), contactPhone, contactEmail; if (!_.isEmpty(contact)) { contactPhone = objectValueMapperService.getFieldByName('contactPhone'); if (contactPhone) { contactPhone.value.contactPhoneNumber = contactPhone.ootbValue = contact.phone; if (contactPhone.readOnlyCondition) { contactPhone.isReadOnly = expressionEvaluatorService.evaluate(contactPhone.readOnlyCondition); return; } if (contactPhone.readOnly) { return; } contactPhone.isReadOnly = false; } contactEmail = objectValueMapperService.getFieldByName('contactEmail'); if (contactEmail) { contactEmail.value.contactEmail = contactEmail.ootbValue = contact.email; } } else { contactPhone = objectValueMapperService.getFieldByName('contactPhone'); if (!_.isEmpty(contactPhone)) { contactPhone.value.contactPhoneNumber = contactPhone.ootbValue = ''; contactPhone.isReadOnly = true; } contactEmail = objectValueMapperService.getFieldByName('contactEmail'); if (!_.isEmpty(contactEmail)) { contactEmail.value.contactEmail = contactEmail.ootbValue = ''; } } } } function handleCustomerSiteChange() { var customerSite = _.cloneDeep(objectValueMapperService.getFieldByName('site')), customerLocationMap = objectValueMapperService.getFieldByName('customerLocationMap'); if (!_.isEmpty(customerLocationMap) && !_.isEmpty(customerSite) && !_.isEmpty(customerSite.value) && !_.isEmpty(customerSite.value.site)) { objectValueMapperService.setValueByFieldName('customerLocationMap', customerSite.value.site.attributeMap.siteAddress); } var customerSiteMap = objectValueMapperService.getFieldByName('googleMap'); if (!_.isEmpty(customerSiteMap) && !_.isEmpty(customerSite) && !_.isEmpty(customerSite.value)) { customerSiteMap.setValue(customerSite.value.site.attributeMap.siteAddress); } } function updateCategoryField(category, newCategoryValues) { var tierNames = []; for (var key in newCategoryValues) { if (newCategoryValues.hasOwnProperty(key)) { tierNames.push(key); } } _.forEach(category.listOfTiers, function (tier, index) { tier.selectedValue = newCategoryValues[tierNames[index]]; }); category.serializedValue = categoriesService.getDisplayValues(category); } function updateCustomerSite(customer, fieldName) { var customerSite; if (fieldName === 'requestedFor') { customerSite = objectValueMapperService.getFieldByName('changeLocation'); if (!_.isEmpty(customerSite) && customerSite.dataType === 'widget') { customerSite.setValue({ address: { address: customer.site.address.address, city: customer.site.address.city, country: customer.site.address.country, street: customer.site.address.street, state: customer.site.address.state, zip: customer.site.address.zip }, companyName: customer.company.name, name: customer.site.name, siteGroup: customer.site.siteGroup, siteId: customer.site.siteId, region: customer.site.region }); } var company = objectValueMapperService.getFieldByName('company'); if (!_.isEmpty(company)) { company.setValue(customer.company.name); } } else { customerSite = objectValueMapperService.getFieldByName('site'); if (!_.isEmpty(customerSite) && customerSite.dataType === 'widget') { customerSite.setValue({ site: { name: customer.site.name, id: customer.site.siteId, attributeMap: { companyName: customer.company.name, siteAddress: customer.site.address, regionName: customer.site.region, siteGroupName: customer.site.siteGroup, siteId: customer.site.siteId } }, siteGroup: { name: customer.site.siteGroup, attributeMap: { regionName: customer.site.region } }, region: { name: customer.site.region } }); handleCustomerSiteChange(); } } } function handleOpertaionalCategoryChange() { if (objectValueMapperService.getTicketType() === EntityVO.TYPE_CHANGE) { $rootScope.$broadcast(events.RELOAD_RISK_QUESTION); } } return { handleValueChange: _handleValueChange, handleCategoryChange: updateCategoryField }; }]); })();