From 39826bd5034cfba06c0300004ada3f844818b2a4 Mon Sep 17 00:00:00 2001 From: Simao Belchior Date: Fri, 9 Aug 2019 18:28:57 +0100 Subject: [PATCH 1/4] enables managing isins as if they were multiple entries --- app/admin/companies.rb | 6 +++--- app/models/company.rb | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/admin/companies.rb b/app/admin/companies.rb index 27955545c..225fec4bc 100644 --- a/app/admin/companies.rb +++ b/app/admin/companies.rb @@ -34,7 +34,7 @@ row :name row :slug row :sector - row :isin + row :isin, &:isin_string row :geography row :headquarters_geography row :ca100 @@ -119,7 +119,7 @@ column :name do |company| link_to company.name, admin_company_path(company) end - column :isin + column :isin, &:isin_string column :size do |company| company.size.humanize end @@ -136,7 +136,7 @@ f.inputs do columns do column { f.input :name } - column { f.input :isin } + column { f.input :isin, as: :tags } end columns do diff --git a/app/models/company.rb b/app/models/company.rb index 1f13a854f..9bc09a51c 100644 --- a/app/models/company.rb +++ b/app/models/company.rb @@ -48,4 +48,8 @@ def latest_assessment def to_s name end + + def isin_string + isin.split(',') + end end From 0e571c79e6751c2340b9d72139e8147856663105 Mon Sep 17 00:00:00 2001 From: Simao Belchior Date: Mon, 12 Aug 2019 14:29:11 +0100 Subject: [PATCH 2/4] Find companies by name, and merge isins, in a convoluted way maybe --- app/services/import/companies.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/services/import/companies.rb b/app/services/import/companies.rb index 254e4525e..c9c703d93 100644 --- a/app/services/import/companies.rb +++ b/app/services/import/companies.rb @@ -17,7 +17,11 @@ def call def import import_each_with_logging(csv, FILEPATH) do |row| - company = Company.find_or_initialize_by(isin: row[:isin]) + company = Company.find_or_initialize_by(name: row[:company_name]) + + company.isin = company.isin.present? ? + (company.isin.split(',') + [row[:isin]]).uniq.join(",") : row[:isin] + company.update!(company_attributes(row)) create_mq_assessment!(row, company) @@ -28,6 +32,7 @@ def import def cleanup MQ::Assessment.destroy_all CP::Assessment.destroy_all + Company.destroy_all end def csv @@ -67,7 +72,6 @@ def company_attributes(row) geography = Import::GeographyUtils.find_by_iso(fix_iso(row[:country_code])) { - name: row[:company_name], ca100: row[:ca100_company?] == 'Yes', geography: geography, headquarters_geography: geography, From cceccaec06d3ced4d91fd3e236d50935680c152b Mon Sep 17 00:00:00 2001 From: Simao Belchior Date: Mon, 12 Aug 2019 14:42:52 +0100 Subject: [PATCH 3/4] Style amendments --- app/services/import/companies.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/services/import/companies.rb b/app/services/import/companies.rb index c9c703d93..9e3cf7836 100644 --- a/app/services/import/companies.rb +++ b/app/services/import/companies.rb @@ -19,8 +19,11 @@ def import import_each_with_logging(csv, FILEPATH) do |row| company = Company.find_or_initialize_by(name: row[:company_name]) - company.isin = company.isin.present? ? - (company.isin.split(',') + [row[:isin]]).uniq.join(",") : row[:isin] + company.isin = if company.isin.present? + (company.isin.split(',') + [row[:isin]]).uniq.join(',') + else + row[:isin] + end company.update!(company_attributes(row)) From e308deb0901902be4c2ed0addf24a6565f6292b0 Mon Sep 17 00:00:00 2001 From: Simao Belchior Date: Mon, 12 Aug 2019 15:31:53 +0100 Subject: [PATCH 4/4] Move decorative methods to decorator --- app/admin/companies.rb | 7 +++++-- app/decorators/company_decorator.rb | 7 +++++++ app/models/company.rb | 4 ---- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 app/decorators/company_decorator.rb diff --git a/app/admin/companies.rb b/app/admin/companies.rb index 225fec4bc..0e75386aa 100644 --- a/app/admin/companies.rb +++ b/app/admin/companies.rb @@ -1,5 +1,8 @@ ActiveAdmin.register Company do menu priority: 0, parent: 'TPI' + + decorate_with CompanyDecorator + config.sort_order = 'name_asc' publishable_scopes @@ -34,7 +37,7 @@ row :name row :slug row :sector - row :isin, &:isin_string + row :isin, &:isin_as_tags row :geography row :headquarters_geography row :ca100 @@ -119,7 +122,7 @@ column :name do |company| link_to company.name, admin_company_path(company) end - column :isin, &:isin_string + column :isin, &:isin_as_tags column :size do |company| company.size.humanize end diff --git a/app/decorators/company_decorator.rb b/app/decorators/company_decorator.rb new file mode 100644 index 000000000..a722bf2d3 --- /dev/null +++ b/app/decorators/company_decorator.rb @@ -0,0 +1,7 @@ +class CompanyDecorator < Draper::Decorator + delegate_all + + def isin_as_tags + isin.split(',') + end +end diff --git a/app/models/company.rb b/app/models/company.rb index 9bc09a51c..1f13a854f 100644 --- a/app/models/company.rb +++ b/app/models/company.rb @@ -48,8 +48,4 @@ def latest_assessment def to_s name end - - def isin_string - isin.split(',') - end end