public async Task <ActionResult> Create(ConfirmPaymentVM model)
        {
            if (ModelState.IsValid)
            {
                var hasTransaction = await db.MembershipFee.AsNoTracking().Where(x => x.ActiveMemberId == model.ActiveMemberId &&
                                                                                 x.FeeCategory == model.FeeCategory)
                                     .ToListAsync();

                model.paymentType = model.RemitaPaymentType.ToString().Replace("_", " ").ToLower();

                if (model.FeeCategory == PaymentType.MembershipRegistration)
                {
                    model.serviceTypeId = RemitaConfigParam.MEMBERSHIPREGISTRATION;
                }
                else if (model.FeeCategory == PaymentType.MonthlyDues)
                {
                    model.serviceTypeId = RemitaConfigParam.MONTHLYDUES;
                }
                if (string.IsNullOrEmpty(model.payerEmail))
                {
                    model.payerEmail = $"{model.payerName.Trim()}@naccplateau.org";
                }


                var memberFee = new MembershipFee
                {
                    OrderId        = model.orderId,
                    FeeCategory    = model.FeeCategory,
                    Date           = DateTime.Now,
                    ActiveMemberId = model.ActiveMemberId,
                    PaidFee        = model.TotalAmount,
                    TotalAmount    = model.TotalAmount,
                    PaymentMode    = model.PaymentMode
                };
                db.MembershipFee.Add(memberFee);
                var log = new RemitaPaymentLog
                {
                    OrderId     = model.orderId,
                    PaymentName = model.FeeCategory,
                    PaymentDate = DateTime.Now,
                    Amount      = model.TotalAmount.ToString(),
                    PayerName   = model.MemberName
                };
                db.RemitaPaymentLog.Add(log);
                await db.SaveChangesAsync();

                model.hash = _query.HashRemitaRequest(model.merchantId, model.serviceTypeId, model.orderId, model.amt, model.responseurl, RemitaConfigParam.APIKEY);
                return(RedirectToAction("SubmitRemita", model));
            }
            return(View(model));
        }
 public ActionResult SubmitRemita(ConfirmPaymentVM model)
 {
     return(View(model));
 }
        //GET
        public async Task <ActionResult> Create(MembershipFeeVM model)
        {
            if (model.FeeCategory.Equals(PaymentType.MembershipRegistration.ToString()) && _IsPayedMembershipRegistration.Equals(true))
            {
                return(RedirectToAction("Index"));
            }
            if (model.FeeCategory.Equals(PaymentType.MonthlyDues.ToString()) && _IsPayedMonthlyDues.Equals(true))
            {
                return(RedirectToAction("Index"));
            }
            var memberId     = User.Identity.GetUserId();
            var hasPayedList = await db.MembershipFee.AsNoTracking().Where(x => x.ActiveMemberId == memberId &&
                                                                           x.FeeCategory == model.FeeCategory)
                               .ToListAsync();


            var member = await db.ActiveMember.AsNoTracking()
                         .Where(x => x.ActiveMemberId == memberId).FirstOrDefaultAsync();

            var paymentList = await db.MemberFeeType.AsNoTracking()
                              .Where(x => x.FeeCategory == model.FeeCategory)
                              .ToListAsync();

            var fullName = $"{member.Fullname}";
            var paylist  = new List <Paylist>();

            foreach (var fee in paymentList)
            {
                var myFee = new Paylist
                {
                    PayTypeName = fee.FeeName,
                    Amount      = fee.Amount,
                    Description = fee.Description
                };
                paylist.Add(myFee);
            }
            System.Threading.Thread.Sleep(1);
            long milliseconds = DateTime.Now.Ticks;
            var  url          = Url.Action("ConfrimPayment", "MembershipFee", new { }, protocol: Request.Url.Scheme);

            if (hasPayedList != null)
            {
                foreach (var hasPayed in hasPayedList)
                {
                    if (hasPayed.Status.Equals(false))
                    {
                        string serviceTypeId = string.Empty;
                        if (hasPayed.FeeCategory.Equals(PaymentType.MembershipRegistration.ToString()))
                        {
                            serviceTypeId = RemitaConfigParam.MEMBERSHIPREGISTRATION;
                        }
                        else if (hasPayed.FeeCategory.Equals(PaymentType.MonthlyDues.ToString()))
                        {
                            serviceTypeId = RemitaConfigParam.MONTHLYDUES;
                        }
                        //var amount = paymentList.Sum(s => s.Amount).ToString();

                        var    hashed   = _query.HashRemitedValidate(hasPayed.OrderId, RemitaConfigParam.APIKEY, RemitaConfigParam.MERCHANTID);
                        string checkurl = RemitaConfigParam.CHECKSTATUSURL + "/" + RemitaConfigParam.MERCHANTID + "/" + hasPayed.OrderId + "/" + hashed + "/" + "orderstatus.reg";
                        string jsondata = new WebClient().DownloadString(checkurl);
                        var    result   = JsonConvert.DeserializeObject <RemitaResponse>(jsondata);
                        if (string.IsNullOrEmpty(result.Rrr))
                        {
                            var entry = db.Entry(hasPayed);
                            if (entry.State == EntityState.Detached)
                            {
                                db.MembershipFee.Attach(hasPayed);
                            }
                            db.MembershipFee.Remove(hasPayed);
                            await db.SaveChangesAsync();
                        }
                        else
                        {
                            return(RedirectToAction("ConfrimPayment", new { orderID = hasPayed.OrderId }));
                        }
                    }
                }
            }

            var confirmPaymentVm = new ConfirmPaymentVM();

            confirmPaymentVm.Paylist        = paylist;
            confirmPaymentVm.MemberName     = fullName;
            confirmPaymentVm.ActiveMemberId = memberId;
            confirmPaymentVm.FeeCategory    = model.FeeCategory;
            confirmPaymentVm.TotalAmount    = paymentList.Sum(s => s.Amount);

            confirmPaymentVm.payerName  = fullName;
            confirmPaymentVm.payerPhone = member.PhoneNumber;
            if (model.FeeCategory.Equals(PaymentType.MembershipRegistration.ToString()))
            {
                confirmPaymentVm.amt         = paymentList.Sum(s => s.Amount).ToString();
                confirmPaymentVm.TotalAmount = paymentList.Sum(s => s.Amount);
            }
            if (model.FeeCategory.Equals(PaymentType.MonthlyDues.ToString()))
            {
                confirmPaymentVm.amt         = paymentList.Sum(s => s.Amount).ToString();
                confirmPaymentVm.TotalAmount = paymentList.Sum(s => s.Amount);
            }
            confirmPaymentVm.merchantId    = RemitaConfigParam.MERCHANTID;
            confirmPaymentVm.orderId       = $"NACCPlateau{milliseconds}";
            confirmPaymentVm.responseurl   = url;
            confirmPaymentVm.serviceTypeId = RemitaConfigParam.MEMBERSHIPREGISTRATION;
            confirmPaymentVm.paymentType   = model.MemberFeeType;

            return(View(confirmPaymentVm));
        }