Class: CustomerSalesActivityFlagSync
- Inherits:
-
Object
- Object
- CustomerSalesActivityFlagSync
- Defined in:
- app/services/customer_sales_activity_flag_sync.rb
Overview
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).
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.
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(customer) ⇒ CustomerSalesActivityFlagSync
constructor
A new instance of CustomerSalesActivityFlagSync.
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
#call ⇒ Object
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 |