185 lines
6.4 KiB
C#
185 lines
6.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Security.Cryptography;
|
|
using Microsoft.Data.Sqlite;
|
|
using ChronoFlow.Model;
|
|
|
|
namespace ChronoFlow.Persistence
|
|
{
|
|
public class SqliteZeiterfassungsService
|
|
{
|
|
private readonly string _dbPath = "chrono_data_v2.sb";
|
|
|
|
public SqliteZeiterfassungsService()
|
|
{
|
|
// Prüfe, ob die DB existiert, sonst erstelle sie
|
|
if (!File.Exists(_dbPath))
|
|
ErstelleDatenbank();
|
|
}
|
|
|
|
private void ErstelleDatenbank()
|
|
{
|
|
Console.WriteLine("🛠️ ErstelleDatenbank wurde aufgerufen!");
|
|
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
var cmd1 = connection.CreateCommand();
|
|
cmd1.CommandText = @"
|
|
CREATE TABLE IF NOT EXISTS Zeiteintraege (
|
|
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
Mitarbeiter TEXT NOT NULL,
|
|
Startzeit TEXT NOT NULL,
|
|
Endzeit TEXT NOT NULL,
|
|
Projekt TEXT,
|
|
Kommentar TEXT,
|
|
Erledigt INTEGER,
|
|
MitarbeiterKommentar TEXT
|
|
);";
|
|
cmd1.ExecuteNonQuery();
|
|
|
|
var cmd2 = connection.CreateCommand();
|
|
cmd2.CommandText = @"
|
|
CREATE TABLE IF NOT EXISTS Benutzer (
|
|
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
Username TEXT NOT NULL,
|
|
Password TEXT NOT NULL,
|
|
Role TEXT NOT NULL,
|
|
Mitarbeiternummer TEXT,
|
|
Abteilung TEXT
|
|
);";
|
|
cmd2.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
public void SpeichereEintrag(Zeiteintrag eintrag)
|
|
{
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
var cmd = connection.CreateCommand();
|
|
cmd.CommandText = @"
|
|
INSERT INTO Zeiteintraege
|
|
(Mitarbeiter, Startzeit, Endzeit, Projekt, Kommentar, Erledigt, MitarbeiterKommentar)
|
|
VALUES ($Mitarbeiter, $Startzeit, $Endzeit, $Projekt, $Kommentar, $Erledigt, $MitarbeiterKommentar);
|
|
";
|
|
|
|
cmd.Parameters.AddWithValue("$Mitarbeiter", eintrag.Mitarbeiter);
|
|
cmd.Parameters.AddWithValue("$Startzeit", eintrag.Startzeit.ToString("o"));
|
|
cmd.Parameters.AddWithValue("$Endzeit", eintrag.Endzeit.ToString("o"));
|
|
cmd.Parameters.AddWithValue("$Projekt", eintrag.Projekt ?? "");
|
|
cmd.Parameters.AddWithValue("$Kommentar", eintrag.Kommentar ?? "");
|
|
cmd.Parameters.AddWithValue("$Erledigt", eintrag.Erledigt ? 1 : 0);
|
|
cmd.Parameters.AddWithValue("$MitarbeiterKommentar", eintrag.MitarbeiterKommentar ?? "");
|
|
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
public List<Zeiteintrag> LadeAlleZeiteintraege()
|
|
{
|
|
var eintraege = new List<Zeiteintrag>();
|
|
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
var cmd = connection.CreateCommand();
|
|
cmd.CommandText = "SELECT * FROM Zeiteintraege;";
|
|
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
eintraege.Add(new Zeiteintrag
|
|
{
|
|
Mitarbeiter = reader.GetString(1),
|
|
Startzeit = DateTime.Parse(reader.GetString(2)),
|
|
Endzeit = DateTime.Parse(reader.GetString(3)),
|
|
Projekt = reader.GetString(4),
|
|
Kommentar = reader.GetString(5),
|
|
Erledigt = Convert.ToInt32(reader["Erledigt"]) == 1,
|
|
MitarbeiterKommentar = reader.GetString(7)
|
|
});
|
|
}
|
|
|
|
return eintraege;
|
|
}
|
|
public List<string> LadeAlleMitarbeiterNamen()
|
|
{
|
|
var namen = new List<string>();
|
|
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
var cmd = connection.CreateCommand();
|
|
cmd.CommandText = "SELECT Username From Benutzer Where Role = 'Mitarbeiter';";
|
|
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
namen.Add(reader.GetString(0));
|
|
}
|
|
return namen;
|
|
}
|
|
public List<User> LadeAlleBenutzer()
|
|
{
|
|
var benutzerListe = new List<User>();
|
|
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
var cmd = connection.CreateCommand();
|
|
cmd.CommandText = "SELECT Username, Password, Role, Mitarbeiternummer, Abteilung FROM Benutzer;";
|
|
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
benutzerListe.Add(new User
|
|
{
|
|
Username = reader.GetString(0),
|
|
Password = reader.GetString(1),
|
|
Role = reader.GetString(2),
|
|
Mitarbeiternummer = reader.IsDBNull(3) ? "" : reader.GetString(3),
|
|
Abteilung = reader.IsDBNull(4) ? "" : reader.GetString(4)
|
|
});
|
|
}
|
|
|
|
return benutzerListe;
|
|
}
|
|
|
|
public void ErstelleStandardAdmin()
|
|
{
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
var cmd = connection.CreateCommand();
|
|
cmd.CommandText = @"
|
|
INSERT INTO Benutzer (Username, Password, Role, Mitarbeiternummer, Abteilung)
|
|
VALUES ('admin', 'admin', 'Admin', '0001', 'IT');
|
|
";
|
|
|
|
cmd.ExecuteNonQuery();
|
|
|
|
Console.WriteLine("✅ Standard-Admin erfolgreich eingefügt.");
|
|
}
|
|
|
|
public List<string> LadeAlleBenutzernamen()
|
|
{
|
|
var benutzernamen = new List<string>();
|
|
|
|
using var connection = new SqliteConnection($"Data Source={_dbPath}");
|
|
connection.Open();
|
|
|
|
using var cmd = connection.CreateCommand();//<--- Wir erstellen cmd
|
|
cmd.CommandText = "SELECT Username From Benutzer;";
|
|
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
benutzernamen.Add(reader.GetString(0));
|
|
}
|
|
return benutzernamen;
|
|
}
|
|
|
|
}
|
|
}
|