Sha256: 2d1bebc5e2d560e2c890a2333163b788fba2283cec70b45c6892219f8114c9c4

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

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

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

        ActiveRecord::Base.transaction do
          line_item = remove_from_line_item(order: order, variant: variant, quantity: quantity, options: options)
          Spree::Cart::Recalculate.new.call(line_item: line_item, order: order, options: options)
          success(line_item)
        end
      end

      private

      def remove_from_line_item(order:, variant:, quantity:, options:)
        line_item = Spree::LineItems::FindByVariant.new.execute(order: order, variant: variant, options: options)

        raise ActiveRecord::RecordNotFound if line_item.nil?

        line_item.quantity -= quantity
        line_item.target_shipment = options[:shipment]

        if line_item.quantity.zero?
          order.line_items.destroy(line_item)
        else
          line_item.save!
        end

        line_item
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spree_core-3.7.0.rc2 app/services/spree/cart/remove_item.rb
spree_core-3.7.0.rc1 app/services/spree/cart/remove_item.rb