private static void CompleteTournament(Tournament model)
        {
            GlobalConfig.Connection.CompleteTournament(model);
            Team        winners            = model.Rounds.Last().First().Winner;
            Team        runnerUp           = model.Rounds.Last().First().Entries.Where(t => t.TeamCompeting != winners).First().TeamCompeting;
            List <Team> teamsSortedByPlace = GetTeamsByPlace(model);
            decimal     winnerPrize        = 0;
            decimal     runnerUpPrize      = 0;

            if (model.Prizes.Count > 0)
            {
                Prize firstPlacePrize  = model.Prizes.Where(p => p.PlaceNumber == 1).FirstOrDefault();
                Prize secondPlacePrize = model.Prizes.Where(p => p.PlaceNumber == 2).FirstOrDefault();

                if (firstPlacePrize != null)
                {
                    winnerPrize = firstPlacePrize.CalculatePrizePayout(model.TotalIncome);
                }


                if (secondPlacePrize != null)
                {
                    runnerUpPrize = secondPlacePrize.CalculatePrizePayout(model.TotalIncome);
                }
            }

            string        subject = "";
            StringBuilder body    = new StringBuilder();


            subject = $"In {model.TournamentName} the winner is {winners.TeamName}!";
            body.AppendLine("<h1>We have a winner!</h1>");
            body.AppendLine("Congratulations to tournament champion!<br>");
            body.AppendLine("Prizes were assigned as followed:<br>");
            body.AppendLine(GeneratePrizesTable(model));
            body.AppendLine(GeneratePlacesTable(teamsSortedByPlace));
            body.AppendLine($"Thanks to all {model.TournamentName} competitors.");
            body.AppendLine("~Tournament Tracker");

            List <string> bcc = new List <string>();

            foreach (Team t in model.EnteredTeams)
            {
                foreach (Person p in t.TeamMembers)
                {
                    if (p.EmailAddress.Length > 0)
                    {
                        bcc.Add(p.EmailAddress);
                    }
                }
            }

            EmailLogic.SendEmail(new List <string>(), bcc, subject, body.ToString());

            model.CompleteTournament();
        }
        private static decimal CalculatePrizePayout(this Prize prize, decimal totalIncome)
        {
            decimal output = 0;

            if (prize.PrizePercentage > 0)
            {
                output = Decimal.Multiply(totalIncome, Convert.ToDecimal(prize.PrizePercentage / 100));
            }
            else if (prize.PrizeAmount > 0)
            {
                output = prize.PrizeAmount;
            }
            return(output);
        }
Example #3
0
        public Prize CreatePrize(Prize model)
        {
            using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnString(db)))
            {
                var p = new DynamicParameters();
                p.Add("@PlaceNumber", model.PlaceNumber);
                p.Add("@PlaceName", model.PlaceName);
                p.Add("@PrizeAmount", model.PrizeAmount);
                p.Add("@PrizePercentage", model.PrizePercentage);
                p.Add("@id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);

                connection.Execute("dbo.spPrize_Insert", p, commandType: CommandType.StoredProcedure);

                model.Id = p.Get <int>("@id");
                return(model);
            }
        }
Example #4
0
        private static void CompleteTournament(Tournament model)
        {
            GlobalConfig.Connection.CompleteTournament(model);
            Team winners  = model.Rounds.Last().First().Winner;
            Team runnerUp = model.Rounds
                            .Last()
                            .First()
                            .Entrys
                            .Where(x => x.TeamCompeting != winners)
                            .First()
                            .TeamCompeting;

            decimal winnerPrize   = 0;
            decimal runnerUpPrize = 0;

            if (model.Prizes.Count > 0)
            {
                decimal totalIncome = model.EnteredTeams.Count * model.EntryFee;

                Prize firstPlacePrize = model.Prizes.Where(x => x.PlaceNumber == 1).FirstOrDefault();
                if (firstPlacePrize != null)
                {
                    winnerPrize = firstPlacePrize.CalculatePrizePayout(totalIncome);
                }

                Prize secoundPlacePrize = model.Prizes.Where(x => x.PlaceNumber == 2).FirstOrDefault();
                if (firstPlacePrize != null)
                {
                    runnerUpPrize = secoundPlacePrize.CalculatePrizePayout(totalIncome);
                }
            }

            // Send Email to all tournament
            string        subject = "";
            StringBuilder body    = new StringBuilder();

            subject = $"In {model.TournamentName}, {winners.TeamName} has won!";
            body.AppendLine("<h1>We have a WINNER</h1>");
            body.AppendLine("<p>Congratiulations to our winner on a great tournament.</p>");
            body.AppendLine("<br />");

            if (winnerPrize > 0)
            {
                body.AppendLine($"<p>{winners.TeamName} will receive ${winnerPrize} </p>");
            }

            if (runnerUpPrize > 0)
            {
                body.AppendLine($"<p>{runnerUp.TeamName} will receive ${runnerUpPrize} </p>");
            }

            body.AppendLine("<p> Thanks for a great tournament everyone!</p>");
            body.AppendLine("~Tournament Tracker");

            List <string> bcc = new List <string>();

            foreach (Team t in model.EnteredTeams)
            {
                foreach (Person p in t.TeamMembers)
                {
                    if (p.EmailAdress.Length > 0)
                    {
                        bcc.Add(p.EmailAdress);
                    }
                }
            }

            EmailLogic.SendEmail(new List <string>(), bcc, subject, body.ToString());

            // Complete Tournametn
            model.CompleteTournament();
        }