From 805fbe12f0d2358b838b1d0b5f0ab915fd3f1a5c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Mon, 24 Oct 2022 14:12:24 +0200
Subject: [PATCH] orga from extranet

---
 app/models/university/organization.rb      | 2 ++
 app/models/university/person/experience.rb | 9 ++++-----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/app/models/university/organization.rb b/app/models/university/organization.rb
index a7cd539fc..dc384b107 100644
--- a/app/models/university/organization.rb
+++ b/app/models/university/organization.rb
@@ -74,6 +74,8 @@ class University::Organization < ApplicationRecord
   }
 
   validates_presence_of :name
+  # Organization can be created from extranet with only their name. Be careful for future validators.
+  # There is an attribute accessor above : `created_from_extranet`
 
   enum kind: {
     company: 10,
diff --git a/app/models/university/person/experience.rb b/app/models/university/person/experience.rb
index 5b5ec61ad..9a841a781 100644
--- a/app/models/university/person/experience.rb
+++ b/app/models/university/person/experience.rb
@@ -50,11 +50,10 @@ class University::Person::Experience < ApplicationRecord
   def create_organization_if_needed
     if organization.nil? && organization_name.present?
       self.organization_name = self.organization_name.strip
-      self.organization = university.organizations
-                          .where("name ILIKE ?", organization_name)
-                          .or(university.organizations.where(siren: organization_name)).first_or_create do |organization|
-        organization.created_from_extranet = true
-      end
+      orga = university.organizations.find_by("name ILIKE ?", organization_name)
+      orga ||= university.organizations.find_by(siren: organization_name)
+      orga ||= university.organizations.create(name: organization_name, created_from_extranet: true)
+      self.organization = orga if orga.persisted?
     end
   end
 end
-- 
GitLab