public IActionResult GetReport([FromQuery(Name = "from")] string from, [FromQuery(Name = "to")] string to) { //add some validation DateTime fromDate = DateTime.Parse(from); DateTime toDate = DateTime.Parse(to); SalesReportDto report = _mangementService.GetSalesReport(fromDate, toDate); if (report == null) { return(BadRequest("system error report couldnt be generated")); } return(Ok(report)); }
public SalesReportDto GetSalesReport(DateTime from, DateTime to) { SalesReportDto report = new SalesReportDto { From = from.ToString(), To = to.ToString(), CashAmount = 0.00m, EftposAmount = 0.00m, AfterPayAmount = 0.00m, StoreCreditAmount = 0.00m, TotalRefunds = 0.00m, TotalAmount = 0.00m, NetTotal = 0.00m, }; var invoices = _saleRepo.GetInvoicePayments(from, to); if (invoices == null || invoices.Count() == 0) { return(report); } // IEnumerable<IGrouping<int, int>> payments = invoices.SelectMany(si => si.Payments) // .GroupBy(p => p.PaymentMethodId, p => p.Amount); var payments = invoices.SelectMany(si => si.Payments).ToList(); var cash = payments.Where(p => p.PaymentMethodId == 1).Sum(p => p.Amount); var eftpos = payments.Where(p => p.PaymentMethodId == 2).Sum(p => p.Amount); var afterPay = payments.Where(p => p.PaymentMethodId == 3).Sum(p => p.Amount); var storeCredit = payments.Where(p => p.PaymentMethodId == 4).Sum(p => p.Amount); var refund = invoices.SelectMany(i => i.Refunds).Sum(r => r.Amount); report.CashAmount = ToDecimal2dp(cash); report.EftposAmount = ToDecimal2dp(eftpos); report.AfterPayAmount = ToDecimal2dp(afterPay); report.StoreCreditAmount = ToDecimal2dp(storeCredit); report.TotalRefunds = ToDecimal2dp(refund); report.TotalAmount = Decimal.Round((report.CashAmount + report.EftposAmount + report.AfterPayAmount), 2); report.NetTotal = Decimal.Round((report.TotalAmount - report.TotalRefunds), 2); return(report); }