public string CalculateInvoice(IEnumerable <OrderItemModel> invoiceItems) { InvoiceModel invoice = new InvoiceModel(); invoice.AddToInvoice(invoiceItems); invoicesHistory.Add(invoice); StringBuilder sb = new StringBuilder($"Invoice #{invoicesHistory.Count}\n\n"); sb.AppendLine("Pos. Name Qty. Sum"); sb.AppendLine("-----------------------------------------------------------------"); int i = 0; decimal invoiceTotal = 0.00M; foreach (var item in invoiceItems) { var catalogItem = catalog.First(x => x.ItemId == item.ItemId); decimal sum = invoiceSumCalculator.CalculatePrice(catalogItem.Type, item.Quantity); invoiceTotal += sum; sb.AppendLine($"{(++i).ToString().PadLeft(4)} {catalogItem.Name.PadRight(40)} {item.Quantity.ToString().PadLeft(6)} {sum.ToString().PadLeft(12)}"); } sb.AppendLine("-----------------------------------------------------------------"); sb.AppendLine($"Total {invoiceTotal.ToString().PadLeft(59)}\n\n"); int loyalty = invoice.CalculateLoyalty(catalog); int totalLoyalty = invoicesHistory.Sum(x => x.CalculateLoyalty(catalog)); sb.Append($"Loyalty points added: {loyalty.ToString().PadLeft(3)} Total loyalty points: {totalLoyalty.ToString().PadLeft(3)}"); return(sb.ToString()); }