Beispiel #1
0
        public ActionResult ConfirmDuePaid(int?id, string TransactionID, decimal Amount)
        {
            if (!id.HasValue)
            {
                return(View("Unknown"));
            }
            if (!TransactionID.HasValue())
            {
                return(Content("error no transaction"));
            }

            var ti = DbUtil.Db.Transactions.SingleOrDefault(tt => tt.Id == id);

            if (ti == null)
            {
                return(Content("no pending transaction"));
            }
#if DEBUG
            ti.Testing = true;
#endif
            if (OnlineRegModel.GetTransactionGateway() == "serviceu")
            {
                ti = PaymentForm.CreateTransaction(DbUtil.Db, ti, Amount);
            }
            ConfirmDuePaidTransaction(ti, TransactionID, sendmail: true);
            SetHeaders(ti.OrgId ?? 0);
            ViewData["timeout"] = INT_timeout;
            ViewData["Url"]     = ti.Url;
            return(View(ti));
        }
Beispiel #2
0
        public ActionResult ConfirmDuePaid(int?id, string transactionId, decimal amount)
        {
            if (!id.HasValue)
            {
                return(View("Unknown"));
            }
            if (!transactionId.HasValue())
            {
                return(Message("error no transaction"));
            }

            var ti = DbUtil.Db.Transactions.SingleOrDefault(tt => tt.Id == id);

            if (ti == null)
            {
                return(Message("no pending transaction"));
            }
#if DEBUG
            ti.Testing = true;
#endif
            if (OnlineRegModel.GetTransactionGateway() == "serviceu")
            {
                ti = PaymentForm.CreateTransaction(DbUtil.Db, ti, amount);
            }
            ConfirmDuePaidTransaction(ti, transactionId, sendmail: true);
            ViewBag.amtdue = PaymentForm.AmountDueTrans(DbUtil.Db, ti).ToString("C");
            SetHeaders(ti.OrgId ?? 0);
            return(View("PayAmtDue/Confirm", ti));
        }
Beispiel #3
0
        // reached by the paylink in the confirmation email
        // which is produced in EnrollAndConfirm
        public ActionResult PayAmtDue(string q)
        {
            if (!q.HasValue())
            {
                return(Content("unknown"));
            }
            var id = Util.Decrypt(q).ToInt2();
            var qq = from t in DbUtil.Db.Transactions
                     where t.OriginalId == id || t.Id == id
                     orderby t.Id descending
                     select t;
            var ti = qq.FirstOrDefault();

            if (ti == null || ti.Amtdue == 0)
            {
                return(Content("no outstanding transaction"));
            }

#if DEBUG
            ti.Testing = true;
            if (!ti.Address.HasValue())
            {
                ti.Address = "235 Riveredge";
                ti.City    = "Cordova";
                ti.Zip     = "38018";
                ti.State   = "TN";
            }
#endif
            var pf = PaymentForm.CreatePaymentFormForBalanceDue(ti);
            SetHeaders(pf.OrgId ?? 0);

            ViewBag.Url     = pf.Url;
            ViewBag.timeout = INT_timeout;
            if (OnlineRegModel.GetTransactionGateway() != "serviceu")
            {
                return(View("ProcessPayment", pf));
            }
            ViewBag.TranId = ti.Id;
            return(View(pf));
        }
