diff --git a/app/models/registrar.rb b/app/models/registrar.rb index 6243bf2d9..5c3365f85 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -11,6 +11,29 @@ class Registrar < ActiveRecord::Base validates :name, :reg_no, :country_code, :email, presence: true validates :name, :reg_no, uniqueness: true validate :set_code, if: :new_record? + + before_create :generate_iso_11649_reference_no + def generate_iso_11649_reference_no + return if reference_no.present? + + loop do + base = nil + loop do + base = SecureRandom.random_number.to_s.last(8) + break if base.length == 8 + end + + control_base = (base + '2715' + '00').to_i + reminder = control_base % 97 + check_digits = 98 - reminder + + check_digits = check_digits < 10 ? "0#{check_digits}" : check_digits.to_s + + self.reference_no = "RF#{check_digits}#{base}" + break unless self.class.exists?(reference_no: reference_no) + end + end + after_save :touch_domains_version validates :email, :billing_email, format: /@/, allow_blank: true diff --git a/app/views/admin/registrars/show.haml b/app/views/admin/registrars/show.haml index 79d0de582..32039fbd4 100644 --- a/app/views/admin/registrars/show.haml +++ b/app/views/admin/registrars/show.haml @@ -30,6 +30,9 @@ %dt= t('vat_no') %dd= @registrar.vat_no + %dt= t('reference_no') + %dd= @registrar.reference_no + .col-md-6 .panel.panel-default .panel-heading diff --git a/config/locales/en.yml b/config/locales/en.yml index 826584d0b..3397ea3cf 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -369,7 +369,7 @@ en: registrar_added: 'Registrar added!' failed_to_add_registrar: 'Failed to add registrar' registrar_details: 'Registrar details' - vat_no: 'Vat no' + vat_no: 'VAT no' edit_registrar: 'Edit registrar' back_to_registrar: 'Back to registrar' registrar_updated: 'Registrar updated' @@ -684,11 +684,11 @@ en: queried_at: 'Queried at' import_file_path: 'Import file path' bank_code: 'Bank code' - reference_no: 'Reference number' + reference_no: 'Reference no' currency: 'Currency' buyer_name: 'Buyer name' buyer_iban: 'Buyer IBAN' buyer_bank_code: 'Buyer bank code' bank_reference: 'Bank reference' - document_no: 'Document number' + document_no: 'Document no' import_file: 'Import file' diff --git a/db/migrate/20150414092249_add_reference_no_to_registrar.rb b/db/migrate/20150414092249_add_reference_no_to_registrar.rb new file mode 100644 index 000000000..d49720d0a --- /dev/null +++ b/db/migrate/20150414092249_add_reference_no_to_registrar.rb @@ -0,0 +1,10 @@ +class AddReferenceNoToRegistrar < ActiveRecord::Migration + def change + add_column :registrars, :reference_no, :string + + Registrar.all.each do |x| + x.generate_iso_11649_reference_no + x.save + end + end +end diff --git a/db/migrate/bank_statements.rb b/db/migrate/bank_statements.rb deleted file mode 100644 index e69de29bb..000000000 diff --git a/db/schema.rb b/db/schema.rb index 50aaa5641..eb4e3b731 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150413115829) do +ActiveRecord::Schema.define(version: 20150414092249) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -699,6 +699,7 @@ ActiveRecord::Schema.define(version: 20150413115829) do t.string "directo_handle" t.boolean "vat" t.integer "legacy_id" + t.string "reference_no" end add_index "registrars", ["code"], name: "index_registrars_on_code", using: :btree diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index 88ac65e0f..cb3270444 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -92,6 +92,13 @@ namespace :import do Registrar.import registrars, validate: false + puts "-----> Generating reference numbers" + + Registrar.all.each do |x| + x.generate_iso_11649_reference_no + x.save(validate: false) + end + puts "-----> Imported #{count} new registrars in #{(Time.zone.now.to_f - start).round(2)} seconds" end