Beispiel #1
0
        public ActionResult AddAnotherPerson(OnlineRegModel m)
        {
            m.HistoryAdd("AddAnotherPerson");
            m.ParseSettings();
            if (!ModelState.IsValid)
            {
                return(FlowList(m, "AddAnotherPerson"));
            }
#if DEBUG2
            m.List.Add(new OnlineRegPersonModel
            {
                guid        = Guid.NewGuid(),
                divid       = m.divid,
                orgid       = m.orgid,
                masterorgid = m.masterorgid,
                first       = "Bethany",
                last        = "Carroll",
                //bmon = 1,
                //bday = 29,
                //byear = 1987,
                dob      = "1/29/87",
                email    = "*****@*****.**",
                phone    = "9017581862".FmtFone(),
                LoggedIn = m.UserPeopleId.HasValue,
            });
#else
            m.List.Add(new OnlineRegPersonModel
            {
                orgid       = m.Orgid,
                masterorgid = m.masterorgid,
                LoggedIn    = m.UserPeopleId.HasValue,
            });
#endif
            return(FlowList(m, "AddAnotherPerson"));
        }
 public ActionResult AddAnotherPerson(OnlineRegModel m)
 {
     fromMethod = "AddAnotherPerson";
     m.HistoryAdd("AddAnotherPerson");
     m.ParseSettings();
     if (!ModelState.IsValid)
         return FlowList(m);
     m.List.Add(new OnlineRegPersonModel
     {
         orgid = m.Orgid,
         masterorgid = m.masterorgid,
     });
     return FlowList(m);
 }
Beispiel #3
0
 public ActionResult AddAnotherPerson(OnlineRegModel m)
 {
     fromMethod = "AddAnotherPerson";
     m.HistoryAdd("AddAnotherPerson");
     m.ParseSettings();
     if (!ModelState.IsValid)
     {
         return(FlowList(m));
     }
     m.List.Add(new OnlineRegPersonModel
     {
         orgid       = m.Orgid,
         masterorgid = m.masterorgid,
     });
     return(FlowList(m));
 }
 public ActionResult AddAnotherPerson(OnlineRegModel m)
 {
     fromMethod = "AddAnotherPerson";
     m.HistoryAdd("AddAnotherPerson");
     m.ParseSettings();
     if (!ModelState.IsValid)
         return FlowList(m);
     m.List.Add(new OnlineRegPersonModel
     {
         orgid = m.Orgid,
         masterorgid = m.masterorgid,
     #if DEBUG
         FirstName = "Delaine",
         LastName = "Carroll",
         EmailAddress = "*****@*****.**"
     #endif
     });
     return FlowList(m);
 }
Beispiel #5
0
        public ActionResult AddAnotherPerson(OnlineRegModel m)
        {
            fromMethod = "AddAnotherPerson";
            m.HistoryAdd("AddAnotherPerson");
            m.ParseSettings();
            if (!ModelState.IsValid)
            {
                return(FlowList(m));
            }
            m.List.Add(new OnlineRegPersonModel
            {
                orgid       = m.Orgid,
                masterorgid = m.masterorgid,
#if DEBUG
                FirstName    = "Delaine",
                LastName     = "Carroll",
                EmailAddress = "*****@*****.**"
#endif
            });
            return(FlowList(m));
        }
        public ActionResult AddAnotherPerson(OnlineRegModel m)
        {
            var ret = m.CheckExpiredOrCompleted();

            if (ret.HasValue())
            {
                return(PageMessage(ret));
            }
            fromMethod = "AddAnotherPerson";
            m.HistoryAdd("AddAnotherPerson");
            m.ParseSettings();
            if (!ModelState.IsValid)
            {
                return(FlowList(m));
            }
            m.List.Add(new OnlineRegPersonModel
            {
                orgid       = m.Orgid,
                masterorgid = m.masterorgid,
            });
            return(FlowList(m));
        }
