EnVisageOnline/Main-RMO/Source/EnVisage/Scripts/Angular/Controllers/scenarioHeaderController.js

181 lines
6.9 KiB
JavaScript

'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;
}
}]);