Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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!");
                }
            }
        }
Ejemplo n.º 4
0
 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());
     }
 }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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());
        }