Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce NumberIdentifier concern #11346

Merged
merged 1 commit into from
Sep 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions core/app/models/concerns/spree/number_identifier.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module Spree
module NumberIdentifier
extend ActiveSupport::Concern

included do
before_validation :uppercase_number

validates :number, presence: true, length: { maximum: 32, allow_blank: true }, uniqueness: { allow_blank: true, case_sensitive: true }
end

protected

def uppercase_number
number&.to_s&.upcase!
end
end
end
3 changes: 2 additions & 1 deletion core/app/models/spree/customer_return.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
module Spree
class CustomerReturn < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'CR', length: 9)
include NumberIdentifier

belongs_to :stock_location
belongs_to :store, class_name: 'Spree::Store', inverse_of: :customer_returns

Expand All @@ -11,7 +13,6 @@ class CustomerReturn < Spree::Base
after_create :process_return!

validates :store, presence: true
validates :number, uniqueness: { case_sensitive: true }
validates :return_items, :stock_location, presence: true
validate :must_have_return_authorization, on: :create
validate :return_items_belong_to_same_order
Expand Down
7 changes: 1 addition & 6 deletions core/app/models/spree/order.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class Order < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'R')
include Spree::Core::TokenGenerator

include NumberIdentifier
include NumberAsParam
include SingleStoreResource
include MemoizedData
Expand Down Expand Up @@ -128,7 +129,6 @@ def states
# Needs to happen before save_permalink is called
before_validation :ensure_store_presence
before_validation :ensure_currency_presence
before_validation :uppercase_number

before_validation :clone_billing_address, if: :use_billing?
attr_accessor :use_billing
Expand All @@ -140,7 +140,6 @@ def states
with_options presence: true do
# we want to have this case_sentive: true as changing it to false causes all SQL to use LOWER(slug)
# which is very costly and slow on large set of records
validates :number, length: { maximum: 32, allow_blank: true }, uniqueness: { allow_blank: true, case_sensitive: true }
validates :email, length: { maximum: 254, allow_blank: true }, email: { allow_blank: true }, if: :require_email
validates :item_count, numericality: { greater_than_or_equal_to: 0, less_than: 2**31, only_integer: true, allow_blank: true }
validates :store
Expand Down Expand Up @@ -730,9 +729,5 @@ def collect_payment_methods(store = nil)
def credit_card_nil_payment?(attributes)
payments.store_credits.present? && attributes[:amount].to_f.zero?
end

def uppercase_number
number&.upcase!
end
end
end
5 changes: 2 additions & 3 deletions core/app/models/spree/payment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
module Spree
class Payment < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'P', letters: true, length: 7)
include NumberIdentifier
include NumberAsParam

include Spree::Payment::Processing

include NumberAsParam

NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze
RISKY_AVS_CODES = ['A', 'C', 'E', 'F', 'G', 'I', 'K', 'L', 'N', 'O', 'P', 'R', 'S', 'U', 'W', 'Z'].freeze
INVALID_STATES = %w(failed invalid).freeze
Expand All @@ -25,7 +25,6 @@ class Payment < Spree::Base
has_many :refunds, inverse_of: :payment

validates :payment_method, presence: true
validates :number, uniqueness: { case_sensitive: true }
validates :source, presence: true, if: -> { payment_method&.source_required? }

before_validation :validate_source
Expand Down
2 changes: 1 addition & 1 deletion core/app/models/spree/reimbursement.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module Spree
class Reimbursement < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'RI', length: 9)
include NumberIdentifier

class IncompleteReimbursementError < StandardError; end

Expand All @@ -15,7 +16,6 @@ class IncompleteReimbursementError < StandardError; end
has_many :return_items
end

validates :number, uniqueness: true
validates :order, presence: true
validate :validate_return_items_belong_to_same_order

Expand Down
2 changes: 1 addition & 1 deletion core/app/models/spree/return_authorization.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module Spree
class ReturnAuthorization < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'RA', length: 9)
include NumberIdentifier

belongs_to :order, class_name: 'Spree::Order', inverse_of: :return_authorizations

Expand All @@ -17,7 +18,6 @@ class ReturnAuthorization < Spree::Base

accepts_nested_attributes_for :return_items, allow_destroy: true

validates :number, uniqueness: true
validates :order, :reason, :stock_location, presence: true
validate :must_have_shipped_units, on: :create

Expand Down
3 changes: 1 addition & 2 deletions core/app/models/spree/shipment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module Spree
class Shipment < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'H', length: 11)

include NumberIdentifier
include NumberAsParam

with_options inverse_of: :shipments do
Expand All @@ -26,7 +26,6 @@ class Shipment < Spree::Base
before_validation :set_cost_zero_when_nil

validates :stock_location, presence: true
validates :number, uniqueness: { case_sensitive: true }

attr_accessor :special_instructions

Expand Down
8 changes: 2 additions & 6 deletions core/app/models/spree/stock_transfer.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
module Spree
class StockTransfer < Spree::Base
include Spree::Core::NumberGenerator.new(prefix: 'T')
include NumberIdentifier
include NumberAsParam

has_many :stock_movements, as: :originator

belongs_to :source_location, class_name: 'StockLocation', optional: true
belongs_to :destination_location, class_name: 'StockLocation'

validates :number, uniqueness: true

self.whitelisted_ransackable_attributes = %w[reference source_location_id destination_location_id number]

def to_param
number
end

def source_movements
find_stock_location_with_location_id(source_location_id)
end
Expand Down
2 changes: 0 additions & 2 deletions core/lib/spree/core/number_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ def included(host)
generator_instance = self

host.class_eval do
validates(:number, presence: true, uniqueness: { allow_blank: true })

before_validation do |instance|
instance.number ||= generate_permalink(host)
end
Expand Down