Class: NewLead::LeadActivityAssigner

Inherits:
BaseService
  • Object
show all
Defined in:
app/services/new_lead/lead_activity_assigner.rb

Overview

Service object: lead activity assigner.

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Instance Method Details

#process(customer, notes: nil) ⇒ Object



9
10
11
12
13
14
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
# File 'app/services/new_lead/lead_activity_assigner.rb', line 9

def process(customer, notes: nil)
  _ = []
  activities_created = []
  activities_in_error = []
  activity_agendas = ActivityAgenda.seek_lead_assigned_activities(customer)
  activity_agendas.each do |aa|
    # Is there an existing open lead activity re-evaluate the assignment sequence
    if (lead_activity = customer.related_activities.open_activities.joins(:activity_type).where(ActivityType[:task_type].eq(aa.activity_type.task_type)).first ||
                       customer.related_activities.open_activities.sales_activities.first)
      # lead_activity.update_attribute!(:assigned_resource_id, customer.primary_sales_rep_id)
      lead_activity.set_assigned_rep
      lead_activity.new_note = notes
      lead_activity.save
    else
      lead_activity = customer.create_activity(aa.activity_type.task_type, notes: notes)
    end
    next unless lead_activity

    if lead_activity.new_record?
      activities_in_error << lead_activity
    else
      activities_created << lead_activity
    end
  end

  status = if activities_created.present?
             :success
           elsif activities_in_error.present?
             :error
           else
             :none_created
           end

  Result.new(status: status, activities_created: activities_created, activities_in_error: activities_in_error)
end