diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f2dc4016..58302a0b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +10.09.2020 +* New registrar ref nr are now always created 7 digits long [#1679](https://github.com/internetee/registry/pull/1679) + 08.09.2020 * Removed bank statement import option [#1674](https://github.com/internetee/registry/pull/1674) * Fixed error with reference nr not being found in the transaction [#1677](https://github.com/internetee/registry/issues/1677) diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index 10128734b..5a70a4380 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -120,7 +120,12 @@ class BankTransaction < ApplicationRecord end def ref_number_from_description - match_data = /(\d{7})/.match(description) - match_data[0] if match_data.present? + (Billing::ReferenceNo::MULTI_REGEXP.match(description) || []).captures.each do |match| + break match if match.length == 7 || valid_ref_no?(match) + end + end + + def valid_ref_no?(match) + return true if Billing::ReferenceNo.valid?(match) && Registrar.find_by(reference_no: match).any? end end diff --git a/app/models/billing/reference_no.rb b/app/models/billing/reference_no.rb index 23812214c..d164f7565 100644 --- a/app/models/billing/reference_no.rb +++ b/app/models/billing/reference_no.rb @@ -1,10 +1,16 @@ module Billing class ReferenceNo - REGEXP = /\A\d{2,20}\z/ + REGEXP = /\A\d{2,20}\z/.freeze + MULTI_REGEXP = /(\d{2,20})/.freeze def self.generate base = Base.generate "#{base}#{base.check_digit}" end + + def self.valid?(ref) + base = Base.new(ref.to_s[0...-1]) + ref.to_s == "#{base}#{base.check_digit}" + end end end diff --git a/app/models/billing/reference_no/base.rb b/app/models/billing/reference_no/base.rb index dcc7718e7..8614f81f8 100644 --- a/app/models/billing/reference_no/base.rb +++ b/app/models/billing/reference_no/base.rb @@ -2,7 +2,7 @@ module Billing class ReferenceNo class Base def self.generate - new(SecureRandom.random_number(1..1_000_000)) + new((SecureRandom.random_number(9e5) + 1e5).to_i) end def initialize(base)