Beispiel #4
0
        public ActionResult CompleteRegistration()
        {
            Response.NoCache();
            var s = (string)TempData["onlineregmodel"];

            if (s == null)
            {
                return(Message("Registration cannot be completed after a page refresh."));
            }
            var m = Util.DeSerialize <OnlineRegModel>(s);

            m.HistoryAdd("CompleteRegistration");

            if (m.org != null && m.org.RegistrationTypeId == RegistrationTypeCode.SpecialJavascript)
            {
                var p = m.List[0];
                if (p.IsNew)
                {
                    p.AddPerson(null, p.org.EntryPointId ?? 0);
                }
                SpecialRegModel.SaveResults(m.Orgid ?? 0, m.List[0].PeopleId ?? 0, m.List[0].SpecialTest);
                return(View("SpecialRegistrationResults"));
            }

            if (m.AskDonation() && !m.donor.HasValue && m.donation > 0)
            {
                SetHeaders(m);
                ModelState.AddModelError("donation",
                                         "Please indicate a donor or clear the donation amount");
                return(View("AskDonation", m));
            }

            if (m.List.Count == 0)
            {
                return(Message("Can't find any registrants"));
            }

            RemoveLastRegistrantIfEmpty(m);

            m.UpdateDatum();
            DbUtil.LogActivity("Online Registration: {0} ({1})".Fmt(m.Header, m.DatumId));

            if (m.PayAmount() == 0 && (m.donation ?? 0) == 0 && !m.Terms.HasValue())
            {
                return(RedirectToAction("Confirm",
                                        new
                {
                    id = m.DatumId,
                    TransactionID = "zero due",
                }));
            }

            var terms = Util.PickFirst(m.Terms, "");

            if (terms.HasValue())
            {
                ViewData["Terms"] = terms;
            }

            SetHeaders(m);
            if (m.PayAmount() == 0 && m.Terms.HasValue())
            {
                return(View("Terms", new PaymentModel
                {
                    Terms = m.Terms,
                    _URL = m.URL,
                    PostbackURL = DbUtil.Db.ServerLink("/OnlineReg/Confirm/" + m.DatumId),
                    _timeout = m.TimeOut
                }));
            }

            var om =
                DbUtil.Db.OrganizationMembers.SingleOrDefault(
                    mm => mm.OrganizationId == m.Orgid && mm.PeopleId == m.List[0].PeopleId);

            m.ParseSettings();

            if (om != null && m.settings[om.OrganizationId].AllowReRegister == false && !m.SupportMissionTrip)
            {
                return(Message("You are already registered it appears"));
            }

            var pf = PaymentForm.CreatePaymentForm(m);

            if (OnlineRegModel.GetTransactionGateway() == "serviceu")
            {
                return(View("Payment/ServiceU", pf));
            }
            ModelState.Clear();
            return(View("Payment/Process", pf));
        }
Beispiel #5
0
        public ActionResult CompleteRegistration(OnlineRegModel m)
        {
            if (m.AskDonation() && !m.donor.HasValue && m.donation > 0)
            {
                SetHeaders(m);
                ModelState.AddModelError("donation",
                                         "Please indicate a donor or clear the donation amount");
                return(View("AskDonation", m));
            }

            if (m.List.Count == 0)
            {
                return(Content("Can't find any registrants"));
            }

            RemmoveLastRegistrantIfEmpty(m);

            var d = new ExtraDatum {
                Stamp = Util.Now
            };

            d.Data = Util.Serialize <OnlineRegModel>(m);
            DbUtil.Db.ExtraDatas.InsertOnSubmit(d);
            DbUtil.Db.SubmitChanges();
            DbUtil.LogActivity("Online Registration: {0} ({1})".Fmt(m.Header, d.Id));

            if (m.PayAmount() == 0 && (m.donation ?? 0) == 0 && !m.Terms.HasValue())
            {
                return(RedirectToAction("Confirm",
                                        new
                {
                    id = d.Id,
                    TransactionID = "zero due",
                }));
            }

            var terms = Util.PickFirst(m.Terms, "");

            if (terms.HasValue())
            {
                ViewData["Terms"] = terms;
            }

            SetHeaders(m);
            if (m.PayAmount() == 0 && m.Terms.HasValue())
            {
                return(View("Terms", new PaymentModel
                {
                    Terms = m.Terms,
                    _URL = m.URL,
                    _timeout = INT_timeout,
                    PostbackURL = Util.ServerLink("/OnlineReg/Confirm/" + d.Id),
                }));
            }

            ViewBag.timeout = INT_timeout;
            ViewBag.Url     = m.URL;

            var om =
                DbUtil.Db.OrganizationMembers.SingleOrDefault(
                    mm => mm.OrganizationId == m.orgid && mm.PeopleId == m.List[0].PeopleId);

            m.ParseSettings();

            if (om != null && m.settings[m.orgid.Value].AllowReRegister == false)
            {
                return(Content("You are already registered it appears"));
            }

            var pf = PaymentForm.CreatePaymentForm(m);

            pf.DatumId = d.Id;
            pf.FormId  = Guid.NewGuid();
            if (OnlineRegModel.GetTransactionGateway() == "serviceu")
            {
                return(View("Payment", pf));
            }
            return(View("ProcessPayment", pf));
        }
