using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Jugenddienst_Stunden.Models; using Jugenddienst_Stunden.Types; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace Jugenddienst_Stunden.ViewModels { internal class StundeViewModel : ObservableObject, IQueryAttributable { public int id { get; set; } public string SubTitle { get; set; } = DateTime.Today.ToString("dddd, d. MMM. yyyy"); private DayTime _stunde; public DayTime Stunde { get => _stunde; } public event EventHandler AlertEvent; public event EventHandler InfoEvent; public Collection Projekte { get; set; } public Collection Gemeinden { get; set; } public Collection Freistellungen { get; set; } public ObservableCollection OptionsGemeinde { get; private set; } public ObservableCollection OptionsProjekt { get; private set; } public ObservableCollection OptionsFreistellung { get; private set; } //private Gemeinde _selectedGemeinde; public Gemeinde SelectedOptionGemeinde { get => _stunde.GemeindeAktiv; set { if (_stunde.GemeindeAktiv != value) { //_selectedGemeinde = value; _stunde.GemeindeAktiv = value; OnPropertyChanged(nameof(SelectedOptionGemeinde)); } } } //private Projekt _selectedProjekt; public Projekt SelectedOptionProjekt { get => _stunde.ProjektAktiv; set { if (_stunde.ProjektAktiv != value) { //_selectedProjekt = value; _stunde.ProjektAktiv = value; OnPropertyChanged(nameof(SelectedOptionProjekt)); } } } //private string selectedFreistellung; public Freistellung SelectedOptionFreistellung { get => _stunde.FreistellungAktiv; set { if (_stunde.FreistellungAktiv != value) { _stunde.FreistellungAktiv = value; OnPropertyChanged(nameof(SelectedOptionFreistellung)); } } } public ICommand SaveCommand { get; private set; } public ICommand DeleteCommand { get; private set; } //public ICommand LoadDataCommand { get; private set; } public StundeViewModel() { _stunde = new DayTime(); SaveCommand = new AsyncRelayCommand(Save); DeleteCommand = new AsyncRelayCommand(Delete); _ = LoadData(); } public StundeViewModel(DayTime stunde) { _stunde = stunde; SaveCommand = new AsyncRelayCommand(Save); 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); OptionsFreistellung = new ObservableCollection(_hours.Freistellungen); OnPropertyChanged(nameof(OptionsGemeinde)); OnPropertyChanged(nameof(OptionsProjekt)); OnPropertyChanged(nameof(OptionsFreistellung)); _stunde.EmployeeId = _hours.EmployeeId; } catch (Exception e) { AlertEvent?.Invoke(this, e.Message); } } async Task Save() { await Models.Stunde.SaveEntry(_stunde); 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() { 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)) { AlertEvent?.Invoke(this, "Eintrag hat keine Daten zurückgegeben"); } SubTitle = _stunde.day.ToString("dddd, d. MMM. yyyy"); OptionsProjekt = new ObservableCollection(_stunde.Projekte); OptionsGemeinde = new ObservableCollection(_stunde.Gemeinden); OptionsFreistellung = new ObservableCollection(_stunde.Freistellungen); OnPropertyChanged(nameof(OptionsGemeinde)); OnPropertyChanged(nameof(OptionsProjekt)); OnPropertyChanged(nameof(OptionsFreistellung)); //OptionsProjekt.FirstOrDefault(x => x.Id == _stunde.projekt); SelectedOptionGemeinde = OptionsGemeinde.FirstOrDefault(item => item.Id == _stunde.gemeinde) ?? new Gemeinde(); OnPropertyChanged(nameof(SelectedOptionGemeinde)); SelectedOptionProjekt = OptionsProjekt.FirstOrDefault(Projekt => Projekt.Id == _stunde.projekt) ?? new Projekt(); OnPropertyChanged(nameof(SelectedOptionProjekt)); SelectedOptionFreistellung = OptionsFreistellung.FirstOrDefault(Freistellung => Freistellung.Identifier == _stunde.free) ?? new Freistellung(); OnPropertyChanged(nameof(SelectedOptionFreistellung)); OnPropertyChanged(nameof(Stunde)); 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)); } } } }