private static string ToXML(SalesReportsWrapper wrapper) { var serializer = new XmlSerializer(typeof(SalesReportsWrapper)); using (var writer = new UTF8StringWriter()) { var xsn = new XmlSerializerNamespaces(); xsn.Add(string.Empty, string.Empty); serializer.Serialize(writer, wrapper, xsn); string xml = writer.ToString(); return xml; } }
public static async Task WriteXML(SalesReportsWrapper wrapper, string fileName) { if (wrapper == null) { throw new ArgumentNullException("Wrapper cannot be null"); } using (var fileStream = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) using (var streamWriter = new StreamWriter(fileStream)) { string xml = ToXML(wrapper); await streamWriter.WriteAsync(xml); } }
private async Task<SalesReportsWrapper> BuildSalesReports(DateTime startDate, DateTime endDate) { using (var context = new DatabaseManager.Data.SupermarketsContext()) { var saleReportsQuery = from sale in context.Sales where sale.Date >= startDate where sale.Date <= endDate group new { sale.UnitPrice, sale.Date } by new { sale.Product.Vendor.Name } into salesGroup select new { Vendor = salesGroup.Key, Sales = from sale in salesGroup group sale.UnitPrice by sale.Date into datesGroup select new { Date = datesGroup.Key, TotalSum = datesGroup.Sum() } }; var vendorGroups = await saleReportsQuery.ToArrayAsync(); string monthFormat = @"MMM-yyyy"; string currencyFormat = @"# ###.00"; var salesReports = vendorGroups.Select(vg => { var summaries = vg.Sales. Select(s => new Summary() { Date = s.Date.ToString(monthFormat), TotalPrice = s.TotalSum.ToString(currencyFormat) }); var salesReport = new SalesReport() { Vendor = vg.Vendor.Name, Summaries = summaries.ToArray() }; return salesReport; }); var salesReportsWrapper = new SalesReportsWrapper() { SaleReports = salesReports.ToArray() }; return salesReportsWrapper; } }