Class: ActivitySearch
- Inherits:
-
Search
- Object
- ActiveRecord::Base
- ApplicationRecord
- Search
- ActivitySearch
- Includes:
- Models::SearchAddressable
- Defined in:
- app/models/activity_search.rb
Overview
== Schema Information
Table name: searches
Database name: primary
id :integer not null, primary key
name :string(255)
persist :boolean default(FALSE)
pinned :boolean default(FALSE), not null
query_params :jsonb
result_set_size :integer default(0)
selected_columns :string is an Array
set_limit :integer default(25)
sort_column :string(255)
sort_columns :string default([]), not null, is an Array
sort_direction :string(255) default("ASC")
type :string(255) not null
created_at :datetime
updated_at :datetime
employee_id :integer
Indexes
employee_id_pinned (employee_id,pinned)
employee_id_type (employee_id,type)
Constant Summary
Constants inherited from Search
Instance Attribute Summary
Attributes inherited from Search
#composite_columns, #pagy_count, #pagy_limit, #pagy_page, #sort_column1, #sort_column2, #sort_column3, #sql_select_columns
Class Method Summary collapse
Instance Method Summary collapse
- #address_id_fields ⇒ Object
- #apply_custom_criteria(results) ⇒ Object
- #mass_assign_campaign(params, cur_user = nil) ⇒ Object
- #mass_spread(params, cur_user = nil) ⇒ Object
-
#mass_update(params, cur_user = nil) ⇒ Object
Mass actions section #.
-
#normalize_for_mass_update(resource, params) ⇒ Object
Called by SearchResourceUpdateWorker for each activity before saving.
- #pinned_query ⇒ Object
Methods included from Models::SearchAddressable
Methods inherited from Search
#all_composite_columns, allowed_role_ids, #append_custom_column, #append_ouput_column, #append_to_sql_select_columns, #applicable_sort_terms, #apply_array_match, #apply_criteria, #apply_customer_cross_reference, #apply_distance_search, #apply_select, #apply_sort, #available_events, available_output_columns, #available_output_columns, base_search_class_name, #cleanup_search_results, composite_column, #composite_column, database_columns, default_columns, default_sort, #discard_excess, #effective_name, #effective_short_name, #employee, #enqueue_navbar_pinned_refresh, #fast_count, favorites, friendly_column_name, #get_pinned_results, #get_sort_term, global_favorite, has_role_for_search?, #human_query_params, instantiate_query_template, #instantiate_resource_updater, #limit_options, main_resource_class, main_resource_table, mass_actions_for_select, #mass_export, maximum_unpersisted_queries, options, options_classes, #output_columns_for_select, #pagy_from_search, #perform, #perform_selected, #prepend_custom_column, #prepend_output_column, query_favorites_templates, #ransack_probe_params, recent_searches_for_employee_id, #record_list, #refresh_pinned_results, #remove_other_pins, search_name, #search_name, #search_results, search_type, search_type_humanized, select_sort_columns, #select_sort_columns, #select_statement, #set_defaults, #set_sort_term, #sort_columns_for_select, #sort_columns_to_hash, #target_geocoding, unpersisted_queries_quote_reached?, #unrecord_list, #validated_selected_columns, view_resource_class, view_resource_klass, #view_resource_klass, view_resource_table, visible?, with_search_results
Methods inherited from ApplicationRecord
ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation
Methods included from Models::EventPublishable
Class Method Details
.custom_criteria_keys ⇒ Object
83 84 85 |
# File 'app/models/activity_search.rb', line 83 def self.custom_criteria_keys %w[activity_type_id activity_result_type_id assigned_resource_id] end |
Instance Method Details
#address_id_fields ⇒ Object
79 80 81 |
# File 'app/models/activity_search.rb', line 79 def address_id_fields [['Primary Address', 'primary_address_id']] end |
#apply_custom_criteria(results) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/models/activity_search.rb', line 87 def apply_custom_criteria(results) results = apply_customer_cross_reference(results, :party_id) results = apply_array_match(results, :activity_type_id, nil, 'Note', 'Any') do |values| values += ActivityType.sales_activities.pluck(:id) if values.delete('AnySales') values end results = apply_array_match(results, :activity_result_type_id, nil, 'Open', 'Any') do |values| values += ActivityResultType.completed.pluck(:id) if values.delete('AnyCompletion') values end results = apply_array_match(results, :assigned_resource_id, nil, 'unassigned', 'anybody') results end |
#mass_assign_campaign(params, cur_user = nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/models/activity_search.rb', line 62 def mass_assign_campaign(params, cur_user = nil) campaign_id = params.dig(:campaign, :campaign_id) return { status: :error, message: 'Campaign not selected' } unless campaign_id.present? jid = ::SearchResourceUpdateWorker.perform_async( 'search_id' => id, 'action_params' => { 'resource_params' => { 'campaign_id' => campaign_id } }, 'user_id' => cur_user&.id, 'locale' => I18n.locale.to_s ) { status: :ok, job_id: jid } end |
#mass_spread(params, cur_user = nil) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'app/models/activity_search.rb', line 138 def mass_spread(params, cur_user = nil) return { status: :error, message: 'Please specify a start date and number of activities per day to schedule' } \ unless params[:start_date].present? && params[:max_per_day].to_i > 0 jid = MassSearch::ActivitySpreadWorker.perform_async( 'search_id' => id, 'action_params' => { 'start_date' => params[:start_date], 'max_per_day' => params[:max_per_day] }, 'user_id' => cur_user&.id, 'locale' => I18n.locale.to_s ) { status: :ok, job_id: jid } end |
#mass_update(params, cur_user = nil) ⇒ Object
Mass actions section #
108 109 110 111 112 113 114 115 116 |
# File 'app/models/activity_search.rb', line 108 def mass_update(params, cur_user = nil) jid = ::SearchResourceUpdateWorker.perform_async( 'search_id' => id, 'action_params' => { 'resource_params' => (params[:resource] || {}).to_h }, 'user_id' => cur_user&.id, 'locale' => I18n.locale.to_s ) { status: :ok, job_id: jid } end |
#normalize_for_mass_update(resource, params) ⇒ Object
Called by SearchResourceUpdateWorker for each activity before saving.
Normalises result type sentinel values, resolves "assign to primary rep"
shorthand, and defers ChainRunner to the async handler.
Returns false to skip the record and count it as an error.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'app/models/activity_search.rb', line 122 def normalize_for_mass_update(resource, params) resource.activity_result_type_id = nil if resource.activity_result_type_id.to_i < 0 if params[:assigned_resource_id].to_s == '0' rep = resource.try(:party).try(:customer).try(:primary_sales_rep) unless rep Rails.logger.warn "normalize_for_mass_update: no primary rep for activity #{resource.id} party #{resource.try(:party_id)}" return false end resource.assigned_resource_id = rep.id end resource.halt_chain = true true end |
#pinned_query ⇒ Object
75 76 77 |
# File 'app/models/activity_search.rb', line 75 def pinned_query search_results.joins('left join activities on activities.id = search_results.resource_id').includes(resource: %i[activity_type party]) end |