Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        public IList<object[]> BuildUsersStatisticsReport(TaskFilter filter)
        {
            var query = new SqlQuery(TasksTable + " t")
                .Select("r.responsible_id")
                .InnerJoin(TasksResponsibleTable + " r", Exp.EqColumns("r.task_id", "t.id") & Exp.EqColumns("r.tenant_id", "t.tenant_id"))
                .SelectSum("0")
                .SelectSum("case t.status when 2 then 0 else 1 end")
                .SelectSum("case t.status when 2 then 1 else 0 end")
                .Where("t.tenant_id", Tenant)
                .GroupBy(1);
            if (filter.HasUserId)
            {
                query.Where(Exp.In("r.responsible_id", filter.GetUserIds()));
            }
            else
            {
                query.Where(!Exp.Eq("r.responsible_id", Guid.Empty.ToString()));
            }

            query.Where(filter.HasProjectIds ? Exp.In("t.project_id", filter.ProjectIds) : Exp.Gt("t.project_id", 0));

            if (filter.TagId != 0)
            {
                query.InnerJoin(ProjectTagTable + " ptag", Exp.EqColumns("ptag.project_id", "t.project_id"));
                query.Where("ptag.tag_id", filter.TagId);
            }

            using (var db = new DbManager(DatabaseId))
            {
                return db.ExecuteList(query)
                    .ConvertAll(r => new object[] {ToGuid(r[0]), Convert.ToInt64(r[1]), Convert.ToInt64(r[2]), Convert.ToInt64(r[3])});
            }
        }