aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2018-03-26 14:42:33 +0200
committerGitHub2018-03-26 14:42:33 +0200
commitdd4768576baed54f9b0f40efa645b85d5a2fd273 (patch)
tree1b81ff158777827bbbc5e3f4604496b1cb2a9630
parent37fca065bbe7202f48cb014dcc2beafb0b151150 (diff)
parent4d2cab202893e36d9f8b212258b283f13b9341f5 (diff)
downloadchouette-core-dd4768576baed54f9b0f40efa645b85d5a2fd273.tar.bz2
Merge pull request #408 from af83/6218-sqills-exports
Link exports to referentials. Refs #6218
-rw-r--r--app/controllers/development_toolbar_controller.rb7
-rw-r--r--app/helpers/exports_helper.rb3
-rw-r--r--app/models/export/base.rb4
-rw-r--r--app/models/export/simple_exporter/base.rb94
-rw-r--r--app/models/workgroup.rb4
-rw-r--r--app/views/exports/_form.html.slim3
-rw-r--r--app/views/shared/_development_toolbar.html.slim14
-rw-r--r--app/views/shared/iev_interfaces/_filters.html.slim2
-rw-r--r--app/views/workbenches/show.html.slim1
-rw-r--r--app/workers/workgroup_export_worker.rb1
-rw-r--r--config/locales/exports.en.yml1
-rw-r--r--config/locales/exports.fr.yml1
-rw-r--r--db/migrate/20180326085804_bind_exports_and_imports_types_to_workgroups.rb6
-rw-r--r--db/seeds/stif.seeds.rb1
14 files changed, 139 insertions, 3 deletions
diff --git a/app/controllers/development_toolbar_controller.rb b/app/controllers/development_toolbar_controller.rb
index 20349f7b8..be9a37eba 100644
--- a/app/controllers/development_toolbar_controller.rb
+++ b/app/controllers/development_toolbar_controller.rb
@@ -6,6 +6,13 @@ class DevelopmentToolbarController < ApplicationController
organisation.save
current_user.permissions = params[:permissions].keys.select{|k| params[:permissions][k] == "true"}
current_user.save
+ if params[:export_types].present?
+ params[:export_types].each do |workgroup_id, export_types|
+ workgroup = Workgroup.find workgroup_id
+ workgroup.export_types = export_types.keys.select{|k| export_types[k] == "true"}
+ workgroup.save!
+ end
+ end
redirect_to request.referrer || "/"
end
end
diff --git a/app/helpers/exports_helper.rb b/app/helpers/exports_helper.rb
index dc0720c40..2e784ad35 100644
--- a/app/helpers/exports_helper.rb
+++ b/app/helpers/exports_helper.rb
@@ -53,4 +53,7 @@ module ExportsHelper
end
end
+ def workgroup_exports workgroup
+ Export::Base.user_visible_descendants.select{|e| workgroup.has_export? e.name}
+ end
end
diff --git a/app/models/export/base.rb b/app/models/export/base.rb
index 6a1eb791d..6cf4c6b02 100644
--- a/app/models/export/base.rb
+++ b/app/models/export/base.rb
@@ -1,7 +1,9 @@
class Export::Base < ActiveRecord::Base
self.table_name = "exports"
- validates :type, presence: true
+ belongs_to :referential
+
+ validates :type, :referential_id, presence: true
def self.messages_class_name
"Export::Message"
diff --git a/app/models/export/simple_exporter/base.rb b/app/models/export/simple_exporter/base.rb
new file mode 100644
index 000000000..4e6e8eba4
--- /dev/null
+++ b/app/models/export/simple_exporter/base.rb
@@ -0,0 +1,94 @@
+class Export::SimpleExporter::Base < Export::Base
+ after_commit :call_exporter_async, on: :create
+
+ def self.user_visible?
+ false
+ end
+
+ def self.inherited child
+ super child
+ child.options = @options
+ child.instance_eval do
+ def self.user_visible?
+ true
+ end
+ end
+ end
+
+ def call_exporter_async
+ SimpleExportWorker.perform_async(id)
+ end
+
+ def simple_exporter_configuration_name
+
+ end
+
+ def exporter
+ @exporter ||= begin
+ if options[:_exporter_id]
+ exporter = SimpleJsonExporter.find options[:_exporter_id]
+ else
+ exporter = SimpleJsonExporter.create configuration_name: simple_exporter_configuration_name
+ options[:_exporter_id] = exporter.id
+ end
+ exporter
+ end
+ end
+
+ def configure_exporter config
+ end
+
+ def call_exporter
+ tmp = Tempfile.new [simple_exporter_configuration_name.to_s, ".json"]
+ referential.switch
+ exporter.configure do |config|
+ configure_exporter config
+ 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.to_s == "error"
+ self.status = :failed
+ elsif exporter.status.to_s == "success"
+ self.status = :successful
+ else
+ self.status = :warning
+ 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
diff --git a/app/models/workgroup.rb b/app/models/workgroup.rb
index 708225a2a..7e3e857ec 100644
--- a/app/models/workgroup.rb
+++ b/app/models/workgroup.rb
@@ -19,4 +19,8 @@ class Workgroup < ActiveRecord::Base
def custom_fields_definitions
Hash[*custom_fields.map{|cf| [cf.code, cf]}.flatten]
end
+
+ def has_export? export_name
+ export_types.include? export_name
+ end
end
diff --git a/app/views/exports/_form.html.slim b/app/views/exports/_form.html.slim
index 7817fdf1a..999e33e34 100644
--- a/app/views/exports/_form.html.slim
+++ b/app/views/exports/_form.html.slim
@@ -4,7 +4,8 @@
.col-lg-12
= form.input :name
.col-lg-12
- = form.input :type, as: :select, collection: Export::Base.user_visible_descendants, label_method: :human_name
+ = form.input :type, as: :select, collection: workgroup_exports(workbench.workgroup), label_method: :human_name
+ = form.input :referential_id, as: :select, collection: workbench.referentials, label_method: :name
- Export::Base.user_visible_descendants.each do |child|
.slave data-master="[name='export[type]']" data-value=child.name
diff --git a/app/views/shared/_development_toolbar.html.slim b/app/views/shared/_development_toolbar.html.slim
index aafd37885..836066b3d 100644
--- a/app/views/shared/_development_toolbar.html.slim
+++ b/app/views/shared/_development_toolbar.html.slim
@@ -20,6 +20,20 @@
- if Rails.application.config.development_toolbar.features_doc_url
= link_to "#{Rails.application.config.development_toolbar.features_doc_url}##{feature}", target: :blank do
.fa.fa-question-circle
+
+ - if @workbench
+ h4
+ = "Exports"
+ .toggles
+ = link_to 'all', '#', data: {mask: 'export_types', val: true}
+ = link_to 'none', '#', data: {mask: 'export_types', val: false}
+ ul
+ - Export::Base.user_visible_descendants.each do |export|
+ li
+ = hidden_field_tag "export_types[#{@workbench.workgroup_id}][#{export.name}]", false, id: ""
+ = check_box_tag "export_types[#{@workbench.workgroup_id}][#{export.name}]", true, @workbench.workgroup.has_export?(export.name)
+ = label :export_types, export.human_name
+
.col.permissions
h4
= "Permissions"
diff --git a/app/views/shared/iev_interfaces/_filters.html.slim b/app/views/shared/iev_interfaces/_filters.html.slim
index 9b114c38d..6414af7a2 100644
--- a/app/views/shared/iev_interfaces/_filters.html.slim
+++ b/app/views/shared/iev_interfaces/_filters.html.slim
@@ -1,4 +1,4 @@
-= search_form_for @q, url: workbench_imports_path(@workbench), html: { method: :get, class: 'form form-filter' } do |f|
+= search_form_for @q, url: request.path, html: { method: :get, class: 'form form-filter' } do |f|
.ffg-row
.input-group.search_bar class=filter_item_class(params[:q], :name_or_creator_cont)
= f.search_field :name_or_creator_cont, class: 'form-control', placeholder: t('imports.filters.name_or_creator_cont')
diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim
index 5c2468296..8312338d0 100644
--- a/app/views/workbenches/show.html.slim
+++ b/app/views/workbenches/show.html.slim
@@ -7,6 +7,7 @@
= link_to t('workbenches.actions.configure'), edit_workbench_path(@workbench), class: 'btn btn-primary'
- if policy(Referential).create?
= link_to t('actions.import'), workbench_imports_path(@workbench), class: 'btn btn-primary'
+ = link_to t('actions.export'), workbench_exports_path(@workbench), class: 'btn btn-primary'
= link_to t('actions.add'), new_workbench_referential_path(@workbench), class: 'btn btn-primary'
= link_to t('workbenches.actions.show_output'), workbench_output_path(@workbench), class: 'btn btn-primary'
diff --git a/app/workers/workgroup_export_worker.rb b/app/workers/workgroup_export_worker.rb
index 29493cea6..a354573e8 100644
--- a/app/workers/workgroup_export_worker.rb
+++ b/app/workers/workgroup_export_worker.rb
@@ -27,6 +27,7 @@ class WorkgroupExportWorker
netex_export.workbench = workbench_export.workbench
netex_export.creator = workbench_export.creator
netex_export.export_type = :line
+ netex_export.referential = workbench_export.referential
netex_export.duration = workbench_export.duration
netex_export.line_code = line.objectid
netex_export.parent = workbench_export
diff --git a/config/locales/exports.en.yml b/config/locales/exports.en.yml
index 628065ab0..de34e797c 100644
--- a/config/locales/exports.en.yml
+++ b/config/locales/exports.en.yml
@@ -88,6 +88,7 @@ en:
file: "Output"
files: "Outputs"
parent: Parent
+ referential_id: Referential
export:
<<: *attrs
base:
diff --git a/config/locales/exports.fr.yml b/config/locales/exports.fr.yml
index a223b85f8..62aae70cd 100644
--- a/config/locales/exports.fr.yml
+++ b/config/locales/exports.fr.yml
@@ -88,6 +88,7 @@ fr:
file: "Résultat"
files: "Résultats"
parent: Parent
+ referential_id: Jeu de données
export:
<<: *attrs
base:
diff --git a/db/migrate/20180326085804_bind_exports_and_imports_types_to_workgroups.rb b/db/migrate/20180326085804_bind_exports_and_imports_types_to_workgroups.rb
new file mode 100644
index 000000000..d75336673
--- /dev/null
+++ b/db/migrate/20180326085804_bind_exports_and_imports_types_to_workgroups.rb
@@ -0,0 +1,6 @@
+class BindExportsAndImportsTypesToWorkgroups < ActiveRecord::Migration
+ def change
+ add_column :workgroups, "import_types", :string, default: [], array: true
+ add_column :workgroups, "export_types", :string, default: [], array: true
+ end
+end
diff --git a/db/seeds/stif.seeds.rb b/db/seeds/stif.seeds.rb
index f898021ce..aa87b6f6c 100644
--- a/db/seeds/stif.seeds.rb
+++ b/db/seeds/stif.seeds.rb
@@ -8,6 +8,7 @@ line_referential = LineReferential.find_or_create_by!(name: "CodifLigne", object
workgroup = Workgroup.find_or_create_by!(name: "Gestion de l'offre théorique IDFm") do |w|
w.line_referential = line_referential
w.stop_area_referential = stop_area_referential
+ w.export_types = ["Export::Netex"]
end
Workbench.update_all workgroup_id: workgroup