RecordOfSales ToRecordOfSales(Stockist stockist, IEnumerable <Subtransaction> subtransactions) { var stockistsSubtransactions = subtransactions.Where(x => x.Product.ProductCode.StartsWith(stockist.StockistCode)).ToList(); var rate = decimal.Divide(stockist.Commission.Rate, 100); if (stockistsSubtransactions.Count == 0) { return(new RecordOfSales { StockistCode = stockist.StockistCode, FirstName = stockist.Details.FirstName, Name = stockist.Details.DisplayName, EmailAddress = stockist.Details.EmailAddress, CustomMessage = string.Empty, StartDate = start, EndDate = end, Rate = rate, Sales = new List <Sale>().AsReadOnly(), Subtotal = 0, CommissionTotal = 0, Total = 0, }); } else { var sales = stockistsSubtransactions.Select(x => SaleMapper.FromTransaction(x, rate)).ToList(); var subtotal = sales.Sum(x => x.Subtotal); var commission = sales.Sum(x => x.Commission); return(new RecordOfSales { StockistCode = stockist.StockistCode, FirstName = stockist.Details.FirstName, Name = stockist.Details.DisplayName, EmailAddress = stockist.Details.EmailAddress, CustomMessage = string.Empty, StartDate = start, EndDate = end, Rate = rate, Sales = sales, Subtotal = subtotal, CommissionTotal = commission, Total = subtotal + commission, }); } }