Skip to content

Commit

Permalink
Merge pull request #10703 from mfo/US/dry-rna-rnf-siret-addresses-view
Browse files Browse the repository at this point in the history
ETQ instructeur, je souhaite acceder aux information liées à l'adresses des champs RNA/RNF/SIRET
  • Loading branch information
mfo authored Sep 2, 2024
2 parents 622b3d0 + 70983c5 commit f171727
Show file tree
Hide file tree
Showing 16 changed files with 137 additions and 41 deletions.
55 changes: 55 additions & 0 deletions app/models/address_proxy.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# frozen_string_literal: true

class AddressProxy
ADDRESS_PARTS = [
:street_address,
:city_name,
:postal_code,
:city_code,
:departement_name,
:departement_code,
:region_name,
:region_code
]

class ChampAddressPresenter
ADDRESS_PARTS.each do |address_part|
define_method(address_part) do
@data[address_part]
end
end

def initialize(champ)
@data = champ.value_json.with_indifferent_access
end
end

class EtablissementAddressPresenter
attr_reader(*ADDRESS_PARTS)

def initialize(etablissement)
@street_address = [etablissement.numero_voie, etablissement.type_voie, etablissement.nom_voie].compact.join(" ")
@city_name = etablissement.localite
@postal_code = etablissement.code_postal
@city_code = etablissement.code_insee_localite
@departement_name = APIGeoService.departement_name_by_postal_code(@postal_code)
@departement_code = APIGeoService.departement_code(@departement_name)
@region_code = APIGeoService.region_code_by_departement(@departement_code)
@region_name = APIGeoService.region_name(@region_code)
end
end

delegate(*ADDRESS_PARTS, to: :@presenter)

def initialize(champ_or_etablissement)
@presenter = make(champ_or_etablissement)
end

def make(champ_or_etablissement)
case champ_or_etablissement
when Champ then ChampAddressPresenter.new(champ_or_etablissement)
when Etablissement then EtablissementAddressPresenter.new(champ_or_etablissement)
else raise NotImplementedError("Unsupported address from #{champ_or_etablissement.class.name}")
end
end
end
4 changes: 4 additions & 0 deletions app/services/api_geo_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ def departement_name(code)
departements.find { _1[:code] == code }&.dig(:name)
end

def departement_name_by_postal_code(postal_code)
APIGeoService.departement_name(postal_code[0..2]) || APIGeoService.departement_name(postal_code[0..1])
end

def departement_code(name)
return if name.nil?
departements.find { _1[:name] == name }&.dig(:code)
Expand Down
11 changes: 1 addition & 10 deletions app/views/shared/champs/rna/_show.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,4 @@
- c.with_value do
%p= l(champ.data[scope].to_date)

- if champ.data['address'].present?
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.rna_champ.data.address")) do |c|
- c.with_value do
%p= champ.full_address

- ['code_insee', 'code_postal'].each do |scope|
- if champ.data['address'][scope].present?
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.rna_champ.data.#{scope}")) do |c|
- c.with_value do
%p= champ.data['address'][scope]
= render partial: "shared/dossiers/normalized_address", locals: { address: AddressProxy.new(champ) }
10 changes: 1 addition & 9 deletions app/views/shared/champs/rnf/_show.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,4 @@
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.rnf_champ.data.#{scope}")) do |c|
- c.with_value do
%p= l(champ.data[scope].to_date)

- if champ.data['address'].present?
- ['label', 'cityCode', 'postalCode'].each do |scope|
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.rnf_champ.data.#{scope}")) do |c|
- c.with_value do
%p= champ.data['address'][scope]
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.rnf_champ.data.department")) do |c|
- c.with_value do
%p= "#{champ.data['address']['departmentCode']}#{champ.data['address']['departmentName']}"
= render partial: "shared/dossiers/normalized_address", locals: { address: AddressProxy.new(champ) }
2 changes: 1 addition & 1 deletion app/views/shared/champs/siret/_show.html.haml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
- if champ.etablissement.present?
= render partial: "shared/dossiers/identite_entreprise", locals: { etablissement: champ.etablissement, profile: profile }
= render partial: "shared/dossiers/identite_entreprise", locals: { etablissement: champ.etablissement, profile: profile, champ: }
7 changes: 1 addition & 6 deletions app/views/shared/dossiers/_identite_entreprise.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,7 @@
- c.with_value do
%p= etablissement.entreprise.numero_tva_intracommunautaire

= render Dossiers::RowShowComponent.new(label: "Adresse") do |c|
- c.with_value do
%p
- etablissement.adresse.split("\n").compact_blank.each do |line|
= line
%br
= render partial: "shared/dossiers/normalized_address", locals: { address: AddressProxy.new(defined?(champ) ? champ : etablissement)}

