Skip to content

Commit

Permalink
Procedure export dossiers with champs siret
Browse files Browse the repository at this point in the history
  • Loading branch information
tchak committed Nov 27, 2018
1 parent 85f9e1a commit 512047d
Show file tree
Hide file tree
Showing 10 changed files with 274 additions and 416 deletions.
18 changes: 13 additions & 5 deletions app/controllers/new_gestionnaire/procedures_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -174,13 +174,21 @@ def remove_filter
end

def download_dossiers
export = procedure.generate_export
filename = procedure.export_filename
options = params.permit(:limit, :since, tables: [])

respond_to do |format|
format.csv { send_data(SpreadsheetArchitect.to_csv(data: export[:data], headers: export[:headers]), filename: "#{filename}.csv") }
format.xlsx { send_data(SpreadsheetArchitect.to_xlsx(data: export[:data], headers: export[:headers]), filename: "#{filename}.xlsx") }
format.ods { send_data(SpreadsheetArchitect.to_ods(data: export[:data], headers: export[:headers]), filename: "#{filename}.ods") }
format.csv do
send_data(procedure.to_csv(options),
filename: procedure.export_filename(:csv))
end
format.xlsx do
send_data(procedure.to_xlsx(options),
filename: procedure.export_filename(:xlsx))
end
format.ods do
send_data(procedure.to_ods(options),
filename: procedure.export_filename(:ods))
end
end
end

Expand Down
49 changes: 2 additions & 47 deletions app/models/dossier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@ 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(:etablissement, :champs, :champs_private, :user, :individual, :followers_gestionnaires).order(en_construction_at: 'asc') }
scope :downloadable_sorted, -> { state_not_brouillon.includes(:etablissement, :user, :individual, :followers_gestionnaires, champs: { etablissement: [], type_de_champ: :drop_down_list }, champs_private: { etablissement: [], type_de_champ: :drop_down_list }).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 }) }
scope :with_champs, -> { includes(champs: :type_de_champ) }
scope :nearing_end_of_retention, -> (duration = '1 month') { joins(:procedure).where("en_instruction_at + (duree_conservation_dossiers_dans_ds * interval '1 month') - now() < interval ?", duration) }

scope :since, -> (since) { where('dossiers.created_at >= ?', since) }
scope :for_api, -> {
includes(commentaires: [],
champs: [
Expand Down Expand Up @@ -146,21 +146,6 @@ def instruction_commencee?
INSTRUCTION_COMMENCEE.include?(state)
end

def export_headers
serialized_dossier = DossierTableExportSerializer.new(self)
headers = serialized_dossier.attributes.keys
headers += procedure.types_de_champ.order(:order_place).map { |types_de_champ| types_de_champ.libelle.parameterize.underscore.to_sym }
headers += procedure.types_de_champ_private.order(:order_place).map { |types_de_champ| types_de_champ.libelle.parameterize.underscore.to_sym }
headers += export_etablissement_data.keys
headers
end

def export_values
sorted_values.map do |value|
serialize_value_for_export(value)
end
end

def reset!
etablissement.destroy

Expand Down Expand Up @@ -361,36 +346,6 @@ def update_state_dates
end
end

def serialize_value_for_export(value)
value.nil? || value.kind_of?(Time) ? value : value.to_s
end

def convert_specific_hash_values_to_string(hash_to_convert)
hash_to_convert.transform_values do |value|
serialize_value_for_export(value)
end
end

def export_etablissement_data
if etablissement.present?
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 }
end
convert_specific_hash_values_to_string(etablissement_attr.merge(entreprise_attr))
end

def sorted_values
serialized_dossier = DossierTableExportSerializer.new(self)
values = serialized_dossier.attributes.values
values += champs.map(&:for_export)
values += champs_private.map(&:for_export)
values += export_etablissement_data.values
values
end

def send_dossier_received
if saved_change_to_state? && en_instruction?
NotificationMailer.send_dossier_received(self).deliver_later
Expand Down
24 changes: 14 additions & 10 deletions app/models/procedure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -241,21 +241,25 @@ def total_dossier
self.dossiers.state_not_brouillon.size
end

def export_filename
def export_filename(format)
procedure_identifier = path || "procedure-#{id}"
"dossiers_#{procedure_identifier}_#{Time.zone.now.strftime('%Y-%m-%d_%H-%M')}"
"dossiers_#{procedure_identifier}_#{Time.zone.now.strftime('%Y-%m-%d_%H-%M')}.#{format}"
end

def generate_export
exportable_dossiers = dossiers.downloadable_sorted
def export(options = {})
ProcedureExportService.new(self, **options.to_h.symbolize_keys)
end

headers = exportable_dossiers&.first&.export_headers || []
data = exportable_dossiers.any? ? exportable_dossiers.map(&:export_values) : [[]]
def to_csv(options = {})
export(options).to_csv
end

{
headers: headers,
data: data
}
def to_xlsx(options = {})
export(options).to_xlsx
end

def to_ods(options = {})
export(options).to_ods
end

def procedure_overview(start_date)
Expand Down
57 changes: 0 additions & 57 deletions app/serializers/dossier_table_export_serializer.rb

This file was deleted.

5 changes: 0 additions & 5 deletions app/serializers/etablissement_csv_serializer.rb

This file was deleted.

Loading

0 comments on commit 512047d

Please sign in to comment.