public async Task <ActionResult> MakePayment(MembershipFeeVM model)
        {
            var userId = User.Identity.GetUserId();


            var hasPayed = await db.MembershipFee.AsNoTracking().Where(x => x.ActiveMemberId.Equals(userId))
                           .FirstOrDefaultAsync();

            if (hasPayed != null)
            {
                return(RedirectToAction("RetryMembershipRegistration", new { orderId = hasPayed.OrderId }));
            }

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

            var paylist     = new List <Paylist>();
            var paymentList = await db.MembershipFee.AsNoTracking().ToListAsync();

            foreach (var pay in paylist)
            {
                var myPay = new Paylist
                {
                    PayTypeName = pay.PayTypeName,
                    Amount      = pay.Amount,
                    Description = pay.Description
                };
                paylist.Add(myPay);
            }

            var confirmPayment = new SelectPaymentVm
            {
                ActiveMemberId = User.Identity.GetUserId(),
                FeeCategory    = model.FeeCategory,
                TotalAmount    = paymentList.Sum(s => s.PaidFee),
            };

            var paytype = from PaymentType p in Enum.GetValues(typeof(PaymentType))
                          select new { ID = p, Name = p.ToString() };

            ViewBag.PayType        = new SelectList(paytype, "Name", "Name");
            ViewBag.ActiveMemberId = new SelectList(db.ActiveMember, "ActiveMemberId", "FullName");
            return(RedirectToAction("Create", confirmPayment));
        }
        public EA_POM Edit_Enrolment()
        {
            Web_Driver.ngWebDriver.WaitForAngular();
            //Getting Records
            Edit_Record_Previous = Edit_Record.Text;
            Console.WriteLine(Edit_Record_Previous + "Previous Record");
            Edit_Id = Search_Record_Colums.Text;
            Console.WriteLine(Edit_Id + "Id");
            Edit_En_btn.Click();
            Web_Driver.ngWebDriver.WaitForAngular();
            //  Plan_Edit_Btn.Click();
            //Getting Text of previous Fields
            Plan_Edit_strng = Plan_Edit_Text.Text;
            Console.WriteLine(Plan_Edit_strng);
            //Getting First Name
            Name_strng = Name.GetAttribute("value");
            Console.WriteLine(Name_strng);
            Name.Clear();
            Name.SendKeys("Ali");
            //Getting New Values
            Name_strng1 = Name.GetAttribute("value");
            Console.WriteLine(Name_strng1);
            //Getting Last Name
            LName_strng = LName.GetAttribute("value");
            Console.WriteLine(LName_strng);
            LName.Clear();
            LName.SendKeys("Asad");
            //Getting new Values
            LName_strng1 = LName.GetAttribute("value");
            Console.WriteLine(LName_strng1);
            //Getting MidName
            MName_strng = MName.GetAttribute("value");
            Console.WriteLine(MName_strng);
            MName.Clear();
            MName.SendKeys("Asa");
            //Getting new Values
            MName_strng1 = MName.GetAttribute("value");
            Console.WriteLine(MName_strng1);
            //Getting Date of Birth
            Dob_strng = Dob.GetAttribute("value");
            Console.WriteLine(Dob_strng);
            Dob.Clear();
            Dob.SendKeys("10/11/2022");
            //Getting new Values
            Dob_strng1 = Dob.GetAttribute("value");
            Console.WriteLine(Dob_strng1);
            //Radio btn
            male_radio = Radio_M_F.ElementAt(0).GetAttribute("value");
            Console.WriteLine(male_radio);
            Radio_M_F.ElementAt(1).Click();
            Fee_Male_radio = Radio_M_F.ElementAt(1).GetAttribute("value");
            Console.WriteLine(Fee_Male_radio);
            //Phone number
            Hphone_strng = Hphone.GetAttribute("value");
            Console.WriteLine(Hphone_strng);
            Hphone.Clear();
            Hphone.SendKeys("9878564598");
            Hpnone1_strng = Hphone.GetAttribute("value");
            Console.WriteLine(Hpnone1_strng);
            //Permanent address
            P_Address_strng = P_Address.GetAttribute("value");
            Console.WriteLine(P_Address_strng);
            //New Values
            P_Address.Clear();
            P_Address.SendKeys("878# Street no5");
            P_Address_strng1 = P_Address.GetAttribute("value");
            Console.WriteLine(P_Address_strng1);
            //Permanent City
            P_City_Strng = P_City.GetAttribute("value");
            Console.WriteLine(P_City_Strng);
            //New Values
            P_City.Clear();
            P_City.SendKeys("Karachi");
            P_City_Strng1 = P_City.GetAttribute("value");
            Console.WriteLine(P_City_Strng1);
            //Permanent County
            P_County_Strng = P_County.GetAttribute("value");
            Console.WriteLine(P_County_Strng);
            //New Values
            P_County.Clear();
            P_County.SendKeys("County");
            P_County_Strng1 = P_County.GetAttribute("value");
            Console.WriteLine(P_County_Strng1);
            //Permanent State
            P_State_Strng = P_State.GetAttribute("value");
            Console.WriteLine(P_State_Strng);
            //New Values
            P_State.Clear();
            P_State.SendKeys("USA");
            P_State_Strng1 = P_State.GetAttribute("value");
            Console.WriteLine(P_State_Strng1);
            //ZipCode
            P_Zip_Strng = P_Zip.GetAttribute("value");
            Console.WriteLine(P_Zip_Strng);
            //New Values
            P_Zip.Clear();
            P_Zip.SendKeys("453454");
            P_Zip_Strng1 = P_Zip.GetAttribute("value");
            Console.WriteLine(P_Zip_Strng1);
            //MD_Number
            Md_No_strng = MD_Number.GetAttribute("value");
            Console.WriteLine(Md_No_strng);
            //New Values
            MD_Number.Clear();
            MD_Number.SendKeys("MD_9001");
            Md_No_strng1 = P_Zip.GetAttribute("value");
            Console.WriteLine(Md_No_strng1);
            //Email Address
            Email_Strng = Email_Adress.GetAttribute("value");
            Console.WriteLine(Email_Strng);
            //New Values
            Email_Adress.Clear();
            Email_Adress.SendKeys("*****@*****.**");
            Email_Strng = Email_Adress.GetAttribute("value");
            Console.WriteLine(Email_Strng1);
            //Pay List testing unchecked CheckBox


            Paylist_bool1 = Paylist.ElementAt(0).Selected;
            Paylist_bool2 = Paylist.ElementAt(1).Selected;
            Paylist_bool3 = Paylist.ElementAt(2).Selected;
            if (Paylist_bool1 == true || Paylist_bool2 == true || Paylist_bool3 == true)
            {
                if (Paylist_bool1 == true)
                {
                    Paylist.ElementAt(0).Click();
                }
                if (Paylist_bool2 == true)
                {
                    Paylist.ElementAt(1).Click();
                }
                if (Paylist_bool3 == true)
                {
                    Paylist.ElementAt(2).Click();
                }
                Asserts.Pay_list1(true);
            }

            if (Paylist_bool1 == false && Paylist_bool2 == false & Paylist_bool3 == false)
            {
                Asserts.Pay_list1(true);
            }
            //cliking on single paylist
            Paylist.ElementAt(0).Click();
            Paylist_bool1 = Paylist.ElementAt(0).Selected;
            Paylist_bool2 = Paylist.ElementAt(1).Selected;
            Paylist_bool3 = Paylist.ElementAt(2).Selected;
            if (Paylist_bool1 == true && Paylist_bool2 == false & Paylist_bool3 == false)
            {
                Asserts.Pay_list(Paylist_bool1);
            }
            else
            {
                Asserts.Pay_list(false);
            }
            //Asertion for Records inrequired fields are changed or not
            if (Name_strng != Name_strng1 && LName_strng != LName_strng1 && MName_strng != MName_strng1 && Dob_strng != Dob_strng1 && P_Address_strng != P_Address_strng1 && P_City_Strng != P_City_Strng1 && P_State_Strng != P_State_Strng1 && male_radio != Fee_Male_radio && Md_No_strng != Md_No_strng1 && Email_Strng != Email_Strng1)
            {
                Asserts.En_Search_Create_pages_Fields_Edit(true);
            }
            else
            {
                Asserts.En_Search_Create_pages_Fields_Edit(false);
            }
            //Save Draft
            Console.WriteLine("Colorsss");

            Save_Draft_Btn_Color = SaveDraft.ElementAt(0).GetCssValue("background-color");
            Console.WriteLine(Save_Draft_Btn_Color + "Color");
            Enroment_create_page_Url = Web_Driver.driver.Url;
            Console.WriteLine(Enroment_create_page_Url);
            SaveDraft.ElementAt(0).Click();


            Save_Draft_Btn_Color1 = SaveDraft.ElementAt(0).GetCssValue("background-color");
            Console.WriteLine(Save_Draft_Btn_Color1 + "Color-");
            //Draft Button cliking verifying

            Asserts.Save_Draft(Save_Draft_Btn_Color, Save_Draft_Btn_Color1);
            Web_Driver.ngWebDriver.WaitForAngular();
            Web_Driver.driver.Navigate().Refresh();


            Enroment_Search_page_Url = Web_Driver.driver.Url;

            Console.WriteLine(Enroment_Search_page_Url);
            Asserts.En_Search_Create_pages_Url(Enroment_create_page_Url, Enroment_Search_page_Url);
            //Getting New Record
            Web_Driver.ngWebDriver.WaitForAngular();


            //Search for Updated Enrolment
            Thread.Sleep(3000);
            Hash_Drop.ElementAt(0).Click();
            //Search by Id
            Search_Records.ElementAt(0).Click();
            Thread.Sleep(3000);

            Search_Records.ElementAt(0).SendKeys(Edit_Id);

            Thread.Sleep(3000);

            Search_btn.ElementAt(0).Click();
            Thread.Sleep(3000);
            //Getting text of updated record
            Edit_Record_Updated = Edit_Record.Text;
            Console.WriteLine(Edit_Record_Updated + " Updated Record");
            //Assertion For Edit Record check
            Asserts.Edit_Record_Update(Edit_Record_Previous, Edit_Record_Updated);
            return(new EA_POM());
        }
        //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));
        }