Sha256: 89a5062768f2c275758e3d6aea1e155edc9041761ecaf861b75f4216921d4892

Contents?: true

Size: 1.13 KB

Versions: 26

Compression:

Stored size: 1.13 KB

Contents

module Spree
  class Exchange
    class UnableToCreateShipments < StandardError; end
    extend ActiveModel::Naming

    def initialize(order, reimbursement_objects)
      @order = order
      @reimbursement_objects = reimbursement_objects
    end

    def description
      @reimbursement_objects.map do |reimbursement_object|
        "#{reimbursement_object.variant.options_text} => #{reimbursement_object.exchange_variant.options_text}"
      end.join(" | ")
    end

    def display_amount
      Spree::Money.new @reimbursement_objects.map(&:total).sum
    end

    def perform!
      begin
        shipments = Spree::Config.stock.coordinator_class.new(@order, @reimbursement_objects.map(&:build_exchange_inventory_unit)).shipments
      rescue Spree::Order::InsufficientStock
        raise UnableToCreateShipments.new("Could not generate shipments for all items. Out of stock?")
      end
      @order.shipments += shipments
      @order.save!
      shipments.each do |shipment|
        shipment.update!(@order)
        shipment.finalize!
      end
    end

    def to_key
      nil
    end

    def self.param_key
      "spree_exchange"
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
solidus_core-2.3.1 app/models/spree/exchange.rb
solidus_core-2.2.2 app/models/spree/exchange.rb
solidus_core-2.1.1 app/models/spree/exchange.rb
solidus_core-2.0.3 app/models/spree/exchange.rb
solidus_core-1.4.2 app/models/spree/exchange.rb
solidus_core-2.3.0 app/models/spree/exchange.rb
solidus_core-2.3.0.rc3 app/models/spree/exchange.rb
solidus_core-2.3.0.rc2 app/models/spree/exchange.rb
solidus_core-2.3.0.rc1 app/models/spree/exchange.rb
solidus_core-2.3.0.beta1 app/models/spree/exchange.rb
solidus_core-2.0.2 app/models/spree/exchange.rb
solidus_core-1.4.1 app/models/spree/exchange.rb
solidus_core-2.2.1 app/models/spree/exchange.rb
solidus_core-2.2.0 app/models/spree/exchange.rb
solidus_core-2.2.0.rc1 app/models/spree/exchange.rb
solidus_core-2.2.0.beta1 app/models/spree/exchange.rb
solidus_core-2.1.0 app/models/spree/exchange.rb
solidus_core-2.1.0.rc1 app/models/spree/exchange.rb
solidus_core-2.0.1 app/models/spree/exchange.rb
solidus_core-2.1.0.beta1 app/models/spree/exchange.rb