module Admin class EffectiveCpdAuditsDatatable < Effective::Datatable filters do scope :all scope :available, label: 'In Progress' scope :completed scope :waiting_on_admin scope :waiting_on_auditee scope :waiting_on_reviewers end datatable do col :id, visible: false col :created_at, visible: false col :updated_at, visible: false col :token, visible: false col :cpd_audit_level, label: 'Audit Level' col :user, search: :string, label: 'Auditee' col(:cpd_audit_reviews, label: 'Auditor Reviewers', search: :string) do |cpd_audit| cpd_audit.cpd_audit_reviews.map(&:user).map do |user| content_tag(:div, class: 'col-resource_item') do if view.respond_to?(:edit_admin_user_path) link_to(user.to_s, edit_admin_user_path(user)) else user.to_s end end end.join.html_safe end.search do |collection, term, column, sql_column| user_klass = Effective::CpdAudit.first.user&.class if user_klass.present? users = Effective::Resource.new(user_klass).search_any(term) cpd_audit_reviews = Effective::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, label: 'Date of Notification' col :extension_date, label: 'Approved 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_reveiw_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, label: 'Reviewer 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, label: 'Auditee 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 actions_col end collection do Effective::CpdAudit.all.deep end end end