Sha256: ea6f70272a6698ee7d609746cc4d7da09bf47c9cd53198a0986aee481044ebb9

Contents?: true

Size: 1.42 KB

Versions: 76

Compression:

Stored size: 1.42 KB

Contents

module Spree
  class StockTransfer < Spree::Base
    include Spree::Core::NumberGenerator.new(prefix: 'T')

    has_many :stock_movements, as: :originator

    belongs_to :source_location, class_name: 'StockLocation', optional: true
    belongs_to :destination_location, class_name: 'StockLocation'

    validates :number, uniqueness: true

    self.whitelisted_ransackable_attributes = %w[reference source_location_id destination_location_id number]

    def to_param
      number
    end

    def source_movements
      find_stock_location_with_location_id(source_location_id)
    end

    def destination_movements
      find_stock_location_with_location_id(destination_location_id)
    end

    def transfer(source_location, destination_location, variants)
      transaction do
        variants.each_pair do |variant, quantity|
          source_location&.unstock(variant, quantity, self)
          destination_location.restock(variant, quantity, self)

          self.source_location = source_location
          self.destination_location = destination_location
          save!
        end
      end
    end

    # receive inventory from external vendor
    def receive(destination_location, variants)
      transfer(nil, destination_location, variants)
    end

    private

    def find_stock_location_with_location_id(location_id)
      stock_movements.joins(:stock_item).where('spree_stock_items.stock_location_id' => location_id)
    end
  end
end

Version data entries

76 entries across 76 versions & 1 rubygems

Version Path
spree_core-4.0.9 app/models/spree/stock_transfer.rb
spree_core-4.1.15 app/models/spree/stock_transfer.rb
spree_core-4.2.7 app/models/spree/stock_transfer.rb
spree_core-4.3.3 app/models/spree/stock_transfer.rb
spree_core-4.2.6 app/models/spree/stock_transfer.rb
spree_core-4.3.2 app/models/spree/stock_transfer.rb
spree_core-4.3.1 app/models/spree/stock_transfer.rb
spree_core-4.3.0 app/models/spree/stock_transfer.rb
spree_core-4.3.0.rc3 app/models/spree/stock_transfer.rb
spree_core-4.3.0.rc2 app/models/spree/stock_transfer.rb
spree_core-4.3.0.rc1 app/models/spree/stock_transfer.rb
spree_core-4.2.5 app/models/spree/stock_transfer.rb
spree_core-4.1.14 app/models/spree/stock_transfer.rb
spree_core-4.0.8 app/models/spree/stock_transfer.rb
spree_core-4.2.4 app/models/spree/stock_transfer.rb
spree_core-3.7.14.1 app/models/spree/stock_transfer.rb
spree_core-4.2.3.1 app/models/spree/stock_transfer.rb
spree_core-4.1.13.1 app/models/spree/stock_transfer.rb
spree_core-4.0.7.1 app/models/spree/stock_transfer.rb
spree_core-4.2.3 app/models/spree/stock_transfer.rb