private void DoRequote()
        {
            var planGroup = from p in mCustomer.MyPets
                            where p.Enrolled == true
                            group p by p.QuoteId into g
                            select g;
            PetfirstBL pfBL = new PetfirstBL();
            bool error = false;
            foreach (var pg in planGroup)
            {

                List<Pet> lstPets = (from p in mCustomer.MyPets
                                     where p.QuoteId == pg.Key
                                     select p).ToList();

                if (!pfBL.GetFastQuote(ref mCustomer, ref mthisPet, true))
                {
                    try
                    {
                        pfBL.GetMonthlyQuote(ref mCustomer, lstPets);

                        if (mCustomer.WebserviceErrorMsg.Equals(""))
                        {
                            //save to database
                            try
                            {
                                using (PetfirstData pfData = new PetfirstData())
                                {
                                    pfData.SaveCustomer(mCustomer);
                                    pfData.SaveEnrolledPlan(lstPets, mCustomer.PayFrequency);
                                }
                            }
                            catch (Exception ex)
                            {
                                displayError("Requote ", ex.ToString(), true);
                                error = true;
                            }
                            //get AnuallyQuote
                            try
                            {
                                pfBL.GetAnnualQuote(ref mCustomer, lstPets);
                            }
                            catch (Exception ex)
                            {
                                displayError("Requote ", ex.ToString(), true);
                                error = true;
                            }
                        }
                        else
                        {
                            displayError("Requote ", mCustomer.WebserviceErrorMsg, true);
                            error = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        displayError("Requote ", ex.ToString(), true);
                        error = true;
                    }
                }
                if (error)
                    break;
            }
        }
        private void DoRequote()
        {
            lblCheckoutError.Text = "";
            var planGroup = from p in mCustomer.MyPets
                            where p.Enrolled == true
                            group p by p.QuoteId into g
                            select g;
            PetfirstBL pfBL = new PetfirstBL();
            bool error = false;
            foreach (var pg in planGroup)
            {

                List<Pet> lstPets = (from p in mCustomer.MyPets
                                     where p.QuoteId == pg.Key
                                     select p).ToList();
                try
                {
                    pfBL.GetMonthlyQuote(ref mCustomer, lstPets);
                    if (!string.IsNullOrEmpty(mCustomer.WebserviceErrorMsg))
                    {
                        if (!mCustomer.WebserviceErrorMsg.ToLower().Contains("exception"))// not exception, display message directly
                            lblCheckoutError.Text += string.Format("Sorry, error occurred during requoting montly for {0}, error message:{1} <br />", GetPetName(lstPets), mCustomer.WebserviceErrorMsg);
                        else
                            displayCheckOutError(mCustomer.WebserviceErrorMsg, "re-quoting montly", lstPets);
                        error = true;
                    }
                    else
                    {
                        //save to database
                        try
                        {
                            using (PetfirstData pfData = new PetfirstData())
                            {
                                pfData.SaveCustomer(mCustomer);
                                pfData.SaveEnrolledPlan(lstPets, mCustomer.PayFrequency);
                            }
                        }
                        catch (Exception ex){
                            LoggingError("Checkout Requoting", ex.ToString());
                        }
                        //get AnuallyQuote
                        try {
                            pfBL.GetAnnualQuote(ref mCustomer, lstPets);
                            if (!string.IsNullOrEmpty(mCustomer.WebserviceErrorMsg))
                            {
                                if (!mCustomer.WebserviceErrorMsg.ToLower().Contains("exception"))// not exception, display message directly
                                    lblCheckoutError.Text += string.Format("Sorry, error occurred during requoting annualy for {0}, error message:{1} <br />", GetPetName(lstPets), mCustomer.WebserviceErrorMsg);
                                else
                                    displayCheckOutError(mCustomer.WebserviceErrorMsg, "re-quoting annualy", lstPets);
                                error = true;
                            }
                        }
                        catch (Exception ex)
                        {
                            displayCheckOutError(ex.ToString(), "re-quoting annualy", lstPets);
                            error = true;
                        }
                    }
                }
                catch (Exception ex)
                {
                    displayCheckOutError(ex.ToString(), "re-quoting montly", lstPets);
                    error = true;
                }
                if (error)
                    break;
            }
            if (!error)
            {
                BindPlanRepeater();
                CalculateTotals();
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            //quote price, put quoteid back to pets
            if (Page.IsValid)
            {
                if (mCustomer != null)
                {
                    //validation:
                    string pet1 = ddlPet1.SelectedValue;
                    string pet2 = string.Empty;
                    string pet3 = string.Empty;
                    bool bSamePet = false;
                    if (dvPet2.Visible && dvPet3.Visible)
                    {
                        pet2 = ddlPet2.SelectedValue;
                        pet3 = ddlPet3.SelectedValue;
                        if (pet1.Equals(pet2) || pet1.Equals(pet3) || pet2.Equals(pet3))
                            bSamePet = true;
                    }
                    else if (dvPet2.Visible)
                    {
                        pet2 = ddlPet2.SelectedValue;
                        if (pet1.Equals(pet2))
                            bSamePet = true;
                    }//dvpet3 cannot be visible if dvpet2 is not
                    if (bSamePet)
                    {
                        System.Text.StringBuilder sb = new System.Text.StringBuilder();
                        sb.Append(@"<script type='text/javascript'>");
                        sb.Append("$('#same_pet').modal('show');");
                        sb.Append(@"</script>");
                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "ShowSamePetModal", sb.ToString(), false);
                        return;
                    }
                    List<Pet> lstPets = (List<Pet>)Session["EditPlanPet"];
                    //need to reset the pets that are being edited.
                    if (lstPets != null)
                    {
                        foreach (Pet p in lstPets)
                        {
                            p.QuoteId = 0;
                            p.RecurringMonthPaymentTotal = 0;
                            p.RecurringMonthTax = 0;
                            p.PlanId = 0;
                            p.PlanName = string.Empty;
                            p.PlanType = "0";
                            p.FirstMonthPaymentTotal = 0;
                            p.FirstMonthTax = 0;
                            p.FirstMonthPremiumOnly = 0;
                            p.RecurringMonthPremiumOnly = 0;
                            p.AnnualPaymentTotal = 0;
                            //p.LeadId = "";//what commercial site doing currently- recreate lead when plan is removed//this is not correct, if the customer bought the policy, the old leadid not getting updated, they still get the spam email
                            ////kp: 2015-05-04 retrieve quote: logged exception bug fix--if multi-pets in a family plan, when they edit it and switch one pet to individual plan
                            ////and then later to edit the plan for remaining pets this will cause exception during bindingeditcontorl.
                            p.Enrolled = false;//if multi-pets in a family plan, when they edit to individual plan, need to force reselection of the remaining pet
                            p.QPlanId = 0;//if multi-pets in a family plan, when they edit to individual plan, they need to have its own qplanid
                            ////end 2015-05-04
                        }
                        Session.Remove("EditPlanPet");
                    }
                    mCustomer.WebserviceErrorMsg = "";
                    List<Pet> lstEnrollPets = new List<Pet>();
                    Pet p1 = (Pet)(from p in mCustomer.MyPets
                                   where p.PetName.Equals(ddlPet1.SelectedValue)
                                   select p).FirstOrDefault();
                    if (p1 != null)
                    {
                        SavePetAttributes(ref p1);
                        int planId = 0;
                        Int16 typeid = (short)(mCustomer.LifeTimeActive ? 2 : 1);
                        try
                        {
                            using (PetfirstData pfData = new PetfirstData())
                            {
                                //planId = pfData.GetPlanId(p1.LimitAmount, Int16.Parse(rblPlanType.SelectedValue));
                                planId = pfData.GetPlanId(p1.LimitAmount, typeid);
                                mCustomer.Underwriter = pfData.GetUnderwriterID(mCustomer.EnrollmentCode);
                                p1.PlanId = planId;
                                p1.QuoteId = 0;//reset
                                //p1.LeadId = "";
                                lstEnrollPets.Add(p1);

                                if (ddlPet2.Visible)
                                {
                                    Pet p2 = (Pet)(from p in mCustomer.MyPets
                                                   where p.PetName.Equals(ddlPet2.SelectedValue)
                                                   select p).FirstOrDefault();
                                    if (p2 != null)
                                    {
                                        SavePetAttributes(ref p2);
                                        p2.PlanId = planId;
                                        p2.QuoteId = 0;
                                        //p2.LeadId = "";
                                        lstEnrollPets.Add(p2);
                                    }
                                }
                                if (ddlPet3.Visible)
                                {
                                    if (ddlPet3.SelectedValue.Equals("0"))
                                    {
                                        Pet p3 = (Pet)(from p in mCustomer.MyPets
                                                       where p.PetName.Equals(ddlPet3.SelectedValue)
                                                       select p).FirstOrDefault();
                                        if (p3 != null)
                                        {
                                            SavePetAttributes(ref p3);
                                            p3.PlanId = planId;
                                            p3.QuoteId = 0;
                                            //p3.LeadId = "";
                                            lstEnrollPets.Add(p3);
                                        }
                                    }
                                }
                                int count = lstEnrollPets.Count;
                                foreach (Pet p in lstEnrollPets)
                                {
                                    p.IsFamilyPlan = count > 1;
                                }
                                PetfirstBL pfBl = new PetfirstBL();
                                try
                                {
                                    pfBl.GetMonthlyQuote(ref mCustomer, lstEnrollPets);
                                    if (mCustomer.WebserviceErrorMsg.Equals(""))
                                    {
                                        pfBl.GetAnnualQuote(ref mCustomer, lstEnrollPets);
                                        BindPetsRepeater();
                                        DetermineReviewQuoteStatus();
                                        ////kp: 2015-05-21 delete standard plan site wide
                                        //ToggleButtonActive(false);//default to lifetime
                                        PopulatePlanPanel();
                                        ////end 2015-05-21
                                        //need to rebind the right panel
                                        DetermineFamilyOrIndividualPlan();
                                        //ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "ScrollToPlanSum", "window.location = '#plansum';", false);//does not work
                                        //lead
                                        try
                                        {
                                            pfBl.StoreLeadCapture(ref mCustomer, lstEnrollPets);
                                        }
                                        catch { }
                                        try
                                        {
                                            pfData.SaveEnrolledPlan(lstEnrollPets, mCustomer.PayFrequency);
                                            pfData.LinkPlanForPet(lstEnrollPets);
                                        }
                                        catch (Exception ex)
                                        {
                                            displayError("Saving Enrolled Plan ", ex.ToString(), null);
                                        }

                                    }
                                    else
                                    {
                                        displayError("getting quote ", mCustomer.WebserviceErrorMsg, lblError);

                                    }
                                }
                                catch (Exception ex)
                                {
                                    displayError("getting quote ", ex.ToString(), lblError);
                                }
                            }
                        }
                        catch (Exception ex1)
                        {
                            displayError("getting quote ", ex1.ToString(), lblError);
                        }
                    }
                    else
                    {
                        lblError.Text = "No pets is selected.";
                    }
                }
            }
        }
        protected void btnCheckout_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                //add validation for expiration date
                bool IsExpirationValid = false;
                DateTime today = DateTime.Today;
                DateTime dtExpire = DateTime.Parse(ddlMonth.SelectedValue + "/" + ddlYear.SelectedValue);
                if (dtExpire.Year > today.Year)
                    IsExpirationValid = true;
                else if (dtExpire.Year == today.Year && dtExpire.Month >= today.Month)
                    IsExpirationValid = true;
                if (!IsExpirationValid)
                {
                    lblCheckoutError.Text = "Card has expired";
                    return;
                }
                if (mCustomer != null)
                {
                    SaveInput();
                    if (mCustomer.HasStateChanged)
                    {
                        DoRequote();
                        List<Pet> myPet = new List<Pet>();
                        foreach (Pet p in mCustomer.MyPets)
                        {
                            myPet.Add(p);
                        }
                        FakeMultiPet(ref myPet);
                        CreatePetsTable(myPet);
                        CalculateTotals();

                    }
                    else if (mCustomer.HasKYAddressChanged)//kentucky, need requote
                    {
                        DoRequote();
                        List<Pet> myPet = new List<Pet>();
                        foreach (Pet p in mCustomer.MyPets)
                        {
                            myPet.Add(p);
                        }
                        FakeMultiPet(ref myPet);
                        CreatePetsTable(myPet);
                        CalculateTotals();
                    }
                    else//create policy
                    {
                        lblCheckoutError.Text = "";
                        bool error = false;
                        var planGroup = from p in mCustomer.MyPets
                                        where p.Enrolled == true
                                        group p by p.QuoteId into g
                                        select g;
                        PetfirstBL pfBL = new PetfirstBL();
                        int count = planGroup.Count();
                        foreach (var pg in planGroup)
                        {
                            List<Pet> lstPets2 = (from p in mCustomer.MyPets
                                                 where p.QuoteId == pg.Key
                                                 select p).ToList();
                            if (string.IsNullOrEmpty(lstPets2[0].PolicyNumber))//no policy is created for the batch yet
                            {
                                try
                                {
                                    foreach (Pet p in lstPets2)
                                    {
                                        List<Pet> lstPets = new List<Pet>();
                                        lstPets.Add(p);
                                        pfBL.CreatePolicy(ref mCustomer, lstPets);
                                        if (!string.IsNullOrEmpty(mCustomer.WebserviceErrorMsg))
                                        {
                                            if (!mCustomer.WebserviceErrorMsg.ToLower().Contains("exception"))// not exception, display message directly
                                                lblCheckoutError.Text += string.Format("Sorry, error occurred during creating policy for {0}, error message:{1} <br />", GetPetName(lstPets), mCustomer.WebserviceErrorMsg);
                                            else
                                                displayCheckOutError(mCustomer.WebserviceErrorMsg, "creating policy", lstPets);
                                            error = true;
                                        }
                                        else//policy is created for the batch
                                        {
                                            try
                                            {
                                                pfBL.StoreLeadCapture(ref mCustomer, lstPets);//update lead capture with policy number
                                            }
                                            catch { }
                                            //save to database
                                            try
                                            {
                                                using (PetfirstData pfData = new PetfirstData())
                                                {
                                                    pfData.SaveEnrolledPlan(lstPets, mCustomer.PayFrequency);
                                                }

                                            }
                                            catch (Exception ex)
                                            {
                                                LoggingError("Update QPlan after policy created", ex.ToString());
                                            }

                                            lblCheckoutError.Text += string.Format("Policy:#{0} has created for {1} <br />", lstPets[0].PolicyNumber, lstPets[0].PetName);
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    displayCheckOutError(ex.ToString(), "creating policy", lstPets2);
                                    error = true;
                                }
                            }
                            if (error)
                                break;

                        }
                        if (!error)
                        {
                            var policyGroup = (from p in mCustomer.MyPets
                                               where !string.IsNullOrEmpty(p.PolicyNumber)
                                               select p.PolicyNumber).Distinct();
                            if (policyGroup.Count() == count) //all policy is created
                            {
                                Response.Redirect("Confirmation.aspx", false);
                                Context.ApplicationInstance.CompleteRequest();
                            }
                        }
                    }
                }
            }
        }