From 3d370c032c3fa06fd03643263e29b6eded5fe6c1 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 26 Mar 2018 10:35:19 +0200 Subject: Refs #6218; Link exports to referentials --- app/models/export/base.rb | 4 +- app/models/export/simple_exporter/base.rb | 94 +++++++++++++++++++++++++++++++ app/views/exports/_form.html.slim | 1 + app/workers/workgroup_export_worker.rb | 1 + 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 app/models/export/simple_exporter/base.rb (limited to 'app') 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/views/exports/_form.html.slim b/app/views/exports/_form.html.slim index 7817fdf1a..44b4e447c 100644 --- a/app/views/exports/_form.html.slim +++ b/app/views/exports/_form.html.slim @@ -5,6 +5,7 @@ = form.input :name .col-lg-12 = form.input :type, as: :select, collection: Export::Base.user_visible_descendants, 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/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 -- cgit v1.2.3 From 1a64e4cb265a320005247e54b880287d3308d28b Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 26 Mar 2018 10:51:38 +0200 Subject: Refs #6218; Add link to exports view --- app/views/workbenches/show.html.slim | 1 + 1 file changed, 1 insertion(+) (limited to 'app') 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' -- cgit v1.2.3 From deea16664b122b9db9c615980944a63f510c39f7 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 26 Mar 2018 11:12:25 +0200 Subject: Refs #6218; Limit accessible exports for workgroups --- app/controllers/development_toolbar_controller.rb | 7 +++++++ app/helpers/exports_helper.rb | 3 +++ app/models/workgroup.rb | 4 ++++ app/views/exports/_form.html.slim | 2 +- app/views/shared/_development_toolbar.html.slim | 14 ++++++++++++++ 5 files changed, 29 insertions(+), 1 deletion(-) (limited to 'app') 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/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 44b4e447c..999e33e34 100644 --- a/app/views/exports/_form.html.slim +++ b/app/views/exports/_form.html.slim @@ -4,7 +4,7 @@ .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| 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" -- cgit v1.2.3 From 3e7fc7076fd1a537772bec932488b9d594feb44e Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 26 Mar 2018 11:18:27 +0200 Subject: Refs #6218; Fix exports filters --- app/views/shared/iev_interfaces/_filters.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') 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') -- cgit v1.2.3