Nu skickar vi mail till deltagarna !

This commit is contained in:
2020-04-16 23:21:34 +02:00
parent 7f4bf45850
commit 5d0d891024
7 changed files with 160 additions and 20 deletions

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
namespace TrackerLibrary
{
public static class EmailLogic
{
public static void SendEmail(List<string> to,string subject, string body)
{
MailAddress fromMailAddress = new MailAddress(GlobalConfig.AppKeyLookup("senderEmail"), GlobalConfig.AppKeyLookup("senderDisplayName"));
MailMessage mail = new MailMessage();
to.ForEach(x => mail.To.Add(x));
mail.From = fromMailAddress;
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.Send(mail);
}
}
}

View File

@ -43,5 +43,10 @@ namespace TrackerLibrary
{
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
public static string AppKeyLookup(string key)
{
return ConfigurationManager.AppSettings[key];
}
}
}

View File

@ -27,6 +27,7 @@ namespace TrackerLibrary
public static void UpdateTournamentResults(TournamentModel model)
{
int startingRound = model.CheckCurrentRound();
List<MatchupModel> toScore = new List<MatchupModel>();
foreach (List<MatchupModel> round in model.Rounds)
@ -45,7 +46,78 @@ namespace TrackerLibrary
AdvanceWinners(toScore, model);
toScore.ForEach(x => GlobalConfig.Connection.UpdateMatchup(x));
int endigRound = model.CheckCurrentRound();
if (endigRound > startingRound)
{
model.AlertUsersToNewRound();
}
}
public static void AlertUsersToNewRound(this TournamentModel model)
{
int currentRoundNumber = model.CheckCurrentRound();
List<MatchupModel> currentRound = model.Rounds.Where(x => x.First().MatchupRound == currentRoundNumber).First();
foreach (MatchupModel matchup in currentRound)
{
foreach (MatchupEntryModel me in matchup.Entries)
{
foreach (PersonModel p in me.TeamCompeting.TeamMembers)
{
AlertPersonToNewRound(p, me.TeamCompeting.TeamName, matchup.Entries.Where(x => x.TeamCompeting != me.TeamCompeting).FirstOrDefault());
}
}
}
}
private static void AlertPersonToNewRound(PersonModel p, string teamName, MatchupEntryModel competitor)
{
if (p.EmailAddress.Length == 0)
{
return;
}
List<string> to = new List<string>();
string subject;
StringBuilder body = new StringBuilder();
if (competitor != null)
{
subject = $"You have a new matchup with {competitor.TeamCompeting.TeamName}";
body.AppendLine("<h1>You Have a new matchup</h1>");
body.Append("<strong>Competitor: </strong>");
body.Append(competitor.TeamCompeting.TeamName);
body.AppendLine();
body.AppendLine();
body.AppendLine("Have a great time!");
body.AppendLine("~Tournament Tracker");
}
else
{
subject = "You have a bye week this round";
body.AppendLine("Enjoy your round off!");
body.AppendLine("~Tournament Tracker");
}
to.Add(p.EmailAddress);
EmailLogic.SendEmail( to, subject, body.ToString()); ;
}
private static int CheckCurrentRound(this TournamentModel model)
{
int output = 1;
foreach (List<MatchupModel> round in model.Rounds)
{
if (round.All(x => x.Winner != null))
{
output += 1;
}
}
return output;
}
private static void AdvanceWinners(List<MatchupModel> models, TournamentModel tournament)
@ -120,21 +192,6 @@ namespace TrackerLibrary
}
}
//if (teamOneScore > teamTwoScore)
//{
// // Team one winns
// m.Winner = m.Entries[0].TeamCompeting;
//}
//else
// if (teamTwoScore > teamOneScore)
//{
// // Team one winns
// m.Winner = m.Entries[1].TeamCompeting;
//}
//else
//{
// MessageBox.Show("I dont handle tie games.");
//}
}
private static void CreateOtherRounds(TournamentModel model, int rounds)

View File

@ -52,6 +52,7 @@
<Compile Include="DataAccess\SqlConnector.cs" />
<Compile Include="DataAccess\TextConnector.cs" />
<Compile Include="DataAccess\TextConnectorProcessor.cs" />
<Compile Include="EmailLogic.cs" />
<Compile Include="Enums.cs" />
<Compile Include="GlobalConfig.cs" />
<Compile Include="Models\MatchupEntryModel.cs" />

View File

@ -4,13 +4,22 @@
<add key="filePath" value="D:\data\TournamentTracker"/>
<!--<add key="filePath" value="C:\AppData\TournamentTracker"/>-->
<add key="greaterWins" value="1"/>
<add key="senderEmail" value="tommy@oeman.se"/>
<add key="senderDisplayName" value="Tommy Öman"/>
</appSettings>
<connectionStrings>
<!--<add name="Tournaments" connectionString="Server=TOMMYASUS\SQLEXPR2017;Database=Tournaments;Trusted_Connection=True;" providerName="System.Data.SqlClient"/>-->
<add name="Tournaments" connectionString="Server=.\SQLEXPR2017;Database=Tournaments;Trusted_Connection=True;" providerName="System.Data.SqlClient"/>
<!--Data Source=TOMMYASUS\SQLEXPR2017;Initial Catalog=Tournaments;Integrated Security=True-->
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="127.0.0.1" userName="tfoman" password="testing" port="25" enableSsl="false"/>
</smtp>
</mailSettings>
</system.net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@ -133,7 +133,7 @@ namespace TrackerUI
// Create all of team entries
GlobalConfig.Connection.CreateTournament(tm);
tm.AlertUsersToNewRound();
TournamentViewerForm frm = new TournamentViewerForm(tm);
frm.Show();

View File

@ -154,9 +154,44 @@ namespace TrackerUI
LoadMatchups((int)roundDropDown.SelectedItem);
}
private string ValidateData()
{
string output = "";
double teamOneScore = 0;
double teamTwoScore = 0;
bool scoreOneValid = double.TryParse(teamOneScoreValue.Text, out teamOneScore);
bool scoreTwoValid = double.TryParse(teamTwoScoreValue.Text, out teamTwoScore);
if (!scoreOneValid )
{
output = "The score One is not a valid number.";
}
else if (!scoreTwoValid)
{
output = "The score Tow is not a valid number.";
}
else if (teamOneScore == 0 && teamTwoScore == 0)
{
output = "You did not enter a score for either team.";
}
else if (teamOneScore == teamTwoScore)
{
output = "We do not allow ties in this application.";
}
return output;
}
private void scoreButton_Click(object sender, EventArgs e)
{
var errorMessage = ValidateData();
if (errorMessage.Length>0)
{
MessageBox.Show($"Input Error: {errorMessage}");
return;
}
MatchupModel m = (MatchupModel)MatchUpListBox.SelectedItem;
double teamOneScore = 0;
double teamTwoScore = 0;
@ -199,8 +234,16 @@ namespace TrackerUI
}
}
TournamentLogic.UpdateTournamentResults(tournament);
try
{
TournamentLogic.UpdateTournamentResults(tournament);
}
catch (Exception ex)
{
MessageBox.Show($"The application had the following error :{ex.Message}");
return;
}
LoadMatchups((int)roundDropDown.SelectedItem);
}