EnVisageOnline/Main/Source/EnVisage/Views/ForecastDashboard/_forecastGrid.cshtml

255 lines
13 KiB
Plaintext

@using EnVisage.Code.Extensions
@using EnVisage.Models.Dashboard
@using Kendo.Mvc.UI
@model string
@*Model is grid name*@
@{
var projectUrl = Url.Action("Edit", "Project");
var gridName = Model;
}
<style type="text/css">
.no-scrollbar .k-grid-header
{
padding: 0 !important;
}
.no-scrollbar .k-grid-content
{
overflow-y: visible;
}
</style>
@(Html.Kendo().Grid<ForecastGridItem>()
.Name(Model).AutoBind(false)
.HtmlAttributes(new { style = "margin-top: 50px; display: none", @class="no-scrollbar" })
.DataSource(ds => ds
.Custom()
.Type("aspnetmvc-ajax")
.ServerPaging(true).ServerAggregates(true).ServerSorting(true).ServerGrouping(true)
.Transport(transport =>
{
transport.Read(read => read.Action("GetScenarios", "ForecastGrid").Type(HttpVerbs.Post).Data("getFilterParams"));
})
//.Group(group => group.Add(x => x.TeamName))
.Aggregates(aggr =>
{
aggr.Add(x => x.Id).Count();
aggr.Add(x => x.StartDate).Min();
aggr.Add(x => x.EndDate).Max();
aggr.Add(x => x.TDDirectCosts).Sum();
aggr.Add(x => x.TDDirectCosts_LM).Sum();
aggr.Add(x => x.BUDirectCosts).Sum();
aggr.Add(x => x.BUDirectCosts_LM).Sum();
aggr.Add(x => x.CostSavings).Sum();
aggr.Add(x => x.Duration).Average().Sum();
aggr.Add(x => x.ProjectDeadline).Min();
aggr.Add(x => x.ProjectedRevenue).Sum();
aggr.Add(x => x.ProjectNetImpact).Sum();
aggr.Add(x => x.ExpectedGrossMargin).Average();
aggr.Add(x => x.CalculatedMargin).Average();
})
.PageSize(25)
.Schema(schema =>
{
schema.Total("Total").Aggregates("Aggregates").Data("Data").Groups("Groups");
schema.Model(model =>
{
model.Field(x => x.StartDate);
model.Field(x => x.EndDate);
model.Field(x => x.ProjectDeadline);
model.Field(x => x.ROIDate);
});
})
)
.Events(events =>
{
events.DataBound("onGridDataBound");
events.ColumnReorder("function(e) { columnReorder(e, '" + gridName + "'); }");
events.ColumnResize("columnResize");
events.ColumnShow("function(e) { columnShowHide(e, '" + gridName + "'); }");
events.ColumnHide("function(e) { columnShowHide(e, '" + gridName + "'); }");
events.ExcelExport("onExcelExport");
})
.Pageable(paging => { paging.Enabled(true).PageSizes(new[] { 25, 50, 100 }); })
.Resizable(resize => resize.Columns(true))
.Sortable(sorting => sorting.Enabled(true))
.Groupable(group => group.Enabled(false).ShowFooter(true))
.Scrollable(scroll => scroll.Enabled(true))
.Reorderable(reorder => reorder.Columns(true))
.NoRecords("There are no matching records found for the given search criteria")
.Columns(columns =>
{
columns.Bound(x => x.ProjectName).Width(200)
.ClientTemplate("<a href='" + projectUrl + "/#=ProjectId#?backUrl=" + Url.Encode("/") + "&backName=dashboard'>#=ProjectName#</a>")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ProjectName')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ProjectName')#");
columns.Bound(x => x.Name).Width(250)
.Title("Scenario Name")
.ClientTemplate("#= scenarioNameTemplate(data) #")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'Name')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'Name')#");
columns.Bound(x => x.TeamName).Width(200)
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'TeamName')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'TeamName')#");
columns.Bound(x => x.ProjectStatus).Width(100)
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ProjectStatus')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ProjectStatus')#");
// Uncomment lines below to make column CompanyName visible in the Grid
//columns.Bound(x => x.CompanyName).Width(200)
// .Title("Company")
// .ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'CompanyName')#")
// .ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'CompanyName')#");
columns.Bound(x => x.ClientName).Width(200)
.Title("Client")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ClientName')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ClientName')#");
columns.Bound(x => x.ProjectedRevenue).Width(100)
.Format("{0:c}")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.ExpectedGrossMargin).Width(100)
.Title("Expected Margin")
.ClientTemplate("#=formatPercentValue(data.ExpectedGrossMargin)#")
.ClientFooterTemplate("#=getPercentSummaryValue(average)#")
.ClientGroupFooterTemplate("#=getPercentSummaryValue(average)#");
columns.Bound(x => x.CalculatedMargin).Width(100)
.Title("Calculated Margin")
.ClientTemplate("#=formatPercentValue(data.CalculatedMargin)#")
.ClientFooterTemplate("#=getPercentSummaryValue(average)#")
.ClientGroupFooterTemplate("#=getPercentSummaryValue(average)#");
columns.Bound(x => x.UseLMMargin).Width(100)
.Title("Gross/L&M")
.ClientTemplate("#= data.UseLMMargin ? 'L&M' : 'Gross' #")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'UseLMMargin')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'UseLMMargin')#");
columns.Bound(x => x.CGSplit).Width(100)
.Title("Labor / Materials")
.ClientTemplate("#=getCGSplit(data)#")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'CGSplit')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'CGSplit')#");
columns.Bound(x => x.ProjectDeadline).Width(100)
//.Format("d")
.ParseDate()
.ClientTemplate("#= data.ProjectDeadline == null ? '' : kendo.toString(data.ProjectDeadline, 'd') #")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ProjectDeadline')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ProjectDeadline')#");
columns.Bound(x => x.ProjectType).Width(100)
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ProjectType')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ProjectType')#");
columns.Bound(x => x.Probability).Width(100)
.ClientTemplate("#=getProbabilityStr(data)#")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'Probability')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'Probability')#");
columns.Bound(x => x.Priority).Width(100)
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'Priority')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'Priority')#");
columns.Bound(x => x.TDDirectCosts).Width(100)
.Title("Top Down Direct Costs")
.Groupable(false)
.Format("{0:c}")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.TDDirectCosts_LM).Width(100)
.Title("Top Down Direct Costs L&M")
.Groupable(false)
.Format("{0:c}")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.BUDirectCosts).Width(100)
.Title("Bottom Up Direct Costs")
.Groupable(false)
.Format("{0:c}")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.BUDirectCosts_LM).Width(100)
.Title("Bottom Up Direct Costs L&M")
.Groupable(false)
.Format("{0:c}")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.CostSavings).Width(100)
.Groupable(false)
.Format("{0:c}")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.CostSavingsDuration).Width(100)
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'CostSavingsDuration')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'CostSavingsDuration')#");
columns.Bound(x => x.ProjectNetImpact).Width(100)
.Groupable(false)
.Format("{0:c}")
.Title("Project Net Impact")
.ClientGroupFooterTemplate("#=getCurrencySummaryValue(sum)#")
.ClientFooterTemplate("#=getCurrencySummaryValue(sum)#");
columns.Bound(x => x.Duration).Width(100).Title("Duration (Weeks)")
.ClientFooterTemplate("#=getIntegerSummaryValue(average) #")
.ClientGroupFooterTemplate("#=getIntegerSummaryValue(average) #");
columns.Bound(x => x.StartDate).Width(100)
.Groupable(false)
//.Format("d")
.ParseDate()
.ClientTemplate("#= data.StartDate == null ? '' : kendo.toString(data.StartDate, 'd') #")
.ClientFooterTemplate("#=getDateSummaryValue(min) #")
.ClientGroupFooterTemplate("#=getDateSummaryValue(min) #");
columns.Bound(x => x.EndDate).Width(100)
.Groupable(false)
//.Format("d")
.ParseDate()
.ClientTemplate("#= data.EndDate == null ? '' : kendo.toString(data.EndDate, 'd') #")
.ClientFooterTemplate("#=getDateSummaryValue(max) #")
.ClientGroupFooterTemplate("#=getDateSummaryValue(max) #");
columns.Bound(x => x.ROIDate).Width(100)
.Groupable(false)
//.Format("d")
.ParseDate()
.ClientTemplate("#= data.ROIDate == null ? '' : kendo.toString(data.ROIDate, 'd') #")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ROIDate')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ROIDate')#");
columns.Bound(x => x.HardSoftSavings).Width(100)
.Groupable(false)
.Title("Hard/Soft Savings")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'HardSoftSavings')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'HardSoftSavings')#");
columns.Bound(x => x.StrategicGoals).Width(150)
.Groupable(false)
.Title("Strategic Goals")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'StrategicGoals')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'StrategicGoals')#");
columns.Bound(x => x.ScenarioStatus).Width(110)
.Groupable(false)
.Title("Options")
.HtmlAttributes(new { style = "overflow: visible" })
.ClientTemplate("#= scenarioStatusTemplate(data) #")
.ClientGroupFooterTemplate("#=getGroupSummaryText('Team Summary', '" + gridName + "', 'ScenarioStatus')#")
.ClientFooterTemplate("#=getGroupSummaryText('Summary', '" + gridName + "', 'ScenarioStatus')#");
columns.Bound(x => x.PerformanceColor).Hidden(true);
columns.Bound(x => x.TeamId).Hidden(true);
})
.Pdf(pdf => pdf
.AllPages()
.ForceProxy(true)
.RepeatHeaders()
.FileName(Model + "Report.pdf")
.ProxyURL(Url.Action("ExportResourceAvailability", "ForecastGrid"))
)
.Excel(excel => excel
.AllPages(true)
.ForceProxy(true)
.FileName(Model + "Report.xlsx")
.ProxyURL(Url.Action("ExportResourceAvailability", "ForecastGrid"))
)
)
@functions
{
string GetProjectUrl()
{
return Url.Action("Edit", "Project", new { id = "_rplcmnt_", backUrl = "/", backName = "dashboard" });
}
}
<script>
</script>