コード例 #1
0
        internal void PostTransaction()
        {
            var reason = TransactionSummary == null
                ? "Inital Tran"
                : "Adjustment";

            if (isMissionTrip)
            {
                if (TransactionSummary == null)
                {
                    om.AddToGroup(DbUtil.Db, "Goer");
                    om.Amount = Amount;
                }
                if (AdjustFee == false && Payment > 0)
                {
                    var gs = new GoerSenderAmount
                    {
                        GoerId      = om.PeopleId,
                        SupporterId = om.PeopleId,
                        Amount      = Payment,
                        OrgId       = om.OrganizationId,
                        Created     = DateTime.Now,
                    };
                    DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(gs);
                }
            }
            om.AddTransaction(DbUtil.Db, reason, Payment ?? 0, Description, Amount, AdjustFee);
        }
コード例 #2
0
        internal void PostTransaction(ModelStateDictionary modelState)
        {
            if (TransactionSummary != null && (Payment ?? 0) == 0)
            {
                modelState.AddModelError("Payment", "must have non zero value");
            }

            if (TransactionSummary == null && (Amount ?? 0) == 0)
            {
                modelState.AddModelError("Amount", "Initial Fee Must be > 0");
            }

            if (!modelState.IsValid)
            {
                return;
            }

            var reason = TransactionSummary == null
                ? "Initial Tran"
                : AdjustFee
                    ? "AdjustFee"
                    : "Adjustment";

            if (isMissionTrip)
            {
                if (TransactionSummary == null)
                {
                    om.AddToGroup(DbUtil.Db, "Goer");
                    om.Amount = Amount;
                }
                if (AdjustFee == false && (Payment ?? 0) != 0)
                {
                    var gs = new GoerSenderAmount
                    {
                        GoerId      = om.PeopleId,
                        SupporterId = om.PeopleId,
                        Amount      = Payment,
                        OrgId       = om.OrganizationId,
                        Created     = DateTime.Now,
                    };
                    DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(gs);
                }
            }
            var descriptionForPayment = OnlineRegModel.GetDescriptionForPayment(OrgId);

            om.AddTransaction(DbUtil.Db, reason, Payment ?? 0, Description, Amount, AdjustFee, descriptionForPayment);
            var showcount = "";

            if (TransactionSummary != null && TransactionSummary.NumPeople > 1)
            {
                showcount = $"({TransactionSummary.NumPeople}) ";
            }

            DbUtil.LogActivity($"OrgMem{showcount} {reason}", OrgId, PeopleId);
        }
