diff --git a/Jugenddienst Stunden/Converter/SecondsTimeConverter.cs b/Jugenddienst Stunden/Converter/SecondsTimeConverter.cs index 51815ac..3741302 100644 --- a/Jugenddienst Stunden/Converter/SecondsTimeConverter.cs +++ b/Jugenddienst Stunden/Converter/SecondsTimeConverter.cs @@ -2,13 +2,20 @@ namespace Jugenddienst_Stunden.Converter; internal class SecondsTimeConverter : IValueConverter { + private int seconds; + /// + /// Konvertiert eine Sekundenangabe nach Stunden:Minuten, auch bei mehr als 24 Stunden + /// public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is null) return "0:0"; if (value is int) { seconds = (int)value; + } + if (value is double) { + seconds = (int)Math.Round((double)value); } else { int.TryParse((string?)value, out seconds); } diff --git a/Jugenddienst Stunden/Types/Hours.cs b/Jugenddienst Stunden/Types/Hours.cs index e79afe5..82565c0 100644 --- a/Jugenddienst Stunden/Types/Hours.cs +++ b/Jugenddienst Stunden/Types/Hours.cs @@ -4,33 +4,40 @@ using System.Collections.ObjectModel; namespace Jugenddienst_Stunden.Types; -internal class Hours : ObservableObject { - public int? Zeit; - public int? Nominal; +internal partial class Hours : ObservableObject { + public double? Zeit; + public double? Nominal; //public Dictionary nominal_day_api; public List? Nominal_day_api; //public Dictionary nominal_week_api; public List? Nominal_week_api; - //public List time_line; - public string? Zeit_total; + //public List time_line; + public double? 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; + //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 zeit_total_daily_api; public List? daytime; - //public List wochensumme; - public int overtime_month; - public int overtime; - //public List overtime_day; - public int zeitausgleich; - public int zeitausgleich_month; - public int holiday; - public int krankheit; - public int weiterbildung; - public int bereitschaft; - public int bereitschaft_month; + //public List wochensumme; + + [ObservableProperty] + public double overtime_month; + + [ObservableProperty] + public double overtime; + //public List overtime_day; + + [ObservableProperty] + public double zeitausgleich; + + public double zeitausgleich_month; + public double holiday; + public double krankheit; + public double weiterbildung; + public double bereitschaft; + public double bereitschaft_month; //public Operator operator_api; public DateTime Today; public DateTime Date; diff --git a/Jugenddienst Stunden/Types/NominalDay.cs b/Jugenddienst Stunden/Types/NominalDay.cs index 4d69374..6b158b3 100644 --- a/Jugenddienst Stunden/Types/NominalDay.cs +++ b/Jugenddienst Stunden/Types/NominalDay.cs @@ -2,6 +2,6 @@ internal class NominalDay { public int day_number; public int month_number; - public int hours; + public double hours; public DateOnly date; } diff --git a/Jugenddienst Stunden/Types/NominalWeek.cs b/Jugenddienst Stunden/Types/NominalWeek.cs index 12cc07f..b43834a 100644 --- a/Jugenddienst Stunden/Types/NominalWeek.cs +++ b/Jugenddienst Stunden/Types/NominalWeek.cs @@ -2,5 +2,5 @@ internal class NominalWeek { public int Week_number; - public int Hours; + public double Hours; } diff --git a/Jugenddienst Stunden/Types/Sollstunden.cs b/Jugenddienst Stunden/Types/Sollstunden.cs index d18bc7e..cea4268 100644 --- a/Jugenddienst Stunden/Types/Sollstunden.cs +++ b/Jugenddienst Stunden/Types/Sollstunden.cs @@ -3,5 +3,5 @@ public class Sollstunden { public int Timetable { get; set; } public int Wochentag { get; set; } - public float Zeit { get; set; } + public double Zeit { get; set; } } diff --git a/Jugenddienst Stunden/Types/TimeDay.cs b/Jugenddienst Stunden/Types/TimeDay.cs index ccdb79b..19957fd 100644 --- a/Jugenddienst Stunden/Types/TimeDay.cs +++ b/Jugenddienst Stunden/Types/TimeDay.cs @@ -5,5 +5,5 @@ /// internal struct TimeDay { public int Day { get; set; } - public decimal Hours { get; set; } + public double Hours { get; set; } } diff --git a/Jugenddienst Stunden/ViewModels/StundenViewModel.cs b/Jugenddienst Stunden/ViewModels/StundenViewModel.cs index b2d39e3..315ce1e 100644 --- a/Jugenddienst Stunden/ViewModels/StundenViewModel.cs +++ b/Jugenddienst Stunden/ViewModels/StundenViewModel.cs @@ -56,10 +56,9 @@ internal partial class StundenViewModel : ObservableObject, IQueryAttributable, public string Title { get; set; } = GlobalVar.Name + " " + GlobalVar.Surname; - private Hours _hour; - public Hours Hours { - get => _hour; - } + [ObservableProperty] + private Hours hours; + /// /// Mindest-Datum für den Datepicker @@ -94,42 +93,42 @@ internal partial class StundenViewModel : ObservableObject, IQueryAttributable, /// /// Monatsübersicht: Geleistete Stunden /// - public string? ZeitCalculated { + public double? ZeitCalculated { get => Hours.Zeit_total; } /// /// Monatsübersicht: Sollstunden /// - public int? Nominal { + public double? Nominal { get => Hours.Nominal; } /// /// Monatsübersicht: Differenz zwischen Soll und geleisteten Stunden /// - public int? Overtime { + public double? Overtime { get => Hours.overtime; } /// /// Monatsübersicht: Restüberstunden insgesamt /// - public int OvertimeMonth { + public double OvertimeMonth { get => Hours.overtime_month; } - public int Zeitausgleich { + public double Zeitausgleich { get => Hours.zeitausgleich; } - public int ZeitausgleichMonth { + public double ZeitausgleichMonth { get => Hours.zeitausgleich_month; } /// /// Monatsübersicht: Resturlaub /// - public int Holiday { + public double Holiday { get => Hours.holiday; } @@ -158,7 +157,7 @@ internal partial class StundenViewModel : ObservableObject, IQueryAttributable, /// CTOR /// public StundenViewModel() { - _hour = new Hours(); + Hours = new Hours(); LoadOverview = "Lade Summen für " + DateToday.ToString("MMMM"); @@ -202,7 +201,7 @@ internal partial class StundenViewModel : ObservableObject, IQueryAttributable, private async Task LoadData() { try { BaseResponse dat = await HoursBase.LoadBase("hours&year=" + DateToday.ToString("yyyy") + "&month=" + DateToday.ToString("MM")); - _hour = dat.hour; + Hours = dat.hour; Settings = dat.settings; if (Settings.Version != AppInfo.Current.VersionString.Substring(0, 5)) { @@ -295,14 +294,14 @@ internal partial class StundenViewModel : ObservableObject, IQueryAttributable, /// Refreshes all properties /// private void RefreshProperties() { + OnPropertyChanged(nameof(Hours)); + OnPropertyChanged(nameof(Title)); OnPropertyChanged(nameof(Nominal)); OnPropertyChanged(nameof(Overtime)); OnPropertyChanged(nameof(OvertimeMonth)); OnPropertyChanged(nameof(Zeitausgleich)); OnPropertyChanged(nameof(ZeitCalculated)); OnPropertyChanged(nameof(Holiday)); - OnPropertyChanged(nameof(Hours)); - OnPropertyChanged(nameof(Title)); OnPropertyChanged(nameof(MinimumDate)); OnPropertyChanged(nameof(MaximumDate)); OnPropertyChanged(nameof(LoadOverview));