Class: MassSearch::CustomerAssignToCampaignWorker
- Inherits:
-
Object
- Object
- MassSearch::CustomerAssignToCampaignWorker
- Includes:
- Sidekiq::Job, Sidekiq::Status::Worker
- Defined in:
- app/workers/mass_search/customer_assign_to_campaign_worker.rb
Overview
Assigns selected Customers to a Campaign in the background.
action_params: { campaign: { campaign_id:, new_campaign_name:, audience_name:, reopen:, activate: } }
Instance Method Summary collapse
-
#perform(args = {}) ⇒ Object
Runs the job.
Instance Method Details
#perform(args = {}) ⇒ Object
Runs the job.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'app/workers/mass_search/customer_assign_to_campaign_worker.rb', line 15 def perform(args = {}) search = Search.find(args[:search_id]) CurrentScope.locale = args[:locale]&.to_sym || :en params = (args[:action_params] || {}).with_indifferent_access campaign_params = params[:campaign] || {} campaign = resolve_campaign(campaign_params) return unless campaign audience = resolve_audience(campaign, campaign_params) return unless audience&.persisted? subscribed_ids = campaign.audience_members.where.not(customer_id: nil).distinct.pluck(:customer_id) customer_ids = search.pinned_query .where.not(resource_id: nil) .joins("join parties p on p.id = search_results.resource_id and p.type = 'Customer' and p.state NOT IN ('closed','bankrupt','guest')") .distinct.pluck(:resource_id) campaign.audience_members.inactive.where(customer_id: customer_ids).find_each(&:activate) customer_ids -= subscribed_ids rows = customer_ids.map { |cid| { audience_id: audience.id, customer_id: cid, active: true } } AudienceMember.insert_all(rows) if rows.any? campaign.activate if campaign_params[:activate].to_b && campaign.inactive? path = campaign_params[:reopen].to_b ? UrlHelper.instance.search_path(search.id) : UrlHelper.instance.campaign_path(campaign.id) store info_message: "Audience with #{customer_ids.size} audience_members added to campaign.", redirect_to: path end |