public async Task <IActionResult> View(int id) { try { var storedReport = await _reportService.GetReportResultsAsync(id); PageTitle = storedReport.request.Name ?? "Report Results"; var viewModel = new ReportResultsViewModel { Title = PageTitle, ReportResultId = id }; if (storedReport.criterion.StartDate.HasValue) { viewModel.StartDate = storedReport.criterion.StartDate; } if (storedReport.criterion.EndDate.HasValue) { viewModel.EndDate = storedReport.criterion.EndDate; } if (storedReport.criterion.SystemId.HasValue) { viewModel.SystemName = (await _siteService .GetSystemByIdAsync(storedReport.criterion.SystemId.Value)).Name; } if (storedReport.criterion.BranchId.HasValue) { viewModel.BranchName = await _siteService .GetBranchName(storedReport.criterion.BranchId.Value); } if (storedReport.criterion.ProgramId.HasValue) { viewModel.ProgramName = (await _siteService .GetProgramByIdAsync(storedReport.criterion.ProgramId.Value)).Name; } if (storedReport.criterion.GroupInfoId.HasValue) { viewModel.GroupName = (await _userService .GetGroupInfoByIdAsync(storedReport.criterion.GroupInfoId.Value)).Name; } if (storedReport.criterion.SchoolDistrictId.HasValue) { viewModel.SchoolDistrictName = (await _schoolService .GetDistrictByIdAsync(storedReport.criterion.SchoolDistrictId.Value)).Name; } if (storedReport.criterion.SchoolId.HasValue) { viewModel.SchoolName = (await _schoolService .GetByIdAsync(storedReport.criterion.SchoolId.Value)).Name; } if (storedReport.criterion.VendorCodeTypeId.HasValue) { viewModel.VendorCodeName = (await _vendorCodeService .GetTypeById(storedReport.criterion.VendorCodeTypeId.Value)).Description; } viewModel.ReportSet = JsonConvert .DeserializeObject <StoredReportSet>(storedReport.request.ResultJson); foreach (var report in viewModel.ReportSet.Reports) { int count = 0; int totalRows = report.Data.Count(); var displayRows = new List <List <string> >(); if (report.HeaderRow != null) { var display = new List <string>(); foreach (var dataItem in report.HeaderRow) { display.Add(FormatDataItem(dataItem)); } report.HeaderRow = display; } foreach (var resultRow in report.Data) { var displayRow = new List <string>(); foreach (var resultItem in resultRow) { displayRow.Add(FormatDataItem(resultItem)); } displayRows.Add(displayRow); count++; } report.Data = displayRows; if (report.FooterRow != null) { var display = new List <string>(); foreach (var dataItem in report.FooterRow) { display.Add(FormatDataItem(dataItem)); } report.FooterRow = display; } } return(View(viewModel)); } catch (GraException gex) { AlertDanger = gex.Message; return(RedirectToAction("Index")); } }
public async Task <FileStreamResult> Download(int id) { var storedReport = await _reportService.GetReportResultsAsync(id); PageTitle = storedReport.request.Name ?? "Report Results"; var viewModel = new ReportResultsViewModel { Title = PageTitle }; var criteriaDictionnary = new Dictionary <string, object>(); if (storedReport.criterion.StartDate.HasValue) { criteriaDictionnary.Add("Start Date", storedReport.criterion.StartDate.Value.ToString()); } if (storedReport.criterion.EndDate.HasValue) { criteriaDictionnary.Add("End Date", storedReport.criterion.EndDate.Value.ToString()); } if (storedReport.criterion.SystemId.HasValue) { criteriaDictionnary.Add("System", (await _siteService .GetSystemByIdAsync(storedReport.criterion.SystemId.Value)).Name); } if (storedReport.criterion.BranchId.HasValue) { criteriaDictionnary.Add("Branch", await _siteService .GetBranchName(storedReport.criterion.BranchId.Value)); } if (storedReport.criterion.ProgramId.HasValue) { criteriaDictionnary.Add("Program", (await _siteService .GetProgramByIdAsync(storedReport.criterion.ProgramId.Value)).Name); } if (storedReport.criterion.GroupInfoId.HasValue) { criteriaDictionnary.Add("Group", (await _userService .GetGroupInfoByIdAsync(storedReport.criterion.GroupInfoId.Value)).Name); } if (storedReport.criterion.SchoolDistrictId.HasValue) { criteriaDictionnary.Add("School District", (await _schoolService .GetDistrictByIdAsync(storedReport.criterion.SchoolDistrictId.Value)).Name); } if (storedReport.criterion.SchoolId.HasValue) { criteriaDictionnary.Add("Program", (await _schoolService .GetByIdAsync(storedReport.criterion.SchoolId.Value)).Name); } if (storedReport.criterion.VendorCodeTypeId.HasValue) { criteriaDictionnary.Add("Program", (await _vendorCodeService .GetTypeById(storedReport.criterion.VendorCodeTypeId.Value)).Description); } viewModel.ReportSet = JsonConvert .DeserializeObject <StoredReportSet>(storedReport.request.ResultJson); var ms = new System.IO.MemoryStream(); using (var workbook = SpreadsheetDocument.Create(ms, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook)) { var workbookPart = workbook.AddWorkbookPart(); workbook.WorkbookPart.Workbook = new Workbook { Sheets = new Sheets() }; var stylesPart = workbook.WorkbookPart.AddNewPart <WorkbookStylesPart>(); stylesPart.Stylesheet = GetStylesheet(); stylesPart.Stylesheet.Save(); foreach (var report in viewModel.ReportSet.Reports) { var sheetPart = workbook.WorkbookPart.AddNewPart <WorksheetPart>(); var sheetData = new SheetData(); sheetPart.Worksheet = new Worksheet(sheetData); var sheets = workbook.WorkbookPart.Workbook.GetFirstChild <Sheets>(); var relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart); uint sheetId = 1; if (sheets.Elements <Sheet>().Count() > 0) { sheetId = sheets.Elements <Sheet>() .Select(_ => _.SheetId.Value).Max() + 1; } string sheetName = report.Title ?? PageTitle ?? "Report Results"; if (sheetName.Length > 31) { sheetName = sheetName.Substring(0, 31); } var sheet = new Sheet { Id = relationshipId, SheetId = sheetId, Name = sheetName }; sheets.Append(sheet); var maximumColumnWidth = new Dictionary <int, int>(); if (report.HeaderRow != null) { var headerRow = new Row(); int columnNumber = 0; foreach (var dataItem in report.HeaderRow) { (var cell, var length) = CreateCell(dataItem); cell.StyleIndex = ExcelStyleIndexBold; headerRow.AppendChild(cell); if (maximumColumnWidth.ContainsKey(columnNumber)) { maximumColumnWidth[columnNumber] = Math.Max(maximumColumnWidth[columnNumber], length); } else { maximumColumnWidth.Add(columnNumber, length); } columnNumber++; } sheetData.Append(headerRow); } foreach (var resultRow in report.Data) { var row = new Row(); int columnNumber = 0; foreach (var resultItem in resultRow) { (var cell, var length) = CreateCell(resultItem); row.AppendChild(cell); if (maximumColumnWidth.ContainsKey(columnNumber)) { maximumColumnWidth[columnNumber] = Math.Max(maximumColumnWidth[columnNumber], length); } else { maximumColumnWidth.Add(columnNumber, length); } columnNumber++; } sheetData.Append(row); } if (report.FooterRow != null) { var footerRow = new Row(); int columnNumber = 0; foreach (var dataItem in report.FooterRow) { (var cell, var length) = CreateCell(dataItem); cell.StyleIndex = ExcelStyleIndexBold; footerRow.AppendChild(cell); if (maximumColumnWidth.ContainsKey(columnNumber)) { maximumColumnWidth[columnNumber] = Math.Max(maximumColumnWidth[columnNumber], length); } else { maximumColumnWidth.Add(columnNumber, length); } columnNumber++; } sheetData.Append(footerRow); } if (report.FooterText != null) { foreach (var dataItem in report.FooterText) { var footerTextRow = new Row(); (var cell, var length) = CreateCell(dataItem); footerTextRow.AppendChild(cell); sheetData.Append(footerTextRow); } } foreach (var value in maximumColumnWidth.Keys.OrderByDescending(_ => _)) { var columnId = value + 1; var width = maximumColumnWidth[value] + ExcelPaddingCharacters; Columns cs = sheet.GetFirstChild <Columns>(); if (cs != null) { var columnElements = cs.Elements <Column>() .Where(_ => _.Min == columnId && _.Max == columnId); if (columnElements.Count() > 0) { var column = columnElements.First(); column.Width = width; column.CustomWidth = true; } else { var column = new Column { Min = (uint)columnId, Max = (uint)columnId, Width = width, CustomWidth = true }; cs.Append(column); } } else { cs = new Columns(); cs.Append(new Column { Min = (uint)columnId, Max = (uint)columnId, Width = width, CustomWidth = true }); sheetPart.Worksheet.InsertAfter(cs, sheetPart.Worksheet.GetFirstChild <SheetFormatProperties>()); } } } var criteriaSheetPart = workbook.WorkbookPart.AddNewPart <WorksheetPart>(); var criteriaSheetData = new SheetData(); criteriaSheetPart.Worksheet = new Worksheet(criteriaSheetData); var criteriaSheets = workbook.WorkbookPart.Workbook.GetFirstChild <Sheets>(); var criteriaRelationshipId = workbook.WorkbookPart.GetIdOfPart(criteriaSheetPart); uint criteriaSheetId = 1; if (criteriaSheets.Elements <Sheet>().Count() > 0) { criteriaSheetId = criteriaSheets.Elements <Sheet>() .Select(_ => _.SheetId.Value).Max() + 1; } string criteriaSheetName = "Report Criteria"; var criteriaSheet = new Sheet { Id = criteriaRelationshipId, SheetId = criteriaSheetId, Name = criteriaSheetName }; criteriaSheets.Append(criteriaSheet); var criteriaMaximumColumnWidth = new Dictionary <int, int>(); foreach (var criterion in criteriaDictionnary) { var row = new Row(); (var nameCell, var nameLength) = CreateCell(criterion.Key); row.AppendChild(nameCell); if (criteriaMaximumColumnWidth.ContainsKey(0)) { criteriaMaximumColumnWidth[0] = Math.Max(criteriaMaximumColumnWidth[0], nameLength); } else { criteriaMaximumColumnWidth.Add(0, nameLength); } (var dataCell, var dataLength) = CreateCell(criterion.Value); row.AppendChild(dataCell); if (criteriaMaximumColumnWidth.ContainsKey(1)) { criteriaMaximumColumnWidth[1] = Math.Max(criteriaMaximumColumnWidth[1], dataLength); } else { criteriaMaximumColumnWidth.Add(1, dataLength); } criteriaSheetData.Append(row); } foreach (var value in criteriaMaximumColumnWidth.Keys.OrderByDescending(_ => _)) { var columnId = value + 1; var width = criteriaMaximumColumnWidth[value] + ExcelPaddingCharacters; Columns cs = criteriaSheet.GetFirstChild <Columns>(); if (cs != null) { var columnElements = cs.Elements <Column>() .Where(_ => _.Min == columnId && _.Max == columnId); if (columnElements.Count() > 0) { var column = columnElements.First(); column.Width = width; column.CustomWidth = true; } else { var column = new Column { Min = (uint)columnId, Max = (uint)columnId, Width = width, CustomWidth = true }; cs.Append(column); } } else { cs = new Columns(); cs.Append(new Column { Min = (uint)columnId, Max = (uint)columnId, Width = width, CustomWidth = true }); criteriaSheetPart.Worksheet.InsertAfter(cs, criteriaSheetPart.Worksheet.GetFirstChild <SheetFormatProperties>()); } } workbook.Save(); workbook.Close(); ms.Seek(0, System.IO.SeekOrigin.Begin); var fileOutput = new FileStreamResult(ms, ExcelMimeType) { FileDownloadName = $"{PageTitle}.{ExcelFileExtension}" }; return(fileOutput); } }
public async Task <IActionResult> View(int id) { try { var storedReport = await _reportService.GetReportResultsAsync(id); PageTitle = storedReport.request.Name ?? "Report Results"; var viewModel = new ReportResultsViewModel { Title = PageTitle, ReportResultId = id }; viewModel.ReportSet = JsonConvert .DeserializeObject <StoredReportSet>(storedReport.request.ResultJson); foreach (var report in viewModel.ReportSet.Reports) { int count = 0; int totalRows = report.Data.Count(); var displayRows = new List <List <string> >(); if (report.HeaderRow != null) { var display = new List <string>(); foreach (var dataItem in report.HeaderRow) { display.Add(FormatDataItem(dataItem)); } report.HeaderRow = display; } foreach (var resultRow in report.Data) { var displayRow = new List <string>(); foreach (var resultItem in resultRow) { displayRow.Add(FormatDataItem(resultItem)); } displayRows.Add(displayRow); count++; } report.Data = displayRows; if (report.FooterRow != null) { var display = new List <string>(); foreach (var dataItem in report.FooterRow) { display.Add(FormatDataItem(dataItem)); } report.FooterRow = display; } } return(View(viewModel)); } catch (GraException gex) { AlertDanger = gex.Message; return(RedirectToAction("Index")); } }