Class: Role

Inherits:
ApplicationRecord show all
Includes:
Models::Lineage
Defined in:
app/models/role.rb

Overview

== Schema Information

Table name: roles
Database name: primary

id :integer not null, primary key
description :string(255) default(" "), not null
is_workgroup :boolean
name :string(255)
parent_id :integer

Indexes

index_roles_on_parent_id (parent_id)

Foreign Keys

roles_parent_id_fk (parent_id => roles.id) ON DELETE => nullify

Constant Summary collapse

ONLINE_CUSTOMER_ROLE_NAMES =
%w[online_customer_administrator online_customer_sales_supervisor online_customer_sales_representative online_customer_accounting_supervisor].freeze
ONLINE_CUSTOMER_ROLE_DESCRIPTIONS =
{
  'online_customer_administrator' => ['super user', 'can create users', 'can update main account details', 'can edit all user details', 'can change roles/permissions for any user', "can update all user's orders, projects, quotes, rooms, and services"],
  'online_customer_accounting_supervisor' => ['can update main account details', 'can see all user details', "can see any user's orders, projects, quotes, rooms, and services"],
  'online_customer_sales_supervisor' => ['can create sales rep users', 'can edit all sales rep user details', "can update any sales rep user's orders, projects, quotes, rooms, and services"],
  'online_customer_sales_representative' => ['default user role', 'can update their own details', 'can update their own orders, projects, quotes, rooms, and services']
}.freeze

Has and belongs to many collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Models::Lineage

#ancestors, #ancestors_ids, #children_and_roots, #descendants, #descendants_ids, #ensure_non_recursive_lineage, #family_members, #generate_full_name, #generate_full_name_array, #lineage, #lineage_array, #lineage_simple, #root, #root_id, #self_ancestors_and_descendants, #self_ancestors_and_descendants_ids, #self_and_ancestors, #self_and_ancestors_ids, #self_and_children, #self_and_descendants, #self_and_descendants_ids, #self_and_siblings, #self_and_siblings_ids, #siblings, #siblings_ids

Methods inherited from ApplicationRecord

ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation

Methods included from Models::EventPublishable

#publish_event

Class Method Details

.get_available_online_customer_roles_for_role(role) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'app/models/role.rb', line 61

def self.get_available_online_customer_roles_for_role(role)
  if role && (role.name == 'online_customer_administrator')
    available_roles_names = Role::ONLINE_CUSTOMER_ROLE_NAMES
  elsif role && (role.name == 'online_customer_sales_supervisor')
    available_roles_names = ['online_customer_sales_representative']
  else
    available_roles_names = []
  end
  Role.where(name: available_roles_names)
end

.managed_by_rolesActiveRecord::Relation<Role>

A relation of Roles that are managed by roles. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Role>)

See Also:



47
# File 'app/models/role.rb', line 47

scope :managed_by_roles, ->(role_ids) { descendants_only(role_ids) }

.managerial_rolesActiveRecord::Relation<Role>

A relation of Roles that are managerial roles. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Role>)

See Also:



46
# File 'app/models/role.rb', line 46

scope :managerial_roles, -> { where('roles.parent_id IS NOT NULL') }

.online_customer_rolesActiveRecord::Relation<Role>

A relation of Roles that are online customer roles. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Role>)

See Also:



48
# File 'app/models/role.rb', line 48

scope :online_customer_roles, -> { where(name: ONLINE_CUSTOMER_ROLE_NAMES) }

.select_options(*args) ⇒ Object



50
51
52
53
54
55
# File 'app/models/role.rb', line 50

def self.select_options(*args)
  args = args.compact.uniq if args.present?
  roles = Role.all.order('name')
  roles = roles.where('roles.id NOT IN (?)', args) if args.present?
  roles.map { |r| [r.name.humanize, r.id] }.sort_by(&:first)
end

.workgroupsActiveRecord::Relation<Role>

A relation of Roles that are workgroups. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Role>)

See Also:



45
# File 'app/models/role.rb', line 45

scope :workgroups, -> { where(is_workgroup: true) }

Instance Method Details

#accountsActiveRecord::Relation<Account>

has_many :accounts_roles, dependent: :destroy
has_many :accounts, through: :accounts_roles

Returns:

  • (ActiveRecord::Relation<Account>)

See Also:



37
# File 'app/models/role.rb', line 37

has_and_belongs_to_many :accounts, inverse_of: :roles

#activity_typesActiveRecord::Relation<ActivityType>

Returns:

See Also:



39
# File 'app/models/role.rb', line 39

has_and_belongs_to_many :activity_types

#is_manager?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/role.rb', line 57

def is_manager?
  !(name =~ /_manager$/).nil?
end

#topicsActiveRecord::Relation<Topic>

Returns:

  • (ActiveRecord::Relation<Topic>)

See Also:



40
# File 'app/models/role.rb', line 40

has_and_belongs_to_many :topics