Fix issue tg-4633: Return project attributes in the correct order
parent
cda0d6451c
commit
cb027411e2
|
@ -26,10 +26,10 @@ def attach_members(queryset, as_field="members_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(t))
|
sql = """
|
||||||
FROM(
|
SELECT json_agg(row_to_json(t))
|
||||||
SELECT
|
FROM (
|
||||||
users_user.id,
|
SELECT users_user.id,
|
||||||
users_user.username,
|
users_user.username,
|
||||||
users_user.full_name,
|
users_user.full_name,
|
||||||
users_user.email,
|
users_user.email,
|
||||||
|
@ -39,12 +39,13 @@ def attach_members(queryset, as_field="members_attr"):
|
||||||
users_user.is_active,
|
users_user.is_active,
|
||||||
users_role.id "role",
|
users_role.id "role",
|
||||||
users_role.name role_name
|
users_role.name role_name
|
||||||
|
|
||||||
FROM projects_membership
|
FROM projects_membership
|
||||||
LEFT JOIN users_user ON projects_membership.user_id = users_user.id
|
LEFT JOIN users_user ON projects_membership.user_id = users_user.id
|
||||||
LEFT JOIN users_role ON users_role.id = projects_membership.role_id
|
LEFT JOIN users_role ON users_role.id = projects_membership.role_id
|
||||||
WHERE projects_membership.project_id = {tbl}.id
|
WHERE projects_membership.project_id = {tbl}.id
|
||||||
ORDER BY complete_user_name) t"""
|
ORDER BY complete_user_name
|
||||||
|
) t
|
||||||
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
queryset = queryset.extra(select={as_field: sql})
|
queryset = queryset.extra(select={as_field: sql})
|
||||||
|
@ -60,16 +61,18 @@ def attach_milestones(queryset, as_field="milestones_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(t))
|
sql = """
|
||||||
FROM(
|
SELECT json_agg(row_to_json(t))
|
||||||
SELECT
|
FROM (
|
||||||
milestones_milestone.id,
|
SELECT milestones_milestone.id,
|
||||||
milestones_milestone.slug,
|
milestones_milestone.slug,
|
||||||
milestones_milestone.name,
|
milestones_milestone.name,
|
||||||
milestones_milestone.closed
|
milestones_milestone.closed
|
||||||
FROM milestones_milestone
|
FROM milestones_milestone
|
||||||
WHERE milestones_milestone.project_id = {tbl}.id
|
WHERE milestones_milestone.project_id = {tbl}.id
|
||||||
ORDER BY estimated_start) t"""
|
ORDER BY estimated_start
|
||||||
|
) t
|
||||||
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
queryset = queryset.extra(select={as_field: sql})
|
queryset = queryset.extra(select={as_field: sql})
|
||||||
|
@ -85,10 +88,10 @@ def attach_closed_milestones(queryset, as_field="closed_milestones_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT COUNT(milestones_milestone.id)
|
sql = """
|
||||||
|
SELECT COUNT(milestones_milestone.id)
|
||||||
FROM milestones_milestone
|
FROM milestones_milestone
|
||||||
WHERE
|
WHERE milestones_milestone.project_id = {tbl}.id AND
|
||||||
milestones_milestone.project_id = {tbl}.id AND
|
|
||||||
milestones_milestone.closed = True
|
milestones_milestone.closed = True
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -106,10 +109,10 @@ def attach_notify_policies(queryset, as_field="notify_policies_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(notifications_notifypolicy))
|
sql = """
|
||||||
|
SELECT json_agg(row_to_json(notifications_notifypolicy))
|
||||||
FROM notifications_notifypolicy
|
FROM notifications_notifypolicy
|
||||||
WHERE
|
WHERE notifications_notifypolicy.project_id = {tbl}.id
|
||||||
notifications_notifypolicy.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -126,10 +129,13 @@ def attach_epic_statuses(queryset, as_field="epic_statuses_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_epicstatus))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_epicstatus)
|
||||||
|
ORDER BY projects_epicstatus.order
|
||||||
|
)
|
||||||
FROM projects_epicstatus
|
FROM projects_epicstatus
|
||||||
WHERE
|
WHERE projects_epicstatus.project_id = {tbl}.id
|
||||||
projects_epicstatus.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -146,10 +152,13 @@ def attach_userstory_statuses(queryset, as_field="userstory_statuses_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_userstorystatus))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_userstorystatus)
|
||||||
|
ORDER BY projects_userstorystatus.order
|
||||||
|
)
|
||||||
FROM projects_userstorystatus
|
FROM projects_userstorystatus
|
||||||
WHERE
|
WHERE projects_userstorystatus.project_id = {tbl}.id
|
||||||
projects_userstorystatus.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -166,10 +175,13 @@ def attach_points(queryset, as_field="points_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_points))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_points)
|
||||||
|
ORDER BY projects_points.order
|
||||||
|
)
|
||||||
FROM projects_points
|
FROM projects_points
|
||||||
WHERE
|
WHERE projects_points.project_id = {tbl}.id
|
||||||
projects_points.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -186,10 +198,13 @@ def attach_task_statuses(queryset, as_field="task_statuses_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_taskstatus))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_taskstatus)
|
||||||
|
ORDER BY projects_taskstatus
|
||||||
|
)
|
||||||
FROM projects_taskstatus
|
FROM projects_taskstatus
|
||||||
WHERE
|
WHERE projects_taskstatus.project_id = {tbl}.id
|
||||||
projects_taskstatus.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -206,10 +221,13 @@ def attach_issue_statuses(queryset, as_field="issue_statuses_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_issuestatus))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_issuestatus)
|
||||||
|
ORDER BY projects_issuestatus.order
|
||||||
|
)
|
||||||
FROM projects_issuestatus
|
FROM projects_issuestatus
|
||||||
WHERE
|
WHERE projects_issuestatus.project_id = {tbl}.id
|
||||||
projects_issuestatus.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -226,10 +244,13 @@ def attach_issue_types(queryset, as_field="issue_types_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_issuetype))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_issuetype)
|
||||||
|
ORDER BY projects_issuetype.order
|
||||||
|
)
|
||||||
FROM projects_issuetype
|
FROM projects_issuetype
|
||||||
WHERE
|
WHERE projects_issuetype.project_id = {tbl}.id
|
||||||
projects_issuetype.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -246,10 +267,13 @@ def attach_priorities(queryset, as_field="priorities_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_priority))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_priority)
|
||||||
|
ORDER BY projects_priority.order
|
||||||
|
)
|
||||||
FROM projects_priority
|
FROM projects_priority
|
||||||
WHERE
|
WHERE projects_priority.project_id = {tbl}.id
|
||||||
projects_priority.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -266,10 +290,13 @@ def attach_severities(queryset, as_field="severities_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(projects_severity))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(projects_severity)
|
||||||
|
ORDER BY projects_severity.order
|
||||||
|
)
|
||||||
FROM projects_severity
|
FROM projects_severity
|
||||||
WHERE
|
WHERE projects_severity.project_id = {tbl}.id
|
||||||
projects_severity.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -286,10 +313,13 @@ def attach_epic_custom_attributes(queryset, as_field="epic_custom_attributes_att
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(custom_attributes_epiccustomattribute))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(custom_attributes_epiccustomattribute)
|
||||||
|
ORDER BY custom_attributes_epiccustomattribute.order
|
||||||
|
)
|
||||||
FROM custom_attributes_epiccustomattribute
|
FROM custom_attributes_epiccustomattribute
|
||||||
WHERE
|
WHERE custom_attributes_epiccustomattribute.project_id = {tbl}.id
|
||||||
custom_attributes_epiccustomattribute.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -306,10 +336,13 @@ def attach_userstory_custom_attributes(queryset, as_field="userstory_custom_attr
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(custom_attributes_userstorycustomattribute))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(custom_attributes_userstorycustomattribute)
|
||||||
|
ORDER BY custom_attributes_userstorycustomattribute.order
|
||||||
|
)
|
||||||
FROM custom_attributes_userstorycustomattribute
|
FROM custom_attributes_userstorycustomattribute
|
||||||
WHERE
|
WHERE custom_attributes_userstorycustomattribute.project_id = {tbl}.id
|
||||||
custom_attributes_userstorycustomattribute.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -326,10 +359,13 @@ def attach_task_custom_attributes(queryset, as_field="task_custom_attributes_att
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(custom_attributes_taskcustomattribute))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(custom_attributes_taskcustomattribute)
|
||||||
|
ORDER BY custom_attributes_taskcustomattribute.order
|
||||||
|
)
|
||||||
FROM custom_attributes_taskcustomattribute
|
FROM custom_attributes_taskcustomattribute
|
||||||
WHERE
|
WHERE custom_attributes_taskcustomattribute.project_id = {tbl}.id
|
||||||
custom_attributes_taskcustomattribute.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -346,10 +382,13 @@ def attach_issue_custom_attributes(queryset, as_field="issue_custom_attributes_a
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(custom_attributes_issuecustomattribute))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(custom_attributes_issuecustomattribute)
|
||||||
|
ORDER BY custom_attributes_issuecustomattribute.order
|
||||||
|
)
|
||||||
FROM custom_attributes_issuecustomattribute
|
FROM custom_attributes_issuecustomattribute
|
||||||
WHERE
|
WHERE custom_attributes_issuecustomattribute.project_id = {tbl}.id
|
||||||
custom_attributes_issuecustomattribute.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -366,10 +405,13 @@ def attach_roles(queryset, as_field="roles_attr"):
|
||||||
:return: Queryset object with the additional `as_field` field.
|
:return: Queryset object with the additional `as_field` field.
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
sql = """SELECT json_agg(row_to_json(users_role))
|
sql = """
|
||||||
|
SELECT json_agg(
|
||||||
|
row_to_json(users_role)
|
||||||
|
ORDER BY users_role.order
|
||||||
|
)
|
||||||
FROM users_role
|
FROM users_role
|
||||||
WHERE
|
WHERE users_role.project_id = {tbl}.id
|
||||||
users_role.project_id = {tbl}.id
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table)
|
sql = sql.format(tbl=model._meta.db_table)
|
||||||
|
@ -387,17 +429,17 @@ def attach_is_fan(queryset, user, as_field="is_fan_attr"):
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
if user is None or user.is_anonymous():
|
if user is None or user.is_anonymous():
|
||||||
sql = """SELECT false"""
|
sql = "SELECT false"
|
||||||
else:
|
else:
|
||||||
sql = """SELECT COUNT(likes_like.id) > 0
|
sql = """
|
||||||
|
SELECT COUNT(likes_like.id) > 0
|
||||||
FROM likes_like
|
FROM likes_like
|
||||||
INNER JOIN django_content_type
|
INNER JOIN django_content_type ON likes_like.content_type_id = django_content_type.id
|
||||||
ON likes_like.content_type_id = django_content_type.id
|
WHERE django_content_type.model = 'project' AND
|
||||||
WHERE
|
|
||||||
django_content_type.model = 'project' AND
|
|
||||||
django_content_type.app_label = 'projects' AND
|
django_content_type.app_label = 'projects' AND
|
||||||
likes_like.user_id = {user_id} AND
|
likes_like.user_id = {user_id} AND
|
||||||
likes_like.object_id = {tbl}.id"""
|
likes_like.object_id = {tbl}.id
|
||||||
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
||||||
|
|
||||||
|
@ -415,14 +457,14 @@ def attach_my_role_permissions(queryset, user, as_field="my_role_permissions_att
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
if user is None or user.is_anonymous():
|
if user is None or user.is_anonymous():
|
||||||
sql = """SELECT '{}'"""
|
sql = "SELECT '{}'"
|
||||||
else:
|
else:
|
||||||
sql = """SELECT users_role.permissions
|
sql = """
|
||||||
|
SELECT users_role.permissions
|
||||||
FROM projects_membership
|
FROM projects_membership
|
||||||
LEFT JOIN users_user ON projects_membership.user_id = users_user.id
|
LEFT JOIN users_user ON projects_membership.user_id = users_user.id
|
||||||
LEFT JOIN users_role ON users_role.id = projects_membership.role_id
|
LEFT JOIN users_role ON users_role.id = projects_membership.role_id
|
||||||
WHERE
|
WHERE projects_membership.project_id = {tbl}.id AND
|
||||||
projects_membership.project_id = {tbl}.id AND
|
|
||||||
users_user.id = {user_id}"""
|
users_user.id = {user_id}"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
||||||
|
@ -441,13 +483,14 @@ def attach_private_projects_same_owner(queryset, user, as_field="private_project
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
if user is None or user.is_anonymous():
|
if user is None or user.is_anonymous():
|
||||||
sql = """SELECT 0"""
|
sql = "SELECT 0"
|
||||||
else:
|
else:
|
||||||
sql = """SELECT COUNT(id)
|
sql = """
|
||||||
|
SELECT COUNT(id)
|
||||||
FROM projects_project p_aux
|
FROM projects_project p_aux
|
||||||
WHERE
|
WHERE p_aux.is_private = True AND
|
||||||
p_aux.is_private = True AND
|
p_aux.owner_id = {tbl}.owner_id
|
||||||
p_aux.owner_id = {tbl}.owner_id"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
||||||
|
|
||||||
|
@ -465,13 +508,14 @@ def attach_public_projects_same_owner(queryset, user, as_field="public_projects_
|
||||||
"""
|
"""
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
if user is None or user.is_anonymous():
|
if user is None or user.is_anonymous():
|
||||||
sql = """SELECT 0"""
|
sql = "SELECT 0"
|
||||||
else:
|
else:
|
||||||
sql = """SELECT COUNT(id)
|
sql = """
|
||||||
|
SELECT COUNT(id)
|
||||||
FROM projects_project p_aux
|
FROM projects_project p_aux
|
||||||
WHERE
|
WHERE p_aux.is_private = False AND
|
||||||
p_aux.is_private = False AND
|
p_aux.owner_id = {tbl}.owner_id
|
||||||
p_aux.owner_id = {tbl}.owner_id"""
|
"""
|
||||||
|
|
||||||
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue