From 53d270949c1bf753e3fbe706f8339bc94f0167ad Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Mon, 7 Mar 2022 17:50:02 +0100
Subject: [PATCH] imports

---
 app/models/university/organization.rb         |  2 +-
 app/models/university/organization/import.rb  | 21 +++++++++++++++++--
 .../appstack/simple_navigation_renderer.rb    |  7 ++++++-
 .../organization/imports/new.html.erb         |  2 +-
 config/admin_navigation.rb                    |  2 +-
 config/locales/university/en.yml              |  4 ++--
 ...ame_website_in_university_organizations.rb |  5 +++++
 db/schema.rb                                  |  4 ++--
 .../university/organization/imports.yml       |  1 -
 test/fixtures/university/organizations.yml    |  2 +-
 test/models/university/organization_test.rb   |  2 +-
 11 files changed, 39 insertions(+), 13 deletions(-)
 create mode 100644 db/migrate/20220307164108_rename_website_in_university_organizations.rb

diff --git a/app/models/university/organization.rb b/app/models/university/organization.rb
index 6adb4785a..1df61f1f0 100644
--- a/app/models/university/organization.rb
+++ b/app/models/university/organization.rb
@@ -14,7 +14,7 @@
 #  name          :string
 #  phone         :string
 #  sirene        :string
-#  website       :string
+#  url           :string
 #  zipcode       :string
 #  created_at    :datetime         not null
 #  updated_at    :datetime         not null
diff --git a/app/models/university/organization/import.rb b/app/models/university/organization/import.rb
index fb53338f1..421ad605b 100644
--- a/app/models/university/organization/import.rb
+++ b/app/models/university/organization/import.rb
@@ -39,8 +39,25 @@ class University::Organization::Import < ApplicationRecord
   protected
 
   def parse
-    csv.each do |line|
-      byebug
+    csv.each do |row|
+      university.organizations.where(name: row['name']).first_or_create do |o|
+        [
+          :long_name,
+          :kind,
+          :sirene,
+          :description,
+          :address,
+          :zipcode,
+          :city,
+          :country,
+          :mail,
+          :phone,
+          :url,
+        ].each do |property|
+          o[property] = row[property.to_s]
+        end
+        o.kind ||= :company
+      end
     end
   end
   handle_asynchronously :parse, queue: 'default'
diff --git a/app/services/appstack/simple_navigation_renderer.rb b/app/services/appstack/simple_navigation_renderer.rb
index 4611928d6..65bb69256 100644
--- a/app/services/appstack/simple_navigation_renderer.rb
+++ b/app/services/appstack/simple_navigation_renderer.rb
@@ -25,7 +25,12 @@ class Appstack::SimpleNavigationRenderer < SimpleNavigation::Renderer::Base
   end
 
   def make_header(item)
-    "<li class=\"sidebar-header\">#{ item.name }</li>"
+    icon = item.send(:options)[:icon]
+    header = '<li class="sidebar-header">'
+    header += "<i class=\"fas fa-#{ icon }\"></i>" if icon
+    header += item.name
+    header += '</li>'
+    header
   end
 
   def make_a(item)
diff --git a/app/views/admin/university/organization/imports/new.html.erb b/app/views/admin/university/organization/imports/new.html.erb
index 460abdd79..d69bc7b28 100644
--- a/app/views/admin/university/organization/imports/new.html.erb
+++ b/app/views/admin/university/organization/imports/new.html.erb
@@ -66,7 +66,7 @@
           <td>+33 1 01 01 01 01</td>
         </tr>
         <tr>
-          <th>website</th>
+          <th>url</th>
           <td>https://www.lemonde.fr</td>
         </tr>
       </tbody>