コード例 #3
0
ファイル: EnrollAndConfirm.cs プロジェクト: suraninoman/bvcms
        private bool DoMissionTripSupporter()
        {
            var notifyIds = GetNotifyIds();
            var p         = List[0];

            Transaction.Fund = p.setting.DonationFund();
            var goerid = p.Parent.GoerId > 0
                ? p.Parent.GoerId
                : p.MissionTripGoerId;
            var forgoer    = "";
            var forgeneral = "";

            if (p.MissionTripSupportGoer > 0 && p.orgid.HasValue && p.PeopleId.HasValue)
            {
                var gsa = new GoerSenderAmount
                {
                    Amount         = p.MissionTripSupportGoer ?? 0,
                    Created        = DateTime.Now,
                    OrgId          = p.orgid.Value,
                    SupporterId    = p.PeopleId.Value,
                    NoNoticeToGoer = p.MissionTripNoNoticeToGoer
                };
                if (goerid > 0)
                {
                    gsa.GoerId = goerid;
                }
                DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(gsa);
                if (p.Parent.GoerSupporterId.HasValue)
                {
                    var gs = DbUtil.Db.GoerSupporters.Single(gg => gg.Id == p.Parent.GoerSupporterId);
                    if (!gs.SupporterId.HasValue)
                    {
                        gs.SupporterId = p.PeopleId;
                    }
                }
                if (!Transaction.TransactionId.StartsWith("Coupon"))
                {
                    p.person.PostUnattendedContribution(DbUtil.Db,
                                                        p.MissionTripSupportGoer ?? 0, p.setting.DonationFundId,
                                                        $"SupportMissionTrip: org={p.orgid}; goer={goerid}", tranid: Transaction.Id);
                    Log("GoerSupport");
                    // send notices
                    if (goerid > 0 && !p.MissionTripNoNoticeToGoer)
                    {
                        var goer = DbUtil.Db.LoadPersonById(goerid.Value);
                        forgoer = $", {p.MissionTripSupportGoer:c} for {goer.Name}";
                        DbUtil.Db.Email(notifyIds[0].FromEmail, goer, org.OrganizationName + "-donation",
                                        $"{p.MissionTripSupportGoer ?? 0:C} donation received from {Transaction.FullName(Transaction)}{forgoer}");
                    }
                }
            }
            if (p.MissionTripSupportGeneral > 0 && p.orgid.HasValue && p.PeopleId.HasValue)
            {
                DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(
                    new GoerSenderAmount
                {
                    Amount      = p.MissionTripSupportGeneral ?? 0,
                    Created     = DateTime.Now,
                    OrgId       = p.orgid.Value,
                    SupporterId = p.PeopleId.Value
                });
                forgeneral = $", ({p.MissionTripSupportGeneral ?? 0:c}) for trip";
                if (!Transaction.TransactionId.StartsWith("Coupon"))
                {
                    p.person.PostUnattendedContribution(DbUtil.Db,
                                                        p.MissionTripSupportGeneral ?? 0, p.setting.DonationFundId,
                                                        "SupportMissionTrip: org=" + p.orgid, tranid: Transaction.Id);
                    Log("TripSupport");
                }
            }
            var notifyids = DbUtil.Db.NotifyIds(org.GiftNotifyIds);

            DbUtil.Db.Email(notifyIds[0].FromEmail, notifyids, org.OrganizationName + "-donation",
                            $"${Transaction.Amt:N2} donation received from {Transaction.FullName(Transaction)}{forgoer}{forgeneral}");

            var orgsettings   = settings[org.OrganizationId];
            var senderSubject = orgsettings.SenderSubject ?? "NO SUBJECT SET";
            var senderBody    = orgsettings.SenderBody ?? "NO SENDEREMAIL MESSAGE HAS BEEN SET";

            senderBody = APIOrganization.MessageReplacements(DbUtil.Db, p.person,
                                                             org.DivisionName, org.OrganizationId, org.OrganizationName, org.Location, senderBody);
            senderBody = senderBody.Replace("{phone}", org.PhoneNumber.FmtFone7());
            senderBody = senderBody.Replace("{paid}", Transaction.Amt.ToString2("c"));

            //Transaction.Description = "Mission Trip Giving";
            DbUtil.Db.Email(notifyids[0].FromEmail, p.person, listMailAddress, senderSubject, senderBody, false);
            DbUtil.Db.SubmitChanges();
            return(true);
        }
