mirror of
https://github.com/rickbarrette/redmine_qbo.git
synced 2026-04-04 09:11: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
|
class Customer < ActiveRecord::Base
|
||||||
|
|
||||||
|
include Redmine::Acts::Searchable
|
||||||
|
include Redmine::Acts::Event
|
||||||
|
|
||||||
has_many :issues
|
has_many :issues
|
||||||
has_many :invoices
|
has_many :invoices
|
||||||
has_many :estimates
|
has_many :estimates
|
||||||
@@ -18,6 +21,16 @@ class Customer < ActiveRecord::Base
|
|||||||
|
|
||||||
self.primary_key = :id
|
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
|
# Convenience Method
|
||||||
# returns the customer's email
|
# returns the customer's email
|
||||||
def email
|
def email
|
||||||
@@ -41,22 +54,6 @@ class Customer < ActiveRecord::Base
|
|||||||
:customer
|
:customer
|
||||||
end
|
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
|
# Convenience Method
|
||||||
# returns the customer's primary phone
|
# returns the customer's primary phone
|
||||||
def primary_phone
|
def primary_phone
|
||||||
@@ -79,7 +76,8 @@ class Customer < ActiveRecord::Base
|
|||||||
update_phone_number
|
update_phone_number
|
||||||
end
|
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
|
def project
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
@@ -188,32 +186,7 @@ class Customer < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Searchs the database for a customer by name or phone number with out special chars
|
# Override the defult redmine seach method to rank results by id
|
||||||
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
|
|
||||||
|
|
||||||
def self.search_result_ranks_and_ids(tokens, user, project = nil, options = {})
|
def self.search_result_ranks_and_ids(tokens, user, project = nil, options = {})
|
||||||
return {} if tokens.blank?
|
return {} if tokens.blank?
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user