internal static List <TransactionImportExport> GetTransactionForExport(Account account, string type, DateTime from, DateTime to) { var transactionsExport = new List <TransactionImportExport>(); var transactions = SilverCoinsManager.GetTransactions().Where(x => x.CreatedDate >= from && x.CreatedDate <= to).ToList(); if (account.Id != 0) { transactions.Where(x => x.Account == account.Id).ToList(); } if (type != "Both") { transactions.Where(x => x.Type == type).ToList(); } foreach (var transaction in transactions) { var category = SilverCoinsManager.GetCategory(transaction.Category); var accountAc = SilverCoinsManager.GetAccount(transaction.Account); transactionsExport.Add(new TransactionImportExport { Account = accountAc.Name, Category = category.Name, Type = transaction.Type, Amount = transaction.Amount.ToString("N2"), Currency = accountAc.Currency, Date = transaction.CreatedDate.ToString("dd/MM/yyyy"), PaymentType = transaction.PaymentType, Name = transaction.Name, Balance = accountAc.Balance.ToString("N2") }); } return(transactionsExport); }
private void PopulateListView(Account account) { if (account.Id == 0) { var list = SilverCoinsManager.GetTransactions().ToList(); transactions = list.ToList(); foreach (var item in list.Where(x => x.Type == "Transfer")) { transactions.Insert(transactions.IndexOf(item) + 1, new Transaction() { Id = item.Id, Name = item.Name, Category = item.Category, Amount = item.Amount * item.CurrencyRate, Account = item.AccountTransfer, CreatedDate = item.CreatedDate, PaymentType = item.PaymentType, Type = "Income" }); } } else { transactions = SilverCoinsManager.GetAllTransactionsForAccount(account.Id); } transactionAdapter = new TransactionListAdapter(Activity, transactions, account); listView.Adapter = transactionAdapter; }
internal static List <ObservableArrayList> BarChartData(Account account) { var transactions = SilverCoinsManager.GetTransactions() .Where(x => x.Type != "Transfer" && x.CreatedDate >= DateTime.Today.AddYears(-1)) .OrderBy(x => x.CreatedDate) .ToList(); if (account.Id != 0) { transactions = transactions.Where(x => x.Account == account.Id).ToList(); } List <ResultLine> resultListIncome = GetDataForTransactionsGroupByMonth(transactions.Where(x => x.Type == "Income").ToList()); List <ResultLine> resultListExpense = GetDataForTransactionsGroupByMonth(transactions.Where(x => x.Type == "Expense").ToList()); ObservableArrayList listIncome = new ObservableArrayList(); ObservableArrayList listExpense = new ObservableArrayList(); foreach (var item in resultListIncome) { listIncome.Add(new ChartDataPoint(item.Name, Convert.ToDouble(item.Value))); } foreach (var item in resultListExpense) { listExpense.Add(new ChartDataPoint(item.Name, Convert.ToDouble(item.Value))); } List <ObservableArrayList> dataModel = new List <ObservableArrayList>(); dataModel.Add(listIncome); dataModel.Add(listExpense); return(dataModel); }
internal static ObservableArrayList PieChartData(Account account) { List <Transaction> transactions = new List <Transaction>(); if (account.Id != 0) { transactions = SilverCoinsManager.GetTransactions().Where(x => x.Type != "Transfer" && x.Account == account.Id).ToList(); } else { transactions = SilverCoinsManager.GetTransactions().Where(x => x.Type != "Transfer").ToList(); } List <ResultLine> resultList = transactions.GroupBy(x => x.Category) .Select(r => new ResultLine { Name = SilverCoinsManager.GetCategory(r.First().Category).Name, Value = r.Sum(s => s.Amount) }) .ToList(); ObservableArrayList list = new ObservableArrayList(); foreach (var item in resultList) { list.Add(new ChartDataPoint(item.Name, Convert.ToDouble(item.Value))); } return(list); }
private static ObservableArrayList GetBalanceGroupByMonthPerAccount(Account account) { var transactions = SilverCoinsManager.GetTransactions() .Where(x => x.Type != "Transfer" && x.CreatedDate >= DateTime.Today.AddYears(-1) && x.Account == account.Id) .OrderBy(x => x.CreatedDate) .ToList(); List <ResultLine> resultList = transactions.GroupBy(x => x.CreatedDate.Month) .Select(r => new ResultLine { Name = r.First().CreatedDate.ToString("MMM"), Value = r.Sum(x => (x.Type == "Income" ? x.Amount : -x.Amount)) }) .ToList(); ObservableArrayList list = new ObservableArrayList(); decimal balance = 0; foreach (var item in resultList) { balance += item.Value; list.Add(new ChartDataPoint(item.Name, Convert.ToDouble(balance))); } return(list); }
private void SaveTransaction() { decimal oldAmount = 0; if (EditMode) { oldAmount = transaction.Amount; } Account accountFrom = listOfAccounts.ElementAt(spinnerTransactionAccount.SelectedItemPosition); Account accountTo = listOfAccounts.ElementAt(spinnerTransactionAccountTransfer.SelectedItemPosition); transaction.Name = edtTransactionName.Text; transaction.Amount = Convert.ToDecimal(txtTransactionAmount.Text); transaction.Account = accountFrom.Id; transaction.PaymentType = spinnerTransactionPaymentType.SelectedItem.ToString(); transaction.Type = Type; transaction.CurrencyRate = 1; var date = Convert.ToDateTime(txtTransactionDate.Text); var datetime = new DateTime(date.Year, date.Month, date.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); transaction.CreatedDate = datetime; if (Type == "Transfer") { transaction.AccountTransfer = accountTo.Id; transaction.Category = SilverCoinsManager.GetCategoryByName("Transfer").Id; if (accountFrom.Currency != accountTo.Currency) { transaction.CurrencyRate = Convert.ToDecimal(edtCurrencyRate.Text); } else { transaction.CurrencyRate = 1; } } else if (Type == "Income") { transaction.Category = listOfIncomeCategories.ElementAt(spinnerTransactionCategory.SelectedItemPosition).Id; } else { transaction.Category = listOfExpenseCategories.ElementAt(spinnerTransactionCategory.SelectedItemPosition).Id; } SilverCoinsManager.SaveTransaction(transaction); if (EditMode) { AccountCalculations.AccountCalculations.UpdateBalanceAfterTransactionUpdate(accountFrom, accountTo, transaction, oldAmount); } else { AccountCalculations.AccountCalculations.UpdateBalanceAfterTransactionCreate(accountFrom, accountTo, transaction); } Finish(); }
private void SaveAccount() { account.Name = editName.Text; account.Description = editDescription.Text; account.Currency = Regex.Match((string)spinnerCurrency.SelectedItem, @"(?<=\().+?(?=\))").ToString(); account.Icon = iconDrawable; account.CreatedDate = DateTime.Today; SilverCoinsManager.SaveAccount(account); Finish(); }
private void CheckIfCategoryCanBeDeleted(int categoryId) { if (SilverCoinsManager.GetTransactionsByCategory(categoryId).Any()) { Toast.MakeText(this, Utils.Constants.CategoryDeletionWarning, ToastLength.Short).Show(); } else { SilverCoinsManager.DeleteCategory(categoryId); OnBackPressed(); } }
public static void UpdateBalanceAfterTransactionUpdate(Account accountFrom, Account accountTo, Transaction transaction, decimal oldAmount) { var difference = oldAmount - transaction.Amount; if (transaction.Type == "Transfer") { accountTo.Balance = accountTo.Balance - (difference * transaction.CurrencyRate); SilverCoinsManager.SaveAccount(accountTo); } accountFrom.Balance = accountFrom.Balance + difference; SilverCoinsManager.SaveAccount(accountFrom); }
private void DeleteAccount() { new AlertDialog.Builder(this) .SetCancelable(true) .SetMessage("Delete this item?") .SetPositiveButton("Yes", (sender, args) => { SilverCoinsManager.DeleteAccount(account.Id); OnBackPressed(); Finish(); }) .SetNegativeButton("No", (sender, args) => { }) .Show(); }
public override View GetView(int position, View convertView, ViewGroup parent) { View itemView = convertView; if (itemView == null) { itemView = context.LayoutInflater.Inflate(Resource.Layout.list_view_item_transaction, parent, false); } Transaction transaction = this[position]; var category = SilverCoinsManager.GetCategory(transaction.Category); var account = SilverCoinsManager.GetAccount(transaction.Account); itemView.FindViewById <ImageView>(Resource.Id.tran_category_icon).SetImageResource(category.Icon != 0 ? category.Icon : Resource.Drawable.ic_launcher); itemView.FindViewById <TextView>(Resource.Id.tran_category_name).Text = category.Name; itemView.FindViewById <TextView>(Resource.Id.transaction_name).Text = transaction.Name; itemView.FindViewById <TextView>(Resource.Id.tran_payment_type).Text = transaction.PaymentType; itemView.FindViewById <TextView>(Resource.Id.tran_account).Text = account.Name; itemView.FindViewById <TextView>(Resource.Id.transaction_amount).Text = transaction.Amount.ToString("N2"); itemView.FindViewById <TextView>(Resource.Id.transaction_crated_date).Text = transaction.CreatedDate.ToString("dd/MM/yyyy"); itemView.FindViewById <TextView>(Resource.Id.transaction_currency).Text = " " + account.Currency; if (transaction.Type == "Transfer" && transaction.AccountTransfer == this.account.Id) { transaction.Type = "Income"; } switch (transaction.Type) { case "Income": itemView.FindViewById <TextView>(Resource.Id.transaction_amount).SetTextColor(Android.Graphics.Color.ForestGreen); break; case "Expense": itemView.FindViewById <TextView>(Resource.Id.transaction_amount).SetTextColor(Android.Graphics.Color.OrangeRed); itemView.FindViewById <TextView>(Resource.Id.transaction_amount).Text = "-" + transaction.Amount.ToString("N2"); break; case "Transfer": itemView.FindViewById <TextView>(Resource.Id.transaction_amount).SetTextColor(Android.Graphics.Color.OrangeRed); itemView.FindViewById <TextView>(Resource.Id.transaction_amount).Text = "-" + transaction.Amount.ToString("N2"); break; default: break; } return(itemView); }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ((HomeActivity)Activity).SupportActionBar.SetDisplayShowTitleEnabled(false); ((HomeActivity)Activity).SupportActionBar.SetDisplayShowCustomEnabled(true); ((HomeActivity)Activity).SupportActionBar.SetCustomView(Resource.Layout.layout_spinnerAccounts); HasOptionsMenu = true; view = inflater.Inflate(Resource.Layout.fragment_overview, null); listView = view.FindViewById <ListView>(Resource.Id.listViewTransactions); listView.ItemClick += OnListItemClick; listOfAccounts.Insert(0, new Account() { Name = "All accounts", Id = 0 }); spinnerAccounts = Activity.FindViewById <Spinner>(Resource.Id.spinnerAccounts); adapterAccounts = new ArrayAdapter <Account>(Activity, Resource.Layout.spinner_item, listOfAccounts); adapterAccounts.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); spinnerAccounts.Adapter = adapterAccounts; spinnerAccounts.ItemSelected += new EventHandler <AdapterView.ItemSelectedEventArgs>(SpinnerTransactionAccount_ItemClick); FloatingActionButton fab = view.FindViewById <FloatingActionButton>(Resource.Id.fab); fab.Click += (o, e) => { if (SilverCoinsManager.GetAccounts().ToList().Any()) { Intent intent = new Intent(fab.Context, typeof(SaveTransactionActivity)); StartActivity(intent); } else { new Android.Support.V7.App.AlertDialog.Builder(Activity) .SetCancelable(true) .SetMessage("You need to create account first!") .SetPositiveButton("OK", (sender, args) => { Intent intent = new Intent(fab.Context, typeof(SaveAccountActivity)); StartActivity(intent); }) .SetNegativeButton("Cancel", (sender, args) => { }) .Show(); } }; return(view); }
private void SaveCategory() { category.Name = editName.Text; category.Description = editDescription.Text; category.Type = Category.CategoryTypes.Income.ToString() == spinnerCategoryType.SelectedItem.ToString() ? Category.CategoryTypes.Income : Category.CategoryTypes.Expense; category.Visible = 1; category.Icon = iconDrawable; if (!editMode) { category.CreatedDate = DateTime.Today; } SilverCoinsManager.SaveCategory(category); Finish(); }
private void DeleteTransaction() { new AlertDialog.Builder(this) .SetCancelable(true) .SetMessage("Delete this item?") .SetPositiveButton("Yes", (sender, args) => { AccountCalculations.AccountCalculations. UpdateBalanceAfterTransactionDelete(SilverCoinsManager.GetAccount(transaction.Account), SilverCoinsManager.GetAccount(transaction.AccountTransfer), transaction); SilverCoinsManager.DeleteTransaction(transaction.Id); OnBackPressed(); Finish(); }) .SetNegativeButton("No", (sender, args) => { }) .Show(); }
private void PrepareAccounts() { Configuration accountConfig = SilverCoinsManager.GetConfigurationRecordByKey("ACCINIT"); if (accountConfig == null || accountConfig.BooleanValue == false) { Account[] accounts = { new Account() { Name = "Checking account", Currency = "EUR", CreatedDate = DateTime.Today, Icon = Resource.Drawable.euro }, new Account() { Name = "Savings account", Currency = "EUR", CreatedDate = DateTime.Today, Icon = Resource.Drawable.deposits }, new Account() { Name = "Cash", Currency = "EUR", CreatedDate = DateTime.Today, Icon = Resource.Drawable.cash }, }; foreach (var account in accounts) { SilverCoinsManager.SaveAccount(account); } SilverCoinsManager.SaveConfiguration(new Configuration() { Name = "Accounts initalized", Key = "ACCINIT", BooleanValue = true }); } }
private void FilterTransactions() { var day = spinnerDay.SelectedItemPosition; var month = spinnerMonth.SelectedItemPosition; var year = listOfYears[spinnerYear.SelectedItemPosition]; var account = listOfAccounts[spinnerAccounts.SelectedItemPosition]; if (day != 0 && month == 0) { Toast.MakeText(Activity, "Month must be selected!", ToastLength.Short).Show(); } else { transactions = SilverCoinsManager.GetTransactionsByDate(day, month, year, account.Id); transactionAdapter = new TransactionListAdapter(Activity, transactions, account); listView.Adapter = transactionAdapter; showIntervalDialog.Dismiss(); } }
internal static List <ObservableArrayList> ColumnChartData(Account account) { List <ObservableArrayList> dataModel = new List <ObservableArrayList>(); if (account.Id == 0) { var accounts = SilverCoinsManager.GetAccounts().ToList(); foreach (var item in accounts) { dataModel.Add(GetBalanceGroupByMonthPerAccount(item)); } } else { dataModel.Add(GetBalanceGroupByMonthPerAccount(account)); } return(dataModel); }
public static void UpdateBalanceAfterTransactionDelete(Account accountFrom, Account accountTo, Transaction transaction) { if (transaction.Type == "Transfer") { accountFrom.Balance = accountFrom.Balance + transaction.Amount; SilverCoinsManager.SaveAccount(accountFrom); accountTo.Balance = accountTo.Balance - (transaction.Amount * transaction.CurrencyRate); SilverCoinsManager.SaveAccount(accountTo); } else if (transaction.Type == "Income") { accountFrom.Balance = accountFrom.Balance - transaction.Amount; SilverCoinsManager.SaveAccount(accountFrom); } else { accountFrom.Balance = accountFrom.Balance + transaction.Amount; SilverCoinsManager.SaveAccount(accountFrom); } }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Toolbar.SetNavigationIcon(Resource.Drawable.ic_cancel); Window.SetStatusBarColor(Android.Graphics.Color.ParseColor("#00796B")); edtTransactionName = FindViewById <EditText>(Resource.Id.edit_transaction_name); txtTransactionAmount = FindViewById <TextView>(Resource.Id.transaction_ammount); txtTransactionCategory = FindViewById <TextView>(Resource.Id.txt_transaction_category); txtTransactionAccount = FindViewById <TextView>(Resource.Id.txt_transaction_account); txtTransactionCurrency = FindViewById <TextView>(Resource.Id.transaction_currency); txtTransactionPaymentType = FindViewById <TextView>(Resource.Id.txt_transaction_payment_type); txtInputLayoutTranName = FindViewById <TextInputLayout>(Resource.Id.txtInputLayoutTranName); Bundle extras = Intent.Extras; if (extras != null) { EditMode = extras.GetBoolean("EDIT_MODE"); if (EditMode) { var transactionId = Newtonsoft.Json.JsonConvert.DeserializeObject <int>(extras.GetString("TRANSACTION_ID")); transaction = SilverCoinsManager.GetTransaction(transactionId); Type = transaction.Type; edtTransactionName.Text = transaction.Name; txtTransactionAmount.Text = transaction.Amount.ToString("N2"); } } else { transaction = new Transaction(); } InitalizeTransactionTypes(); InitalizeSpinners(); InitalizeDatePicker(); }
internal static void ImportTransactionsFromList(IEnumerable <TransactionImportExport> transactionsForImport) { if (transactionsForImport.Any()) { // Get list of accounts and categories from document var accountsForImport = transactionsForImport.Select(x => new Account { Name = x.Account, Currency = x.Currency, Balance = Convert.ToDecimal(x.Balance), CreatedDate = DateTime.Today, Description = string.Empty, Icon = Resource.Drawable.cash }); var categoriesForImport = transactionsForImport.Select(x => new Category { Name = x.Category, Type = x.Type == Category.CategoryTypes.Expense.ToString() ? Category.CategoryTypes.Expense : Category.CategoryTypes.Income, Description = string.Empty, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.salary }); var accounts = SilverCoinsManager.GetAccounts(); var categories = SilverCoinsManager.GetCategories(); // Find accounts and categories that do not exist in database var newAccounts = accountsForImport.Where(x => !accounts.Any(s => s.Name == x.Name)); var newCategories = categoriesForImport.Where(x => !categories.Any(s => s.Name == x.Name)); // Insert missing accounts and categories if (newAccounts.Any()) { foreach (var account in newAccounts) { SilverCoinsManager.SaveAccount(account); } } if (newCategories.Any()) { foreach (var category in newCategories) { SilverCoinsManager.SaveCategory(category); } } foreach (var transaction in transactionsForImport) { SilverCoinsManager.SaveTransaction(new Transaction { Name = transaction.Name, Account = SilverCoinsManager.GetAccountByName(transaction.Account).Id, Category = SilverCoinsManager.GetCategoryByName(transaction.Category).Id, Amount = Convert.ToDecimal(transaction.Amount), PaymentType = transaction.PaymentType, Type = transaction.Type, CreatedDate = DateTime.Now }); } } }
private void InitalizeSpinners() { adapterAccount = new ArrayAdapter <Account>(this, Resource.Layout.spinner_item, listOfAccounts); adapterAccountTransfer = new ArrayAdapter <Account>(this, Resource.Layout.spinner_item, listOfAccounts); adapterCategory = new ArrayAdapter <Category>(this, Resource.Layout.spinner_item, EditMode ? (transaction.Type == "Income" ? listOfIncomeCategories : listOfExpenseCategories) : listOfIncomeCategories); adapterPaymentType = new ArrayAdapter <string>(this, Resource.Layout.spinner_item, paymentTypes); adapterAccount.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); adapterCategory.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); adapterPaymentType.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); adapterAccountTransfer.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); spinnerTransactionAccount = FindViewById <Spinner>(Resource.Id.spinner_transaction_account); spinnerTransactionCategory = FindViewById <Spinner>(Resource.Id.spinner_transaction_category); spinnerTransactionPaymentType = FindViewById <Spinner>(Resource.Id.spinner_transaction_payment_type); spinnerTransactionAccountTransfer = FindViewById <Spinner>(Resource.Id.spinner_transaction_account_transfer); spinnerTransactionAccount.Adapter = adapterAccount; spinnerTransactionCategory.Adapter = adapterCategory; spinnerTransactionPaymentType.Adapter = adapterPaymentType; spinnerTransactionAccountTransfer.Adapter = adapterAccountTransfer; spinnerTransactionAccount.ItemSelected += new EventHandler <AdapterView.ItemSelectedEventArgs>(SpinnerTransactionAccount_ItemClick); if (EditMode) { spinnerTransactionAccount.SetSelection(GetIndex(spinnerTransactionAccount, SilverCoinsManager.GetAccount(transaction.Account).Name)); spinnerTransactionCategory.SetSelection(GetIndex(spinnerTransactionCategory, SilverCoinsManager.GetCategory(transaction.Category).Name)); spinnerTransactionPaymentType.SetSelection(adapterPaymentType.GetPosition(transaction.PaymentType)); if (transaction.AccountTransfer != 0) { spinnerTransactionAccountTransfer.SetSelection(GetIndex(spinnerTransactionAccountTransfer, SilverCoinsManager.GetAccount(transaction.AccountTransfer).Name)); } switch (transaction.Type) { case "Income": spinnerTransactionAccountTransfer.Visibility = ViewStates.Gone; break; case "Expense": spinnerTransactionAccountTransfer.Visibility = ViewStates.Gone; break; case "Transfer": spinnerTransactionCategory.Visibility = ViewStates.Gone; break; default: break; } } else { spinnerTransactionAccountTransfer.Visibility = ViewStates.Gone; } }
private void PrepareCategories() { Configuration categoryConfig = SilverCoinsManager.GetConfigurationRecordByKey("CATINIT"); if (categoryConfig == null || categoryConfig.BooleanValue == false) { Category[] categories = { new Category { Name = "Salary", Description = "", Type = Category.CategoryTypes.Income, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.salary, }, new Category { Name = "Groceries", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.groceries, }, new Category { Name = "Eating out", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.eating_out, }, new Category { Name = "Holidays", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.vacation, }, new Category { Name = "Sport", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.sports, }, new Category { Name = "Car", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.car, }, new Category { Name = "Shopping", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.shopping, }, new Category { Name = "Entertainment", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.entertainment, }, new Category { Name = "Pets", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.pets, }, new Category { Name = "Kids", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.kids, }, new Category { Name = "Electronics", Description = "", Type = Category.CategoryTypes.Expense, CreatedDate = DateTime.Today, Visible = 1, Icon = Resource.Drawable.electronics, }, new Category { Name = "Transfer", Description = "", Type = Category.CategoryTypes.MoneyTransfer, CreatedDate = DateTime.Today, Visible = 0, Icon = Resource.Drawable.transfer }, }; foreach (var category in categories) { SilverCoinsManager.SaveCategory(category); } SilverCoinsManager.SaveConfiguration(new Configuration() { Name = "Categories initalized", Key = "CATINIT", BooleanValue = true }); } }