using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using System.Windows.Input; using Microsoft.Maui.Controls; using Microsoft.Maui.Networking; using ZXing.Net.Maui; using System.Collections.ObjectModel; using System.ComponentModel; using Jugenddienst_Stunden.Types; namespace Jugenddienst_Stunden.ViewModels { internal class StundenViewModel : ObservableObject { 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 ICommand LoadDataCommand { get; private set; } public object Stunden { get; } public static int GetDay = DateTime.Today.Day; public string ShowDay => "Zeit an Tag " + GetDay + ": "; /* Nicht gemergte Änderung aus Projekt "Jugenddienst Stunden (net8.0-ios)" Vor: private Models.Hours _hour; public Models.Hours Hours { get => _hour; Nach: private Hours _hour; public Hours Hours { get => _hour; */ private Types.Hours _hour; public Types.Hours Hours { get => _hour; } public string ZeitDone { get => _hour.zeit; } public string ZeitCalculated { get => _hour.zeit_total; } public string Nominal { get => _hour.nominal; } public string Overtime { get => _hour.overtime; } public string OvertimeMonth { get => _hour.overtime_month; } public DateTime MinimumDate { //get => _hour.MinDate; get => DateTime.Today.AddDays(-21); } public DateTime MaximumDate { //get => _hour.MaxDate; get => DateTime.Today.AddDays(5); } private DateTime dateToday = DateTime.Today; public DateTime DateToday { get => dateToday; set { if (dateToday != value) { dateToday = value; GetDay = dateToday.Day; OnPropertyChanged(); _ = LoadData(); // Use discard operator to explicitly ignore the returned Task //RefreshProperties(); OnPropertyChanged(nameof(TimeDay)); OnPropertyChanged(nameof(ShowDay)); } } } public DateTime Date { get => _hour.Date; } //public Dictionary ZeitTotalDaily { // get => _hour.zeit_total_daily; //} public List ZeitTotalDaily { get => _hour.zeit_total_daily_api; } public string Title { get; set; } = Preferences.Default.Get("name", "") + " " + Preferences.Default.Get("surname", ""); public ObservableCollection Options { get; } public ObservableCollection OptionsProjekt { get; } public ObservableCollection OptionsFreistellung { get; } public List TimeDay { get; set; } private string selectedOption; public string SelectedOption { get => selectedOption; set { if (selectedOption != value) { selectedOption = value; //new AsyncRelayCommand(LoadData); OnPropertyChanged(nameof(SelectedOption)); } } } public StundenViewModel() { Options = new ObservableCollection { "Gemeinde 1", "Gemeinde 2", "Gemeinde 3", "Gemeinde 4" }; OptionsProjekt = new ObservableCollection { "Projekt 1", "Projekt 2", "Projekt 3" }; OptionsFreistellung = new ObservableCollection { "Urlaub", "Krankheit", "Elternzeit" }; _hour = new Types.Hours(); LoadDataCommand = new AsyncRelayCommand(LoadData); } //protected void OnPropertyChanged(string propertyName) { // PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); //} //public async Task LoadData() => // await Models.Stunde.LoadData(); public event EventHandler AlertEvent; public async Task LoadData() { try { _hour = await Models.Stunde.LoadData(); if (_hour.zeit_total_daily_api != null) { TimeDay = _hour.zeit_total_daily_api.Where(static p => p.Day == GetDay).ToList() ?? new List { new TimeDay { Day = GetDay, Hours = 0 } }; RefreshProperties(); } } catch (Exception e) { AlertEvent?.Invoke(this, e.Message); } //if (_hour.zeit_total_daily_api != null) { // try { // TimeDay = _hour.zeit_total_daily_api.Where(static p => p.Day == GetDay).ToList() ?? new List { new TimeDay { Day = GetDay, Hours = 0 } }; // RefreshProperties(); // } catch (Exception e) { // AlertEvent?.Invoke(this, e.Message); // } //} else { // await App.Current.MainPage.DisplayAlert("Fehler", // "zeit_total_daily_api ist leer", // "OK"); //} } private void RefreshProperties() { OnPropertyChanged(nameof(Nominal)); OnPropertyChanged(nameof(Overtime)); OnPropertyChanged(nameof(OvertimeMonth)); OnPropertyChanged(nameof(ZeitCalculated)); OnPropertyChanged(nameof(ZeitDone)); OnPropertyChanged(nameof(Hours)); OnPropertyChanged(nameof(Title)); OnPropertyChanged(nameof(ZeitTotalDaily)); OnPropertyChanged(nameof(TimeDay)); OnPropertyChanged(nameof(MinimumDate)); OnPropertyChanged(nameof(MaximumDate)); OnPropertyChanged(nameof(ShowDay)); //OnPropertyChanged(nameof(DateToday)); } } }