コード例 #4
0
        public void EnrollAndConfirm()
        {
            if (masterorgid.HasValue)
            {
                EnrollAndConfirm2();
                return;
            }
            var Db = DbUtil.Db;
            var ti = Transaction;
            // make a list of email addresses
            var elist = new List <MailAddress>();

            if (UserPeopleId.HasValue)
            {
                if (user.SendEmailAddress1 ?? true)
                {
                    Util.AddGoodAddress(elist, user.FromEmail);
                }
                if (user.SendEmailAddress2 ?? false)
                {
                    Util.AddGoodAddress(elist, user.FromEmail2);
                }
            }
            if (registertag.HasValue())
            {
                var guid = registertag.ToGuid();
                var ot   = DbUtil.Db.OneTimeLinks.SingleOrDefault(oo => oo.Id == guid.Value);
                ot.Used = true;
            }
            var participants = new StringBuilder();

            for (var i = 0; i < List.Count; i++)
            {
                var p = List[i];
                if (p.IsNew)
                {
                    Person uperson = null;
                    switch (p.whatfamily)
                    {
                    case 1:
                        uperson = Db.LoadPersonById(UserPeopleId.Value);
                        break;

                    case 2:
                        if (i > 0)
                        {
                            uperson = List[i - 1].person;
                        }
                        break;
                    }
                    p.AddPerson(uperson, p.org.EntryPointId ?? 0);
                }

                Util.AddGoodAddress(elist, p.fromemail);
                participants.Append(p.ToString());
            }
            var p0 = List[0].person;

            if (this.user != null)
            {
                p0 = user;
            }

            //var emails = string.Join(",", elist.ToArray());
            string paylink = string.Empty;
            var    amtpaid = ti.Amt ?? 0;
            var    amtdue  = ti.Amtdue;

            var pids2 = new List <TransactionPerson>();

            foreach (var p in List)
            {
                if (p.PeopleId == null)
                {
                    return;
                }
                if (pids2.Any(pp => pp.PeopleId == p.PeopleId))
                {
                    continue;
                }
                pids2.Add(new TransactionPerson
                {
                    PeopleId = p.PeopleId.Value,
                    Amt      = p.TotalAmount(),
                    OrgId    = Orgid,
                });
            }

            if (SupportMissionTrip && GoerId == _list[0].PeopleId)
            {
                // reload transaction because it is not in this context
                var om = Db.OrganizationMembers.SingleOrDefault(mm => mm.PeopleId == GoerId && mm.OrganizationId == Orgid);
                if (om != null && om.TranId.HasValue)
                {
                    ti.OriginalId = om.TranId;
                }
            }
            else
            {
                ti.OriginalTrans.TransactionPeople.AddRange(pids2);
            }

            ti.Emails          = Util.EmailAddressListToString(elist);
            ti.Participants    = participants.ToString();
            ti.TransactionDate = DateTime.Now;

            if (org.IsMissionTrip == true)
            {
                paylink = DbUtil.Db.ServerLink("/OnlineReg/{0}?goerid={1}".Fmt(Orgid, p0.PeopleId));
            }
            else
            {
                var estr = HttpUtility.UrlEncode(Util.Encrypt(ti.OriginalId.ToString()));
                paylink = DbUtil.Db.ServerLink("/OnlineReg/PayAmtDue?q=" + estr);
            }
            var pids = pids2.Select(pp => pp.PeopleId);

            for (var i = 0; i < List.Count; i++)
            {
                var p = List[i];

                var q = from pp in Db.People
                        where pids.Contains(pp.PeopleId)
                        where pp.PeopleId != p.PeopleId
                        select pp.Name;
                var others = string.Join(",", q.ToArray());

                var om = p.Enroll(ti, paylink, testing, others);
                om.RegisterEmail = p.EmailAddress;

                if (om.TranId == null)
                {
                    om.TranId = ti.OriginalId;
                }

                int grouptojoin = p.setting.GroupToJoin.ToInt();
                if (grouptojoin > 0)
                {
                    OrganizationMember.InsertOrgMembers(Db, grouptojoin, p.PeopleId.Value, MemberTypeCode.Member, DateTime.Now, null, false);
                    DbUtil.Db.UpdateMainFellowship(grouptojoin);
                }

                OnlineRegPersonModel.CheckNotifyDiffEmails(p.person,
                                                           Db.StaffEmailForOrg(p.org.OrganizationId),
                                                           p.fromemail,
                                                           p.org.OrganizationName,
                                                           p.org.PhoneNumber);
                if (p.IsCreateAccount())
                {
                    p.CreateAccount();
                }
            }
            Db.SubmitChanges();

            var details = new StringBuilder("<table cellpadding='4'>");

            if (ti.Amt > 0)
            {
                details.AppendFormat(@"
<tr><td colspan='2'>
    <table cellpadding='4'>
        <tr><td>Total Paid</td><td>Total Due</td></tr>
        <tr><td align='right'>{0:c}</td><td align='right'>{1:c}</td></tr>
    </table>
    </td>
</tr>
", amtpaid, amtdue);
            }

            for (var i = 0; i < List.Count; i++)
            {
                var p = List[i];
                details.AppendFormat(@"
<tr><td colspan='2'><hr/></td></tr>
<tr><th valign='top'>{0}</th><td>
{1}
</td></tr>", i + 1, p.PrepareSummaryText(ti));
            }
            details.Append("\n</table>\n");

            var DivisionName = org.DivisionName;

            var os           = settings[Orgid.Value];
            var EmailSubject = Util.PickFirst(os.Subject, "no subject");
            var EmailMessage = Util.PickFirst(os.Body, "no body");

            bool usedAdmins;
            var  NotifyIds = Db.StaffPeopleForOrg(org.OrganizationId, out usedAdmins);

            var Location = org.Location;

            var subject = Util.PickFirst(EmailSubject, "no subject");
            var message = Util.PickFirst(EmailMessage, "no message");

            message = CmsData.API.APIOrganization.MessageReplacements(DbUtil.Db, p0, DivisionName, org.OrganizationName, Location, message);
            subject = subject.Replace("{org}", Header);

            message = message.Replace("{phone}", org.PhoneNumber.FmtFone7())
                      .Replace("{tickets}", List[0].ntickets.ToString())
                      .Replace("{details}", details.ToString())
                      .Replace("{paid}", amtpaid.ToString("c"))
                      .Replace("{sessiontotal}", amtpaid.ToString("c"))
                      .Replace("{participants}", details.ToString());
            if (amtdue > 0)
            {
                message = message.Replace("{paylink}", "<a href='{0}'>Click this link to make a payment on your balance of {1:C}</a>.".Fmt(paylink, amtdue));
            }
            else
            {
                message = message.Replace("{paylink}", "You have a zero balance.");
            }

            if (SupportMissionTrip && TotalAmount() > 0)
            {
                var p = List[0];
                ti.Fund = p.setting.DonationFund();
                var goerid = p.Parent.GoerId ?? p.MissionTripGoerId;
                if (p.MissionTripSupportGoer > 0)
                {
                    var gsa = new GoerSenderAmount
                    {
                        Amount         = p.MissionTripSupportGoer.Value,
                        Created        = DateTime.Now,
                        OrgId          = p.orgid.Value,
                        SupporterId    = p.PeopleId.Value,
                        NoNoticeToGoer = p.MissionTripNoNoticeToGoer,
                    };
                    if (goerid > 0)
                    {
                        gsa.GoerId = goerid;
                    }
                    DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(gsa);
                    if (p.Parent.GoerSupporterId.HasValue)
                    {
                        var gs = DbUtil.Db.GoerSupporters.Single(gg => gg.Id == p.Parent.GoerSupporterId);
                        if (!gs.SupporterId.HasValue)
                        {
                            gs.SupporterId = p.PeopleId;
                        }
                    }
                    if (!ti.TransactionId.StartsWith("Coupon"))
                    {
                        p.person.PostUnattendedContribution(DbUtil.Db,
                                                            p.MissionTripSupportGoer.Value, p.setting.DonationFundId,
                                                            "SupportMissionTrip: org={0}; goer={1}".Fmt(p.orgid, goerid), tranid: ti.Id);
                        // send notices
                        if (goerid > 0 && !p.MissionTripNoNoticeToGoer)
                        {
                            var goer = DbUtil.Db.LoadPersonById(goerid.Value);
                            Db.Email(NotifyIds[0].FromEmail, goer, org.OrganizationName + "-donation",
                                     "{0:C} donation received from {1}".Fmt(p.MissionTripSupportGoer.Value,
                                                                            Transaction.FullName(ti)));
                        }
                    }
                }
                if (p.MissionTripSupportGeneral > 0)
                {
                    DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(
                        new GoerSenderAmount
                    {
                        Amount      = p.MissionTripSupportGeneral.Value,
                        Created     = DateTime.Now,
                        OrgId       = p.orgid.Value,
                        SupporterId = p.PeopleId.Value
                    });
                    if (!ti.TransactionId.StartsWith("Coupon"))
                    {
                        p.person.PostUnattendedContribution(DbUtil.Db,
                                                            p.MissionTripSupportGeneral.Value, p.setting.DonationFundId,
                                                            "SupportMissionTrip: org={0}".Fmt(p.orgid), tranid: ti.Id);
                    }
                }
                var notifyids = Db.NotifyIds(org.OrganizationId, org.GiftNotifyIds);
                Db.Email(NotifyIds[0].FromEmail, notifyids, org.OrganizationName + "-donation",
                         "${0:N2} donation received from {1}".Fmt(ti.Amt, Transaction.FullName(ti)));

                var senderSubject = os.SenderSubject ?? "NO SUBJECT SET";
                var senderBody    = os.SenderBody ?? "NO SENDEREMAIL MESSAGE HAS BEEN SET";
                senderBody = CmsData.API.APIOrganization.MessageReplacements(DbUtil.Db, p.person, DivisionName, org.OrganizationName, Location, senderBody);
                senderBody = senderBody.Replace("{phone}", org.PhoneNumber.FmtFone7());
                senderBody = senderBody.Replace("{paid}", ti.Amt.ToString2("c"));

                ti.Description = "Mission Trip Giving";
                Db.Email(notifyids[0].FromEmail, p.person, elist, senderSubject, senderBody, false);
                Db.SubmitChanges();
                return;
            }

            if (!SupportMissionTrip && org != null && org.IsMissionTrip == true && ti.Amt > 0)
            {
                var p = List[0];
                ti.Fund = p.setting.DonationFund();

                DbUtil.Db.GoerSenderAmounts.InsertOnSubmit(
                    new GoerSenderAmount
                {
                    Amount      = ti.Amt,
                    GoerId      = p.PeopleId,
                    Created     = DateTime.Now,
                    OrgId       = p.orgid.Value,
                    SupporterId = p.PeopleId.Value
                });
                if (!ti.TransactionId.StartsWith("Coupon"))
                {
                    p.person.PostUnattendedContribution(DbUtil.Db,
                                                        ti.Amt.Value, p.setting.DonationFundId,
                                                        "MissionTrip: org={0}; goer={1}".Fmt(p.orgid, p.PeopleId), tranid: ti.Id);
                    ti.Description = "Mission Trip Giving";
                }
            }
            else if (ti.Donate > 0)
            {
                var p = List[donor.Value];
                ti.Fund = p.setting.DonationFund();
                var desc = "{0}; {1}; {2}, {3} {4}".Fmt(
                    p.person.Name,
                    p.person.PrimaryAddress,
                    p.person.PrimaryCity,
                    p.person.PrimaryState,
                    p.person.PrimaryZip);
                if (!ti.TransactionId.StartsWith("Coupon"))
                {
                    p.person.PostUnattendedContribution(DbUtil.Db, ti.Donate.Value, p.setting.DonationFundId, desc, tranid: ti.Id);
                }
                var ma = donationtext.Match(message);
                if (ma.Success)
                {
                    var v = ma.Groups["text"].Value;
                    message = donationtext.Replace(message, v);
                }
                message = message.Replace("{donation}", ti.Donate.ToString2("N2"));
                // send donation confirmations
                Db.Email(NotifyIds[0].FromEmail, NotifyIds, subject + "-donation",
                         "${0:N2} donation received from {1}".Fmt(ti.Donate, Transaction.FullName(ti)));
            }
            else
            {
                message = donationtext.Replace(message, "");
            }

            Db.CurrentOrgId = Orgid;
            // send confirmations
            if (subject != "DO NOT SEND")
            {
                Db.Email(NotifyIds[0].FromEmail, p0, elist,
                         subject, message, false);
            }

            Db.SubmitChanges();
            // notify the staff
            var n = 0;

            foreach (var p in List)
            {
                var tt = pids2.Single(vv => vv.PeopleId == p.PeopleId);
                Db.Email(Util.PickFirst(p.person.FromEmail, NotifyIds[0].FromEmail), NotifyIds, Header,
                         @"{7}{0} has registered for {1}<br/>
Total Fee for this registrant: {2:C}<br/>
Total Fee for this registration: {3:C}<br/>
Total Fee paid today: {4:C}<br/>
AmountDue: {5:C}<br/>
<pre>{6}</pre>".Fmt(p.person.Name,
                    Header,
                    p.TotalAmount(),
                    TotalAmount(),
                    amtpaid,
                    amtdue,     // Amount Due
                    p.PrepareSummaryText(ti),
                    usedAdmins ? @"<span style='color:red'>THERE ARE NO NOTIFY IDS ON THIS REGISTRATION!!</span><br/>
<a href='http://docs.bvcms.com/OnlineRegistration/MessagesSettings.html'>see documentation</a><br/><br/>" : ""));
            }
        }