Merge pull request #606 from taigaio/issue/3886/multiple_unassigned_in_filter_lists
Issue #3886: Fix empty full_names in Stories and Issues filter listsremotes/origin/logger
commit
fa0499ec6a
|
@ -149,21 +149,22 @@ def _get_issues_statuses(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT status_id, count(status_id) count
|
SELECT status_id, count(status_id) count
|
||||||
FROM "issues_issue"
|
FROM "issues_issue"
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
WHERE {where}
|
WHERE {where}
|
||||||
GROUP BY status_id
|
GROUP BY status_id
|
||||||
)
|
)
|
||||||
SELECT "projects_issuestatus"."id",
|
|
||||||
"projects_issuestatus"."name",
|
SELECT "projects_issuestatus"."id",
|
||||||
"projects_issuestatus"."color",
|
"projects_issuestatus"."name",
|
||||||
"projects_issuestatus"."order",
|
"projects_issuestatus"."color",
|
||||||
COALESCE(counters.count, 0)
|
"projects_issuestatus"."order",
|
||||||
FROM "projects_issuestatus"
|
COALESCE(counters.count, 0)
|
||||||
|
FROM "projects_issuestatus"
|
||||||
LEFT OUTER JOIN counters ON counters.status_id = projects_issuestatus.id
|
LEFT OUTER JOIN counters ON counters.status_id = projects_issuestatus.id
|
||||||
WHERE "projects_issuestatus"."project_id" = %s
|
WHERE "projects_issuestatus"."project_id" = %s
|
||||||
ORDER BY "projects_issuestatus"."order";
|
ORDER BY "projects_issuestatus"."order";
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -190,21 +191,22 @@ def _get_issues_types(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT type_id, count(type_id) count
|
SELECT type_id, count(type_id) count
|
||||||
FROM "issues_issue"
|
FROM "issues_issue"
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
WHERE {where}
|
WHERE {where}
|
||||||
GROUP BY type_id
|
GROUP BY type_id
|
||||||
)
|
)
|
||||||
SELECT "projects_issuetype"."id",
|
|
||||||
"projects_issuetype"."name",
|
SELECT "projects_issuetype"."id",
|
||||||
"projects_issuetype"."color",
|
"projects_issuetype"."name",
|
||||||
"projects_issuetype"."order",
|
"projects_issuetype"."color",
|
||||||
COALESCE(counters.count, 0)
|
"projects_issuetype"."order",
|
||||||
FROM "projects_issuetype"
|
COALESCE(counters.count, 0)
|
||||||
|
FROM "projects_issuetype"
|
||||||
LEFT OUTER JOIN counters ON counters.type_id = projects_issuetype.id
|
LEFT OUTER JOIN counters ON counters.type_id = projects_issuetype.id
|
||||||
WHERE "projects_issuetype"."project_id" = %s
|
WHERE "projects_issuetype"."project_id" = %s
|
||||||
ORDER BY "projects_issuetype"."order";
|
ORDER BY "projects_issuetype"."order";
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -231,21 +233,22 @@ def _get_issues_priorities(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT priority_id, count(priority_id) count
|
SELECT priority_id, count(priority_id) count
|
||||||
FROM "issues_issue"
|
FROM "issues_issue"
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
WHERE {where}
|
WHERE {where}
|
||||||
GROUP BY priority_id
|
GROUP BY priority_id
|
||||||
)
|
)
|
||||||
SELECT "projects_priority"."id",
|
|
||||||
"projects_priority"."name",
|
SELECT "projects_priority"."id",
|
||||||
"projects_priority"."color",
|
"projects_priority"."name",
|
||||||
"projects_priority"."order",
|
"projects_priority"."color",
|
||||||
COALESCE(counters.count, 0)
|
"projects_priority"."order",
|
||||||
FROM "projects_priority"
|
COALESCE(counters.count, 0)
|
||||||
|
FROM "projects_priority"
|
||||||
LEFT OUTER JOIN counters ON counters.priority_id = projects_priority.id
|
LEFT OUTER JOIN counters ON counters.priority_id = projects_priority.id
|
||||||
WHERE "projects_priority"."project_id" = %s
|
WHERE "projects_priority"."project_id" = %s
|
||||||
ORDER BY "projects_priority"."order";
|
ORDER BY "projects_priority"."order";
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -272,21 +275,22 @@ def _get_issues_severities(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT severity_id, count(severity_id) count
|
SELECT severity_id, count(severity_id) count
|
||||||
FROM "issues_issue"
|
FROM "issues_issue"
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
WHERE {where}
|
WHERE {where}
|
||||||
GROUP BY severity_id
|
GROUP BY severity_id
|
||||||
)
|
)
|
||||||
SELECT "projects_severity"."id",
|
|
||||||
"projects_severity"."name",
|
SELECT "projects_severity"."id",
|
||||||
"projects_severity"."color",
|
"projects_severity"."name",
|
||||||
"projects_severity"."order",
|
"projects_severity"."color",
|
||||||
COALESCE(counters.count, 0)
|
"projects_severity"."order",
|
||||||
FROM "projects_severity"
|
COALESCE(counters.count, 0)
|
||||||
|
FROM "projects_severity"
|
||||||
LEFT OUTER JOIN counters ON counters.severity_id = projects_severity.id
|
LEFT OUTER JOIN counters ON counters.severity_id = projects_severity.id
|
||||||
WHERE "projects_severity"."project_id" = %s
|
WHERE "projects_severity"."project_id" = %s
|
||||||
ORDER BY "projects_severity"."order";
|
ORDER BY "projects_severity"."order";
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -313,28 +317,30 @@ def _get_issues_assigned_to(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT assigned_to_id, count(assigned_to_id) count
|
SELECT assigned_to_id, count(assigned_to_id) count
|
||||||
FROM "issues_issue"
|
FROM "issues_issue"
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
WHERE {where} AND "issues_issue"."assigned_to_id" IS NOT NULL
|
WHERE {where} AND "issues_issue"."assigned_to_id" IS NOT NULL
|
||||||
GROUP BY assigned_to_id
|
GROUP BY assigned_to_id
|
||||||
)
|
)
|
||||||
SELECT
|
|
||||||
"projects_membership"."user_id" user_id,
|
SELECT "projects_membership"."user_id" user_id,
|
||||||
"users_user"."full_name",
|
"users_user"."full_name",
|
||||||
COALESCE("counters".count, 0) count
|
"users_user"."username",
|
||||||
FROM projects_membership
|
COALESCE("counters".count, 0) count
|
||||||
|
FROM projects_membership
|
||||||
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."assigned_to_id")
|
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."assigned_to_id")
|
||||||
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
||||||
WHERE "projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL
|
WHERE "projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL
|
||||||
|
|
||||||
-- unassigned issues
|
-- unassigned issues
|
||||||
UNION
|
UNION
|
||||||
SELECT NULL user_id, NULL, count(coalesce(assigned_to_id, -1)) count
|
|
||||||
FROM "issues_issue"
|
SELECT NULL user_id, NULL, NULL, count(coalesce(assigned_to_id, -1)) count
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
FROM "issues_issue"
|
||||||
WHERE {where} AND "issues_issue"."assigned_to_id" IS NULL
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
GROUP BY assigned_to_id
|
WHERE {where} AND "issues_issue"."assigned_to_id" IS NULL
|
||||||
|
GROUP BY assigned_to_id
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -343,10 +349,10 @@ def _get_issues_assigned_to(project, queryset):
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
none_valued_added = False
|
none_valued_added = False
|
||||||
for id, full_name, count in rows:
|
for id, full_name, username, count in rows:
|
||||||
result.append({
|
result.append({
|
||||||
"id": id,
|
"id": id,
|
||||||
"full_name": full_name or "",
|
"full_name": full_name or username or "",
|
||||||
"count": count,
|
"count": count,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -372,30 +378,32 @@ def _get_issues_owners(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT "issues_issue"."owner_id" owner_id, count("issues_issue"."owner_id") count
|
SELECT "issues_issue"."owner_id" owner_id, count("issues_issue"."owner_id") count
|
||||||
FROM "issues_issue"
|
FROM "issues_issue"
|
||||||
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("issues_issue"."project_id" = "projects_project"."id")
|
||||||
WHERE {where}
|
WHERE {where}
|
||||||
GROUP BY "issues_issue"."owner_id"
|
GROUP BY "issues_issue"."owner_id"
|
||||||
)
|
)
|
||||||
SELECT
|
|
||||||
"projects_membership"."user_id" id,
|
SELECT "projects_membership"."user_id" id,
|
||||||
"users_user"."full_name",
|
"users_user"."full_name",
|
||||||
COALESCE("counters".count, 0) count
|
"users_user"."username",
|
||||||
FROM projects_membership
|
COALESCE("counters".count, 0) count
|
||||||
|
FROM projects_membership
|
||||||
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."owner_id")
|
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."owner_id")
|
||||||
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
||||||
WHERE ("projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL)
|
WHERE ("projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL)
|
||||||
|
|
||||||
-- System users
|
-- System users
|
||||||
UNION
|
UNION
|
||||||
SELECT
|
|
||||||
"users_user"."id" user_id,
|
SELECT "users_user"."id" user_id,
|
||||||
"users_user"."full_name" full_name,
|
"users_user"."full_name" full_name,
|
||||||
COALESCE("counters".count, 0) count
|
"users_user"."username",
|
||||||
FROM users_user
|
COALESCE("counters".count, 0) count
|
||||||
LEFT OUTER JOIN counters ON ("users_user"."id" = "counters"."owner_id")
|
FROM users_user
|
||||||
WHERE ("users_user"."is_system" IS TRUE)
|
LEFT OUTER JOIN counters ON ("users_user"."id" = "counters"."owner_id")
|
||||||
|
WHERE ("users_user"."is_system" IS TRUE)
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -403,11 +411,11 @@ def _get_issues_owners(project, queryset):
|
||||||
rows = cursor.fetchall()
|
rows = cursor.fetchall()
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for id, full_name, count in rows:
|
for id, full_name, username, count in rows:
|
||||||
if count > 0:
|
if count > 0:
|
||||||
result.append({
|
result.append({
|
||||||
"id": id,
|
"id": id,
|
||||||
"full_name": full_name,
|
"full_name": full_name or username or "",
|
||||||
"count": count,
|
"count": count,
|
||||||
})
|
})
|
||||||
return sorted(result, key=itemgetter("full_name"))
|
return sorted(result, key=itemgetter("full_name"))
|
||||||
|
|
|
@ -258,28 +258,30 @@ def _get_userstories_assigned_to(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT assigned_to_id, count(assigned_to_id) count
|
SELECT assigned_to_id, count(assigned_to_id) count
|
||||||
FROM "userstories_userstory"
|
FROM "userstories_userstory"
|
||||||
INNER JOIN "projects_project" ON ("userstories_userstory"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("userstories_userstory"."project_id" = "projects_project"."id")
|
||||||
WHERE {where} AND "userstories_userstory"."assigned_to_id" IS NOT NULL
|
WHERE {where} AND "userstories_userstory"."assigned_to_id" IS NOT NULL
|
||||||
GROUP BY assigned_to_id
|
GROUP BY assigned_to_id
|
||||||
)
|
)
|
||||||
SELECT
|
|
||||||
"projects_membership"."user_id" user_id,
|
SELECT "projects_membership"."user_id" user_id,
|
||||||
"users_user"."full_name",
|
"users_user"."full_name",
|
||||||
COALESCE("counters".count, 0) count
|
"users_user"."username",
|
||||||
FROM projects_membership
|
COALESCE("counters".count, 0) count
|
||||||
|
FROM projects_membership
|
||||||
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."assigned_to_id")
|
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."assigned_to_id")
|
||||||
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
||||||
WHERE "projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL
|
WHERE "projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL
|
||||||
|
|
||||||
-- unassigned userstories
|
-- unassigned userstories
|
||||||
UNION
|
UNION
|
||||||
SELECT NULL user_id, NULL, count(coalesce(assigned_to_id, -1)) count
|
|
||||||
FROM "userstories_userstory"
|
SELECT NULL user_id, NULL, NULL, count(coalesce(assigned_to_id, -1)) count
|
||||||
INNER JOIN "projects_project" ON ("userstories_userstory"."project_id" = "projects_project"."id")
|
FROM "userstories_userstory"
|
||||||
WHERE {where} AND "userstories_userstory"."assigned_to_id" IS NULL
|
INNER JOIN "projects_project" ON ("userstories_userstory"."project_id" = "projects_project"."id")
|
||||||
GROUP BY assigned_to_id
|
WHERE {where} AND "userstories_userstory"."assigned_to_id" IS NULL
|
||||||
|
GROUP BY assigned_to_id
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -288,10 +290,10 @@ def _get_userstories_assigned_to(project, queryset):
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
none_valued_added = False
|
none_valued_added = False
|
||||||
for id, full_name, count in rows:
|
for id, full_name, username, count in rows:
|
||||||
result.append({
|
result.append({
|
||||||
"id": id,
|
"id": id,
|
||||||
"full_name": full_name or "",
|
"full_name": full_name or username or "",
|
||||||
"count": count,
|
"count": count,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -317,30 +319,32 @@ def _get_userstories_owners(project, queryset):
|
||||||
|
|
||||||
extra_sql = """
|
extra_sql = """
|
||||||
WITH counters AS (
|
WITH counters AS (
|
||||||
SELECT "userstories_userstory"."owner_id" owner_id, count(coalesce("userstories_userstory"."owner_id", -1)) count
|
SELECT "userstories_userstory"."owner_id" owner_id, count(coalesce("userstories_userstory"."owner_id", -1)) count
|
||||||
FROM "userstories_userstory"
|
FROM "userstories_userstory"
|
||||||
INNER JOIN "projects_project" ON ("userstories_userstory"."project_id" = "projects_project"."id")
|
INNER JOIN "projects_project" ON ("userstories_userstory"."project_id" = "projects_project"."id")
|
||||||
WHERE {where}
|
WHERE {where}
|
||||||
GROUP BY "userstories_userstory"."owner_id"
|
GROUP BY "userstories_userstory"."owner_id"
|
||||||
)
|
)
|
||||||
SELECT
|
|
||||||
"projects_membership"."user_id" id,
|
SELECT "projects_membership"."user_id" id,
|
||||||
"users_user"."full_name",
|
"users_user"."full_name",
|
||||||
COALESCE("counters".count, 0) count
|
"users_user"."username",
|
||||||
FROM projects_membership
|
COALESCE("counters".count, 0) count
|
||||||
|
FROM projects_membership
|
||||||
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."owner_id")
|
LEFT OUTER JOIN counters ON ("projects_membership"."user_id" = "counters"."owner_id")
|
||||||
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
INNER JOIN "users_user" ON ("projects_membership"."user_id" = "users_user"."id")
|
||||||
WHERE ("projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL)
|
WHERE ("projects_membership"."project_id" = %s AND "projects_membership"."user_id" IS NOT NULL)
|
||||||
|
|
||||||
-- System users
|
-- System users
|
||||||
UNION
|
UNION
|
||||||
SELECT
|
|
||||||
"users_user"."id" user_id,
|
SELECT "users_user"."id" user_id,
|
||||||
"users_user"."full_name" full_name,
|
"users_user"."full_name" full_name,
|
||||||
COALESCE("counters".count, 0) count
|
"users_user"."username" username,
|
||||||
FROM users_user
|
COALESCE("counters".count, 0) count
|
||||||
LEFT OUTER JOIN counters ON ("users_user"."id" = "counters"."owner_id")
|
FROM users_user
|
||||||
WHERE ("users_user"."is_system" IS TRUE)
|
LEFT OUTER JOIN counters ON ("users_user"."id" = "counters"."owner_id")
|
||||||
|
WHERE ("users_user"."is_system" IS TRUE)
|
||||||
""".format(where=where)
|
""".format(where=where)
|
||||||
|
|
||||||
with closing(connection.cursor()) as cursor:
|
with closing(connection.cursor()) as cursor:
|
||||||
|
@ -348,11 +352,11 @@ def _get_userstories_owners(project, queryset):
|
||||||
rows = cursor.fetchall()
|
rows = cursor.fetchall()
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for id, full_name, count in rows:
|
for id, full_name, username, count in rows:
|
||||||
if count > 0:
|
if count > 0:
|
||||||
result.append({
|
result.append({
|
||||||
"id": id,
|
"id": id,
|
||||||
"full_name": full_name,
|
"full_name": full_name or username or "",
|
||||||
"count": count,
|
"count": count,
|
||||||
})
|
})
|
||||||
return sorted(result, key=itemgetter("full_name"))
|
return sorted(result, key=itemgetter("full_name"))
|
||||||
|
|
Loading…
Reference in New Issue