From 25df1bea61409294e9944a66a25d81ea55f0391f Mon Sep 17 00:00:00 2001 From: Zog Date: Fri, 16 Mar 2018 11:02:51 +0100 Subject: Refs #6218; UI for exports --- app/helpers/exports_helper.rb | 2 +- app/models/chouette/journey_pattern.rb | 2 +- app/models/chouette/stop_area.rb | 4 +- app/models/export/base.rb | 24 ++++++ app/models/export/referential_companies.rb | 92 ---------------------- app/views/exports/show.html.slim | 11 ++- .../shared/iev_interfaces/_messages.html.slim | 2 +- config/locales/actions.en.yml | 1 + config/locales/actions.fr.yml | 1 + config/locales/export_messages.en.yml | 1 + config/locales/export_messages.fr.yml | 1 + config/locales/exports.en.yml | 3 + config/locales/exports.fr.yml | 1 + 13 files changed, 47 insertions(+), 98 deletions(-) delete mode 100644 app/models/export/referential_companies.rb diff --git a/app/helpers/exports_helper.rb b/app/helpers/exports_helper.rb index 4e92c7e38..dc0720c40 100644 --- a/app/helpers/exports_helper.rb +++ b/app/helpers/exports_helper.rb @@ -16,7 +16,7 @@ module ExportsHelper if message.message_key == "full_text" message.message_attributes["text"] else - t([message.class.name.underscore.gsub('/', '_').pluralize, message.message_key].join('.'), message.message_attributes.symbolize_keys) + t([message.class.name.underscore.gsub('/', '_').pluralize, message.message_key].join('.'), message.message_attributes&.symbolize_keys || {}) end end diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb index ff85f376a..9c3ef78fa 100644 --- a/app/models/chouette/journey_pattern.rb +++ b/app/models/chouette/journey_pattern.rb @@ -177,7 +177,7 @@ module Chouette i += 1 _start = _end _end = stop_points[i] - val += costs_between(_start, _end)[:distance] + val += costs_between(_start, _end)[:distance] || 0 end val end diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb index 1918c90d1..79eb314bc 100644 --- a/app/models/chouette/stop_area.rb +++ b/app/models/chouette/stop_area.rb @@ -383,11 +383,11 @@ module Chouette end def activated? - deleted_at.nil? && confirmed_at + !!(deleted_at.nil? && confirmed_at) end def deactivated? - deleted_at && confirmed_at.nil? + !!(deleted_at && confirmed_at.nil?) end def activate 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 diff --git a/app/views/exports/show.html.slim b/app/views/exports/show.html.slim index 2a7d7583c..3a4047ae9 100644 --- a/app/views/exports/show.html.slim +++ b/app/views/exports/show.html.slim @@ -10,7 +10,16 @@ - metadatas = metadatas.update({I18n.t("activerecord.attributes.export.status") => export_status(@export.status)}) - metadatas = metadatas.update({I18n.t("activerecord.attributes.export.parent") => link_to(@export.parent.name, [@export.parent.workbench, @export.parent])}) if @export.parent.present? - metadatas = metadatas.update Hash[*@export.visible_options.map{|k, v| [t("activerecord.attributes.export.#{@export.object.class.name.demodulize.underscore}.#{k}"), @export.display_option_value(k, self)]}.flatten] - - metadatas = metadatas.update({I18n.t("activerecord.attributes.export.file") => (@export.file.present? ? link_to(t("actions.download"), @export.file.url) : "-")}) + - if @export.children.any? + - files = @export.children.map(&:file).select(&:present?) + - if files.any? + - metadatas = metadatas.update({I18n.t("activerecord.attributes.export.files") => ""}) + - @export.children.each do |e| + - metadatas = metadatas.update({"- #{e.class.human_name}" => e.file.present? ? link_to(e.file.file.filename, e.file.url) : "-"}) + - else + - metadatas = metadatas.update({I18n.t("activerecord.attributes.export.files") => "-"}) + - else + - metadatas = metadatas.update({I18n.t("activerecord.attributes.export.file") => (@export.file.present? ? link_to(t("actions.download"), @export.file.url) : "-")}) = definition_list t('metadatas'), metadatas .row diff --git a/app/views/shared/iev_interfaces/_messages.html.slim b/app/views/shared/iev_interfaces/_messages.html.slim index 82f1add57..022f4ee01 100644 --- a/app/views/shared/iev_interfaces/_messages.html.slim +++ b/app/views/shared/iev_interfaces/_messages.html.slim @@ -3,7 +3,7 @@ - messages.order(:created_at).each do | message | li .row class=bootstrap_class_for_message_criticity(message.criticity) - - if message.message_attributes["line"] + - if message.message_attributes && message.message_attributes["line"] .col-md-1= "L. #{message.message_attributes["line"]}" .col-md-5= export_message_content message - else diff --git a/config/locales/actions.en.yml b/config/locales/actions.en.yml index 278915526..04f4aca6b 100644 --- a/config/locales/actions.en.yml +++ b/config/locales/actions.en.yml @@ -5,6 +5,7 @@ en: deactivate: 'Deactivate' destroy: "Destroy" delete: "Delete" + download: 'Download' search: "Search" submit: "Submit" processing: "Processing…" diff --git a/config/locales/actions.fr.yml b/config/locales/actions.fr.yml index 92e16f21e..88e08aaef 100644 --- a/config/locales/actions.fr.yml +++ b/config/locales/actions.fr.yml @@ -5,6 +5,7 @@ fr: deactivate: 'Désactiver' destroy: 'Supprimer' delete: 'Supprimer' + download: 'Télécharger' search: "Chercher" submit: "Valider" processing: "En cours…" diff --git a/config/locales/export_messages.en.yml b/config/locales/export_messages.en.yml index f7951a103..9823d7f78 100644 --- a/config/locales/export_messages.en.yml +++ b/config/locales/export_messages.en.yml @@ -1,3 +1,4 @@ en: export_messages: success: Success + no_matching_journey: No matching journey found diff --git a/config/locales/export_messages.fr.yml b/config/locales/export_messages.fr.yml index 5c2191f35..4f45fd8e1 100644 --- a/config/locales/export_messages.fr.yml +++ b/config/locales/export_messages.fr.yml @@ -1,3 +1,4 @@ fr: export_messages: success: Succès + no_matching_journey: Aucun trajet correspondant diff --git a/config/locales/exports.en.yml b/config/locales/exports.en.yml index 88c1b99f8..628065ab0 100644 --- a/config/locales/exports.en.yml +++ b/config/locales/exports.en.yml @@ -84,6 +84,9 @@ en: max_distance_for_connection_link: "Max distance for connection link" ignore_last_word: "ignore last word" ignore_end_chars: "ignore last chars" + type: "Export type" + file: "Output" + files: "Outputs" parent: Parent export: <<: *attrs diff --git a/config/locales/exports.fr.yml b/config/locales/exports.fr.yml index fa3ac8fc7..a223b85f8 100644 --- a/config/locales/exports.fr.yml +++ b/config/locales/exports.fr.yml @@ -86,6 +86,7 @@ fr: ignore_end_chars: "ignorer les n derniers caractères" type: "Type d'export" file: "Résultat" + files: "Résultats" parent: Parent export: <<: *attrs -- cgit v1.2.3