コード例 #1
0
        public int DoGiving(CMSDataContext db)
        {
            var q = (from a in db.RecurringAmounts
                     where a.PeopleId == PeopleId
                     where a.ContributionFund.FundStatusId == 1
                     where a.ContributionFund.OnlineSort != null
                     where a.Amt > 0
                     select new GivingConfirmation.FundItem()
            {
                Amt = a.Amt.Value,
                Desc = a.ContributionFund.FundName,
                Fundid = a.FundId
            }).ToList();
            var total = q.Sum(vv => vv.Amt);

            if (total == 0)
            {
                return(0);
            }

            var paymentInfo   = db.PaymentInfos.Single(x => x.PeopleId == PeopleId);
            var preferredType = paymentInfo.PreferredGivingType ?? paymentInfo.PreferredPaymentType;

            var gw = GetGateway(db, paymentInfo);

            var orgid = (from o in db.Organizations
                         where o.RegistrationTypeId == RegistrationTypeCode.ManageGiving
                         select o.OrganizationId).FirstOrDefault();

            var t = new Transaction
            {
                TransactionDate    = DateTime.Now,
                TransactionId      = "started",
                First              = Person.FirstName,
                MiddleInitial      = Person.MiddleName.Truncate(1) ?? "",
                Last               = Person.LastName,
                Suffix             = Person.SuffixCode,
                Amt                = total,
                Description        = "Recurring Giving",
                Testing            = false,
                TransactionGateway = gw.GatewayType,
                Financeonly        = true,
                PaymentType        = preferredType,
                LastFourCC         = preferredType == PaymentType.CreditCard ? paymentInfo.MaskedCard.Last(4) : null,
                LastFourACH        = preferredType == PaymentType.Ach ? paymentInfo.MaskedAccount.Last(4) : null,
                OrgId              = orgid,
                LoginPeopleId      = Person.PeopleId,
            };

            var vaultid = gw.VaultId(PeopleId);

            if (!vaultid.HasValue())
            {
                t.Message  = "Missing VaultId";
                t.Approved = false;
            }
            db.Transactions.InsertOnSubmit(t);
            db.SubmitChanges();
            if (!vaultid.HasValue())
            {
                return(0);
            }

            var ret = gw.PayWithVault(PeopleId, total, "Recurring Giving", t.Id, preferredType);

            t.Message       = ret.Message;
            t.AuthCode      = ret.AuthCode;
            t.Approved      = ret.Approved;
            t.TransactionId = ret.TransactionId;

            var gift   = db.Setting("NameForPayment", "gift");
            var church = db.Setting("NameOfChurch", db.CmsHost);
            var notify = db.RecurringGivingNotifyPersons();
            var staff  = notify[0];
            var from   = Util.TryGetMailAddress(staff.EmailAddress);

            if (ret.Approved)
            {
                NextDate = FindNextDate(Util.Now.Date.AddDays(1));
                db.SubmitChanges();
                var msg = db.Content("RecurringGiftNotice") ?? new Content
                {
                    Title = $"Recurring {gift} for {{church}}",
                    Body  = $"Your gift of {total:C} was processed this morning."
                };
                var body    = GivingConfirmation.PostAndBuild(db, staff, Person, msg.Body, orgid, q, t, "Recurring Giving");
                var subject = msg.Title.Replace("{church}", church);
                var m       = new EmailReplacements(db, body, from);
                body = m.DoReplacements(db, Person);
                db.EmailFinanceInformation(from, Person, null, subject, body);
            }
            else
            {
                t.TransactionPeople.Add(new TransactionPerson
                {
                    PeopleId = Person.PeopleId,
                    Amt      = t.Amt,
                    OrgId    = orgid,
                });
                db.SubmitChanges();
                var msg = db.Content("RecurringGiftFailedNotice") ?? new Content
                {
                    Title = $"Recurring {gift} for {{church}} did not succeed",
                    Body  = @"Your payment of {total} failed to process this morning.<br>
The message was '{message}'.
Please contact the Finance office at the church."
                };
                var subject = msg.Title.Replace("{church}", church);
                var body    = msg.Body.Replace("{total}", $"${total:N2}")
                              .Replace("{message}", ret.Message);
                var m = new EmailReplacements(db, body, from);
                body = m.DoReplacements(db, Person);

                db.Email(from, Person, null, subject, body, false);
                foreach (var p in db.RecurringGivingNotifyPersons())
                {
                    db.EmailFinanceInformation(from, p, null,
                                               $"Recurring Giving Failed on {db.CmsHost}",
                                               $"<a href='{db.CmsHost}/Transactions/{t.Id}'>message: {ret.Message}, tranid:{t.Id}</a>");
                }
            }
            return(1);
        }
