Exemplo n.º 1
0
        internal Expression RecentNonTaxDedCount()
        {
            var fund = Quarters.ToInt();
            var cnt  = TextValue.ToInt();

            return(RecentContributionCount2(Days, fund, cnt, true));
        }
Exemplo n.º 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));
        }
Exemplo n.º 3
0
        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
             */
        }
Exemplo n.º 4
0
        internal Expression NonTaxDedAmount()
        {
            var fund = Quarters.ToInt();
            var amt  = decimal.Parse(TextValue);

            return(ContributionAmount2(StartDate, EndDate, fund, amt, true));
        }
Exemplo n.º 5
0
        internal Expression ContributionAmount()
        {
            var fund = Quarters.ToInt();
            var amt  = TextValue.ToDecimal() ?? 0;

            return(ContributionAmount2(StartDate, EndDate, fund, amt, false));
        }
Exemplo n.º 6
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));
        }
Exemplo n.º 7
0
        internal Expression RecentContributionAmount()
        {
            var fund = Quarters.ToInt();
            var amt  = TextValue.ToDecimal() ?? 0;

            return(RecentContributionAmount2(Days, fund, amt, false));
        }
Exemplo n.º 8
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));
        }
Exemplo n.º 9
0
        internal Expression RecentContributionCount()
        {
            var fund = Quarters.ToInt();
            var cnt  = TextValue.ToInt();

            return(RecentContributionCount2(Days, fund, cnt, taxnontax: false));
        }
Exemplo n.º 10
0
        internal Expression RecentContributionAmount()
        {
            var fund = Quarters.ToInt();
            var amt  = decimal.Parse(TextValue);

            return(RecentContributionAmount2(Days, fund, amt, taxnontax: false));
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
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.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;
        }
Exemplo n.º 15
0
        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));
        }
Exemplo n.º 16
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.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;
        }
Exemplo n.º 17
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.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);
        }
Exemplo n.º 18
0
        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;
        }
Exemplo n.º 19
0
        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);
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 21
0
 internal Expression NonTaxDedAmount()
 {
     var fund = Quarters.ToInt();
     var amt = TextValue.ToDecimal() ?? 0;
     return ContributionAmount2(StartDate, EndDate, fund, amt, true);
 }
Exemplo n.º 22
0
        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);
        }
Exemplo n.º 23
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);
        }
Exemplo n.º 24
0
 internal Expression RecentNonTaxDedAmount()
 {
     var fund = Quarters.ToInt();
     var amt = TextValue.ToDecimal() ?? 0;
     return RecentContributionAmount2(Days, fund, amt, true);
 }