Skip to content

Commit

Permalink
Deserialisation de provenance_detail
Browse files Browse the repository at this point in the history
  • Loading branch information
clairezed committed Feb 5, 2025
1 parent c3ead12 commit 8bfbb8b
Show file tree
Hide file tree
Showing 22 changed files with 117 additions and 192 deletions.
2 changes: 2 additions & 0 deletions app/admin/solicitation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@
column :phone_number
column :email
column(:provenance_category) { |s| I18n.t(s.provenance_category, scope: %i(solicitation provenance_categories)) }
column :provenance_detail
column(:landing) { |s| s.landing&.slug }
column(:subject) { |s| s.landing_subject&.slug }
column :diagnosis
Expand Down Expand Up @@ -212,6 +213,7 @@
render 'badges', badges: s.badges
end
row :institution
row :provenance_detail
Solicitation::FORM_INFO_KEYS.each do |k|
row k, humanize_name: false
end
Expand Down
1 change: 0 additions & 1 deletion app/controllers/conseiller/cooperations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ def load_filter_options

private


def retrieve_cooperation
authorize Cooperation, :index?
@cooperation = if params[:cooperation_id].present?
Expand Down
3 changes: 1 addition & 2 deletions app/controllers/solicitations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,7 @@ def redirect_entreprendre_solicitations
end

def from_entreprendre_via_view_params
QueryFromEntreprendre.new(campaign: query_params[:mtm_campaign], kwd: query_params[:mtm_kwd]).call
&& !(view_params[:redirected] == 'entreprendre')
QueryFromEntreprendre.new(campaign: query_params[:mtm_campaign], kwd: query_params[:mtm_kwd]).call && !(view_params[:redirected] == 'entreprendre')
end

