using Billing.Languages; using Billing.Models; using Billing.UI; using System; using System.Collections.Generic; using Xamarin.Forms; namespace Billing.Views { public partial class AddAccountPage : BillingPage { private static readonly BindableProperty AccountNameProperty = BindableProperty.Create(nameof(AccountName), typeof(string), typeof(AddAccountPage)); private static readonly BindableProperty AccountIconProperty = BindableProperty.Create(nameof(AccountIcon), typeof(string), typeof(AddAccountPage)); private static readonly BindableProperty CategoryProperty = BindableProperty.Create(nameof(Category), typeof(AccountCategory), typeof(AddAccountPage)); private static readonly BindableProperty InitialProperty = BindableProperty.Create(nameof(Initial), typeof(string), typeof(AddAccountPage)); private static readonly BindableProperty MemoProperty = BindableProperty.Create(nameof(Memo), typeof(string), typeof(AddAccountPage)); public string AccountName { get => (string)GetValue(AccountNameProperty); set => SetValue(AccountNameProperty, value); } public string AccountIcon { get => (string)GetValue(AccountIconProperty); set => SetValue(AccountIconProperty, value); } public AccountCategory Category { get => (AccountCategory)GetValue(CategoryProperty); set => SetValue(CategoryProperty, value); } public string Initial { get => (string)GetValue(InitialProperty); set => SetValue(InitialProperty, value); } public string Memo { get => (string)GetValue(MemoProperty); set => SetValue(MemoProperty, value); } private readonly Account account; public Command CheckAccount { get; } public Command SelectIcon { get; } public Command SelectCategory { get; } public event EventHandler AccountChecked; public AddAccountPage() { CheckAccount = new Command(OnCheckAccount); SelectIcon = new Command(OnSelectIcon); SelectCategory = new Command(OnSelectCategory); AccountIcon = BaseModel.ICON_DEFAULT; Category = AccountCategory.Cash; InitializeComponent(); } public AddAccountPage(Account account) { CheckAccount = new Command(OnCheckAccount); SelectIcon = new Command(OnSelectIcon); SelectCategory = new Command(OnSelectCategory); this.account = account; AccountName = account.Name; AccountIcon = account.Icon; Category = account.Category; Initial = account.Initial.ToString(); Memo = account.Memo; InitializeComponent(); } private async void OnCheckAccount() { if (Tap.IsBusy) { return; } using (Tap.Start()) { await Navigation.PopAsync(); _ = decimal.TryParse(Initial, out decimal initial); AccountChecked?.Invoke(this, new AccountEventArgs { Account = new Account { Id = account?.Id ?? -1, Name = AccountName, Icon = AccountIcon, Category = Category, Initial = initial, Balance = initial, Memo = Memo } }); } } private async void OnSelectIcon() { if (Tap.IsBusy) { return; } using (Tap.Start()) { var page = new IconSelectPage(AccountIcon); page.IconChecked += Account_IconChecked; await Navigation.PushAsync(page); } } private void Account_IconChecked(object sender, string icon) { AccountIcon = icon; } private async void OnSelectCategory() { if (Tap.IsBusy) { return; } using (Tap.Start()) { var source = new List> { new() { Icon = "dollar", Value = AccountCategory.Cash, Name = Resource.Cash }, new() { Icon = "creditcard", Value = AccountCategory.CreditCard, Name = Resource.CreditCard }, new() { Icon = "debitcard", Value = AccountCategory.DebitCard, Name = Resource.DebitCard }, new() { Icon = "online", Value = AccountCategory.ElecAccount, Name = Resource.ElecAccount } }; var page = new ItemSelectPage>(source); page.ItemTapped += Category_ItemTapped; await Navigation.PushAsync(page); } } private async void Category_ItemTapped(object sender, SelectItem e) { Category = e.Value; await Navigation.PopAsync(); } } public class AccountEventArgs : EventArgs { public Account Account { get; set; } } }