public async Task <IActionResult> DownloadCompareData(int year = 0) { if (year == 0) { year = SharedBusinessLogic.SharedOptions.FirstReportingYear; } var result = await CompareEmployers(year) as ViewResult; var viewModel = result.Model as CompareViewModel; var data = viewModel?.CompareReports; //Ensure we some data if (data == null || !data.Any()) { return(new HttpNotFoundResult($"There is no employer data for year {year}")); } var model = CompareBusinessLogic.GetCompareDatatable(data); //Setup the HTTP response var contentDisposition = new ContentDisposition { FileName = $"Compared GPG Data {year}-{(year + 1).ToTwoDigitYear()}.csv", Inline = false }; HttpContext.SetResponseHeader("Content-Disposition", contentDisposition.ToString()); /* No Longer required as AspNetCore has response buffering on by default * Response.BufferOutput = true; */ //Track the download await TrackPageViewAsync(contentDisposition.FileName); //Return the data return(Content(model.ToCSV(), "text/csv")); }
public async Task <IActionResult> CompareEmployers(int year, string employers = null) { if (year == 0) { CompareViewService.SortColumn = null; CompareViewService.SortAscending = true; year = SharedBusinessLogic.SharedOptions.FirstReportingYear; } //Load employers from querystring (via shared email) if (!string.IsNullOrWhiteSpace(employers)) { var comparedEmployers = employers.SplitI("-"); if (comparedEmployers.Any()) { CompareViewService.ClearBasket(); CompareViewService.AddRangeToBasket(comparedEmployers); CompareViewService.SortAscending = true; CompareViewService.SortColumn = null; return(RedirectToAction("CompareEmployers", new { year })); } } //If the session is lost then load employers from the cookie else if (CompareViewService.BasketItemCount == 0) { CompareViewService.LoadComparedEmployersFromCookie(); } ViewBag.ReturnUrl = Url.Action("CompareEmployers", new { year }); //Clear the default back url of the employer hub pages EmployerBackUrl = null; ReportBackUrl = null; //Get the compare basket organisations var compareReports = await CompareBusinessLogic.GetCompareDataAsync( CompareViewService.ComparedEmployers.Value.AsEnumerable(), year, CompareViewService.SortColumn, CompareViewService.SortAscending); //Track the compared employers var lastComparedEmployerList = CompareViewService.ComparedEmployers.Value.ToList().ToSortedSet().ToDelimitedString(); if (CompareViewService.LastComparedEmployerList != lastComparedEmployerList && IsAction("CompareEmployers")) { var employerIds = compareReports.Select(r => r.EncOrganisationId).ToSortedSet(); await TrackPageViewAsync( $"compare-employers: {employerIds.ToDelimitedString()}", $"{ViewBag.ReturnUrl}?{employerIds.ToEncapsulatedString("e=", null, "&", "&", false)}"); foreach (var employer in compareReports) { await TrackPageViewAsync( $"{employer.EncOrganisationId}: {employer.OrganisationName}", $"{ViewBag.ReturnUrl}?{employer.EncOrganisationId}={employer.OrganisationName}"); } CompareViewService.LastComparedEmployerList = lastComparedEmployerList; } //Generate the shared links var shareEmailUrl = Url.Action( nameof(CompareEmployers), "Compare", new { year, employers = CompareViewService.ComparedEmployers.Value.ToList().ToDelimitedString("-") }, Request.Scheme); ViewBag.BasketViewModel = new CompareBasketViewModel { CanAddEmployers = true, CanViewCompare = false, CanClearCompare = true }; return(View( "CompareEmployers", new CompareViewModel { LastSearchUrl = SearchViewService.GetLastSearchUrl(), CompareReports = compareReports, CompareBasketCount = CompareViewService.BasketItemCount, ShareEmailUrl = CompareViewService.BasketItemCount <= CompareViewService.MaxCompareBasketShareCount ? shareEmailUrl : null, Year = year, SortAscending = CompareViewService.SortAscending, SortColumn = CompareViewService.SortColumn })); }