internal Expression RecentNonTaxDedCount() { var fund = Quarters.ToInt(); var cnt = TextValue.ToInt(); return(RecentContributionCount2(Days, fund, cnt, true)); }
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 HasCommitmentForMeetingId() { var tf = CodeIds == "1"; var meetingid = Quarters.ToInt(); Expression <Func <Person, bool> > pred = null; if (op == CompareType.Equal ^ tf) // true means not committed { pred = p => p.Attends.Any(a => a.MeetingId == meetingid && a.Commitment == null); // not committed } else { pred = p => p.Attends.Any(a => a.MeetingId == meetingid && a.Commitment != null); // committed } Expression expr = Expression.Invoke(pred, parm); return(expr); /* Truth Table * * 1 ^ 1 = 0 EQ ^ T = F = Committed * 0 ^ 1 = 1 EQ ^ F = T = NotCommitted * 1 ^ 0 = 1 NE ^ T = T = NotCommitted * 0 ^ 0 = 0 NE ^ F = F = Committed */ }
internal Expression NonTaxDedAmount() { var fund = Quarters.ToInt(); var amt = decimal.Parse(TextValue); return(ContributionAmount2(StartDate, EndDate, fund, amt, true)); }
internal Expression ContributionAmount() { var fund = Quarters.ToInt(); var amt = TextValue.ToDecimal() ?? 0; return(ContributionAmount2(StartDate, EndDate, fund, amt, 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 RecentContributionAmount() { var fund = Quarters.ToInt(); var amt = TextValue.ToDecimal() ?? 0; return(RecentContributionAmount2(Days, fund, amt, false)); }
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.ToInt(); var cnt = TextValue.ToInt(); return(RecentContributionCount2(Days, fund, cnt, taxnontax: false)); }
internal Expression RecentContributionAmount() { var fund = Quarters.ToInt(); var amt = decimal.Parse(TextValue); return(RecentContributionAmount2(Days, fund, amt, taxnontax: false)); }
internal Expression IsTopPledger() { var tf = CodeIds == "1"; var top = Quarters.ToInt(); if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(CompareConstant(parm, "PeopleId", CompareType.Equal, 0)); } var mindt = Util.Now.AddDays(-Days).Date; var r = db.TopPledgers(top, mindt, Util.Now).ToList(); var toppledgers = r.Select(g => g.PeopleId).ToList(); Expression <Func <Person, bool> > pred = p => toppledgers.Contains(p.PeopleId); Expression expr = Expression.Convert(Expression.Invoke(pred, parm), typeof(bool)); if (op == CompareType.Equal ^ tf) { expr = Expression.Not(expr); } return(expr); }
internal Expression RecentFirstTimeGiver() { var tf = CodeIds == "1"; var fund = Quarters.ToInt(); if (!db.FromBatch) { if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) { return(AlwaysFalse()); } } var q = db.FirstTimeGivers(Days, fund).Select(p => p.PeopleId); Expression <Func <Person, bool> > pred; if (op == CompareType.Equal ^ tf) { pred = p => !q.Contains(p.PeopleId); } else { pred = p => q.Contains(p.PeopleId); } Expression expr = Expression.Invoke(pred, parm); return(expr); }
internal Expression CommitmentForMeetingId() { var meetingid = Quarters.ToInt(); Expression <Func <Person, bool> > pred = p => p.Attends.Any(a => a.MeetingId == meetingid && CodeIntIds.Contains(a.Commitment ?? 99)); Expression expr = Expression.Invoke(pred, parm); if (op == CompareType.NotEqual) { expr = Expression.Not(expr); } 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.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; }
internal Expression RecentAttendCountAttCred() { var attcred = Quarters.ToInt(); var cnt = TextValue.ToInt(); var mindt = Util.Now.AddDays(-Days).Date; var sc = db.OrgSchedules.FirstOrDefault(cc => cc.ScheduleId == Schedule); DateTime?mtime = null; if (sc != null) { mtime = sc.SchedTime; } Expression <Func <Person, int> > pred = null; if (mtime != null) { pred = p => ( from a in p.Attends where a.AttendanceFlag where a.MeetingDate >= mindt where attcred == 0 || a.Meeting.AttendCreditId == attcred where a.MeetingDate.TimeOfDay == mtime.Value.TimeOfDay where Organization == 0 || a.Meeting.OrganizationId == Organization where Division == 0 || a.Organization.DivOrgs.Any(dg => dg.DivId == Division) where Program == 0 || a.Organization.DivOrgs.Any(dg => dg.Division.ProgDivs.Any(pg => pg.ProgId == Program)) select a ).Count(); } else { pred = p => ( from a in p.Attends where a.AttendanceFlag where a.MeetingDate >= mindt where attcred == 0 || a.Meeting.AttendCreditId == attcred where Organization == 0 || a.Meeting.OrganizationId == Organization where Division == 0 || a.Organization.DivOrgs.Any(dg => dg.DivId == Division) where Program == 0 || a.Organization.DivOrgs.Any(dg => dg.Division.ProgDivs.Any(pg => pg.ProgId == Program)) select a ).Count(); } Expression left = Expression.Invoke(pred, parm); var right = Expression.Convert(Expression.Constant(cnt), left.Type); return(Compare(left, right)); }
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.ToInt(); 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 = p => op == CompareType.Equal && tf ? db.TagPeople.Where(vv => vv.Id == tag.Id).Select(vv => vv.PeopleId).Contains(p.PeopleId) : !db.TagPeople.Where(vv => vv.Id == tag.Id).Select(vv => vv.PeopleId).Contains(p.PeopleId); 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.ToInt(); 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 RecentFirstTimeGiver() { var tf = CodeIds == "1"; var fund = Quarters.ToInt(); if (!db.FromBatch) if (db.CurrentUser == null || db.CurrentUser.Roles.All(rr => rr != "Finance")) return AlwaysFalse(); var q = db.FirstTimeGivers(Days, fund).Select(p => p.PeopleId); //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; Expression<Func<Person, bool>> pred; if (op == CompareType.Equal ^ tf) pred = p => !q.Contains(p.PeopleId); else pred = p => q.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.ToInt(); var amt = decimal.Parse(TextValue); var now = DateTime.Now; var dt = now.AddDays(-Days); 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.ToInt(); var cnt = TextValue.ToInt(); var now = DateTime.Now; var dt = now.AddDays(-Days); 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 NonTaxDedAmount() { var fund = Quarters.ToInt(); var amt = TextValue.ToDecimal() ?? 0; return ContributionAmount2(StartDate, EndDate, fund, amt, true); }
internal Expression DaysAfterNthVisitAsOf() { var tf = CodeIds == "1"; var q = db.AttendDaysAfterNthVisitAsOf(Program, Division, Organization, StartDate, EndDate, Quarters.ToInt(), Days).Select(p => p.PeopleId); Expression <Func <Person, bool> > pred; if (op == CompareType.Equal ^ tf) { pred = p => !q.Contains(p.PeopleId); } else { pred = p => q.Contains(p.PeopleId); } 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); }
internal Expression RecentNonTaxDedAmount() { var fund = Quarters.ToInt(); var amt = TextValue.ToDecimal() ?? 0; return RecentContributionAmount2(Days, fund, amt, true); }