Skip to content
Snippets Groups Projects
Commit 4724cfa5 authored by Arnaud Levy's avatar Arnaud Levy
Browse files

Merge branch 'main' of github.com:noesya/osuny

parents 39184939 60df3829
No related branches found
No related tags found
No related merge requests found
Showing
with 108 additions and 11 deletions
......@@ -30,6 +30,7 @@ gem 'hash_dot'
gem 'image_processing'
gem 'jbuilder'
gem 'jquery-rails'
gem "jquery-ui-rails", "~> 6.0.1"
gem 'kamifusen'#, path: '../kamifusen'
gem 'kaminari'
gem 'mini_magick'
......@@ -39,6 +40,7 @@ gem 'omniauth-saml', '~> 2.0'
gem 'pg', '~> 1.1'
gem 'puma'
gem 'rails', '~> 6.1'
gem "rails-autocomplete", "~> 2.0"
gem 'rails-i18n'
gem 'roo', "~> 2.9"
gem 'sanitize'
......
......@@ -237,6 +237,8 @@ GEM
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (6.0.1)
railties (>= 3.2.16)
js_cookie_rails (2.2.0)
railties (>= 3.1)
json (2.6.2)
......@@ -351,6 +353,8 @@ GEM
bundler (>= 1.15.0)
railties (= 6.1.7)
sprockets-rails (>= 2.0.0)
rails-autocomplete (2.0.1)
rails (>= 4.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
......@@ -516,6 +520,7 @@ DEPENDENCIES
image_processing
jbuilder
jquery-rails
jquery-ui-rails (~> 6.0.1)
kamifusen
kaminari
listen (~> 3.3)
......@@ -527,6 +532,7 @@ DEPENDENCIES
puma
rack-mini-profiler (~> 2.0)
rails (~> 6.1)
rails-autocomplete (~> 2.0)
rails-i18n
roo (~> 2.9)
sanitize
......
......@@ -9,6 +9,7 @@
//= require simple_form_bs5_file_input
//= require summernote/summernote-bs5
//= require gdpr/cookie_consent
//= require autocomplete-rails
//= require_tree ./application/plugins
//= require_self
......
//= require activestorage
//= require popper
//= require bootstrap-sprockets
//= require jquery3
//= require jquery-ui/widgets/autocomplete
//= require jquery_ujs
//= require cropperjs/dist/cropper
//= require jquery-cropper/dist/jquery-cropper
//= require simple_form_password_with_hints
//= require simple_form_bs5_file_input
//= require summernote/summernote-bs5
//= require gdpr/cookie_consent
//= require autocomplete-rails
//= require_tree ./application/plugins
//= require_tree ./extranet
//= require_self
/*global $ */
$(function () {
'use strict';
var setAutocompleteTargetValue = function (targetId, value) {
var targetInput = document.querySelector(targetId);
if (targetInput) {
targetInput.value = value;
}
};
$('input.autocomplete')
.on('input', function ($event) {
setAutocompleteTargetValue($event.target.dataset.autocompleteTarget, '');
})
.on('railsAutocomplete.select', function ($event, data) {
setAutocompleteTargetValue($event.target.dataset.autocompleteTarget, data.item.id);
});
});
.ui-autocomplete
list-style: none
padding: 0
max-width: 400px
.ui-menu-item
background: #F6F6F6
border-bottom: 1px solid #999999
cursor: pointer
.ui-menu-item-wrapper
padding: 10px
&.ui-state-active
background: #D4D4D4
\ No newline at end of file
......@@ -34,7 +34,7 @@ class Extranet::ExperiencesController < Extranet::ApplicationController
def experience_params
params.require(:university_person_experience)
.permit(:description, :from_year, :to_year, :organization_id)
.permit(:description, :from_year, :to_year, :organization_id, :organization_name)
end
def breadcrumb
......
......@@ -14,8 +14,8 @@ class Extranet::OrganizationsController < Extranet::ApplicationController
def search
@term = params[:term].to_s
@organizations = current_extranet.organizations
.for_search_term(@term)
@organizations = current_university.organizations
.search_by_siren_or_name(@term)
.ordered
end
......
......@@ -38,6 +38,8 @@ class University::Organization < ApplicationRecord
include WithSlug
include WithBlocks
attr_accessor :created_from_extranet
has_many :experiences,
class_name: 'University::Person::Experience'
......@@ -64,8 +66,17 @@ class University::Organization < ApplicationRecord
unaccent(university_organizations.url) ILIKE unaccent(:term)
", term: "%#{sanitize_sql_like(term)}%")
}
scope :search_by_siren_or_name, -> (term) {
where("
unaccent(university_organizations.siren) ILIKE unaccent(:term) OR
unaccent(university_organizations.name) ILIKE unaccent(:term)
", term: "%#{sanitize_sql_like(term)}%")
}
validates_presence_of :name
validates_uniqueness_of :name, scope: :university_id
# 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,
......
......@@ -27,13 +27,33 @@
class University::Person::Experience < ApplicationRecord
include WithUniversity
attr_accessor :organization_name
belongs_to :person
belongs_to :organization, class_name: "University::Organization"
before_validation :create_organization_if_needed
scope :ordered, -> { order(from_year: :desc)}
def to_s
persisted? ? "#{description}"
: self.class.human_attribute_name('new')
end
def organization_name
@organization_name || organization&.name
end
private
def create_organization_if_needed
if organization.nil? && organization_name.present?
self.organization_name = self.organization_name.strip
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
......@@ -12,9 +12,20 @@
</div>
</div>
<div class="col-lg-6">
<%= f.association :organization,
include_blank: false,
collection: current_extranet.organizations.ordered %>
<%= f.input :organization_name,
label: University::Organization.model_name.human,
as: :autocomplete,
url: search_university_organizations_path,
placeholder: t("extranet.experiences.search_organization"),
input_html: {
data: {
"showNoMatches": "false",
"autocomplete-target": "#university_person_experience_organization_id"
},
autocomplete: 'off',
role: 'presentation'
} %>
<%= f.hidden_field :organization_id %>
</div>
</div>
<%= submit f %>
......
......@@ -7,7 +7,7 @@
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'extranet', media: 'all' %>
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'extranet' %>
<%= favicon_link_tag 'favicon.png' %>
</head>
<body class="extranet <%= body_classes %>">
......
json.quantity @organizations.count
json.organizations @organizations do |organization|
json.array! @organizations do |organization|
json.id organization.id
json.title organization.to_s
json.url organization.url
json.label organization.to_s
json.value organization.to_s
end
\ No newline at end of file
......@@ -11,6 +11,7 @@ fr:
email_not_allowed_with_contact: n'est pas autorisé à accéder à cet extranet. Contactez %{contact} pour en savoir plus.
experiences:
new: Ajouter une expérience
search_organization: Rechercher par nom ou SIREN
title: Parcours professionnel
home:
recent_cohorts: Promotions récentes
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment