Class: CustomerSalesActivityFlagSync

Inherits:
Object
  • Object
show all
Defined in:
app/services/customer_sales_activity_flag_sync.rb

Overview

Note:

preserves a pre-existing quirk -- Party.where(id: party_ids) .update_all(open_sales_activity: has_open_activities.include?(id)) applies a
single boolean (whether THE CUSTOMER has open activities) across all related
parties, rather than per-party. The customer's own row is then overwritten
with the same value. Whether that should be per-party is a separate concern;
this extraction keeps the historical behavior intact so callers do not break.

Recomputes the denormalized parties.open_sales_activity flag for a customer
and its contacts based on currently-open sales activities. Returns true if
the customer itself has any open sales activity.

Flat name required because Customer is an AR model (Zeitwerk).

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(customer) ⇒ CustomerSalesActivityFlagSync

Returns a new instance of CustomerSalesActivityFlagSync.



20
21
22
# File 'app/services/customer_sales_activity_flag_sync.rb', line 20

def initialize(customer)
  @customer = customer
end

Class Method Details

.call(customer) ⇒ Object



16
17
18
# File 'app/services/customer_sales_activity_flag_sync.rb', line 16

def self.call(customer)
  new(customer).call
end

Instance Method Details

#callObject



24
25
26
27
28
29
30
31
32
33
34
# File 'app/services/customer_sales_activity_flag_sync.rb', line 24

def call
  party_ids = @customer.self_and_contacts_party_ids_arr
  parties_with_open = Activity.sales_activities
                              .open_activities
                              .where(party_id: party_ids)
                              .group(:party_id)
                              .pluck(:party_id)
  customer_has_open = parties_with_open.include?(@customer.id)
  write_flags(party_ids, customer_has_open)
  parties_with_open.any?
end