Merge branch 'develop' into staging

This commit is contained in:
Xavier J 2016-11-15 17:20:46 +01:00
commit 789f87de2b
15 changed files with 317 additions and 56 deletions

View file

@ -87,6 +87,7 @@ gem "smart_listing"
gem 'bootstrap-wysihtml5-rails', '~> 0.3.3.8'
gem 'as_csv'
gem 'spreadsheet_architect'
gem 'apipie-rails', '=0.3.1'
gem "maruku" # for Markdown support in apipie
@ -111,6 +112,10 @@ group :test do
gem 'vcr'
end
group :development do
gem 'web-console', '~> 2.0'
end
group :development, :test do
# gem 'terminal-notifier'
# gem 'terminal-notifier-guard'
@ -120,7 +125,6 @@ group :development, :test do
gem 'pry-byebug'
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'

View file

@ -62,6 +62,10 @@ GEM
autoprefixer-rails (5.2.1)
execjs
json
axlsx (2.0.1)
htmlentities (~> 4.3.1)
nokogiri (>= 1.4.1)
rubyzip (~> 1.0.0)
bcrypt (3.1.11)
bindata (2.1.0)
binding_of_caller (0.7.2)
@ -294,6 +298,7 @@ GEM
haml (~> 4.0.0)
nokogiri (~> 1.6.0)
ruby_parser (~> 3.5)
htmlentities (4.3.4)
http-cookie (1.0.2)
domain_name (~> 0.5)
httpclient (2.6.0.1)
@ -437,6 +442,10 @@ GEM
rgeo (0.3.20)
rgeo-geojson (0.3.1)
rgeo (~> 0.3)
rodf (0.3.7)
activesupport (>= 3.0, < 6.0)
builder (~> 3.0)
rubyzip (~> 1.0)
rspec (3.2.0)
rspec-core (~> 3.2.0)
rspec-expectations (~> 3.2.0)
@ -473,7 +482,7 @@ GEM
sexp_processor (~> 4.0)
ruby_parser (3.7.0)
sexp_processor (~> 4.1)
rubyzip (1.1.7)
rubyzip (1.0.0)
safe_yaml (1.0.4)
sass (3.4.22)
sass-rails (5.0.6)
@ -513,6 +522,9 @@ GEM
jquery-rails
kaminari (~> 0.16.1)
rails (>= 3.2)
spreadsheet_architect (1.4.7)
axlsx (>= 2.0)
rodf (>= 0.3.6)
spring (1.3.6)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
@ -645,6 +657,7 @@ DEPENDENCIES
shoulda-matchers
simplecov
smart_listing
spreadsheet_architect
spring
spring-commands-rspec
therubyracer
@ -658,4 +671,4 @@ DEPENDENCIES
will_paginate-bootstrap
BUNDLED WITH
1.13.2
1.13.6

View file

@ -290,4 +290,4 @@ div.pagination {
margin-right: 0px !important;
}
}
}

View file

@ -1,4 +1,5 @@
class Backoffice::DossiersController < Backoffice::DossiersListController
respond_to :html, :xlsx, :ods, :csv
def index
super
@ -18,11 +19,17 @@ class Backoffice::DossiersController < Backoffice::DossiersListController
end
def download_dossiers_tps
dossiers = current_gestionnaire.dossiers.where.not(state: :draft)
response.headers['Content-Type'] = 'text/csv'
render csv: dossiers, status: 200
if procedure = Procedure.find_by(id: params[:procedure_id])
dossiers = dossiers_list_facade(param_liste).dossiers_to_display
respond_with Dossier.export_full_generation(dossiers, request.format)
else
dossiers = dossiers_list_facade(param_liste).dossiers_to_display
respond_to do |format|
format.xlsx { render xlsx: dossiers }
format.ods { render ods: dossiers }
format.csv { render csv: dossiers }
end
end
end
def search

View file

