public ActionResult Edit(CMS_DepositTransactionsModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(PartialView("_Edit", model));
                }

                var msg = "";
                model.UpdatedBy = CurrentUser.UserId;
                var result = _factory.ChangeStatus(model, CurrentUser.UserId);
                if (result)
                {
                    return(RedirectToAction("Index"));
                }

                ModelState.AddModelError("ErrorMessage", msg);
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(PartialView("_Edit", model));
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(PartialView("_Edit", model));
            }
        }
        public bool ChangeStatus(CMS_DepositTransactionsModel model, string userId)
        {
            var result = true;

            try
            {
                using (var cxt = new CMS_Context())
                {
                    using (var trans = cxt.Database.BeginTransaction())
                    {
                        try
                        {
                            var e = cxt.CMS_DepositTransactions.Where(x => x.Id.Equals(model.Id)).ToList();
                            e.ForEach(x =>
                            {
                                x.Status      = model.Status;
                                x.UpdatedDate = DateTime.Now;
                                x.UpdatedBy   = userId;
                            });
                            var c = cxt.CMS_Customers.Where(x => x.Id.Equals(model.CustomerId)).FirstOrDefault();
                            if (c != null)
                            {
                                c.TotalCredit += model.PackageSMS;// change after confirm
                                c.UpdatedBy    = userId;
                                c.UpdatedDate  = DateTime.Now;
                            }
                            cxt.SaveChanges();
                            trans.Commit();
                        }
                        catch (Exception ex)
                        {
                            NSLog.Logger.Error("ChangeStatusDepositTransaction", ex);
                            trans.Rollback();
                        }
                        finally
                        {
                            cxt.Dispose();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                NSLog.Logger.Error("ChangeStatusDepositTransaction", ex);
            }
            return(result);
        }
        public CMS_DepositTransactionsModel GetDetail(string depId)
        {
            var data = new CMS_DepositTransactionsModel();

            try
            {
                using (var cxt = new CMS_Context())
                {
                    data = cxt.CMS_DepositTransactions
                           .Where(x => x.Id.Equals(depId))
                           .Select(x => new CMS_DepositTransactionsModel()
                    {
                        CreatedBy         = x.CreatedBy,
                        CreatedDate       = x.CreatedDate,
                        CustomerId        = x.CustomerId,
                        CustomerName      = x.CustomerName,
                        ExchangeRate      = x.ExchangeRate,
                        Id                = x.Id,
                        IsActive          = x.IsActive,
                        PackageId         = x.PackageId,
                        PackageName       = x.PackageName,
                        PackagePrice      = x.PackagePrice,
                        PackageSMS        = x.PackageSMS,
                        PayCoin           = x.PayCoin,
                        PaymentMethodId   = x.PaymentMethodId,
                        PaymentMethodName = x.PaymentMethodName,
                        SMSPrice          = x.SMSPrice,
                        Status            = x.Status,
                        WalletMoney       = x.WalletMoney,
                        DepositNo         = x.DepositNo
                    }).FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                NSLog.Logger.Error("GetDetailDepositTransaction", ex);
            }
            return(data);
        }
        // GET: PerfectMoney
        public ActionResult Index(decimal?price)
        {
            PerfectMoneyModel model = new PerfectMoneyModel();

            if (TempData["ErrorMessage"] != null)
            {
                ViewData["ErrorMessage"] = TempData["ErrorMessage"].ToString();
            }
            if (TempData["SuccessMessage"] != null)
            {
                ViewData["SuccessMessage"] = TempData["SuccessMessage"].ToString();
            }
            if (TempData["DataReturnError"] != null)
            {
                model = (PerfectMoneyModel)TempData["DataReturnError"];
                return(View(model));
            }
            try
            {
                List <CMS_DepositTransactionsModel> models = new List <CMS_DepositTransactionsModel>();
                var Config   = fac_C.GetList().Where(x => x.ValueType == (int)Commons.ConfigType.USD).FirstOrDefault();
                var customer = Session["UserC"] as UserSession;
                CMS_DepositTransactionsModel _data = new CMS_DepositTransactionsModel();
                _data.PaymentMethodName = "Perfect money";
                _data.WalletMoney       = Commons.APIType.APIPerfectMonney.ToString();
                _data.ExchangeRate      = Config != null ? Config.Value : 0;
                _data.PayCoin           = price == 0 ? price.Value : price.Value;
                _data.CustomerId        = customer.UserId;
                _data.CustomerName      = customer.UserName;
                _data.DepositNo         = CommonHelper.RandomDepositNo();
                models.Add(_data);
                //Set account information of admin to perfect payment
                var payPerfect = facP.GetList().Where(o => o.ReferenceExchange.Equals((int)Commons.ExchangeType.None)).FirstOrDefault();
                var adminInfo  = fac_Co.GetList().Select(o => o.Name).FirstOrDefault();;
                model.PAYEE_ACCOUNT  = payPerfect.WalletMoney;
                model.PAYEE_NAME     = adminInfo;
                model.PAYMENT_AMOUNT = price == 0 ? price.Value : price.Value;
                model.PAYMENT_AMOUNT = Math.Round(model.PAYMENT_AMOUNT.Value, 2);
                model.PAYMENT_UNITS  = "USD";
                var req = Request.Params.AllKeys;
                var msg = "";
                if (req != null && req.Count() > 0)
                {
                    var Paymnet_Batch_Num = Request.Params["PAYMENT_BATCH_NUM"];
                    if (Paymnet_Batch_Num == "0" && Paymnet_Batch_Num != null)
                    {
                        models[0].Status = (int)Commons.DepositStatus.Cancel;
                        var result = facT.CreateDepositTransaction(models, ref msg, null);
                        NSLog.Logger.Info("Perface_Payment", "Perfect payment Cancel");
                        // cancel
                    }
                    else if (Paymnet_Batch_Num != "0" && Paymnet_Batch_Num != null)
                    {
                        models[0].Status      = (int)Commons.DepositStatus.Completed;
                        models[0].CustomerId  = customer.UserId;
                        models[0].CreatedDate = DateTime.Now;
                        models[0].UpdatedDate = DateTime.Now;;
                        models[0].CreatedBy   = customer.UserName;
                        models[0].PackageSMS  = price.Value;
                        List <string> lstID = new List <string>();
                        lstID.Add(models[0].CustomerId);
                        var result = facT.CreateDepositTransaction(models, ref msg, lstID);
                        //Success change status
                        CMS_DepositTransactionsModel inputModel = new CMS_DepositTransactionsModel();
                        inputModel.UpdatedBy  = CurrentUser.UserId;
                        inputModel.Status     = (int)Commons.DepositStatus.Completed;
                        inputModel.Id         = lstID[0];
                        inputModel.CustomerId = customer.UserId;
                        var outPut = facT.ChangeStatus(inputModel, CurrentUser.UserId);
                    }
                }
            }
            catch (Exception ex)
            {
                NSLog.Logger.Info("Perface_Payment", "Perfect payment no successfully");
            }
            return(View(model));
        }