Sha256: 096775c0e541fcee09179741ca11e7ad7216e97241b1fa9387767f8eebb43437

Contents?: true

Size: 1.63 KB

Versions: 26

Compression:

Stored size: 1.63 KB

Contents

# creates new shipment record
# if selected item (variant) is already added to order it will update line item
# if not - it will create new line item record
module Spree
  module Shipments
    class Create
      prepend Spree::ServiceModule::Base
      include Helper

      def call(store:, shipment_attributes:)
        ActiveRecord::Base.transaction do
          run :prepare_arguments
          run :create_shipment
          run :add_or_update_line_item
        end
      end

      protected

      def prepare_arguments(store:, shipment_attributes:)
        order_id_or_number = shipment_attributes[:order_id]
        order = store.orders.find_by(number: order_id_or_number) || store.orders.find_by(id: order_id_or_number)

        return failure(nil, :order_not_found) if order.nil?

        variant = store.variants.find_by(id: shipment_attributes[:variant_id])
        return failure(nil, :variant_not_found) if variant.nil?

        stock_location = Spree::StockLocation.find_by(id: shipment_attributes[:stock_location_id])
        return failure(nil, :stock_location_not_found) if stock_location.nil?

        quantity = shipment_attributes[:quantity]&.to_i || 1

        success(order: order, stock_location: stock_location, variant: variant, quantity: quantity)
      end

      def create_shipment(order:, stock_location:, variant:, quantity:)
        shipment = order.shipments.create(
          order_id: order.id,
          stock_location_id: stock_location.id
        )
        return failure(shipment) unless shipment.persisted?

        success(order: order, variant: variant, quantity: quantity, shipment: shipment)
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
spree_core-4.10.1 app/services/spree/shipments/create.rb
spree_core-4.10.0 app/services/spree/shipments/create.rb
spree_core-4.9.0 app/services/spree/shipments/create.rb
spree_core-4.8.3 app/services/spree/shipments/create.rb
spree_core-4.8.2 app/services/spree/shipments/create.rb
spree_core-4.7.3 app/services/spree/shipments/create.rb
spree_core-4.6.6 app/services/spree/shipments/create.rb
spree_core-4.5.5 app/services/spree/shipments/create.rb
spree_core-4.4.1 app/services/spree/shipments/create.rb
spree_core-4.5.4 app/services/spree/shipments/create.rb
spree_core-4.6.5 app/services/spree/shipments/create.rb
spree_core-4.7.2 app/services/spree/shipments/create.rb
spree_core-4.7.1 app/services/spree/shipments/create.rb
spree_core-4.6.4 app/services/spree/shipments/create.rb
spree_core-4.7.0 app/services/spree/shipments/create.rb
spree_core-4.6.3 app/services/spree/shipments/create.rb
spree_core-4.6.2 app/services/spree/shipments/create.rb
spree_core-4.6.1 app/services/spree/shipments/create.rb
spree_core-4.6.0 app/services/spree/shipments/create.rb
spree_core-4.5.3 app/services/spree/shipments/create.rb