public ActionResult Login(OnlineRegModel m) { var ret = AccountModel.AuthenticateLogon(m.username, m.password, Session, Request); if (ret is string) { ModelState.AddModelError("authentication", ret.ToString()); return(FlowList(m, "Login")); } Session["OnlineRegLogin"] = true; if (m.Orgid == Util.CreateAccountCode) { return(Content("/Person2/" + Util.UserPeopleId)); } var existingRegistration = m.GetExistingRegistration(Util.UserPeopleId ?? 0); if (existingRegistration != null) { TempData["er"] = m.UserPeopleId = Util.UserPeopleId; return(Content("/OnlineReg/Existing/" + existingRegistration.DatumId)); } Debug.Assert(Util.UserPeopleId != null, "Util.UserPeopleId != null"); m.CreateList(); m.UserPeopleId = Util.UserPeopleId; if (m.ManagingSubscriptions()) { TempData["ms"] = Util.UserPeopleId; return(Content("/OnlineReg/ManageSubscriptions/{0}".Fmt(m.masterorgid))); } if (m.ChoosingSlots()) { TempData["ps"] = Util.UserPeopleId; return(Content("/OnlineReg/ManageVolunteer/{0}".Fmt(m.Orgid))); } if (m.OnlinePledge()) { TempData["mp"] = Util.UserPeopleId; return(Content("/OnlineReg/ManagePledge/{0}".Fmt(m.Orgid))); } if (m.ManageGiving()) { TempData["mg"] = Util.UserPeopleId; return(Content("/OnlineReg/ManageGiving/{0}".Fmt(m.Orgid))); } if (m.OnlineGiving()) { return(Register(Util.UserPeopleId.Value, m)); } if (m.UserSelectsOrganization()) { OnlineRegPersonModelValidator.ValidateModelForFind(m.List[0], ModelState, m, 0); } m.List[0].LoggedIn = true; m.HistoryAdd("login"); return(FlowList(m, "Login")); }
private ActionResult RouteSpecialLogin(OnlineRegModel m) { if (Util.UserPeopleId == null) { throw new Exception("Util.UserPeopleId is null on login"); } var link = RouteExistingRegistration(m); if (link.HasValue()) { return(Redirect(link)); } m.CreateAnonymousList(); m.UserPeopleId = Util.UserPeopleId; if (m.OnlineGiving()) { m.Log("Login OnlineGiving"); return(RegisterFamilyMember(Util.UserPeopleId.Value, m)); } link = RouteManageGivingSubscriptionsPledgeVolunteer(m); if (link.HasValue()) { return(Content(link)); // this will be used for a redirect in javascript } return(null); }
// Set suggested giving fee for an indidividual person private static void CheckSetFee(OnlineRegModel m, OnlineRegPersonModel p) { if (m.OnlineGiving() && p.setting.ExtraValueFeeName.HasValue()) { var f = CmsWeb.Models.OnlineRegPersonModel.Funds().SingleOrDefault(ff => ff.Text == p.setting.ExtraValueFeeName); var evamt = p.person.GetExtra(p.setting.ExtraValueFeeName).ToDecimal(); if (f != null && evamt > 0) { p.FundItem[f.Value.ToInt()] = evamt; } } }
public ActionResult OnePageGiving(int id, bool?testing, string source) { Response.NoCache(); try { var m = new OnlineRegModel(Request, CurrentDatabase, id, testing, null, null, source); var pid = Util.UserPeopleId; if (pid.HasValue) { PrePopulate(m, pid.Value); } SetHeaders(m); m.CheckRegisterLink(null); if (m.NotActive()) { return(View("OnePageGiving/NotActive", m)); } if ((m.org.IsMissionTrip.IsNotNull() && m.org.IsMissionTrip == true) ? true : false) { m.ProcessType = PaymentProcessTypes.OneTimeGiving; } else { m.ProcessType = (m.org.RegistrationTypeId.IsNull() || m.org.RegistrationTypeId == RegistrationTypeCode.OnlineGiving) ? PaymentProcessTypes.OneTimeGiving : PaymentProcessTypes.OnlineRegistration; } int?GatewayId = MultipleGatewayUtils.GatewayId(CurrentDatabase, m.ProcessType); if (GatewayId == (int)GatewayTypes.Pushpay && m.OnlineGiving()) { ViewBag.Header = "One Page Giving"; if (string.IsNullOrEmpty(MultipleGatewayUtils.Setting(CurrentDatabase, "PushpayMerchant", "", (int)m.ProcessType))) { return(View("OnePageGiving/NotConfigured")); } return(Redirect($"/Pushpay/OnePage")); } var pf = PaymentForm.CreatePaymentForm(m); pf.AmtToPay = null; if (string.IsNullOrWhiteSpace(pf.Type)) { pf.Type = pf.NoCreditCardsAllowed ? "B" : "C"; } #if DEBUG if (!pid.HasValue) { pf.First = "Otis"; pf.Last = "Sukamotis"; pf.Email = "*****@*****.**"; pf.Address = "135 Riveredge Cv"; pf.Zip = ""; pf.CreditCard = "3111111111111111"; pf.Expires = "1018"; pf.CVV = "123"; pf.AmtToPay = 23M; } #endif var p = m.List[0]; if (pf.ShowCampusOnePageGiving) { pf.Campuses = p.Campuses().ToList(); } var designatedFund = p.DesignatedDonationFund().FirstOrDefault(); pf.Description = designatedFund != null ? designatedFund.Text : m.DescriptionForPayment; SetInstructions(m); return(View("OnePageGiving/Index", new OnePageGivingModel() { OnlineRegPersonModel = m.List[0], PaymentForm = pf })); } catch (Exception ex) { if (ex is BadRegistrationException) { return(Message(ex.Message)); } throw; } }
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); }
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 ProcessPayment(PaymentForm pf) { Response.NoCache(); #if DEBUG #else if (Session["FormId"] != null) { if ((Guid)Session["FormId"] == pf.FormId) { return(Message("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); } var peopleId = 0; if (m != null) { peopleId = m.UserPeopleId ?? 0; } #if DEBUG #else if (m != null && m.History.Any(h => h.Contains("ProcessPayment"))) { return(Content("Already submitted")); } #endif if (m != null && m.OnlineGiving()) { var previousTransaction = (from t in DbUtil.Db.Transactions where t.Amt == pf.AmtToPay where t.OrgId == m.Orgid where t.TransactionDate > DateTime.Now.AddMinutes(-60) where DbUtil.Db.Contributions.Any(cc => cc.PeopleId == m.List[0].PeopleId && cc.TranId == t.Id) select t).FirstOrDefault(); if (previousTransaction != null) { return(Message("You have already submitted a gift in this amount a short while ago. Please let us know if you saw an error and what the message said.")); } } 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 { ValidatePaymentForm(pf); if (!ModelState.IsValid) { return(View("Payment/Process", pf)); } if (m != null && pf.IsLoggedIn.GetValueOrDefault() && pf.SavePayInfo) { var gateway = DbUtil.Db.Gateway(m.testing ?? false); // we need to perform a $1 auth if this is a brand new credit card that we are going to store it in the vault. // otherwise we skip doing an auth just call store in vault just like normal. if (!VerifyCardWithAuth(gateway, pf, peopleId)) { return(View("Payment/Process", pf)); } InitializePaymentInfo(peopleId, pf); StoreInVault(gateway, pf, peopleId); } 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.HistoryAdd("ProcessPayment"); ed.Data = Util.Serialize(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) { Elmah.ErrorSignal.FromCurrentContext().Raise(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) { Elmah.ErrorSignal.FromCurrentContext().Raise(ex); ModelState.AddModelError("form", ex.Message); return(View("Payment/Process", pf)); } }
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); }