Sha256: 3d477748546c11b325c0d603cd3e05158898cb9a9ba74c2ec9a7824424ac072d

Contents?: true

Size: 1.49 KB

Versions: 17

Compression:

Stored size: 1.49 KB

Contents

module Spree
  module Cart
    class AddItem
      prepend Spree::ServiceModule::Base

      def call(order:, variant:, quantity: nil, options: {})
        ApplicationRecord.transaction do
          run :add_to_line_item
          run Spree::Dependencies.cart_recalculate_service.constantize
        end
      end

      private

      def add_to_line_item(order:, variant:, quantity: nil, options: {})
        options ||= {}
        quantity ||= 1

        line_item = Spree::Dependencies.line_item_by_variant_finder.constantize.new.execute(order: order, variant: variant, options: options)

        line_item_created = line_item.nil?
        if line_item.nil?
          opts = ::Spree::PermittedAttributes.line_item_attributes.flatten.each_with_object({}) do |attribute, result|
            result[attribute] = options[attribute]
          end.merge(currency: order.currency).delete_if { |_key, value| value.nil? }

          line_item = order.line_items.new(quantity: quantity,
                                           variant: variant,
                                           options: opts)
        else
          line_item.quantity += quantity.to_i
        end

        line_item.target_shipment = options[:shipment] if options.key? :shipment

        return failure(line_item) unless line_item.save

        ::Spree::TaxRate.adjust(order, [line_item.reload]) if line_item_created
        success(order: order, line_item: line_item, line_item_created: line_item_created, options: options)
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
spree_core-3.7.14.1 app/services/spree/cart/add_item.rb
spree_core-3.7.14 app/services/spree/cart/add_item.rb
spree_core-3.7.13 app/services/spree/cart/add_item.rb
spree_core-3.7.12 app/services/spree/cart/add_item.rb
spree_core-3.7.11 app/services/spree/cart/add_item.rb
spree_core-3.7.10 app/services/spree/cart/add_item.rb
spree_core-3.7.9 app/services/spree/cart/add_item.rb
spree_core-3.7.8 app/services/spree/cart/add_item.rb
spree_core-3.7.7 app/services/spree/cart/add_item.rb
spree_core-3.7.6 app/services/spree/cart/add_item.rb
spree_core-3.7.5 app/services/spree/cart/add_item.rb
spree_core-3.7.4 app/services/spree/cart/add_item.rb
spree_core-3.7.3 app/services/spree/cart/add_item.rb
spree_core-3.7.2 app/services/spree/cart/add_item.rb
spree_core-3.7.1 app/services/spree/cart/add_item.rb
spree_core-3.7.0 app/services/spree/cart/add_item.rb
spree_core-3.7.0.rc3 app/services/spree/cart/add_item.rb