diff --git a/Jugenddienst Stunden/Jugenddienst Stunden.csproj b/Jugenddienst Stunden/Jugenddienst Stunden.csproj
index 6de232a..ba1f2d6 100644
--- a/Jugenddienst Stunden/Jugenddienst Stunden.csproj
+++ b/Jugenddienst Stunden/Jugenddienst Stunden.csproj
@@ -44,8 +44,8 @@
com.companyname.jugenddienststunden
- 1.0.5
- 6
+ 1.0.6
+ 7
False
True
@@ -53,8 +53,8 @@
True
com.companyname.jugenddienststunden
- 1.0.5
- 6
+ 1.0.6
+ 7
True
@@ -64,8 +64,8 @@
True
False
True
- 1.0.5
- 6
+ 1.0.6
+ 7
False
@@ -75,8 +75,8 @@
com.companyname.jugenddienststunden
- 1.0.5
- 6
+ 1.0.6
+ 7
$(DefineConstants);DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
True
False
@@ -88,17 +88,17 @@
False
True
True
- 1.0.5
- 6
+ 1.0.6
+ 7
False
- False
+ True
False
com.companyname.jugenddienststunden
- 1.0.5
- 6
+ 1.0.6
+ 7
True
True
@@ -108,6 +108,8 @@
snupkg
AnyCPU
False
+ 1.0.6
+ 1.0.6
diff --git a/Jugenddienst Stunden/Models/BaseFunc.cs b/Jugenddienst Stunden/Models/BaseFunc.cs
index ba9cad9..125ef03 100644
--- a/Jugenddienst Stunden/Models/BaseFunc.cs
+++ b/Jugenddienst Stunden/Models/BaseFunc.cs
@@ -109,8 +109,8 @@ internal static class BaseFunc {
internal static async Task SaveItemAsync(string url, string token, DayTime item, bool isNewItem = false) {
- //Uhrzeiten sollten sinnvolle Werte haben
- if (item.TimeSpanVon == item.TimeSpanBis) {
+ //Uhrzeiten sollten sinnvolle Werte haben - außer bei Freistellungen, da wäre eigentlich null
+ if (item.TimeSpanVon == item.TimeSpanBis && item.FreistellungAktiv == null) {
throw new Exception("Beginn und Ende sind gleich");
}
@@ -134,9 +134,13 @@ internal static class BaseFunc {
throw new Exception("Projekt nicht gewählt");
}
//Keine Beschreibung
- if (string.IsNullOrEmpty(item.Description)) {
+ if (string.IsNullOrEmpty(item.Description) && item.FreistellungAktiv == null) {
throw new Exception("Keine Beschreibung");
}
+ //Keine Beschreibung
+ if (string.IsNullOrEmpty(item.Description)) {
+ item.Description = item.FreistellungAktiv.Name;
+ }
using (HttpClient client = new HttpClient() { Timeout = TimeSpan.FromSeconds(15) }) {
//HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
diff --git a/Jugenddienst Stunden/ViewModels/StundeViewModel.cs b/Jugenddienst Stunden/ViewModels/StundeViewModel.cs
index b620165..d2b6b01 100644
--- a/Jugenddienst Stunden/ViewModels/StundeViewModel.cs
+++ b/Jugenddienst Stunden/ViewModels/StundeViewModel.cs
@@ -2,6 +2,7 @@
using CommunityToolkit.Mvvm.Input;
using Jugenddienst_Stunden.Models;
using Jugenddienst_Stunden.Types;
+using System.ComponentModel;
using System.Windows.Input;
using static System.Runtime.InteropServices.JavaScript.JSType;
@@ -9,7 +10,7 @@ namespace Jugenddienst_Stunden.ViewModels;
///
/// Viewmodel für die einzelnen Stundeneinträge / Bearbeitung
///
-public class StundeViewModel : ObservableObject, IQueryAttributable {
+public partial class StundeViewModel : ObservableObject, IQueryAttributable {
public int Id { get; set; }
public string Title { get; set; } = "Eintrag bearbeiten";
@@ -25,84 +26,68 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
///
/// Gemeinden für die Auswahlliste
///
- public List OptionsGemeinde { get; private set; }
+ [ObservableProperty]
+ private List optionsGemeinde;
///
/// Projekte für die Auswahlliste
///
- public List OptionsProjekt { get; private set; }
+ [ObservableProperty]
+ private List optionsProjekt;
///
/// Freistellungen für die Auswahlliste
///
- public List OptionsFreistellung { get; private set; }
+ [ObservableProperty]
+ private List optionsFreistellung;
///
/// Vorhandene Zeiten anzeigen, wenn neuer Eintrag erstellt wird
///
- public List DayTimes { get; set; }
+ [ObservableProperty]
+ private List dayTimes;
- private DayTime _dayTime;
///
/// Aktueller Stundeneintrag
///
- public DayTime DayTime {
- get => _dayTime;
- set {
- if (_dayTime != value) {
- _dayTime = value;
-
- }
- OnPropertyChanged(nameof(DayTime));
- }
- }
-
-
+ [ObservableProperty]
+ private DayTime dayTime;
///
/// Dürfen Gemeinden verwendet werden?
///
- public bool GemeindeAktivSet { get; set; }
+ [ObservableProperty]
+ private bool gemeindeAktivSet;
///
/// Dürfen Projekte verwendet werden?
///
- public bool ProjektAktivSet { get; set; }
-
- public bool FreistellungEnabled { get; set; }
-
+ [ObservableProperty]
+ private bool projektAktivSet;
+ [ObservableProperty]
+ private bool freistellungEnabled;
public ICommand SaveCommand { get; private set; }
public ICommand DeleteCommand { get; private set; }
public ICommand DeleteConfirmCommand { get; private set; }
//public ICommand LoadDataCommand { get; private set; }
-
-
public StundeViewModel() {
- DayTime = new DayTime();
-
SaveCommand = new AsyncRelayCommand(Save);
//DeleteCommand = new AsyncRelayCommand(Delete);
DeleteConfirmCommand = new Command(async () => await DeleteConfirm());
- //LoadSettingsAsync();
}
public StundeViewModel(DayTime stunde) {
- DayTime = new DayTime();
-
SaveCommand = new AsyncRelayCommand(Save);
DeleteConfirmCommand = new AsyncRelayCommand(DeleteConfirm);
- //LoadSettingsAsync();
}
-
-
private async void LoadSettingsAsync() {
-
try {
Settings = await HoursBase.LoadSettings();
+ GlobalVar.Settings = Settings;
OptionsGemeinde = Settings.Gemeinden;
OptionsProjekt = Settings.Projekte;
@@ -110,20 +95,10 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
GemeindeAktivSet = Settings.GemeindeAktivSet;
ProjektAktivSet = Settings.ProjektAktivSet;
- GlobalVar.Settings = Settings;
- OnPropertyChanged(nameof(OptionsGemeinde));
- OnPropertyChanged(nameof(OptionsFreistellung));
- OnPropertyChanged(nameof(OptionsProjekt));
-
- OnPropertyChanged(nameof(GemeindeAktivSet));
- OnPropertyChanged(nameof(ProjektAktivSet));
+
} catch (Exception e) {
AlertEvent?.Invoke(this, e.Message);
}
-
-
-
-
}
async Task Save() {
@@ -159,100 +134,91 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
//nicht Löschen
}
}
-
}
-
-
-
///
/// Anwenden der Query-Parameter
///
async void IQueryAttributable.ApplyQueryAttributes(IDictionary query) {
- var probe = query;
if (query.ContainsKey("load")) {
//DateTime heute = DateTime.Now;
try {
//_dayTime = await HoursBase.LoadEntry(Convert.ToInt32(query["load"]));
BaseResponse dat = await HoursBase.LoadBase("id=" + Convert.ToInt32(query["load"]));
- _dayTime = dat.daytime;
- _dayTime.TimeSpanVon = dat.daytime.Begin.ToTimeSpan();
- _dayTime.TimeSpanBis = dat.daytime.End.ToTimeSpan();
- OptionsGemeinde = dat.settings.Gemeinden;
- OptionsProjekt = dat.settings.Projekte;
- OptionsFreistellung = dat.settings.Freistellungen;
-
+ GlobalVar.Settings = dat.settings;
GemeindeAktivSet = dat.settings.GemeindeAktivSet;
ProjektAktivSet = dat.settings.ProjektAktivSet;
- GlobalVar.Settings = dat.settings;
+ DayTime = dat.daytime;
+ DayTime.TimeSpanVon = dat.daytime.Begin.ToTimeSpan();
+ DayTime.TimeSpanBis = dat.daytime.End.ToTimeSpan();
+
+ OptionsGemeinde = dat.settings.Gemeinden ?? new List();
+ OptionsProjekt = dat.settings.Projekte ?? new List();
+ OptionsFreistellung = dat.settings.Freistellungen ?? new List();
+ DayTime.GemeindeAktiv = OptionsGemeinde.FirstOrDefault(Gemeinde => Gemeinde.Id == DayTime.Gemeinde) ?? new Gemeinde();
+ DayTime.ProjektAktiv = OptionsProjekt.FirstOrDefault(Projekt => Projekt.Id == DayTime.Projekt) ?? new Projekt();
+ DayTime.FreistellungAktiv = OptionsFreistellung.FirstOrDefault(Freistellung => Freistellung.Id == DayTime.Free) ?? new Freistellung();
+ OnPropertyChanged(nameof(DayTime));
} catch (Exception e) {
AlertEvent?.Invoke(this, e.Message);
+ } finally {
+
}
if (System.String.IsNullOrEmpty(DayTime.Description)) {
AlertEvent?.Invoke(this, "Eintrag hat keinen Beschreibungstext");
}
SubTitle = DayTime.Day.ToString("dddd, d. MMMM yyyy");
+ OnPropertyChanged(nameof(SubTitle));
+ FreistellungEnabled = !DayTime.Approved;
+ //OnPropertyChanged(nameof(DayTime));
- _dayTime.GemeindeAktiv = OptionsGemeinde.FirstOrDefault(Gemeinde => Gemeinde.Id == DayTime.Gemeinde) ?? new Gemeinde();
-
- _dayTime.ProjektAktiv = OptionsProjekt.FirstOrDefault(Projekt => Projekt.Id == DayTime.Projekt) ?? new Projekt();
-
- _dayTime.FreistellungAktiv = OptionsFreistellung.FirstOrDefault(Freistellung => Freistellung.Id == DayTime.Free) ?? new Freistellung();
-
- FreistellungEnabled = !_dayTime.Approved;
-
- }
- if (query.ContainsKey("date")) {
+ } else if (query.ContainsKey("date")) {
Title = "Neuer Eintrag";
+ OnPropertyChanged(nameof(Title));
+
DateTime _date = DateTime.ParseExact((string)query["date"], "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
//Bei neuem Eintrag die vorhandenen des gleichen Tages anzeigen
try {
//DayTimes = await HoursBase.LoadDay(_date);
BaseResponse dat = await HoursBase.LoadBase("date=" + _date.ToString("yyyy-MM-dd"));
+ GlobalVar.Settings = dat.settings;
DayTimes = dat.daytimes;
+
OptionsGemeinde = dat.settings.Gemeinden;
OptionsProjekt = dat.settings.Projekte;
OptionsFreistellung = dat.settings.Freistellungen;
GemeindeAktivSet = dat.settings.GemeindeAktivSet;
ProjektAktivSet = dat.settings.ProjektAktivSet;
-
- GlobalVar.Settings = dat.settings;
+
} catch (Exception) {
//Ein Tag ohne Einträge gibt eine Fehlermeldung,
//die soll aber ignoriert werden, weil beim Neueintrag ist das ja Wurscht
//In dem Fall müssen die Settings aber nochmal geholt werden, weil die dann nicht geladen wurden
LoadSettingsAsync();
} finally {
+ DayTime = new DayTime();
DayTime.Day = _date;
+ DayTime.EmployeeId = GlobalVar.EmployeeId;
+ DayTime.GemeindeAktiv = new Gemeinde();
+ DayTime.ProjektAktiv = new Projekt();
+ DayTime.FreistellungAktiv = new Freistellung();
+
SubTitle = _date.ToString("dddd, d. MMMM yyyy");
FreistellungEnabled = true;
- DayTime.EmployeeId = GlobalVar.EmployeeId;
+
+ OnPropertyChanged(nameof(SubTitle));
+ OnPropertyChanged(nameof(DayTime));
}
-
}
- OnPropertyChanged(nameof(FreistellungEnabled));
- OnPropertyChanged(nameof(DayTime));
- OnPropertyChanged(nameof(DayTimes));
-
- OnPropertyChanged(nameof(SubTitle));
- OnPropertyChanged(nameof(Title));
- OnPropertyChanged(nameof(OptionsGemeinde));
- OnPropertyChanged(nameof(OptionsFreistellung));
- OnPropertyChanged(nameof(OptionsProjekt));
-
- OnPropertyChanged(nameof(GemeindeAktivSet));
- OnPropertyChanged(nameof(ProjektAktivSet));
-
}
-
}
diff --git a/Jugenddienst Stunden/ViewModels/StundenViewModel.cs b/Jugenddienst Stunden/ViewModels/StundenViewModel.cs
index 071ea7e..2da0991 100644
--- a/Jugenddienst Stunden/ViewModels/StundenViewModel.cs
+++ b/Jugenddienst Stunden/ViewModels/StundenViewModel.cs
@@ -154,8 +154,6 @@ internal class StundenViewModel : ObservableObject, IQueryAttributable, INotifyP
public StundenViewModel() {
_hour = new Hours();
- //LoadSettingsAsync();
- //HoursBase.tokendata = new TokenData(HoursBase.apiKey);
LoadDataCommand = new AsyncRelayCommand(LoadData);
NewEntryCommand = new AsyncRelayCommand(NewEntryAsync);
SelectEntryCommand = new AsyncRelayCommand(SelectEntryAsync);
@@ -163,27 +161,9 @@ internal class StundenViewModel : ObservableObject, IQueryAttributable, INotifyP
RefreshCommand = new Command(async () => await RefreshItemsAsync());
Task task = LoadDay(DateTime.Today);
-
}
- private async Task LoadSettingsAsync() {
- try {
- Settings = await HoursBase.LoadSettings();
-
- GemeindeAktivSet = Settings.GemeindeAktivSet;
- ProjektAktivSet = Settings.ProjektAktivSet;
-
- OnPropertyChanged(nameof(GemeindeAktivSet));
- OnPropertyChanged(nameof(ProjektAktivSet));
- doContinue = true;
- } catch (Exception e) {
- doContinue = false;
- AlertEvent?.Invoke(this, e.Message);
- }
-
- }
-
///
/// Öffnet eine neue Stundeneingabe
///
@@ -213,7 +193,9 @@ internal class StundenViewModel : ObservableObject, IQueryAttributable, INotifyP
///
private async Task LoadData() {
try {
- _hour = await HoursBase.LoadData();
+ BaseResponse dat = await HoursBase.LoadBase("hours");
+ _hour = dat.hour;
+ //_hour = await HoursBase.LoadData();
RefreshProperties();
} catch (Exception e) {
AlertEvent?.Invoke(this, e.Message);
@@ -226,11 +208,10 @@ internal class StundenViewModel : ObservableObject, IQueryAttributable, INotifyP
///
public async Task LoadDay(DateTime date) {
DayTotal = new TimeOnly(0);
- //await LoadSettingsAsync();
- //if (doContinue) {
try {
//_dayTimes = await HoursBase.LoadDay(date);
BaseResponse dat = await HoursBase.LoadBase("date=" + date.ToString("yyyy-MM-dd"));
+
_dayTimes = dat.daytimes;
Settings = dat.settings;
GemeindeAktivSet = Settings.GemeindeAktivSet;
@@ -256,6 +237,12 @@ internal class StundenViewModel : ObservableObject, IQueryAttributable, INotifyP
}
DayTotal = TimeOnly.FromTimeSpan(span);
+ //Nach der Tagessumme die anderen Tage anhängen
+ if (_dayTimes != null) {
+ BaseResponse dat1 = await HoursBase.LoadBase("date=" + date.ToString("yyyy-MM-dd") + "&tilldate=" + date.AddDays(3).ToString("yyyy-MM-dd"));
+ if (dat1.daytimes != null)
+ _dayTimes = dat.daytimes.Concat(dat1.daytimes).ToList();
+ }
} catch (Exception e) {
_dayTimes = new List();
@@ -266,7 +253,6 @@ internal class StundenViewModel : ObservableObject, IQueryAttributable, INotifyP
OnPropertyChanged(nameof(Sollstunden));
OnPropertyChanged(nameof(DayTimes));
}
- //}
}
diff --git a/Jugenddienst Stunden/Views/StundePage.xaml b/Jugenddienst Stunden/Views/StundePage.xaml
index c7d3399..c972304 100644
--- a/Jugenddienst Stunden/Views/StundePage.xaml
+++ b/Jugenddienst Stunden/Views/StundePage.xaml
@@ -49,7 +49,6 @@
-
@@ -57,6 +56,7 @@
+
+
\ No newline at end of file
diff --git a/Jugenddienst Stunden/Views/StundenPage.xaml b/Jugenddienst Stunden/Views/StundenPage.xaml
index e240566..54d4e54 100644
--- a/Jugenddienst Stunden/Views/StundenPage.xaml
+++ b/Jugenddienst Stunden/Views/StundenPage.xaml
@@ -2,6 +2,7 @@
@@ -52,7 +53,8 @@
-
+
+
@@ -69,25 +71,35 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -105,7 +117,6 @@
-
@@ -114,7 +125,6 @@
-