Exemple #1
0
        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));
        }
Exemple #2
0
        internal Expression RecentContributionCount()
        {
            var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt();
            var cnt  = TextValue.ToInt();

            return(RecentContributionCount2(Days, fund, cnt, false));
        }
Exemple #3
0
        internal Expression RecentNonTaxDedAmount()
        {
            var fund = Quarters.AllDigits() ? Quarters.ToInt() : db.Setting(Quarters, "").ToInt();
            var amt  = TextValue.ToDecimal() ?? 0;

            return(RecentContributionAmount2(Days, fund, amt, true));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }