Sha256: d40c64cf367e0ee072190e1008596c5fa1cf051dac0f78ad2e12424edd75a400

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

namespace :drip do
  desc 'Imports order data into Drip'
  task import_orders: :environment do
    puts 'Starting Drip Order Import...'

    require 'drip'

    drip_client = SolidusDrip::Base.new.client

    # Completed Orders
    order_activities = []
    Spree::Order.complete.find_each do |order|
      drip = SolidusDrip::ShopperActivity::Order.new(order)
      action = drip_status(order)
      order_activities << drip.send(:order_data, action) # order_data is a private method

      # 1000 is the limit on orders that can be sent at a time. Once we have
      # that amount of data we send it all to Drip
      if order_activities.count == 1000
        puts 'Sending 1000 orders to Drip...'
        # Send to drip
        drip_client.create_order_activity_events(order_activities)
        # Reset
        order_activities = []
      end
    end

    # Send any extra data that wasn't part of the loop
    if order_activities.count.positive?
      puts "Sending remaining #{order_activities.count} orders to Drip..."
      drip_client.create_order_activity_events(order_activities)
    end

    puts 'Drip Order Import Complete!'
  end
end

##
# Calculates the drip status to be sent for the given order
#
def drip_status(order)
  if order.shipped?
    'fulfilled'
  elsif order.paid?
    'paid'
  else
    'updated'
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
solidus_drip-0.1.0 lib/tasks/drip_import_orders.rake