diff --git a/config/admin_navigation.rb b/config/admin_navigation.rb
index 9e8ffc691..4ad235c33 100644
--- a/config/admin_navigation.rb
+++ b/config/admin_navigation.rb
@@ -6,7 +6,7 @@ SimpleNavigation::Configuration.run do |navigation|
   navigation.items do |primary|
     primary.item :dashboard, t('admin.dashboard'), admin_root_path, { icon: 'tachometer-alt', highlights_on: /admin$/ }
 
-    if can?(:read, User) || can?(:read, University::Person)
+    if can?(:read, User) || can?(:read, University::Person) || can?(:read, University::Organization)
       primary.item :university, University.model_name.human, nil, { kind: :header }
       primary.item :university, University::Person.model_name.human(count: 2), admin_university_people_path, { icon: 'users-cog' }
       primary.item :university, University::Organization.model_name.human(count: 2), admin_university_organizations_path, { icon: 'building' }
diff --git a/config/locales/university/en.yml b/config/locales/university/en.yml
index b346f35e0..56710d4f7 100644
--- a/config/locales/university/en.yml
+++ b/config/locales/university/en.yml
@@ -14,7 +14,7 @@ en:
         public: Public
         public_or_private: Public/private
         sms_sender_name: SMS sender name
-        url: 'URL'
+        url: URL
         zipcode: Zipcode
       university/person:
         abilities: Abilities
@@ -35,7 +35,7 @@ en:
         picture: Profile picture
         research_journal_articles: Articles
         slug: Slug
-        tenure: Have tenure?
+        tenure: Has tenure?
         user: User
       university/person/involvement:
         description: Mission (in this context)
diff --git a/db/migrate/20220307164108_rename_website_in_university_organizations.rb b/db/migrate/20220307164108_rename_website_in_university_organizations.rb
new file mode 100644
index 000000000..6e6d168f9
--- /dev/null
+++ b/db/migrate/20220307164108_rename_website_in_university_organizations.rb
@@ -0,0 +1,5 @@
+class RenameWebsiteInUniversityOrganizations < ActiveRecord::Migration[6.1]
+  def change
+    rename_column :university_organizations, :website, :url
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index ed57cfb44..2210243fa 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: 2022_03_07_070155) do
+ActiveRecord::Schema.define(version: 2022_03_07_164108) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
@@ -607,7 +607,7 @@ ActiveRecord::Schema.define(version: 2022_03_07_070155) do
     t.string "zipcode"
     t.string "city"
     t.string "country"
-    t.string "website"
+    t.string "url"
     t.string "phone"
     t.string "mail"
     t.boolean "active", default: true
diff --git a/test/fixtures/university/organization/imports.yml b/test/fixtures/university/organization/imports.yml
index 0f6959317..2a23235c7 100644
--- a/test/fixtures/university/organization/imports.yml
+++ b/test/fixtures/university/organization/imports.yml
@@ -18,7 +18,6 @@
 #  fk_rails_31152af0cd  (university_id => universities.id)
 #  fk_rails_da057ff44d  (user_id => users.id)
 #
-# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
 
 one:
   university: one
diff --git a/test/fixtures/university/organizations.yml b/test/fixtures/university/organizations.yml
index fee586714..d637932ef 100644
--- a/test/fixtures/university/organizations.yml
+++ b/test/fixtures/university/organizations.yml
@@ -14,7 +14,7 @@
 #  name          :string
 #  phone         :string
 #  sirene        :string
-#  website       :string
+#  url           :string
 #  zipcode       :string
 #  created_at    :datetime         not null
 #  updated_at    :datetime         not null
diff --git a/test/models/university/organization_test.rb b/test/models/university/organization_test.rb
index 1616f324c..cb84a2504 100644
--- a/test/models/university/organization_test.rb
+++ b/test/models/university/organization_test.rb
@@ -14,7 +14,7 @@
 #  name          :string
 #  phone         :string
 #  sirene        :string
-#  website       :string
+#  url           :string
 #  zipcode       :string
 #  created_at    :datetime         not null
 #  updated_at    :datetime         not null
-- 
GitLab