From 05ca909741c1a88d204ba97de173e92429adec27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Wed, 9 Sep 2020 12:14:01 +0300 Subject: [PATCH 1/5] Always generate reference_no of length 7 --- app/models/billing/reference_no/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/billing/reference_no/base.rb b/app/models/billing/reference_no/base.rb index dcc7718e7c..8614f81f8e 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) From e61601fdd7dbddca1778845d25fd88c13ebe42ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Wed, 9 Sep 2020 12:25:29 +0300 Subject: [PATCH 2/5] BankTransaction: Find reference numbers with any length from description --- app/models/bank_transaction.rb | 5 +++-- app/models/billing/reference_no.rb | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index 69cf6fc2a8..76ed9ae27e 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -121,7 +121,8 @@ def parsed_ref_number 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 || Registrar.where(reference_no: match).present? + end end end diff --git a/app/models/billing/reference_no.rb b/app/models/billing/reference_no.rb index 23812214c9..849c06b85a 100644 --- a/app/models/billing/reference_no.rb +++ b/app/models/billing/reference_no.rb @@ -1,6 +1,7 @@ module Billing class ReferenceNo REGEXP = /\A\d{2,20}\z/ + MULTI_REGEXP = /(\d{2,20})/ def self.generate base = Base.generate From 15470b7ec40c1085fafe8ec3fd8c771865d389eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Wed, 9 Sep 2020 13:14:26 +0300 Subject: [PATCH 3/5] Fix CC issues --- app/models/bank_transaction.rb | 6 +----- app/models/billing/reference_no.rb | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index 76ed9ae27e..4b6b6eda0e 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -38,11 +38,7 @@ def autobind_invoice(manual: false) return unless invoice return unless invoice.payable? - channel = if manual - 'admin_payment' - else - 'system_payment' - end + channel = manual ? 'admin_payment' : 'system_payment' create_internal_payment_record(channel: channel, invoice: invoice, registrar: registrar) end diff --git a/app/models/billing/reference_no.rb b/app/models/billing/reference_no.rb index 849c06b85a..263100e799 100644 --- a/app/models/billing/reference_no.rb +++ b/app/models/billing/reference_no.rb @@ -1,7 +1,7 @@ module Billing class ReferenceNo - REGEXP = /\A\d{2,20}\z/ - MULTI_REGEXP = /(\d{2,20})/ + REGEXP = /\A\d{2,20}\z/.freeze + MULTI_REGEXP = /(\d{2,20})/.freeze def self.generate base = Base.generate From 166ff44491e7dd32c3e75699ae56bbfe1cf2c906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Wed, 9 Sep 2020 13:42:29 +0300 Subject: [PATCH 4/5] Validate given reference number --- app/models/bank_transaction.rb | 2 +- app/models/billing/reference_no.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index 4b6b6eda0e..0370ad6665 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -118,7 +118,7 @@ def parsed_ref_number def ref_number_from_description (Billing::ReferenceNo::MULTI_REGEXP.match(description) || []).captures.each do |match| - break match if match.length == 7 || Registrar.where(reference_no: match).present? + break match if match.length == 7 || Billing::ReferenceNo.valid?(match) end end end diff --git a/app/models/billing/reference_no.rb b/app/models/billing/reference_no.rb index 263100e799..d164f7565d 100644 --- a/app/models/billing/reference_no.rb +++ b/app/models/billing/reference_no.rb @@ -7,5 +7,10 @@ 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 From dd48bb61d910020fb292660c46875979c9d96121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Thu, 10 Sep 2020 10:44:18 +0300 Subject: [PATCH 5/5] Verify ref_number_from_description return correct match --- app/models/bank_transaction.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb index 0370ad6665..a610b41f88 100644 --- a/app/models/bank_transaction.rb +++ b/app/models/bank_transaction.rb @@ -118,7 +118,11 @@ def parsed_ref_number def ref_number_from_description (Billing::ReferenceNo::MULTI_REGEXP.match(description) || []).captures.each do |match| - break match if match.length == 7 || Billing::ReferenceNo.valid?(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