using System.Collections.ObjectModel; using WheresMyMoney.Maui.Core; namespace WheresMyMoney.Maui; public partial class PlannedPaymentsPage : ContentPage { public ObservableCollection FullPlannedPaymentViewModels { get; set; } = []; public PlannedPaymentsPage() { InitializeComponent(); BindingContext = this; UpdateUi(); Repository.Instance.DataChanged += OnDataChanged; } private void OnDataChanged(object? sender, EventArgs e) { UpdateUi(); } private void UpdateUi() { FullPlannedPaymentViewModels.Clear(); foreach (var plannedPayment in Repository.Instance.GetAllPlannedPayments()) { FullPlannedPaymentViewModels.Add(new FullPlannedPaymentViewModel(plannedPayment.Id, plannedPayment.Amount.ToString("C"), plannedPayment.Name, plannedPayment.DateStart.ToString("yyyy-MM-dd"), plannedPayment.DateEnd?.ToString("yyyy-MM-dd") ?? string.Empty, plannedPayment.DateEnd is not null, plannedPayment.IsSubscription, plannedPayment.Reoccurences, ReoccurenceTypeToString(plannedPayment.Reoccurences, plannedPayment.ReoccurenceType))); } } private static string ReoccurenceTypeToString(int? plannedPaymentReoccurences, ReoccurenceType? plannedPaymentReoccurenceType) => plannedPaymentReoccurenceType switch { ReoccurenceType.Days => plannedPaymentReoccurences switch { 1 => "dzień", _ => "dni" }, ReoccurenceType.Weeks => (plannedPaymentReoccurences, plannedPaymentReoccurences % 10) switch { (1, _) => "tydzień", (_, > 1 and < 5) => "tygodnie", _ => "tygodni" }, ReoccurenceType.Months => (plannedPaymentReoccurences, plannedPaymentReoccurences % 10) switch { (1, _) => "miesiąc", (_, > 1 and < 5) => "miesiące", _ => "miesięcy" }, ReoccurenceType.Years => (plannedPaymentReoccurences, plannedPaymentReoccurences % 10) switch { (1, _) => "rok", (_, > 1 and < 5) => "lata", _ => "lat" }, ReoccurenceType.EveryLastDayOfMonth => "ostatni dzień miesiąca", _ => string.Empty }; private async void InsertPlannedPayment_OnClicked(object? sender, EventArgs e) { await Navigation.PushModalAsync(new AddPlannedPaymentPage()); } private async void RemovePlannedPayment_OnClicked(object? sender, EventArgs e) { if (sender is not Button button) return; var answer = await DisplayAlert("Usunąć?", "Czy na pewno chcesz usunąć tą płatność?", "Tak", "Nie"); if (!answer) return; var id = (int)button.CommandParameter; Repository.Instance.RemovePlannedPayment(id); } }