/// <summary>
 /// The generate email body.
 /// </summary>
 /// <param name="page10ViewData">
 /// The page 10 View Data.
 /// </param>
 /// <returns>
 /// The <see cref="string"/>.
 /// </returns>
 private string GenerateEmailBody(Page10ViewData page10ViewData)
 {
     using (StringWriter writer = new StringWriter())
     {
         this.ViewData.Model = page10ViewData;
         ViewEngineResult result      = ViewEngines.Engines.FindPartialView(this.ControllerContext, "TournamentRegistration/EmailPartial");
         ViewContext      viewContext = new ViewContext(this.ControllerContext, result.View, this.ViewData, this.TempData, writer);
         result.View.Render(viewContext, writer);
         return(writer.GetStringBuilder().ToString());
     }
 }
        public ActionResult Page10(int id)
        {
            string judgeFirstName;
            string judgeLastName;

            if (this.CurrentRegistrationState != RegistrationState.Available)
            {
                return(this.RedirectToAction(this.CurrentRegistrationState.ToString()));
            }

            var viewData = new Page10ViewData();

            this.SetBaseViewData(viewData);

            // Build the e-mail subject in case an error occurs.
            var emailSubject = string.Format("Error: {0} Odyssey Region {1} Tournament Registration", viewData.RegionName, viewData.RegionNumber);

            short?judgeId = this.Repository.GetJudgeIdFromTournamentRegistrationId(id);

            if (judgeId.HasValue)
            {
                // Attempt to write the Tournament Registration ID into the correct Judge record.
                string errorMessage;
                this.Repository.UpdateJudgeRecordWithTournamentRegistrationId(judgeId, id, out errorMessage);

                if (!string.IsNullOrWhiteSpace(errorMessage))
                {
                    viewData.JudgeErrorMessage = errorMessage;

                    // Instantiate a new instance of MailMessage
                    var errorMailMessage = this.BuildMessage(
                        viewData.Config["WebmasterEmail"],
                        emailSubject,
                        string.Format("<p>Team with ID # {0} attempted to re-register after its judge was assigned to the team.</p><p>{1}</p>", id, errorMessage),
                        viewData.Config["WebmasterEmail"],
                        null,
                        null);

                    // Instantiate a new instance of SmtpClient.
                    viewData.MailErrorMessage = this.SendMessage(viewData, errorMailMessage);

                    return(this.View(viewData));
                }
            }
            else
            {
                // No Judge ID was found for this team, so send an error message e-mail.
                var errorMailMessage = this.BuildMessage(
                    viewData.Config["WebmasterEmail"],
                    emailSubject,
                    string.Format("<p>Team with ID # {0} attempted to register, but no Judge ID was found in the TournamentRegistration table for the team.</p>", id),
                    viewData.Config["WebmasterEmail"],
                    null,
                    null);

                // Instantiate a new instance of SmtpClient.
                viewData.MailErrorMessage = this.SendMessage(viewData, errorMailMessage);

                // TODO: Does this actually display the error to the user? - Rob, 01/18/2015.
                viewData.JudgeErrorMessage = "No Judge ID could be found in the TournamentRegistration table for your team.  Please contact the Webmaster.";
                return(this.View(viewData));
            }

            ////int? volunteerId = this.Repository.GetVolunteerIdFromTournamentRegistrationId(id);
            ////if (volunteerId.HasValue)
            ////{
            ////    // Attempt to write the Tournament Registration ID into the correct Volunteer record.
            ////    this.Repository.UpdateVolunteerRecordWithTournamentRegistrationId(volunteerId.Value, id, out errorMessage);

            ////    if (!string.IsNullOrEmpty(errorMessage))
            ////    {
            ////        viewData = new Page10ViewData
            ////        {
            ////            VolunteerErrorMessage = errorMessage
            ////        };

            ////        this.SetBaseViewData(viewData);

            ////        // Instantiate a new instance of MailMessage.
            ////        errorMailMessage = this.BuildMessage(
            ////            viewData.Config["WebmasterEmail"],
            ////            "Error: " + viewData.RegionName + " Odyssey Region " + viewData.RegionNumber + " Tournament Registration",
            ////            string.Concat("<p>Team with ID # ", id, " attempted to re-register after its volunteer was assigned to the team.</p><p>", errorMessage, "</p>"),
            ////            viewData.Config["WebmasterEmail"],
            ////            null,
            ////            null);

            ////        // Instantiate a new instance of SmtpClient.
            ////        viewData.MailErrorMessage = this.SendMessage(viewData, errorMailMessage);

            ////        return this.View(viewData);
            ////    }
            ////}

            // The Tournament Registration ID was successfully written into the correct Judge and Volunteer records.
            viewData = new Page10ViewData
            {
                TournamentInfo         = this.Repository.TournamentInfo,
                TournamentRegistration = this.Repository.GetTournamentRegistrationById(id)
            };

            // Update the DateTime of the registration in the TournamentRegistration record.
            viewData.TournamentRegistration.TimeRegistered = DateTime.Now;
            this.Repository.UpdateTournamentRegistration(id, 10, viewData.TournamentRegistration);

            this.SetBaseViewData(viewData);
            this.Repository.GetJudgeNameFromJudgeId(judgeId, out judgeFirstName, out judgeLastName);
            viewData.JudgeFirstName = judgeFirstName;
            viewData.JudgeLastName  = judgeLastName;

            ////Volunteer volunteerById = this.Repository.GetVolunteerById(viewData.TournamentRegistration.VolunteerID);
            ////viewData.VolunteerFirstName = volunteerById.FirstName;
            ////viewData.VolunteerLastName = volunteerById.LastName;

            viewData.SchoolName  = this.Repository.GetSchoolNameFromSchoolId(viewData.TournamentRegistration.SchoolID);
            viewData.ProblemName = this.Repository.GetProblemNameFromProblemId(viewData.TournamentRegistration.ProblemID);
            viewData.Division    = (viewData.TournamentRegistration.Division == "0") ? "Primary" : viewData.TournamentRegistration.Division;
            viewData.MailBody    = this.GenerateEmailBody(viewData);

            // Instantiate a new instance of MailMessage.
            MailMessage mailMessage = this.BuildMessage(
                viewData.Config["WebmasterEmail"],
                viewData.RegionName + " Odyssey Region " + viewData.RegionNumber + " Tournament Registration",
                viewData.MailBody,
                viewData.TournamentRegistration.CoachEmailAddress,
                null,
                null);

            // Instantiate a new instance of SmtpClient.
            viewData.MailErrorMessage = this.SendMessage(viewData, mailMessage);
            return(this.View(viewData));
        }
        public ActionResult ResendEmail(FormCollection collection)
        {
            ResendEmailViewData model = new ResendEmailViewData();

            this.UpdateModel(model);

            Page10ViewData viewData = new Page10ViewData
            {
                TournamentInfo         = this.Repository.TournamentInfo,
                TournamentRegistration = this.Repository.GetTournamentRegistrationById(model.TeamNumber)
            };

            this.SetBaseViewData(viewData);

            // Make sure at least one of the two check boxes was checked.
            if ((model.CoachCheckbox == "false") && (model.AltCoachCheckbox == "false"))
            {
                model.ErrorMessage = "No one was selected to resend the registration information to, so no e-mail was sent.";
                model.Success      = false;
                return(this.View(model));
            }

            string recipientList = string.Empty;

            if (model.CoachCheckbox == "true")
            {
                recipientList += viewData.TournamentRegistration.CoachEmailAddress;
            }

            if (model.AltCoachCheckbox == "true")
            {
                if (!string.IsNullOrEmpty(recipientList))
                {
                    recipientList = recipientList + ",";
                }

                recipientList += viewData.TournamentRegistration.AltCoachEmailAddress;
            }

            string judgeFirstName;
            string judgeLastName;

            this.Repository.GetJudgeNameFromJudgeId(viewData.TournamentRegistration.JudgeID, out judgeFirstName, out judgeLastName);

            viewData.JudgeFirstName = judgeFirstName;
            viewData.JudgeLastName  = judgeLastName;

            ////Volunteer volunteerById = this.Repository.GetVolunteerById(viewData.TournamentRegistration.VolunteerID);
            ////viewData.VolunteerFirstName = volunteerById.FirstName;
            ////viewData.VolunteerLastName = volunteerById.LastName;

            viewData.SchoolName  = this.Repository.GetSchoolNameFromSchoolId(viewData.TournamentRegistration.SchoolID);
            viewData.ProblemName = this.Repository.GetProblemNameFromProblemId(viewData.TournamentRegistration.ProblemID);
            viewData.MailBody    = this.GenerateEmailBody(viewData);

            // Instantiate a new instance of MailMessage.
            MailMessage mailMessage = this.BuildMessage(
                viewData.Config["WebmasterEmail"],
                viewData.RegionName + " Odyssey Region " + viewData.RegionNumber + " Tournament Registration",
                viewData.MailBody,
                recipientList,
                "*****@*****.**",
                null);

            // Instantiate a new instance of SmtpClient.
            model.ErrorMessage = this.SendMessage(model, mailMessage);

            model.Success = true;

            return(this.View(model));
        }