internal Expression NonTaxDedAmountDonorOnly() { var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt(); var amt = TextValue.ToDecimal() ?? 0; return(ContributionAmount2(StartDate, EndDate, fund, amt, true, false)); }
internal Expression RecentContributionCount() { var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt(); var cnt = TextValue.ToInt(); return(RecentContributionCount2(Days, fund, cnt, false)); }
internal Expression RecentNonTaxDedAmount() { var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt(); var amt = TextValue.ToDecimal() ?? 0; return(RecentContributionAmount2(Days, fund, amt, true)); }
internal Expression HasManagedGiving() { if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var tf = CodeIds == "1"; var fundid = Quarters.AllDigits() ? Quarters.ToInt2() : db.Setting(Quarters, "").ToInt2(); Expression <Func <Person, bool> > pred = p => (from e in p.RecurringAmounts where e.Amt > 0 where fundid == null || fundid == e.FundId select e).Any(); Expression expr = Expression.Convert(Expression.Invoke(pred, parm), typeof(bool)); if (op == CompareType.Equal ^ tf) { expr = Expression.Not(expr); } return(expr); }
internal Expression IsFamilyPledger() { var tf = CodeIds == "1"; var fundid = Quarters.AllDigits() ? Quarters.ToInt2() : db.Setting(Quarters, "").ToInt2(); var td = Util.Now; var fd = td.AddDays(Days == 0 ? -365 : -Days).Date; Tag tag = null; if (op == CompareType.Equal ^ tf) { var q = db.FamilyGiver(fd, td, fundid).Where(vv => vv.FamPledge == false); tag = db.PopulateTemporaryTag(q.Select(pp => pp.PeopleId)); } else { var q = db.FamilyGiver(fd, td, fundid).Where(vv => vv.FamPledge == true); tag = db.PopulateTemporaryTag(q.Select(pp => pp.PeopleId)); } Expression <Func <Person, bool> > pred = p => p.Tags.Any(t => t.Id == tag.Id); Expression expr = Expression.Invoke(pred, parm); return(expr); }
public Expression IsRecentGiver() { if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var tf = CodeIds == "1"; var fundid = Quarters.AllDigits() ? Quarters.ToInt2() : db.Setting(Quarters, "").ToInt2(); var q = fundid > 0 ? db.RecentGiverFund(Days, fundid).Select(v => v.PeopleId.Value) : db.RecentGiver(Days).Select(v => v.PeopleId.Value); var tag = db.PopulateTemporaryTag(q); Expression <Func <Person, bool> > pred = null; /* * if (op == CompareType.Equal ^ tf) * IS EQUIVALENT TO AND JUST A SIMPLER WAY TO SAY * if ((op == CompareType.NotEqual && tf == true) || (op == CompareType.Equal && tf == false)) * IN OTHER WORDS (not equal true) IS THE SAME AS (equal false) */ if (op == CompareType.Equal ^ tf) { pred = p => !db.TagPeople.Where(vv => vv.Id == tag.Id).Select(vv => vv.PeopleId).Contains(p.PeopleId); } else { pred = p => db.TagPeople.Where(vv => vv.Id == tag.Id).Select(vv => vv.PeopleId).Contains(p.PeopleId); } Expression expr = Expression.Invoke(pred, parm); return(expr); }
internal Expression RecentPledgeAmount() { if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var fund = Quarters.AllDigits() ? Quarters.ToInt2() : db.Setting(Quarters, "").ToInt2(); var amt = TextValue.ToDecimal() ?? 0; var now = Util.Now; var dt = now.AddDays(-Days).Date; IQueryable <int> q = null; switch (op) { case CompareType.Greater: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund group c by c.CreditGiverId into g where g.Sum(cc => cc.PledgeAmount) > amt select g.Key ?? 0; break; case CompareType.GreaterEqual: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund group c by c.CreditGiverId into g where g.Sum(cc => cc.PledgeAmount) >= amt select g.Key ?? 0; break; case CompareType.Less: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.Amount > 0 group c by c.CreditGiverId into g where g.Sum(cc => cc.PledgeAmount) < amt select g.Key ?? 0; break; case CompareType.LessEqual: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.Amount > 0 group c by c.CreditGiverId into g where g.Sum(cc => cc.PledgeAmount) <= amt select g.Key ?? 0; break; case CompareType.Equal: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.Amount > 0 group c by c.CreditGiverId into g where g.Sum(cc => cc.PledgeAmount) == amt select g.Key ?? 0; break; case CompareType.NotEqual: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.Amount > 0 group c by c.CreditGiverId into g where g.Sum(cc => cc.PledgeAmount) != amt select g.Key ?? 0; break; } var tag = db.PopulateTemporaryTag(q); Expression <Func <Person, bool> > pred = p => p.Tags.Any(t => t.Id == tag.Id); Expression expr = Expression.Invoke(pred, parm); return(expr); }
internal Expression RecentPledgeCount() { if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var fund = Quarters.AllDigits() ? Quarters.ToInt2() : db.Setting(Quarters, "").ToInt2(); var cnt = TextValue.ToInt(); var now = Util.Now; var dt = now.AddDays(-Days).Date; IQueryable <int> q = null; switch (op) { case CompareType.Greater: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.PledgeAmount > 0 group c by c.CreditGiverId into g where g.Count() > cnt select g.Key ?? 0; break; case CompareType.GreaterEqual: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.PledgeAmount > 0 group c by c.CreditGiverId into g where g.Count() >= cnt select g.Key ?? 0; break; case CompareType.Less: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.PledgeAmount > 0 group c by c.CreditGiverId into g where g.Count() < cnt select g.Key ?? 0; break; case CompareType.LessEqual: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.PledgeAmount > 0 group c by c.CreditGiverId into g where g.Count() <= cnt select g.Key ?? 0; break; case CompareType.Equal: if (cnt == 0) // special case, use different approach { q = from pid in db.Pledges0(dt, now, fund, 0) select pid.PeopleId; Expression <Func <Person, bool> > pred0 = p => q.Contains(p.PeopleId); Expression expr0 = Expression.Invoke(pred0, parm); return(expr0); } q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.PledgeAmount > 0 group c by c.CreditGiverId into g where g.Count() == cnt select g.Key ?? 0; break; case CompareType.NotEqual: q = from c in db.Contributions2(dt, now, 0, true, false, true) where fund == 0 || c.FundId == fund where c.PledgeAmount > 0 group c by c.CreditGiverId into g where g.Count() != cnt select g.Key ?? 0; break; } var tag = db.PopulateTemporaryTag(q); Expression <Func <Person, bool> > pred = p => p.Tags.Any(t => t.Id == tag.Id); Expression expr = Expression.Invoke(pred, parm); return(expr); }
internal Expression PledgeBalance() { if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var amt = TextValue.ToDecimal() ?? 0; var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt(); var startdt = DateTime.Parse("1/1/1900"); var enddt = DateTime.Parse("1/1/2500"); IQueryable <int> q = null; switch (op) { case CompareType.Greater: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.Balance > amt select c.PeopleId.Value; break; case CompareType.GreaterEqual: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.Balance >= amt select c.PeopleId.Value; break; case CompareType.Less: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.Balance < amt select c.PeopleId.Value; break; case CompareType.LessEqual: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.Balance <= amt select c.PeopleId.Value; break; case CompareType.Equal: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.Balance == amt select c.PeopleId.Value; break; case CompareType.NotEqual: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.Balance != amt select c.PeopleId.Value; break; } var tag = db.PopulateTemporaryTag(q); Expression <Func <Person, bool> > pred = p => p.Tags.Any(t => t.Id == tag.Id); Expression expr = Expression.Invoke(pred, parm); return(expr); }
private Expression PledgeAmountBothJoint(DateTime?startdt, DateTime?enddt) { if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var amt = TextValue.ToDecimal() ?? 0; var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt(); IQueryable <int> q = null; switch (op) { case CompareType.Greater: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.PledgeAmount > amt select c.PeopleId.Value; break; case CompareType.GreaterEqual: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.PledgeAmount.Value >= amt select c.PeopleId.Value; break; case CompareType.Less: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.PledgeAmount.Value > 0 where c.PledgeAmount.Value <= amt select c.PeopleId.Value; break; case CompareType.LessEqual: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.PledgeAmount.Value > 0 where c.PledgeAmount.Value <= amt select c.PeopleId.Value; break; case CompareType.Equal: if (amt == 0) { q = from pid in db.Pledges0(startdt, enddt, fund, 0) select pid.PeopleId; } else { q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.PledgeAmount.Value > 0 where c.PledgeAmount.Value == amt select c.PeopleId.Value; } break; case CompareType.NotEqual: q = from c in db.GetPledgedTotalsBothIfJoint(startdt, enddt, fund) where c.PledgeAmount.Value > 0 where c.PledgeAmount.Value != amt select c.PeopleId.Value; break; } var tag = db.PopulateTemporaryTag(q); Expression <Func <Person, bool> > pred = p => p.Tags.Any(t => t.Id == tag.Id); Expression expr = Expression.Invoke(pred, parm); return(expr); }