mirror of
https://github.com/discourse/discourse-rewind.git
synced 2025-12-13 02:33:35 +00:00
63 lines
1.8 KiB
Ruby
63 lines
1.8 KiB
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
# Assignment statistics using discourse-assign plugin data
|
||
|
|
# Shows how many assignments, completed, pending, etc.
|
||
|
|
module DiscourseRewind
|
||
|
|
module Action
|
||
|
|
class Assignments < BaseReport
|
||
|
|
def call
|
||
|
|
return if !enabled?
|
||
|
|
|
||
|
|
# Assignments made to the user
|
||
|
|
assignments_scope =
|
||
|
|
Assignment
|
||
|
|
.where(assigned_to_id: user.id, assigned_to_type: "User")
|
||
|
|
.where(created_at: date)
|
||
|
|
|
||
|
|
total_assigned = assignments_scope.count
|
||
|
|
|
||
|
|
# Completed assignments (topics that were assigned and then closed or unassigned)
|
||
|
|
completed_count =
|
||
|
|
assignments_scope
|
||
|
|
.joins(:topic)
|
||
|
|
.where(
|
||
|
|
"topics.closed = true OR assignments.active = false OR assignments.updated_at > assignments.created_at",
|
||
|
|
)
|
||
|
|
.distinct
|
||
|
|
.count
|
||
|
|
|
||
|
|
# Currently pending (still open and assigned)
|
||
|
|
pending_count =
|
||
|
|
Assignment
|
||
|
|
.where(assigned_to_id: user.id, assigned_to_type: "User", active: true)
|
||
|
|
.joins(:topic)
|
||
|
|
.where(topics: { closed: false })
|
||
|
|
.count
|
||
|
|
|
||
|
|
# Assignments made by the user to others
|
||
|
|
assigned_by_user =
|
||
|
|
Assignment
|
||
|
|
.where(assigned_by_user_id: user.id)
|
||
|
|
.where(created_at: date)
|
||
|
|
.count
|
||
|
|
|
||
|
|
{
|
||
|
|
data: {
|
||
|
|
total_assigned: total_assigned,
|
||
|
|
completed: completed_count,
|
||
|
|
pending: pending_count,
|
||
|
|
assigned_by_user: assigned_by_user,
|
||
|
|
completion_rate:
|
||
|
|
total_assigned > 0 ? (completed_count.to_f / total_assigned * 100).round(1) : 0,
|
||
|
|
},
|
||
|
|
identifier: "assignments",
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
def enabled?
|
||
|
|
defined?(Assignment) && SiteSetting.assign_enabled
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|