Beispiel #7
0
        public ActionResult ApplyCoupon(PaymentForm pf)
        {
            OnlineRegModel m = null;

            if (pf.PayBalance == false)
            {
                m = OnlineRegModel.GetRegistrationFromDatum(pf.DatumId);
                if (m == null)
                {
                    return(Json(new { error = "coupon not find your registration" }));
                }
                m.ParseSettings();
            }

            if (!pf.Coupon.HasValue())
            {
                return(Json(new { error = "empty coupon" }));
            }
            var coupon      = pf.Coupon.ToUpper().Replace(" ", "");
            var admincoupon = DbUtil.Db.Setting("AdminCoupon", "ifj4ijweoij").ToUpper().Replace(" ", "");

            if (coupon == admincoupon)
            {
                if (pf.PayBalance)
                {
                    var tic = pf.CreateTransaction(DbUtil.Db, pf.AmtToPay);
                    return(Json(new { confirm = $"/onlinereg/ConfirmDuePaid/{tic.Id}?TransactionID=AdminCoupon&Amount={tic.Amt}" }));
                }
                else
                {
                    return(Json(new { confirm = $"/OnlineReg/Confirm/{pf.DatumId}?TransactionId=AdminCoupon" }));
                }
            }

            var c = DbUtil.Db.Coupons.SingleOrDefault(cp => cp.Id == coupon);

            if (c == null)
            {
                return(Json(new { error = "coupon not found" }));
            }

            if (pf.OrgId.HasValue && c.Organization != null && c.Organization.OrgPickList.HasValue())
            {
                var a = c.Organization.OrgPickList.SplitStr(",").Select(ss => ss.ToInt()).ToArray();
                if (!a.Contains(pf.OrgId.Value))
                {
                    return(Json(new { error = "coupon and org do not match" }));
                }
            }
            else if (pf.OrgId != c.OrgId)
            {
                return(Json(new { error = "coupon and org do not match" }));
            }
            if (c.Used.HasValue && c.Id.Length == 12)
            {
                return(Json(new { error = "coupon already used" }));
            }
            if (c.Canceled.HasValue)
            {
                return(Json(new { error = "coupon canceled" }));
            }

            var ti = pf.CreateTransaction(DbUtil.Db, Math.Min(c.Amount ?? 0m, pf.AmtToPay ?? 0m));

            if (m != null) // Start this transaction in the chain
            {
                m.HistoryAdd("ApplyCoupon");
                m.TranId = ti.OriginalId;
                m.UpdateDatum();
            }
            var tid = $"Coupon({Util.fmtcoupon(coupon):n2})";

            if (!pf.PayBalance)
            {
                OnlineRegModel.ConfirmDuePaidTransaction(ti, tid, false);
            }

            var msg = $"<i class='red'>Your coupon for {c.Amount:n2} has been applied, your balance is now {ti.Amtdue:n2}</i>.";

            if (ti.Amt < pf.AmtToPay)
            {
                msg += "You still must complete this transaction with a payment";
            }

            if (m != null)
            {
                m.UseCoupon(ti.TransactionId, ti.Amt ?? 0);
            }
            else
            {
                c.UseCoupon(ti.FirstTransactionPeopleId(), ti.Amt ?? 0);
            }
            DbUtil.Db.SubmitChanges();

            if (pf.PayBalance)
            {
                return(Json(new { confirm = $"/onlinereg/ConfirmDuePaid/{ti.Id}?TransactionID=Coupon({Util.fmtcoupon(coupon)})&Amount={ti.Amt}" }));
            }
            pf.AmtToPay -= ti.Amt;
            if (pf.AmtToPay <= 0)
            {
                return(Json(new { confirm = $"/OnlineReg/Confirm/{pf.DatumId}?TransactionId={"Coupon"}" }));
            }
            return(Json(new { tiamt = pf.AmtToPay, amtdue = ti.Amtdue, amt = pf.AmtToPay.ToString2("N2"), msg }));
        }
Beispiel #8
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));
        }
        public ActionResult CompleteRegistration(OnlineRegModel m)
        {
            m.History.Add("CompleteRegistration");

            if (m.org != null && m.org.RegistrationTypeId == RegistrationTypeCode.SpecialJavascript)
            {
                SpecialRegModel.ParseResults(m.Orgid ?? 0, m.List[0].PeopleId ?? 0, Request.Form);
                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(Content("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(Content("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 #10
0
        public ActionResult ApplyCoupon(PaymentForm pf)
        {
            OnlineRegModel m  = null;
            ExtraDatum     ed = null;

            if (pf.PayBalance == false)
            {
                ed = DbUtil.Db.ExtraDatas.SingleOrDefault(e => e.Id == pf.DatumId);
                m  = Util.DeSerialize <OnlineRegModel>(ed.Data);
                m.ParseSettings();
            }

            if (!pf.Coupon.HasValue())
            {
                return(Json(new { error = "empty coupon" }));
            }
            string coupon      = pf.Coupon.ToUpper().Replace(" ", "");
            string admincoupon = DbUtil.Db.Setting("AdminCoupon", "ifj4ijweoij").ToUpper().Replace(" ", "");

            if (coupon == admincoupon)
            {
                return(Json(new { confirm = "/onlinereg/Confirm/{0}?TransactionID=Coupon(Admin)".Fmt(pf.DatumId) }));
            }

            var c = DbUtil.Db.Coupons.SingleOrDefault(cp => cp.Id == coupon);

            if (c == null)
            {
                return(Json(new { error = "coupon not found" }));
            }

            if (pf.OrgId.HasValue && c.Organization != null && c.Organization.OrgPickList.HasValue())
            {
                var a = c.Organization.OrgPickList.SplitStr(",").Select(ss => ss.ToInt()).ToArray();
                if (!a.Contains(pf.OrgId.Value))
                {
                    return(Json(new { error = "coupon and org do not match" }));
                }
            }
            else if (pf.OrgId != c.OrgId)
            {
                return(Json(new { error = "coupon and org do not match" }));
            }
            if (c.Used.HasValue && c.Id.Length == 12)
            {
                return(Json(new { error = "coupon already used" }));
            }
            if (c.Canceled.HasValue)
            {
                return(Json(new { error = "coupon canceled" }));
            }

            var ti = pf.CreateTransaction(DbUtil.Db, c.Amount);

            if (m != null)             // Start this transaction in the chain
            {
                m.TranId = ti.OriginalId;
                ed.Data  = Util.Serialize <OnlineRegModel>(m);
            }
            var tid = "Coupon({0:n2})".Fmt(Util.fmtcoupon(coupon));

            if (!pf.PayBalance)
            {
                ConfirmDuePaidTransaction(ti, tid, sendmail: false);
            }

            var msg = "<i class='red'>Your coupon for {0:n2} has been applied, your balance is now {1:n2}</i>."
                      .Fmt(c.Amount, ti.Amtdue);

            if (ti.Amt < pf.AmtToPay)
            {
                msg += "You still must complete this transaction with a payment";
            }

            if (m != null)
            {
                m.UseCoupon(ti.TransactionId, ti.Amt ?? 0);
            }
            else
            {
                c.UseCoupon(ti.FirstTransactionPeopleId(), ti.Amt ?? 0);
            }
            DbUtil.Db.SubmitChanges();

            if (pf.PayBalance)
            {
                return(Json(new { confirm = "/onlinereg/ConfirmDuePaid/{0}?TransactionID=Coupon({1})&Amount={2}".Fmt(ti.Id, Util.fmtcoupon(coupon), ti.Amt) }));
            }
            pf.AmtToPay -= ti.Amt;
            if (pf.AmtToPay <= 0)
            {
                return(Json(new { confirm = "/OnlineReg/Confirm/{0}?TransactionId={1}".Fmt(pf.DatumId, "Coupon") }));
            }
            return(Json(new { tiamt = pf.AmtToPay, amtdue = ti.Amtdue, amt = pf.AmtToPay.ToString2("N2"), msg }));
        }
Beispiel #11
0
        private ConfirmEnum ConfirmTransaction(OnlineRegModel m, string TransactionID)
        {
            m.ParseSettings();
            if (m.List.Count == 0)
            {
                throw new Exception(" unexpected, no registrants found in confirmation");
            }
            var ret           = ConfirmEnum.Confirm;
            var managingsubs  = m.ManagingSubscriptions();
            var choosingslots = m.ChoosingSlots();
            var t             = m.Transaction;

            if (t == null && !managingsubs && !choosingslots)
            {
                m.History.Add("ConfirmTransaction");
                m.UpdateDatum(completed: true);
                var pf = PaymentForm.CreatePaymentForm(m);
                t        = pf.CreateTransaction(DbUtil.Db);
                m.TranId = t.Id;
            }
            if (t != null)
            {
                ViewBag.message = t.Message;
            }

            if (m.org != null && m.org.RegistrationTypeId == RegistrationTypeCode.CreateAccount)
            {
                m.List[0].CreateAccount();
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (m.OnlineGiving())
            {
                var p = m.List[0];
                if (p.IsNew)
                {
                    p.AddPerson(null, p.org.EntryPointId ?? 0);
                }

                var staff = DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId)[0];
                var text  = p.setting.Body.Replace("{church}", DbUtil.Db.Setting("NameOfChurch", "church"), ignoreCase: true);
                text = text.Replace("{amt}", (t.Amt ?? 0).ToString("N2"));
                text = text.Replace("{date}", DateTime.Today.ToShortDateString());
                text = text.Replace("{tranid}", t.Id.ToString());
                text = text.Replace("{name}", p.person.Name);
                text = text.Replace("{account}", "");
                text = text.Replace("{email}", p.person.EmailAddress);
                text = text.Replace("{phone}", p.person.HomePhone.FmtFone());
                text = text.Replace("{contact}", staff.Name);
                text = text.Replace("{contactemail}", staff.EmailAddress);
                text = text.Replace("{contactphone}", p.org.PhoneNumber.FmtFone());
                var re    = new Regex(@"(?<b>.*?)<!--ITEM\sROW\sSTART-->(?<row>.*?)\s*<!--ITEM\sROW\sEND-->(?<e>.*)", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
                var match = re.Match(text);
                var b     = match.Groups["b"].Value;
                var row   = match.Groups["row"].Value.Replace("{funditem}", "{0}").Replace("{itemamt}", "{1:N2}");
                var e     = match.Groups["e"].Value;
                var sb    = new StringBuilder(b);

                var desc = "{0}; {1}; {2}".Fmt(
                    p.person.Name,
                    p.person.PrimaryAddress,
                    p.person.PrimaryZip);
                foreach (var g in p.FundItemsChosen())
                {
                    if (g.amt > 0)
                    {
                        sb.AppendFormat(row, g.desc, g.amt);
                        p.person.PostUnattendedContribution(DbUtil.Db, g.amt, g.fundid, desc, tranid: t.Id);
                    }
                }
                t.TransactionPeople.Add(new TransactionPerson
                {
                    PeopleId = p.person.PeopleId,
                    Amt      = t.Amt,
                    OrgId    = m.Orgid,
                });
                t.Financeonly = true;
                if (t.Donate > 0)
                {
                    var fundname = DbUtil.Db.ContributionFunds.Single(ff => ff.FundId == p.setting.DonationFundId).FundName;
                    sb.AppendFormat(row, fundname, t.Donate);
                    t.Fund = p.setting.DonationFund();
                    p.person.PostUnattendedContribution(DbUtil.Db, t.Donate ?? 0, p.setting.DonationFundId, desc, tranid: t.Id);
                }
                sb.Append(e);
                if (!t.TransactionId.HasValue())
                {
                    t.TransactionId = TransactionID;
                    if (m.testing == true && !t.TransactionId.Contains("(testing)"))
                    {
                        t.TransactionId += "(testing)";
                    }
                }
                var contributionemail = (from ex in p.person.PeopleExtras
                                         where ex.Field == "ContributionEmail"
                                         select ex.Data).SingleOrDefault();
                if (contributionemail.HasValue())
                {
                    contributionemail = (contributionemail ?? "").Trim();
                }
                if (!Util.ValidEmail(contributionemail))
                {
                    contributionemail = p.person.FromEmail;
                }

                Util.SendMsg(Util.SysFromEmail, Util.Host, Util.TryGetMailAddress(DbUtil.Db.StaffEmailForOrg(p.org.OrganizationId)),
                             p.setting.Subject, sb.ToString(),
                             Util.EmailAddressListFromString(contributionemail), 0, p.PeopleId);
                DbUtil.Db.Email(contributionemail, DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId),
                                "online giving contribution received",
                                "see contribution records for {0} ({1})".Fmt(p.person.Name, p.PeopleId));
                if (p.CreatingAccount == true)
                {
                    p.CreateAccount();
                }
            }
            else if (managingsubs)
            {
                m.ConfirmManageSubscriptions();
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (choosingslots)
            {
                m.ConfirmPickSlots();
                m.URL = null;
                ViewBag.ManagingVolunteer = true;
                ViewBag.CreatedAccount    = m.List[0].CreatingAccount;
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (m.OnlinePledge())
            {
                m.SendLinkForPledge();
                ViewBag.CreatedAccount = m.List[0].CreatingAccount;
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (m.ManageGiving())
            {
                m.SendLinkToManageGiving();
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (t.TransactionGateway.ToLower() == "serviceu")
            {
                t.TransactionId = TransactionID;
                if (m.testing == true && !t.TransactionId.Contains("(testing)"))
                {
                    t.TransactionId += "(testing)";
                }
                t.Message  = "Transaction Completed";
                t.Approved = true;
                m.EnrollAndConfirm();
                if (m.List.Any(pp => pp.PeopleId == null))
                {
                    LogOutOfOnlineReg();
                    throw new Exception("no person");
                }
                m.UseCoupon(t.TransactionId, t.Amt ?? 0);
            }
            else
            {
                if (!t.TransactionId.HasValue())
                {
                    t.TransactionId = TransactionID;
                    if (m.testing == true && !t.TransactionId.Contains("(testing)"))
                    {
                        t.TransactionId += "(testing)";
                    }
                }
                m.EnrollAndConfirm();
                if (m.List.Any(pp => pp.PeopleId == null))
                {
                    LogOutOfOnlineReg();
                    throw new Exception("no person");
                }
                m.UseCoupon(t.TransactionId, t.Amt ?? 0);
            }
            if (m.IsCreateAccount() || m.ManagingSubscriptions())
            {
                m.email = m.List[0].person.EmailAddress;
            }
            else
            {
                m.email = m.List[0].EmailAddress;
            }
            ViewBag.email = m.email;

            if (m.masterorgid.HasValue && m.Orgid.HasValue && !m.settings[m.Orgid.Value].Subject.HasValue())
            {
                ViewBag.orgname = m.masterorg.OrganizationName;
            }
            else
            {
                ViewBag.orgname = m.org != null ? m.org.OrganizationName : m.masterorg.OrganizationName;
            }

            LogOutOfOnlineReg();
            return(ret);
        }
Beispiel #12
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);
        }
Beispiel #13
0
        private Transaction ProcessPaymentTransaction(OnlineRegModel m, PaymentForm pf)
        {
            var ti = (m != null && m.Transaction != null)
                ? PaymentForm.CreateTransaction(DbUtil.Db, m.Transaction, pf.AmtToPay)
                : 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 gw = DbUtil.Db.Gateway(pf.testing);

            if (pf.SavePayInfo)
            {
                tinfo = gw.PayWithVault(pid ?? 0, pf.AmtToPay ?? 0, pf.Description, ti.Id, pf.Type);
            }
            else
            {
                tinfo = pf.Type == PaymentType.Ach
                    ? PayWithCheck(gw, pf, pid, ti)
                    : PayWithCreditCard(gw, pf, pid, ti);
            }

            ti.TransactionId = tinfo.TransactionId;

            if (ti.Testing.GetValueOrDefault() && !ti.TransactionId.Contains("(testing)"))
            {
                ti.TransactionId += "(testing)";
            }

            ti.Approved = tinfo.Approved;

            if (!ti.Approved.GetValueOrDefault())
            {
                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);
        }