181 lines
6.9 KiB
JavaScript
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;
|
|
}
|
|
}]);
|