aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/export
diff options
context:
space:
mode:
authorZog2018-03-16 11:02:51 +0100
committerZog2018-03-16 11:02:51 +0100
commit25df1bea61409294e9944a66a25d81ea55f0391f (patch)
tree3049cca0135cce028b9c7445ebd2e6fc65f9407d /app/models/export
parente761d6fb5c70e060fc53f9119903b38a531d99c9 (diff)
downloadchouette-core-25df1bea61409294e9944a66a25d81ea55f0391f.tar.bz2
Refs #6218; UI for exports
Diffstat (limited to 'app/models/export')
-rw-r--r--app/models/export/base.rb24
-rw-r--r--app/models/export/referential_companies.rb92
2 files changed, 24 insertions, 92 deletions
diff --git a/app/models/export/base.rb b/app/models/export/base.rb
index 6085e0ffb..6a1eb791d 100644
--- a/app/models/export/base.rb
+++ b/app/models/export/base.rb
@@ -38,8 +38,28 @@ class Export::Base < ActiveRecord::Base
end
end
+ def self.user_visible?
+ false
+ end
+
+ def self.inherited child
+ super child
+ child.instance_eval do
+ def self.user_visible?
+ true
+ end
+ end
+ end
+
def self.option name, opts={}
store_accessor :options, name
+
+ if opts[:serialize]
+ define_method name do
+ JSON.parse(options[name.to_s]) rescue opts[:serialize].new
+ end
+ end
+
if !!opts[:required]
validates name, presence: true
end
@@ -51,6 +71,10 @@ class Export::Base < ActiveRecord::Base
@options ||= {}
end
+ def self.options= options
+ @options = options
+ end
+
include IevInterfaces::Task
def self.model_name
diff --git a/app/models/export/referential_companies.rb b/app/models/export/referential_companies.rb
deleted file mode 100644
index 0b6187060..000000000
--- a/app/models/export/referential_companies.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-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_create :call_exporter_async
-
- def referential
- Referential.find referential_id
- end
-
- def call_exporter_async
- SimpleExportWorker.perform_async(id)
- end
-
- def exporter
- SimpleExporter.define :referential_companies do |config|
- config.separator = ";"
- config.encoding = 'ISO-8859-1'
- config.add_column :name
- config.add_column :registration_number
- end
-
- @exporter ||= begin
- if options[:_exporter_id]
- exporter = SimpleExporter.find options[:exporter_id]
- else
- exporter = SimpleExporter.create configuration_name: :referential_companies
- options[:_exporter_id] = exporter.id
- end
- exporter
- end
- end
-
- def call_exporter
- tmp = Tempfile.new ["referential_companies", ".csv"]
- referential.switch
- exporter.configure do |config|
- config.collection = referential.companies.order(:name)
- end
- exporter.filepath = tmp.path
- exporter.export
- set_status_from_exporter
- convert_exporter_journal_to_messages
- self.file = tmp
- self.save!
- end
-
- def set_status_from_exporter
- if exporter.status == :error
- self.status = :failed
- else
- if exporter.status == :success
- self.status = :successful
- else
- self.status = :warning
- end
- end
- end
-
- def convert_exporter_journal_to_messages
- 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