@ -1,4 +1,5 @@
class Dossier < ActiveRecord::Base
include SpreadsheetArchitect
enum state: {draft: 'draft',
initiated: 'initiated',
@ -279,16 +280,75 @@ class Dossier < ActiveRecord::Base
procedure.cerfa_flag? && cerfa.size != 0
end
def as_csv(options={})
dossier_attr = DossierSerializer.new(self).attributes
unless entreprise.nil?
etablissement_attr = EtablissementCsvSerializer.new(self.etablissement).attributes.map { |k, v| ["etablissement.#{k}", v] }.to_h
entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map { |k, v| ["entreprise.#{k}", v] }.to_h
dossier_attr = dossier_attr.merge(etablissement_attr).merge(entreprise_attr)
def convert_specific_hash_values_to_string(hash_to_convert)
hash = {}
hash_to_convert.each do |key, value|
value = value.to_s if !value.kind_of?(Time) && !value.nil?
hash.store(key, value)
end
return hash
end
dossier_attr
def convert_specific_array_values_to_string(array_to_convert)
array = []
array_to_convert.each do |value|
value = value.to_s if !value.kind_of?(Time) && !value.nil?
array << value
end
return array
end
def export_entreprise_data
unless entreprise.nil?
etablissement_attr = EtablissementCsvSerializer.new(self.etablissement).attributes.map { |k, v| ["etablissement.#{k}".parameterize.underscore.to_sym, v] }.to_h
entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map { |k, v| ["entreprise.#{k}".parameterize.underscore.to_sym, v] }.to_h
else
etablissement_attr = EtablissementSerializer.new(Etablissement.new).attributes.map { |k, v| ["etablissement.#{k}".parameterize.underscore.to_sym, v] }.to_h
entreprise_attr = EntrepriseSerializer.new(Entreprise.new).attributes.map { |k, v| ["entreprise.#{k}".parameterize.underscore.to_sym, v] }.to_h
end
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 = DossierProcedureSerializer.new(self)
data = serialized_dossier.attributes.values
data += self.champs.order('type_de_champ_id ASC').map(&:value)
data += self.export_entreprise_data.values
return data
end
def export_headers
serialized_dossier = DossierProcedureSerializer.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
return headers
end
def self.export_full_generation(dossiers, format)
data = []
headers = dossiers.first.export_headers
dossiers.each do |dossier|
data << dossier.convert_specific_array_values_to_string(dossier.data_with_champs)
end
if ["csv"].include?(format)
return SpreadsheetArchitect.to_csv(data: data, headers: headers)
elsif ["xlsx"].include?(format)
return SpreadsheetArchitect.to_xlsx(data: data, headers: headers)
elsif ["ods"].include?(format)
return SpreadsheetArchitect.to_ods(data: data, headers: headers)
end
end
def reset!

View file

@ -1,4 +1,5 @@
class Entreprise < ActiveRecord::Base
belongs_to :dossier
has_one :etablissement, dependent: :destroy
has_one :rna_information, dependent: :destroy

View file

@ -1,4 +1,5 @@
class Etablissement < ActiveRecord::Base
belongs_to :dossier
belongs_to :entreprise

View file

@ -43,4 +43,4 @@ class TypeDeChamp < ActiveRecord::Base
self.mandatory = false if self.type_champ == 'header_section'
true
end
end
end

View file

@ -0,0 +1,8 @@
class DossierProcedureSerializer < ActiveModel::Serializer
attributes :id,
:created_at,
:updated_at,
:archived,
:mandataire_social,
:state
end

View file

@ -4,8 +4,7 @@ class DossierSerializer < ActiveModel::Serializer
:updated_at,
:archived,
:mandataire_social,
:state,
:total_commentaire
:state
has_one :entreprise
has_one :etablissement
@ -15,4 +14,4 @@ class DossierSerializer < ActiveModel::Serializer
has_many :champs_private
has_many :pieces_justificatives
has_many :types_de_piece_justificative
end
end

View file

@ -183,4 +183,4 @@ class DossiersListGestionnaireService
def current_preference_smart_listing_page
@current_devise_profil.preference_smart_listing_page
end
end
end

View file

@ -2,10 +2,28 @@
#pref_list_menu
= render partial: 'backoffice/dossiers/pref_list'
=link_to t('dynamics.backoffice.download_all_dossiers'), backoffice_download_dossiers_tps_path, {class: 'btn btn-success btn-sm', style: 'float: right; margin-right: 4%; margin-top: 7px'}
%h1
=t('dynamics.backoffice.title')
%div.dropdown.pull-right#download_menu
%button.btn.btn-success.dropdown-toggle#dropdownDownloadMenu{ type: :button, 'data-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false, class: ('disabled' if (@dossiers.count > 200)) }
- if (@dossiers.count > 200)
= t('dynamics.backoffice.limit_excess_download_all_dossiers')
- else
%i.fa.fa-download
= t('dynamics.backoffice.download_all_dossiers')
%span.caret
%ul.dropdown-menu.dropdown-menu-right
%li
= link_to backoffice_download_dossiers_tps_path(format: :csv, procedure_id: params[:id]), { class: 'btn btn-sm' } do
= t('dynamics.backoffice.format_csv')
%li
= link_to backoffice_download_dossiers_tps_path(format: :xlsx, procedure_id: params[:id]), { class: 'btn btn-sm' } do
= t('dynamics.backoffice.format_xlsx')
%li
= link_to backoffice_download_dossiers_tps_path(format: :ods, procedure_id: params[:id]), { class: 'btn btn-sm' } do
= t('dynamics.backoffice.format_ods')
= render partial: 'backoffice/dossiers/onglets'
= smart_listing_render :dossiers

View file

@ -12,7 +12,11 @@ fr:
pref_list:
title: 'Gestion de colonnes affichées'
description: 'Ce menu vous permet de choisir les différentes colonnes que vous souhaitez voir apparaître dans votre interface de suivi des dossiers.'
download_all_dossiers: 'Tous mes dossiers en CSV'
download_all_dossiers: 'Télécharger mes dossiers'
limit_excess_download_all_dossiers: 'Limite de dossiers fixée à 200 pour le téléchargement'
format_csv: 'Au format CSV'
format_xlsx: 'Au format XLSX'
format_ods: 'Au format ODS'
research:
placeholder: 'Rechercher un dossier ...'
filter_procedure:
@ -42,4 +46,4 @@ fr:
title: Dossiers
onglet_accompagnateurs:
add:
title: 'Ajouter un accompagnateur'
title: 'Ajouter un accompagnateur'

View file

@ -115,7 +115,7 @@ describe API::V1::DossiersController do
let!(:dossier) { Timecop.freeze(date_creation) { create(:dossier, :with_entreprise, procedure: procedure) } }
let(:dossier_id) { dossier.id }
let(:body) { JSON.parse(retour.body, symbolize_names: true) }
let(:field_list) { [:id, :created_at, :updated_at, :archived, :mandataire_social, :total_commentaire, :entreprise, :etablissement, :cerfa, :types_de_piece_justificative, :pieces_justificatives, :champs, :champs_private, :commentaires, :state] }
let(:field_list) { [:id, :created_at, :updated_at, :archived, :mandataire_social, :entreprise, :etablissement, :cerfa, :types_de_piece_justificative, :pieces_justificatives, :champs, :champs_private, :commentaires, :state] }
subject { body[:dossier] }
it 'return REST code 200', :show_in_doc do
@ -127,7 +127,6 @@ describe API::V1::DossiersController do
it { expect(subject[:updated_at]).to eq('2008-09-01T08:05:00.000Z') }
it { expect(subject[:archived]).to eq(dossier.archived) }
it { expect(subject[:mandataire_social]).to eq(dossier.mandataire_social) }
it { expect(subject[:total_commentaire]).to eq(dossier.total_commentaire) }
it { expect(subject.keys).to match_array(field_list) }

View file

@ -578,45 +578,192 @@ describe Dossier do
end
end
describe '#as_csv?' do
describe '#convert_specific_hash_values_to_string(hash_to_convert)' do
let(:procedure) { create(:procedure) }
let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) }
subject { dossier.as_csv }
let(:dossier_serialized_attributes) { DossierSerializer.new(dossier).attributes }
it { expect(subject[:archived]).to be_falsey }
it { expect(subject['etablissement.siret']).to eq('44011762001530') }
it { expect(subject['etablissement.siege_social']).to be_truthy }
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 }
subject { dossier.convert_specific_hash_values_to_string(dossier_serialized_attributes) }
it { expect(dossier_serialized_attributes[:id]).to be_an(Integer) }
it { expect(dossier_serialized_attributes[:created_at]).to be_a(Time) }
it { expect(dossier_serialized_attributes[:updated_at]).to be_a(Time) }
it { expect(dossier_serialized_attributes[:archived]).to be_in([true, false]) }
it { expect(dossier_serialized_attributes[:mandataire_social]).to be_in([true, false]) }
it { expect(dossier_serialized_attributes[:state]).to be_a(String) }
it { expect(subject[:id]).to be_a(String) }
it { expect(subject[:created_at]).to be_a(Time) }
it { expect(subject[:updated_at]).to be_a(Time) }
it { expect(subject[:archived]).to be_a(String) }
it { expect(subject[:mandataire_social]).to be_a(String) }
it { expect(subject[:state]).to be_a(String) }
end
describe '#convert_specific_array_values_to_string(array_to_convert)' do
let(:procedure) { create(:procedure) }
let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) }
let(:dossier_data_with_champs) { dossier.data_with_champs }
subject { dossier.convert_specific_hash_values_to_string(dossier_data_with_champs) }
end
describe '#export_entreprise_data' do
let(:procedure) { create(:procedure) }
let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) }
subject { dossier.export_entreprise_data }
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.count).to eq(EntrepriseSerializer.new(Entreprise.new).as_json[:entreprise].count + EtablissementSerializer.new(Etablissement.new).as_json[:etablissement].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 }
context 'when dossier does not have enterprise' do
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
subject { dossier.as_csv }
subject { dossier.export_default_columns }
it { expect(subject[:archived]).to be_falsey }
it { expect(subject[:archived]).to eq('false') }
end
end
describe '#export_headers' do
let(:procedure) { create(:procedure, :with_type_de_champ) }
let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) }
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) }
end
describe '#data_with_champs' do
let(:procedure) { create(:procedure, :with_type_de_champ) }
let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) }
subject { dossier.data_with_champs }
it { expect(subject[0]).to be_a_kind_of(Integer) }
it { expect(subject[1]).to be_a_kind_of(Time) }
it { expect(subject[2]).to be_a_kind_of(Time) }
it { expect(subject[3]).to be_in([true, false]) }
it { expect(subject[4]).to be_in([true, false]) }
it { expect(subject[5]).to eq("draft") }
it { expect(subject.count).to eq(DossierProcedureSerializer.new(dossier).attributes.count + dossier.procedure.types_de_champ.count + dossier.export_entreprise_data.count) }
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 }