Beispiel #6
0
        private int CreateFakeTransaction(OnlineRegModel m, decimal?amount = null)
        {
            PaymentForm pf = PaymentForm.CreatePaymentForm(m);

            if (!amount.HasValue)
            {
                amount = pf.AmtToPay;
            }

            decimal?amtdue = null;

            if (pf.Amtdue > 0)
            {
                amtdue = pf.Amtdue - (amount ?? 0);
            }

            var ti = new Transaction
            {
                First              = "Oscar",
                MiddleInitial      = "D",
                Last               = "Baez",
                Suffix             = "db",
                Donate             = pf.Donate,
                Regfees            = pf.AmtToPay,
                Amt                = amount,
                Amtdue             = amtdue,
                Emails             = "*****@*****.**",
                Testing            = true,
                Description        = pf.Description,
                OrgId              = pf.OrgId,
                Url                = pf.URL,
                TransactionGateway = OnlineRegModel.GetTransactionGateway(CurrentDatabase, pf.ProcessType)?.GatewayAccountName,
                Address            = "Street1",
                Address2           = "123",
                City               = "My City",
                State              = "My State",
                Country            = "My Country",
                Zip                = "03600",
                DatumId            = pf.DatumId,
                Phone              = "5547946830",
                OriginalId         = pf.OriginalId,
                Financeonly        = pf.FinanceOnly,
                TransactionDate    = Util.Now,
                PaymentType        = "C",
                LastFourCC         = "1234",
                LastFourACH        = "",
                Approved           = true
            };

            CurrentDatabase.Transactions.InsertOnSubmit(ti);
            CurrentDatabase.SubmitChanges();

            if (pf.OriginalId == null) // first transaction
            {
                ti.OriginalId = ti.Id;
            }
            ti.TransactionId = $"(fakePushpay){ti.Id}";

            CurrentDatabase.SubmitChanges();

            return(ti.Id);
        }
Beispiel #7
0
        public ActionResult PayAmtDue(string q)
        {
            Response.NoCache();

            if (!q.HasValue())
            {
                return(Message("unknown"));
            }
            var id = Util.Decrypt(q).ToInt2();
            var qq = from t in DbUtil.Db.Transactions
                     where t.OriginalId == id || t.Id == id
                     orderby t.Id descending
                     select new { t, email = t.TransactionPeople.FirstOrDefault().Person.EmailAddress };
            var i = qq.FirstOrDefault();

            if (i == null)
            {
                return(Message("no outstanding transaction"));
            }

            var ti     = i.t;
            var email  = i.email;
            var amtdue = PaymentForm.AmountDueTrans(DbUtil.Db, ti);

            if (amtdue == 0)
            {
                return(Message("no outstanding transaction"));
            }

#if DEBUG
            ti.Testing = true;
            if (!ti.Address.HasValue())
            {
                ti.Address = "235 Riveredge";
                ti.City    = "Cordova";
                ti.Zip     = "38018";
                ti.State   = "TN";
            }
#endif
            var pf = PaymentForm.CreatePaymentFormForBalanceDue(ti, amtdue, email);

            SetHeaders(pf.OrgId ?? 0);

            if (OnlineRegModel.GetTransactionGateway() != "serviceu")
            {
                return(View("Payment/Process", pf));
            }


            ViewBag.TranId = ti.Id;
            var pm = new PaymentModel
            {
                NameOnAccount = pf.FullName(),
                Address       = pf.Address,
                Amount        = pf.Amtdue,
                City          = pf.City,
                Email         = pf.Email,
                Phone         = pf.Phone.FmtFone(),
                State         = pf.State,
                PostalCode    = pf.Zip,
                testing       = pf.testing,
                PostbackURL   = DbUtil.Db.ServerLink("/OnlineReg/ConfirmServiceU/" + id),
                Misc2         = pf.Description,
                Misc1         = pf.FullName(),
                _URL          = pf.URL,
                _timeout      = new PaymentForm().TimeOut,
            };

            return(View("PayAmtDue/ServiceU", pm));
        }
