コード例 #1
0
        static void Main(string[] args)
        {
            var ds = new ConsoleDataSource();

            var report = new GoldReport(ds);

            report.BuildReport();

            Print(report);
        }
コード例 #2
0
        private static void Print(GoldReport report)
        {
            System.Console.WriteLine();
            System.Console.WriteLine($"===== Frozen Gold Report as of {report.LastUpdated:yyyy MMMM dd} =====");

            System.Console.WriteLine("");
            System.Console.WriteLine($"Gold collected: {report.Received}");
            System.Console.WriteLine($"Gold sent:      {report.SentToBanker}");
            System.Console.WriteLine($"Gold on hand:   {report.GoldOnHand}");
            System.Console.WriteLine($"Mailbox fees:   {report.MailboxFees}");
            System.Console.WriteLine($"Refunds:        {report.Refunded}");

            System.Console.WriteLine("");
            int oddTxnCount = report.OddTransactions.Count();

            System.Console.WriteLine($"=== Odd looking txns: {oddTxnCount} ===");
            if (oddTxnCount > 0)
            {
                foreach (var txn in report.OddTransactions)
                {
                    System.Console.WriteLine($"   {txn.PlayerFrom} sent {txn.PlayerTo} {txn.Amount}");
                }
            }

            System.Console.WriteLine("");

            System.Console.WriteLine("=== By Player ===");
            var ahead   = new List <PlayerReport>();
            var behind  = new List <PlayerReport>();
            var correct = new List <PlayerReport>();

            foreach (var playerReport in report.PlayerReports.Where(pr => !pr.Player.IsRetired))
            {
                var summary = playerReport.ReportSummary;
                switch (summary.Status)
                {
                case PlayerPaymentStatus.Behind:
                    behind.Add(playerReport);
                    break;

                case PlayerPaymentStatus.PaidInFull:
                    correct.Add(playerReport);
                    break;

                case PlayerPaymentStatus.Ahead:
                    ahead.Add(playerReport);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            System.Console.WriteLine();
            System.Console.WriteLine($"== Behind");
            foreach (PlayerReport playerReport in behind)
            {
                var summary = playerReport.ReportSummary;
                System.Console.WriteLine($"{playerReport.Player} is {Print(summary.Status)} by {summary.WeeksDifference} weeks");
            }

            System.Console.WriteLine();
            System.Console.WriteLine($"== Ahead");
            foreach (PlayerReport playerReport in ahead)
            {
                var summary = playerReport.ReportSummary;
                System.Console.WriteLine($"{playerReport.Player} is {Print(summary.Status)} by {summary.WeeksDifference} weeks");
            }

            System.Console.WriteLine();
            System.Console.WriteLine($"== Paid");
            foreach (PlayerReport playerReport in correct)
            {
                System.Console.WriteLine($"{playerReport.Player} is up to date");
            }

            System.Console.WriteLine("");
            System.Console.WriteLine("=== Complete transaction log ===");
            foreach (var txn in report.AllTransactions.OrderBy(tx => tx.WhenServerTime))
            {
                System.Console.WriteLine($"   {txn.PlayerFrom} sent {txn.PlayerTo} {txn.Amount} on {txn.WhenServerTime:f}");
            }
        }