diff options
Diffstat (limited to 'app/models/customer_relations/organization.rb')
-rw-r--r-- | app/models/customer_relations/organization.rb | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/app/models/customer_relations/organization.rb b/app/models/customer_relations/organization.rb index 705e84250c9..5eda9b4bf15 100644 --- a/app/models/customer_relations/organization.rb +++ b/app/models/customer_relations/organization.rb @@ -23,6 +23,9 @@ class CustomerRelations::Organization < ApplicationRecord validates :description, length: { maximum: 1024 } validate :validate_root_group + scope :order_scope_asc, ->(field) { order(arel_table[field].asc.nulls_last) } + scope :order_scope_desc, ->(field) { order(arel_table[field].desc.nulls_last) } + # Searches for organizations with a matching name or description. # # This method uses ILIKE on PostgreSQL @@ -38,6 +41,14 @@ class CustomerRelations::Organization < ApplicationRecord where(state: state) end + def self.sort_by_field(field, direction) + if direction == :asc + order_scope_asc(field) + else + order_scope_desc(field) + end + end + def self.sort_by_name order(name: :asc) end @@ -55,28 +66,30 @@ class CustomerRelations::Organization < ApplicationRecord JOIN #{table_name} AS new_organizations ON new_organizations.group_id = :old_group_id AND LOWER(new_organizations.name) = LOWER(existing_organizations.name) WHERE existing_organizations.group_id = :new_group_id AND organization_id = existing_organizations.id SQL - connection.execute(sanitize_sql([ - update_query, - old_group_id: group.root_ancestor.id, - new_group_id: group.id - ])) + connection.execute(sanitize_sql([update_query, old_group_id: group.root_ancestor.id, new_group_id: group.id])) dupes_query = <<~SQL DELETE FROM #{table_name} AS existing_organizations USING #{table_name} AS new_organizations WHERE existing_organizations.group_id = :new_group_id AND new_organizations.group_id = :old_group_id AND LOWER(new_organizations.name) = LOWER(existing_organizations.name) SQL - connection.execute(sanitize_sql([ - dupes_query, - old_group_id: group.root_ancestor.id, - new_group_id: group.id - ])) + connection.execute(sanitize_sql([dupes_query, old_group_id: group.root_ancestor.id, new_group_id: group.id])) where(group: group).update_all(group_id: group.root_ancestor.id) end + def self.counts_by_state + default_state_counts.merge(group(:state).count) + end + private + def self.default_state_counts + states.keys.each_with_object({}) do |key, memo| + memo[key] = 0 + end + end + def validate_root_group return if group&.root? |