Skip to content

Commit

Permalink
Liaison solicitation - cooperation
Browse files Browse the repository at this point in the history
  • Loading branch information
clairezed committed Dec 12, 2024
1 parent 0a091c9 commit 15a8152
Show file tree
Hide file tree
Showing 11 changed files with 63 additions and 45 deletions.
10 changes: 9 additions & 1 deletion app/admin/cooperation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,16 @@
end
column :institution do |c|
div admin_link_to c.institution if c.institution.present?
status_tag t('attributes.display_url'), class: :ok if c.display_url
end
column(:landings){ |c| admin_link_to(c, :landings, list: true) }
column(:landings) do |c|
div admin_link_to(c, :landings, list: true)
div c.mtm_campaign
end
column(:solicitations) do |l|
div admin_link_to(l, :solicitations)
end

actions dropdown: true
end

Expand Down
1 change: 1 addition & 0 deletions app/admin/solicitation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
filter :badges, as: :select, collection: -> { Badge.category_solicitations.order(:title).pluck(:title, :id) }

# Filtres acquisition
filter :cooperation, as: :ajax_select, collection: -> { Cooperation.pluck(:name, :id) }, data: { url: :admin_cooperations_path, search_fields: [:name] }
filter :landing, as: :ajax_select, collection: -> { Landing.not_archived.pluck(:title, :id) }, data: { url: :admin_landings_path, search_fields: [:title] }
filter :mtm_campaign, as: :string
filter :mtm_kwd, as: :string
Expand Down
5 changes: 4 additions & 1 deletion app/models/cooperation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@ class Cooperation < ApplicationRecord
## Associations
#
belongs_to :institution, inverse_of: :cooperations
has_many :landings, dependent: :restrict_with_exception
has_many :solicitations, dependent: :restrict_with_exception

has_many :cooperation_themes, dependent: :destroy, inverse_of: :cooperation
has_many :themes, through: :cooperation_themes, inverse_of: :cooperations
has_many :landings, dependent: :restrict_with_exception

has_one :logo, dependent: :destroy, as: :logoable, inverse_of: :logoable

##
Expand Down
18 changes: 13 additions & 5 deletions app/models/solicitation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@
# uuid :uuid
# created_at :datetime not null
# updated_at :datetime not null
# cooperation_id :bigint(8)
# institution_id :bigint(8)
# landing_id :bigint(8)
# landing_subject_id :bigint(8)
#
# Indexes
#
# index_solicitations_on_code_region (code_region)
# index_solicitations_on_cooperation_id (cooperation_id)
# index_solicitations_on_email (email)
# index_solicitations_on_institution_id (institution_id)
# index_solicitations_on_landing_id (landing_id)
Expand All @@ -36,6 +38,7 @@
#
# Foreign Keys
#
# fk_rails_... (cooperation_id => cooperations.id)
# fk_rails_... (institution_id => institutions.id)
# fk_rails_... (landing_id => landings.id)
# fk_rails_... (landing_subject_id => landing_subjects.id)
Expand All @@ -47,7 +50,9 @@ class Solicitation < ApplicationRecord

## Associations
#
belongs_to :cooperation, inverse_of: :solicitations, optional: true
belongs_to :landing, inverse_of: :solicitations, optional: true

belongs_to :landing_subject, inverse_of: :solicitations, optional: true
has_one :landing_theme, through: :landing_subject, source: :landing_theme, inverse_of: :landing_subjects
has_one :subject, through: :landing_subject, source: :subject, inverse_of: :landing_subjects
Expand All @@ -63,6 +68,8 @@ class Solicitation < ApplicationRecord
has_many :matches, through: :diagnosis, inverse_of: :solicitation
has_many :company_satisfactions, through: :diagnosis, inverse_of: :solicitation
has_many :needs, through: :diagnosis, inverse_of: :solicitation

# TODO : a supprimer ?
belongs_to :institution, inverse_of: :solicitations, optional: true
has_many :badge_badgeables, as: :badgeable
has_many :badges, through: :badge_badgeables, after_add: :touch_after_badges_update, after_remove: :touch_after_badges_update
Expand All @@ -72,7 +79,7 @@ class Solicitation < ApplicationRecord
attr_accessor :certify_being_company_boss

