public void ReportLogic_GetReportAndEnsureNotEmpty() { //Arrange Invoice invoice = new Invoice() { Customer = new Customer() { Address = "Dream Boulevard", CompanyName = "Yoggi", Name = "Nicolaus Copernicus" }, Date = DateTime.Today, TimeEntries = new List <TimeEntry>() { new TimeEntry() { Description = "Sky scraping", HourlyPrice = 100, Hours = 42 } } }; //Act InvoiceReport report = new InvoiceReport(invoice); //Assert Assert.False(string.IsNullOrWhiteSpace(report.Content)); }
public void ShouldConvertInvoiceReportIntoASpecificString() { var parser = new CSVReportParser(); var report = new InvoiceReport(TestData.TestOrder); var result = parser.FormatToString(report); var expected = "\"first name\",\"address\",\"due date\",\"order number\",\"squares\",\"triangles\",\"circles\",\"red color surcharges\"" + "\n" + "\"Mark Pearl\",\"1 Bob Avenue, Auckland\",\"19-Jan-19\",\"0001\",\"$1\",\"$2\",\"$15\",\"$2\"\n"; Assert.Equal(expected, result); }
// GET: InvoiceReports public ActionResult Index(DateTime?startDate = null, DateTime?endDate = null, string groupBy = null) { // get the minimum and maximum dates from the invoices, to allow the user to select from range of dates var orderedDates = db.lginvoices.OrderBy(i => i.inv_DATETIME).ToList(); ViewBag.minDate = (DateTime)orderedDates.First().inv_DATETIME; ViewBag.maxDate = (DateTime)orderedDates.Last().inv_DATETIME; // if the user hasn't specified start or end dates, set the date range to a default of all time if (startDate == null) { startDate = ViewBag.minDate; } if (endDate == null) { endDate = ViewBag.maxDate; } ViewBag.startDate = startDate; ViewBag.endDate = endDate; ViewBag.groupBy = groupBy; var productTotals = db.lgproducts.Select(product => new InvoiceProductTotal { product = product, total = product.lglines .Where(line => line.lginvoice.inv_DATETIME >= startDate && line.lginvoice.inv_DATETIME <= endDate) .Sum(line => line.lginvoice.inv_total), }); var userDefinedGrouping = productTotals.GroupBy(g => groupBy == "prod_type" ? g.product.prod_type : groupBy == "prod_base" ? g.product.prod_base : groupBy == "prod_category" ? g.product.prod_category : g.product.lgbrand.brand_name ).ToList(); var breakPointedGroups = userDefinedGrouping .Select(g => new ProductGroup { title = g.Key, products = g.OrderByDescending(p => p.total).ToList(), total = (decimal)g.Sum(p => p.total) }) .OrderByDescending(g => g.total) .ToList(); InvoiceReport report = new InvoiceReport { groups = breakPointedGroups, xAxis = breakPointedGroups.Select(g => g.title).ToList(), yAxis = breakPointedGroups.Select(g => g.total).ToList() }; return(View(report)); }
public void ShouldContainFourElementsWithFourItemOrderDetailsInTheList() { var order = new Order(DateTime.Today, TestData.TestCustomer, TestData.orderItemsWithThreeColorsThreeShapes); var report = new InvoiceReport(order); var result = report.GetItemList(); var expectedFirstElement = new InvoiceItem("Circle", 5, 3, 15); var expectedSecondElement = new InvoiceItem("Square", 1, 1, 1); var expectedThirdElement = new InvoiceItem("Triangle", 1, 2, 2); var expectedForthElement = new InvoiceItem("Red color surcharge", 2, 1, 2); Assert.Equal(4, result.Count); Assert.True(IsMatch(expectedFirstElement, result[0])); Assert.True(IsMatch(expectedSecondElement, result[1])); Assert.True(IsMatch(expectedThirdElement, result[2])); Assert.True(IsMatch(expectedForthElement, result[3])); }
private void loadreport() { { cn.Open(); SqlDataAdapter da = new SqlDataAdapter("select * from [MyTable1] where (Number LIKE '" + DropDownList1.Text + "') ", cn); da.Fill(ds); cn.Close(); { { cn1.Open(); SqlDataAdapter da1 = new SqlDataAdapter("select * from [MyTable2] where (No LIKE '" + DropDownList1.Text + "') ", cn1); //DataTable ds1 = new DataTable(); da1.Fill(ds1); cn1.Close(); } rdoc.Database.Tables[0].SetDataSource(ds); rdoc.Database.Tables[1].SetDataSource(ds1); InvoiceReport.ReportSource = rdoc; InvoiceReport.DataBind(); }
public ActionResult GetReport(string dateRange) { var report = new InvoiceReport(); var modelobj = new Invoice() { InvoiceDate = dateRange }; var result = modelobj.GetAllInvoice(); if (result != null && result.Count() > 0) { report.InvoiceList = result; report.TotalIGST = result.Select(m => m.Total_IGST).Sum(); report.TotalSGST = result.Select(m => m.Total_SGST).Sum(); report.TotalCGST = result.Select(m => m.Total_CGST).Sum(); report.TotalGST = result.Select(m => m.Total_GST).Sum(); report.TotalAmountBefore = result.Select(m => m.TotalAmountBeforeTax).Sum(); report.TotalAmountAfter = result.Select(m => m.TotalAfterRoundOff).Sum(); return(View("Report", report)); } return(null); }
public static void CreateInvoiceReport(InvoiceReportData InvoiceReportData, bool IsPreview) { List <InvoiceReportData> listReportData = new List <InvoiceReportData> { InvoiceReportData }; _InvoiceReport = new InvoiceReport { DataSource = listReportData }; if (IsPreview) { _InvoiceReport.Watermark.Text = "VORSCHAU"; _InvoiceReport.Watermark.TextDirection = DirectionMode.ForwardDiagonal; _InvoiceReport.Watermark.Font = new Font(_SalesOrderReport.Watermark.Font.FontFamily, 40); _InvoiceReport.Watermark.ForeColor = Color.DodgerBlue; _InvoiceReport.Watermark.TextTransparency = 150; _InvoiceReport.Watermark.ShowBehind = false; } _InvoiceReport.CreateDocument(); }
static Database FakeData(int amount) { // Database Database.Create("HTV Database"); Database db = Database.Instance; // DbTable DbTable dbTableBay = new DbTable("bay", "Bay Table"); DbTable dbTableVehicle = new DbTable("vehicle", "Vehicle Table"); DbTable dbTableAddon = new DbTable("addon", "Addon Table"); DbTable dbTableUser = new DbTable("user", "User Table"); DbTable dbTableInvoice = new DbTable("invoice", "Invoice Table"); DbTable dbTableReport = new DbTable("report", "Report Table"); // Bays for (int i = 0; i < amount; i++) { Bay x = new Bay("B000" + (i.ToString())); if (i < amount / 2) { x.Vehicle = "VIN0000" + (i.ToString()); } dbTableBay.Create(x); } // Vehicle string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for (int i = 0; i < amount; i++) { string model = (chars[new Random().Next(chars.Length)] + chars[new Random().Next(chars.Length)] + chars[new Random().Next(chars.Length)] + chars[new Random().Next(chars.Length)]).ToString(); Vehicle x = new Vehicle("VIN0000" + (i.ToString()), (Brand) new Random().Next(0, 11), model, new DateTime(new Random().Next(1990, 2019), 01, 01), new Random().Next(30000, 150000)); if (i < amount / 3) { x.Sold = true; } dbTableVehicle.Create(x); } // Addon for (int i = 0; i < amount; i++) { Addon a = new Addon("A000" + (i.ToString()), "AddonTA10" + (i.ToString()), "Addon is xyz blah", new Random().Next(100, 3500)); a.Compatible = "VIN0000" + (i.ToString()); dbTableAddon.Create(a); Addon b = new Addon("A100" + (i.ToString()), "AddonTB10" + (i.ToString()), "Addon is xyz blah", new Random().Next(100, 3500)); b.Compatible = "VIN0000" + (i.ToString()); dbTableAddon.Create(b); Addon c = new Addon("A200" + (i.ToString()), "AddonTC10" + (i.ToString()), "Addon is xyz blah", new Random().Next(100, 3500)); c.Compatible = "VIN0000" + (i.ToString()); dbTableAddon.Create(c); } // Users for (int i = 0; i < amount; i++) { string name = (chars[new Random().Next(chars.Length)] + chars[new Random().Next(chars.Length)] + chars[new Random().Next(chars.Length)] + chars[new Random().Next(chars.Length)]).ToString(); Customer c = new Customer("C00" + (i.ToString()), "Customer Name", "25 Makaby Street, VIC, 3752", "0418534687"); dbTableUser.Create(c); } Staff s1 = new Staff("S10", "Example Name", JobRole.Sale); Staff s2 = new Staff("S20", "Example Name", JobRole.Accounting); Staff s3 = new Staff("S30", "Example Name", JobRole.Management); Staff s4 = new Staff("S40", "Example Name", JobRole.Garage); dbTableUser.Create(s1); dbTableUser.Create(s2); dbTableUser.Create(s3); dbTableUser.Create(s4); IMS.Builder.InvoiceBuilder iBuild = new IMS.Builder.InvoiceBuilder(); Order z; z.addons = new List <Addon>() { new Addon("A00001", "AddonTA10", "Addon is xyz blah", 5600.00) }; z.buyVehicle = new Vehicle("VIN00001", Brand.Audi, "MN-67", new DateTime(new Random().Next(1990, 2019), 01, 01), new Random().Next(30000, 150000)); z.tradeVehicle = null; iBuild.Order = z; iBuild.Staff = new Staff("SR689", "Example Staff", JobRole.Sale); IMS.Invoice.Sale iSale = iBuild.Prepare() as IMS.Invoice.Sale; dbTableInvoice.Create(iSale); InvoiceReport dd = new InvoiceReport("R006", "Test Report Name", ReportType.Sale, new DateTime(2019, 01, 01), new DateTime(2019, 04, 01)); dd.AmountOfSale = 60; dd.TotalSalePrice = 176500.00; dbTableReport.Create(dd); db.Create(dbTableBay); db.Create(dbTableVehicle); db.Create(dbTableAddon); db.Create(dbTableUser); db.Create(dbTableInvoice); db.Create(dbTableReport); return(db); }
public InvoiceReport GenerateInvoice(int invoiceId) { var result = new InvoiceReport(); var dbinvoice = _invoiceRepository.GetById(invoiceId); var invoice = _mapper.Map <InvoiceDto>(dbinvoice); var settings = _settingsRepository.GetActiveSettings(); result.CustomerName = invoice.CustomerName; if (invoice != null && settings != null) { ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (var package = new ExcelPackage(new FileInfo("Templates/invoice_majoli_template.xlsx"))) { ExcelWorksheet ws = package.Workbook.Worksheets[0]; //left side int D = 4; int G = 7; ws.Cells[9, D].Value = invoice.InvoiceNumber; //D9 ws.Cells[11, D].Value = invoice.DateIssued.ToShortDateString(); //D11 ws.Cells[12, D].Value = invoice.DateOfService.ToShortDateString(); //D12 ws.Cells[13, D].Value = invoice.Place; //D13 ws.Cells[14, D].Value = invoice.CurrencyDate.ToShortDateString(); //D14 ws.Cells[14, G].Value = invoice.CurrencyDateNumOfDays; //G14 //right side - customer info int H = 8; int L = 12; ws.Cells[9, H].Value = "Partner ID: " + invoice.PartnerId; //H9 var address = invoice.CustomerName + " " + invoice.CustomerAddress; ws.Cells[10, H].Value = address; //H10 ws.Cells[14, H].Value = "PIB:" + invoice.CustomerPIB; //H14 ws.Cells[14, L].Value = "MB:" + invoice.CustomerMB; //L14 //summary left side int E = 5; ws.Cells[21, D].Value = invoice.BaseTotal.ToString("N2"); //D21 ws.Cells[21, E].Value = invoice.PDV.ToString("N2"); //E21 //summary right side ws.Cells[19, L].Value = invoice.BaseTotal.ToString("N2"); //L19 ws.Cells[21, L].Value = invoice.BaseTotal.ToString("N2"); //L21 ws.Cells[22, L].Value = invoice.BaseTotal.ToString("N2"); //L22 ws.Cells[23, L].Value = invoice.PDV.ToString("N2"); //L23 ws.Cells[24, L].Value = invoice.Total.ToString("N2"); //L24 //Bank info ws.Cells[28, H].Value = settings.BankName; //H28 ws.Cells[28, L].Value = settings.BankAccount; //L28 //Note int A = 1; if (invoice.Note == null) { ws.Cells[30, A].Value = "Nema napomene"; //A30 } else { ws.Cells[30, A].Value = invoice.Note; //A30 } //invoice items int N = 14; int B = 2; int C = 3; int F = 6; int I = 9; int J = 10; int K = 11; int M = 13; if (invoice.InvoiceItems != null && invoice.InvoiceItems.Count > 0) { var counter = 0; int startRow = 18; foreach (var invoiceItem in invoice.InvoiceItems) { if (counter != 0) { ws.InsertRow(startRow + 1, 1); ws.Cells[startRow, A, startRow, N].Copy(ws.Cells[startRow + 1, A, startRow + 1, N]); startRow++; } ws.Cells[startRow, A].Value = counter + 1; ws.Cells[startRow, B].Value = invoiceItem.ItemId; ws.Cells[startRow, C].Value = invoiceItem.Name; ws.Cells[startRow, F].Value = invoiceItem.Unit; ws.Cells[startRow, G].Value = invoiceItem.Quantity; ws.Cells[startRow, H].Value = invoiceItem.Price.ToString("N2"); ws.Cells[startRow, I].Value = 0.ToString("N2"); ws.Cells[startRow, J].Value = invoiceItem.Price.ToString("N2"); ws.Cells[startRow, K].Value = invoiceItem.TotalWithoutPDV.ToString("N2"); ws.Cells[startRow, L].Value = settings.PDV.ToString("N2"); ws.Cells[startRow, M].Value = invoiceItem.GetPdvValue(settings.PDV).ToString("N2"); ws.Cells[startRow, N].Value = invoiceItem.GetTotalValue(settings.PDV).ToString("N2"); counter++; } } result.ReportData = package.GetAsByteArray(); dbinvoice.IsIssued = true; _invoiceRepository.Update(dbinvoice.Id, dbinvoice); _invoiceRepository.SaveChanges(); } } return(result); }
public async Task <IHttpActionResult> EmailInvoice(EmailInputModel model) { var fromAddress = ConfigurationManager.AppSettings["EmailFromAddress"]; var user = Request.GetOwinContext().Request.User; var order = await _repo.Get(model.OrderId); var report = new InvoiceReport(order) as SectionReport; report.Run(); var memStream = new MemoryStream(); var pdfExport = new PdfExport(); pdfExport.Export(report.Document, memStream); memStream.Position = 0; var attachments = new Dictionary <string, MemoryStream> { { $"Invoice {order.Id.ToString("0000")}.pdf", memStream } }; var mailMessage = new SendGridMessage { Subject = model.Subject, From = new MailAddress(fromAddress, user.Identity.Name), Text = model.Body, Html = model.Body.Replace("\n", "<br>"), StreamedAttachments = attachments }; var to = model.Address.Where(a => !string.IsNullOrWhiteSpace(a)).ToList(); if (to.Any()) { mailMessage.AddTo(to); model.Bcc.ToList().ForEach(bcc => { if (!string.IsNullOrWhiteSpace(bcc)) { mailMessage.AddBcc(bcc); } }); } else { to = model.Bcc.Where(a => !string.IsNullOrWhiteSpace(a)).ToList(); mailMessage.AddTo(to); } var delivery = await _repo.RecordInvoiceEmail(mailMessage, order.Id, user.Identity.Name); mailMessage.AddUniqueArgs(new Dictionary <string, string> { ["order_id"] = order.Id.ToString(), ["delivery_id"] = delivery.Id.ToString() }); try { var apiKey = ConfigurationManager.AppSettings["SendGridApiKey"]; var transportWeb = new Web(apiKey); await transportWeb.DeliverAsync(mailMessage); } catch (InvalidApiRequestException ex) { var errorMessage = string.Join(", ", ex.Errors); Exception error = ex; while (error != null) { errorMessage += $",{error.Message}"; error = error.InnerException; } await _repo.LogEmailDeliveryError(delivery.Id, errorMessage); throw; } catch (Exception ex) { var errorMessage = string.Empty; var error = ex; while (error != null) { errorMessage += $",{error.Message}"; error = error.InnerException; } await _repo.LogEmailDeliveryError(delivery.Id, errorMessage); throw; } var email = string.Join(";", model.Address); if (!string.IsNullOrWhiteSpace(email)) { order.Inquiry.Email = email; } if (order.InvoiceDate == null) { order.InvoiceDate = DateTime.Now; } var edited = await _repo.Edit(order, user.Identity.Name); return(Ok(edited)); }