mirror of
https://github.com/rickbarrette/redmine_qbo.git
synced 2026-04-03 16:51:58 -04:00
Enhance Customer model with redmine's built in searchable and event capabilities
This commit is contained in:
@@ -10,6 +10,9 @@
|
||||
|
||||
class Customer < ActiveRecord::Base
|
||||
|
||||
include Redmine::Acts::Searchable
|
||||
include Redmine::Acts::Event
|
||||
|
||||
has_many :issues
|
||||
has_many :invoices
|
||||
has_many :estimates
|
||||
@@ -18,6 +21,16 @@ class Customer < ActiveRecord::Base
|
||||
|
||||
self.primary_key = :id
|
||||
|
||||
acts_as_searchable columns: %w[name phone_number mobile_phone_number ],
|
||||
scope: ->(_context) { left_joins(:project) },
|
||||
date_column: :updated_at
|
||||
|
||||
acts_as_event :title => Proc.new {|o| "#{o}"},
|
||||
:url => Proc.new {|o| { :controller => 'customers', :action => 'show', :id => o.id} },
|
||||
:type => :to_s,
|
||||
:description => Proc.new {|o| "#{I18n.t :label_primary_phone}: #{o.phone_number} #{I18n.t:label_mobile_phone}: #{o.mobile_phone_number}"},
|
||||
:datetime => Proc.new {|o| o.updated_at || o.created_at}
|
||||
|
||||
# Convenience Method
|
||||
# returns the customer's email
|
||||
def email
|
||||
@@ -41,22 +54,6 @@ class Customer < ActiveRecord::Base
|
||||
:customer
|
||||
end
|
||||
|
||||
def event_title
|
||||
to_s
|
||||
end
|
||||
|
||||
def event_description
|
||||
"#{I18n.t :label_primary_phone}: #{primary_phone} #{I18n.t:label_mobile_phone}: #{mobile_phone}"
|
||||
end
|
||||
|
||||
def event_url
|
||||
Rails.application.routes.url_helpers.customer_path(self)
|
||||
end
|
||||
|
||||
def event_datetime
|
||||
updated_at || created_at
|
||||
end
|
||||
|
||||
# Convenience Method
|
||||
# returns the customer's primary phone
|
||||
def primary_phone
|
||||
@@ -79,7 +76,8 @@ class Customer < ActiveRecord::Base
|
||||
update_phone_number
|
||||
end
|
||||
|
||||
# Customers are not bound by a project.
|
||||
# Customers are not bound by a project
|
||||
# but we need to implement this method for the Redmine::Acts::Searchable interface
|
||||
def project
|
||||
nil
|
||||
end
|
||||
@@ -188,32 +186,7 @@ class Customer < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
# Searchs the database for a customer by name or phone number with out special chars
|
||||
def self.search(search)
|
||||
search = sanitize_sql_like(search)
|
||||
customers = where("name LIKE ? OR phone_number LIKE ? OR mobile_phone_number LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%")
|
||||
return customers.order(:name)
|
||||
end
|
||||
|
||||
def self.searchable_columns
|
||||
['name', 'phone_number', 'mobile_phone_number']
|
||||
end
|
||||
|
||||
def self.searchable_options
|
||||
{
|
||||
columns: searchable_columns,
|
||||
scope: self.all
|
||||
}
|
||||
end
|
||||
|
||||
def self.search_results_from_ids(ids, *args)
|
||||
return [] if ids.blank?
|
||||
|
||||
ids = ids.map(&:to_i)
|
||||
records = where(id: ids).index_by(&:id)
|
||||
ids.map { |id| records[id] }.compact
|
||||
end
|
||||
|
||||
# Override the defult redmine seach method to rank results by id
|
||||
def self.search_result_ranks_and_ids(tokens, user, project = nil, options = {})
|
||||
return {} if tokens.blank?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user