· 6 years ago · Jun 16, 2019, 12:50 AM
1def self.salesforce_send_close_message
2 users = User.where("salesforce_access_token IS NOT NULL AND referral_ask_from_crm = true")
3 users.each do |u|
4 begin
5 SalesforceAuth.refresh_access_token!(u)
6 client = Restforce.new(
7 oauth_token: u.salesforce_access_token,
8 refresh_token: u.salesforce_refresh_token,
9 client_id: ENV["SALESFORCE_CLIENT_ID"],
10 client_secret: ENV["SALESFORCE_SECRET"],
11 authentication_callback: Proc.new { |x| Rails.logger.debug x.to_s },
12 api_version: '41.0'
13 )
14 user_info = client.user_info
15 opportunities = client.query("select Id, Name, AccountId, IsClosed, IsWon, LastModifiedDate from Opportunity where IsClosed = true AND IsDeleted = false AND LastModifiedDate >= #{1.day.ago.iso8601} AND OwnerId = '#{user_info["user_id"]}'")
16 opportunities.each do |o|
17 next unless o["AccountId"].present?
18 followup = u.salesforce_followups.find_by(external_id: o["Id"])
19 next if followup
20 new_followup = u.salesforce_followups.create(
21 external_id: o["Id"],
22 deal_name: o["Name"]
23 )
24 deal_name = o["Name"]
25 contacts = client.query("select Id, FirstName, LastName, Email from Contact where AccountId = '#{o["AccountId"]}' ")
26 advocates = contacts.select { |c| c["Email"].present? }.map do |c|
27 advocate = u.advocates.find_or_initialize_by(email: c["Email"])
28 advocate.first_name = c["FirstName"] unless advocate.first_name.present?
29 advocate.last_name = c["LastName"] unless advocate.last_name.present?
30 advocate.save
31 advocate
32 end
33 template_type = o["IsWon"] ? 'won' : 'lost'
34 delivery_message_template = retrieve_delivery_message_template(u, template_type)
35 foo_template = retrieve_foo_template(u, template_type)
36 next unless delivery_message_template && foo_template
37 bundle = u.bundles.create(
38 delivery_message_template: delivery_message_template,
39 foo_template: foo_template
40 )
41
42 DeliveryMailer.salesforce_end_of_sales_cycle(u, advocates, bundle, deal_name).deliver
43 end
44 rescue Exception => e
45 Honeybadger.notify(
46 "Failed salesforce send for user with id #{u.id}",
47 context: {
48 user: u.attributes,
49 message: e.message
50 },
51 backtrace: e.backtrace
52 )
53 end
54 end
55end