コード例 #2
0
ファイル: ManagedGiving.cs プロジェクト: clearfunction/bvcms
        public int DoGiving(CMSDataContext db)
        {
            var total = (from a in db.RecurringAmounts
                         where a.PeopleId == PeopleId
                         where a.ContributionFund.FundStatusId == 1
                         where a.ContributionFund.OnlineSort != null
                         select a.Amt).Sum();

            if (!total.HasValue || total == 0)
                return 0;

            var paymentInfo = db.PaymentInfos.Single(x => x.PeopleId == PeopleId);
            var preferredType = paymentInfo.PreferredGivingType;

            var gw = GetGateway(db, paymentInfo);

            var orgid = (from o in db.Organizations
                             where o.RegistrationTypeId == RegistrationTypeCode.ManageGiving
                             select o.OrganizationId).FirstOrDefault();

            var t = new Transaction
            {
                TransactionDate = DateTime.Now,
                TransactionId = "started",
                First = Person.FirstName,
                MiddleInitial = Person.MiddleName.Truncate(1) ?? "",
                Last = Person.LastName,
                Suffix = Person.SuffixCode,
                Amt = total,
                Description = "Recurring Giving",
                Testing = false,
                TransactionGateway = gw.GatewayType,
                Financeonly = true,
                PaymentType = preferredType,
                LastFourCC = preferredType == PaymentType.CreditCard ? paymentInfo.MaskedCard.Last(4) : null,
                LastFourACH = preferredType == PaymentType.Ach ? paymentInfo.MaskedAccount.Last(4) : null,
                OrgId = orgid,
            };

            db.Transactions.InsertOnSubmit(t);
            db.SubmitChanges();

            var ret = gw.PayWithVault(PeopleId, total ?? 0, "Recurring Giving", t.Id, preferredType);

            t.Message = ret.Message;
            t.AuthCode = ret.AuthCode;
            t.Approved = ret.Approved;
            t.TransactionId = ret.TransactionId;

            var gift = db.Setting("NameForPayment", "gift");
            var church = db.Setting("NameOfChurch", db.CmsHost);
            var q = from a in db.RecurringAmounts
                    where a.PeopleId == PeopleId
                    select a;
            var tot = q.Where(aa => aa.ContributionFund.FundStatusId == 1).Sum(aa => aa.Amt);
            t.TransactionPeople.Add(new TransactionPerson
            {
                PeopleId = Person.PeopleId,
                Amt = tot,
            });
            var notify = db.RecurringGivingNotifyPersons();
            var from = Util.TryGetMailAddress(notify[0].EmailAddress);
            if (ret.Approved)
            {
                foreach (var a in q)
                {
                    if (a.ContributionFund.FundStatusId == 1 && a.ContributionFund.OnlineSort != null && a.Amt > 0)
                        Person.PostUnattendedContribution(db, a.Amt ?? 0, a.FundId, "Recurring Giving", tranid: t.Id);
                }

                NextDate = FindNextDate(Util.Now.Date.AddDays(1));
                db.SubmitChanges();
                if (tot > 0)
                {
                    var msg = db.Content("RecurringGiftNotice") ?? new Content
                              { Title = $"Recurring {gift} for {{church}}",
                                Body = "Your gift of {total} was processed this morning." };
                    var subject = msg.Title.Replace("{church}", church);
                    var body = msg.Body.Replace("{total}", $"${tot:N2}");
                    var m = new EmailReplacements(db, body, from);
                    body = m.DoReplacements(db, Person);
                    db.EmailFinanceInformation(from, Person, null, subject, body);
                }
            }
            else
            {
                db.SubmitChanges();
                var msg = db.Content("RecurringGiftFailedNotice") ?? new Content
                          { Title = $"Recurring {gift} for {{church}} did not succeed",
                            Body = @"Your payment of {total} failed to process this morning.<br>
            The message was '{message}'.
            Please contact the Finance office at the church." };
                var subject = msg.Title.Replace("{church}", church);
                var body = msg.Body.Replace("{total}", $"${tot:N2}")
                    .Replace("{message}", ret.Message);
                var m = new EmailReplacements(db, body, from);
                body = m.DoReplacements(db, Person);

                db.Email(from, Person, null, subject, body, false);
                foreach (var p in db.RecurringGivingNotifyPersons())
                    db.EmailFinanceInformation(from, p, null,
                        $"Recurring Giving Failed on {db.CmsHost}",
                        $"<a href='{db.CmsHost}/Transactions/{t.Id}'>message: {ret.Message}, tranid:{t.Id}</a>");
            }
            return 1;
        }
コード例 #3
0
        public int DoGiving(CMSDataContext db)
        {
            var total = (from a in db.RecurringAmounts
                         where a.PeopleId == PeopleId
                         where a.ContributionFund.FundStatusId == 1
                         where a.ContributionFund.OnlineSort != null
                         select a.Amt).Sum();

            if (!total.HasValue || total == 0)
            {
                return(0);
            }

            var paymentInfo   = db.PaymentInfos.Single(x => x.PeopleId == PeopleId);
            var preferredType = paymentInfo.PreferredGivingType;

            var gw = GetGateway(db, paymentInfo);

            var t = new Transaction
            {
                TransactionDate    = DateTime.Now,
                TransactionId      = "started",
                First              = Person.FirstName,
                MiddleInitial      = Person.MiddleName.Truncate(1) ?? "",
                Last               = Person.LastName,
                Suffix             = Person.SuffixCode,
                Amt                = total,
                Description        = "Recurring Giving",
                Testing            = false,
                TransactionGateway = gw.GatewayType,
                Financeonly        = true,
                PaymentType        = preferredType,
                LastFourCC         = preferredType == PaymentType.CreditCard ? paymentInfo.MaskedCard.Last(4) : null,
                LastFourACH        = preferredType == PaymentType.Ach ? paymentInfo.MaskedAccount.Last(4) : null
            };

            db.Transactions.InsertOnSubmit(t);
            db.SubmitChanges();

            var ret = gw.PayWithVault(PeopleId, total ?? 0, "Recurring Giving", t.Id, preferredType);

            t.Message       = ret.Message;
            t.AuthCode      = ret.AuthCode;
            t.Approved      = ret.Approved;
            t.TransactionId = ret.TransactionId;
            var systemEmail = db.Setting("SystemEmailAddress", "*****@*****.**");

            var contributionemail = (from ex in Person.PeopleExtras
                                     where ex.Field == "ContributionEmail"
                                     select ex.Data).SingleOrDefault();

            if (contributionemail.HasValue())
            {
                contributionemail = contributionemail.Trim();
            }
            if (!Util.ValidEmail(contributionemail))
            {
                contributionemail = Person.FromEmail;
            }
            var gift   = db.Setting("NameForPayment", "gift");
            var church = db.Setting("NameOfChurch", db.CmsHost);
            var q      = from a in db.RecurringAmounts
                         where a.PeopleId == PeopleId
                         select a;
            var tot = q.Where(aa => aa.ContributionFund.FundStatusId == 1).Sum(aa => aa.Amt);

            t.TransactionPeople.Add(new TransactionPerson
            {
                PeopleId = Person.PeopleId,
                Amt      = tot,
            });
            if (ret.Approved)
            {
                foreach (var a in q)
                {
                    if (a.ContributionFund.FundStatusId == 1 && a.ContributionFund.OnlineSort != null && a.Amt > 0)
                    {
                        Person.PostUnattendedContribution(db, a.Amt ?? 0, a.FundId, "Recurring Giving", tranid: t.Id);
                    }
                }

                NextDate = FindNextDate(Util.Now.Date.AddDays(1));
                db.SubmitChanges();
                if (tot > 0)
                {
                    var msg = db.Content("RecurringGiftNotice") ?? new Content
                    {
                        Title = $"Recurring {gift} for {{church}}",
                        Body  = "Your payment of {total} was processed this morning."
                    };
                    var subject = msg.Title.Replace("{church}", church);
                    var body    = msg.Body.Replace("{total}", $"${tot:N2}");
                    var from    = Util.TryGetMailAddress(contributionemail);
                    var m       = new EmailReplacements(db, body, from);
                    body = m.DoReplacements(db, Person);
                    Util.SendMsg(systemEmail, db.CmsHost, from, subject, body,
                                 Util.ToMailAddressList(contributionemail), 0, Person.PeopleId);
                }
            }
            else
            {
                db.SubmitChanges();
                var msg = db.Content("RecurringGiftFailedNotice") ?? new Content
                {
                    Title = $"Recurring {gift} for {{church}} did not succeed",
                    Body  = @"Your payment of {total} failed to process this morning.<br>
The message was '{message}'.
Please contact the Finance office at the church."
                };
                var subject = msg.Title.Replace("{church}", church);
                var body    = msg.Body.Replace("{total}", $"${tot:N2}")
                              .Replace("{message}", ret.Message);
                var from = Util.TryGetMailAddress(contributionemail);
                var m    = new EmailReplacements(db, body, from);
                body = m.DoReplacements(db, Person);

                var adminEmail = db.Setting("AdminMail", systemEmail);
                Util.SendMsg(systemEmail, db.CmsHost, from, subject, body,
                             Util.ToMailAddressList(contributionemail), 0, Person.PeopleId);
                foreach (var p in db.RecurringGivingNotifyPersons())
                {
                    Util.SendMsg(systemEmail, db.CmsHost, Util.TryGetMailAddress(adminEmail),
                                 "Recurring Giving Failed on " + db.CmsHost,
                                 $"<a href='{db.CmsHost}/Transactions/{t.Id}'>message: {ret.Message}, tranid:{t.Id}</a>",
                                 Util.ToMailAddressList(p.EmailAddress), 0, Person.PeopleId);
                }
            }
            return(1);
        }