public ActionResult SaveProgress(OnlineRegModel m) { m.HistoryAdd("saveprogress"); if (m.UserPeopleId == null) m.UserPeopleId = Util.UserPeopleId; m.UpdateDatum(); var p = m.UserPeopleId.HasValue ? DbUtil.Db.LoadPersonById(m.UserPeopleId.Value) : m.List[0].person; if (p == null) return Content("We have not found your record yet, cannot save progress, sorry"); if (m.masterorgid == null && m.Orgid == null) return Content("Registration is not far enough along to save, sorry."); var msg = DbUtil.Db.ContentHtml("ContinueRegistrationLink", @" <p>Hi {first},</p> <p>Here is the link to continue your registration:</p> Resume [registration for {orgname}] ").Replace("{orgname}", m.Header); var linktext = Regex.Match(msg, @"(\[(.*)\])", RegexOptions.Singleline).Groups[2].Value; var registerlink = EmailReplacements.CreateRegisterLink(m.masterorgid ?? m.Orgid, linktext); msg = Regex.Replace(msg, @"(\[.*\])", registerlink, RegexOptions.Singleline); var notifyids = DbUtil.Db.NotifyIds((m.masterorg ?? m.org).NotifyIds); DbUtil.Db.Email(notifyids[0].FromEmail, p, $"Continue your registration for {m.Header}", msg); /* We use Content as an ActionResult instead of Message because we want plain text sent back * This is an HttpPost ajax call and will have a SiteLayout wrapping this. */ return Content(@" We have saved your progress. An email with a link to finish this registration will come to you shortly. <input type='hidden' id='SavedProgress' value='true'/> "); }
private string RouteExistingRegistration(OnlineRegModel m, int? pid = null) { var existingRegistration = m.GetExistingRegistration(pid ?? Util.UserPeopleId ?? 0); if (existingRegistration == null) return null; m.Log("Existing"); TempData["PeopleId"] = existingRegistration.UserPeopleId; return "/OnlineReg/Existing/" + existingRegistration.DatumId; }
public void UpdateSubscriptions() { var q = from o in OnlineRegModel.UserSelectClasses(masterorg) let om = o.OrganizationMembers.SingleOrDefault(mm => mm.PeopleId == pid) where om != null select om; var current = q.ToList(); if (Subscribe == null) { Subscribe = new int[] {} } ; var drops = from om in current join id in Subscribe on om.OrganizationId equals id into j from id in j.DefaultIfEmpty() where id == 0 select om; var joins = from id in Subscribe join om in current on id equals om.OrganizationId into j from om in j.DefaultIfEmpty() where om == null select id; foreach (var om in drops) { om.Drop(DbUtil.Db); DbUtil.Db.SubmitChanges(); } foreach (var id in joins) { OrganizationMember.InsertOrgMembers(DbUtil.Db, id, pid, MemberTypeCode.Member, DateTime.Now, null, false); DbUtil.Db.SubmitChanges(); //DbUtil.Db.UpdateMainFellowship(id); } }
private string RouteManageGivingSubscriptionsPledgeVolunteer(OnlineRegModel m) { if (m.RegisterLinkMaster()) { if (m.registerLinkType.StartsWith("registerlink") || m.registerLinkType == "masterlink" || User.Identity.IsAuthenticated) { TempData["token"] = m.registertag; TempData["PeopleId"] = m.UserPeopleId ?? Util.UserPeopleId; } return $"/OnlineReg/RegisterLinkMaster/{m.Orgid}"; } TempData["PeopleId"] = m.UserPeopleId ?? Util.UserPeopleId; if (m.ManagingSubscriptions()) return $"/OnlineReg/ManageSubscriptions/{m.masterorgid}"; if (m.ManageGiving()) return $"/OnlineReg/ManageGiving/{m.Orgid}"; if (m.OnlinePledge()) return $"/OnlineReg/ManagePledge/{m.Orgid}"; if (m.ChoosingSlots()) return $"/OnlineReg/ManageVolunteer/{m.Orgid}"; TempData.Remove("PeopleId"); return null; }
public static Transaction CreateTransaction(CMSDataContext db, Transaction t, decimal?amount) { var amtdue = t.Amtdue - (amount ?? 0); var ti = new Transaction { Name = t.Name, First = t.First, MiddleInitial = t.MiddleInitial, Last = t.Last, Suffix = t.Suffix, Donate = t.Donate, Amtdue = amtdue, Amt = amount, Emails = Util.FirstAddress(t.Emails).Address, Testing = t.Testing, Description = t.Description, OrgId = t.OrgId, Url = t.Url, Address = t.Address, TransactionGateway = OnlineRegModel.GetTransactionGateway()?.GatewayAccountName, City = t.City, State = t.State, Zip = t.Zip, DatumId = t.DatumId, Phone = t.Phone, OriginalId = t.OriginalId ?? t.Id, Financeonly = t.Financeonly, TransactionDate = Util.Now, PaymentType = t.PaymentType, LastFourCC = t.LastFourCC, LastFourACH = t.LastFourACH }; db.Transactions.InsertOnSubmit(ti); db.SubmitChanges(); return(ti); }
public static PaymentForm CreatePaymentForm(OnlineRegModel m) { var r = m.GetTransactionInfo(); if (r == null) { return(null); } var pf = new PaymentForm { FormId = Guid.NewGuid(), AmtToPay = m.PayAmount() + (m.donation ?? 0), AskDonation = m.AskDonation(), AllowCoupon = !m.OnlineGiving(), PayBalance = false, Amtdue = m.TotalAmount() + (m.donation ?? 0), Donate = m.donation, Description = m.DescriptionForPayment, Email = r.Email, First = r.First, MiddleInitial = r.Middle, Last = r.Last, Suffix = r.Suffix, IsLoggedIn = m.UserPeopleId.HasValue, OrgId = m.List[0].orgid, URL = m.URL, testing = m.testing ?? false, Terms = m.Terms, Address = r.Address, Address2 = r.Address2, City = r.City, State = r.State, Country = r.Country, Zip = r.Zip, Phone = r.Phone, SupportMissionTrip = m.SupportMissionTrip, extTransactionId = m.transactionId, ProcessType = m.ProcessType, #if DEBUG2 CreditCard = "4111111111111111", CVV = "123", Expires = "1017", Routing = "056008849", Account = "12345678901234", #endif }; if (r.payinfo.PeopleId == m.UserPeopleId) // Is this the logged in user? { pf.CreditCard = r.payinfo.MaskedCard; pf.Account = r.payinfo.MaskedAccount; pf.Routing = r.payinfo.Routing; pf.Expires = r.payinfo.Expires; pf.SavePayInfo = (r.payinfo.MaskedAccount != null && r.payinfo.MaskedAccount.StartsWith("X")) || (r.payinfo.MaskedCard != null && r.payinfo.MaskedCard.StartsWith("X")); pf.Type = r.payinfo.PreferredPaymentType; // if no preferred payment type pick credit card or ach if we have anything. if (string.IsNullOrWhiteSpace(pf.Type)) { pf.Type = !string.IsNullOrWhiteSpace(pf.CreditCard) ? PaymentType.CreditCard : null; } if (string.IsNullOrWhiteSpace(pf.Type)) { pf.Type = !string.IsNullOrWhiteSpace(pf.Account) ? PaymentType.Ach : null; } } ClearMaskedNumbers(pf, r.payinfo); pf.AllowSaveProgress = m.AllowSaveProgress(); pf.NoCreditCardsAllowed = m.NoCreditCardsAllowed(); if (m.OnlineGiving()) { #if DEBUG pf.NoCreditCardsAllowed = false; #else pf.NoCreditCardsAllowed = DbUtil.Db.Setting("NoCreditCardGiving", "false").ToBool(); #endif pf.IsGiving = true; pf.FinanceOnly = true; pf.Type = r.payinfo.PreferredGivingType; } else if (m.ManageGiving() || m.OnlinePledge()) { pf.FinanceOnly = true; } if (pf.NoCreditCardsAllowed) { pf.Type = PaymentType.Ach; // bank account only } else if (pf.NoEChecksAllowed) { pf.Type = PaymentType.CreditCard; // credit card only } pf.Type = pf.NoEChecksAllowed ? PaymentType.CreditCard : pf.Type; pf.DatumId = m.DatumId ?? 0; return(pf); }
private ActionResult RouteRegistration(OnlineRegModel m, int pid, bool? showfamily) { if(pid == 0) return View(m); #if DEBUG m.DebugCleanUp(); #endif var link = RouteExistingRegistration(m, pid); if (link.HasValue()) return Redirect(link); OnlineRegPersonModel p = null; if (showfamily != true) { // No need to pick family, so prepare first registrant ready to answer questions p = m.LoadExistingPerson(pid, 0); p.ValidateModelForFind(ModelState, 0); if (m.masterorg == null) { if (m.List.Count == 0) m.List.Add(p); else m.List[0] = p; } } if (!ModelState.IsValid) { m.Log("CannotProceed"); return View(m); } link = RouteManageGivingSubscriptionsPledgeVolunteer(m); if(link.HasValue()) if (m.ManageGiving()) // use Direct ActionResult instead of redirect return ManageGiving(m.Orgid.ToString(), m.testing); else if (m.RegisterLinkMaster()) return Redirect(link); else return Redirect(link); // check for forcing show family, master org, or not found if (showfamily == true || p.org == null || p.Found != true) return View(m); // ready to answer questions, make sure registration is ok to go m.Log("Authorized"); if (!m.SupportMissionTrip) p.IsFilled = p.org.RegLimitCount(DbUtil.Db) >= p.org.Limit; if (p.IsFilled) { m.Log("Closed"); ModelState.AddModelError(m.GetNameFor(mm => mm.List[0].Found), "Sorry, but registration is closed."); } p.FillPriorInfo(); p.SetSpecialFee(); m.HistoryAdd($"index, pid={pid}, !showfamily, p.org, found=true"); return View(m); }
public Transaction CreateTransaction(CMSDataContext Db, decimal? amount = null, OnlineRegModel m = null) { if (!amount.HasValue) amount = AmtToPay; decimal? amtdue = null; if (Amtdue > 0) amtdue = Amtdue - (amount ?? 0); var ti = new Transaction { First = First, MiddleInitial = MiddleInitial.Truncate(1) ?? "", Last = Last, Suffix = Suffix, Donate = Donate, Regfees = AmtToPay, Amt = amount, Amtdue = amtdue, Emails = Email, Testing = testing, Description = Description, OrgId = OrgId, Url = URL, TransactionGateway = OnlineRegModel.GetTransactionGateway(), Address = Address.Truncate(50), Address2 = Address2.Truncate(50), City = City, State = State, Country = Country, Zip = Zip, DatumId = DatumId, Phone = Phone.Truncate(20), OriginalId = OriginalId, Financeonly = FinanceOnly, TransactionDate = DateTime.Now, PaymentType = Type, LastFourCC = Type == PaymentType.CreditCard ? CreditCard.Last(4) : null, LastFourACH = Type == PaymentType.Ach ? Account.Last(4) : null }; Db.Transactions.InsertOnSubmit(ti); Db.SubmitChanges(); if (OriginalId == null) // first transaction ti.OriginalId = ti.Id; return ti; }
public static string GetDescriptionForPayment(int? id) { try { var m = new OnlineRegModel(null, id, false, null, null, null); return m.DescriptionForPayment; } catch (Exception) { return null; } }
public OnlineRegPersonModel() { YesNoQuestion = new Dictionary<string, bool?>(); FundItem = new Dictionary<int, decimal?>(); Parent = HttpContext.Current.Items["OnlineRegModel"] as OnlineRegModel; }
public ActionResult AutoSaveProgress(OnlineRegModel m) { try { m.UpdateDatum(); } catch { } return Content(m.DatumId.ToString()); }
public static PaymentForm CreatePaymentForm(OnlineRegModel m) { var r = m.GetTransactionInfo(); if (r == null) return null; var pf = new PaymentForm { FormId = Guid.NewGuid(), AmtToPay = m.PayAmount() + (m.donation ?? 0), AskDonation = m.AskDonation(), AllowCoupon = !m.OnlineGiving(), PayBalance = false, Amtdue = m.TotalAmount() + (m.donation ?? 0), Donate = m.donation, Description = m.DescriptionForPayment, Email = r.Email, First = r.First, MiddleInitial = r.Middle, Last = r.Last, Suffix = r.Suffix, IsLoggedIn = m.UserPeopleId.HasValue, OrgId = m.List[0].orgid, URL = m.URL, testing = m.testing ?? false, Terms = m.Terms, Address = r.Address, Address2 = r.Address2, City = r.City, State = r.State, Country = r.Country, Zip = r.Zip, Phone = r.Phone #if DEBUG2 CreditCard = "4111111111111111", CVV = "123", Expires = "1017", Routing = "056008849", Account = "12345678901234" #endif }; if (r.payinfo.PeopleId == m.UserPeopleId) // Is this the logged in user? { pf.CreditCard = r.payinfo.MaskedCard; pf.Account = r.payinfo.MaskedAccount; pf.Routing = r.payinfo.Routing; pf.Expires = r.payinfo.Expires; pf.SavePayInfo = (r.payinfo.MaskedAccount != null && r.payinfo.MaskedAccount.StartsWith("X")) || (r.payinfo.MaskedCard != null && r.payinfo.MaskedCard.StartsWith("X")); pf.Type = r.payinfo.PreferredPaymentType; } ClearMaskedNumbers(pf, r.payinfo); pf.AllowSaveProgress = m.AllowSaveProgress(); pf.NoCreditCardsAllowed = m.NoCreditCardsAllowed(); if (m.OnlineGiving()) { #if DEBUG pf.NoCreditCardsAllowed = false; #else pf.NoCreditCardsAllowed = DbUtil.Db.Setting("NoCreditCardGiving", "false").ToBool(); #endif pf.IsGiving = true; pf.FinanceOnly = true; pf.Type = r.payinfo.PreferredGivingType; } else if (m.ManageGiving() || m.OnlinePledge()) { pf.FinanceOnly = true; } if (pf.NoCreditCardsAllowed) pf.Type = PaymentType.Ach; // bank account only else if (pf.NoEChecksAllowed) pf.Type = PaymentType.CreditCard; // credit card only pf.Type = pf.NoEChecksAllowed ? PaymentType.CreditCard : pf.Type; pf.DatumId = m.DatumId ?? 0; return pf; }
public ActionResult RegisterLinkMaster(int id) { var pid = TempData["PeopleId"] as int?; ViewBag.Token = TempData["token"]; var m = new OnlineRegModel {Orgid = id}; if (User.Identity.IsAuthenticated) return View(otherRegisterlinkmaster, m); if (pid == null) return Message("Must start with a registerlink"); SetHeaders(id.ToInt()); return View(otherRegisterlinkmaster, m); }
public Transaction ProcessPaymentTransaction(OnlineRegModel m) { var ti = (m?.Transaction != null) ? CreateTransaction(CurrentDatabase, m.Transaction, AmtToPay) : CreateTransaction(CurrentDatabase); int?pid = null; if (m != null) { m.ParseSettings(); pid = m.UserPeopleId; if (m.TranId == null) { m.TranId = ti.Id; } } if (!pid.HasValue) { var pds = CurrentDatabase.FindPerson(First, Last, null, Email, Phone); if (pds.Count() == 1) { pid = pds.Single().PeopleId.Value; } } TransactionResponse tinfo; var processType = m?.ProcessType ?? PaymentProcessTypes.OnlineRegistration; var gw = CurrentDatabase.Gateway(testing, null, processType); if (SavePayInfo) { tinfo = gw.PayWithVault(pid ?? 0, AmtToPay ?? 0, Description, ti.Id, Type); } else { tinfo = Type == PaymentType.Ach ? PayWithCheck(gw, pid, ti) : PayWithCreditCard(gw, pid, ti); } ti.TransactionId = tinfo.TransactionId; ti.Testing = CheckIfIsGatewayTesting(ti.Testing.GetValueOrDefault(), processType); if (ti.Testing.GetValueOrDefault() && !ti.TransactionId.Contains("(testing)")) { ti.TransactionId += "(testing)"; } ti.Approved = tinfo.Approved; transactionApproved = 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 = Util.Now; CurrentDatabase.SubmitChanges(); return(ti); }
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; }
public Transaction CreateTransaction(CMSDataContext Db, decimal?amount = null, OnlineRegModel m = null) { if (!amount.HasValue) { amount = AmtToPay; } decimal?amtdue = null; if (Amtdue > 0) { amtdue = Amtdue - (amount ?? 0); } var ti = new Transaction { First = First, MiddleInitial = MiddleInitial.Truncate(1) ?? "", Last = Last, Suffix = Suffix, Donate = Donate, Regfees = AmtToPay, Amt = amount, Amtdue = amtdue, Emails = Email, Testing = testing, Description = Description, OrgId = OrgId, Url = URL, TransactionGateway = OnlineRegModel.GetTransactionGateway(), Address = Address.Truncate(50), Address2 = Address2.Truncate(50), City = City, State = State, Country = Country, Zip = Zip, DatumId = DatumId, Phone = Phone.Truncate(20), OriginalId = OriginalId, Financeonly = FinanceOnly, TransactionDate = DateTime.Now, PaymentType = Type, LastFourCC = Type == PaymentType.CreditCard ? CreditCard.Last(4) : null, LastFourACH = Type == PaymentType.Ach ? Account.Last(4) : null }; Db.Transactions.InsertOnSubmit(ti); Db.SubmitChanges(); if (OriginalId == null) // first transaction { ti.OriginalId = ti.Id; } return(ti); }
public Transaction ProcessPaymentTransaction(OnlineRegModel m) { var ti = (m?.Transaction != null) ? CreateTransaction(DbUtil.Db, m.Transaction, AmtToPay) : CreateTransaction(DbUtil.Db); int? pid = null; if (m != null) { m.ParseSettings(); pid = m.UserPeopleId; if (m.TranId == null) m.TranId = ti.Id; } if (!pid.HasValue) { var pds = DbUtil.Db.FindPerson(First, Last, null, Email, Phone); if (pds.Count() == 1) pid = pds.Single().PeopleId.Value; } TransactionResponse tinfo; var gw = DbUtil.Db.Gateway(testing); if (SavePayInfo) tinfo = gw.PayWithVault(pid ?? 0, AmtToPay ?? 0, Description, ti.Id, Type); else { tinfo = Type == PaymentType.Ach ? PayWithCheck(gw, pid, ti) : PayWithCreditCard(gw, 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; }
public RouteModel ProcessPayment(ModelStateDictionary modelState, OnlineRegModel m) { PreventNegatives(); PreventZero(modelState); if (!modelState.IsValid) return RouteModel.ProcessPayment(); try { ValidatePaymentForm(modelState); if (!modelState.IsValid) return RouteModel.ProcessPayment(); if (m?.UserPeopleId != null && m.UserPeopleId > 0) CheckStoreInVault(modelState, m.UserPeopleId.Value); if (!modelState.IsValid) return RouteModel.ProcessPayment(); var ti = ProcessPaymentTransaction(m); if (ti.Approved == false) { modelState.AddModelError("form", ti.Message); return RouteModel.ProcessPayment(); } HttpContext.Current.Session["FormId"] = FormId; if (m != null) { m.DatumId = DatumId; // todo: not sure this is necessary return m.FinishRegistration(ti); } OnlineRegModel.ConfirmDuePaidTransaction(ti, ti.TransactionId, true); return RouteModel.AmountDue(AmountDueTrans(DbUtil.Db, ti), ti); } catch (Exception ex) { ErrorSignal.FromCurrentContext().Raise(ex); modelState.AddModelError("form", ex.Message); return RouteModel.ProcessPayment(); } }
public RouteModel ProcessPayment(ModelStateDictionary modelState, OnlineRegModel m) { if (m != null && m.email.HasValue() && !Util.ValidEmail(m.email)) { modelState.AddModelError("form", "Invalid email address"); return(RouteModel.Invalid("Payment/Process", "Invalid email address")); } PreventNegatives(); PreventZero(modelState); if (!modelState.IsValid) { return(RouteModel.ProcessPayment()); } try { if (!modelState.IsValid) { return(RouteModel.ProcessPayment()); } ValidatePaymentForm(modelState); if (!modelState.IsValid) { return(RouteModel.ProcessPayment()); } if (m?.UserPeopleId != null && m.UserPeopleId > 0) { CheckStoreInVault(modelState, m.UserPeopleId.Value); } if (!modelState.IsValid) { return(RouteModel.ProcessPayment()); } var ti = ProcessPaymentTransaction(m); if (ti.Approved == false) { modelState.AddModelError("form", ti.Message); return(RouteModel.ProcessPayment()); } HttpContextFactory.Current.Session["FormId"] = FormId; if (m != null) { m.DatumId = DatumId; // todo: not sure this is necessary return(m.FinishRegistration(ti)); } OnlineRegModel.ConfirmDuePaidTransaction(ti, ti.TransactionId, true); return(RouteModel.AmountDue(AmountDueTrans(CurrentDatabase, ti), ti)); } catch (Exception ex) { string errorMessage = ValidateTransactionApproved(transactionApproved, ex.Message); errorMessage = ValidateVaultId(ex, modelState); modelState.AddModelError("form", errorMessage); return(RouteModel.ProcessPayment()); } }
public void SetHeaders(OnlineRegModel m2) { Session["gobackurl"] = m2.URL; SetHeaders2(m2.Orgid ?? m2.masterorgid ?? 0); }