/// <summary>
        /// Delete Selected Row from DataGrid and DB
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DeleteExpenseBtn_Click(object sender, RoutedEventArgs e)
        {
            expense exp = ExpenseDataGrid.SelectedItem as expense;

            _expenseAccess.RemoveExpense(exp);
            expDataGrid.Items.Refresh();
        }
        /// <summary>
        /// Fetch selected row from Database, update Grid and DB
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UpdateBtn_Click(object sender, RoutedEventArgs e)
        {
            var validator = Validate();

            if (validator)
            {
                expense editExp = (from ex in context.expenses
                                   where ex.expense_id == this.expense.expense_id
                                   select ex).Single();

                editExp.expense_name    = formExpenseName.Text;
                editExp.expense_cost    = Double.Parse(formExpenseCost.Text);
                editExp.contractor_name = formContractorName.Text;
                editExp.expense_desc    = formExpenseDescription.Text;
                editExp.expense_type    = expTypeOp.IsChecked == true
                    ? expTypeOp.Content.ToString()
                    : expTypeAdm.Content.ToString();

                context.SaveChanges();
                MainWindow.ExpenseDataGrid.ItemsSource = context.expenses.ToList();

                MessageBoxButton mbBtn   = MessageBoxButton.OK;
                string           header  = "Update Expense";
                string           message = $"Expense id:{editExp.expense_id} has been altered.";
                MessageBoxImage  icon    = MessageBoxImage.Information;
                MessageBoxResult result  = MessageBox.Show(message, header, mbBtn, icon);

                Close();
            }
        }
        /// <summary>
        /// Update Expense Window for Expense CRUD Operations.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="expName"></param>
        /// <param name="expCost"></param>
        /// <param name="ctrName"></param>
        /// <param name="expDesc"></param>
        /// <param name="expType"></param>
        public UpdateExpense()
        {
            InitializeComponent();

            expense = GetSelectedExpense();
            SetFields(expense);
        }
        /// <summary>
        /// Creates expense based on provided fields.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ApplyBtn_Click(object sender, RoutedEventArgs e)
        {
            var validator = Validate();

            if (validator)
            {
                //Map Textbox fields to new expense object
                expense expense = new expense
                {
                    expense_name    = formExpenseName.Text,
                    expense_cost    = Double.Parse(formExpenseCost.Text),
                    expense_desc    = formExpenseDescription.Text,
                    contractor_name = formContractorName.Text,
                    expense_type    = expTypeOp.IsChecked == true
                        ? expTypeOp.Content.ToString()
                        : expTypeAdm.Content.ToString()
                };

                //Add expense to DataGrid and DB
                _expenseAccess.AddExpense(expense, propertyId);

                Close();

                MessageBoxButton mbBtn   = MessageBoxButton.OK;
                string           header  = "Add Expense";
                string           message = $"Expense: {expense.expense_name} has been created.";
                MessageBoxImage  icon    = MessageBoxImage.Information;
                MessageBoxResult result  = MessageBox.Show(message, header, mbBtn, icon);
            }
        }
        /// <summary>
        /// Set window fields based on select row
        /// </summary>
        private void SetFields(expense expense)
        {
            formExpenseName.Text        = expense.expense_name;
            formExpenseCost.Text        = expense.expense_cost.ToString("F");
            formContractorName.Text     = expense.contractor_name;
            formExpenseDescription.Text = expense.expense_desc;

            if (expense.expense_type == "Operational")
            {
                expTypeOp.IsChecked = true;
            }
            else if (expense.expense_type == "Administrative")
            {
                expTypeAdm.IsChecked = true;
            }
        }