protected override void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                string errorMessage = ValidInput();
                if (string.IsNullOrEmpty(errorMessage) == false)
                {
                    MessageBox.Show(errorMessage, "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (MessageBox.Show("Thay đổi thông tin chi tiết của Doanh thu có thể làm thay đổi tổng doanh thu.\r\n Bạn có chắc chắn muốn thay đổi không?"
                                    , "Chú ý"
                                    , MessageBoxButtons.YesNo
                                    , MessageBoxIcon.Warning
                                    , MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.No)
                {
                    return;
                }

                base.btnSave_Click(sender, e);

                using (ThanhVanTranSysEntities context = new ThanhVanTranSysEntities())
                {
                    RevenueDetail expenseDetail = _isUpdating ? context.RevenueDetails.SingleOrDefault(i => i.id == tbId.Text.Trim())
                            : new RevenueDetail();

                    expenseDetail.id           = IsUpdating ? tbId.Text : IDGenerator.ExpenseId();
                    expenseDetail.object_id    = tbObjectId.Text;
                    expenseDetail.revenue_id   = _revenueId;
                    expenseDetail.amount       = CurrencyUtil.ToDecimal(tbAmount.Text);
                    expenseDetail.created_by   = _isUpdating ? expenseDetail.created_by : SystemParam.CurrentUser.id;
                    expenseDetail.created_date = _isUpdating ? expenseDetail.created_date : dtpCreateDate.Value;
                    expenseDetail.description  = tbRemark.Text;
                    expenseDetail.type         = cbType.SelectedValue.ToString();
                    expenseDetail.title        = string.Empty;

                    AppLogger.logInfo("btnSave_Click", IsUpdating ? "UPDATE" : "INSERT", expenseDetail);

                    if (IsUpdating == false)
                    {
                        context.RevenueDetails.AddObject(expenseDetail);
                    }

                    context.SaveChanges();

                    ChangeViewStatus(false);
                }

                UpdateExpenseAmount();

                LoadExpenseDetail();
            }
            catch (Exception exc)
            {
                AppLogger.logError("btnSave_Click", exc);
            }
        }
        protected override void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                string errorMessage = ValidInput();
                if (string.IsNullOrEmpty(errorMessage) == false)
                {
                    MessageBox.Show(errorMessage, "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                base.btnSave_Click(sender, e);

                using (ThanhVanTranSysEntities context = new ThanhVanTranSysEntities())
                {
                    if (_isRevenue)
                    {
                        Revenue revenue = IsUpdating ? context.Revenues.SingleOrDefault(i => i.id == tbId.Text.Trim())
                            : new Revenue();

                        revenue.id           = IsUpdating ? tbId.Text : IDGenerator.RevenueId();
                        revenue.name         = tbName.Text;
                        revenue.amount       = CurrencyUtil.ToDecimal(tbAmount.Text);
                        revenue.created_by   = _isUpdating ? revenue.created_by : SystemParam.CurrentUser.id;
                        revenue.created_date = _isUpdating ? revenue.created_date : dtpCreateDate.Value;
                        revenue.description  = tbRemark.Text;
                        revenue.type         = Constants.RevenueType.Other.ToString();

                        AppLogger.logInfo("btnSave_Click", IsUpdating ? "UPDATE" : "INSERT", revenue);

                        if (IsUpdating == false)
                        {
                            context.Revenues.AddObject(revenue);
                        }
                    }
                    else
                    {
                        Expense expense = IsUpdating ? context.Expenses.SingleOrDefault(i => i.id == tbId.Text.Trim())
                                : new Expense();

                        expense.id           = IsUpdating ? tbId.Text : IDGenerator.ExpenseId();
                        expense.name         = tbName.Text;
                        expense.amount       = CurrencyUtil.ToDecimal(tbAmount.Text);
                        expense.created_by   = _isUpdating ? expense.created_by : SystemParam.CurrentUser.id;
                        expense.created_date = _isUpdating ? expense.created_date : dtpCreateDate.Value;
                        expense.description  = tbRemark.Text;
                        expense.type         = string.Empty;

                        AppLogger.logInfo("btnSave_Click", IsUpdating ? "UPDATE" : "INSERT", expense);

                        if (IsUpdating == false)
                        {
                            context.Expenses.AddObject(expense);
                        }
                    }

                    context.SaveChanges();

                    ChangeViewStatus(false);
                    btnSearch_Click(sender, e);
                }
            }
            catch (Exception exc)
            {
                AppLogger.logError("btnSave_Click", exc);
            }
        }