public string List_ExportV2Implementation(DatasourceRequest datasourceRequest, ExportOptionsV2 exportOptions, List <AggregatorInfo <zAppDev.DotNet.Framework.Identity.Model.ApplicationUser> > aggregatorsInfo) { var watch = System.Diagnostics.Stopwatch.StartNew(); long elapsedMilliseconds = 0; switch (exportOptions.Range) { case ExportHelper.Range.ALL: datasourceRequest.StartRow = 0; datasourceRequest.PageSize = int.MaxValue; break; case ExportHelper.Range.TOP100: datasourceRequest.StartRow = 0; datasourceRequest.PageSize = 100; break; } var queryable = Get_List_DatasourceQueryable(datasourceRequest); var formattings = new Dictionary <string, string>(); var path = ""; var exportHelper = new ExportHelperV2 <zAppDev.DotNet.Framework.Identity.Model.ApplicationUser>(exportOptions, new Dictionary <string, Func <zAppDev.DotNet.Framework.Identity.Model.ApplicationUser, object> > { { "UserName", item => item?.UserName }, { "Email", item => item?.Email }, { "Name", item => item?.Name }, { "LockoutEnabled", item => item?.LockoutEnabled }, }); if (exportHelper.Options.ColumnInfo == null) { exportHelper.Options.ColumnInfo = new List <ColumnOptionsV2> { new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_UserName"), Formatting = "", Name = "UserName", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_Email"), Formatting = "", Name = "Email", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_Name"), Formatting = "", Name = "Name", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_LockoutEnabled"), Formatting = "", Name = "LockoutEnabled", ExcelFormat = @"" }, }; } if (string.IsNullOrWhiteSpace(exportHelper.Options.Filename)) { exportHelper.Options.Filename = "List"; } if (datasourceRequest.GroupBy.Any()) { var groups = DatasourceRetriever.RetrieveGrouped(datasourceRequest, queryable, q => q.UserName, aggregatorsInfo); var aggregators = DatasourceRetriever.RetrieveGrouped(datasourceRequest, queryable, q => q.UserName, aggregatorsInfo, true); GroupsHelper.FormatGroupedAggregators(aggregators, formattings); watch.Stop(); elapsedMilliseconds = watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: List export query with grouping and range {exportOptions.Range} took {elapsedMilliseconds}ms"); watch.Restart(); path = exportHelper.Export(groups, aggregators); watch.Stop(); elapsedMilliseconds += watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: List export to excel with grouping and range {exportOptions.Range} took {watch.ElapsedMilliseconds}ms"); } else { var items = DatasourceRetriever.Retrieve(datasourceRequest, queryable);; var aggregators = RuntimePredicateBuilder.BuildAggregatorPredicates(aggregatorsInfo); foreach (var a in aggregators) { var formatting = formattings.ContainsKey(a.Column) ? formattings[a.Column] : null; a.Calculate(queryable, formatting); } var loadedItems = items.ToList(); watch.Stop(); elapsedMilliseconds = watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: List export query with range {exportOptions.Range} took {elapsedMilliseconds}ms"); watch.Restart(); path = exportHelper.Export(loadedItems, aggregators); watch.Stop(); elapsedMilliseconds += watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: List export to excel with range {exportOptions.Range} took {elapsedMilliseconds}ms"); } var content = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), path)); var fileName = Path.GetFileName(path); var downloadKey = FileHelper.PendingDownloadInstance.Add("UsersList", content, fileName); _logger.Info($"ExportV2 Performance: Total export time for List: {elapsedMilliseconds}ms"); return(downloadKey); }
public string List_ExportImplementation(DatasourceRequest datasourceRequest, ExportHelper.ExportOptions exportOptions, List <AggregatorInfo <zAppDev.DotNet.Framework.Identity.Model.ApplicationUser> > aggregatorsInfo) { if (exportOptions.Range == ExportHelper.Range.TOP100) { datasourceRequest.StartRow = 0; datasourceRequest.PageSize = 100; } else if (exportOptions.Range == ExportHelper.Range.ALL) { datasourceRequest.StartRow = 0; datasourceRequest.PageSize = int.MaxValue; } if (string.IsNullOrWhiteSpace(exportOptions.Filename)) { exportOptions.Filename = "List"; } if (exportOptions.ColumnOptions == null) { exportOptions.ColumnOptions = new List <ExportHelper.ColumnOptions> { new ExportHelper.ColumnOptions { Column = "UserName", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "Email", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "Name", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "LockoutEnabled", IsVisible = true }, }; } var queryable = Get_List_DatasourceQueryable(datasourceRequest); var totalRows = DatasourceRetriever.ApplyDynamicFilterToQueryable(datasourceRequest, queryable).Count(); var items = DatasourceRetriever.Retrieve(datasourceRequest, queryable);; var dto = items.Select(i => new List1DataSet_ApplicationUserDTO(i)); var formattings = new Dictionary <string, string>(); var aggregators = RuntimePredicateBuilder.BuildAggregatorPredicates(aggregatorsInfo); foreach (var a in aggregators) { var formatting = formattings.ContainsKey(a.Column) ? formattings[a.Column] : null; a.Calculate(queryable, formatting); } var exportDataDTO = new List <ExportHelper.ExportRecordDTO>(); foreach (var record in dto) { var recordDTO = new ExportHelper.ExportRecordDTO(); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.UserName), Value = record?.UserName, ColumnDataType = "string", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_UserName") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.Email), Value = record?.Email, ColumnDataType = "string", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_Email") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.Name), Value = record?.Name, ColumnDataType = "string", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_Name") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.LockoutEnabled), Value = record?.LockoutEnabled, ColumnDataType = "bool", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("UsersList", "RES_LIST_List_COLUMN_LockoutEnabled") }); exportDataDTO.Add(recordDTO); } if (aggregators.Count > 0) { foreach (AggregatorType aggregatorType in Enum.GetValues(typeof(AggregatorType))) { var emptyAggregatorRow = true; var recordDTO = new ExportHelper.ExportRecordDTO(); foreach (var columnOption in exportOptions.ColumnOptions) { var aggregatorValue = ""; switch (aggregatorType) { case AggregatorType.COUNT: if (columnOption.CountIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.COUNT); aggregatorValue = $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandCount")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; case AggregatorType.SUM: if (columnOption.SumIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.SUM); aggregatorValue = $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandTotal")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; case AggregatorType.AVERAGE: if (columnOption.AverageIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.AVERAGE); aggregatorValue += $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandAverage")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; } recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = columnOption.Column, Value = aggregatorValue, ColumnDataType = "string", Format = "" }); } if (!emptyAggregatorRow) { exportDataDTO.Add(recordDTO); } } } var path = ExportHelper.ExportList(exportDataDTO, exportOptions, totalRows); var content = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), path)); var fileName = Path.GetFileName(path); return(FileHelper.PendingDownloadInstance.Add("UsersList", content, fileName)); }
public string LetterOfCreditListNoDT_ExportV2Implementation(DatasourceRequest datasourceRequest, ExportOptionsV2 exportOptions, List <AggregatorInfo <DSS5_SupplyChainFinancialsOptimisation.BO.LetterOfCredit> > aggregatorsInfo) { var watch = System.Diagnostics.Stopwatch.StartNew(); long elapsedMilliseconds = 0; switch (exportOptions.Range) { case ExportHelper.Range.ALL: datasourceRequest.StartRow = 0; datasourceRequest.PageSize = int.MaxValue; break; case ExportHelper.Range.TOP100: datasourceRequest.StartRow = 0; datasourceRequest.PageSize = 100; break; } var queryable = Get_LetterOfCreditListNoDT_DatasourceQueryable(datasourceRequest); var formattings = new Dictionary <string, string>(); var path = ""; var exportHelper = new ExportHelperV2 <DSS5_SupplyChainFinancialsOptimisation.BO.LetterOfCredit>(exportOptions, new Dictionary <string, Func <DSS5_SupplyChainFinancialsOptimisation.BO.LetterOfCredit, object> > { { "Id", item => item?.Id }, { "ValueOfLoC", item => item?.ValueOfLoC }, { "DateOfValidity", item => item?.DateOfValidity }, { "DateOfExpiry", item => item?.DateOfExpiry }, { "Calculated", item => item?.Calculated }, }); if (exportHelper.Options.ColumnInfo == null) { exportHelper.Options.ColumnInfo = new List <ColumnOptionsV2> { new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_Id"), Formatting = "", Name = "Id", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_ValueOfLoC"), Formatting = "#,0.00;'-'#,0.00;'0'", Name = "ValueOfLoC", ExcelFormat = @"#,##0.00;-#,##0.00;#,##0.00" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_DateOfValidity"), Formatting = "dd/MM/yyyy", Name = "DateOfValidity", ExcelFormat = @"dd/MM/yyyy" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_DateOfExpiry"), Formatting = "dd/MM/yyyy", Name = "DateOfExpiry", ExcelFormat = @"dd/MM/yyyy" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_Calculated"), Formatting = "#,0.00;'-'#,0.00;'0'", Name = "Calculated", ExcelFormat = @"#,##0.00;-#,##0.00;#,##0.00" }, }; } if (string.IsNullOrWhiteSpace(exportHelper.Options.Filename)) { exportHelper.Options.Filename = "LetterOfCreditListNoDT"; } if (datasourceRequest.GroupBy.Any()) { var groups = DatasourceRetriever.RetrieveGrouped(datasourceRequest, queryable, q => q.Id, aggregatorsInfo); var aggregators = DatasourceRetriever.RetrieveGrouped(datasourceRequest, queryable, q => q.Id, aggregatorsInfo, true); GroupsHelper.FormatGroupedAggregators(aggregators, formattings); watch.Stop(); elapsedMilliseconds = watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: LetterOfCreditListNoDT export query with grouping and range {exportOptions.Range} took {elapsedMilliseconds}ms"); watch.Restart(); path = exportHelper.Export(groups, aggregators); watch.Stop(); elapsedMilliseconds += watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: LetterOfCreditListNoDT export to excel with grouping and range {exportOptions.Range} took {watch.ElapsedMilliseconds}ms"); } else { var items = DatasourceRetriever.Retrieve(datasourceRequest, queryable);; var aggregators = RuntimePredicateBuilder.BuildAggregatorPredicates(aggregatorsInfo); foreach (var a in aggregators) { var formatting = formattings.ContainsKey(a.Column) ? formattings[a.Column] : null; a.Calculate(queryable, formatting); } var loadedItems = items.ToList(); watch.Stop(); elapsedMilliseconds = watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: LetterOfCreditListNoDT export query with range {exportOptions.Range} took {elapsedMilliseconds}ms"); watch.Restart(); path = exportHelper.Export(loadedItems, aggregators); watch.Stop(); elapsedMilliseconds += watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: LetterOfCreditListNoDT export to excel with range {exportOptions.Range} took {elapsedMilliseconds}ms"); } var content = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), path)); var fileName = Path.GetFileName(path); var downloadKey = FileHelper.PendingDownloadInstance.Add("LetterOfCreditList", content, fileName); _logger.Info($"ExportV2 Performance: Total export time for LetterOfCreditListNoDT: {elapsedMilliseconds}ms"); return(downloadKey); }
public string LetterOfCreditListNoDT_ExportImplementation(DatasourceRequest datasourceRequest, ExportHelper.ExportOptions exportOptions, List <AggregatorInfo <DSS5_SupplyChainFinancialsOptimisation.BO.LetterOfCredit> > aggregatorsInfo) { if (exportOptions.Range == ExportHelper.Range.TOP100) { datasourceRequest.StartRow = 0; datasourceRequest.PageSize = 100; } else if (exportOptions.Range == ExportHelper.Range.ALL) { datasourceRequest.StartRow = 0; datasourceRequest.PageSize = int.MaxValue; } if (string.IsNullOrWhiteSpace(exportOptions.Filename)) { exportOptions.Filename = "LetterOfCreditListNoDT"; } if (exportOptions.ColumnOptions == null) { exportOptions.ColumnOptions = new List <ExportHelper.ColumnOptions> { new ExportHelper.ColumnOptions { Column = "Id", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "ValueOfLoC", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "DateOfValidity", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "DateOfExpiry", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "Calculated", IsVisible = true }, }; } var queryable = Get_LetterOfCreditListNoDT_DatasourceQueryable(datasourceRequest); var totalRows = DatasourceRetriever.ApplyDynamicFilterToQueryable(datasourceRequest, queryable).Count(); var items = DatasourceRetriever.Retrieve(datasourceRequest, queryable);; var dto = items.Select(i => new LetterOfCredit_LetterOfCreditDTO(i)); var formattings = new Dictionary <string, string>(); formattings.Add("ValueOfLoC", "#,0.00;'-'#,0.00;'0'"); formattings.Add("DateOfValidity", "dd/MM/yyyy"); formattings.Add("DateOfExpiry", "dd/MM/yyyy"); formattings.Add("Calculated", "#,0.00;'-'#,0.00;'0'"); var aggregators = RuntimePredicateBuilder.BuildAggregatorPredicates(aggregatorsInfo); foreach (var a in aggregators) { var formatting = formattings.ContainsKey(a.Column) ? formattings[a.Column] : null; a.Calculate(queryable, formatting); } var exportDataDTO = new List <ExportHelper.ExportRecordDTO>(); foreach (var record in dto) { var recordDTO = new ExportHelper.ExportRecordDTO(); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.Id), Value = record?.Id, ColumnDataType = "int", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_Id") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.ValueOfLoC), Value = record?.ValueOfLoC, ColumnDataType = "decimal", Format = "#,0.00;'-'#,0.00;'0'", ExcelFormat = @"#,##0.00;-#,##0.00;#,##0.00", Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_ValueOfLoC") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.DateOfValidity), Value = record?.DateOfValidity, ColumnDataType = "DateTime", Format = "dd/MM/yyyy", ExcelFormat = @"dd/MM/yyyy", Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_DateOfValidity") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.DateOfExpiry), Value = record?.DateOfExpiry, ColumnDataType = "DateTime", Format = "dd/MM/yyyy", ExcelFormat = @"dd/MM/yyyy", Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_DateOfExpiry") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.Calculated), Value = record?.Calculated, ColumnDataType = "decimal", Format = "#,0.00;'-'#,0.00;'0'", ExcelFormat = @"#,##0.00;-#,##0.00;#,##0.00", Caption = BaseViewPage <object> .GetResourceValue("LetterOfCreditList", "RES_LIST_LetterOfCreditListNoDT_COLUMN_Calculated") }); exportDataDTO.Add(recordDTO); } if (aggregators.Count > 0) { foreach (AggregatorType aggregatorType in Enum.GetValues(typeof(AggregatorType))) { var emptyAggregatorRow = true; var recordDTO = new ExportHelper.ExportRecordDTO(); foreach (var columnOption in exportOptions.ColumnOptions) { var aggregatorValue = ""; switch (aggregatorType) { case AggregatorType.COUNT: if (columnOption.CountIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.COUNT); aggregatorValue = $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandCount")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; case AggregatorType.SUM: if (columnOption.SumIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.SUM); aggregatorValue = $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandTotal")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; case AggregatorType.AVERAGE: if (columnOption.AverageIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.AVERAGE); aggregatorValue += $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandAverage")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; } recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = columnOption.Column, Value = aggregatorValue, ColumnDataType = "string", Format = "" }); } if (!emptyAggregatorRow) { exportDataDTO.Add(recordDTO); } } } var path = ExportHelper.ExportList(exportDataDTO, exportOptions, totalRows); var content = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), path)); var fileName = Path.GetFileName(path); return(FileHelper.PendingDownloadInstance.Add("LetterOfCreditList", content, fileName)); }
public string OrderProposalList_ExportV2Implementation(DatasourceRequest datasourceRequest, ExportOptionsV2 exportOptions, List <AggregatorInfo <DSS1_RetailerDriverStockOptimisation.BO.OrderForecastDetails> > aggregatorsInfo) { var watch = System.Diagnostics.Stopwatch.StartNew(); long elapsedMilliseconds = 0; switch (exportOptions.Range) { case ExportHelper.Range.ALL: datasourceRequest.StartRow = 0; datasourceRequest.PageSize = int.MaxValue; break; case ExportHelper.Range.TOP100: datasourceRequest.StartRow = 0; datasourceRequest.PageSize = 100; break; } var queryable = Get_OrderProposalList_DatasourceQueryable(datasourceRequest); var formattings = new Dictionary <string, string>(); var path = ""; var exportHelper = new ExportHelperV2 <DSS1_RetailerDriverStockOptimisation.BO.OrderForecastDetails>(exportOptions, new Dictionary <string, Func <DSS1_RetailerDriverStockOptimisation.BO.OrderForecastDetails, object> > { { "Item.SKU", item => item?.Item?.SKU }, { "Item.Description", item => item?.Item?.Description }, { "Warehouse.Description", item => item?.Warehouse?.Description }, { "Quantity", item => item?.Quantity }, { "RecommendedOrderDate", item => item?.RecommendedOrderDate }, { "SalesForecastDate", item => item?.SalesForecastDate }, { "SupplierCanDeliver", item => item?.SupplierCanDeliver }, { "SupplierMaxQuantity", item => item?.SupplierMaxQuantity }, }); if (exportHelper.Options.ColumnInfo == null) { exportHelper.Options.ColumnInfo = new List <ColumnOptionsV2> { new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Item.SKU"), Formatting = "", Name = "Item.SKU", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Item.Description"), Formatting = "", Name = "Item.Description", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Warehouse.Description"), Formatting = "", Name = "Warehouse.Description", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Quantity"), Formatting = "", Name = "Quantity", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_RecommendedOrderDate"), Formatting = "dd/MM/yyyy", Name = "RecommendedOrderDate", ExcelFormat = @"dd/MM/yyyy" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_SalesForecastDate"), Formatting = "dd/MM/yyyy", Name = "SalesForecastDate", ExcelFormat = @"dd/MM/yyyy" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_SupplierCanDeliver"), Formatting = "", Name = "SupplierCanDeliver", ExcelFormat = @"" }, new ColumnOptionsV2 { Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_SupplierMaxQuantity"), Formatting = "", Name = "SupplierMaxQuantity", ExcelFormat = @"" }, }; } if (string.IsNullOrWhiteSpace(exportHelper.Options.Filename)) { exportHelper.Options.Filename = "OrderProposalList"; } if (datasourceRequest.GroupBy.Any()) { var groups = DatasourceRetriever.RetrieveGrouped(datasourceRequest, queryable, q => q.Id, aggregatorsInfo); var aggregators = DatasourceRetriever.RetrieveGrouped(datasourceRequest, queryable, q => q.Id, aggregatorsInfo, true); GroupsHelper.FormatGroupedAggregators(aggregators, formattings); watch.Stop(); elapsedMilliseconds = watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: OrderProposalList export query with grouping and range {exportOptions.Range} took {elapsedMilliseconds}ms"); watch.Restart(); path = exportHelper.Export(groups, aggregators); watch.Stop(); elapsedMilliseconds += watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: OrderProposalList export to excel with grouping and range {exportOptions.Range} took {watch.ElapsedMilliseconds}ms"); } else { var items = DatasourceRetriever.Retrieve(datasourceRequest, queryable);; var aggregators = RuntimePredicateBuilder.BuildAggregatorPredicates(aggregatorsInfo); foreach (var a in aggregators) { var formatting = formattings.ContainsKey(a.Column) ? formattings[a.Column] : null; a.Calculate(queryable, formatting); } var loadedItems = items.ToList(); watch.Stop(); elapsedMilliseconds = watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: OrderProposalList export query with range {exportOptions.Range} took {elapsedMilliseconds}ms"); watch.Restart(); path = exportHelper.Export(loadedItems, aggregators); watch.Stop(); elapsedMilliseconds += watch.ElapsedMilliseconds; _logger.Info($"ExportV2 Performance: OrderProposalList export to excel with range {exportOptions.Range} took {elapsedMilliseconds}ms"); } var content = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), path)); var fileName = Path.GetFileName(path); var downloadKey = FileHelper.PendingDownloadInstance.Add("SupplierOrderForecast", content, fileName); _logger.Info($"ExportV2 Performance: Total export time for OrderProposalList: {elapsedMilliseconds}ms"); return(downloadKey); }
public string OrderProposalList_ExportImplementation(DatasourceRequest datasourceRequest, ExportHelper.ExportOptions exportOptions, List <AggregatorInfo <DSS1_RetailerDriverStockOptimisation.BO.OrderForecastDetails> > aggregatorsInfo) { if (exportOptions.Range == ExportHelper.Range.TOP100) { datasourceRequest.StartRow = 0; datasourceRequest.PageSize = 100; } else if (exportOptions.Range == ExportHelper.Range.ALL) { datasourceRequest.StartRow = 0; datasourceRequest.PageSize = int.MaxValue; } if (string.IsNullOrWhiteSpace(exportOptions.Filename)) { exportOptions.Filename = "OrderProposalList"; } if (exportOptions.ColumnOptions == null) { exportOptions.ColumnOptions = new List <ExportHelper.ColumnOptions> { new ExportHelper.ColumnOptions { Column = "Item.SKU", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "Item.Description", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "Warehouse.Description", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "Quantity", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "RecommendedOrderDate", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "SalesForecastDate", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "SupplierCanDeliver", IsVisible = true }, new ExportHelper.ColumnOptions { Column = "SupplierMaxQuantity", IsVisible = true }, }; } var queryable = Get_OrderProposalList_DatasourceQueryable(datasourceRequest); var totalRows = DatasourceRetriever.ApplyDynamicFilterToQueryable(datasourceRequest, queryable).Count(); var items = DatasourceRetriever.Retrieve(datasourceRequest, queryable);; var dto = items.Select(i => new OrderProposalDataSet_OrderForecastDetailsDTO(i)); var formattings = new Dictionary <string, string>(); formattings.Add("RecommendedOrderDate", "dd/MM/yyyy"); formattings.Add("SalesForecastDate", "dd/MM/yyyy"); var aggregators = RuntimePredicateBuilder.BuildAggregatorPredicates(aggregatorsInfo); foreach (var a in aggregators) { var formatting = formattings.ContainsKey(a.Column) ? formattings[a.Column] : null; a.Calculate(queryable, formatting); } var exportDataDTO = new List <ExportHelper.ExportRecordDTO>(); foreach (var record in dto) { var recordDTO = new ExportHelper.ExportRecordDTO(); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = "Item.SKU", Value = record?.Item?.SKU, ColumnDataType = "string", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Item.SKU") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = "Item.Description", Value = record?.Item?.Description, ColumnDataType = "string", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Item.Description") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = "Warehouse.Description", Value = record?.Warehouse?.Description, ColumnDataType = "string", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Warehouse.Description") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.Quantity), Value = record?.Quantity, ColumnDataType = "decimal", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_Quantity") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.RecommendedOrderDate), Value = record?.RecommendedOrderDate, ColumnDataType = "DateTime", Format = "dd/MM/yyyy", ExcelFormat = @"dd/MM/yyyy", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_RecommendedOrderDate") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.SalesForecastDate), Value = record?.SalesForecastDate, ColumnDataType = "DateTime", Format = "dd/MM/yyyy", ExcelFormat = @"dd/MM/yyyy", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_SalesForecastDate") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.SupplierCanDeliver), Value = record?.SupplierCanDeliver, ColumnDataType = "bool", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_SupplierCanDeliver") }); recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = nameof(record.SupplierMaxQuantity), Value = record?.SupplierMaxQuantity, ColumnDataType = "decimal", Format = "", ExcelFormat = @"", Caption = BaseViewPage <object> .GetResourceValue("SupplierOrderForecast", "RES_LIST_OrderProposalList_COLUMN_SupplierMaxQuantity") }); exportDataDTO.Add(recordDTO); } if (aggregators.Count > 0) { foreach (AggregatorType aggregatorType in Enum.GetValues(typeof(AggregatorType))) { var emptyAggregatorRow = true; var recordDTO = new ExportHelper.ExportRecordDTO(); foreach (var columnOption in exportOptions.ColumnOptions) { var aggregatorValue = ""; switch (aggregatorType) { case AggregatorType.COUNT: if (columnOption.CountIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.COUNT); aggregatorValue = $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandCount")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; case AggregatorType.SUM: if (columnOption.SumIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.SUM); aggregatorValue = $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandTotal")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; case AggregatorType.AVERAGE: if (columnOption.AverageIsVisible) { var averageAggregator = aggregators.SingleOrDefault(agg => agg.Column == columnOption.Column && agg.Type == AggregatorType.AVERAGE); aggregatorValue += $"{BaseViewPage<object>.GetResourceValue("GlobalResources", "RES_DATALIST_AGGREGATORS_GrandAverage")} {averageAggregator?.ValueFormatted}"; emptyAggregatorRow = false; } break; } recordDTO.Columns.Add(new ExportHelper.ExportColumnDTO { ColumnName = columnOption.Column, Value = aggregatorValue, ColumnDataType = "string", Format = "" }); } if (!emptyAggregatorRow) { exportDataDTO.Add(recordDTO); } } } var path = ExportHelper.ExportList(exportDataDTO, exportOptions, totalRows); var content = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), path)); var fileName = Path.GetFileName(path); return(FileHelper.PendingDownloadInstance.Add("SupplierOrderForecast", content, fileName)); }