protected void btnPayment_Click(object sender, EventArgs e)
        {
            if (!txtAmount.Text.IsInt64())
            {
                ShowMessageBox("مبلغ وارد شده نامعتبر است", "خطا", MessageBoxType.Error);
                return;
            }
            if (txtAmount.Text.ToLong() < 100000)
            {
                ShowMessageBox("مبلغ وارد شده نامعتبر است", "خطا", MessageBoxType.Error);
                return;
            }

            if (!txtChildBranchCode.Text.IsInt32() ||
                BMIBranchProvider.FindUnits(txtChildBranchCode.Text.ToInt32()) == null)
            {
                ShowMessageBox("کد شعبه وارد شده نامعتبر است", "خطا", MessageBoxType.Error);
                return;
            }

            var currentuser = KidsOnlineUser.Kids_UserInfo;

            string RequestKey;
            long Amount = SystemConfigs.IsInTestMode ? 1 : txtAmount.Text.ToLong() + 40000;
            long OrderId = OrderIdGenerator.Instance.GetNextOrderId();
            string AdditionalData = string.Format("پرداخت مبلغ افتتاح حساب آرزو" + "==>{0}", KidsOnlineUser.SSOUser.UserID);
            string CustomerEmailAddress = KidsOnlineUser.SSOUser.Email;

            string POSTHTML = MerchantHelpers.PaymentUtility(SystemConfigs.ServiceUrl, true, SystemConfigs.PaymentUrl, SystemConfigs.MerchantId,
                                                             Amount, OrderId, SystemConfigs.TransactionKey, SystemConfigs.TerminalId, SystemConfigs.ReturnURL,
                                                             AdditionalData, CustomerEmailAddress, "", out RequestKey);
            POSTHTML += @"</form>";


            currentuser.ChildAccBranchNo = txtChildBranchCode.Text.ToInt32();
            var CurrentTransaction = new KidsUsers_Payments
                {
                    Amount = Amount,
                    CreateDateTime = DateTime.Now,
                    OrderId = OrderId,
                    RequestKey = RequestKey,
                    UserIPAddress = HttpContext.Current.Request.UserHostAddress,

                };
            currentuser.KidsUsers_Payments.Add(CurrentTransaction);
            KidsUser_DataProvider.SaveKidsUser(currentuser, this, KidsSecureFormBaseClass.RefreshOnlineKidsUserInfo);


            SessionItems.CurrentTransaction = CurrentTransaction;
            SessionItems.FormBody = POSTHTML;

            Response.Redirect("~/Payment/MerchantBeforePost.aspx", true);

            /////////////////////////////////

        }
        private void VerifyTransaction(KidsUsers_Payments CurrentTransaction)
        {
            if (CurrentTransaction.AppStatusCode == null)
            {
                try
                {
                    CheckStatusResult GetStatus_Result = MerchantHelpers.CheckRequestStatus(SystemConfigs.ServiceUrl, true,
                                                                                          CurrentTransaction.OrderId,
                                                                                          SystemConfigs.MerchantId, SystemConfigs.TerminalId,
                                                                                          SystemConfigs.TransactionKey,
                                                                                          CurrentTransaction.RequestKey,
                                                                                          CurrentTransaction.Amount
                        );
                    if (GetStatus_Result.AppStatusCode == 0 && GetStatus_Result.AppStatusDescription == "COMMIT")
                    {
                        UpdateKidsUserPayment(CurrentTransaction, GetStatus_Result);
                        pnlResult.Visible = true;
                        lblAmount.Text = CurrentTransaction.Amount.ToString();
                        lblAmount_Letter.Text = CurrentTransaction.Amount.ToString().num2str();
                        lblOrderId.Text = CurrentTransaction.OrderId.ToString();
                        lblTraceNo.Text = CurrentTransaction.SystemTraceNo.ToString();
                        lblRefrenceNo.Text = CurrentTransaction.RetrivalRefNo;
                        lblTranDate.Text = PersianDateTime.MiladiToPersian(DateTime.Now).ToLongDateTimeString();

                        lblMessage.Text = @"پرداخت شما با موفقیت انجام گرفته است.<br>
                                              شما از 72 ساعت دیگر با مراجعه به این سایت میتوانید از شماره حساب خود آگاه گردیده و با مراجعه به شعب بانک ملی نسبت به فعالسازی حساب خود و دریافت کارت حساب خود اقدام نمایید";
                    }
                    else
                    {
                        SetFailedTransaction(CurrentTransaction, GetStatus_Result);
                    }
                }
                catch (Exception exp)
                {
                    LogUtility.WriteEntryEventLog("CheckStatusHelper", exp, EventLogEntryType.Error);
                    lblMessage.Text =
                        "(03)با عرض پوزش در حال حاضر امکان سرویس دهی موجود نمی باشد.در صورت کسر مبلغ از حساب شما , مبلغ بطور خودکار به حساب شما بازگشت داده خواهد شد.";
                }
            }
            else
                lblMessage.Text =
                    "عملیات لازم جهت پردازش این تراکنش قبلا انجام شده است.جهت مشاهده مجدد آن به اطلاعات ارسالی به آدرس ایمیل خود مراجعه فرمایید";
        }
        private void SetFailedTransaction(KidsUsers_Payments payment, CheckStatusResult PaymentResult)
        {
            payment.MarkAsModified();
            payment.RetrivalRefNo = PaymentResult.RefrenceNumber;
            payment.SystemTraceNo = PaymentResult.TraceNo;
            payment.AppStatusCode = PaymentResult.AppStatusCode;
            payment.AppStatusDescription = PaymentResult.AppStatusDescription;
            payment.CustomerCardNo = PaymentResult.CustomerCardNumber;


            KidsUser_DataProvider.SaveKidsUserPayment(payment);
            RefreshOnlineKidsUserInfo(false);
            ShowMessageBox(string.Format(@"خطا در پرداخت:<br>
                            کد خطا :{0}<br>
                            شرح خطا :{1}
                            ", payment.AppStatusCode, payment.AppStatusDescription),
                            "خطا در پرداخت", MessageBoxType.Error);
        }
        private void UpdateKidsUserPayment(KidsUsers_Payments payment, CheckStatusResult PaymentResult)
        {
            var currentuser = payment.KidsUser;
            currentuser.MarkAsModified();

            payment.MarkAsModified();
            payment.RetrivalRefNo = PaymentResult.RefrenceNumber;
            payment.SystemTraceNo = PaymentResult.TraceNo;
            payment.AppStatusCode = PaymentResult.AppStatusCode;
            payment.AppStatusDescription = PaymentResult.AppStatusDescription;
            payment.CustomerCardNo = PaymentResult.CustomerCardNumber;


            currentuser.ChildAccNo = null;
            currentuser.StatusHistory = string.Format("{0},{1}", currentuser.CurrentStatus, (int)KidsUserStatus.WaiteForAccCreation);



            List<CustomerAccInfo> childBMIAccounts = BMICustomer_DataProvider.GetAccByMellicode(currentuser.ChildMelliCode);
            List<CustomerAccInfo> parentBMIAccounts = BMICustomer_DataProvider.GetAccByMellicode(currentuser.ParentMelliCode);

            if (parentBMIAccounts.Any())
            {
                if (childBMIAccounts.Any())
                {
                    currentuser.CurrentStatus = (int)KidsUserStatus.WaiteForAccCreation;
                }
                else
                {
                    currentuser.CurrentStatus = (int)KidsUserStatus.WaiteForAccCreation_WithSabtConfirmation;
                }

            }
            else
            {
                throw new ApplicationException("Invalid User State");
            }


            KidsUser_DataProvider.SaveKidsUser(currentuser, this, RefreshOnlineKidsUserInfo);

            ShowMessageBox("اطلاعات حساب شما با موفقیت ثبت شد", "ثبت اطلاعات حساب آرزو", MessageBoxType.Information);
        }
        public static void SaveKidsUserPayment(KidsUsers_Payments payment)
        {
            using (var ctx = new BMIKidsEntities(ConnectionString))
            {
                try
                {

                    if (payment.ChangeTracker.State == ObjectState.Added)
                    {
                        payment.CreateDateTime = DateTime.Now;
                        payment.LastUpdateDateTime = null;
                    }
                    else
                        payment.LastUpdateDateTime = DateTime.Now;

                    ctx.KidsUsers_Payments.ApplyChanges(payment);
                    ctx.SaveChanges();
                    payment.AcceptChanges();
                }
                catch (Exception ex)
                {
                    LogUtility.WriteEntryEventLog("SaveSystemUser_DataProvider_UpdateTransaction", ex, EventLogEntryType.Information);
                    if (ex.InnerException != null)
                        throw ex.InnerException;
                    throw;
                }
            }
        }