Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 3 additions & 35 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,41 +72,10 @@ def auto_complete_for_customer_name
end

def search
search_criteria = params[:term].strip

@customers = []
@users = []
@tasks = []
@projects = []
@resources = []
@limit = 5
unless search_criteria.blank?
if search_criteria.to_i > 0

@tasks = TaskRecord.all_accessed_by(current_user).where(:task_num => search_criteria)
elsif params[:entity]
@limit = 100000
if params[:entity] =~ /user/
@users = current_user.company.users.where('lower(name) LIKE ?', '%' + search_criteria.downcase + '%').where(:active => true)
elsif params[:entity] =~ /customer/
@customers = current_user.company.customers.where('lower(name) LIKE ?', '%' + search_criteria.downcase + '%').where(:active => true)
elsif params[:entity] =~ /task/
@tasks = TaskRecord.all_accessed_by(current_user).where('lower(tasks.name) LIKE ?', '%' + search_criteria.downcase + '%').where('tasks.status = 0')
elsif params[:entity] =~ /resource/
@resources = current_user.company.resources.where('lower(name) like ?', '%' + search_criteria.downcase + '%') if current_user.use_resources?
elsif params[:entity] =~ /project/
@projects = current_user.projects.where('lower(name) like ?', '%' + search_criteria.downcase + '%')
end
else
@customers = current_user.company.customers.where('lower(name) LIKE ?', '%' + search_criteria.downcase + '%').where(:active => true)
@users = current_user.company.users.where('lower(name) LIKE ?', '%' + search_criteria.downcase + '%').where(:active => true)
@tasks = TaskRecord.all_accessed_by(current_user).where('lower(tasks.name) LIKE ?', '%' + search_criteria.downcase + '%').where('tasks.status = 0')
@resources = current_user.company.resources.where('lower(name) like ?', '%' + search_criteria.downcase + '%') if current_user.use_resources?
@projects = current_user.projects.where('lower(name) like ?', '%' + search_criteria.downcase + '%')
end
end
search_result = ::Searching::CustomerService.new(params[:term].strip, params[:entity], current_user).perform

html = render_to_string :partial => 'customers/search_autocomplete', :locals => search_result

html = render_to_string :partial => 'customers/search_autocomplete', :locals => {:users => @users, :customers => @customers, :tasks => @tasks, :projects => @projects, :resources => @resources, :limit => @limit}
render :json => {:success => true, :html => html}
end

Expand Down Expand Up @@ -134,4 +103,3 @@ def customer_attributes
:set_custom_attribute_values => [:custom_attribute_id, :choice_id, :value]
end
end

12 changes: 12 additions & 0 deletions app/services/searching/base_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

module Searching
class BaseService
def initialize(current_user, search_criteria, limit)
@current_user = current_user
@search_criteria = search_criteria
@resources = []
@limit = limit
end
end
end
28 changes: 28 additions & 0 deletions app/services/searching/by_all_entities_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# frozen_string_literal: true

module ::Searching
class ByAllEntitiesService < Searching::BaseService
attr_reader :current_user, :search_criteria, :limit

def perform
@customers = ::Searching::ByEntity::CustomersService.new(current_user, search_criteria, limit).perform
@users = ::Searching::ByEntity::UsersService.new(current_user, search_criteria, limit).perform
@tasks = ::Searching::ByEntity::TasksService.new(current_user, search_criteria, limit).perform

if current_user.use_resources?
@resources = ::Searching::ByEntity::ResourcesService.new(current_user, search_criteria,
limit).perform
end

@projects = ::Searching::ByEntity::ProjectsService.new(current_user, search_criteria, limit).perform

result
end

private

def result
{ tasks: @tasks, users: @users, customers: @customers, resources: @resources, projects: @projects, limit: @limit }
end
end
end
14 changes: 14 additions & 0 deletions app/services/searching/by_entity/customers_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Searching
module ByEntity
class CustomersService < Searching::BaseService
attr_reader :current_user, :search_criteria

def perform
current_user.company.customers.where('lower(name) LIKE ?',
"%#{search_criteria.downcase}%").where(active: true)
end
end
end
end
13 changes: 13 additions & 0 deletions app/services/searching/by_entity/projects_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

module Searching
module ByEntity
class ProjectsService < Searching::BaseService
attr_reader :current_user, :search_criteria

def perform
current_user.projects.where('lower(name) like ?', "%#{search_criteria.downcase}%")
end
end
end
end
13 changes: 13 additions & 0 deletions app/services/searching/by_entity/resources_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

module Searching
module ByEntity
class ResourcesService < Searching::BaseService
attr_reader :current_user, :search_criteria

def perform
current_user.company.resources.where('lower(name) like ?', "%#{search_criteria.downcase}%")
end
end
end
end
14 changes: 14 additions & 0 deletions app/services/searching/by_entity/tasks_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

module Searching
module ByEntity
class TasksService < Searching::BaseService
attr_reader :current_user, :search_criteria

def perform
TaskRecord.all_accessed_by(current_user).where('lower(tasks.name) LIKE ?',
"%#{search_criteria.downcase}%").where('tasks.status = 0')
end
end
end
end
13 changes: 13 additions & 0 deletions app/services/searching/by_entity/users_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

module Searching
module ByEntity
class UsersService < Searching::BaseService
attr_reader :current_user, :search_criteria

def perform
current_user.company.users.where('lower(name) LIKE ?', "%#{search_criteria.downcase}%").where(active: true)
end
end
end
end
66 changes: 66 additions & 0 deletions app/services/searching/customer_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# frozen_string_literal: true

module Searching
class CustomerService
def initialize(search_criteria, entity, current_user)
@search_criteria = search_criteria
@customers = []
@users = []
@tasks = []
@projects = []
@resources = []
@entity = entity
@limit = entity.present? ? 1_000_000 : 5
@current_user = current_user
end

def perform
raise 'Search term required' if search_criteria.blank?

if search_criteria.to_i.positive?
search_all_tasks
elsif entity
search_by_entity
else
search_by_all_entities
end
end

private

attr_accessor :search_criteria, :customers, :users, :tasks, :projects, :resources, :limit, :entity, :current_user,
:company

def search_all_tasks
@tasks = TaskRecord.all_accessed_by(current_user).where(task_num: search_criteria)
end

def search_by_entity
case entity
when /user/
@users = ::Searching::ByEntity::UsersService.new(current_user, search_criteria, limit).perform
when /customer/
@customers = ::Searching::ByEntity::CustomersService.new(current_user, search_criteria, limit).perform
when /task/
@tasks = ::Searching::ByEntity::TasksService.new(current_user, search_criteria, limit).perform
when /resource/
if current_user.use_resources?
@resources = ::Searching::ByEntity::ResourcesService.new(current_user, search_criteria,
limit).perform
end
when /project/
@projects = ::Searching::ByEntity::ProjectsService.new(current_user, search_criteria, limit).perform
end

result
end

def search_by_all_entities
::Searching::ByAllEntitiesService.new(current_user, search_criteria, limit).perform
end

def result
{ tasks: @tasks, users: @users, customers: @customers, resources: @resources, projects: @projects, limit: @limit }
end
end
end
Loading