'use strict'; app.controller('scenarioHeaderController', ['$scope', '$http', function ($scope, $http) { var commonErrorMessage = 'An error occurred while processing your request. Please, try again later.'; $scope.$on('costSavingChanged', function (event, data) { $scope.changedData.costSaving = data; $scope.modelChanged(); }); $scope.$on('gridChanged', function () { $scope.gridChanged(); }); $scope.changedData = { parentId: null, name: null, startDate: null, endDate: null, growthScenario: null, expense: null, revenue: null, oldRevenue: null, useLMMargin: null, grossMargin: null, oldGrossMargin: null, lmMargin: null, oldLMMargin: null, templateId: null, oldTemplateId: null, isActiveScenario: null, isBottomUp: null, duration: null, dateForStartOfChanges: null, activeTab: null, costSaving: null, isFinInfoEditable: false, needToAdjustMargin: true, projectHasDependencies: false, startDateConstraint: null, endDateConstraint: null, UserDefinedFields: [], workflowScheme: null, adjustMarginRased: null, dateForStartOfChangesOld: null }; $scope.HeaderIsChanged = false; $scope.IsChanged = false; $scope.DateConstraintsWarningVisible = false; $scope.init = function (initData) { if (!initData) return; $scope.changedData.id = initData.id; $scope.changedData.name = initData.name; $scope.changedData.parentId = initData.parentId; $scope.changedData.templateId = initData.templateId; $scope.changedData.oldTemplateId = initData.templateId; $scope.changedData.startDate = initData.startDate; $scope.changedData.endDate = initData.endDate; $scope.changedData.growthScenario = initData.growthScenario; $scope.changedData.expense = initData.expense; $scope.changedData.oldExpense = initData.expense; $scope.changedData.revenue = initData.revenue; $scope.changedData.oldRevenue = initData.revenue; $scope.changedData.useLMMargin = initData.useLMMargin; $scope.changedData.grossMargin = initData.grossMargin; $scope.changedData.oldGrossMargin = initData.grossMargin; $scope.changedData.lmMargin = initData.lmMargin; $scope.changedData.oldLMMargin = initData.lmMargin; $scope.changedData.isActiveScenario = initData.isActiveScenario; $scope.changedData.isBottomUp = initData.isBottomUp; $scope.changedData.duration = initData.duration; $scope.changedData.dateForStartOfChanges = initData.dateForStartOfChanges; $scope.changedData.activeTab = initData.activeTab; $scope.changedData.isFinInfoEditable = initData.isEditable; $scope.changedData.projectHasDependencies = initData.projectHasDependencies; $scope.changedData.startDateConstraint = initData.startDateConstraint; $scope.changedData.endDateConstraint = initData.endDateConstraint; $scope.changedData.UserDefinedFields = initData.UserDefinedFields; $scope.changedData.workflowScheme = initData.workflowScheme; $scope.changedData.dateForStartOfChangesOld = initData.dateForStartOfChanges; if ($scope.changedData.dateForStartOfChangesOld != undefined && $scope.changedData.dateForStartOfChangesOld != null) $scope.changedData.dateForStartOfChangesOld = DateTimeConverter.stringToMs($scope.changedData.dateForStartOfChangesOld); }; $scope.recalculateCalendar = function () { var valid = !(isValid && typeof isValid == 'function') || isValid(); if (valid) { $scope.HeaderIsChanged = true; var data = { id: $scope.changedData.id, name: $scope.changedData.name, parentId: $scope.changedData.parentId, oldTemplateId: $scope.changedData.oldTemplateId, templateId: $scope.changedData.templateId, startDate: $scope.changedData.startDate, endDate: $scope.changedData.endDate, growthScenario: $scope.changedData.growthScenario, revenue: $scope.changedData.revenue, expense: $scope.changedData.expense, useLMMargin: $scope.changedData.useLMMargin, grossMargin: $scope.changedData.grossMargin, lmMargin: $scope.changedData.lmMargin, isActiveScenario: $scope.changedData.isActiveScenario, costSaving: $scope.changedData.costSaving, needToAdjustMargin: $scope.changedData.isFinInfoEditable && $scope.changedData.needToAdjustMargin, dateForStartOfChanges: $scope.changedData.dateForStartOfChanges, UserDefinedFields: $scope.changedData.UserDefinedFields, adjustMarginRased: $scope.changedData.adjustMarginRased, dateForStartOfChangesOld: $scope.changedData.dateForStartOfChangesOld }; if ($scope.changedData.adjustMarginRased == null) { $scope.changedData.adjustMarginRased = data.needToAdjustMargin; data.adjustMarginRased = data.needToAdjustMargin; } $scope.$broadcast('refreshScenarioDetails', data); $('#uidemo-tabs-default-demo li a:eq(1)').tab('show'); } }; $scope.saveFinInfo = function () { var valid = typeof isValidFinInfoForm === "undefined" || !angular.isFunction(isValidFinInfoForm) || isValidFinInfoForm(); if (valid) { var finInfo = { expense: $scope.changedData.expense, revenue: $scope.changedData.revenue, useLMMargin: $scope.changedData.useLMMargin, grossMargin: $scope.changedData.grossMargin, lmMargin: $scope.changedData.lmMargin, costSaving: $scope.changedData.costSaving, dateForStartOfChanges: $scope.changedData.dateForStartOfChanges, needToAdjustMargin: $scope.changedData.needToAdjustMargin }; $scope.HeaderIsChanged = true; $scope.$broadcast('refreshFinancialInformation', finInfo); } }; $scope.modelChanged = function () { $scope.IsChanged = true; }; $scope.gridChanged = function () { $scope.HeaderIsChanged = true; $scope.IsChanged = true; $scope.changedData.activeTab = 'scenarios'; }; $scope.canAdjustFinancial = function () { return !$scope.IsChanged && !$scope.changedData.isFinInfoEditable; }; $scope.adjustFinancial = function () { $scope.changedData.isFinInfoEditable = true; $scope.$broadcast('adjustFinancial', true); }; $scope.isFinInfoEditable = function () { return $scope.changedData.isFinInfoEditable; }; $scope.$watch("changedData.startDate", function (newValue, oldValue) { if (newValue != oldValue) { var data = { startDate: newValue, endDate: $scope.changedData.endDate }; refreshDuration(); checkDateConstraints(); $scope.$broadcast('scenarioRangeChanged', data); } }); $scope.$watch("changedData.endDate", function (newValue, oldValue) { if (newValue != oldValue) { var data = { startDate: $scope.changedData.startDate, endDate: newValue }; refreshDuration(); checkDateConstraints(); $scope.$broadcast('scenarioRangeChanged', data); } }); $scope.$watch("changedData.workflowScheme", function (newValue, oldValue) { if (newValue != oldValue) { var data = { WorkFlowSchema: $scope.changedData.workflowScheme }; $scope.$broadcast('scenarioWorkFlowSchemaChanged', data); } }); $scope.getTabClass = function (tabName) { if (tabName == 'general') { if (!$scope.changedData.activeTab || $scope.changedData.activeTab.replace(' ', '').length <= 0) return 'active'; if ($scope.IsChanged && ($scope.changedData.activeTab == 'rateTable' || $scope.changedData.activeTab == 'notes')) return 'active'; } if (tabName == 'rateTable' || tabName == 'notes') { if ($scope.IsChanged) return ''; } return tabName === $scope.changedData.activeTab ? 'active' : ''; }; $scope.scenarioStatusChanged = function (newStatus) { $scope.$apply(function () { checkDateConstraints(); }); }; $scope.projectedRevenueChanged = function (value) { $scope.modelChanged(); if ($scope.changedData.useLMMargin) calcTDCost(value, $scope.changedData.lmMargin); else calcTDCost(value, $scope.changedData.grossMargin); }; $scope.marginChanged = function (value) { $scope.modelChanged(); calcTDCost($scope.changedData.revenue, value); }; $scope.GetUserDefinedFieldValue = function (id) { var len = $scope.changedData.UserDefinedFields.length; for (var i = 0; i $scope.changedData.endDateConstraint; } $scope.DateConstraintsWarningVisible = $scope.changedData.isActiveScenario && (startDateVioldated || endDateVioldated); }; }]);