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); }
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; }
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); }