public static void OnEmailWeek(DateTime date) { new Thread(() => { try { var startEndWeek = TimeServer.StartEndWeek(date); DateTime start = startEndWeek[0]; DateTime end = startEndWeek[1]; var days = DataBaseManager.Instance.DaysInRange(start, end); using (MailMessage msg = new MailMessage(AppSettings.Instance.FromAddress, AppSettings.Instance.ToAddress)) { SmtpClient smtp = new SmtpClient(); NetworkCredential basicCredential = new NetworkCredential(AppSettings.Instance.FromUser, AppSettings.Instance.FromPass); smtp.EnableSsl = AppSettings.Instance.SslEmail == "true"; smtp.Port = Convert.ToInt32(AppSettings.Instance.FromPort); smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.UseDefaultCredentials = false; smtp.Credentials = basicCredential; smtp.Host = AppSettings.Instance.EmailHost; msg.Subject = "Time"; msg.Attachments.Add(new Attachment(SaveReport(DaysToHtml(days), start, end))); msg.Body = "Auto generated time report."; smtp.Send(msg); MessageBox.Show("Mail sent!"); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }).Start(); }
/// <summary> /// Returns list of type Commit of all /// commits of current user on given date. /// </summary> /// <param name="datetime"></param> /// <returns></returns> public List <GitCommit> CommitsOnDate(DateTime datetime) { List <GitCommit> result = new List <GitCommit>(); var commits = Commits(); try { foreach (GitCommit commit in commits) { try { if (TimeServer.DateString(commit.Date) == TimeServer.DateString(datetime)) { result.Add(commit); } } catch (Exception) { // eat it } } } catch (Exception) { // eat it } return(result); }
private DataBaseManager() { _primary = Sqlite.LoadFromFile(); _primary.ProgressChangedEvent += OnProgressChangedEvent; _primary.ProgressFinishEvent += OnProgressFinishEvent; if (AppSettings.Instance.SqlEnabled == "true") { if (AppSettings.Instance.SqlType == "MySql" && !string.IsNullOrEmpty(AppSettings.Instance.MySqlServer)) { MySqlConnectionStringBuilder mysqlBuiler = new MySqlConnectionStringBuilder()// Database is set later in constructor! { Server = AppSettings.Instance.MySqlServer, UserID = AppSettings.Instance.MySqlUserId, Password = AppSettings.Instance.MySqlPassword, Port = (uint)AppSettings.Instance.MySqlPort, SslMode = AppSettings.Instance.MySqlSsl == "true" ? MySqlSslMode.Required : MySqlSslMode.None }; try { _secondary = new MySql(mysqlBuiler, MySql.UpdateModes.Async); // Associate events _secondary.TimeDateaUpdate += OnTimeDateaUpdate; _secondary.ProgressChangedEvent += OnProgressChangedEvent; _secondary.ProgressFinishEvent += OnProgressFinishEvent; _secondary.ConnectionChangedEvent += OnConnectionChangedEvent; _secondary.UpdateChangedEvent += OnUpdateChangedEvent; var daysInWeek = _primary.DaysInRange(StartEndWeek(DateTime.Today)[0], StartEndWeek(DateTime.Today)[1]); if (_secondary.ServerState == State.Connected) { _secondary.Push(daysInWeek); } } catch (Exception e) { Console.WriteLine(e); MessageBox.Show(e.Message); } } else if (AppSettings.Instance.SqlType == "Azure" && !string.IsNullOrEmpty(AppSettings.Instance.AzureDateSource)) { MessageBox.Show("Azure sql not implemented!"); } } }
public static void OnPreviewWeek(DateTime date) { try { var startEndWeek = TimeServer.StartEndWeek(date); DateTime start = startEndWeek[0]; DateTime end = startEndWeek[1]; var days = DataBaseManager.Instance.DaysInRange(start, end); Process.Start(SaveReport(DaysToHtml(days), start, end)); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public static string SaveReport(string html, DateTime dateA, DateTime dateB) { string reportLocation = TimeServer.AppDataDirectory + "\\Reports"; string reportName = $"{TimeServer.SqlCurrentUser}-({TimeServer.DateSqLite(dateA)})-({TimeServer.DateSqLite(dateB)}).html"; if (!Directory.Exists(reportLocation)) { Directory.CreateDirectory(reportLocation); } if (File.Exists(Path.Combine(reportLocation, reportName))) { File.Delete(Path.Combine(reportLocation, reportName)); } File.WriteAllText(Path.Combine(reportLocation, reportName), html); return(Path.Combine(reportLocation, reportName)); }
public static string DaysToHtml(List <Day> days) { StringWriter stringWriter = new StringWriter(); using (HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter)) { htmlWriter.RenderBeginTag("html"); // Head htmlWriter.RenderBeginTag("head"); htmlWriter.RenderBeginTag("title"); htmlWriter.Write($"{TimeServer.SqlCurrentUser}'s Time Report"); htmlWriter.RenderEndTag(); htmlWriter.RenderEndTag(); // Body htmlWriter.AddStyleAttribute("margin", "auto"); htmlWriter.AddStyleAttribute("max-width", "1000"); htmlWriter.AddStyleAttribute("max-width", "700"); htmlWriter.RenderBeginTag("body"); if (days.Count > 0) { string minString = TimeServer.DateString(days.Min(d => d.Date)); string maxString = TimeServer.DateString(days.Max(d => d.Date)); // Header htmlWriter.AddStyleAttribute("color", "blue"); htmlWriter.RenderBeginTag("h1"); // Header text htmlWriter.AddAttribute("align", "center"); htmlWriter.RenderBeginTag("p"); htmlWriter.Write($"{TimeServer.SqlCurrentUser}'s time report <br> ({minString} - {maxString})"); htmlWriter.RenderEndTag(); htmlWriter.RenderEndTag(); // List of time entries htmlWriter.RenderBeginTag("ul"); foreach (Day day in days) { htmlWriter.RenderBeginTag("li"); // Date htmlWriter.AddAttribute("title", "Date"); htmlWriter.RenderBeginTag("font"); htmlWriter.Write(day.Date.DayOfWeek + " " + TimeServer.DateString(day.Date) + "<br>"); htmlWriter.RenderEndTag(); // Hours htmlWriter.AddAttribute("title", "Hours as decimal"); htmlWriter.RenderBeginTag("font"); htmlWriter.Write(day.HoursAsDecToQuarter + " hr.<br>"); htmlWriter.RenderEndTag(); // Details if (!string.IsNullOrEmpty(day.Details)) { htmlWriter.AddAttribute("title", "Work details"); htmlWriter.RenderBeginTag("font"); htmlWriter.Write(day.Details + "<br>"); htmlWriter.RenderEndTag(); } // Git commits if (AppSettings.Instance.GitEnabled) { var commits = DataBaseManager.Instance.GetCommits(day.Date.Date); if (commits.Count > 0) { htmlWriter.AddAttribute("title", "Commits"); htmlWriter.RenderBeginTag("ul"); foreach (GitCommit commit in commits) { htmlWriter.RenderBeginTag("li"); htmlWriter.AddAttribute("title", "Commit message"); htmlWriter.RenderBeginTag("font"); htmlWriter.Write($"{commit.Message} <br>"); htmlWriter.RenderEndTag(); htmlWriter.RenderEndTag(); } htmlWriter.RenderEndTag(); } } // Divider htmlWriter.RenderBeginTag("p"); htmlWriter.Write("\n"); htmlWriter.RenderEndTag(); } htmlWriter.RenderEndTag(); // Total hours htmlWriter.AddAttribute("title", "Total hours as decimal"); htmlWriter.AddAttribute("align", "center"); htmlWriter.AddStyleAttribute("color", "red"); htmlWriter.RenderBeginTag("p"); htmlWriter.AddAttribute("font size", "6"); htmlWriter.RenderBeginTag("font"); htmlWriter.Write($"Total: {days.Sum(d => d.HoursAsDecToQuarter)}"); htmlWriter.RenderEndTag(); htmlWriter.RenderEndTag(); } // Link htmlWriter.AddAttribute("align", "center"); htmlWriter.RenderBeginTag("p"); htmlWriter.Write("Brought to you by <a href = http://wrmcodeblocks.com/TheTimeApp/Downloads/ title = 'Link to download site'> TheTimeApp </a>."); htmlWriter.RenderEndTag(); htmlWriter.RenderEndTag(); htmlWriter.RenderEndTag(); } return(stringWriter.ToString()); }