Beispiel #1
0
        public ActionResult OnePageGiving(int id, bool?testing, string source)
        {
            Response.NoCache();
            try
            {
                var m = new OnlineRegModel(Request, id, testing, null, null, source);

                var pid = Util.UserPeopleId;
                if (pid.HasValue)
                {
                    PrePopulate(m, pid.Value);
                }

                SetHeaders(m);
                m.CheckRegisterLink(null);

                var pf = PaymentForm.CreatePaymentForm(m);
                pf.AmtToPay = null;
                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;
            }
        }
Beispiel #2
0
        private async Task <ActionResult> RegistrationProcess(string paymentToken, string rf)
        {
            var rf1     = rf.Split('-');
            var datumId = Int32.Parse(rf1[0]);
            var amtDue  = Decimal.Parse(rf1[1]);

            OnlineRegModel    m     = new OnlineRegModel(CurrentDatabase);
            RegistrationDatum datum = CurrentDatabase.RegistrationDatas.SingleOrDefault(d => d.Id == datumId);

            if (datum == null)
            {
                throw new Exception("Datum not found");
            }

            m = Util.DeSerialize <OnlineRegModel>(datum.Data);
            m.CurrentDatabase = CurrentDatabase;
            PaymentForm pf = PaymentForm.CreatePaymentForm(m);

            var     merchantHandle = GetMerchantHandle(pf.OrgId.Value);
            Payment payment        = await _pushpayPayment.GetPayment(paymentToken, merchantHandle);

            if (_resolver.TransactionAlreadyImported(payment))
            {
                ViewBag.Message = "Payment already processed";
                return(View("~/Views/Shared/PageError.cshtml"));
            }

            m.transactionId = CreateTransaction(payment, pf, amtDue, m.Transaction);
            m.UpdateDatum();

            return(Redirect($"/OnlineReg/ProcessExternalPayment/dat_{datumId}"));
        }
Beispiel #3
0
        public ActionResult OnePageGiving(int id, bool?testing, string source)
        {
            Response.NoCache();
            try
            {
                var m = new OnlineRegModel(Request, id, testing, null, null, source);
                if (!m.ShouldPullSpecificFund())
                {
                    throw new Exception("Must be a single fund OnlineGiving organization");
                }
                SetHeaders(m);
                var pf = PaymentForm.CreatePaymentForm(m);
                pf.AmtToPay = null;
                pf.Type     = pf.NoCreditCardsAllowed ? "B" : "C";
                pf.First    = null;
                pf.Last     = null;
                pf.Email    = null;
                var p = m.List[0];
                if (pf.ShowCampusOnePageGiving)
                {
                    pf.Campuses = p.Campuses().ToList();
                }
                var funds = p.Funds();
                pf.Description = funds[0].Text;

#if DEBUG
                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
                SetInstructions(m);

                return(View("OnePageGiving/Index", pf));
            }
            catch (Exception ex)
            {
                if (ex is BadRegistrationException)
                {
                    return(Message(ex.Message));
                }
                throw;
            }
        }
        private async Task <ActionResult> RegistrationProcess(string paymentToken, int datumId)
        {
            OnlineRegModel    m     = new OnlineRegModel();
            RegistrationDatum datum = CurrentDatabase.RegistrationDatas.SingleOrDefault(d => d.Id == datumId);

            m = Util.DeSerialize <OnlineRegModel>(datum.Data);
            PaymentForm pf = PaymentForm.CreatePaymentForm(m);

            Payment payment = await _pushpayPayment.GetPayment(paymentToken);

            m.transactionId = CreateTransaction(payment, pf);

            m.UpdateDatum();
            return(Redirect($"/OnlineReg/ProcessExternalPayment/dat_{datumId}"));
        }
Beispiel #5
0
        public ActionResult ProcessExternalPayment(string reference)
        {
            PaymentForm pf = new PaymentForm()
            {
                extTransactionId = 0
            };

            if (reference.Substring(0, 3) == "dat")
            {
                RegistrationDatum datum = CurrentDatabase.RegistrationDatas.SingleOrDefault(d => d.Id == Int32.Parse(reference.Substring(4)));
                OnlineRegModel    m     = Util.DeSerialize <OnlineRegModel>(datum.Data);
                pf = PaymentForm.CreatePaymentForm(m);
            }
            if (reference.Substring(0, 3) == "tra")
            {
                pf.extTransactionId = Int32.Parse(reference.Substring(4));
            }

            return(ProcessPayment(pf));
        }
        public ActionResult Registration(int DatumId)
        {
            OnlineRegModel    m      = new OnlineRegModel();
            decimal?          Amount = 0;
            string            mobile = string.Empty;
            RegistrationDatum datum  = CurrentDatabase.RegistrationDatas.SingleOrDefault(d => d.Id == DatumId);

            if (datum != null)
            {
                m = Util.DeSerialize <OnlineRegModel>(datum.Data);
                var pf = PaymentForm.CreatePaymentForm(m);
                //Needs to redirect in case cupons are enable.
                Amount = pf.AmtToPay;
                mobile = CurrentDatabase.People.SingleOrDefault(p => p.PeopleId == m.UserPeopleId)?.CellPhone;
            }
            else
            {
                ViewBag.Message = "Something went wrong";
                CurrentDatabase.LogActivity($"No datum founded with id: {DatumId}");
                return(View("~/Views/Shared/PageError.cshtml"));
            }
            return(Redirect($"{_givingLink}?ru={_merchantHandle}&sr=dat_{DatumId}&rcv=false&r=no&up={mobile}&a={Amount}&al=true&fndv=lock"));
        }
Beispiel #7
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 #8
0
        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;
            }
        }
Beispiel #9
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 #10
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 #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);
        }