using System.Collections.ObjectModel; using WheresMyMoney.Maui.Core; namespace WheresMyMoney.Maui; public partial class BalancePage : ContentPage { public ObservableCollection PlannedPaymentsViewModels { get; set; } = []; public BalancePage() { InitializeComponent(); BindingContext = this; UpdateUi(); Repository.Instance.DataChanged += OnDataChanged; } private void OnDataChanged(object? sender, EventArgs e) { UpdateUi(); } private void UpdateUi() { var availableBalance = Repository.Instance.GetNewestBalance(); var plannedPayments = Repository.Instance.GetFilteredPlannedPayments(); var now = DateTime.Now; var nearestPayday = Repository.Instance.GetNearestPayday(now); var payments = plannedPayments.SelectMany(x => x.ExpandSubscription(now, nearestPayday)).ToList(); var freeFunds = availableBalance - payments.Sum(x => x.Amount); AvailableFundsText.Text = availableBalance.ToString("C"); FreeFundsText.Text = freeFunds.ToString("C"); PlannedPaymentsViewModels.Clear(); foreach (var y in payments.GroupBy(x => x.DateStart.Date).OrderBy(x=>x.Key)) { PlannedPaymentsViewModels.Add(new PlannedPaymentsViewModel(y.First().DateStart.ToString("m"), y.Select(x => new PlannedPaymentViewModel(x.Name, x.Amount.ToString("C"))).ToList())); } } private async void UpdateBalance_OnClicked(object? sender, EventArgs e) { var result = await DisplayPromptAsync("Aktualizacja środków", "Wprowadź środki", keyboard: Keyboard.Numeric); if (decimal.TryParse(result, out var amount)) { Repository.Instance.InsertBalance(amount, DateTime.Now); } } private async void LegalNotice_OnClicked(object? sender, EventArgs e) { await DisplayAlert("Informacje prawne", "Icons and font resources used in this app are provided by Font Awesome Free, licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0). Visit https://fontawesome.com for more details.", "OK"); } }