diff --git a/app/models/concerns/line_item_stock_changes.rb b/app/models/concerns/line_item_stock_changes.rb new file mode 100644 index 0000000000..a61bb21be3 --- /dev/null +++ b/app/models/concerns/line_item_stock_changes.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Rails 5 introduced some breaking changes to these built-in methods, and the new versions +# no longer work correctly in relation to decrementing stock with LineItems / VariantOverrides. +# The following methods re-instate the pre-Rails-5 versions, which work as expected. +# https://apidock.com/rails/v4.2.9/ActiveRecord/Persistence/increment%21 +# https://apidock.com/rails/v4.2.9/ActiveRecord/Persistence/decrement%21 + +module LineItemStockChanges + extend ActiveSupport::Concern + + def increment!(attribute, by = 1) + increment(attribute, by).update_attribute(attribute, self[attribute]) + end + + def decrement!(attribute, by = 1) + decrement(attribute, by).update_attribute(attribute, self[attribute]) + end +end diff --git a/app/models/spree/line_item.rb b/app/models/spree/line_item.rb index c2da5814d6..6b502e1bcd 100644 --- a/app/models/spree/line_item.rb +++ b/app/models/spree/line_item.rb @@ -6,6 +6,7 @@ require 'variant_units/variant_and_line_item_naming' module Spree class LineItem < ActiveRecord::Base include VariantUnits::VariantAndLineItemNaming + include LineItemStockChanges include LineItemBasedAdjustmentHandling belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items