private static void BuildSummaryCashOut(ColossusBetsDetail_Template detailTemplate, IEnumerable<ITicket> detailTickets)
        {
            decimal cashOutPercent = 0;
            decimal cashOutAmount = 0;

            foreach (var detailTicket in detailTickets)
            {
                if (detailTicket.BetTypeId == CashOutBetTypeId)
                {
                    cashOutPercent += detailTicket.Handicap1 * 100;
                    cashOutAmount += detailTicket.Winlost;
                }
            }

            var cashOwn = 100 - cashOutPercent;
            detailTemplate.cashOwn = string.Format(ColosussBetsLabel.YouOwnPercent, Formatter.DecFormat(cashOwn, 0));

            if (cashOutPercent == 0)
            {
                detailTemplate.cashSold = ColosussBetsLabel.YouSoldZeroPercent;
            }
            else
            {
                detailTemplate.cashSold = string.Format(
                ColosussBetsLabel.YouSoldPercent,
                Formatter.DecFormat(cashOutPercent, 0),
                BuildColossusBetsWinLoss(cashOutAmount));
            }
        }
        public static string BuildColossusBetDetails(this BetListHTMLBuilder factory, IEnumerable<ITicket> detailTickets, ITicketHelper ticketHelper)
        {
            ColossusBetsDetail_Template detailTemplate = new ColossusBetsDetail_Template();

            BuildSummaryCashOut(detailTemplate, detailTickets);
            BuildColossusBetDetailsTable(detailTemplate, detailTickets, ticketHelper);

            return detailTemplate.ToString();
        }
        private static void BuildBodyRow(
            ColossusBetsDetail_Template detailTemplate,
            ITicket detailTicket,
            ITicketHelper ticketHelper)
        {
            ColossusBetsDetail_Contents_Block detailContent = new ColossusBetsDetail_Contents_Block();
            detailContent.date = detailTicket.TransDate.ToString();
            detailContent.transactionType = BuildColossusBetsTransactionType(
                detailTicket.BetTypeId,
                detailTicket.Handicap1,
                ticketHelper);
            detailContent.winloss = BuildColossusBetsWinLoss(detailTicket.Winlost);
            detailContent.status = BuildColossusBetsDetailStatus(detailTicket.Status);

            detailTemplate.Contents.Append(detailContent);
        }
        private static void BuildTotalRow(
            ColossusBetsDetail_Template detailTemplate,
            bool hasTicketDetails,
            decimal totalWinloss)
        {
            detailTemplate.TotalContents.Clear();
            detailTemplate.NoData.Clear();

            if (hasTicketDetails)
            {
                ColossusBetsDetail_TotalContents_Block totalContent = new ColossusBetsDetail_TotalContents_Block();

                totalContent.totalWinloss = BuildColossusBetsWinLoss(totalWinloss);
                detailTemplate.TotalContents.Append(totalContent);
            }
            else
            {
                detailTemplate.NoData.Append(new ColossusBetsDetail_NoData_Block());
            }
        }
        private static void BuildColossusBetDetailsTable(
            ColossusBetsDetail_Template detailTemplate,
            IEnumerable<ITicket> detailTickets,
            ITicketHelper ticketHelper)
        {
            decimal totalWinloss = 0;
            detailTemplate.Contents.Clear();

            foreach (var detailTicket in detailTickets)
            {
                BuildBodyRow(detailTemplate, detailTicket, ticketHelper);

                totalWinloss += detailTicket.Winlost;
            }

            BuildTotalRow(detailTemplate, detailTickets.Any(), totalWinloss);
        }