public static OrderReport GenerateReportForOrder( OrderReportFormattingSettings orderReportFormattingSettings, Order order) { var sb = new MyStringBuilder(); sb.AppendLine("Order date: " + FormatDate(order.OrderDate)); if (!orderReportFormattingSettings.DontIncludeNumberOrOrderLines) { sb.AppendLine("Number of order lines: " + order.OrderLines.Length.AsString()); } decimal total = 0m; foreach (var orderLine in order.OrderLines) { var lineTotal = orderLine.ItemCount * orderLine.ItemPrice; total += lineTotal; sb.AppendLine(orderLine.ProductName + ": " + orderLine.ItemCount.AsString() + " * " + orderLine.ItemPrice.AsString() + "$ = " + lineTotal.AsString() + "$"); } sb.AppendLine("Total: " + total.AsString() + "$"); return(new OrderReport(sb.ToString())); }
static void Main(string[] args) { var orderReportFormattingSettings = new OrderReportFormattingSettings(args.Length > 0 && args[0].Equals("noNumberOfLines")); var cities = DatabaseModuleFunctions.LoadAllDataWithoutOrders(); var PureCompose = PureLambda.Create(() => { var generateReportForOrder = ReportingModule.GenerateReportForOrder(); var generateReportForCustomer = ReportingModule.GenerateReportForCustomer() .HonestlyInject( generateReportForOrder); var generateReportForCity = ReportingModule.GenerateReportForCity() .HonestlyInject(generateReportForCustomer); return(ReportingModule.GenerateReport() .HonestlyInject(generateReportForCity)); }); var generateReportHonest = PureCompose(); var generateReport = generateReportHonest .PartiallyInvoke( orderReportFormattingSettings, DatabaseModule.LoadOrdersForCustomer()); var report = generateReport(cities); SaveReport(report); }