From 6f9fd4254e292c5db2b9addd6f9d4a09f458f179 Mon Sep 17 00:00:00 2001 From: Jonathanlau92 Date: Tue, 16 Mar 2021 15:03:39 +0800 Subject: [PATCH 1/4] Add settings to companies --- db/migrate/20210316060147_add_settings_to_companies.rb | 5 +++++ db/schema.rb | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210316060147_add_settings_to_companies.rb diff --git a/db/migrate/20210316060147_add_settings_to_companies.rb b/db/migrate/20210316060147_add_settings_to_companies.rb new file mode 100644 index 000000000..218a36f11 --- /dev/null +++ b/db/migrate/20210316060147_add_settings_to_companies.rb @@ -0,0 +1,5 @@ +class AddSettingsToCompanies < ActiveRecord::Migration[6.1] + def change + add_column :companies, :settings, :json, default: [{search_feature: 'true', kanban_board: 'true', dataroom: 'true', our_investor_or_startup: 'true', cap_table: 'true', performance_report: 'true', shared_file: 'true', resource_portal: 'true' }] + end +end diff --git a/db/schema.rb b/db/schema.rb index 1ccca31da..20a970bb8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_03_05_024013) do +ActiveRecord::Schema.define(version: 2021_03_16_060147) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -217,6 +217,7 @@ t.integer "storage_limit" t.integer "storage_used" t.string "cap_table_url" + t.json "settings", default: [{"search_feature"=>"true", "kanban_board"=>"true", "dataroom"=>"true", "our_investor_or_startup"=>"true", "cap_table"=>"true", "performance_report"=>"true", "shared_file"=>"true", "resource_portal"=>"true"}] t.index ["ancestry"], name: "index_companies_on_ancestry" t.index ["associate_id"], name: "index_companies_on_associate_id" t.index ["consultant_id"], name: "index_companies_on_consultant_id" From 23b2eabf098840913efb660d77f90205fccd7af2 Mon Sep 17 00:00:00 2001 From: Jonathanlau92 Date: Tue, 16 Mar 2021 15:03:55 +0800 Subject: [PATCH 2/4] Add condition to turn on/off features for overture --- .../overture/_overture_sidebar.html.slim | 88 +++++++++++-------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/app/views/layouts/overture/_overture_sidebar.html.slim b/app/views/layouts/overture/_overture_sidebar.html.slim index 56bc1719b..78e906bf4 100644 --- a/app/views/layouts/overture/_overture_sidebar.html.slim +++ b/app/views/layouts/overture/_overture_sidebar.html.slim @@ -7,51 +7,61 @@ i.material-icons-outlined.mr-5 dashboard .ml-5.sidebar-font Dashboard - if current_user.company.startup? - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_contacts_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 search - .ml-5.sidebar-font Search Investor - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_contact_statuses_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 view_agenda - .ml-5.sidebar-font Buyer's Progress + - if current_user.company.settings[0]["search_feature"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_contacts_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 search + .ml-5.sidebar-font Search Investor + - if current_user.company.settings[0]["kanban_board"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_contact_statuses_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 view_agenda + .ml-5.sidebar-font Buyer's Progress - else + - if current_user.company.settings[0]["search_feature"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_profiles_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 search + .ml-5.sidebar-font Search Startup + - if current_user.company.settings[0]["dataroom"] == "true" li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_profiles_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 search - .ml-5.sidebar-font Search Startup - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to (current_user.company.startup? ? overture_startups_documents_path : overture_companies_path), class: 'col-sm-12 d-flex align-items-center' do - = image_pack_tag 'media/src/images/overture/dataroom-lock-icon.png', alt: "dataroom-lock-icon", class: 'mr-6' - .ml-5.sidebar-font Dataroom + = link_to (current_user.company.startup? ? overture_startups_documents_path : overture_companies_path), class: 'col-sm-12 d-flex align-items-center' do + = image_pack_tag 'media/src/images/overture/dataroom-lock-icon.png', alt: "dataroom-lock-icon", class: 'mr-6' + .ml-5.sidebar-font Dataroom hr.m-1.text-dark ul.nav.flex-column - if current_user.company.startup? - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_investments_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 supervised_user_circle - .ml-5.sidebar-font Our Investors - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_capitalization_table_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 table_chart - .ml-5.sidebar-font Capitalization Table - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_financial_performance_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 timeline - .ml-5.sidebar-font Performance Report - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to Folder.find_by(company: current_user.company, name: "Shared Drive").present? ? overture_folder_path(id: Folder.find_by(company: current_user.company, name: "Shared Drive").id) : overture_startups_documents_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 folder - .ml-5.sidebar-font Shared Files + - if current_user.company.settings[0]["our_investor_or_startup"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_investments_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 supervised_user_circle + .ml-5.sidebar-font Our Investors + - if current_user.company.settings[0]["cap_table"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_capitalization_table_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 table_chart + .ml-5.sidebar-font Capitalization Table + - if current_user.company.settings[0]["performance_report"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_financial_performance_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 timeline + .ml-5.sidebar-font Performance Report + - if current_user.company.settings[0]["shared_file"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to Folder.find_by(company: current_user.company, name: "Shared Drive").present? ? overture_folder_path(id: Folder.find_by(company: current_user.company, name: "Shared Drive").id) : overture_startups_documents_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 folder + .ml-5.sidebar-font Shared Files - else - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to overture_investments_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 domain - .ml-5.sidebar-font My Startups + - if current_user.company.settings[0]["our_investor_or_startup"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to overture_investments_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 domain + .ml-5.sidebar-font My Startups hr.m-1.text-dark ul.nav.flex-column - if current_user.company.startup? - li.nav-item.hover-blue.py-1.m-4.cursor-pointer - = link_to Folder.find_by(company: current_user.company, name: "Resource Portal").present? ? overture_folder_path(id: Folder.find_by(company: current_user.company, name: "Resource Portal").id) : overture_startups_documents_path, class: 'col-sm-12 d-flex align-items-center' do - i.material-icons-outlined.mr-5 book - .ml-5.sidebar-font Resource Portal + - if current_user.company.settings[0]["resource_portal"] == "true" + li.nav-item.hover-blue.py-1.m-4.cursor-pointer + = link_to Folder.find_by(company: current_user.company, name: "Resource Portal").present? ? overture_folder_path(id: Folder.find_by(company: current_user.company, name: "Resource Portal").id) : overture_startups_documents_path, class: 'col-sm-12 d-flex align-items-center' do + i.material-icons-outlined.mr-5 book + .ml-5.sidebar-font Resource Portal From a46f88012666f18066618900cd90d46cb1a9f65c Mon Sep 17 00:00:00 2001 From: Jonathanlau92 Date: Tue, 16 Mar 2021 15:51:36 +0800 Subject: [PATCH 3/4] Add settings to admin page and fix jsoneditor issue in admin page --- app/dashboards/company_dashboard.rb | 7 +++++-- app/models/company.rb | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/dashboards/company_dashboard.rb b/app/dashboards/company_dashboard.rb index a37b616a4..c36e31c71 100644 --- a/app/dashboards/company_dashboard.rb +++ b/app/dashboards/company_dashboard.rb @@ -31,6 +31,8 @@ class CompanyDashboard < Administrate::BaseDashboard expires_at: Field::Number, account_type: EnumField, before_deadline_reminder_days: Field::Number, + settings: Field::JSONB, + products: Field::JSONB, created_at: Field::DateTime, updated_at: Field::DateTime, } @@ -47,8 +49,7 @@ class CompanyDashboard < Administrate::BaseDashboard :workflows, :templates, :documents, - :batches, - :invoices, + :products, :company_type ] @@ -77,6 +78,8 @@ class CompanyDashboard < Administrate::BaseDashboard :expires_at, :account_type, :before_deadline_reminder_days, + :settings, + :products ] # Overwrite this method to customize how profiles are displayed diff --git a/app/models/company.rb b/app/models/company.rb index 30c20d773..3ee74fee2 100644 --- a/app/models/company.rb +++ b/app/models/company.rb @@ -102,6 +102,11 @@ def find_franchisors self.users.includes(:roles).where(roles: { name: "franchisor" }) end + # To change the settings of overture feature, we need to parse it in JSON for the admin page as the gem doesn't provide it for now + def settings=(value) + self[:settings] = value.is_a?(String) ? JSON.parse(value) : value + end + private def generate_mailbox_token From 05bff8ed69b5c61762efe1527b8c35ed2619b680 Mon Sep 17 00:00:00 2001 From: Jonathanlau92 Date: Tue, 16 Mar 2021 15:55:38 +0800 Subject: [PATCH 4/4] JSON parse value to edit products in admin page --- app/models/company.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/models/company.rb b/app/models/company.rb index 3ee74fee2..26c21cadb 100644 --- a/app/models/company.rb +++ b/app/models/company.rb @@ -107,6 +107,11 @@ def settings=(value) self[:settings] = value.is_a?(String) ? JSON.parse(value) : value end + # To add or remove products in the admin page, we need to parse the product value for the admin page as the gem doesn't provide it for now + def products=(value) + self[:products] = value.is_a?(String) ? JSON.parse(value) : value + end + private def generate_mailbox_token