コード例 #1
0
ファイル: ReportDao.cs プロジェクト: Inzaghi2012/teamlab.v7.5
        public IList<object[]> BuildUsersActivityReport(TaskFilter filter)
        {
            /* query:
                select u, sum(case t when 't' then c else 0 end), sum(case t when 'm' then c else 0 end), sum(case t when 'd' then c else 0 end)
                from (
                    select create_by u, 't' t, count(*) c from projects_tasks where tenant_id = 0 group by 1, 2
                    union all
                    select create_by u, 'm' t, count(*) c from projects_milestones where tenant_id = 0 group by 1, 2
                    union all
                    select create_by u, 'd' t, count(*) c from projects_messages where tenant_id = 0 group by 1, 2) s
                group by 1
             */

            var where = Exp.Eq("tenant_id", Tenant) & Exp.Between("create_on", filter.GetFromDate(true), filter.GetToDate(true));
            if (filter.HasUserId)
            {
                where &= Exp.In("create_by", filter.GetUserIds());
            }

            var subq = new SqlQuery(TasksTable).Select("create_by u").Select("'t'").Select("count(*) c").Where(where).GroupBy(1, 2)
                .UnionAll(new SqlQuery(MilestonesTable).Select("create_by u").Select("'m'").Select("count(*) c").Where(where).GroupBy(1, 2))
                .UnionAll(new SqlQuery(MessagesTable).Select("create_by u").Select("'d'").Select("count(*) c").Where(where).GroupBy(1, 2));

            var q = new SqlQuery()
                .Select("u")
                .SelectSum("case t when 't' then c else 0 end")
                .SelectSum("case t when 'm' then c else 0 end")
                .SelectSum("case t when 'd' then c else 0 end")
                .From(subq, "s")
                .GroupBy(1);

            using (var db = new DbManager(DatabaseId))
            {
                return db.ExecuteList(q)
                    .Select(r => new { UserId = new Guid((string)r[0]), Tasks = Convert.ToInt32(r[1]), Milestones = Convert.ToInt32(r[2]), Messages = Convert.ToInt32(r[3]) })
                    .Select(r => new object[] { r.UserId, r.Tasks, r.Milestones, r.Messages, 0, r.Tasks + r.Milestones + r.Messages })
                    .ToList();
            }
        }
コード例 #2
0
        public override IEnumerable<object[]> BuildReport(TaskFilter filter)
        {
            filter.FromDate = filter.GetFromDate(true);
            filter.ToDate = filter.GetToDate(true);

            var taskTime = Global.EngineFactory.GetTimeTrackingEngine().GetByFilter(filter).Select(r => new object[] { r.Person, r.Task.Project.ID, r.Task.Project.Title, r.Task.ID, r.Task.Title, r.Hours, 0, r.PaymentStatus });

            if (filter.ViewType == 0)
            {
                taskTime = taskTime.GroupBy(r => (Guid)r[0], (a, b) =>
                {
                    var enumerable = b as IList<object[]> ?? b.ToList();
                    var data = (object[])enumerable.First().Clone();
                    data[5] = enumerable.Sum(c => (float)c[5]);
                    data[6] = enumerable.Where(r => (PaymentStatus)r[7] == PaymentStatus.Billed).Sum(c => (float)c[5]);
                    return data;
                });
            }

            if (filter.ViewType == 1)
            {
                taskTime = taskTime.Select(r =>
                {
                    if ((PaymentStatus)r[7] == PaymentStatus.Billed) r[6] = r[5];
                    return r;
                });
            }
            taskTime = AddUserInfo(taskTime, 0);
            taskTime = taskTime.OrderBy(r => CoreContext.UserManager.GetUsers((Guid)r[0]), UserInfoComparer.Default);
            return taskTime;
        }