From 320d5da40fdd9eeda6e86bdd65d2f764e5f788f3 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Thu, 13 Apr 2017 15:05:55 +0200 Subject: [PATCH 1/2] Add individual infos to flat table export serializer --- app/models/dossier.rb | 4 +-- .../dossier_procedure_serializer.rb | 13 ------- .../dossier_table_export_serializer.rb | 34 +++++++++++++++++++ spec/factories/individual.rb | 1 + spec/models/dossier_spec.rb | 31 +++++++++++++++-- 5 files changed, 66 insertions(+), 17 deletions(-) delete mode 100644 app/serializers/dossier_procedure_serializer.rb create mode 100644 app/serializers/dossier_table_export_serializer.rb diff --git a/app/models/dossier.rb b/app/models/dossier.rb index bdadb8c00..0a2848c07 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -245,7 +245,7 @@ class Dossier < ActiveRecord::Base end def data_with_champs - serialized_dossier = DossierProcedureSerializer.new(self) + serialized_dossier = DossierTableExportSerializer.new(self) data = serialized_dossier.attributes.values data += self.champs.order('type_de_champ_id ASC').map(&:value) data += self.export_entreprise_data.values @@ -253,7 +253,7 @@ class Dossier < ActiveRecord::Base end def export_headers - serialized_dossier = DossierProcedureSerializer.new(self) + serialized_dossier = DossierTableExportSerializer.new(self) headers = serialized_dossier.attributes.keys headers += self.procedure.types_de_champ.order('id ASC').map { |types_de_champ| types_de_champ.libelle.parameterize.underscore.to_sym } headers += self.export_entreprise_data.keys diff --git a/app/serializers/dossier_procedure_serializer.rb b/app/serializers/dossier_procedure_serializer.rb deleted file mode 100644 index 02ebc4815..000000000 --- a/app/serializers/dossier_procedure_serializer.rb +++ /dev/null @@ -1,13 +0,0 @@ -class DossierProcedureSerializer < ActiveModel::Serializer - attributes :id, - :created_at, - :updated_at, - :archived, - :mandataire_social, - :state, - :initiated_at, - :received_at, - :processed_at - - attribute :followers_gestionnaires_emails, key: :emails_accompagnateurs -end diff --git a/app/serializers/dossier_table_export_serializer.rb b/app/serializers/dossier_table_export_serializer.rb new file mode 100644 index 000000000..9ed5dce82 --- /dev/null +++ b/app/serializers/dossier_table_export_serializer.rb @@ -0,0 +1,34 @@ +class DossierTableExportSerializer < ActiveModel::Serializer + attributes :id, + :created_at, + :updated_at, + :archived, + :mandataire_social, + :state, + :initiated_at, + :received_at, + :processed_at + + attribute :followers_gestionnaires_emails, key: :emails_accompagnateurs + + attributes :individual_gender, + :individual_prenom, + :individual_nom, + :individual_birthdate + + def individual_prenom + object.individual.try(:prenom) + end + + def individual_nom + object.individual.try(:nom) + end + + def individual_birthdate + object.individual.try(:birthdate) + end + + def individual_gender + object.individual.try(:gender) + end +end diff --git a/spec/factories/individual.rb b/spec/factories/individual.rb index c5924d57c..c4b7a1c52 100644 --- a/spec/factories/individual.rb +++ b/spec/factories/individual.rb @@ -1,5 +1,6 @@ FactoryGirl.define do factory :individual do + gender 'M.' nom 'Julien' prenom 'Xavier' birthdate '20/01/1991' diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 63092998b..344f41c19 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -576,6 +576,10 @@ describe Dossier do it { expect(subject[:entreprise_date_creation]).to eq('Thu, 28 Jan 2016 10:16:29 UTC +00:0') } it { expect(subject[:entreprise_nom]).to be_nil } it { expect(subject[:entreprise_prenom]).to be_nil } + it { expect(subject[:individual_gender]).to be_nil } + it { expect(subject[:individual_prenom]).to be_nil } + it { expect(subject[:individual_nom]).to be_nil } + it { expect(subject[:individual_birthdate]).to be_nil } context 'when dossier does not have enterprise' do let(:dossier) { create(:dossier, user: user, procedure: procedure) } @@ -598,7 +602,11 @@ describe Dossier do subject { dossier.export_headers } it { expect(subject).to include(:description) } - it { expect(subject.count).to eq(DossierProcedureSerializer.new(dossier).attributes.count + dossier.procedure.types_de_champ.count + dossier.export_entreprise_data.count) } + it { expect(subject).to include(:individual_gender) } + it { expect(subject).to include(:individual_nom) } + it { expect(subject).to include(:individual_prenom) } + it { expect(subject).to include(:individual_birthdate) } + it { expect(subject.count).to eq(DossierTableExportSerializer.new(dossier).attributes.count + dossier.procedure.types_de_champ.count + dossier.export_entreprise_data.count) } end describe '#data_with_champs' do @@ -614,7 +622,22 @@ describe Dossier do it { expect(subject[7]).to eq(date2) } it { expect(subject[8]).to eq(date3) } it { expect(subject[9]).to eq(dossier.followers_gestionnaires_emails) } - it { expect(subject.count).to eq(DossierProcedureSerializer.new(dossier).attributes.count + dossier.procedure.types_de_champ.count + dossier.export_entreprise_data.count) } + it { expect(subject[10]).to be_nil } + it { expect(subject[11]).to be_nil } + it { expect(subject[12]).to be_nil } + it { expect(subject[13]).to be_nil } + it { expect(subject.count).to eq(DossierTableExportSerializer.new(dossier).attributes.count + dossier.procedure.types_de_champ.count + dossier.export_entreprise_data.count) } + + context 'dossier for individual' do + let(:dossier_with_individual) { create(:dossier, :for_individual, user: user, procedure: procedure) } + + subject { dossier_with_individual.data_with_champs } + + it { expect(subject[10]).to eq(dossier_with_individual.individual.gender) } + it { expect(subject[11]).to eq(dossier_with_individual.individual.prenom) } + it { expect(subject[12]).to eq(dossier_with_individual.individual.nom) } + it { expect(subject[13]).to eq(dossier_with_individual.individual.birthdate) } + end end describe "#full_data_string" do @@ -631,6 +654,10 @@ describe Dossier do dossier.processed_at, gestionnaire.email, nil, + nil, + nil, + nil, + nil, "44011762001530", "true", "4950Z", From 1612b60126e822e677c6087183cc47f4c6d776e6 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Thu, 13 Apr 2017 16:42:23 +0200 Subject: [PATCH 2/2] Remove useless code --- app/models/dossier.rb | 13 ----- spec/models/dossier_spec.rb | 103 ------------------------------------ 2 files changed, 116 deletions(-) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 0a2848c07..14026026f 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -1,6 +1,4 @@ class Dossier < ActiveRecord::Base - include SpreadsheetArchitect - enum state: {draft: 'draft', initiated: 'initiated', replied: 'replied', #action utilisateur demandé @@ -233,17 +231,6 @@ class Dossier < ActiveRecord::Base return convert_specific_hash_values_to_string(etablissement_attr.merge(entreprise_attr)) end - def export_default_columns - dossier_attr = DossierSerializer.new(self).attributes - dossier_attr = convert_specific_hash_values_to_string(dossier_attr) - dossier_attr = dossier_attr.merge(self.export_entreprise_data) - return dossier_attr - end - - def spreadsheet_columns - self.export_default_columns.to_a - end - def data_with_champs serialized_dossier = DossierTableExportSerializer.new(self) data = serialized_dossier.attributes.values diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 344f41c19..37ca54b3a 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -546,49 +546,6 @@ describe Dossier do it { expect(subject.count).to eq(EntrepriseSerializer.new(Entreprise.new).as_json.count + EtablissementSerializer.new(Etablissement.new).as_json.count) } end - describe '#export_default_columns' do - let(:procedure) { create(:procedure) } - let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) } - subject { dossier.export_default_columns } - - it { expect(subject[:archived]).to eq('false') } - it { expect(subject[:etablissement_siret]).to eq('44011762001530') } - it { expect(subject[:etablissement_siege_social]).to eq('true') } - it { expect(subject[:etablissement_naf]).to eq('4950Z') } - it { expect(subject[:etablissement_libelle_naf]).to eq('Transports par conduites') } - it { expect(subject[:etablissement_adresse]).to eq('GRTGAZ IMMEUBLE BORA 6 RUE RAOUL NORDLING 92270 BOIS COLOMBES') } - it { expect(subject[:etablissement_numero_voie]).to eq('6') } - it { expect(subject[:etablissement_type_voie]).to eq('RUE') } - it { expect(subject[:etablissement_nom_voie]).to eq('RAOUL NORDLING') } - it { expect(subject[:etablissement_complement_adresse]).to eq('IMMEUBLE BORA') } - it { expect(subject[:etablissement_code_postal]).to eq('92270') } - it { expect(subject[:etablissement_localite]).to eq('BOIS COLOMBES') } - it { expect(subject[:etablissement_code_insee_localite]).to eq('92009') } - it { expect(subject[:entreprise_siren]).to eq('440117620') } - it { expect(subject[:entreprise_capital_social]).to eq('537100000') } - it { expect(subject[:entreprise_numero_tva_intracommunautaire]).to eq('FR27440117620') } - it { expect(subject[:entreprise_forme_juridique]).to eq("SA à conseil d'administration (s.a.i.)") } - it { expect(subject[:entreprise_forme_juridique_code]).to eq('5599') } - it { expect(subject[:entreprise_nom_commercial]).to eq('GRTGAZ') } - 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_nom]).to be_nil } - it { expect(subject[:entreprise_prenom]).to be_nil } - it { expect(subject[:individual_gender]).to be_nil } - it { expect(subject[:individual_prenom]).to be_nil } - it { expect(subject[:individual_nom]).to be_nil } - it { expect(subject[:individual_birthdate]).to be_nil } - - context 'when dossier does not have enterprise' do - let(:dossier) { create(:dossier, user: user, procedure: procedure) } - subject { dossier.export_default_columns } - - it { expect(subject[:archived]).to eq('false') } - end - end - context 'when dossier is followed' do let(:procedure) { create(:procedure, :with_type_de_champ) } let(:gestionnaire) { create(:gestionnaire) } @@ -691,66 +648,6 @@ describe Dossier do end end - describe '#Dossier.to_csv' do - let!(:procedure) { create(:procedure) } - let!(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure, ) } - - subject do - dossier_hash = {} - dossier_splitted = Dossier.to_csv.split("\n").map { |cell| cell.split(",") } - index = 0 - dossier_splitted[0].each do |column| - dossier_hash.store(column.to_sym, dossier_splitted[1][index]) - index = index + 1 - end - dossier_hash - end - - it { expect(subject[:archived]).to eq('false') } - it { expect(subject[:etablissement_siret]).to eq('44011762001530') } - it { expect(subject[:etablissement_siege_social]).to eq('true') } - it { expect(subject[:etablissement_naf]).to eq('4950Z') } - it { expect(subject[:etablissement_libelle_naf]).to eq('Transports par conduites') } - it { expect(subject[:etablissement_adresse]).to eq('GRTGAZ IMMEUBLE BORA 6 RUE RAOUL NORDLING 92270 BOIS COLOMBES') } - it { expect(subject[:etablissement_numero_voie]).to eq('6') } - it { expect(subject[:etablissement_type_voie]).to eq('RUE') } - it { expect(subject[:etablissement_nom_voie]).to eq('RAOUL NORDLING') } - it { expect(subject[:etablissement_complement_adresse]).to eq('IMMEUBLE BORA') } - it { expect(subject[:etablissement_code_postal]).to eq('92270') } - it { expect(subject[:etablissement_localite]).to eq('BOIS COLOMBES') } - it { expect(subject[:etablissement_code_insee_localite]).to eq('92009') } - it { expect(subject[:entreprise_siren]).to eq('440117620') } - it { expect(subject[:entreprise_capital_social]).to eq('537100000') } - it { expect(subject[:entreprise_numero_tva_intracommunautaire]).to eq('FR27440117620') } - it { expect(subject[:entreprise_forme_juridique]).to eq("SA à conseil d'administration (s.a.i.)") } - it { expect(subject[:entreprise_forme_juridique_code]).to eq('5599') } - it { expect(subject[:entreprise_nom_commercial]).to eq('GRTGAZ') } - 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('2016-01-28 10:16:29 UTC') } - it { expect(subject[:entreprise_nom]).to be_nil } - it { expect(subject[:entreprise_prenom]).to be_nil } - end - - describe '#Dossier.to_xlsx' do - let!(:procedure) { create(:procedure) } - let!(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) } - - subject { Dossier.to_xlsx } - - it { expect(subject).is_a?(String) } - end - - describe '#Dossier.to_ods' do - let!(:procedure) { create(:procedure) } - let!(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) } - - subject { Dossier.to_ods } - - it { expect(subject).is_a?(String) } - end - describe '#reset!' do let!(:dossier) { create :dossier, :with_entreprise, autorisation_donnees: true } let!(:rna_information) { create :rna_information, entreprise: dossier.entreprise }