Example #1
0
        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));
        }
Example #2
0
        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]));
        }
Example #5
0
   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);
        }
Example #7
0
        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();
        }
Example #8
0
File: Program.cs Project: mr360/IMS
        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);
        }
Example #9
0
        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);
        }
Example #10
0
        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));
        }