EnVisageOnline/Main-RMO/Source/EnVisage/Views/ForecastDashboard/_forecastDashboard.cshtml

1216 lines
56 KiB
Plaintext

@using EnVisage.Code
@using EnVisage.Code.HtmlHelpers
@using Microsoft.AspNet.Identity
@using EnVisage.Models
@model EnVisage.Models.ForecastDashboardOptionsModel
@{
bool displayedInTeamDashboard = Model.SourcePageModel.Equals(typeof(TeamboardModel).Name);
bool displayedInViewDashboard = Model.SourcePageModel.Equals(typeof(ViewBoardModel).Name);
}
<div class="@(displayedInTeamDashboard || displayedInViewDashboard ? "" : "panel") form-horizontal" id="criteria-container">
<input type="hidden" id="scenarioId" name="scenarioId" />
<input type="hidden" id="groupId" name="groupId" />
<input type="hidden" id="pieChartColor" name="pieChartColor" />
<div class="@(displayedInTeamDashboard ? "" : "panel-body")">
<div class="@(displayedInTeamDashboard || displayedInViewDashboard ? "row padding-sm" : "row")"
style="@(displayedInTeamDashboard || displayedInViewDashboard ? "padding-bottom:0px!important;" : "")">
<div class="@(displayedInTeamDashboard ? "col-sm-12 col-md-6" : "col-lg-3 col-md-4 col-sm-5")">
<div class="form-group no-margin-hr">
<label class="control-label">Start/End Date</label>
@*env-716 start *@
<div style="overflow: hidden;">
<div class="input-daterange input-group" id="bs-datepicker-rangeChart">
<input class="form-control valid" data-key="foreecastFilterStartDate" id="filterStartDateChart" name="filterStartDateChart" type="text" value="@DateTime.Today.AddMonths(-1).ToString("MM/dd/yyyy")">
<div class="input-group-addon">to</div>
<input class="form-control" data-key="foreecastFilterEndDate" id="filterEndDateChart" name="filterEndDateChart" type="text" value="@DateTime.Today.AddMonths(11).ToString("MM/dd/yyyy")">
</div>
@*<div class="input-daterange input-group date floatdaterange" id="bs-datepicker-rangeChartStart">
<input class="form-control valid" data-key="foreecastFilterStartDate" id="filterStartDateChart" name="filterStartDateChart" type="text" value="@DateTime.Today.AddMonths(-1).ToString("MM/dd/yyyy")">
</div>
<div class="pull-left floatdaterange-addon">To</div>
<div class="input-daterange input-group date floatdaterange" id="bs-datepicker-rangeChartEnd">
<input class="form-control" data-key="foreecastFilterEndDate" id="filterEndDateChart" name="filterEndDateChart" type="text" value="@DateTime.Today.AddMonths(11).ToString("MM/dd/yyyy")">
</div>*@
</div>
@* <div class="input-daterange input-group" id="bs-datepicker-rangeChart">
<input class="form-control valid" data-key="foreecastFilterStartDate" id="filterStartDateChart" name="filterStartDateChart" type="text" value="@DateTime.Today.AddMonths(-1).ToString("MM/dd/yyyy")">
<span class="input-group-addon">to</span>
<input class="form-control" data-key="foreecastFilterEndDate" id="filterEndDateChart" name="filterEndDateChart" type="text" value="@DateTime.Today.AddMonths(11).ToString("MM/dd/yyyy")">
</div>
env-716 end *@
</div>
</div>
@*<div class="@(displayedInTeamDashboard ? "col-sm-12 col-md-6" : "col-lg-2 col-md-3 col-sm-4")">
<div class="form-group no-margin-hr">
<label class="control-label">Scenario Type</label>
@Html.DropDownList("filterType", Utils.GetScenarioTypesPortfAndSched(),
new
{
@id = "filterType",
@class = "form-control fcboard-criteria-select2",
@data_key = "forecastFilterScenarioType"
})
</div>
</div>*@
@*<div class="col-lg-2 col-md-3 col-sm-3" id="filterGroupContainer">
<div class="form-group no-margin-hr select2-primary">
<label class="control-label">Scenario Groups</label>
@Html.DropDownList("filterGroup", Utils.GetScenarioGroup(includeEmpty: false),
new
{
@id = "group",
@class = "form-control fcboard-criteria-select2",
@data_key = "forecastFilterScenarioGroup",
@multiple = "multiple"
})
</div>
</div>*@
<div class="@(displayedInTeamDashboard ? "col-sm-12 col-md-6" : "col-lg-2 col-md-3 col-sm-5")">
<div class="form-group no-margin-hr select2-primary">
<label class="control-label">Project Types</label>
@Html.DropDownList("filterClassification", Utils.GetProjectClassificationDropdown(includeEmpty: false),
new
{
@id = "filterClassification",
@class = "form-control fcboard-criteria-select2",
@data_key = "forecastFilterClassification",
@multiple = "multiple"
})
</div>
</div>
<div class="@(displayedInTeamDashboard ? "col-sm-12 col-md-6" : "col-lg-2 col-md-3 col-sm-4")">
<div class="form-group no-margin-hr select2-primary">
<label class="control-label">Project Statuses</label>
@Html.DropDownList("filterStatus", Utils.GetProjectStatusDropdown(includeEmpty: false),
new
{
@id = "filterStatus",
@class = "form-control fcboard-criteria-select2",
@data_key = "forecastFilterStatus",
@multiple = "multiple"
})
</div>
</div>
<div class="col-lg-2 col-md-3 col-sm-4" style="@((Request.Path == "/") ? "" : "display:none")">
<div class="form-group no-margin-hr select2-primary">
<label class="control-label">Teams/Views</label>
@Html.DropDownList("filterTeam", Utils.GetViewsAndTeams(User.Identity.GetID(), false),
new
{
@id = "filterTeam",
@class = "form-control fcboard-criteria-select2",
@data_key = "forecastFilterTeam",
@multiple = "multiple"
})
</div>
</div>
<div class="@(displayedInTeamDashboard ? "col-sm-12 col-md-6" : "col-lg-2 col-md-3 col-sm-5")">
<div class="form-group no-margin-hr select2-primary">
<label class="control-label">Strategic Goals</label>
@Html.DropDownList("filterTeam", Utils.GetStrategicGoalsDropdown(false),
new
{
@id = "filterGoal",
@class = "form-control fcboard-criteria-select2",
@data_key = "forecastFilterGoal",
@multiple = "multiple"
})
</div>
</div>
</div>
</div>
<div class="@(displayedInTeamDashboard ? "padding-sm" : "panel-footer") text-right"
style="@(displayedInTeamDashboard ? "padding-top:0px!important;" : "height:60px;")">
<div id="filter_processing" style="float:left;visibility: hidden;vertical-align:middle;">
<span ><img class="valign-middle" src="@Url.Content("~/Content/images/loadFA.gif")" />&nbsp;&nbsp;loading...</span>
</div>
<div style="float:right;">
<a class="btn btn-primary" onclick="applyForecastDashboardFilter(false);" id="filterForecastDataBtn">Filter</a>
</div>
</div>
@Html.HiddenFor(t => t.AdditionalFilterParams)
</div>
<div class="bs-example" id="uom_container">
<table class="table table-striped table-bordered dataTable-tight" id="uomtbl"></table>
</div>
<script type="text/javascript">
var _dataForChart;
var _pagePreferences = [];
var _allScenarioGroups = [];
var _evdttbl;
var _menu;
var _dataSectionName; // SA. ENV-815
var _scenDetailsUrl = '@Url.Action("Details", "Scenarios", new { @id = "_rplcmnt_", @backUrl = "/", @backName = "dashboard" })';
var _projectUrl = '@Url.Action("Edit", "Project", new { @id = "_rplcmnt_", @backUrl = "/", @backName = "dashboard" })';
var _loadingGifUrl = '@Url.Content("~/Content/images/load.gif")';
var _additionalFiltersId = '@Html.IdFor(t => t.AdditionalFilterParams)';
var _hideTeamGroupping = (document.location.pathname == '@(Url.Action("Board", "Team"))'); // SA. ENV-913. Hide groupping for Teams Dashboard. Check the page by Url
var _forecastPageState = null;
@foreach (var item in Utils.GetScenarioGroup().Where(item => !item.Text.Equals("Default")))
{
@:_allScenarioGroups.push("@item.Value" + ":" + "@item.Text");
}
function ToggleStatus(scenarioId, control) {
if (scenarioId == null || scenarioId == "")
return "";
var url = "/ForecastDashboard/CheckIfActive/";
var request = {
'scenarioId': scenarioId
};
$.get(url, request, function (data) {
if (data == null || data == "") {
ToggleStatusConfirmed(scenarioId, control);
return '';
} else {
bootbox.confirm({
message: "There is an active scenario for this project already. Are you sure you want to activate this scenario instead of active one?",
callback: function (result) {
if (result) {
ToggleStatusConfirmed(scenarioId, control);
}
},
className: "bootbox-sm"
});
}
});
}
function CopyToGroup(scenarioId, groupId, element) {
$(element).children('input[type="checkbox"]').addClass('hide');
$(element).children('span.glyphicon').removeClass('hide');
var isChecked = $(element).children('input[type="hidden"]').val() == 'checked';
var url = '';
if (!isChecked)
url = '/ForecastDashboard/CopyScenarioToGroup';
else
url = '/ForecastDashboard/ExtractFromGroup';
var request = {
'scenarioId': scenarioId,
'groupId': groupId
};
$.post(url, request, function (data) {
var result = data;
if (data.Status == 'Ok') {
$(element).children('input[type="hidden"]').val(isChecked ? "unchecked" : "checked");
} else if (data.Status == 'Error') { // Show error message
showErrorModal('An error occurred while try to change scenario group.', data.ErrorMsg);
console.log(data.ErrorDetails);
}
$(element).children('span.glyphicon').addClass('hide');
$(element).children('input[type="checkbox"]').removeClass('hide');
});
}
function onMenuItemClick(e, element) {
if ($(element).hasClass('dropdown-menu-form')) {
e.stopPropagation();
}
if (e.target.className != 'hide' && e.target.type == 'checkbox') {
var li = $(e.target).parent()[0];
var scenarioId = li.getAttribute('data-scenarioid');
var groupId = li.getAttribute('data-groupid');
CopyToGroup(scenarioId, groupId, $(li));
}
}
function ToggleStatusConfirmed(scenarioId, control) {
if (scenarioId == null || scenarioId == "")
return "";
var url = "/ForecastDashboard/ToggleStatus/";
var request = {
'scenarioId': scenarioId
};
$.get(url, request, function (data) {
if (typeof LoadGraphData === 'function')
LoadGraphData();
if (typeof LoadPieData === 'function')
LoadPieData();
_evdttbl.DataTable().ajax.reload();
});
return '';
}
function formatFDDate(jsonDate) {
if (jsonDate == null || jsonDate == "")
return "";
var dt = new Date(parseInt(jsonDate.replace("/Date(", "").replace(")/", ""), 10));
return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}
function switchFDGraph() {
changeUomModeForecastSwitcherState($('#expendituresMode').prop('checked'));
if (typeof DrawGraph === 'function')
DrawGraph();
}
function dropDownFixPosition(button, dropdown) {
var dropDownLeft = button.offset().left - window.pageXOffset - dropdown.width() + button.outerWidth();
var dropDownTop = button.offset().top + button.outerHeight() - window.pageYOffset;
dropdown.css('position', 'fixed');
dropdown.css('top', dropDownTop + "px");
dropdown.css('left', dropDownLeft + "px");
}
function ToggleChart() {
if ($('#graph-container').css('display') == 'none') {
$('#graph-container').css('display', 'block');
if (typeof DrawGraph === 'function')
DrawGraph();
if (typeof DrawPie === 'function')
DrawPie();
} else
$('#graph-container').css('display', 'none');
redrawFreezeColumn();
}
function ToggleCriteria() {
if ($('#criteria-container').css('display') == 'none')
$('#criteria-container').show();
else
$('#criteria-container').hide();
redrawFreezeColumn();
}
function switchExpenditureMode() {
if (!$('#expendituresMode').prop('checked')) {
$('#uomModeForecast').switcher('enable');
$('#uomModeForecast').switcher('on');
}
changeUomModeForecastSwitcherState($('#expendituresMode').prop('checked'));
if (typeof LoadGraphData === 'function')
LoadGraphData();
if (typeof LoadPieData === 'function')
LoadPieData();
}
function switchGroupByTeamMode() {
onPreferencesItemClick();
_evdttbl.DataTable().ajax.reload();
}
// SA. ENV-607
function switchPerformanceMode() {
setPerformanceMode();
if ($('#performanceMode').prop('checked')) {
if (typeof LoadPerformanceData === 'function') {
LoadPerformanceData();
}
}
}
function setPerformanceMode() {
if ($('#performanceMode').prop('checked')) {
$('#performanceChartMode').switcher('enable');
$('#uomtbl').dataTable().addClass("show-performance");
$('#stacked-container').css('display', 'block');
}
else {
$('#performanceChartMode').switcher('disable');
$('#uomtbl').dataTable().removeClass("show-performance");
$('#stacked-container').css('display', 'none');
}
redrawFreezeColumn();
}
// SA. ENV-608
function switchPerformanceChartMode() {
if (typeof LoadPerformanceData === 'function')
LoadPerformanceData();
}
function changeUomModeForecastSwitcherState(laborMode) {
if ($('#chFDGraphMode').prop('checked') && laborMode)
$('#uomModeForecast').switcher('enable');
else
$('#uomModeForecast').switcher('disable');
}
function applyForecastDashboardFilter(skipChart) {
$("#filter_processing").css({'visibility':'visible'});
// SA. ENV-815. Save user preferences
saveForecastDashboardPreferences();
filterForecastData(skipChart);
}
function filterForecastData(skipChart) {
if (!skipChart && typeof LoadGraphData === 'function')
LoadGraphData();
if (typeof LoadPieData === 'function')
LoadPieData();
_evdttbl.DataTable().ajax.reload(function () {
$("#filter_processing").css({ 'visibility': 'hidden' });
});
}
function dropDownInsideClick(event) {
console.log('fired');
if (!event)
event = window.event;
var container = null, button = null;
if ($(event.target).hasClass('dropdown-menu'))
container = $(event.target);
else {
button = $(event.target);
container = button.closest('.dropdown-menu');
}
hideRedundantPopovers(container, button);
if (event.stopPropagation)
event.stopPropagation();
else
window.event.cancelBubble = true;
}
function dropDownFixPositionCalendar(button, dropdown) {
console.log('fixing');
setDropdownProps(button, dropdown, liHeight);
hideRedundantPopovers($('#uomtbl'), null);
}
var liHeight = 30;
function hideRedundantPopovers(container, currentBtn) {
var id = null;
if (currentBtn) {
if (currentBtn.is('[data-toggle="popover"]'))
id = currentBtn.attr('id');
else
id = currentBtn.closest('[data-toggle="popover"]').attr('id');
}
container.find('[data-toggle="popover"]' + (id != null && id != undefined) ? '[id!="' + id + '"]' : '').popover('destroy');
}
function initDataTable() {
var additionalParams = $('#' + _additionalFiltersId).val();
var mode = "main";
if (additionalParams != null && additionalParams != "") {
var paramsObj = JSON.parse(additionalParams);
if (paramsObj != null && paramsObj.mode != null && paramsObj.mode != "") {
mode = paramsObj.mode;
}
}
var allColumns = [];
allColumns["ProjectName"] = {
"sTitle": "Project Name",
"sClass": "bigCol",
"mData": "ProjectName",
"sName": "ProjectName",
"mRender": function (data, type, full) {
var strA = '<a href="' + _projectUrl + '">' + data + '</a> ';
return strA.replace(/_rplcmnt_/g, full.ProjectId);
}
};
allColumns["Name"] = {
"sTitle": "Scenario Name",
"sClass": "bigCol",
"mData": "Name",
"sName": "Name",
"bVisible": isColumnVisible("Name"),
"mRender": function (data, type, full) {
var strA = '<div style="float:left;margin-right:5px;"><a id="aN__rplcmnt_" onclick="return CheckLock(this.id, \'Scenario\', \'_rplcmnt_\')" class="popover-warning popover-dark" href="' + _scenDetailsUrl + '">' + data + '</a></div>';
if (full.InactiveCount > 0) {
strA += '<div class="dropdown menuGroup " style="float:right;">'+
'<button type="button" title="Menu" style="margin-bottom:0px !important;" class="btn btn-xs dropdown-toggle" data-toggle="dropdown" onclick=\'dropDownFixPositionCalendar($(this), $(this).parent().find(".dropdown-menu"));\'><i class="fa fa-caret-down"></i></button>'+
'<ul id="ddm_'+ full.Id +'" class="dropdown-menu dropdown-menu-form dropdown-menu-right dropdown-menu-scroll-auto lioverflowh" style="text-align:left;padding:4px 0px!important;width:220px;overflow-x: hidden;" onclick="dropDownInsideClick(event);">';
$.map(full.InactiveScenarios, function (value, key) {
strA += '<li><div style="-ms-text-overflow: ellipsis; -o-text-overflow: ellipsis; text-overflow: ellipsis; overflow: hidden; max-width: 150px; float: left; padding-left: 15px;"><span title="' + value + '">'+ value + '</span></div>'+
'<div style="float: right;padding-right: 15px;"><a data-toggle="popover" title="Activate" onclick="ToggleStatus(\''+ key +'\', this)" class="btn btn-xs btn-primary popover-warning popover-dark" ><i class="fa fa-check-circle-o not-active"></i></a></div></li>';
});
strA += '</ul></div>';
}
return strA.replace(/_rplcmnt_/g, full.Id);
}
};
allColumns["ProjectedRevenue"] = {
"sTitle": "Projected Revenue",
"mData": "ProjectedRevenue",
"sName": "ProjectedRevenue",
"bVisible": isColumnVisible("ProjectedRevenue"),
"mRender": function (data, type, full) {
return (!data) ? "" : '$' + data.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}
};
allColumns["ExpectedGrossMargin"] = {
"sTitle": "Expected Margin",
"sClass": "smallCol",
"mData": "ExpectedGrossMargin",
"sName": "ExpectedGrossMargin",
"bVisible": isColumnVisible("ExpectedGrossMargin"),
"mRender": function (data, type, full) {
return ((full.UseLMMargin) ? Math.round(full.ExpectedGrossMargin_LM * 1000) / 10 + ' % (L&M)' : Math.round(full.ExpectedGrossMargin * 1000) / 10 + ' %');
}
};
allColumns["CalculatedGrossMargin"] = {
"sTitle": "Calculated Gross",
"sClass": "smallCol",
"mData": "CalculatedGrossMargin",
"sName": "CalculatedGrossMargin",
"bVisible": isColumnVisible("CalculatedGrossMargin"),
"mRender": function (data, type, full) { return ((!data) ? "0%" : Math.round(data * 1000) / 10 + ' %'); }
};
allColumns["CalculatedGrossMargin_LM"] = {
"sTitle": "L&M Margin",
"sClass": "smallCol",
"mData": "CalculatedGrossMargin_LM",
"sName": "CalculatedGrossMargin_LM",
"bVisible": isColumnVisible("CalculatedGrossMargin_LM"),
"mRender": function (data, type, full) { return ((!data) ? "0%" : Math.round(data * 1000) / 10 + ' %'); }
};
allColumns["CGSplit"] = {
"sTitle": "Labor / Materials",
"sClass": "smallCol",
"mData": "CGSplit",
"sName": "CGSplit",
"bVisible": isColumnVisible("CGSplit"),
"mRender": function (data, type, full) { return ((!full.CGSplit) ? "0%" : full.CGSplit * 100 + ' %') + " / " + ((!full.EFXSplit) ? "0%" : full.EFXSplit * 100 + ' %'); }
};
allColumns["StartDate"] = {
"sTitle": "Start Date",
"mData": "StartDate",
"sName": "StartDate",
"bVisible": isColumnVisible("StartDate"),
"mRender": function (data, type, full) { return ((!data) ? "0" : formatFDDate(data)); }
};
allColumns["EndDate"] = {
"sTitle": "End Date",
"mData": "EndDate",
"sName": "EndDate",
"bVisible": isColumnVisible("EndDate"),
"mRender": function (data, type, full) { return ((!data) ? "0" : formatFDDate(data)); }
};
allColumns["ProjectDeadline"] = {
"sTitle": "Project Deadline",
"mData": "ProjectDeadline",
"sName": "ProjectDeadline",
"bVisible": isColumnVisible("ProjectDeadline"),
"mRender": function (data, type, full) { return ((!data) ? "N/A" : formatFDDate(data)); }
};
allColumns["Priority"] = {
"sTitle": "Priority",
"sClass": "smallCol",
"mData": "Priority",
"sName": "Priority",
"bVisible": isColumnVisible("Priority"),
"mRender": function (data, type, full) { return data; }
};
allColumns["Probability"] = {
"sTitle": "Probability",
"sClass": "smallCol",
"mData": "Probability",
"sName": "Probability",
"bVisible": isColumnVisible("Probability"),
"mRender": function (data, type, full) {
var txt = '';
if (data * 100 > 0 && data * 100 <= 25)
txt = " (Low)";
if (data * 100 > 25 && data * 100 <= 75)
txt = " (Medium)";
if (data * 100 > 75 && data * 100 <= 99)
txt = " (High)";
if (data * 100 == 100)
txt = " (Expected)";
return ((!data) ? "0%" : Math.round(data * 100) + ' %' + txt);
}
};
allColumns["TDDirectCosts"] = {
"sTitle": "Top Down Direct Costs",
"mData": "TDDirectCosts",
"sName": "TDDirectCosts",
"bVisible": isColumnVisible("TDDirectCosts"),
"mRender": function (data, type, full) { return ((!data) ? "" : '$' + data.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')); }
};
allColumns["TDDirectCosts_LM"] = {
"sTitle": "Top Down Direct Costs L&M",
"mData": "TDDirectCosts_LM",
"sName": "TDDirectCosts_LM",
"bVisible": isColumnVisible("TDDirectCosts_LM"),
"mRender": function (data, type, full) { return ((!data) ? "" : '$' + data.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')); }
};
allColumns["BUDirectCosts"] = {
"sTitle": "Bottom Up Direct Costs",
"mData": "BUDirectCosts",
"sName": "BUDirectCosts",
"bVisible": isColumnVisible("BUDirectCosts"),
"mRender": function (data, type, full) {
return ((!data) ? "" : '$' + data.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'));
}
};
allColumns["BUDirectCosts_LM"] = {
"sTitle": "Bottom Up Direct Costs L&M",
"mData": "BUDirectCosts_LM",
"sName": "BUDirectCosts_LM",
"bVisible": isColumnVisible("BUDirectCosts_LM"),
"mRender": function (data, type, full) { return ((!data) ? "" : '$' + data.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')); }
};
allColumns["CostSavings"] = {
"sTitle": "Cost Savings",
"mData": "CostSavings",
"sName": "CostSavings",
"bVisible": isColumnVisible("CostSavings"),
"mRender": function (data, type, full) { return ((!data) ? "" : '$' + data.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')); }
};
allColumns["CostSavingsDuration"] = {
"sTitle": "Cost Savings Duration",
"mData": "CostSavingsDuration",
"sName": "CostSavingsDuration",
"bVisible": isColumnVisible("CostSavingsDuration"),
"mRender": function (data, type, full) { return full.CostSavingsDuration; }
};
allColumns["ROIDate"] = {
"sTitle": "ROI Date",
"mData": "ROIDate",
"sName": "ROIDate",
"bVisible": isColumnVisible("ROIDate"),
"mRender": function (data, type, full) { return ((!data) ? "" : formatFDDate(data)); }
};
allColumns["HardSoftSavings"] = {
"sTitle": "Hard/Soft Savings",
"mData": "HardSoftSavings",
"sName": "HardSoftSavings",
"bVisible": isColumnVisible("HardSoftSavings"),
"mRender": function (data, type, full) { return full.HardSoftSavings; }
};
allColumns["ScenarioStatus"] = {
"sTitle": "",
"mData": "ScenarioStatus",
"sName": "ScenarioStatus",
"bVisible": isColumnVisible("ScenarioStatus"),
"sClass": "nowrap bigCol",
"mRender": function (data, type, full) {
var cellhtml = "";
if (full.ScenarioStatus != null) {
var options = "";
if (mode == "main") {
for (i = 0; i < _allScenarioGroups.length; i++) {
var arr = _allScenarioGroups[i].split(":");
var isFound = false;
for (j = 0; j < full.Groups.length; j++) {
if (arr[0] == full.Groups[j].substr(full.Groups[j].lastIndexOf(">") + 1)) {
isFound = true;
break;
}
}
options += "<li data-scenarioId='" + full.Id + "' data-groupId='" + arr[0] + "'>" +
"<input type='checkbox' style='margin-right: 5px;' id='" + full.Id + '_' + arr[0] + "' ";
if (isFound)
options += "checked";
options += "/><input type='hidden' value='";
if (isFound)
options += "checked";
else
options += "unchecked";
options += "'/><span class='glyphicon glyphicon-refresh glyphicon-refresh-animate hide'></span><label for='" + full.Id + '_' + arr[0] + "'>" + arr[1] + "</label></li>";
}
if (options.length > 0) {
options = "<div class=\"btn-group dropdown scenarioGroupDropdown\" id=\"copyto_" + full.Id + "\">" +
"<button type='button' class='btn btn-xs dropdown-toggle dropdown-fix-pos' data-toggle='dropdown'>Groups&nbsp;<i class='fa fa-caret-down'></i></button>" +
"<ul class='dropdown-menu dropdown-menu-form dropdown-menu-right' role='menu' onclick='onMenuItemClick(event, $(this))'>" + options + "</ul>" +
"</div>";
}
}
cellhtml = ((full.ScenarioStatus == 1) ? "<a class=\"btn btn-xs btn-warning popover-warning popover-dark\" id=\"" + full.Id + "\" onclick=\"if(CheckLock(this.id, 'Scenario', '" + full.Id + "')) {ToggleStatus('" + full.Id + "', this);}\" title=\"Deactivate\" data-toggle=\"popover\" data-placement=\"left\"><i class=\"fa fa-times-circle-o\"></i></a>" : "<a class=\"btn btn-xs btn-primary popover-warning popover-dark\" id=\"" + full.Id + "\" onclick=\"if(CheckLock(this.id, 'Scenario', '" + full.Id + "')) {ToggleStatus('" + full.Id + "', this);}\" title=\"Activate\" data-toggle=\"popover\" data-placement=\"left\"><i class=\"fa fa-check-circle-o\"></i></a>");
cellhtml += "&nbsp;" + options;
}
return cellhtml;
}
};
allColumns["TeamName"] = {
"sTitle": "Team Name",
"sClass": "bigCol",
"mData": "TeamName",
"sName": "TeamName",
"bVisible": false,
"mRender": function (data, type, full) { return data; }
};
// SA. ENV-607. Performance indication
allColumns["PerformanceColor"] = {
"sTitle": "Performance Color",
"sClass": "smallCol",
"mData": "PerformanceColor",
"sName": "PerformanceColor",
"bVisible": false,
"mRender": function (data, type, full) {
return data;
}
};
allColumns["ProjectStatus"] = {
"sTitle": "Project Status",
"mData": "ProjectStatus",
"sName": "ProjectStatus",
"bVisible": isColumnVisible("ProjectStatus"),
"mRender": function (data, type, full) { return data; }
};
allColumns["StrategicGoals"] = {
"sTitle": "Strategic Goals",
"sClass": "smallCol",
"mData": "StrategicGoals",
"sName": "StrategicGoals",
"bVisible": isColumnVisible("StrategicGoals"),
"mRender": function (data, type, full) { return data; }
};
var sortedColumns = [];
if (_pagePreferences && (_pagePreferences.length > 0)) {
var columnsText = "";
for (var index = 0; index < _pagePreferences.length; index++)
if (_pagePreferences[index].Key == "forecastGridColOrder") {
columnsText = _pagePreferences[index].Value;
break;
}
if (columnsText.length > 0) {
var columns = columnsText.split(";");
for (var index = 0; index < columns.length; index++) {
var colName = columns[index];
if (colName in allColumns) {
var colObj = allColumns[colName];
sortedColumns.push(colObj);
}
}
}
}
if (sortedColumns.indexOf(allColumns["ProjectName"]) == -1) sortedColumns.push(allColumns["ProjectName"]);
if (sortedColumns.indexOf(allColumns["Name"]) == -1) sortedColumns.push(allColumns["Name"]);
if (sortedColumns.indexOf(allColumns["TeamName"]) == -1) sortedColumns.push(allColumns["TeamName"]);
if (sortedColumns.indexOf(allColumns["ProjectedRevenue"]) == -1) sortedColumns.push(allColumns["ProjectedRevenue"]);
if (sortedColumns.indexOf(allColumns["ExpectedGrossMargin"]) == -1) sortedColumns.push(allColumns["ExpectedGrossMargin"]);
if (sortedColumns.indexOf(allColumns["CalculatedGrossMargin"]) == -1) sortedColumns.push(allColumns["CalculatedGrossMargin"]);
if (sortedColumns.indexOf(allColumns["CalculatedGrossMargin_LM"]) == -1) sortedColumns.push(allColumns["CalculatedGrossMargin_LM"]);
if (sortedColumns.indexOf(allColumns["CGSplit"]) == -1) sortedColumns.push(allColumns["CGSplit"]);
if (sortedColumns.indexOf(allColumns["StartDate"]) == -1) sortedColumns.push(allColumns["StartDate"]);
if (sortedColumns.indexOf(allColumns["EndDate"]) == -1) sortedColumns.push(allColumns["EndDate"]);
if (sortedColumns.indexOf(allColumns["Priority"]) == -1) sortedColumns.push(allColumns["Priority"]);
if (sortedColumns.indexOf(allColumns["Probability"]) == -1) sortedColumns.push(allColumns["Probability"]);
if (sortedColumns.indexOf(allColumns["TDDirectCosts"]) == -1) sortedColumns.push(allColumns["TDDirectCosts"]);
if (sortedColumns.indexOf(allColumns["TDDirectCosts_LM"]) == -1) sortedColumns.push(allColumns["TDDirectCosts_LM"]);
if (sortedColumns.indexOf(allColumns["BUDirectCosts"]) == -1) sortedColumns.push(allColumns["BUDirectCosts"]);
if (sortedColumns.indexOf(allColumns["BUDirectCosts_LM"]) == -1) sortedColumns.push(allColumns["BUDirectCosts_LM"]);
if (sortedColumns.indexOf(allColumns["CostSavings"]) == -1) sortedColumns.push(allColumns["CostSavings"]);
if (sortedColumns.indexOf(allColumns["CostSavingsDuration"]) == -1) sortedColumns.push(allColumns["CostSavingsDuration"]);
if (sortedColumns.indexOf(allColumns["ROIDate"]) == -1) sortedColumns.push(allColumns["ROIDate"]);
if (sortedColumns.indexOf(allColumns["HardSoftSavings"]) == -1) sortedColumns.push(allColumns["HardSoftSavings"]);
if (sortedColumns.indexOf(allColumns["ScenarioStatus"]) == -1) sortedColumns.push(allColumns["ScenarioStatus"]);
if (sortedColumns.indexOf(allColumns["ProjectDeadline"]) == -1) sortedColumns.push(allColumns["ProjectDeadline"]);
if (sortedColumns.indexOf(allColumns["PerformanceColor"]) == -1) sortedColumns.push(allColumns["PerformanceColor"]);
if (sortedColumns.indexOf(allColumns["ProjectStatus"]) == -1) sortedColumns.push(allColumns["ProjectStatus"]);
if (sortedColumns.indexOf(allColumns["StrategicGoals"]) == -1) sortedColumns.push(allColumns["StrategicGoals"]);
// SA. ENV-905
var firstVisibleRow = _forecastPageState.data('pageState').$dataset['page-start'] || 0;
var pageSize = _forecastPageState.data('pageState').$dataset['page-size'] || 25;
firstVisibleRow = firstVisibleRow * pageSize;
if (firstVisibleRow === undefined)
firstVisibleRow = 0;
_evdttbl = $('#uomtbl').dataTable({
"iDisplayStart": firstVisibleRow,
"iDisplayLength": pageSize,
"order": [[_forecastPageState.data('pageState').$dataset['sort-order'] || 0, _forecastPageState.data('pageState').$dataset['sort-dir'] || '']],
"bPaginate": true,
"dom": 'Rlfrtip',
"colReorder": {/*do not allow to reorder first column*/
"fixedColumnsLeft": 1,
"fixedColumnsRight": 0,
"reorderCallback": function () {
redrawFreezeColumn();
onPreferencesItemClick();
}
},
"bSort": true,
"bFilter": false,
"bInfo": true,
"sScrollY": "",
"sScrollX": "",
"bScrollCollapse": true,
"bProcessing": false,
"bServerSide": true,
"bAutoWidth": false,
"sAjaxSource": '/ForecastDashboard/',
"sServerMethod": "POST",
"fnServerParams": bindServerParams,
"lengthMenu": [[25, 50, 100], [25, 50, 100]],
"stateSave": true,
// SA. ENV-905
"stateSaveCallback": function (settings, data) {
var pageSize = settings._iDisplayLength;
var displayStart = 0;
if ((pageSize !== undefined) && (pageSize > 0))
displayStart = Math.floor(settings._iDisplayStart / pageSize);
_forecastPageState.pageState('setData', ['page-size', pageSize]);
_forecastPageState.pageState('setData', ['page-start', displayStart]);
_forecastPageState.pageState('setData', ['sort-order', settings.aLastSort[0].col]);
_forecastPageState.pageState('setData', ['sort-dir', settings.aLastSort[0].dir]);
_forecastPageState.pageState('saveData');
},
"drawCallback": function (settings) {
if (!_hideTeamGroupping && $('#groupByTeamMode').prop('checked')) {
var api = this.api();
var rows = api.rows({ page: 'current' }).nodes();
var last = null;
api.column(api.column(':contains(Team)')[0], { page: 'current' }).data().each(function (group, i) {
if (last !== group) {
$(rows).eq(i).before(
'<tr class="group"><td><strong>' + group + '</strong></td><td colspan="19"></td></tr>'
);
last = group;
}
});
}
$(window).scroll(function () {
$('.scenarioGroupDropdown').removeClass('open');
});
$('.dropdown-fix-pos').click(function () {
dropDownFixPosition($(this), $(this).parent().find('.dropdown-menu'));
});
$(window).resize(function () {
redrawFreezeColumn();
});
redrawFreezeColumn();
},
"aoColumns": sortedColumns
});
function bindServerParams(aoData) {
var additionalFilters = $('#' + _additionalFiltersId).val();
aoData.push({ "name": "StartDate", "value": $('#filterStartDateChart').val() });
aoData.push({ "name": "EndDate", "value": $('#filterEndDateChart').val() });
aoData.push({ "name": "Type", "value": $('#filterType').val() });
aoData.push({ "name": "ProjectStatuses", "value": $('#filterStatus').val() || [] });
aoData.push({ "name": "StrategicGoals", "value": $('#filterGoals').val() || [] });
aoData.push({ "name": "Teams", "value": getSelectedTeamsOrViews("Teams") });
aoData.push({ "name": "Views", "value": getSelectedTeamsOrViews("Views") });
aoData.push({ "name": "ProjectTypes", "value": $('#filterClassification').val() || [] });
aoData.push({ "name": "StrategicGoals", "value": $('#filterGoal').val() || [] });
aoData.push({ "name": "FilterGroups", "value": $('#group').val() || [] });
aoData.push({ "name": "FilterGroupByTeam", "value": (_hideTeamGroupping ? 'false' : $('#groupByTeamMode').prop('checked')) });
aoData.push({ "name": "AdditionalParams", "value": additionalFilters ? JSON.parse(additionalFilters) : {} });
}
//init column trigger
var menuForColumns = _menu.find("#forecastGridColumns").children("ul");
if (menuForColumns) {
var htmlToAppend = "";
$(_evdttbl.dataTable().fnSettings().aoColumns).each(function (i, e) {
var text = e.sTitle;
if (text != "Project Name" && text != "Team Name") {
if (text == "")
text = "Options";
htmlToAppend += '<li class="padding-xs-hr"><div class="checkbox"><nobr><label><input type="checkbox" data-key="forecastCol_' + e.sName + '" ' + (isColumnVisible(e.sName) ? 'checked' : '') + ' class="columnVisibilityTrigger px" data-column="' + e.sName + '"> <span class="lbl">' + text + '</span></label></nobr></div></li>';
}
});
menuForColumns.append(htmlToAppend);
}
_menu.find("input:checkbox").change(function () {
onPreferencesItemClick($(this));
var dtColumn = _evdttbl.DataTable().column($(this).attr('data-column') + ":name");
var checked = $(this).is(":checked");
if (dtColumn != null) {
dtColumn.visible(checked);
//also hide columns of expanded main rows
$(".inactv-" + $(this).attr('data-column')).css("display", checked ? "" : "none");
}
redrawFreezeColumn();
});
$('#uomtbl_wrapper .dataTables_processing').addClass("table-caption");
$(_evdttbl.dataTable()).attr("data-dashboardMode", mode);
$('#uomtbl_wrapper').append("<div class=\"table-footer clearfix\"><div id=\"prjcts_footer_label\" class=\"DT-label\"></div><div id=\"prjcts_footer_paging\" class=\"DT-pagination\"></div></div>");
$('#uomtbl_wrapper .dataTables_info').appendTo('#prjcts_footer_label');
$('#uomtbl_wrapper .dataTables_paginate').appendTo('#prjcts_footer_paging');
$('#uomtbl_wrapper .dataTables_length').prependTo("#uomtbl_wrapper .table-footer");
$('#uomtbl_wrapper .dataTables_length').css("float", "left");
$('#uomtbl_wrapper .dataTables_length').css("margin-right", "10px");
if (mode != "main") {
$('#filterGroupContainer').hide();
}
// SA. ENV-607
_evdttbl.on('draw.dt', function () {
$(_evdttbl.DataTable().rows()[0]).each(function (i, e) {
var row = _evdttbl.DataTable().row(e);
$(row.node()).removeClass();
if (row.data().PerformanceColor && row.data().PerformanceColor.length > 0)
$(row.node()).addClass(row.data().PerformanceColor);
});
switchPerformanceMode();
});
}
function createDatePickers() {
var options2 = {
orientation: $('body').hasClass('right-to-left') ? "auto right" : 'auto auto',
startDate: '@Constants.MIN_SELECTABLE_DATE', // SA. ENV-1235. Disable incorrect dates input
endDate: '@Constants.MAX_SELECTABLE_DATE' // SA. ENV-1235. Disable incorrect dates input
};
//$('#bs-datepicker-rangeChartStart').datepicker(options2);
//$('#bs-datepicker-rangeChartEnd').datepicker(options2);
$('#bs-datepicker-rangeChart').datepicker(options2).on('changeDate', function (evt) {
if (evt.target.id == 'filterStartDateChart') {
var sDate = undefined;
var tmpValue = $('#filterStartDateChart').val();
var endDateValue = $('#filterEndDateChart').val();
if (tmpValue && (tmpValue.length > 0))
sDate = new Date(tmpValue);
if (!endDateValue || (endDateValue.length > 0)) {
$('#bs-datepicker-rangeChart').data('datepicker').pickers[1].prepopulate(sDate);
}
$('#filterEndDate').data('datepicker').setStartDate(sDate);
}
});
$('#filterStartDateChart').addClass('form-control');
$('#filterEndDateChart').addClass('form-control');
$('#filterStartDateChart').removeClass('text-box');
$('#filterEndDateChart').removeClass('text-box');
$('#filterStartDateChart').removeClass('single-line');
$('#filterEndDateChart').removeClass('single-line');
}
function isColumnVisible(colNameToCheck) {
// SA. ENV-815. If no prefs exist, by default column is visible
var result = true;
var key = "forecastCol_" + colNameToCheck;
if (_pagePreferences && (_pagePreferences.length > 0)) {
for (var index = 0; index < _pagePreferences.length; index++)
if (_pagePreferences[index].Key == key) {
// Column visibility info exists in the loaded prefs
result = _pagePreferences[index].Value;
break;
}
}
return result;
}
function redrawFreezeColumn() {
$("#uom_freeze").remove();
var div = $("<div id='uom_freeze'/>")
.css({
"position": "absolute",
"top": $("#uom_container").position().top,
"left": $("#uom_container").position().left,
"border": "0",
"margin": "0"
})
.html($("#uom_container").html()
.replace(/uomtbl/g, 'uomtbl_freeze'));
div.find("td").css({
//"margin-top": "-1px",
//"border-color":"red"
//"margin-left": "-1px"
});
div.find("table").css({
"border-width": "0px"
});
$.each(div.find("tr"), function (i, o) {
var tr = $(o);
$.each(tr.find("th"), function (j, o1) {
if (j > 0) {
$(o1).remove();
} else {
$(o1).addClass("fixed")
.height($("#uom_container").find("th").eq(j).height() + (isMSIE() ? 1 : 0))
.width($("#uom_container").find("th").eq(j).width() + 1)
.on("click", function () {
$("#uom_container").find("th").eq(0).click();
})
.css("max-width", $("#uom_container").find("th").eq(j).width());
div.width($("#uom_container").find("th").eq(j).outerWidth());
}
});
$.each(tr.find("td"), function (j, o1) {
if (j > 0) {
$(o1).remove();
} else {
$(o1).addClass("fixed")
.height($("#uom_container").find("tr").eq(i).find("td").eq(j).height() - (isMSIE() ? 0 : 0))
.width($("#uom_container").find("tr").eq(i).find("td").eq(j).width() + 1)
.css("max-width", $("#uom_container").find("tr").eq(i).find("td").eq(j).width() + 1);
}
});
});
$("#uom_container").append(div);
$("#uom_freeze").find(".table-footer").remove();
$('#uom_freeze .rowexpander').click(function () {
expandRow([this]);
});
//show tooltips for clipped cells
$('#uomtbl_freeze').on('mouseenter', 'td,th', function () {
var $this = $(this);
if (this.offsetWidth < this.scrollWidth && !$this.attr('title')) {
$this.attr('title', $this.text());
}
});
}
function isMSIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
return true;
return false;
}
function onPreferencesItemClick(menuItem) {
saveForecastDashboardPreferences();
}
// SA. ENV-815
function saveForecastDashboardPreferences() {
var section = getDataSection(_evdttbl);
var prefs = collectPreferences(section);
// Add grid columns order
var columns = "";
var dataKey = "forecastGridColOrder";
$.each(_evdttbl.dataTable().fnSettings().aoColumns, function (i, obj) {
columns += (";" + obj.mData);
});
if (columns.length > 0)
columns = columns.substr(1);
prefs.push({
Key: dataKey,
Value: columns
});
saveUserPagePreferences(prefs, section);
}
// SA. ENV-815
function loadForecastDashboardPreferences() {
var section = getDataSection($('#uomtbl'));
_pagePreferences = loadUserPagePreferences(section);
return section;
}
function initMenuItems() {
if (_menu.find("label:contains('Show Criteria')").length < 1) {
if (typeof LoadGraphData === 'function')
_menu.append('<li class="padding-xs-hr" style="@(displayedInTeamDashboard || displayedInViewDashboard? "display:none;" : "")" ><div class="checkbox"><label><input type="checkbox" data-key="showChart" id="chkShowChart" checked class="columnVisibilityTrigger px" onclick="ToggleChart()"/> <span class="lbl">Show Status Chart</span></label></div></li>');
_menu.append('<li class="padding-xs-hr"><div class="checkbox"><label><input type="checkbox" data-key="showCriteria" id="chkShowCriteria" checked class="columnVisibilityTrigger px" onclick="ToggleCriteria()"/> <span class="lbl">Show Filters</span></label></div></li>');
if (typeof LoadGraphData === 'function') {
_menu.append('<li class="padding-xs-hr" style="@(displayedInViewDashboard ? "display:none;" : "")"><label><span class="switcherLbl">Status Chart as</span><input type="checkbox" data-key="chartMode" onclick="switchFDGraph()" name="chMode" id="chFDGraphMode" class="switcher" /></label></li>');
_menu.append('<li class="padding-xs-hr" style="@(displayedInViewDashboard ? "display:none;" : "")"><label><span class="switcherLbl">Quantity as</span><input type="checkbox" data-key="uomMode" checked name="uomModeForecast" id="uomModeForecast" class="switcher px" onclick="LoadGraphData()"/></label></li>');
}
_menu.append('<li class="padding-xs-hr" style="@(displayedInViewDashboard ? "display:none;" : "")"><label><span class="switcherLbl">Expenditures</span><input type="checkbox" data-key="expendituresMode" checked name="expendituresMode" id="expendituresMode" class="switcher px" onclick="switchExpenditureMode()"/></label></li>');
_menu.append('<li class="divider"></li>');
if (typeof LoadPieData === 'function') {
_menu.append('<li class="padding-xs-hr"><label><span class="switcherLbl">Project Type Chart as</span><input type="checkbox" data-key="pieMode" checked name="pieModeForecast" id="pieModeForecast" class="switcher px" onclick="DrawPie()"/></label></li>');
_menu.append('<li class="padding-xs-hr"><label><span class="switcherLbl">Filter Status Chart</span><input type="checkbox" data-key="pieReloadMode" checked name="pieReload" id="pieReload" class="switcher px"/></label></li>');
_menu.append('<li class="divider"></li>');
}
if (typeof LoadPerformanceData === 'function') {
_menu.append('<li class="padding-xs-hr"><label><span class="switcherLbl">Performance Graph by</span><input type="checkbox" data-key="performanceChartMode" checked name="performanceChartMode" id="performanceChartMode" class="switcher px" onclick="switchPerformanceChartMode()"/></label></li>');
_menu.append('<li class="divider"></li>');
}
// ENV-608. End
// SA. ENV-792
if (!_hideTeamGroupping)
_menu.append('<li class="padding-xs-hr"><label><span class="switcherLbl">Group By Team</span><input type="checkbox" data-key="groupByTeamMode" checked name="groupByTeamMode" id="groupByTeamMode" class="switcher px" onclick="switchGroupByTeamMode()"/></label></li>');
// SA. ENV-607. ENV-608. Begin
_menu.append('<li class="padding-xs-hr" style="@(displayedInViewDashboard ? "display:none;" : "")"><label><span class="switcherLbl">Performance</span><input type="checkbox" data-key="performanceMode" checked name="performanceMode" id="performanceMode" class="switcher px" onclick="switchPerformanceMode()"/></label></li>');
_menu.append('<li class="padding-xs-hr dropdown-submenu pull-left" id="forecastGridColumns"><a tabindex="-1" href="javascript:;">Grid Options</a><ul class="dropdown-menu pull-left"></ul></li>');
}
}
function initForecastDashboard() {
_dataSectionName = loadForecastDashboardPreferences();
if (_menu == null)
_menu = $("#@Model.MenuId");
initMenuItems();
_menu.click(function (event) {
event.stopPropagation();
});
_forecastPageState = $('#criteria-container').pageState({
pageKey: (document.location.pathname + ' - forecast'),
});
// SA. ENV-815
if (_dataSectionName && (_dataSectionName.length > 0))
restorePreferences(_dataSectionName, _pagePreferences);
createDatePickers();
$('#uomModeForecast').switcher({
on_state_content: '# Hours',
off_state_content: '# Resources'
});
$('#uomModeForecast').parent().css("width", "93px");
$('#chFDGraphMode').switcher({
on_state_content: 'Quantity',
off_state_content: 'Cost'
});
$('#chFDGraphMode').parent().css("width", "90px");
$('#expendituresMode').switcher({
on_state_content: 'Labor',
off_state_content: 'Non-labor'
});
$('#expendituresMode').parent().css("width", "82px");
if (!_hideTeamGroupping) {
$('#groupByTeamMode').switcher({
on_state_content: 'On',
off_state_content: 'Off'
});
$('#groupByTeamMode').parent().css("width", "82px");
}
if ($('#chkShowChart').prop('checked'))
$('#graph-container').show();
else
$('#graph-container').hide();
if ($('#chkShowCriteria').prop('checked'))
$('#criteria-container').show();
else
$('#criteria-container').hide();
$('#uomtbl').on('mouseenter', 'td,th', function () {
var $this = $(this);
if (this.offsetWidth < this.scrollWidth && !$this.attr('title')) {
$this.attr('title', $this.text());
}
});
if (typeof LoadPieData === 'function') {
$('#pieModeForecast').switcher({
on_state_content: 'Cost',
off_state_content: 'Time'
});
$('#pieModeForecast').parent().css("width", "82px");
$('#pieReload').switcher({
on_state_content: 'Yes',
off_state_content: 'No'
});
$('#pieModeForecast').click(function () {
LoadPieData();
});
$('#pieReload').parent().css("width", "82px");
}
$('#performanceMode').switcher({
on_state_content: 'On',
off_state_content: 'Off'
});
$('#performanceMode').parent().css("width", "82px");
// ENV-608
$('#performanceChartMode').switcher({
on_state_content: 'Cost',
off_state_content: 'Type'
});
$('#performanceChartMode').parent().css("width", "82px");
initDataTable();
changeUomModeForecastSwitcherState($('#expendituresMode').prop('checked'));
setPerformanceMode();
if (typeof LoadGraphData === 'function')
LoadGraphData();
if (typeof LoadPieData === 'function')
LoadPieData();
$(window).scroll(function () {
$('.menuGroup').removeClass('open');
hideRedundantPopovers($('#uomtbl'), null);
});
$('.table-striped').scroll(function () {
$('.menuGroup').removeClass('open');
hideRedundantPopovers($('#uomtbl'), null);
});
$(document).click(function (event) {
$('.menuGroup').removeClass('open');
if (!$(event.target).is('[data-toggled="popover"]'))
hideRedundantPopovers($('#uomtbl'), null);
});
}
init.push(function () {
initForecastDashboard();
$(".fcboard-criteria-select2").select2();
});
</script>