using System.Collections.Generic;
namespace Mitarbeiterabfrage
public class Mitarbeiterabfrage
public static void Main()
var config = new Config(@"Config.cfg");
string JsonString = HttpRequest();
Root root = JsonConvert.DeserializeObject<Root>(JsonString);
var output = new StringBuilder();
Func<DateTime, string> dateString = d => d switch
_ when d.Date == DateTime.Today.AddDays(-1) => "Gestern",
_ when d.Date == DateTime.Today => "Heute",
_ when d.Date == DateTime.Today.AddDays(1) => "Morgen",
_ => $"{d:dddddd dd.MM.yyyy}"
foreach (var date in Enumerable.Range(-7, 15).Select(i => DateTime.Today.AddDays(i)))
var birthdays = EventRequest(root, date, x => x.Geburtsdatum, x => x.HasBirthday);
if (string.IsNullOrEmpty(birthdays))
output.AppendLine($"<tr>{dateString(date)}:</tr>");
output.AppendLine(birthdays);
output.AppendLine("<tr></tr>");
var HtmlOutput = new StringBuilder();
HtmlOutput.AppendLine("<table>");
HtmlOutput.Append(output);
HtmlOutput.AppendLine("</table><br>");
Console.WriteLine(HtmlOutput);
SendEmail("Test", HtmlOutput.ToString(), config.User, config.Password, config.SmtpClient, config.SmtpPort, "Markus.Rehm@stefani.eu", config.FromEmailAdr);
static string HttpRequest()
string responseFromServer = "";
WebRequest request = WebRequest.Create(
"http://nav2017.smbhep.local:7148/Prod/ODataV4/Company('Stefani%20Maschinenbau%20GmbH')/Geburtstagsliste");
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
using (Stream dataStream = response.GetResponseStream())
StreamReader reader = new StreamReader(dataStream);
responseFromServer = reader.ReadToEnd();
return responseFromServer;
static string EventRequest(Root root, DateTime date, Func<Value, DateTime> dateSelector, Func<Value, Func<DateTime, bool>> checkDate)
return string.Join("\n", root.value.Where(e => checkDate(e)(date)).Select(employee =>
$"<tr><td>{employee.FullName}</td> <td>{date.Year - dateSelector(employee).Year}</td> <td>{dateSelector(employee):dd.MM.yyyy}</td></tr>"));
public static void SendEmail(string subject, string output, string User, string Password, string SmtpServer, int SmtpPort, string DestEmailAdr, string FromEmailAdr)
MailMessage message = new MailMessage();
message.IsBodyHtml = true;
message.From = new MailAddress(FromEmailAdr, FromEmailAdr);
message.To.Add(new MailAddress(DestEmailAdr));
message.Subject = subject;
using (var client = new System.Net.Mail.SmtpClient(SmtpServer, SmtpPort))
client.Credentials = new NetworkCredential(User, Password);
client.EnableSsl = false;
Console.WriteLine("Versuche Email zu senden...");
Console.WriteLine("Email wurde gesendet!");
Console.WriteLine("Email wurde nicht gesendet.");
Console.WriteLine("Fehlermeldung: " + ex.Message);
public string Name { get; set; }
public string Name_2 { get; set; }
public DateTime Eintrittsdatum { get; set; }
public DateTime Austrittsdatum { get; set; }
public DateTime Geburtsdatum { get; set; }
public string AuxiliaryIndex1 { get; set; }
public bool HasBirthday(DateTime day) => Geburtsdatum.Day == day.Day && Geburtsdatum.Month == day.Month;
public bool HasRoundBday(DateTime month) => Geburtsdatum.Month == month.Month && ((month.Year - Geburtsdatum.Year) % 10) == 0;
public bool HasAnniversary(DateTime year) => ((year.Year - Eintrittsdatum.Year) % 5) == 0 && (year.Year - Eintrittsdatum.Year) >= 10;
public string FullName => $"{Name}, {Name_2}";
public List<Value> value { get; set; }
public string User { get; private set; }
public string Password { get; private set; }
public string SmtpClient { get; private set; }
public int SmtpPort { get; private set; }
public string FromEmailAdr { get; private set; }
public string DestEmailAdrBirthd { get; private set; }
public string DestEmailAdrAnniv { get; private set; }
public Config(string filePath) : this(File.ReadAllLines(filePath)) { }
public Config(string[] l) => (User, Password, SmtpClient, FromEmailAdr, DestEmailAdrBirthd, DestEmailAdrAnniv)
= (Read(l, "User"), Read(l, "Password"), Read(l, "SmtpClient"), Read(l, "FromEmailAdr"), Read(l, "DestEmailAdrBirthd"), Read(l, "DestEmailAdrAnniv"));
private string Read(string[] lines, string key)
return lines.Select(l => l.Split(':', 2)).Where(c => c.Count() >= 2)
.Where(c => c[0].Equals(key)).Select(c => c[1]).FirstOrDefault()?.Trim();