diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 301c04fa0..2d6ce598a 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -14,7 +14,6 @@ class Dossier < ApplicationRecord SOUMIS = EN_CONSTRUCTION_OU_INSTRUCTION + TERMINE has_one :etablissement, dependent: :destroy - has_one :entreprise, dependent: :destroy has_one :individual, dependent: :destroy has_one :attestation has_many :cerfa, dependent: :destroy @@ -56,7 +55,7 @@ class Dossier < ApplicationRecord scope :en_construction, -> { not_archived.state_en_construction } scope :en_instruction, -> { not_archived.state_en_instruction } scope :termine, -> { not_archived.state_termine } - scope :downloadable_sorted, -> { state_not_brouillon.includes(:entreprise, :etablissement, :champs, :champs_private).order(en_construction_at: 'asc') } + scope :downloadable_sorted, -> { state_not_brouillon.includes(:etablissement, :champs, :champs_private).order(en_construction_at: 'asc') } scope :en_cours, -> { not_archived.state_en_construction_ou_instruction } scope :without_followers, -> { left_outer_joins(:follows).where(follows: { id: nil }) } scope :followed_by, -> (gestionnaire) { joins(:follows).where(follows: { gestionnaire: gestionnaire }) } @@ -64,8 +63,7 @@ class Dossier < ApplicationRecord accepts_nested_attributes_for :individual - delegate :siren, to: :entreprise - delegate :siret, to: :etablissement, allow_nil: true + delegate :siret, :siren, to: :etablissement, allow_nil: true delegate :types_de_piece_justificative, to: :procedure delegate :types_de_champ, to: :procedure delegate :france_connect_information, to: :user @@ -220,7 +218,7 @@ class Dossier < ApplicationRecord when 'france_connect_information' self.user.france_connect_information&.send(column) when 'entreprise' - self.entreprise&.send(column) + self.etablissement&.send(:"entreprise_#{column}") when 'etablissement' self.etablissement&.send(column) when 'type_de_champ' @@ -235,8 +233,8 @@ class Dossier < ApplicationRecord end def owner_name - if entreprise.present? - entreprise.raison_sociale + if etablissement.present? + etablissement.entreprise_raison_sociale elsif individual.present? "#{individual.nom} #{individual.prenom}" end @@ -298,8 +296,8 @@ class Dossier < ApplicationRecord def export_etablissement_data if etablissement.present? - etablissement_attr = EtablissementCsvSerializer.new(self.etablissement).attributes.transform_keys { |k| "etablissement.#{k}".parameterize.underscore.to_sym } - entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.transform_keys { |k| "entreprise.#{k}".parameterize.underscore.to_sym } + etablissement_attr = EtablissementCsvSerializer.new(etablissement).attributes.transform_keys { |k| "etablissement.#{k}".parameterize.underscore.to_sym } + entreprise_attr = EntrepriseSerializer.new(etablissement.entreprise).attributes.transform_keys { |k| "entreprise.#{k}".parameterize.underscore.to_sym } else etablissement_attr = EtablissementSerializer.new(Etablissement.new).attributes.transform_keys { |k| "etablissement.#{k}".parameterize.underscore.to_sym } entreprise_attr = EntrepriseSerializer.new(Entreprise.new).attributes.transform_keys { |k| "entreprise.#{k}".parameterize.underscore.to_sym } diff --git a/app/models/entreprise.rb b/app/models/entreprise.rb index bbf8c58ec..19cecd7e1 100644 --- a/app/models/entreprise.rb +++ b/app/models/entreprise.rb @@ -1,16 +1,20 @@ -class Entreprise < ApplicationRecord - belongs_to :dossier - has_one :etablissement - has_one :rna_information, dependent: :destroy - - validates :siren, presence: true - validates :dossier_id, uniqueness: true - - accepts_nested_attributes_for :rna_information, update_only: true - - before_save :default_values - - def default_values - self.raison_sociale ||= '' +class Entreprise < Hashie::Dash + def read_attribute_for_serialization(attribute) + self[attribute] end + + property :siren + property :capital_social + property :numero_tva_intracommunautaire + property :forme_juridique + property :forme_juridique_code + property :nom_commercial + property :raison_sociale + property :siret_siege_social + property :code_effectif_entreprise + property :date_creation + property :nom + property :prenom + + property :inline_adresse end diff --git a/app/models/etablissement.rb b/app/models/etablissement.rb index 7ea3a94c9..9c103aa5a 100644 --- a/app/models/etablissement.rb +++ b/app/models/etablissement.rb @@ -1,18 +1,20 @@ class Etablissement < ApplicationRecord belongs_to :dossier - belongs_to :entreprise, dependent: :destroy has_one :champ, class_name: 'Champs::SiretChamp' has_many :exercices, dependent: :destroy accepts_nested_attributes_for :exercices - accepts_nested_attributes_for :entreprise, update_only: true validates :siret, presence: true validates :dossier_id, uniqueness: { allow_nil: true } validate :validate_signature + def siren + entreprise_siren + end + def geo_adresse [numero_voie, type_voie, nom_voie, complement_adresse, code_postal, localite].join(' ') end @@ -22,10 +24,6 @@ class Etablissement < ApplicationRecord "#{numero_voie} #{type_voie} #{nom_voie}, #{complement_adresse}, #{code_postal} #{localite}".squeeze(' ') end - def titre - entreprise_raison_sociale || association_titre - end - def verify SignatureService.verify(signature, message_for_signature) end @@ -36,29 +34,26 @@ class Etablissement < ApplicationRecord attr_accessor :signature - def entreprise_raison_sociale_or_name - entreprise_raison_sociale.presence || "#{entreprise_nom} #{entreprise_prenom}" + def association? + association_rna.present? end - def entreprise_effectif - { - 'NN' => "Unités non employeuses (pas de salarié au cours de l'année de référence et pas d'effectif au 31/12).", - '00' => "0 salarié (n'ayant pas d'effectif au 31/12 mais ayant employé des salariés au cours de l'année de référence)", - '01' => '1 ou 2 salariés', - '02' => '3 à 5 salariés', - '03' => '6 à 9 salariés', - '11' => '10 à 19 salariés', - '12' => '20 à 49 salariés', - '21' => '50 à 99 salariés', - '22' => '100 à 199 salariés', - '31' => '200 à 249 salariés', - '32' => '250 à 499 salariés', - '41' => '500 à 999 salariés', - '42' => '1 000 à 1 999 salariés', - '51' => '2 000 à 4 999 salariés', - '52' => '5 000 à 9 999 salariés', - '53' => '10 000 salariés et plus' - }[entreprise_code_effectif_entreprise] + def entreprise + Entreprise.new( + siren: entreprise_siren, + capital_social: entreprise_capital_social, + numero_tva_intracommunautaire: entreprise_numero_tva_intracommunautaire, + forme_juridique: entreprise_forme_juridique, + forme_juridique_code: entreprise_forme_juridique_code, + nom_commercial: entreprise_nom_commercial, + raison_sociale: entreprise_raison_sociale, + siret_siege_social: entreprise_siret_siege_social, + code_effectif_entreprise: entreprise_code_effectif_entreprise, + date_creation: entreprise_date_creation, + nom: entreprise_nom, + prenom: entreprise_prenom, + inline_adresse: inline_adresse + ) end private diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 1dbfdf5d9..af06414c2 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -285,12 +285,12 @@ class Procedure < ApplicationRecord if !for_individual || (for_individual && individual_with_siret) fields << [ - field_hash('SIREN', 'entreprise', 'siren'), - field_hash('Forme juridique', 'entreprise', 'forme_juridique'), - field_hash('Nom commercial', 'entreprise', 'nom_commercial'), - field_hash('Raison sociale', 'entreprise', 'raison_sociale'), - field_hash('SIRET siège social', 'entreprise', 'siret_siege_social'), - field_hash('Date de création', 'entreprise', 'date_creation') + field_hash('SIREN', 'etablissement', 'entreprise_siren'), + field_hash('Forme juridique', 'etablissement', 'entreprise_forme_juridique'), + field_hash('Nom commercial', 'etablissement', 'entreprise_nom_commercial'), + field_hash('Raison sociale', 'etablissement', 'entreprise_raison_sociale'), + field_hash('SIRET siège social', 'etablissement', 'entreprise_siret_siege_social'), + field_hash('Date de création', 'etablissement', 'entreprise_date_creation') ] fields << [ diff --git a/app/models/rna_information.rb b/app/models/rna_information.rb deleted file mode 100644 index 9797d1072..000000000 --- a/app/models/rna_information.rb +++ /dev/null @@ -1,9 +0,0 @@ -class RNAInformation < ApplicationRecord - belongs_to :entreprise - - validates :association_id, presence: true, allow_blank: false, allow_nil: false - - def rna=(id) - write_attribute(:association_id, id) - end -end diff --git a/app/serializers/dossier_serializer.rb b/app/serializers/dossier_serializer.rb index a3b70dc31..18601f89e 100644 --- a/app/serializers/dossier_serializer.rb +++ b/app/serializers/dossier_serializer.rb @@ -34,6 +34,10 @@ class DossierSerializer < ActiveModel::Serializer object.user.try(:email) end + def entreprise + object.etablissement&.entreprise + end + def state case object.state when 'en_construction' diff --git a/app/serializers/entreprise_serializer.rb b/app/serializers/entreprise_serializer.rb index d46ab8672..3a52d7917 100644 --- a/app/serializers/entreprise_serializer.rb +++ b/app/serializers/entreprise_serializer.rb @@ -11,4 +11,8 @@ class EntrepriseSerializer < ActiveModel::Serializer :date_creation, :nom, :prenom + + def date_creation + object.date_creation ? object.date_creation.to_datetime : nil + end end diff --git a/spec/factories/dossier.rb b/spec/factories/dossier.rb index e2a73254b..a491b48b8 100644 --- a/spec/factories/dossier.rb +++ b/spec/factories/dossier.rb @@ -14,8 +14,6 @@ FactoryBot.define do trait :with_entreprise do after(:build) do |dossier, _evaluator| etablissement = create(:etablissement) - entreprise = create(:entreprise, etablissement: etablissement) - dossier.entreprise = entreprise dossier.etablissement = etablissement end end diff --git a/spec/factories/entreprise.rb b/spec/factories/entreprise.rb deleted file mode 100644 index 9598017da..000000000 --- a/spec/factories/entreprise.rb +++ /dev/null @@ -1,14 +0,0 @@ -FactoryBot.define do - factory :entreprise do - siren '440117620' - capital_social 537_100_000 - numero_tva_intracommunautaire 'FR27440117620' - forme_juridique 'SA à conseil d\'administration (s.a.i.)' - forme_juridique_code '5599' - nom_commercial 'GRTGAZ' - raison_sociale 'GRTGAZ' - siret_siege_social '44011762001530' - code_effectif_entreprise '51' - date_creation Time.at(1453976189).to_datetime - end -end diff --git a/spec/factories/rna_information.rb b/spec/factories/rna_information.rb deleted file mode 100644 index bba5d5371..000000000 --- a/spec/factories/rna_information.rb +++ /dev/null @@ -1,11 +0,0 @@ -FactoryBot.define do - factory :rna_information do - association_id "W072000535" - titre "ASSOCIATION POUR LA PROMOTION DE SPECTACLES AU CHATEAU DE ROCHEMAURE" - objet "mise en oeuvre et réalisation de spectacles au chateau de rochemaure" - date_creation "1990-04-24" - date_declaration "2014-11-28" - date_publication "1990-05-16" - association :entreprise, factory: [:entreprise] - end -end diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index c6471c5e8..36062085d 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -27,8 +27,6 @@ describe Dossier do describe 'methods' do let(:dossier) { create(:dossier, :with_entreprise, user: user) } - - let(:entreprise) { dossier.entreprise } let(:etablissement) { dossier.etablissement } subject { dossier } @@ -200,7 +198,7 @@ describe Dossier do it { expect(subject[:entreprise_raison_sociale]).to eq('GRTGAZ') } it { expect(subject[:entreprise_siret_siege_social]).to eq('44011762001530') } it { expect(subject[:entreprise_code_effectif_entreprise]).to eq('51') } - it { expect(subject[:entreprise_date_creation]).to eq('Thu, 28 Jan 2016 10:16:29 UTC +00:0') } + it { expect(subject[:entreprise_date_creation]).to eq('1990-04-24T00:00:00+00:00') } it { expect(subject[:entreprise_nom]).to be_nil } it { expect(subject[:entreprise_prenom]).to be_nil } @@ -311,7 +309,7 @@ describe Dossier do "GRTGAZ", "44011762001530", "51", - dossier.entreprise.date_creation, + "1990-04-24T00:00:00+00:00", nil, nil ] @@ -325,22 +323,16 @@ describe Dossier do describe '#reset!' do let!(:dossier) { create :dossier, :with_entreprise, autorisation_donnees: true } - let!(:rna_information) { create :rna_information, entreprise: dossier.entreprise } let!(:exercice) { create :exercice, etablissement: dossier.etablissement } subject { dossier.reset! } - it { expect(dossier.entreprise).not_to be_nil } it { expect(dossier.etablissement).not_to be_nil } it { expect(dossier.etablissement.exercices).not_to be_empty } it { expect(dossier.etablissement.exercices.size).to eq 1 } - it { expect(dossier.entreprise.rna_information).not_to be_nil } it { expect(dossier.autorisation_donnees).to be_truthy } - it { expect { subject }.to change(RNAInformation, :count).by(-1) } it { expect { subject }.to change(Exercice, :count).by(-1) } - - it { expect { subject }.to change(Entreprise, :count).by(-1) } it { expect { subject }.to change(Etablissement, :count).by(-1) } context 'when method reset! is call' do @@ -349,7 +341,6 @@ describe Dossier do dossier.reload end - it { expect(dossier.entreprise).to be_nil } it { expect(dossier.etablissement).to be_nil } it { expect(dossier.autorisation_donnees).to be_falsey } end @@ -766,7 +757,7 @@ describe Dossier do it { expect(dossier.get_value('self', 'created_at')).to eq(dossier.created_at) } it { expect(dossier.get_value('user', 'email')).to eq(user.email) } it { expect(dossier.get_value('france_connect_information', 'gender')).to eq(user.france_connect_information.gender) } - it { expect(dossier.get_value('entreprise', 'siren')).to eq(dossier.entreprise.siren) } + it { expect(dossier.get_value('entreprise', 'siren')).to eq(dossier.etablissement.entreprise_siren) } it { expect(dossier.get_value('etablissement', 'siret')).to eq(dossier.etablissement.siret) } it { expect(dossier.get_value('type_de_champ', @champ_public.type_de_champ.id.to_s)).to eq(dossier.champs.first.value) } it { expect(dossier.get_value('type_de_champ_private', @champ_private.type_de_champ.id.to_s)).to eq(dossier.champs_private.first.value) } @@ -834,7 +825,7 @@ describe Dossier do subject { dossier.owner_name } context 'when there is no entreprise or individual' do - let(:dossier) { create(:dossier, individual: nil, entreprise: nil, procedure: procedure) } + let(:dossier) { create(:dossier, individual: nil, procedure: procedure) } it { is_expected.to be_nil } end @@ -842,7 +833,7 @@ describe Dossier do context 'when there is entreprise' do let(:dossier) { create(:dossier, :with_entreprise, procedure: procedure) } - it { is_expected.to eq(dossier.entreprise.raison_sociale) } + it { is_expected.to eq(dossier.etablissement.entreprise_raison_sociale) } end context 'when there is an individual' do diff --git a/spec/models/entreprise_spec.rb b/spec/models/entreprise_spec.rb deleted file mode 100644 index 0a901fb3e..000000000 --- a/spec/models/entreprise_spec.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'spec_helper' - -describe Entreprise do -end diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index 8f6f797a2..97a8ca7e6 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -559,12 +559,12 @@ describe Procedure do { "label" => 'Civilité (FC)', "table" => 'france_connect_information', "column" => 'gender' }, { "label" => 'Prénom (FC)', "table" => 'france_connect_information', "column" => 'given_name' }, { "label" => 'Nom (FC)', "table" => 'france_connect_information', "column" => 'family_name' }, - { "label" => 'SIREN', "table" => 'entreprise', "column" => 'siren' }, - { "label" => 'Forme juridique', "table" => 'entreprise', "column" => 'forme_juridique' }, - { "label" => 'Nom commercial', "table" => 'entreprise', "column" => 'nom_commercial' }, - { "label" => 'Raison sociale', "table" => 'entreprise', "column" => 'raison_sociale' }, - { "label" => 'SIRET siège social', "table" => 'entreprise', "column" => 'siret_siege_social' }, - { "label" => 'Date de création', "table" => 'entreprise', "column" => 'date_creation' }, + { "label" => 'SIREN', "table" => 'etablissement', "column" => 'entreprise_siren' }, + { "label" => 'Forme juridique', "table" => 'etablissement', "column" => 'entreprise_forme_juridique' }, + { "label" => 'Nom commercial', "table" => 'etablissement', "column" => 'entreprise_nom_commercial' }, + { "label" => 'Raison sociale', "table" => 'etablissement', "column" => 'entreprise_raison_sociale' }, + { "label" => 'SIRET siège social', "table" => 'etablissement', "column" => 'entreprise_siret_siege_social' }, + { "label" => 'Date de création', "table" => 'etablissement', "column" => 'entreprise_date_creation' }, { "label" => 'SIRET', "table" => 'etablissement', "column" => 'siret' }, { "label" => 'Libellé NAF', "table" => 'etablissement', "column" => 'libelle_naf' }, { "label" => 'Code postal', "table" => 'etablissement', "column" => 'code_postal' }, diff --git a/spec/models/rna_information_spec.rb b/spec/models/rna_information_spec.rb deleted file mode 100644 index 89537c245..000000000 --- a/spec/models/rna_information_spec.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'spec_helper' - -describe RNAInformation do -end diff --git a/spec/models/search_spec.rb b/spec/models/search_spec.rb index 047af5819..93365ae3e 100644 --- a/spec/models/search_spec.rb +++ b/spec/models/search_spec.rb @@ -28,9 +28,9 @@ describe Search do let!(:dossier_3) { create(:dossier, state: 'en_construction', procedure: procedure_2, user: create(:user, email: 'peace@clap.fr')) } let!(:dossier_archived) { create(:dossier, state: 'en_construction', procedure: procedure_1, archived: true, user: create(:user, email: 'brouillonArchived@clap.fr')) } - let!(:etablissement_1) { create(:etablissement, entreprise: create(:entreprise, raison_sociale: 'OCTO Academy', dossier: dossier_1), dossier: dossier_1, siret: '41636169600051') } - let!(:etablissement_2) { create(:etablissement, entreprise: create(:entreprise, raison_sociale: 'Plop octo', dossier: dossier_2), dossier: dossier_2, siret: '41816602300012') } - let!(:etablissement_3) { create(:etablissement, entreprise: create(:entreprise, raison_sociale: 'OCTO Technology', dossier: dossier_3), dossier: dossier_3, siret: '41816609600051') } + let!(:etablissement_1) { create(:etablissement, entreprise_raison_sociale: 'OCTO Academy', dossier: dossier_1, siret: '41636169600051') } + let!(:etablissement_2) { create(:etablissement, entreprise_raison_sociale: 'Plop octo', dossier: dossier_2, siret: '41816602300012') } + let!(:etablissement_3) { create(:etablissement, entreprise_raison_sociale: 'OCTO Technology', dossier: dossier_3, siret: '41816609600051') } describe 'search is empty' do let(:terms) { '' }