Beispiel #8
0
        public ActionResult ProcessPayment(PaymentForm pf)
        {
#if DEBUG
#else
            if (Session["FormId"] != null)
            {
                if ((Guid)Session["FormId"] == pf.FormId)
                {
                    return(Content("Already submitted"));
                }
            }
#endif
            OnlineRegModel m  = null;
            var            ed = DbUtil.Db.RegistrationDatas.SingleOrDefault(e => e.Id == pf.DatumId);
            if (ed != null)
            {
                m = Util.DeSerialize <OnlineRegModel>(ed.Data);
            }

#if DEBUG
#else
            if (m != null && m.History.Contains("ProcessPayment") && !pf.PayBalance)
            {
                return(Content("Already submitted"));
            }
#endif

            if (pf.AmtToPay < 0)
            {
                pf.AmtToPay = 0;
            }
            if (pf.Donate < 0)
            {
                pf.Donate = 0;
            }

            pf.AllowCoupon = false;

            SetHeaders(pf.OrgId ?? 0);

            if ((pf.AmtToPay ?? 0) <= 0 && (pf.Donate ?? 0) <= 0)
            {
                DbUtil.Db.SubmitChanges();
                ModelState.AddModelError("form", "amount zero");
                return(View("Payment/Process", pf));
            }

            try
            {
                if (pf.Type == "B")
                {
                    Payments.ValidateBankAccountInfo(ModelState, pf.Routing, pf.Account);
                }
                if (pf.Type == "C")
                {
                    Payments.ValidateCreditCardInfo(ModelState, pf);
                }

                if (!ModelState.IsValid)
                {
                    return(View("Payment/Process", pf));
                }

                if (pf.IsLoggedIn == true && pf.SavePayInfo)
                {
                    var gateway = OnlineRegModel.GetTransactionGateway();
                    if (gateway == "authorizenet")
                    {
                        var au = new AuthorizeNet(DbUtil.Db, m.testing ?? false);
                        if ((pf.Type == "B" && !pf.Routing.StartsWith("X") && !pf.Account.StartsWith("X")) ||
                            (pf.Type == "C" && !pf.CreditCard.StartsWith("X")))
                        {
                            au.AddUpdateCustomerProfile(m.UserPeopleId.Value,
                                                        pf.Type,
                                                        pf.CreditCard,
                                                        DbUtil.NormalizeExpires(pf.Expires).ToString2("MMyy"),
                                                        pf.MaskedCCV != null && pf.MaskedCCV.StartsWith("X") ? pf.CCV : pf.MaskedCCV,
                                                        pf.Routing,
                                                        pf.Account);
                        }
                    }
                    else if (gateway == "sage")
                    {
                        var sg = new CmsData.SagePayments(DbUtil.Db, m.testing ?? false);
                        if ((pf.Type == "B" && !pf.Routing.StartsWith("X") && !pf.Account.StartsWith("X")) ||
                            (pf.Type == "C" && !pf.CreditCard.StartsWith("X")))
                        {
                            sg.storeVault(m.UserPeopleId.Value,
                                          pf.Type,
                                          pf.CreditCard,
                                          DbUtil.NormalizeExpires(pf.Expires).ToString2("MMyy"),
                                          pf.MaskedCCV != null && pf.MaskedCCV.StartsWith("X") ? pf.CCV : pf.MaskedCCV,
                                          pf.Routing,
                                          pf.Account,
                                          pf.IsGiving == true);
                        }
                    }
                    else
                    {
                        throw new Exception("ServiceU not supported");
                    }
                }
                if (pf.UseBootstrap)
                {
                    var r = AddressVerify.LookupAddress(pf.Address, "", "", "", pf.Zip);
                    var z = DbUtil.Db.ZipCodes.SingleOrDefault(zc => zc.Zip == pf.Zip.Zip5());
                    if (z != null && !z.State.HasValue())
                    {
                        pf.State = r.State = z.State;
                        pf.City  = r.City = z.City;
                    }
                    if (r.Line1 != "error" && r.Line1.HasValue())
                    {
                        if (r.found == false)
                        {
                            ModelState.AddModelError("Zip",
                                                     r.address + ", to skip address check, Change the country to USA, Not Validated");
                            return(View("Payment/Process", pf));
                        }
                        if (r.Line1 != pf.Address)
                        {
                            pf.Address = r.Line1;
                        }
                        if (r.City != (pf.City ?? ""))
                        {
                            pf.City = r.City;
                        }
                        if (r.State != (pf.State ?? ""))
                        {
                            pf.State = r.State;
                        }
                        if (r.Zip != (pf.Zip ?? ""))
                        {
                            pf.Zip = r.Zip;
                        }
                    }
                }
                var ti = ProcessPaymentTransaction(m, pf);

                if (ti.Approved == false)
                {
                    ModelState.AddModelError("form", ti.Message);
                    return(View("Payment/Process", pf));
                }
                if (m != null)
                {
                    m.TranId = ti.Id;
                    m.History.Add("ProcessPayment");
                    ed.Data      = Util.Serialize <OnlineRegModel>(m);
                    ed.Completed = true;
                    DbUtil.Db.SubmitChanges();
                }
                Session["FormId"] = pf.FormId;
                if (pf.DatumId > 0)
                {
                    try
                    {
                        var view = ConfirmTransaction(m, ti.TransactionId);
                        switch (view)
                        {
                        case ConfirmEnum.Confirm:
                            return(View("Confirm", m));

                        case ConfirmEnum.ConfirmAccount:
                            return(View("ConfirmAccount"));
                        }
                    }
                    catch (Exception ex)
                    {
                        TempData["error"] = ex.Message;
                        return(Redirect("/Error"));
                    }
                }

                ConfirmDuePaidTransaction(ti, ti.TransactionId, sendmail: true);

                ViewBag.amtdue = PaymentForm.AmountDueTrans(DbUtil.Db, ti).ToString("C");
                return(View("PayAmtDue/Confirm", ti));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("form", ex.Message);
                return(View("Payment/Process", pf));
            }
        }
