/// <summary> /// Führt ein Update auf der Datenbank aus und ändert den Status und den Completed Wert /// </summary> /// <param name="id">Die ID des Datensatzes der geändert werden soll</param> /// <param name="status">Der neue Status der gesetzt wird</param> /// <param name="completed">Ob der Plan abgeschlossen ist oder nicht</param> private static void SetNewStatus(int id, string status, bool completed) { // Erstellt eine Datenbankverbindung var mssql = new MsSql(); // Öffnet die Datenbankverbindung mssql.Open(); // Der Update SQL Befehl string sql = $"UPDATE schedule SET Status = @status, Completed = @completed WHERE ID = @id"; SqlCommand cmd = new SqlCommand(sql, mssql.Con); // Hängt die Parameter an cmd.Parameters.AddWithValue("@id", id); cmd.Parameters.AddWithValue("@completed", (completed) ? 1 : 0); cmd.Parameters.AddWithValue("@status", status); // Führt die Query aus cmd.ExecuteNonQuery(); // Schliest die Datenbankverbindung mssql.Close(); }
/// <summary> /// Arbeitet alle noch nicht fetiggestellten Mitgliedschaften ab /// </summary> private static void WorkScheduleFromDB() { // Erstellt und öffnet die SQL Verbindung MsSql mssql = new MsSql(); mssql.Open(); // Der SQL Befehl der alle nicht abgeschlossenen Zeilen abfrägt string sql = $"SELECT * FROM schedule WHERE Completed = 0"; SqlCommand cmd = new SqlCommand(sql, mssql.Con); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { // Die einzelnen Spalten des Eintrags int ID = (int)reader["ID"]; string Username = reader["Username"].ToString(); string UserSid = reader["UserSid"].ToString(); string Groupname = reader["Groupname"].ToString(); string GroupSid = reader["GroupSid"].ToString(); DateTime StartDate = (DateTime)reader["StartDate"]; DateTime EndDate = (DateTime)reader["EndDate"]; DateTime EndDatePlus1 = (EndDate != DateTime.MaxValue) ? EndDate : EndDate.AddDays(1); string Status = reader["Status"].ToString(); string Creator = reader["Creator"].ToString(); string Comment = reader["Comment"].ToString(); // Das heutige Datum DateTime now = DateTime.Today; // Falls das Startdatum in der Vergangenheit liegt, das Enddatum in der Zukunft und der Status "planned" ist // Plan startet if (StartDate <= now && now <= EndDatePlus1 && Status == ConstStatus.Planned) { AddUserToGroup(UserSid, GroupSid); WriteNoteToUser(UserSid, DateTime.Now.ToShortDateString() + " - " + Creator + " - Grp: " + Groupname + " hinzugefügt"); SetNewStatus(ID, ConstStatus.Set, false); } // Falls der folge Tag des Enddatums in der Vergangenheit liegt // Plan ist abgelaufen if (EndDatePlus1 <= now) { RemoveUserFromGroup(UserSid, GroupSid); WriteNoteToUser(UserSid, DateTime.Now.ToShortDateString() + " - " + Creator + " - Grp: " + Groupname + " entfernt"); SetNewStatus(ID, ConstStatus.Terminate, true); } // Überprüft die gelöschten Einträge die aber noch nicht abgearbeitet worden sind if (Status == "deleted") { // StartDate liegt in der Vergangenheit // Die Gruppe wurde also schon gesetzt und muss wieder gelöscht werden if (now <= StartDate) { RemoveUserFromGroup(UserSid, GroupSid); WriteNoteToUser(UserSid, DateTime.Now.ToShortDateString() + " - " + Creator + " - Grp: " + Groupname + " entfernt"); } // Setzt die Zeile auf Complete true SetNewStatus(ID, Status, true); } } } mssql.Close(); }