def from_entreprendre_via_referer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,12 +214,10 @@ export default class Autocomplete extends Controller {
doFetch = async (url) => {
const response = await fetch(url, this.optionsForFetch())
const html = await response.text()
console.log(html)
return html
}

replaceResults(html) {
console.log(this.resultsTarget)
this.resultsTarget.innerHTML = html
this.identifyOptions()
if (!!this.options) {
Expand Down
15 changes: 15 additions & 0 deletions app/jobs/init_solicitations_provenance_detail_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Tâche unique, a passer une fois le champs `solicitations.provenance_detail` créé
class InitSolicitationsProvenanceDetailJob < ApplicationJob
queue_as :low_priority

def perform
# Correction des solicitations Entreprendre mal affectées
Solicitation.where(cooperation_id: 2).where(provenance_detail: nil).where("solicitations.form_info::json->>'mtm_kwd' LIKE ?", "F%").update_all(cooperation_id: 1)
Solicitation.where(cooperation_id: nil).where(provenance_detail: nil).where("solicitations.form_info::json->>'mtm_kwd' LIKE ?", "F%").update_all(cooperation_id: 1)

Solicitation.where(provenance_detail: nil).where.not(form_info: {}).find_each do |solicitation|
solicitation.set_provenance_detail
solicitation.save(validate: false)
end
end
end
4 changes: 1 addition & 3 deletions app/models/cooperation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ class Cooperation < ApplicationRecord
auto_strip_attributes :name
validates :name, presence: true, uniqueness: true

WITH_PROVENANCE_DETAILS_IDS = [1, 3, 4]

##
#
def to_s
Expand All @@ -67,7 +65,7 @@ def unarchive!
end

def with_provenance_details?
WITH_PROVENANCE_DETAILS_IDS.include?(id)
self.solicitations.pluck(:provenance_detail).compact_blank.uniq.any?
end

def self.ransackable_attributes(auth_object = nil)
Expand Down
34 changes: 20 additions & 14 deletions app/models/solicitation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,7 @@ class Solicitation < ApplicationRecord

attr_accessor :certify_being_company_boss

before_create :set_uuid
before_create :set_cooperation
before_create :set_uuid, :set_cooperation, :set_provenance_detail

after_update :update_diagnosis

Expand Down Expand Up @@ -208,7 +207,24 @@ def step_unmodifiable?
#

def set_cooperation
self.cooperation ||= landing&.cooperation || Cooperation.find_by(mtm_campaign: form_info&.fetch('mtm_campaign', nil)) || (Cooperation.find_by(mtm_campaign: 'entreprendre') if self.from_entreprendre)
self.cooperation ||= landing&.cooperation ||
(Cooperation.find_by(mtm_campaign: self.campaign) if self.campaign.present?) ||
(Cooperation.find_by(mtm_campaign: 'entreprendre') if self.from_entreprendre) # si pas de mtm_campaign enregistré
end

def set_provenance_detail
self.provenance_detail ||= calculate_provenance_detail
end

def calculate_provenance_detail
# On regarde en priorité les cooperations
return kwd if from_entreprendre
return origin_title if cooperation&.id == 3 # les-aides
return origin_url&.gsub("https://mission-transition-ecologique.beta.gouv.fr/", "") if cooperation&.id == 4 # MTEE
# puis le reste
return kwd if from_campaign?
return origin_title if origin_title.present?
return origin_url if origin_url.present?
end

def set_uuid
Expand All @@ -231,7 +247,7 @@ def formatted_email

# Format fiche : F1234..
def from_entreprendre
self.cooperation&.mtm_campaign == 'entreprendre' ||
self.cooperation&.mtm_campaign == 'entreprendre' ||
QueryFromEntreprendre.new(campaign: self.campaign, kwd: self.kwd).call
end

Expand Down Expand Up @@ -647,16 +663,6 @@ def provenance_title_sanitized
provenance_title[/googleads/i] || provenance_title
end

def provenance_detail
if from_campaign?
kwd
elsif origin_title.present?
origin_title
elsif origin_url.present?
origin_url
end
end

def campaign
mtm_campaign.presence || pk_campaign.presence
end
Expand Down
37 changes: 0 additions & 37 deletions app/services/build_manager_antennes_collection.rb

This file was deleted.

26 changes: 5 additions & 21 deletions app/services/get_provenance_details.rb
Original file line number Diff line number Diff line change
@@ -1,34 +1,18 @@
class GetProvenanceDetails
# item peut être un user ou une institution
def initialize(cooperation, query)
@cooperation = cooperation
@query = query
end

def call
return unless @cooperation.with_provenance_details?
return results(entreprendre_provenance_details) if @cooperation.id == 1
return results(les_aides_provenance_details) if @cooperation.id == 3
return results(mtee_provenance_details) if @cooperation.id == 4
return [] unless @cooperation.with_provenance_details?
sanitized_query = Regexp.escape(@query)
provenance_details_list.grep(/#{sanitized_query}/i)
end


private

def results(provenance_details)
provenance_details.grep(/#{@query}/i).map{|s| [s, s] }
end

# On ne veut que les fiches en F
def entreprendre_provenance_details
@entreprendre_provenance_details ||= @cooperation.solicitations.map{|s| s.mtm_kwd }.compact_blank.uniq
end

def les_aides_provenance_details
@les_aides_provenance_details ||= @cooperation.solicitations.map{|s| s.origin_title }.compact_blank.uniq
end

def mtee_provenance_details
@mtee_provenance_details ||= @cooperation.solicitations.map{|s| s.origin_url.gsub("https://mission-transition-ecologique.beta.gouv.fr/", "") }.compact_blank.uniq
def provenance_details_list
@cooperation.solicitations.pluck(:provenance_detail).compact_blank.uniq
end
end
6 changes: 6 additions & 0 deletions app/services/stats/filters/companies.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ def landing_filter(landing_id)
.where(landing: { id: landing_id })
end

def provenance_detail_filter(provenance_detail)
return if provenance_detail.blank?
@query.merge! Company.joins(facilities: { diagnoses: :solicitation })
.where(solicitation: { provenance_detail: provenance_detail })
end

def theme_filter(theme)
return if theme.blank?
@query.merge! Company.joins(facilities: { diagnoses: { solicitation: { landing_subject: { subject: :theme } } } })
Expand Down
2 changes: 1 addition & 1 deletion app/views/annuaire/search/_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
.fr-grid-row.fr-grid-row--gutters{ data: { controller: 'stats', url: annuaire_load_filter_options_path } }
.fr-col
.fr-input-group.fr-pr-2v
.autocomplete-field{ 'data-autocomplete-url-value': "#{annuaire_autocomplete_path}", 'data-controller': 'autocomplete', 'data-autocomplete-min-length': 3 }
.autocomplete-field{ 'data-autocomplete-url-value': "#{annuaire_autocomplete_path}", 'data-controller': 'autocomplete', 'data-autocomplete-min-length-value': 3 }
= f.label :query, t('search'), class: 'fr-label'
= f.hidden_field :query, 'data-autocomplete-target': 'hidden'
%input.fr-input{ 'data-autocomplete-target': 'input', type: 'text' }
Expand Down
2 changes: 1 addition & 1 deletion app/views/annuaire/search/_simple_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
.fr-grid-row.fr-grid-row--gutters{ data: { controller: 'stats', url: annuaire_load_filter_options_path } }
.fr-col
.fr-input-group.fr-pr-2v
.autocomplete-field{ 'data-autocomplete-url-value': "#{annuaire_autocomplete_path}", 'data-controller': 'autocomplete', 'data-autocomplete-min-length': 3 }
.autocomplete-field{ 'data-autocomplete-url-value': "#{annuaire_autocomplete_path}", 'data-controller': 'autocomplete', 'data-autocomplete-min-length-value': 3 }
= f.label :query, t('search'), class: 'fr-label'
= f.hidden_field :query, 'data-autocomplete-target': 'hidden'
%input.fr-input{ 'data-autocomplete-target': 'input', type: 'text' }
Expand Down
13 changes: 7 additions & 6 deletions app/views/conseiller/cooperations/_stats_filters.haml
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,13 @@
= f.label :territory, t('stats.stats_params.region'), class: 'fr-label'
= f.collection_select :territory, filters[:regions], :id, :name, { selected: params[:territory],
include_blank: t('all.feminine') }, class: "fr-select"
.fr-input-group.fr-pr-2v
.autocomplete-field{ 'data-autocomplete-url-value': "#{provenance_detail_autocomplete_conseiller_cooperations_path}", 'data-controller': 'autocomplete', 'data-autocomplete-min-length': 3 }
= f.label :provenance_detail, t('provenance_detail'), class: 'fr-label'
= f.hidden_field :provenance_detail, 'data-autocomplete-target': 'hidden'
%input.fr-input{ 'data-autocomplete-target': 'input', type: 'text' }= params[:provenance_detail].presence
%ul.list-group{ 'data-autocomplete-target': 'results' }
- if cooperation.with_provenance_details?
.fr-input-group.fr-pr-2v
.autocomplete-field{ 'data-autocomplete-url-value': "#{provenance_detail_autocomplete_conseiller_cooperations_path}", 'data-controller': 'autocomplete', 'data-autocomplete-min-length-value': 2 }
= f.label :provenance_detail, t('stats.stats_params.provenance_detail'), class: 'fr-label'
= f.hidden_field :provenance_detail, 'data-autocomplete-target': 'hidden'
%input.fr-input{ 'data-autocomplete-target': 'input', type: 'text', value: params[:provenance_detail].presence }
%ul.list-group{ 'data-autocomplete-target': 'results' }


.fr-col-12
Expand Down
2 changes: 1 addition & 1 deletion app/views/conseiller/cooperations/needs.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

.fr-container
.fr-grid-row
= render 'stats_filters', params: @stats_params, filters: @filters
= render 'stats_filters', params: @stats_params, filters: @filters, cooperation: @cooperation

.fr-container
.fr-grid-row.fr-grid-row--gutters#stats-charts
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.fr-py-1w
- @results.each do |result|
%li.list-group-item{ 'data-autocomplete-value': "#{result.first}", role: 'option' }
= result.first
%li.list-group-item{ 'data-autocomplete-value': "#{result}", role: 'option' }
= result
3 changes: 2 additions & 1 deletion config/locales/views.fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1130,8 +1130,9 @@ fr:
end_date: Date de fin
filter: Rechercher
keywords: Détail de la source
provenance_detail: Page d’origine
region: Région
select_institution: Selectionnez une institution
select_institution: Sélectionnez une institution
start_date: Date de début
theme: Thématique
title: 'Sélectionnez vos filtres :'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class AddProvenanceDetailToSolicitations < ActiveRecord::Migration[7.2]
def change
add_column :solicitations, :provenance_detail, :string

up_only do
InitSolicitationsProvenanceDetailJob.perform_later
end
end
end
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema[7.2].define(version: 2025_01_09_094556) do
ActiveRecord::Schema[7.2].define(version: 2025_01_23_101225) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_trgm"
enable_extension "plpgsql"
Expand Down Expand Up @@ -592,6 +592,7 @@
t.uuid "uuid"
t.datetime "completed_at", precision: nil
t.bigint "cooperation_id"
t.string "provenance_detail"
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"
Expand Down
Binary file modified doc/domain_model.pdf
Binary file not shown.
42 changes: 41 additions & 1 deletion spec/models/solicitation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@

describe 'callbacks' do
describe 'set_cooperation' do
subject { solicitation.cooperation }
subject { solicitation.set_cooperation }

context 'with cooperation from a landing page' do
let(:cooperation) { create :cooperation }
Expand Down Expand Up @@ -204,6 +204,15 @@

it { is_expected.to be_nil }
end

context 'with missing campaign' do
let!(:entreprendre_cooperation) { create :cooperation, mtm_campaign: 'entreprendre' }
let!(:other_cooperation) { create :cooperation }
let(:solicitation) { build :solicitation, form_info: { mtm_kwd: 'F12345' } }

it { is_expected.to eq entreprendre_cooperation }

end
end

describe 'format_solicitation' do
Expand Down Expand Up @@ -263,6 +272,37 @@
end
end
end

describe 'set_provenance_detail' do
subject { solicitation.provenance_detail }

context 'with nothing' do
let(:solicitation) { create :solicitation }

it { is_expected.to be_nil }
end

context 'with entreprendre cooperation' do
let(:cooperation) { create :cooperation, id: 1, mtm_campaign: 'entreprendre' }
let(:solicitation) { create :solicitation, cooperation: cooperation, form_info: { mtm_kwd: 'F12345', origin_title: 'Titre aide', origin_url: 'https://www.partner.com/formulaire' } }

it { is_expected.to eq 'F12345' }
end

context 'with les_aides cooperation' do
let(:cooperation) { create :cooperation, id: 3 }
let(:solicitation) { create :solicitation, cooperation: cooperation, form_info: { mtm_kwd: 'lala', origin_title: 'Titre aide', origin_url: 'https://www.partner.com/formulaire' } }

it { is_expected.to eq 'Titre aide' }
end

context 'with MTEE cooperation' do
let(:cooperation) { create :cooperation, id: 4 }
let(:solicitation) { create :solicitation, cooperation: cooperation, form_info: { mtm_kwd: 'lala', origin_title: 'Titre aide', origin_url: "https://mission-transition-ecologique.beta.gouv.fr/aide-entreprise/diagnostic-transition-energetique" } }

it { is_expected.to eq 'aide-entreprise/diagnostic-transition-energetique' }
end
end
end

describe '#preselected_subject' do
Expand Down
Loading

0 comments on commit 8bfbb8b

Please sign in to comment.