'use strict'; app.controller('scenarioHeaderController', ['$scope', '$http', '$location', '$timeout', function ($scope, $http, $location, $timeout) { var isChanged = false, headerIsChanged = false, 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, duration: null, dateForStartOfChanges: null, activeTab: null, costSaving: null, needToAdjustMargin: 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.duration = initData.duration; $scope.changedData.dateForStartOfChanges = initData.dateForStartOfChanges; $scope.changedData.activeTab = initData.activeTab; }; $scope.recalculateCalendar = function () { var valid = !(isValid && typeof isValid == 'function') || isValid(); if (valid) { headerIsChanged = true; $scope.$broadcast('refreshScenarioDetails', $scope.changedData); $('#uidemo-tabs-default-demo li a:eq(1)').tab('show'); } }; $scope.modelChanged = function () { isChanged = true; }; $scope.gridChanged = function () { headerIsChanged = true; isChanged = true; $scope.changedData.activeTab = 'scenarios'; }; $scope.canBeSaved = function () { return isChanged; }; $scope.canAdjustFinancial = function () { return !isChanged && !$scope.changedData.needToAdjustMargin; }; $scope.adjustFinancial = function () { $scope.changedData.needToAdjustMargin = true; $scope.$broadcast('adjustFinancial', true); }; $scope.isFinancialAdjusted = function () { return $scope.changedData.needToAdjustMargin; }; $scope.$watch("changedData.endDate", function (newValue, oldValue) { var newDate = new Date(new Date(newValue).getTime() + 1000 * 60 * 60 * 24); var savingsStartDate = (newDate.getMonth() + 1) + '/' + newDate.getDate() + '/' + newDate.getFullYear(); $scope.$broadcast('changedDates', { date: newDate, sDate: savingsStartDate }); }); $scope.$watch("changedData.startDate", function (newValue, oldValue) { var newDate = new Date(new Date(newValue).getTime()); var savingsCutoffDate = (newDate.getMonth() + 1) + '/' + newDate.getDate() + '/' + newDate.getFullYear(); $scope.$broadcast('cutoffDates', { date: newValue, sDate: savingsCutoffDate }); }); $scope.refreshDuration = function (url) { $scope.modelChanged(); try { $http.post(url, { startDate: $scope.changedData.startDate, endDate: $scope.changedData.endDate }).success(function (data) { $scope.changedData.duration = data; }); } catch (e) { showErrorModal('Oops!', commonErrorMessage); return; } }; $scope.getTabClass = function (tabName) { if (tabName == 'general') { if (!$scope.changedData.activeTab || $scope.changedData.activeTab.replace(' ', '').length <= 0) return 'active'; if ($scope.canBeSaved() && ($scope.changedData.activeTab == 'rateTable' || $scope.changedData.activeTab == 'notes')) return 'active'; } if (tabName == 'rateTable' || tabName == 'notes') { if ($scope.canBeSaved()) return ''; } return tabName === $scope.changedData.activeTab ? 'active' : ''; }; $scope.headerWasConfirmed = function () { return headerIsChanged; }; $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.marginTypeChanged = function(useLMMargin) { $scope.modelChanged(); if (useLMMargin) calcTDCost($scope.changedData.revenue, $scope.changedData.lmMargin); else calcTDCost($scope.changedData.revenue, $scope.changedData.grossMargin); }; function calcTDCost(revenue, margin) { if (!revenue || !margin) { $scope.changedData.expense = 0; return; } if (margin < 0) margin = 0; $scope.changedData.expense = Math.round(revenue * (1 - margin / 100) * 100) / 100; } }]);