Beispiel #9
0
        private Transaction ProcessPaymentTransaction(OnlineRegModel m, PaymentForm pf)
        {
            Transaction ti = null;

            if (m != null && m.Transaction != null)
            {
                ti = PaymentForm.CreateTransaction(DbUtil.Db, m.Transaction, pf.AmtToPay);
            }
            else
            {
                ti = pf.CreateTransaction(DbUtil.Db);
            }

            int?pid = null;

            if (m != null)
            {
                m.ParseSettings();
                var terms = Util.PickFirst(m.Terms, "");
                if (terms.HasValue())
                {
                    ViewData["Terms"] = terms;
                }
                pid = m.UserPeopleId;
                if (m.TranId == null)
                {
                    m.TranId = ti.Id;
                }
            }

            if (!pid.HasValue)
            {
                var pds = DbUtil.Db.FindPerson(pf.First, pf.Last, null, pf.Email, pf.Phone);
                if (pds.Count() == 1)
                {
                    pid = pds.Single().PeopleId.Value;
                }
            }
            TransactionResponse tinfo;
            var gateway = OnlineRegModel.GetTransactionGateway();

            if (gateway == "authorizenet")
            {
                if (pf.SavePayInfo)
                {
                    var anet = new AuthorizeNet(DbUtil.Db, pf.testing);
                    tinfo = anet.createCustomerProfileTransactionRequest(
                        pid ?? 0,
                        pf.AmtToPay ?? 0,
                        pf.Description,
                        pf.TranId ?? 0);
                }
                else
                if (pf.Type == "B")
                {
                    tinfo = OnlineRegModel.PostECheck(
                        pf.Routing, pf.Account,
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.First, pf.Last,
                        pf.Address, pf.City, pf.State, pf.Zip,
                        pf.testing);
                }
                else
                {
                    tinfo = OnlineRegModel.PostTransaction(
                        pf.CreditCard, pf.CCV,
                        DbUtil.NormalizeExpires(pf.Expires).ToString2("MMyy"),
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.Email, pf.First, pf.Last,
                        pf.Address, pf.City, pf.State, pf.Zip,
                        pf.testing);
                }
            }
            else if (gateway == "sage")
            {
                if (pf.SavePayInfo)
                {
                    var sage = new SagePayments(DbUtil.Db, pf.testing);
                    tinfo = sage.createVaultTransactionRequest(
                        pid ?? 0,
                        pf.AmtToPay ?? 0,
                        pf.Description,
                        ti.Id,
                        pf.Type);
                }
                else
                if (pf.Type == "B")
                {
                    tinfo = OnlineRegModel.PostVirtualCheckTransactionSage(
                        pf.Routing, pf.Account,
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.Email, pf.First, pf.MiddleInitial, pf.Last, pf.Suffix,
                        pf.Address, pf.City, pf.State, pf.Zip, pf.Phone,
                        pf.testing);
                }
                else
                {
                    tinfo = OnlineRegModel.PostTransactionSage(
                        pf.CreditCard, pf.CCV,
                        DbUtil.NormalizeExpires(pf.Expires).ToString2("MMyy"),
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.Email, pf.First, pf.MiddleInitial, pf.Last, pf.Suffix,
                        pf.Address, pf.City, pf.State, pf.Zip, pf.Phone,
                        pf.testing);
                }
            }

            else
            {
                throw new Exception("unknown gateway " + gateway);
            }

            ti.TransactionId = tinfo.TransactionId;
            if (ti.Testing == true && !ti.TransactionId.Contains("(testing)"))
            {
                ti.TransactionId += "(testing)";
            }
            ti.Approved = tinfo.Approved;
            if (ti.Approved == false)
            {
                ti.Amtdue += ti.Amt;
                if (m != null && m.OnlineGiving())
                {
                    ti.Amtdue = 0;
                }
            }
            ti.Message         = tinfo.Message;
            ti.AuthCode        = tinfo.AuthCode;
            ti.TransactionDate = DateTime.Now;
            DbUtil.Db.SubmitChanges();
            return(ti);
        }
        public ActionResult ManageGiving(ManageGivingModel m)
        {
            SetHeaders(m.orgid);
            RemoveNonDigitsIfNecessary(m);
            m.ValidateModel(ModelState);
            if (!ModelState.IsValid)
            {
                return(View(m));
            }
            try
            {
                var gateway = OnlineRegModel.GetTransactionGateway();
                if (gateway == "authorizenet")
                {
                    var au = new AuthorizeNet(DbUtil.Db, m.testing);
                    au.AddUpdateCustomerProfile(m.pid,
                                                m.Type,
                                                m.Cardnumber,
                                                m.Expires,
                                                m.Cardcode,
                                                m.Routing,
                                                m.Account);
                }
                else if (gateway == "sage")
                {
                    var sg = new SagePayments(DbUtil.Db, m.testing);
                    sg.storeVault(m.pid,
                                  m.Type,
                                  m.Cardnumber,
                                  m.Expires,
                                  m.Cardcode,
                                  m.Routing,
                                  m.Account,
                                  giving: true);
                }
                else
                {
                    throw new Exception("ServiceU not supported");
                }

                var mg = m.person.ManagedGiving();
                if (mg == null)
                {
                    mg = new ManagedGiving();
                    m.person.ManagedGivings.Add(mg);
                }
                mg.SemiEvery = m.SemiEvery;
                mg.Day1      = m.Day1;
                mg.Day2      = m.Day2;
                mg.EveryN    = m.EveryN;
                mg.Period    = m.Period;
                mg.StartWhen = m.StartWhen;
                mg.StopWhen  = m.StopWhen;
                mg.NextDate  = mg.FindNextDate(DateTime.Today);

                var pi = m.person.PaymentInfo();
                pi.FirstName     = m.firstname.Truncate(50);
                pi.MiddleInitial = m.middleinitial.Truncate(10);
                pi.LastName      = m.lastname.Truncate(50);
                pi.Suffix        = m.suffix.Truncate(10);
                pi.Address       = m.address.Truncate(50);
                pi.City          = m.city.Truncate(50);
                pi.State         = m.state.Truncate(10);
                pi.Zip           = m.zip.Truncate(15);
                pi.Phone         = m.phone.Truncate(25);

                var q = from ra in DbUtil.Db.RecurringAmounts
                        where ra.PeopleId == m.pid
                        select ra;
                DbUtil.Db.RecurringAmounts.DeleteAllOnSubmit(q);
                DbUtil.Db.SubmitChanges();
                foreach (var c in m.FundItemsChosen())
                {
                    var ra = new RecurringAmount
                    {
                        PeopleId = m.pid,
                        FundId   = c.fundid,
                        Amt      = c.amt
                    };
                    DbUtil.Db.RecurringAmounts.InsertOnSubmit(ra);
                }
                DbUtil.Db.SubmitChanges();
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("form", ex.Message);
            }
            if (!ModelState.IsValid)
            {
                return(View(m));
            }
            TempData["managegiving"] = m;
            return(Redirect("ConfirmRecurringGiving"));
        }
