class Eco::API::UseCases::DefaultCases::ToCsvDetailedCase < Eco::API::UseCases::DefaultCases::ToCsvCase name "to-csv-detailed" type :export private def to_row(person) data = super(person) data << person.subordinates data << person_supervisor(person) data += user_abilities(person) data += user_permissions_custom(person) if options.dig(:export, :options, :permissions_custom) account = person.account data << account&.landing_page_id data += user_preferences(person) data end def person_supervisor(person) session.micro.with_supervisor(person.supervisor_id, people) do |supervisor| return supervisor ? supervisor.name : "" end end def user_abilities(person) account_abilities = (person.account && person.account.permissions_merged) || {} abilities.map {|key| account_abilities[key] || "no access"} end def user_permissions_custom(person) account_abilities = (person.account && person.account.permissions_custom) || {} abilities.map {|key| account_abilities[key] || "no access"} end def user_preferences(person) user_preferences = (person.account && person.account.preferences&.doc) || {} preferences.map {|key| user_preferences[key] || false} end def spot_header(person = people.first) super(person) do |header| header << "Subordinates" header << "Supervisor Name" header += abilities_header header += abilities_header("custom") if options.dig(:export, :options, :permissions_custom) header << "Landing Page" header += preferences header end end def keys(entry) super(entry) + ["freemium"] end def login_providers session.login_providers end def abilities @abilities ||= session.presets_factory.keys end def abilities_header(prefix = nil) abilities.map do |key| prefix ? "#{prefix}_#{key}" : key end end def preferences @preferences ||= [ "show_sidebar", "show_shortcuts", "show_coming_soon", "show_recently_visited_forms", "show_tasks", "show_task_bubbles", "kiosk_enabled" ] end def nice_header_maps @nice_header_maps ||= super.merge({ "landing_page_id" => "Landing Page ID", "show_sidebar" => "(pref) Sidebar Open?", "show_shortcuts" => "(pref) Link to Registers?", "show_coming_soon" => "(pref) Coming Soon List?", "show_recently_visited_forms" => "(pref) Recently Visited Forms List?", "show_tasks" => "(pref) Tasks List?", "show_task_bubbles" => "(pref) Task Count Bubbles", "kiosk_enabled" => "Kiosk User?", "freemium" => "Freemium User?", "files" => "(able) on Files", "reports" => "(able) on Report Structures", "data" => "(able) on Data (hours, datasets)", "organization" => "(able) on Organization Config", "pages" => "(able) on Page/Entries", "page_editor" => "(able) page Editor Level", "registers" => "(able) on Registers", "tasks" => "(able) on Tasks", "person_core" => "(able) on People", "person_core_create" => "(able) Create People?", "person_core_edit" => "(able) Edit People?", "person_details" => "(able) on People Schema Details", "person_account" => "(able) on Users", "person_abilities" => "(able) on Users' Abilities", "custom_files" => "(min) on Files", "custom_reports" => "(min) on Report Structures", "custom_data" => "(min) on Data (hours, datasets)", "custom_organization" => "(min) on Organization Config", "custom_pages" => "(min) on Page/Entries", "custom_page_editor" => "(min) page Editor Level", "custom_registers" => "(min) on Registers", "custom_tasks" => "(min) on Tasks", "custom_person_core" => "(min) on People", "custom_person_core_create" => "(min) Create People?", "custom_person_core_edit" => "(min) Edit People?", "custom_person_details" => "(min) on People Schema Details", "custom_person_account" => "(min) on Users", "custom_person_abilities" => "(min) on Users' Abilities" }) end end