301 lines
12 KiB
JavaScript
301 lines
12 KiB
JavaScript
'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<len;i++){
|
|
var udf = $scope.changedData.UserDefinedFields[i];
|
|
if (udf)
|
|
if (udf.Id == id)
|
|
return udf.Values;
|
|
}
|
|
}
|
|
$scope.UdfChanged = function (id) {
|
|
|
|
//$.each($scope.changedData.UserDefinedFields, function (i, udf) {
|
|
// if (udf.Id == id && udf.Values) {
|
|
// udf.Values.value = $scope.changedData.UDF;
|
|
// }
|
|
//});
|
|
|
|
$scope.modelChanged();
|
|
}
|
|
$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;
|
|
};
|
|
function refreshDuration() {
|
|
$scope.modelChanged();
|
|
try {
|
|
$http.post('/Scenarios/CalculateScenarioDuration', {
|
|
startDate: $scope.changedData.startDate,
|
|
endDate: $scope.changedData.endDate
|
|
}).success(function (data) {
|
|
$scope.changedData.duration = data;
|
|
});
|
|
}
|
|
catch (e) {
|
|
showErrorModal('Oops!', commonErrorMessage);
|
|
return;
|
|
}
|
|
};
|
|
function checkDateConstraints() {
|
|
if (!$scope.changedData.projectHasDependencies)
|
|
return;
|
|
|
|
var startDateVioldated = false;
|
|
var endDateVioldated = false;
|
|
|
|
if ($scope.changedData.startDate && $scope.changedData.startDateConstraint) {
|
|
var startDateMs = DateTimeConverter.stringToMs($scope.changedData.startDate);
|
|
startDateVioldated = startDateMs < $scope.changedData.startDateConstraint;
|
|
}
|
|
|
|
if ($scope.changedData.endDate && $scope.changedData.endDateConstraint) {
|
|
var endDateMs = DateTimeConverter.stringToMs($scope.changedData.endDate);
|
|
endDateVioldated = endDateMs > $scope.changedData.endDateConstraint;
|
|
}
|
|
|
|
$scope.DateConstraintsWarningVisible = $scope.changedData.isActiveScenario && (startDateVioldated || endDateVioldated);
|
|
};
|
|
}]); |