Beispiel #11
0
        public ActionResult ProcessPayment(PaymentForm pf)
        {
            if (Session["FormId"] != null)
            {
                if ((Guid)Session["FormId"] == pf.FormId)
                {
                    return(Content("Already submitted"));
                }
            }
            OnlineRegModel m  = null;
            var            ed = DbUtil.Db.ExtraDatas.SingleOrDefault(e => e.Id == pf.DatumId);

            if (ed != null)
            {
                m = Util.DeSerialize <OnlineRegModel>(ed.Data);
            }

            if (pf.AmtToPay < 0)
            {
                pf.AmtToPay = 0;
            }
            if (pf.Donate < 0)
            {
                pf.Donate = 0;
            }

            pf.AllowCoupon = false;

            SetHeaders(pf.OrgId ?? 0);
            ViewBag.Url     = pf.Url;
            ViewBag.timeout = INT_timeout;

            if ((pf.AmtToPay ?? 0) <= 0 && (pf.Donate ?? 0) <= 0)
            {
                DbUtil.Db.SubmitChanges();
                ModelState.AddModelError("form", "amount zero");
                return(View("ProcessPayment", pf));
            }

            try
            {
                if (pf.Type == "B")
                {
                    Payments.ValidateBankAccountInfo(ModelState, pf.Routing, pf.Account);
                }
                if (pf.Type == "C")
                {
                    Payments.ValidateCreditCardInfo(ModelState, pf.CreditCard, pf.Expires, pf.CCV);
                }

                if (!ModelState.IsValid)
                {
                    return(View("ProcessPayment", pf));
                }

                if (pf.IsLoggedIn == true && pf.SavePayInfo == true)
                {
                    var gateway = OnlineRegModel.GetTransactionGateway();
                    if (gateway == "authorizenet")
                    {
                        var au = new AuthorizeNet(DbUtil.Db, m.testing ?? false);
                        if ((pf.Type == "B" && !pf.Routing.StartsWith("X") && !pf.Account.StartsWith("X")) ||
                            (pf.Type == "C" && !pf.CreditCard.StartsWith("X")))
                        {
                            au.AddUpdateCustomerProfile(m.UserPeopleId.Value,
                                                        pf.Type,
                                                        pf.CreditCard,
                                                        pf.Expires,
                                                        pf.MaskedCCV != null && pf.MaskedCCV.StartsWith("X") ? pf.CCV : pf.MaskedCCV,
                                                        pf.Routing,
                                                        pf.Account);
                        }
                    }
                    else if (gateway == "sage")
                    {
                        var sg = new CmsData.SagePayments(DbUtil.Db, m.testing ?? false);
                        if ((pf.Type == "B" && !pf.Routing.StartsWith("X") && !pf.Account.StartsWith("X")) ||
                            (pf.Type == "C" && !pf.CreditCard.StartsWith("X")))
                        {
                            sg.storeVault(m.UserPeopleId.Value,
                                          pf.Type,
                                          pf.CreditCard,
                                          pf.Expires,
                                          pf.MaskedCCV != null && pf.MaskedCCV.StartsWith("X") ? pf.CCV : pf.MaskedCCV,
                                          pf.Routing,
                                          pf.Account,
                                          pf.IsGiving == true);
                        }
                    }
                    else
                    {
                        throw new Exception("ServiceU not supported");
                    }
                }
                var ti = ProcessPaymentTransaction(m, pf);

                if (ti.Approved == false)
                {
                    ModelState.AddModelError("form", ti.Message);
                    return(View("ProcessPayment", pf));
                }
                if (m != null)
                {
                    m.TranId = ti.Id;
                    ed.Data  = Util.Serialize <OnlineRegModel>(m);
                    DbUtil.Db.SubmitChanges();
                }
                Session["FormId"] = pf.FormId;
                if (pf.DatumId > 0)
                {
                    confirm = ConfirmTransaction(m, ti.TransactionId);
                    if (confirm.StartsWith("error:"))
                    {
                        TempData["error"] = confirm.Substring(6);
                        return(Redirect("/Error"));
                    }
                    return(View(confirm));
                }

                ConfirmDuePaidTransaction(ti, ti.TransactionId, sendmail: true);
                return(View("ConfirmDuePaid", ti));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("form", ex.Message);
                return(View("ProcessPayment", pf));
            }
        }