diff options
| author | Luc Donnet | 2017-09-04 22:59:51 +0200 |
|---|---|---|
| committer | Luc Donnet | 2017-09-04 22:59:51 +0200 |
| commit | 0bfb94f1311517838c4d1989e273ce56c605a25a (patch) | |
| tree | 2942b4e536aeaaa846065fec239acfa79615686a | |
| parent | cbbecf7c40e8102a2b0c24aabb3aabf7e89391cf (diff) | |
| download | chouette-core-0bfb94f1311517838c4d1989e273ce56c605a25a.tar.bz2 | |
Fix import status table views and first version for import_messages Refs #4527
| -rw-r--r-- | app/controllers/import_messages_controller.rb | 26 | ||||
| -rw-r--r-- | app/decorators/import_decorator.rb | 8 | ||||
| -rw-r--r-- | app/models/import_message_export.rb | 55 | ||||
| -rw-r--r-- | app/models/import_resource.rb | 4 | ||||
| -rw-r--r-- | app/views/import_resources/index.html.slim | 9 | ||||
| -rw-r--r-- | app/views/imports/show.html.slim | 4 | ||||
| -rw-r--r-- | config/locales/import_resources.en.yml | 1 | ||||
| -rw-r--r-- | config/locales/import_resources.fr.yml | 1 | ||||
| -rw-r--r-- | config/routes.rb | 6 |
9 files changed, 105 insertions, 9 deletions
diff --git a/app/controllers/import_messages_controller.rb b/app/controllers/import_messages_controller.rb new file mode 100644 index 000000000..64eec92dd --- /dev/null +++ b/app/controllers/import_messages_controller.rb @@ -0,0 +1,26 @@ +class ImportMessagesController < BreadcrumbController + defaults resource_class: ImportMessage, collection_name: 'import_messages', instance_name: 'import_message' + respond_to :csv + belongs_to :import, :parent_class => Import do + belongs_to :import_resource, :parent_class => ImportResource + end + + + def index + index! do |format| + format.csv { + send_data ImportMessageExport.new(:import_messages => @import_messages).to_csv(:col_sep => ";") , :filename => "test.csv" + } + end + end + + protected + def collection + @import_messages ||= parent.messages + end + + def parent + @import_resource ||= ImportResource.find(params[:import_resource_id]) + end + +end diff --git a/app/decorators/import_decorator.rb b/app/decorators/import_decorator.rb index eb6a34a13..d63d723cd 100644 --- a/app/decorators/import_decorator.rb +++ b/app/decorators/import_decorator.rb @@ -3,6 +3,14 @@ class ImportDecorator < Draper::Decorator delegate_all + def import_status_css_class + cls ='' + cls = 'overheaded-success' if object.status == 'successful' + cls = 'overheaded-warning' if object.status == 'warning' + cls = 'overheaded-danger' if %w[failed aborted canceled].include? object.status + cls + end + def action_links links = [] diff --git a/app/models/import_message_export.rb b/app/models/import_message_export.rb new file mode 100644 index 000000000..d13a3a21b --- /dev/null +++ b/app/models/import_message_export.rb @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +require "csv" +require "zip" + +class ImportMessageExport + include ActiveModel::Validations + include ActiveModel::Conversion + extend ActiveModel::Naming + + attr_accessor :import_messages + + def initialize(attributes = {}) + attributes.each { |name, value| send("#{name}=", value) } + end + + def persisted? + false + end + + def label(name) + I18n.t "vehicle_journey_exports.label.#{name}" + end + + def column_names + ["criticity", "message key"] + end + + + # t.integer "criticity" + # t.string "message_key" + # t.hstore "message_attributes" + # t.integer "import_id", limit: 8 + # t.integer "resource_id", limit: 8 + # t.datetime "created_at" + # t.datetime "updated_at" + # t.hstore "resource_attributes" + def to_csv(options = {}) + CSV.generate(options) do |csv| + csv << column_names + import_messages.each do |import_message| + csv << [import_message.criticity, import_message.message_key ] + end + end + end + + def to_zip(temp_file,options = {}) + ::Zip::OutputStream.open(temp_file) { |zos| } + ::Zip::File.open(temp_file.path, ::Zip::File::CREATE) do |zipfile| + zipfile.get_output_stream(label("vj_filename")+route.id.to_s+".csv") { |f| f.puts to_csv(options) } + zipfile.get_output_stream(label("tt_filename")+".csv") { |f| f.puts time_tables_to_csv(options) } + zipfile.get_output_stream(label("ftn_filename")+".csv") { |f| f.puts footnotes_to_csv(options) } + end + end + +end diff --git a/app/models/import_resource.rb b/app/models/import_resource.rb index 9f4d2872e..55e752e74 100644 --- a/app/models/import_resource.rb +++ b/app/models/import_resource.rb @@ -5,5 +5,7 @@ class ImportResource < ActiveRecord::Base enumerize :status, in: %i(OK ERROR WARNING IGNORED), scope: true validates_presence_of :name, :resource_type, :reference - + + has_many :messages, class_name: "ImportMessage", foreign_key: :resource_id + end diff --git a/app/views/import_resources/index.html.slim b/app/views/import_resources/index.html.slim index cf91f80f1..17e5532ae 100644 --- a/app/views/import_resources/index.html.slim +++ b/app/views/import_resources/index.html.slim @@ -39,15 +39,16 @@ ), \ TableBuilderHelper::Column.new( \ name: 'Résultat des tests' , \ - key: :resource_type, \ - attribute: 'resource_type', \ + attribute: Proc.new { |n| I18n.t('import_resources.index.metrics', n.metrics.deep_symbolize_keys) }, \ sortable: false, \ ), \ TableBuilderHelper::Column.new( \ name: 'Téléchargement' , \ - key: :status, \ - attribute: 'status', \ + attribute: Proc.new { |n| '<i class="fa fa-download" aria-hidden="true"></i>'.html_safe }, \ sortable: false, \ + link_to: lambda do |import_resource| \ + workbench_import_import_resource_import_messages_path(import_resource.import.workbench, import_resource.import, import_resource, format: 'csv' ) \ + end \ ), \ ], links: [], diff --git a/app/views/imports/show.html.slim b/app/views/imports/show.html.slim index d5dcd9caf..5f5974d69 100644 --- a/app/views/imports/show.html.slim +++ b/app/views/imports/show.html.slim @@ -30,7 +30,7 @@ attribute: 'name', \ sortable: false, \ link_to: lambda do |import| \ - referential_path(import.referential) \ + referential_path(import.referential) if import.referential.present? \ end \ ), \ TableBuilderHelper::Column.new( \ @@ -59,7 +59,7 @@ { \ title: "#{@import.children_succeedeed} jeu de données validé sur #{@import.children.count} présents dans l'archive", \ width: 1, \ - cls: 'overheaded-danger full-border' \ + cls: "#{@import.import_status_css_class} full-border" \ }, { \ title: 'Bilan des jeux de contrôles d\'import <span title="Lorem ipsum..." class="fa fa-lg fa-info-circle text-info"></span>', \ width: 2, \ diff --git a/config/locales/import_resources.en.yml b/config/locales/import_resources.en.yml index 43761fe00..d98b3eacf 100644 --- a/config/locales/import_resources.en.yml +++ b/config/locales/import_resources.en.yml @@ -5,6 +5,7 @@ en: table_state: "%{lines_imported} lines imported on %{lines_in_zipfile} presents in zipfile" table_title: "Satus of anlyzed files" table_explanation: "When calendriers.xml and/or commun.xml are not imported, then all lines file are not processed." + metrics: "%{ok_count} ok, %{error_count} errors, %{warning_count} warnings, %{uncheck_count} n/a" activerecord: models: import_resource: diff --git a/config/locales/import_resources.fr.yml b/config/locales/import_resources.fr.yml index 8da7c5938..86c8d8e73 100644 --- a/config/locales/import_resources.fr.yml +++ b/config/locales/import_resources.fr.yml @@ -5,6 +5,7 @@ fr: table_state: "%{lines_imported} lignes importées sur %{lines_in_zipfile} présentes dans l'archive" table_title: "Etat des fichiers analysés" table_explanation: "Dans le cas ou le(s) fichiers calendriers.xml et/ou commun.xml sont dans un état non importé, alors tous les fichiers lignes sont automatiquement dans un état non traité." + metrics: "%{ok_count} ok, %{error_count} errors, %{warning_count} warnings, %{uncheck_count} n/a" activerecord: models: import_resource: diff --git a/config/routes.rb b/config/routes.rb index 4b87d9db9..d7322980a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,8 +5,10 @@ ChouetteIhm::Application.routes.draw do delete :referentials, on: :member, action: :delete_referentials resources :imports do get :download, on: :member - resources :import_messages, only: [:index] - resources :import_resources, only: [:index] + resources :import_resources, only: [:index] do + resources :import_messages, only: [:index] + end + end end |
