public void GenerateSalesReport(string fileName = DefaultSaleReportFileName) { XmlDocument report = new XmlDocument(); XmlDeclaration xmlDeclaration = report.CreateXmlDeclaration("1.0", "UTF-8", null); XmlElement root = report.CreateElement("sales"); report.AppendChild(root); report.InsertBefore(xmlDeclaration, root); using (var db = new CarPartsDbContext()) { var groupedSales = db.Sales.GroupBy(s => s.Vendor) .ToList(); foreach (var group in groupedSales) { XmlElement sale = report.CreateElement("sale"); sale.SetAttribute("vendor", group.Key.Name); root.AppendChild(sale); foreach (var s in group) { XmlElement summary = report.CreateElement("summary"); summary.SetAttribute("date", s.Date.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture)); summary.SetAttribute("total-sum", (s.UnitPrice * s.Quantity).ToString()); sale.AppendChild(summary); } } } if (!Directory.Exists(this.reportsDestinationPath)) { Directory.CreateDirectory(this.reportsDestinationPath); } report.Save(this.reportsDestinationPath + fileName); }
private void WriteSalesToSqlServer(IEnumerable<Sale> sales) { using (var db = new CarPartsDbContext()) { foreach (var sale in sales) { db.Sales.Add(sale); } db.SaveChanges(); } }
public void GenerateSalesInfoPdf() { var doc = new Document(PageSize.A4, 50, 50, 25, 25); string resultFileName = DateTime.Now.ToString("yyyy-MM-dd") + "-" + Guid.NewGuid() + ".pdf"; var output = new FileStream(DefaultFilePath + resultFileName, FileMode.Create, FileAccess.Write); PdfWriter.GetInstance(doc, output); doc.Open(); using (var db = new CarPartsDbContext()) { var salesGroups = db.Sales.GroupBy(s => s.Date) .ToList(); foreach (var salesGroup in salesGroups) { PdfPTable table = new PdfPTable(5); PdfPCell heading = new PdfPCell(new Phrase("Sales Information")); heading.Colspan = 5; heading.HorizontalAlignment = 1; //// 0=Left, 1=Centre, 2=Right string dateHeading = string.Format("Date: {0}", salesGroup.FirstOrDefault().Date.ToShortDateString()); PdfPCell date = new PdfPCell(new Phrase(dateHeading)); date.Colspan = 5; date.HorizontalAlignment = 1; //// 0=Left, 1=Centre, 2=Right table.AddCell(heading); table.AddCell(date); table.AddCell("Part Name"); table.AddCell("Quantity"); table.AddCell("Unit Price"); table.AddCell("Vendor Name"); table.AddCell("Sum"); var sales = salesGroup.ToList(); foreach (var sale in sales) { table.AddCell(sale.Part.Name); table.AddCell(sale.Quantity.ToString()); table.AddCell(sale.UnitPrice.ToString()); table.AddCell(sale.Vendor.Name); table.AddCell(sale.Sum.ToString()); } string total = string.Format("Total sum for : {0}", salesGroup.FirstOrDefault().Date.ToShortDateString()); PdfPCell totalForDate = new PdfPCell(new Phrase(total)); totalForDate.Colspan = 4; totalForDate.HorizontalAlignment = 2; //// 0=Left, 1=Centre, 2=Right table.AddCell(totalForDate); string totalSumForDate = sales.Sum(s => s.Sum).ToString(); table.AddCell(totalSumForDate); doc.Add(table); } PdfPTable footerTable = new PdfPTable(5); string totalSum = string.Format("Grand total: {0}", db.Sales.ToList().Sum(s => s.Sum)); PdfPCell footer = new PdfPCell(new Phrase(totalSum)); footer.Colspan = 5; footer.HorizontalAlignment = 2; //// 0=Left, 1=Centre, 2=Right footerTable.AddCell(footer); doc.Add(footerTable); doc.Close(); } }