= render Dossiers::RowShowComponent.new(label: "Capital social") do |c|
- c.with_value do
Expand Down
23 changes: 23 additions & 0 deletions app/views/shared/dossiers/_normalized_address.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.normalized_address.full_address")) do |c|
- c.with_value do
%p
= address.street_address
%br
= [address.city_name, address.postal_code].join(" ")


- ['city_code', 'postal_code'].each do |scope|
- if address.public_send(scope).present?
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.normalized_address.#{scope}")) do |c|
- c.with_value do
%p= address.public_send(scope)

- if address.departement_name.present?
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.normalized_address.department")) do |c|
- c.with_value do
%p= "#{address.departement_name}#{address.departement_code}"

- if address.region_name.present?
= render Dossiers::RowShowComponent.new(label: t("activemodel.attributes.normalized_address.region")) do |c|
- c.with_value do
%p= "#{address.region_name}#{address.region_code}"
9 changes: 9 additions & 0 deletions config/locales/models/champs/normalized_address/en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
en:
activemodel:
attributes:
normalized_address:
full_address: Address
city_code: INSEE code
postal_code: Postal code
department: Department
region: Region & region code
9 changes: 9 additions & 0 deletions config/locales/models/champs/normalized_address/fr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
fr:
activemodel:
attributes:
normalized_address:
full_address: Adresse
city_code: Code INSEE
postal_code: Code postal
department: Département
region: Région & code région
3 changes: 0 additions & 3 deletions config/locales/models/champs/rna_champ/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ en:
association_date_creation: Creation date
association_date_declaration: Declaration date
association_date_publication: Publication date
address: Address
code_insee: INSEE code
code_postal: Postal code
paste: Copy the RNA to the clipboard
paste_success: The RNA has been copied to the clipboard
activerecord:
Expand Down
3 changes: 0 additions & 3 deletions config/locales/models/champs/rna_champ/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ fr:
association_date_creation: Date de création
association_date_declaration: Date de déclaration
association_date_publication: Date de publication
address: Adresse
code_insee: Code INSEE
code_postal: Code postal
paste: Copier le RNA dans le presse-papier
paste_success: Le RNA a été copié dans le presse-papier
activerecord:
Expand Down
4 changes: 0 additions & 4 deletions config/locales/models/champs/rnf_champ/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ en:
dissolvedAt: Dissolved at
address: Address
status: Status
cityCode: City code
postalCode: Postal code
department: Department
label: Address
paste: Copy the RNF to the clipboard
paste_success: The RNF has been copied to the clipboard
activerecord:
Expand Down
4 changes: 0 additions & 4 deletions config/locales/models/champs/rnf_champ/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ fr:
dissolvedAt: Dissoute le
address: Adresse
status: Statut
cityCode: Code INSEE
postalCode: Code postal
department: Département
label: Adresse
paste: Copier le RNF dans le presse-papier
paste_success: Le RNF a été copié dans le presse-papier
activerecord:
Expand Down
1 change: 1 addition & 0 deletions spec/factories/champ.rb
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@
factory :champ_do_not_use_siret, class: 'Champs::SiretChamp' do
association :etablissement, factory: [:etablissement]
value { '44011762001530' }
value_json { AddressProxy::ADDRESS_PARTS.index_by(&:itself) }
end

factory :champ_do_not_use_rna, class: 'Champs::RNAChamp' do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module Maintenance

it 'updates value_json' do
expect { subject }.to change { element.reload.value_json }
.from(nil)
.from(anything)
.to({
"city_code" => "92009",
"city_name" => "Bois-Colombes",
Expand Down
31 changes: 31 additions & 0 deletions spec/views/shared/dossiers/_normalized_address.html.haml_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# frozen_string_literal: true

describe 'shared/dossiers/normalized_address', type: :view do
before { render 'shared/dossiers/normalized_address', address: }

context 'given an champ' do
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :siret }]) }
let(:dossier) { create(:dossier, :with_populated_champs, procedure:) }
let(:address) { AddressProxy.new(dossier.champs.first) }

it 'render address' do
AddressProxy::ADDRESS_PARTS.each do |address_part|
expect(rendered).to have_text(address_part)
end
end
end

context 'given an etablissement' do
let(:etablissement) { create(:etablissement) }
let(:address) { AddressProxy.new(etablissement) }

it 'render address' do
expect(rendered).to have_text("6 RUE RAOUL NORDLING")
expect(rendered).to have_text("BOIS COLOMBES 92270")
expect(rendered).to have_text("92009")
expect(rendered).to have_text("92270")
expect(rendered).to have_text("Hauts-de-Seine – 92")
expect(rendered).to have_text("Île-de-France – 11")
end
end
end

0 comments on commit f171727

Please sign in to comment.