diff options
| author | Zog | 2018-03-08 15:07:41 +0100 | 
|---|---|---|
| committer | Zog | 2018-03-12 12:00:15 +0100 | 
| commit | 132db2e97fd6e28105e472ee562062b7ebc07b39 (patch) | |
| tree | 6a1e332e98abd011d0913044e75727ea11a4c3c6 /app/models/export | |
| parent | a4a075f5eec935dd6a0dbf0a861b6ada13b1dcbc (diff) | |
| download | chouette-core-132db2e97fd6e28105e472ee562062b7ebc07b39.tar.bz2 | |
Refs #6133; Sample SimpeImporter Implementation
Still needs to be made asynchronous
Diffstat (limited to 'app/models/export')
| -rw-r--r-- | app/models/export/base.rb | 14 | ||||
| -rw-r--r-- | app/models/export/referential_companies.rb | 65 | 
2 files changed, 77 insertions, 2 deletions
| diff --git a/app/models/export/base.rb b/app/models/export/base.rb index 350edd215..ae34be0d0 100644 --- a/app/models/export/base.rb +++ b/app/models/export/base.rb @@ -21,7 +21,7 @@ class Export::Base < ActiveRecord::Base        Dir.chdir path do          Dir['**/*.rb'].each do |src|            next if src =~ /^base/ -          klass_name = "Export::#{src[0..-4].classify}" +          klass_name = "Export::#{src[0..-4].camelize}"            Rails.logger.info "Loading #{klass_name}"            begin              klass_name.constantize @@ -44,7 +44,7 @@ class Export::Base < ActiveRecord::Base    end    def self.options -    @options +    @options ||= {}    end    include IevInterfaces::Task @@ -61,6 +61,16 @@ class Export::Base < ActiveRecord::Base      true    end +  def display_option_value option_name, context +    option = self.class.options[option_name.to_sym] +    val = self.options[option_name.to_s] +    if option[:display] +      context.instance_exec(val, &option[:display]) +    else +      val +    end +  end +    private    def initialize_fields diff --git a/app/models/export/referential_companies.rb b/app/models/export/referential_companies.rb new file mode 100644 index 000000000..7a796fb48 --- /dev/null +++ b/app/models/export/referential_companies.rb @@ -0,0 +1,65 @@ +class Export::ReferentialCompanies < Export::Base +  option :referential_id, +    type: :select, +    collection: ->(){workbench.referentials.all}, +    required: true, +    display: ->(val){r = Referential.find(val); link_to(r.name, [r])} + +  after_commit :call_exporter, on: :create + +  def referential +    Referential.find referential_id +  end + +  def call_exporter +    tmp = Tempfile.new ["referential_companies", ".csv"] +    exporter =  SimpleExporter.create configuration_name: :referential_companies, filepath: tmp.path +    referential.switch +    exporter.configure do |config| +      config.collection = referential.companies.order(:name) +    end +    exporter.export +    if exporter.status == :error +      self.status = :failed +    else +      self.file = tmp +      if exporter.status == :success +        self.status = :successful +      else +        self.status = :warning +      end +    end +    convert_exporter_journal_to_messages exporter +    self.save! +  end + +  def convert_exporter_journal_to_messages exporter +    self.messages.destroy_all +    exporter.journal.each do |journal_item| +      journal_item.symbolize_keys! +      vals = {} + +      if journal_item[:kind].to_s == "warning" +        vals[:criticity] = :warning +      elsif journal_item[:kind].to_s == "error" +        vals[:criticity] = :error +      else +        vals[:criticity] = :info +        if journal_item[:event].to_s == "success" +          vals[:message_key] = :success +        end +      end +      vals[:resource_attributes] = journal_item[:row] + +      if journal_item[:message].present? +        vals[:message_key] = :full_text +        vals[:message_attributes] = { +          text: journal_item[:message] +        } +      end +      vals[:message_attributes] ||= {} +      vals[:message_attributes][:line] =  journal_item[:line] +      self.messages.build vals +    end +  end +end | 
