Sha256: 0a2e42779d7a5feef22acc7f16da7bf07aac485f394ef184159d7a1dc757a4bd

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

module Workarea
  module Orderbot
    module Inventory
      class ImportInventory
        include Sidekiq::Worker

        def perform(attrs = {})
          inventory = attrs.deep_symbolize_keys

          return unless inventory[:sku].present?

          sku = Workarea::Inventory::Sku.find_or_initialize_by(id: inventory[:sku])

          sku.available = inventory[:quantity_on_hand] || 0
          sku.policy = get_policy(inventory[:sku])

          sku.save!
        end

        private

        def get_policy(sku)
          return "allow_backorder" if is_backorderable?(sku)
          Workarea.config.default_inventory_import_policy || "standard"
        end

        def is_backorderable?(sku)
          gateway = Workarea::Orderbot.gateway

          attrs = {
            response_model: "CustomField",
            sku: sku
          }

          response = gateway.get_products(attrs)

          return unless response.success? && response.body.present?

          fields = response.body.first["custom_fields"]

          backorder_field = fields.detect { |f| f["name"] == "backorderable" }

          return unless backorder_field.present?

          backorder_field["value"]
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
workarea-orderbot-1.0.2 app/workers/workarea/orderbot/inventory/import_inventory.rb
workarea-orderbot-1.0.1 app/workers/workarea/orderbot/inventory/import_inventory.rb
workarea-orderbot-1.0.0 app/workers/workarea/orderbot/inventory/import_inventory.rb