# frozen_string_literal: true
class OrgAdmin::PlansController < ApplicationController
# GET org_admin/plans
def index
# Test auth directly and throw Pundit error sincePundit
# is unaware of namespacing
unless current_user.present? && current_user.can_org_admin?
raise Pundit::NotAuthorizedError
end
feedback_ids = Role.where(user_id: current_user.id).reviewer.pluck(:plan_id).uniq
@feedback_plans = Plan.where(id: feedback_ids)
@plans = current_user.org.plans.page(1)
end
# GET org_admin/plans/:id/feedback_complete
def feedback_complete
plan = Plan.find(params[:id])
# Test auth directly and throw Pundit error sincePundit is
# unaware of namespacing
unless current_user.present? && current_user.can_org_admin?
raise Pundit::NotAuthorizedError
end
unless plan.reviewable_by?(current_user.id)
raise Pundit::NotAuthorizedError
end
if plan.complete_feedback(current_user)
# rubocop:disable LineLength
redirect_to(org_admin_plans_path,
notice: _("%{plan_owner} has been notified that you have finished providing feedback") % {
plan_owner: plan.owner.name(false)
}
)
# rubocop:enable LineLength
else
redirect_to org_admin_plans_path,
alert: _("Unable to notify user that you have finished providing feedback.")
end
end
# GET /org_admin/download_plans
def download_plans
# Test auth directly and throw Pundit error sincePundit
# is unaware of namespacing
unless current_user.present? && current_user.can_org_admin?
raise Pundit::NotAuthorizedError
end
org = current_user.org
file_name = org.name.gsub(/ /, "_")
.gsub(/[\.;,]/, "")
header_cols = [
"#{_('Project title')}",
"#{_('Template')}",
"#{_('Organisation')}",
"#{_('Owner name')}",
"#{_('Owner email')}",
"#{_('Updated')}",
"#{_('Visibility')}"
]
plans = CSV.generate do |csv|
csv << header_cols
org.plans.includes(template: :org).order(updated_at: :desc).each do |plan|
owner = plan.owner
csv << [
"#{plan.title}",
"#{plan.template.title}",
"#{plan.owner.org.present? ? plan.owner.org.name : ''}",
"#{plan.owner.name(false)}",
"#{plan.owner.email}",
"#{l(plan.latest_update.to_date, format: :csv)}",
"#{Plan::VISIBILITY_MESSAGE[plan.visibility.to_sym].capitalize}"
]
end
end
respond_to do |format|
format.csv { send_data plans, filename: "#{file_name}.csv" }
end
end
end