diff --git a/app/models/exchange.rb b/app/models/exchange.rb index e52d412c96..4657f92946 100644 --- a/app/models/exchange.rb +++ b/app/models/exchange.rb @@ -16,7 +16,7 @@ class Exchange < ApplicationRecord belongs_to :sender, class_name: 'Enterprise' belongs_to :receiver, class_name: 'Enterprise' - has_many :exchange_variants, dependent: :destroy + has_many :exchange_variants, dependent: :delete_all has_many :variants, through: :exchange_variants has_many :exchange_fees, dependent: :destroy @@ -25,6 +25,8 @@ class Exchange < ApplicationRecord validates :order_cycle, :sender, :receiver, presence: true validates :sender_id, uniqueness: { scope: [:order_cycle_id, :receiver_id, :incoming] } + before_destroy :delete_related_exchange_variants, prepend: true + after_save :touch_receiver accepts_nested_attributes_for :variants @@ -118,4 +120,13 @@ class Exchange < ApplicationRecord variant_ids.map{ |variant_id| { variant_id: variant_id, exchange_id: exchange_id } } ) end + + def delete_related_exchange_variants + return unless incoming? + + ExchangeVariant.where(variant_id: variant_ids). + joins(:exchange). + where(exchanges: { order_cycle: order_cycle, incoming: false }). + delete_all + end end diff --git a/app/models/exchange_variant.rb b/app/models/exchange_variant.rb index ac835523af..a3dfc01a40 100644 --- a/app/models/exchange_variant.rb +++ b/app/models/exchange_variant.rb @@ -3,9 +3,15 @@ class ExchangeVariant < ApplicationRecord belongs_to :exchange belongs_to :variant, class_name: 'Spree::Variant' - after_destroy :destroy_related_outgoing_variants - def destroy_related_outgoing_variants - VariantDeleter.new.destroy_related_outgoing_variants(variant_id, exchange.order_cycle) + after_destroy :delete_related_outgoing_variants + + def delete_related_outgoing_variants + return unless exchange.incoming? + + ExchangeVariant.where(variant_id: variant_id). + joins(:exchange). + where(exchanges: { order_cycle: exchange.order_cycle, incoming: false }). + delete_all end end diff --git a/app/services/variant_deleter.rb b/app/services/variant_deleter.rb index d294dfcb98..fb9637f780 100644 --- a/app/services/variant_deleter.rb +++ b/app/services/variant_deleter.rb @@ -11,15 +11,6 @@ class VariantDeleter variant.destroy end - def destroy_related_outgoing_variants(variant_id, order_cycle) - internal_variants = ExchangeVariant.where(variant_id: variant_id). - joins(:exchange). - where( - exchanges: { order_cycle: order_cycle, incoming: false } - ) - internal_variants.destroy_all - end - private def only_variant_on_product?(variant)