module Spree
  Variant.class_eval do
    alias_method :orig_price_in, :price_in

    def price_in(currency)
      return orig_price_in(currency) unless product.master.sale_price.present?
      Spree::Price.new(:variant_id => self.id, :amount => product.master.sale_price, :currency => currency)
    end
  end
end

module Spree
  Variant.class_eval do
    alias_method :orig_price_in, :price_in

    def price_in(currency)
      return orig_price_in(currency) unless sale_price.present?
      Spree::Price.new(:variant_id => self.id, :amount => self.sale_price, :currency => currency)
    end
  end
end

Fix how we select sale price
Fix how we select sale price
