public virtual void ClearUserPicks(LeagueRace leagueRace)
 {
     IList<UserRaceDetail> picks = this.GetPicksForARace(leagueRace);
     foreach (UserRaceDetail urd in picks)
     {
         this.UserRaceDetails.Remove(urd);
     }
 }
        public virtual string GetBody(LeagueRace leagueRace)
        {
            StringBuilder emailBody = new StringBuilder();

            CreatePickText(leagueRace, emailBody, BetTypes.Win);
            CreatePickText(leagueRace, emailBody, BetTypes.Place);
            CreatePickText(leagueRace, emailBody, BetTypes.Show);
            CreatePickText(leagueRace, emailBody, BetTypes.Backup);

            emailBody.AppendLine("");
            emailBody.AppendLine("User id: " + this.User.Id.ToString());

            return emailBody.ToString();
        }
        public static void SendEmail(IEmailable emailEntity, string toAddress, LeagueRace leagueRace)
        {
            MailMessage email = new MailMessage();
            email.From = new MailAddress("*****@*****.**");
            email.To.Add(new MailAddress(toAddress));
            email.Subject = emailEntity.GetSubject(leagueRace);
            email.Body = emailEntity.GetBody(leagueRace);

            #if !DEBUG
            SmtpClient client = new SmtpClient();
            client.EnableSsl = false;
            client.Send(email);
            #endif
        }
        public virtual void AddUserPick(LeagueRace leagueRace, RaceDetail raceDetail, BetTypes betType)
        {
            var userPick = GetPicksForARace(leagueRace).Where(x => x.BetType == betType).FirstOrDefault();

            if (userPick != null && userPick.RaceDetail != raceDetail)
            {
                this.UserRaceDetails.Remove(userPick);
            }
            else if(userPick != null && userPick.RaceDetail == raceDetail)
            {
                return;
            }
            createAndAddUserRace(betType, raceDetail);
        }
 public static RaceDetailPayout GetPayout(BetTypes payoutType, LeagueRace leagueRace)
 {
     var payout = leagueRace.GetPayout(payoutType);
     if (payout == null)
         payout = new RaceDetailPayout()
         {
             RaceDetail = new RaceDetail()
             {
                 Horse = new Horse()
             }
         };
     return payout;
 }
 public virtual bool HasValidRaceCondition(LeagueRace leagueRace)
 {
     return GetPicksForARace(leagueRace).Count > 0;
 }
 public virtual bool HasUserSetPicksForRace(LeagueRace leagueRace)
 {
     return (from urd in UserRaceDetails
             where urd.RaceDetail.LeagueRace == leagueRace
             select urd).Count() > 0;
 }
 public virtual UserRaceDetail GetUserPickByType(LeagueRace leagueRace, BetTypes betType)
 {
     return this.GetPicksForARace(leagueRace).Where(x => x.BetType == betType).FirstOrDefault();
 }
 public virtual string GetSubject(LeagueRace leagueRace)
 {
     return String.Format("Picks for {0}", leagueRace.Race.Name);
 }
 public virtual IList<UserRaceDetail> GetPicksForARace(LeagueRace leagueRace)
 {
     return GetPicksForARaceQueryable(leagueRace).ToList<UserRaceDetail>();
 }
 public static IList<SelectListItem> PopulateHorseDropDown(LeagueRace leagueRace, Predicate<RaceDetail> selectionEval)
 {
     return PopulateHorseDropDown(leagueRace.RaceDetails.ToList(), selectionEval);
 }
        private void CreatePickText(LeagueRace leagueRace, StringBuilder output, BetTypes betType)
        {
            RaceDetail rd = this.GetUserPickByType(leagueRace, betType).RaceDetail;

            output.AppendLine(String.Format("{0}: {1}-{2}", betType.ToString(),
                rd.PostPosition, rd.Horse.Name));
        }
 private IQueryable<UserRaceDetail> GetPicksForARaceQueryable(LeagueRace leagueRace)
 {
     return UserRaceDetails.Where(x => x.RaceDetail.LeagueRace == leagueRace).AsQueryable<UserRaceDetail>();
 }
        public virtual bool WasTrifectaWinner(LeagueRace leagueRace)
        {
            RaceDetailPayout show = leagueRace.Show;
            IList<UserRaceDetail> userRaceDetail = GetPicksForARace(leagueRace);

            return WasExactaWinner(leagueRace) &&
                (show.RaceDetail == userRaceDetail.Where(x => x.BetType ==
                    BetTypes.Show).FirstOrDefault().RaceDetail);
        }
        public virtual bool WasExactaWinner(LeagueRace leagueRace)
        {
            RaceDetailPayout winner = leagueRace.Win;
            RaceDetailPayout place = leagueRace.Place;

            IList<UserRaceDetail> userRaceDetail = GetPicksForARace(leagueRace);
            if(!this.HasValidRaceCondition(leagueRace))
                return false;

            return (winner.RaceDetail == userRaceDetail.Where(x => x.BetType == BetTypes.Win).FirstOrDefault().RaceDetail
                && place.RaceDetail == userRaceDetail.Where(x => x.BetType == BetTypes.Place).FirstOrDefault().RaceDetail);
        }
        public virtual bool IsValidRaceCondition(LeagueRace leagueRace)
        {
            var disPicks = (from dp in GetPicksForARaceQueryable(leagueRace)
                            select dp.RaceDetail.Id).Distinct();

            return disPicks.ToList().Count == 4; //There are 4 possible user entered bet types
        }
 public static RaceDetailPayout GetRaceDetailPayoutForAUserSelection(LeagueRace leagueRace, UserRaceDetail userSelection)
 {
     return (from rdp in leagueRace.RaceDetails
                             where rdp.Id == userSelection.RaceDetail.Id
                             select rdp).FirstOrDefault().RaceDetailPayout[0];
 }
 public string GetBody(LeagueRace leagueRace)
 {
     return "Test Body";
 }
        public static string GetScratchString(LeagueRace leagueDomain)
        {
            IList<RaceDetail> scratches = leagueDomain.GetScratches();

            string scratchOutput = String.Empty;

            if (scratches != null)
            {
                for (int i = 0; i < scratches.Count; i++)
                {
                    if (i != 0)
                    {
                        scratchOutput += ", ";
                    }

                    scratchOutput = String.Concat(scratchOutput, FormatHorseNameForDisplay(scratches[i]));
                }
            }

            return scratchOutput;
        }
 public string GetSubject(LeagueRace leagueRace)
 {
     return "Test Subject";
 }
 public static IList<SelectListItem> PopulateHorseDropDown(LeagueRace leagueRace)
 {
     return PopulateHorseDropDown(leagueRace, (RaceDetail raceDetail) =>
     {
         return false;
     });
 }
        private bool AddExoticWinner(UserLeague userLeague,
            LeagueRace leagueRace, RaceExoticPayout payout,
            Func<LeagueRace, bool> wasWinner)
        {
            if (wasWinner(leagueRace))
            {
                userLeague.League.UserRaceExoticPayouts.Add(new UserRaceExoticPayout()
                {
                    RaceExoticPayout = payout,
                    UserLeague = userLeague,
                    League = userLeague.League
                });

                return true;
            }

            return false;
        }