@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; } @(Html.Kendo().Grid() .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("#=ProjectName#") .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" }); } }