module Admin class EffectiveCpdAuditsDatatable < Effective::Datatable filters do scope :all scope :available, label: 'In Progress' scope :done scope :waiting_on_admin scope :waiting_on_auditee, label: "Waiting on #{cpd_auditee_label}" scope :waiting_on_reviewers, label: "Waiting on #{cpd_reviewers_label}" end datatable do order :updated_at col :id, visible: false col :created_at, visible: false col :updated_at, visible: false col :token, visible: false col :cpd_audit_level, label: cpd_audit_level_label, search: EffectiveCpd.CpdAuditLevel.sorted.all col :user, search: :string col(:cpd_audit_reviews, search: :string) do |cpd_audit| cpd_audit.cpd_audit_reviews.map(&:user).map do |user| content_tag(:div, class: 'col-resource_item') do url = view.respond_to?(:edit_admin_user_path) ? edit_admin_user_path(user) : "/admin/users/#{user.to_param}/edit" link_to(user.to_s, url) end end.join.html_safe end.search do |collection, term, column, sql_column| user_klass = EffectiveCpd.CpdAudit.first.user&.class if user_klass.present? users = Effective::Resource.new(user_klass).search_any(term) cpd_audit_reviews = EffectiveCpd.CpdAuditReview.where(user_id: users) collection.where(id: cpd_audit_reviews.select('cpd_audit_id AS id')) else collection.where(id: nil) end end col :notification_date col :extension_date, visible: false col :due_date col :status col(:cpd_audit_recommendations, label: 'Recommendation', visible: false) do |cpd_audit| cpd_audit.cpd_audit_reviews.map(&:recommendation).map do |recommendation| content_tag(:div, recommendation.to_s, class: 'col-resource_item') end.join.html_safe end col(:cpd_audit_review_item_recommendations, label: 'Item Recommendations', search: :string, visible: false) do |cpd_audit| recommendations = cpd_audit.cpd_audit_reviews.map(&:recommendation) item_recommendations = cpd_audit.cpd_audit_reviews.flat_map { |r| r.cpd_audit_review_items.map(&:recommendation) } reviews = ((recommendations + item_recommendations) - ['', nil]).uniq reviews.to_sentence end col(:cpd_audit_comments, search: :string, visible: false) do |cpd_audit| item_comments = cpd_audit.cpd_audit_reviews.flat_map { |r| r.cpd_audit_review_items.map(&:comments) }.join cpd_audit.cpd_audit_reviews.map(&:comments).map do |comments| content_tag(:div, simple_format(comments.to_s + item_comments), class: 'col-resource_item') end.join.html_safe end col :determination col(:auditee_cpd_statements, visible: false) do |cpd_audit| cpd_audit.user.cpd_statements.map do |cpd_statement| content_tag(:div, class: 'col-resource_item') do link_to(cpd_statement.to_s, effective_cpd.admin_cpd_statement_path(cpd_statement)) end end.join.html_safe end col :conflict_of_interest, visible: false col :conflict_of_interest_reason, visible: false col :exemption_request, visible: false col :exemption_request_reason, visible: false col :extension_request, visible: false col :extension_request_date, visible: false col :extension_request_reason, visible: false col :files, visible: false actions_col end collection do EffectiveCpd.CpdAudit.all.deep end end end