Merge pull request #10703 from mfo/US/dry-rna-rnf-siret-addresses-view

ETQ instructeur, je souhaite acceder aux information liées à l'adresses des champs RNA/RNF/SIRET
This commit is contained in:
mfo 2024-09-02 12:25:54 +00:00 committed by GitHub
commit f171727140
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 137 additions and 41 deletions

View file

@ -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

View file

@ -49,6 +49,10 @@ class APIGeoService
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)

View file

@ -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) }

View file

@ -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) }

View file

@ -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: }

View file

@ -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

View file

@ -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}"

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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:

View file

@ -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:

View file

@ -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:

View file

@ -165,6 +165,7 @@ FactoryBot.define do
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

View file

@ -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",

View file

@ -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