diff --git a/Jugenddienst Stunden/Jugenddienst Stunden.csproj b/Jugenddienst Stunden/Jugenddienst Stunden.csproj
index a6e7250..2367648 100644
--- a/Jugenddienst Stunden/Jugenddienst Stunden.csproj
+++ b/Jugenddienst Stunden/Jugenddienst Stunden.csproj
@@ -64,6 +64,7 @@
com.danielpichler.jugenddienststunden
+ True
@@ -80,6 +81,10 @@
$(TargetFrameworks);net8.0-windows10.0.26100.0
+
+ True
+
+
diff --git a/Jugenddienst Stunden/Models/Auth.cs b/Jugenddienst Stunden/Models/Auth.cs
index aa47b8a..e32cbf0 100644
--- a/Jugenddienst Stunden/Models/Auth.cs
+++ b/Jugenddienst Stunden/Models/Auth.cs
@@ -70,6 +70,24 @@ namespace Jugenddienst_Stunden.Models {
//}
}
+ public static async Task DeleteItemAsync(string url, string token) {
+ //using (HttpClient client = new HttpClient() { Timeout = TimeSpan.FromSeconds(15) }) {
+
+ try {
+ HttpClient client = new HttpClient();
+ client.DefaultRequestHeaders.Add("Accept", "application/json");
+ client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
+
+ HttpResponseMessage response = await client.DeleteAsync(url);
+
+ if (response.IsSuccessStatusCode)
+ Debug.WriteLine(@"\tTodoItem successfully deleted.");
+ } catch (Exception ex) {
+ Debug.WriteLine(@"\tERROR {0}", ex.Message);
+ }
+ //}
+ }
+
}
}
diff --git a/Jugenddienst Stunden/Models/Stunde.cs b/Jugenddienst Stunden/Models/Stunde.cs
index dda98c9..68ff1cc 100644
--- a/Jugenddienst Stunden/Models/Stunde.cs
+++ b/Jugenddienst Stunden/Models/Stunde.cs
@@ -24,8 +24,9 @@ namespace Jugenddienst_Stunden.Models {
//Christine Feichter
public static string apiKey = Preferences.Default.Get("apiKey", "MTQzfEFlMVRjQXdZMnI4RmpxZ0FSY3A0VEN2bVZYVXxodHRwOi8vaG91cnMuZGF1bmkubWluZS5udTo4MS9hcHBhcGk=");
- public static string name = Preferences.Default.Get("name", "Christine");
- public static string surname = Preferences.Default.Get("surname", "Feichter");
+ public static int EmployeeId = Preferences.Default.Get("employeeId", 0);
+ public static string name = Preferences.Default.Get("name", "Vorname");
+ public static string surname = Preferences.Default.Get("surname", "Nachname");
public static string apiUrl = Preferences.Default.Get("apiUrl", "https://");
//Damian
@@ -71,6 +72,32 @@ namespace Jugenddienst_Stunden.Models {
return hours;
}
+ public static async Task LoadBasicData() {
+
+
+ Hours hours = new Hours();
+
+ if (Connectivity.Current.NetworkAccess == NetworkAccess.None) {
+ await App.Current.MainPage.DisplayAlert("Keine Internetverbindung",
+ "Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.",
+ "OK");
+ } else {
+ var tokendata = new TokenData(apiKey);
+
+ string data = await Auth.GetApiDataWithAuthAsync(tokendata.url + "?basic", tokendata.apiKey);
+
+ if (data == "null") {
+ throw new Exception("Keine Daten erhalten");
+ }
+ if (data == "\"Lalala\"") {
+ throw new Exception("Problem mit Token");
+ }
+
+ hours = JsonConvert.DeserializeObject(data);
+
+ }
+ return hours;
+ }
public static async Task> LoadDay(DateTime date) {
@@ -134,7 +161,18 @@ namespace Jugenddienst_Stunden.Models {
public static async Task SaveEntry(DayTime stunde) { //, string begin, string end, string freistellung, string bemerkung) {
var tokendata = new TokenData(apiKey);
- await Auth.SaveItemAsync(tokendata.url, tokendata.apiKey, stunde,false);
+ bool isNew = false;
+ if (stunde.id == null)
+ isNew = true;
+ await Auth.SaveItemAsync(tokendata.url, tokendata.apiKey, stunde, isNew);
+
+ return stunde;
+ }
+
+ public static async Task DeleteEntry(DayTime stunde) { //, string begin, string end, string freistellung, string bemerkung) {
+
+ var tokendata = new TokenData(apiKey);
+ await Auth.DeleteItemAsync(tokendata.url + "/entry/" + stunde.id, tokendata.apiKey);
return stunde;
}
diff --git a/Jugenddienst Stunden/Types/Hours.cs b/Jugenddienst Stunden/Types/Hours.cs
index 87d0d4a..9009063 100644
--- a/Jugenddienst Stunden/Types/Hours.cs
+++ b/Jugenddienst Stunden/Types/Hours.cs
@@ -2,6 +2,7 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Jugenddienst_Stunden.Models;
using Newtonsoft.Json;
+using System.Collections.ObjectModel;
namespace Jugenddienst_Stunden.Types
{
@@ -17,9 +18,9 @@ namespace Jugenddienst_Stunden.Types
public string zeit_total;
//https://stackoverflow.com/questions/29449641/deserialize-json-when-a-value-can-be-an-object-or-an-empty-array/29450279#29450279
-
//[JsonConverter(typeof(JsonSingleOrEmptyArrayConverter))]
//public Dictionary zeit_total_daily;
+
public List zeit_total_daily_api;
public List daytime;
//public List wochensumme;
@@ -38,6 +39,9 @@ namespace Jugenddienst_Stunden.Types
public DateTime Date;
public DateTime MinDate;
public DateTime MaxDate;
+ public Collection Projekte { get; set; }
+ public Collection Gemeinden { get; set; }
+ public int EmployeeId { get; set; }
- }
+ }
}
diff --git a/Jugenddienst Stunden/ViewModels/LoginViewModel.cs b/Jugenddienst Stunden/ViewModels/LoginViewModel.cs
index 6d9eb3a..cc65d8d 100644
--- a/Jugenddienst Stunden/ViewModels/LoginViewModel.cs
+++ b/Jugenddienst Stunden/ViewModels/LoginViewModel.cs
@@ -11,7 +11,7 @@ namespace Jugenddienst_Stunden.ViewModels {
public string Message => "Scanne den QR-Code von deinem Benutzerprofil auf der Stundenseite.";
- public string Server { get; set; } = "Server: " + Preferences.Default.Get("apiUrl", "https://");
+ public string Server { get; set; } = "Server: " + Preferences.Default.Get("apiUrl", "https://").Replace("/appapi","");
public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", "");
diff --git a/Jugenddienst Stunden/ViewModels/StundeViewModel.cs b/Jugenddienst Stunden/ViewModels/StundeViewModel.cs
index 9b20330..40347fc 100644
--- a/Jugenddienst Stunden/ViewModels/StundeViewModel.cs
+++ b/Jugenddienst Stunden/ViewModels/StundeViewModel.cs
@@ -22,6 +22,7 @@ namespace Jugenddienst_Stunden.ViewModels {
public DayTime Stunde { get => _stunde; }
+
public event EventHandler AlertEvent;
public ObservableCollection OptionsGemeinde { get; private set; }
@@ -63,38 +64,25 @@ namespace Jugenddienst_Stunden.ViewModels {
}
}
-
- //public TimeSpan Von {
- // get => _stunde.begin.ToTimeSpan();
- // set {
- // if (_stunde.begin.ToTimeSpan() != value) {
- // _stunde.begin = TimeOnly.FromTimeSpan(value);
- // OnPropertyChanged(nameof(Von));
- // }
- // }
- //}
- //public TimeSpan Bis {
- // get => _stunde.end.ToTimeSpan();
- // set {
- // if (_stunde.end.ToTimeSpan() != value) {
- // _stunde.end = TimeOnly.FromTimeSpan(value);
- // OnPropertyChanged(nameof(Bis));
- // }
- // }
- //}
+ public Collection Projekte { get; set; }
+ public Collection Gemeinden { get; set; }
-
public ICommand SaveCommand { get; private set; }
public ICommand DeleteCommand { get; private set; }
+ //public ICommand LoadDataCommand { get; private set; }
public StundeViewModel() {
_stunde = new DayTime();
+ //_stunde.EmployeeId = Preferences.Default.Get("employeeId", 0);
+
+ //LoadDataCommand = new AsyncRelayCommand(LoadData);
+
SaveCommand = new AsyncRelayCommand(Save);
- //DeleteCommand = new AsyncRelayCommand(Delete);
+ DeleteCommand = new AsyncRelayCommand(Delete);
OptionsFreistellung = new ObservableCollection {
"Keine",
@@ -102,30 +90,50 @@ namespace Jugenddienst_Stunden.ViewModels {
"Krankheit",
"Elternzeit"
};
+
+ _ = LoadData();
}
public StundeViewModel(DayTime stunde) {
_stunde = stunde;
SaveCommand = new AsyncRelayCommand(Save);
- //DeleteCommand = new AsyncRelayCommand(Delete);
+ DeleteCommand = new AsyncRelayCommand(Delete);
+ }
+
+ private async Task LoadData() {
+ try {
+ Hours _hours = await Models.Stunde.LoadBasicData();
+ OptionsProjekt = new ObservableCollection(_hours.Projekte);
+ OptionsGemeinde = new ObservableCollection(_hours.Gemeinden);
+ OnPropertyChanged(nameof(OptionsGemeinde));
+ OnPropertyChanged(nameof(OptionsProjekt));
+ _stunde.EmployeeId = _hours.EmployeeId;
+ } catch (Exception e) {
+ AlertEvent?.Invoke(this, e.Message);
+ }
}
async Task Save() {
await Models.Stunde.SaveEntry(_stunde);
- await Shell.Current.GoToAsync($"..?saved={_stunde.id}");
+ if (_stunde.id != null) {
+ await Shell.Current.GoToAsync($"..?saved={_stunde.id}");
+ } else {
+ await Shell.Current.GoToAsync($"..?date={_stunde.day.ToString("yyyy-MM-dd")}");
+ }
}
- //private async Task Delete() {
- // _stunde.Delete();
- // await Shell.Current.GoToAsync($"..?deleted={_stunde.Filename}");
- //}
+ private async Task Delete() {
+ await Models.Stunde.DeleteEntry(_stunde);
+ await Shell.Current.GoToAsync($"..?date={_stunde.day.ToString("yyyy-MM-dd")}");
+ }
+
+
-
-
async void IQueryAttributable.ApplyQueryAttributes(IDictionary query) {
if (query.ContainsKey("load")) {
+
//DateTime heute = DateTime.Now;
_stunde = await Models.Stunde.LoadEntry(Convert.ToInt32(query["load"]));
if (String.IsNullOrEmpty(_stunde.description)) {
@@ -151,8 +159,14 @@ namespace Jugenddienst_Stunden.ViewModels {
OnPropertyChanged(nameof(SubTitle));
}
+ if (query.ContainsKey("date")) {
+ SubTitle = DateTime.ParseExact((string)query["date"], "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture).ToString("dddd, d. MMM. yyyy");
+ _stunde.day = DateTime.ParseExact((string)query["date"], "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
+ OnPropertyChanged(nameof(SubTitle));
+ }
+
}
-
+
}
}
diff --git a/Jugenddienst Stunden/ViewModels/StundenViewModel.cs b/Jugenddienst Stunden/ViewModels/StundenViewModel.cs
index ab7fd26..39194db 100644
--- a/Jugenddienst Stunden/ViewModels/StundenViewModel.cs
+++ b/Jugenddienst Stunden/ViewModels/StundenViewModel.cs
@@ -7,15 +7,16 @@ using ZXing.Net.Maui;
using System.Collections.ObjectModel;
using System.ComponentModel;
using Jugenddienst_Stunden.Types;
+using System.Globalization;
namespace Jugenddienst_Stunden.ViewModels {
- internal class StundenViewModel : ObservableObject {
+ internal class StundenViewModel : ObservableObject, IQueryAttributable {
public string Name => AppInfo.Name;
public string Surname => AppInfo.VersionString;
public string MoreInfoUrl => "https://aka.ms/maui";
public string Message => "Hier werden deine geleisteten Arbeitsstunden aufgelistet";
- public string LoadOverview => "Zeige Summen für " + DateTime.Today.ToString("MMMM");
+ public string LoadOverview => "Lade Summen für " + DateTime.Today.ToString("MMMM");
public static DateTime GetDay = DateTime.Today;
public string ShowDay => "Zeit an Tag " + GetDay.ToString("ddd d. MMM") + ": ";
@@ -125,7 +126,8 @@ namespace Jugenddienst_Stunden.ViewModels {
private async Task NewEntryAsync() {
//Hier muss das Datum übergeben werden
- await Shell.Current.GoToAsync(nameof(Views.StundePage));
+ //await Shell.Current.GoToAsync(nameof(Views.StundePage));
+ await Shell.Current.GoToAsync($"{nameof(Views.StundePage)}?date={dateToday.ToString("yyyy-MM-dd")}");
}
private async Task SelectEntryAsync(DayTime entry) {
@@ -174,6 +176,12 @@ namespace Jugenddienst_Stunden.ViewModels {
}
}
+ async void IQueryAttributable.ApplyQueryAttributes(IDictionary query) {
+ if (query.ContainsKey("date")) {
+ await LoadDay(Convert.ToDateTime(query["date"]));
+ }
+ }
+
private void RefreshProperties() {
OnPropertyChanged(nameof(Nominal));
OnPropertyChanged(nameof(Overtime));
diff --git a/Jugenddienst Stunden/Views/LoginPage.xaml.cs b/Jugenddienst Stunden/Views/LoginPage.xaml.cs
index aa7a4fd..588553c 100644
--- a/Jugenddienst Stunden/Views/LoginPage.xaml.cs
+++ b/Jugenddienst Stunden/Views/LoginPage.xaml.cs
@@ -39,11 +39,13 @@ public partial class LoginPage : ContentPage {
Models.Stunde.apiKey = barcode.Value;
Models.Stunde.name = op.name;
Models.Stunde.surname = op.surname;
+ Models.Stunde.EmployeeId = int.Parse(op.id);
Title = op.name + " " + op.surname;
Preferences.Default.Set("apiKey", barcode.Value);
Preferences.Default.Set("name", op.name);
Preferences.Default.Set("surname", op.surname);
+ Preferences.Default.Set("EmployeeId", int.Parse(op.id));
//Preferences.Default.Set("apiUrl", Pre);
_loginViewModel.Server = Preferences.Default.Get("apiUrl", "");
diff --git a/Jugenddienst Stunden/Views/StundePage.xaml b/Jugenddienst Stunden/Views/StundePage.xaml
index df49027..49c7fef 100644
--- a/Jugenddienst Stunden/Views/StundePage.xaml
+++ b/Jugenddienst Stunden/Views/StundePage.xaml
@@ -16,14 +16,14 @@
-
-
+
+
-
-
+
+
@@ -43,7 +43,7 @@
-
+
\ No newline at end of file