before_create :set_uuid
before_create :set_institution_from_landing
before_create :set_cooperation_from_landing

after_update :update_diagnosis

Expand Down Expand Up @@ -215,8 +222,9 @@ def correct_subject_answers

## Callbacks
#
def set_institution_from_landing
self.institution ||= landing&.institution || Institution.find_by(slug: form_info&.fetch('institution', nil))

def set_cooperation_from_landing
self.cooperation ||= landing&.cooperation || Cooperation.find_by(mtm_campaign: form_info&.fetch('mtm_campaign', nil))
end

def set_uuid
Expand Down Expand Up @@ -711,15 +719,15 @@ def mark_as_spam
def self.ransackable_attributes(auth_object = nil)
[
"code_region", "completed_at", "created_at", "description", "email", "form_info", "full_name", "id", "id_value",
"institution_id", "landing_id", "landing_slug", "landing_subject_id", "location", "phone_number",
"institution_id", "cooperation_id", "landing_id", "landing_slug", "landing_subject_id", "location", "phone_number",
"prepare_diagnosis_errors_details", "requested_help_amount", "siret", "status", "updated_at", "uuid", "mtm_campaign",
"mtm_kwd", "relaunch"
]
end

def self.ransackable_associations(auth_object = nil)
[
"badge_badgeables", "badges", "diagnosis", "diagnosis_regions", "facility", "company", "feedbacks", "institution",
"badge_badgeables", "badges", "diagnosis", "diagnosis_regions", "facility", "company", "feedbacks", "institution", "cooperation",
"subject_answers", "landing", "landing_subject", "landing_theme", "matches", "needs", "subject", "theme", "visitee"
]
end
Expand Down
4 changes: 2 additions & 2 deletions app/views/conseiller/solicitations/_solicitation.haml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@
.item= t('.needs_historic')
- facilities[solicitation.id].each do |facility|
= link_to facility[:company_name], needs_company_path(facility[:id])
- if solicitation.institution.present?
.logo-institution= institution_image(solicitation.institution.logo&.filename)
- if solicitation.cooperation.present?
.logo-institution= display_logo(name: solicitation.cooperation.logo&.filename, path: "cooperations/", extra_params: { class: 'institution-logo' })
.card__description
.card__description__label= t('.description')
.card__description__content.break-word
Expand Down
1 change: 1 addition & 0 deletions config/locales/models.fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -904,6 +904,7 @@ fr:
diagnosis_regions: Région
display_logo_in_partner_list: Afficher le logo dans la liste des institutions conseillères (page remerciement, etc)
display_logo_on_home_page: Afficher le logo sur la page d’accueil
display_url: Url affichée
done_institutions: Institution ayant clôturé avec aide
effectif: Effectif
email: Email
Expand Down
36 changes: 12 additions & 24 deletions db/migrate/20241121144559_create_cooperations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ def change
t.timestamps
end

add_reference :landings, :cooperation, foreign_key: true
remove_column :themes, :cooperation, :boolean, default: false
add_reference :landings, :cooperation, foreign_key: true, index: true

add_reference :solicitations, :cooperation, foreign_key: true, index: true
# remove_reference :solicitations, :institution, foreign_key: true, index: true

up_only do
## Entreprendre Service Public
Expand All @@ -28,6 +31,8 @@ def change
cooperation.landings.push(Landing.find_by(slug: 'entreprendre-service-public-fr'))
cooperation.create_logo(name: 'Entreprendre', filename: 'entreprendre')

Solicitation.mtm_campaign_eq('entreprendre').update_all(cooperation_id: cooperation.id)

## Mon entreprise - URSSAF
p "Mon entreprise - URSSAF"
institution = Institution.find_by(slug: 'urssaf')
Expand Down Expand Up @@ -127,29 +132,12 @@ def change
institution = Institution.find_by(slug: 'unapl')
cooperation = institution.cooperations.create!(name: "Portail Maisons des professions libérales", url: nil)
cooperation.landings.push(Landing.find_by(slug: 'maison-des-professions-liberales'))

## Mise à jour des sollicitations
p "Mise à jour des sollicitations"
Cooperation.find_each do |cooperation|
Solicitation.joins(landing: :cooperation).where(landing: { cooperation_id: cooperation.id }).update_all(cooperation_id: cooperation.id)
end
end
end
end

# up_only do
# cooperation_labels = [
# "Brexit","Problématiques des travailleurs indépendants handicapés","Problématiques de ressources humaines",
# "Problématiques des fournisseurs des ministères économiques et financiers","Problématiques des organismes de formation"
# ]
# Theme.where(label: cooperation_labels).update_all(cooperation: true)
# end

# up_only do
# # "Problématiques de ressources humaines" -> Occitanie
# # "Problématiques des organismes de formation" -> Aura
# [
# { theme: 55, region: 133 },
# { theme: 53, region: 137 },
# ].each do |hash|
# Theme.find(hash[:theme]).territories << Territory.find(hash[:region])
# end
# end
# cf https://github.com/betagouv/conseillers-entreprises/pull/3612/files

# Landing.where(display_partner_url: true).pluck(:slug)
# => ["entreprendre-service-public-fr", "cci-les-aides-fr", "espace-fournisseurs", "team-rh-occitanie", "transition-ecologique-entreprises-api", "zetwal"]
3 changes: 3 additions & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,9 @@
t.integer "status", default: 0
t.uuid "uuid"
t.datetime "completed_at", precision: nil
t.bigint "cooperation_id"
t.index ["code_region"], name: "index_solicitations_on_code_region"
t.index ["cooperation_id"], name: "index_solicitations_on_cooperation_id"
t.index ["email"], name: "index_solicitations_on_email"
t.index ["institution_id"], name: "index_solicitations_on_institution_id"
t.index ["landing_id"], name: "index_solicitations_on_landing_id"
Expand Down Expand Up @@ -776,6 +778,7 @@
add_foreign_key "shared_satisfactions", "company_satisfactions"
add_foreign_key "shared_satisfactions", "experts"
add_foreign_key "shared_satisfactions", "users"
add_foreign_key "solicitations", "cooperations"
add_foreign_key "solicitations", "institutions"
add_foreign_key "solicitations", "landing_subjects"
add_foreign_key "solicitations", "landings"
Expand Down
Binary file modified doc/domain_model.pdf
Binary file not shown.
6 changes: 6 additions & 0 deletions spec/factories/cooperation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FactoryBot.define do
factory :cooperation do
institution
sequence(:name) { |n| "Cooperation " + Faker::Lorem.word + n.to_s }
end
end
24 changes: 12 additions & 12 deletions spec/models/solicitation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -166,26 +166,26 @@
end

describe 'callbacks' do
describe 'set_institution_from_landing' do
subject { solicitation.institution }
describe 'set_cooperation_from_landing' do
subject { solicitation.cooperation }

context 'with institution from a landing page' do
let(:institution) { build :institution }
let(:landing) { build :landing, institution: institution }
context 'with cooperation from a landing page' do
let(:cooperation) { create :cooperation }
let(:landing) { build :landing, cooperation: cooperation }
let(:solicitation) { create :solicitation, landing: landing }

it { is_expected.to eq institution }
it { is_expected.to eq cooperation }
end

context 'with a solicitation slug in the query_params' do
let(:institution) { create :institution }
let(:solicitation) { create :solicitation, form_info: { institution: institution.slug } }
context 'with a cooperation mtm_campaign in the query_params' do
let!(:cooperation) { create :cooperation, mtm_campaign: 'une-campagne' }
let(:solicitation) { create :solicitation, form_info: { mtm_campaign: 'une-campagne' } }

it { is_expected.to eq institution }
it { is_expected.to eq cooperation }
end

context 'with no institution' do
let(:landing) { build :landing, institution: nil }
context 'with no cooperation' do
let(:landing) { build :landing, cooperation: nil }
let(:solicitation) { create :solicitation, landing: landing, form_info: {} }

it { is_expected.to be_nil }
Expand Down

0 comments on commit 15a8152

Please sign in to comment.