aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/export
diff options
context:
space:
mode:
authorZog2018-03-08 15:07:41 +0100
committerZog2018-03-12 12:00:15 +0100
commit132db2e97fd6e28105e472ee562062b7ebc07b39 (patch)
tree6a1e332e98abd011d0913044e75727ea11a4c3c6 /app/models/export
parenta4a075f5eec935dd6a0dbf0a861b6ada13b1dcbc (diff)
downloadchouette-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.rb14
-rw-r--r--app/models/export/referential_companies.rb65
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