Vorbereitungen für 1.0.6

Beachte die Einstellung ob Projekte und Gemeinden aktiv sind.
Verbiete Änderungen an der Freistellung, wenn sie genehmigt wurde.
Vereinfache das Speichern der Einstellungen
Bessere Fehlerbehandlung, einheitlichere API
This commit is contained in:
2024-10-22 17:42:35 +02:00
parent ff145b2c7f
commit 45c53c85ce
11 changed files with 350 additions and 293 deletions

View File

@@ -3,6 +3,7 @@ using CommunityToolkit.Mvvm.Input;
using Jugenddienst_Stunden.Models;
using Jugenddienst_Stunden.Types;
using System.Windows.Input;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace Jugenddienst_Stunden.ViewModels;
/// <summary>
@@ -14,7 +15,7 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
public string Title { get; set; } = "Eintrag bearbeiten";
public string SubTitle { get; set; } = DateTime.Today.ToString("dddd, d. MMMM yyyy");
private HoursBase HoursBase = new HoursBase();
//private HoursBase HoursBase = new HoursBase();
internal Settings Settings = new Settings();
public event EventHandler<string> AlertEvent;
@@ -50,8 +51,9 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
set {
if (_dayTime != value) {
_dayTime = value;
}OnPropertyChanged(nameof(DayTime));
}
OnPropertyChanged(nameof(DayTime));
}
}
@@ -77,13 +79,14 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
//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();
//LoadSettingsAsync();
}
public StundeViewModel(DayTime stunde) {
@@ -91,9 +94,11 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
SaveCommand = new AsyncRelayCommand(Save);
DeleteConfirmCommand = new AsyncRelayCommand(DeleteConfirm);
LoadSettingsAsync();
//LoadSettingsAsync();
}
private async void LoadSettingsAsync() {
try {
@@ -105,7 +110,7 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
GemeindeAktivSet = Settings.GemeindeAktivSet;
ProjektAktivSet = Settings.ProjektAktivSet;
GlobalVar.Settings = Settings;
OnPropertyChanged(nameof(OptionsGemeinde));
OnPropertyChanged(nameof(OptionsFreistellung));
OnPropertyChanged(nameof(OptionsProjekt));
@@ -116,24 +121,15 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
AlertEvent?.Invoke(this, e.Message);
}
}
private async Task LoadData() {
try {
Hours _hours = await Models.HoursBase.LoadBasicData();
DayTime.EmployeeId = _hours.EmployeeId;
} catch (Exception e) {
AlertEvent?.Invoke(this, e.Message);
}
}
async Task Save() {
bool exceptionOccurred = false;
try {
await Models.HoursBase.SaveEntry(DayTime);
await HoursBase.SaveEntry(DayTime);
} catch (Exception e) {
AlertEvent?.Invoke(this, e.Message);
exceptionOccurred = true;
@@ -148,7 +144,7 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
}
private async Task Delete() {
await Models.HoursBase.DeleteEntry(DayTime);
await HoursBase.DeleteEntry(DayTime);
await Shell.Current.GoToAsync($"..?date={DayTime.Day.ToString("yyyy-MM-dd")}");
}
@@ -157,9 +153,10 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
bool answer = await ConfirmEvent.Invoke("Achtung", "Löschen kann nicht ungeschehen gemacht werden. Fortfahren?");
if (answer) {
//Löschen
await Models.HoursBase.DeleteEntry(DayTime);
await HoursBase.DeleteEntry(DayTime);
await Shell.Current.GoToAsync($"..?date={DayTime.Day.ToString("yyyy-MM-dd")}");
} else { //nicht Löschen
} else {
//nicht Löschen
}
}
@@ -177,9 +174,28 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
if (query.ContainsKey("load")) {
//DateTime heute = DateTime.Now;
_dayTime = await Models.HoursBase.LoadEntry(Convert.ToInt32(query["load"]));
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;
GemeindeAktivSet = dat.settings.GemeindeAktivSet;
ProjektAktivSet = dat.settings.ProjektAktivSet;
GlobalVar.Settings = dat.settings;
} catch (Exception e) {
AlertEvent?.Invoke(this, e.Message);
}
if (System.String.IsNullOrEmpty(DayTime.Description)) {
AlertEvent?.Invoke(this, "Eintrag hat keine Daten zurückgegeben");
AlertEvent?.Invoke(this, "Eintrag hat keinen Beschreibungstext");
}
SubTitle = DayTime.Day.ToString("dddd, d. MMMM yyyy");
@@ -192,33 +208,49 @@ public class StundeViewModel : ObservableObject, IQueryAttributable {
FreistellungEnabled = !_dayTime.Approved;
OnPropertyChanged(nameof(FreistellungEnabled));
OnPropertyChanged(nameof(DayTime));
OnPropertyChanged(nameof(SubTitle));
}
if (query.ContainsKey("date")) {
Title = "Neuer Eintrag";
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);
//DayTimes = await HoursBase.LoadDay(_date);
BaseResponse dat = await HoursBase.LoadBase("date=" + _date.ToString("yyyy-MM-dd"));
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.Day = _date;
SubTitle = _date.ToString("dddd, d. MMMM yyyy");
FreistellungEnabled = true;
DayTime.EmployeeId = GlobalVar.EmployeeId;
}
DayTime.Day = _date;
SubTitle = _date.ToString("dddd, d. MMMM yyyy");
_ = LoadData();
OnPropertyChanged(nameof(Title));
OnPropertyChanged(nameof(SubTitle));
OnPropertyChanged(nameof(DayTimes));
}
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));
}