diff options
| -rw-r--r-- | app/controllers/development_toolbar_controller.rb | 7 | ||||
| -rw-r--r-- | app/helpers/exports_helper.rb | 3 | ||||
| -rw-r--r-- | app/models/export/base.rb | 4 | ||||
| -rw-r--r-- | app/models/export/simple_exporter/base.rb | 94 | ||||
| -rw-r--r-- | app/models/workgroup.rb | 4 | ||||
| -rw-r--r-- | app/views/exports/_form.html.slim | 3 | ||||
| -rw-r--r-- | app/views/shared/_development_toolbar.html.slim | 14 | ||||
| -rw-r--r-- | app/views/shared/iev_interfaces/_filters.html.slim | 2 | ||||
| -rw-r--r-- | app/views/workbenches/show.html.slim | 1 | ||||
| -rw-r--r-- | app/workers/workgroup_export_worker.rb | 1 | ||||
| -rw-r--r-- | config/locales/exports.en.yml | 1 | ||||
| -rw-r--r-- | config/locales/exports.fr.yml | 1 | ||||
| -rw-r--r-- | db/migrate/20180326085804_bind_exports_and_imports_types_to_workgroups.rb | 6 | ||||
| -rw-r--r-- | db/seeds/stif.seeds.rb | 1 | 
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 | 
