From 42c570ba88f073d0082b948ced1e3b6f57868afe Mon Sep 17 00:00:00 2001 From: Luc Donnet Date: Wed, 22 Apr 2015 10:38:49 +0200 Subject: Update import use --- Gemfile | 2 +- Gemfile.lock | 2 +- app/assets/javascripts/plugins/tooltip.js.coffee | 3 +- app/controllers/import_tasks_controller.rb | 82 ++--- app/controllers/imports_controller.rb | 41 +-- app/helpers/history_helper.rb | 4 +- app/helpers/imports_helper.rb | 11 +- app/helpers/progress_bar_helper.rb | 40 +++ app/models/csv_import.rb | 4 +- app/models/gtfs_import.rb | 7 +- app/models/import.rb | 68 ++-- app/models/import_report.rb | 22 +- app/models/import_task.rb | 369 ++++++++++++++------- app/models/neptune_import.rb | 1 + app/views/import_tasks/_import_task.erb | 30 -- app/views/import_tasks/_import_task.html.erb | 13 + app/views/import_tasks/_import_tasks.html.erb | 9 - app/views/import_tasks/_neptune_import.html.erb | 1 + app/views/import_tasks/_results_dashboard.html.erb | 68 ---- app/views/import_tasks/index.html.erb | 12 - app/views/import_tasks/index.js.erb | 1 - app/views/import_tasks/new.html.erb | 38 +-- app/views/import_tasks/show.html.erb | 22 -- app/views/import_tasks/show.js.coffee | 41 --- app/views/imports/_import.erb | 7 +- app/views/imports/_results_dashboard.html.erb | 2 +- app/views/imports/index.html.erb | 2 +- config/initializers/apartment.rb | 2 +- config/locales/imports.yml | 2 +- config/routes.rb | 11 +- db/migrate/20150413071835_delete_import_tasks.rb | 7 + lib/ievkit/client.rb | 45 ++- lib/ievkit/client/jobs.rb | 18 +- lib/ievkit/default.rb | 7 +- lib/ievkit/error.rb | 42 +-- 35 files changed, 497 insertions(+), 539 deletions(-) create mode 100644 app/helpers/progress_bar_helper.rb delete mode 100644 app/views/import_tasks/_import_task.erb create mode 100644 app/views/import_tasks/_import_task.html.erb delete mode 100644 app/views/import_tasks/_import_tasks.html.erb create mode 100644 app/views/import_tasks/_neptune_import.html.erb delete mode 100644 app/views/import_tasks/_results_dashboard.html.erb delete mode 100644 app/views/import_tasks/index.html.erb delete mode 100644 app/views/import_tasks/index.js.erb delete mode 100644 app/views/import_tasks/show.html.erb delete mode 100644 app/views/import_tasks/show.js.coffee create mode 100644 db/migrate/20150413071835_delete_import_tasks.rb diff --git a/Gemfile b/Gemfile index 53798ef9e..839f57531 100644 --- a/Gemfile +++ b/Gemfile @@ -105,7 +105,7 @@ end # Format Output gem 'json' -gem 'rubyzip', '~> 1.1.6' +gem 'rubyzip', '~> 1.1.7' gem 'roo' # Controller diff --git a/Gemfile.lock b/Gemfile.lock index b17fc91d7..a2e992310 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -532,7 +532,7 @@ DEPENDENCIES rb-inotify roo rspec-rails (~> 3.1.0) - rubyzip (~> 1.1.6) + rubyzip (~> 1.1.7) sass-rails (~> 4.0.3) sawyer sdoc (~> 0.4.0) diff --git a/app/assets/javascripts/plugins/tooltip.js.coffee b/app/assets/javascripts/plugins/tooltip.js.coffee index ca521279e..91b8b5cc6 100644 --- a/app/assets/javascripts/plugins/tooltip.js.coffee +++ b/app/assets/javascripts/plugins/tooltip.js.coffee @@ -1,2 +1,3 @@ jQuery -> - $('input').tooltip() \ No newline at end of file + $('input').tooltip() + $('.progress').tooltip() diff --git a/app/controllers/import_tasks_controller.rb b/app/controllers/import_tasks_controller.rb index 18730b5d3..cb0bafdfa 100644 --- a/app/controllers/import_tasks_controller.rb +++ b/app/controllers/import_tasks_controller.rb @@ -1,75 +1,39 @@ class ImportTasksController < ChouetteController defaults :resource_class => ImportTask - respond_to :html, :xml, :json - respond_to :js, :only => [:show, :index] + + respond_to :html belongs_to :referential def new - new! do - build_breadcrumb :new - available_imports - end - end - - def show - show! do - build_breadcrumb :show - if import_task.completed? - @files_stats = import_task.result["files"]["stats"] - @files_list = import_task.result["files"]["list"] - @lines_stats = import_task.result["lines"]["stats"] - @lines_list = import_task.result["lines"]["list"] + begin + new! do + puts "new" end + rescue Ievkit::Error => error + logger.error("Iev failure : #{error.message}") + flash[:error] = t('iev.failure') + redirect_to referential_path(@referential) end end - - def file_to_import - send_file import_task.file_path, :type => "application/#{import_task.file_path_extension}", :disposition => "attachment" - end - + def create - create! do |success, failure| - available_imports - success.html { flash[:notice] = I18n.t('import_tasks.new.flash'); redirect_to referential_import_tasks_path(@referential) } - end + #begin + neptune_import = NeptuneImport.new(params[:import_task]) + neptune_import.save + # rescue Ievkit::Error => error + # logger.error("Iev failure : #{error.message}") + # flash[:error] = t('iev.failure') + # redirect_to referential_path(@referential) + # end end protected - def create_resource( import ) - if import_task.save - import_task.delayed_import - end - end - - alias_method :import_task, :resource - - def available_imports - @available_imports ||= ImportTask.formats.collect do |format| - unless @import_task.format == format - @referential.import_tasks.build :format => format - else - @import_task - end - end - end - - # FIXME why #resource_id is nil ?? - def build_resource - super.tap do |import_task| - import_task.referential_id = @referential.id - import_task.user_id = current_user.id - import_task.user_name = current_user.name - end - end - - def collection - @import_tasks ||= end_of_association_chain.order('created_at DESC').paginate(:page => params[:page]) - end - - private - def import_task_params - params.require(:import_task).permit(:resources, :rule_parameter_set_id, :no_save) + def build_resource(attributes = {}) + @csv_import ||= CsvImport.new(:referential_id => @referential.id ) + @neptune_import ||= NeptuneImport.new(:referential_id => @referential.id ) + @netex_import ||= NetexImport.new(:referential_id => @referential.id ) + @gtfs_import ||= GtfsImport.new(:referential_id => @referential.id ) end end diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index e7ff7ff15..e09fdfec5 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -1,17 +1,13 @@ require 'will_paginate/array' +require 'open-uri' class ImportsController < ChouetteController defaults :resource_class => Import - respond_to :html, :only => [:show, :index, :new, :create, :delete] + respond_to :html, :only => [:show, :index, :destroy, :imported_file] respond_to :js, :only => [:show, :index] belongs_to :referential - # create => curl -F "file=@Citura.zip;filename=Citura.zip" -F "file=@parameters.json;filename=parameters.json" http://localhost:8080/chouette_iev/referentials/test/importer/neptune - # index curl http://localhost:8080/mobi.chouette.api/referentials/test/jobs - # show curl http://localhost:8080/mobi.chouette.api/referentials/test/jobs - - def index begin index! do @@ -34,24 +30,11 @@ class ImportsController < ChouetteController flash[:error] = t('iev.failure') redirect_to referential_path(@referential) end - end - - def new - begin - new! do - puts "OK" - end - rescue Ievkit::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t('iev.failure') - redirect_to referential_path(@referential) - end - end - - def create + end + + def destroy begin - create! do - puts "OK" + destroy! do end rescue Ievkit::Error => error logger.error("Iev failure : #{error.message}") @@ -60,12 +43,9 @@ class ImportsController < ChouetteController end end - def delete + def imported_file begin - delete! do - import_service.delete(@import.id) - redirect_to referential_imports_path(@referential) - end + send_file open(resource.file_path), { :type => "application/#{resource.filename_extension}", :disposition => "attachment", :filename => resource.filename } rescue Ievkit::Error => error logger.error("Iev failure : #{error.message}") flash[:error] = t('iev.failure') @@ -74,14 +54,11 @@ class ImportsController < ChouetteController end protected + alias_method :import, :resource def import_service ImportService.new(@referential) end - - def build_resource(attributes = {}) - @import ||= ImportTask.new - end def resource @import ||= import_service.find( params[:id] ) diff --git a/app/helpers/history_helper.rb b/app/helpers/history_helper.rb index 1c23c6c81..02a39a3d3 100644 --- a/app/helpers/history_helper.rb +++ b/app/helpers/history_helper.rb @@ -33,12 +33,12 @@ module HistoryHelper field_set_tag t("layouts.history_tag.title"), :class => "history_tag" do content_tag :ul do [(content_tag :li do - if object.created_at? + if object.created_at t('layouts.history_tag.created_at') + ' : ' + l(object.created_at, :format => :short) end end), (content_tag :li do - if object.updated_at? + if object.updated_at t('layouts.history_tag.updated_at') + ' : ' + l(object.updated_at, :format => :short) end end), diff --git a/app/helpers/imports_helper.rb b/app/helpers/imports_helper.rb index 2df2de93f..5f771f77f 100644 --- a/app/helpers/imports_helper.rb +++ b/app/helpers/imports_helper.rb @@ -22,15 +22,6 @@ module ImportsHelper return 'icons/link_page.png' end end - end - - def import_progress_bar_tag(import) - div_class = "" - content_tag :div, :class => "progress" do - content_tag :div, :class => div_class, role: "progressbar", :'aria-valuenow' => "#{import.percentage_progress}", :'aria-valuemin' => "0", :'aria-valuemax' => "100", :style => "width: #{import.percentage_progress}%;" do - "#{import.percentage_progress}% " + I18n.t("import_tasks.statuses.#{import.status}") - end - end - end + end end diff --git a/app/helpers/progress_bar_helper.rb b/app/helpers/progress_bar_helper.rb new file mode 100644 index 000000000..9a4bbfc9c --- /dev/null +++ b/app/helpers/progress_bar_helper.rb @@ -0,0 +1,40 @@ +module ProgressBarHelper + + def percentage_progress(object_model, report) + if %w{ aborted canceled terminated }.include? object_model.status + percentage_progress = "100" + elsif object_model.status == "started" && report.total_steps != 0 + percentage_progress = "#{report.current_step / report.total_steps}" + else # %w{ scheduled nil }.include? object_model.status + percentage_progress = "0" + end + end + + def progress_bar_tag(object_model) + report = object_model.report + percentage_progress = percentage_progress(object_model, report) + + percentage_info = "" + if %w{ aborted canceled scheduled terminated }.include? object_model.status + percentage_info = "#{percentage_progress}% " + I18n.t("#{object_model.class.to_s.downcase.pluralize}.statuses.#{object_model.status}") + elsif object_model.status == "started" + percentage_info = "Niv #{report.current_level} : #{report.current_step_name.downcase} #{report.current_step} / #{report.total_steps}" + end + + if %w{ aborted canceled }.include? object_model.status + div_class = "progress-bar progress-bar-danger" + elsif %w{ started scheduled }.include? object_model.status + div_class = "progress-bar progress-bar-info" + elsif object_model.status == "terminated" + div_class = "progress-bar progress-bar-success" + else + div_class = "progress-bar" + end + + content_tag :div, :class => "progress", :title => percentage_info do + content_tag :div, :class => div_class, role: "progressbar", :'aria-valuenow' => "#{percentage_progress}", :'aria-valuemin' => "0", :'aria-valuemax' => "100", :style => "width: #{percentage_progress}%;" do + "#{percentage_progress}%" + end + end + end +end diff --git a/app/models/csv_import.rb b/app/models/csv_import.rb index 69603b237..2635fee71 100644 --- a/app/models/csv_import.rb +++ b/app/models/csv_import.rb @@ -1,6 +1,6 @@ class CsvImport < ImportTask + attr_accessor :object_id_prefix validates_presence_of :object_id_prefix - option :object_id_prefix - + end diff --git a/app/models/gtfs_import.rb b/app/models/gtfs_import.rb index c2457548f..3fe7dcea7 100644 --- a/app/models/gtfs_import.rb +++ b/app/models/gtfs_import.rb @@ -1,11 +1,8 @@ class GtfsImport < ImportTask + attr_accessor :object_id_prefix, :max_distance_for_commercial, :ignore_last_word, :ignore_end_chars, :max_distance_for_connection_link + validates_presence_of :object_id_prefix - option :object_id_prefix - option :max_distance_for_commercial - option :ignore_last_word - option :ignore_end_chars - option :max_distance_for_connection_link def references_types [ Chouette::StopArea ] diff --git a/app/models/import.rb b/app/models/import.rb index f445faa3e..9629881d3 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -3,7 +3,7 @@ class Import extend ActiveModel::Naming include ActiveModel::Model - # enumerize :status, in: %w{created scheduled terminated canceled aborted}, default: "created", predicates: true + # enumerize :status, in: %w{started scheduled terminated canceled aborted}, default: "created", predicates: true # enumerize :format, in: %w{neptune netex gtfs}, default: "neptune", predicates: true attr_reader :datas @@ -12,10 +12,18 @@ class Import @datas = response # @status = @datas.status.downcase if @datas.status? # @format = @datas.type.downcase if @datas.type? - end + end + + def links + {}.tap do |links| + datas.links.each do |link| + links[link["rel"]] = link["href"] + end + end + end def report - report_path = datas.links.select{ |link| link["rel"] == "action_report"}.first.href + report_path = links["action_report"] if report_path response = Ievkit.get(report_path) ImportReport.new(response) @@ -25,7 +33,7 @@ class Import end def compliance_check - compliance_check_path = datas.links.select{ |link| link["rel"] == "validation_report"}.first.href + compliance_check_path = links["validation_report"] if compliance_check_path response = Ievkit.get(compliance_check_path) ComplianceCheck.new(response) @@ -34,21 +42,20 @@ class Import end end - def delete - delete_path = datas.links.select{ |link| link["rel"] == "delete"}.first.href - if delete_path - Ievkit.delete(delete_path) - else - raise Ievkit::Error("Impossible to access delete path link for import") - end + def file_path + links["data"] end - def cancel - cancel_path = datas.links.select{ |link| link["rel"] == "cancel"}.first.href - if cancel_path + def destroy + delete_path = links["delete"] + cancel_path = links["cancel"] + + if delete_path + Ievkit.delete(delete_path) + elsif cancel_path Ievkit.delete(cancel_path) else - raise Ievkit::Error("Impossible to access cancel path link for import") + raise Ievkit::Error("Impossible to access delete path link for import") end end @@ -57,7 +64,7 @@ class Import end def status - datas.status + datas.status.downcase end def format @@ -65,21 +72,11 @@ class Import end def filename - datas.links.select{ |link| link["rel"] == "data"}.first.href.gsub( /\/.*\//, "" ) + links["data"].gsub( /\/.*\//, "" ) if links["data"] end def filename_extension - File.extname(filename) if filename - end - - def percentage_progress - if %w{created}.include? status - 0 - elsif %w{ terminated canceled aborted }.include? status - 100 - else - 20 - end + File.extname(filename).gsub(".", "") if filename end def referential_name @@ -97,20 +94,13 @@ class Import def no_save datas.action_parameters.no_save end - - def created_at? - datas.created? - end - def created_at - Time.at(datas.created.to_i / 1000) if created_at? - end - - def updated_at? - datas.updated? + def created_at + Time.at(datas.created.to_i / 1000) if datas.created end def updated_at - Time.at(datas.updated.to_i / 1000) if updated_at? + Time.at(datas.updated.to_i / 1000) if datas.updated end + end diff --git a/app/models/import_report.rb b/app/models/import_report.rb index 411aa3a4f..fff209e8e 100644 --- a/app/models/import_report.rb +++ b/app/models/import_report.rb @@ -5,7 +5,27 @@ class ImportReport attr_reader :datas def initialize( response ) - @datas = response[:action_report] + @datas = response.action_report + end + + def current_level + datas.progression.current_step if datas.progression + end + + def last_step + datas.progression.steps.last if datas.progression + end + + def current_step_name + last_step.step if last_step + end + + def current_step + last_step.realized if last_step + end + + def total_steps + last_step.total if last_step end def zip_file diff --git a/app/models/import_task.rb b/app/models/import_task.rb index 26b3808c7..d53c04766 100644 --- a/app/models/import_task.rb +++ b/app/models/import_task.rb @@ -1,173 +1,284 @@ -class ImportTask < ActiveRecord::Base - attr_accessor :resources, :rule_parameter_set_id +require "zip" - belongs_to :referential +class ImportTask + extend Enumerize + extend ActiveModel::Naming + include ActiveModel::Validations + include ActiveModel::Conversion - has_one :user - has_one :compliance_check_task, :dependent => :delete - - serialize :parameter_set, JSON - serialize :result, JSON + # TODO : Move in configuration + @@root = "#{Rails.root}/tmp/imports" + cattr_accessor :root + attr_accessor :rule_parameter_set_id, :referential_id, :user_id, :user_name, :no_save, :format, :resources, :name + validates_presence_of :referential_id validates_presence_of :resources validates_presence_of :user_id validates_presence_of :user_name - validates_inclusion_of :status, :in => %w{ pending processing completed failed } - - def references_types - [] - end - - protected - - def self.option(name, type=nil) - name = name.to_s - - define_method(name) do - self.parameter_set and self.parameter_set[name] - end - - if type.to_s == "boolean" - define_method("#{name}=") do |prefix| - (self.parameter_set ||= {})[name] = (prefix=="1" || prefix==true) - end - else - define_method("#{name}=") do |prefix| - (self.parameter_set ||= {})[name] = prefix - end - end + validates_presence_of :no_save + validates_presence_of :name + + def initialize( params = {} ) + params.each {|k,v| send("#{k}=",v)} end - public - - def self.formats - %w{Neptune Csv Gtfs Netex} + def referential + Referential.find(referential_id) end - def self.format_label(format) - I18n.t 'exchange.format.'+format.downcase + def organisation + referential.organisation end - def delayed_import - delay.import + def rule_parameter_set + organisation.rule_parameter_sets.find(rule_parameter_set_id) if rule_parameter_set_id.present? end - def save_requested? - !parameter_set["no_save"] + def save + # Save resources + save_resources + + # Call Iev Server + begin + Ievkit.create_job(referential.name, "importer", "neptune", { + :file1 => action_params_io, + :file2 => transport_data_io + } + + ) + + # Delete resources + delete_resources + rescue Exception => exception + # If iev server has an error must delete resources before + delete_resources + + raise exception + end + puts "End save" end - protected - - option :no_save, :boolean - option :format - option :file_path - option :references_type - - validates_inclusion_of :no_save, :in => [ true, false] - validates_inclusion_of :format, :in => self.formats - - def chouette_command - Chouette::Command.new(:schema => referential.slug) + def references_types + [] end - - before_validation :define_default_attributes, :on => :create - def define_default_attributes - self.status ||= "pending" + + def action_params_io + file = StringIO.new( { "parameters" => { + "neptune-import" => { + "no_save" => no_save, + "user_name" => user_name, + "name" => name, + "organisation_name" => organisation.name, + "referential_name" => referential.name, + } + } + }.to_s ) + Faraday::UploadIO.new(file, "application/json", "parameters.json") end - @@root = "#{Rails.root}/tmp/imports" - cattr_accessor :root - - def compliance_check_task_attributes - {:referential_id => referential.id, - :user_id => user_id, - :user_name => user_name, - :rule_parameter_set_id => rule_parameter_set_id} + def transport_data_io + if file_extname == ".zip" + Faraday::UploadIO.new(saved_resources_path, "application/zip") + elsif file_extname == ".xml" + Faraday::UploadIO.new(File.open(saved_resources_path), "application/xml", "10136939.xml") + end end - after_create :update_info, :save_resources - def update_info - self.file_path = saved_resources - self.update_attribute :parameter_set, self.parameter_set - - self.create_compliance_check_task( self.compliance_check_task_attributes) + # TODO : How to find RuleParameterSet + def rule_parameter_set_io + UploadIO.new(rule_parameter_set.parameters, "application/octet-stream", "rule_parameter_set") if rule_parameter_set.present? end def save_resources # resources is a required attribute FileUtils.mkdir_p root - FileUtils.cp resources.path, saved_resources + FileUtils.cp resources.path, saved_resources_path end - after_destroy :destroy_resources - def destroy_resources - FileUtils.rm file_path if File.exists? file_path + def delete_resources + FileUtils.rm saved_resources_path if File.exists? saved_resources_path end - def saved_resources - raise Exception.new("Illegal call") if self.new_record? - "#{root}/#{id}#{File.extname(resources.original_filename)}" + def file_extname + File.extname(resources.original_filename) end - def chouette_command_args - {:c => "import", :id => id} + # TODO : Find a good filename + def saved_resources_path + "#{root}/#{Time.now.to_i}#{file_extname}" end - public + + # attr_accessor :resources, :rule_parameter_set_id - def failed? - status == "failed" - end + # belongs_to :referential - def completed? - status == "completed" - end + # has_one :user + # has_one :compliance_check_task, :dependent => :delete - def file_path_extension - extension = File.extname( self.file_path ) - if extension == ".xml" - "xml" - elsif extension == ".zip" - "zip" - else - "basic" - end - end + # serialize :parameter_set, JSON + # serialize :result, JSON + + # validates_presence_of :referential_id + # validates_presence_of :resources + # validates_presence_of :user_id + # validates_presence_of :user_name + # validates_inclusion_of :status, :in => %w{ pending processing completed failed } - def name - "#{ImportTask.model_name.human} #{self.format} #{self.id}" - end + # def references_types + # [] + # end - def full_name - return name unless no_save - "#{name} - #{I18n.t('activerecord.attributes.import_task.no_save')}" - end + # protected - # Create ImportTask and ComplianceCheckTask associated and give import id to Chouette Loader - def import - return nil if self.new_record? - - begin - chouette_command.run! chouette_command_args - reload - update_attribute :status, "completed" - compliance_check_task.update_attribute :status, "completed" - rescue => e - Rails.logger.error "Import #{id} failed : #{e}, #{e.backtrace}" - reload - update_attribute :status, "failed" - compliance_check_task.update_attribute :status, "failed" - end - end + # def self.option(name, type=nil) + # name = name.to_s - def self.new(attributes = {}, parameter_set = {}, &block) - if self == ImportTask - attributes[:format] = "Neptune" unless attributes[:format] - Object.const_get( attributes[:format] + "Import").new(attributes, parameter_set) - else - super - end - end + # define_method(name) do + # self.parameter_set and self.parameter_set[name] + # end + + # if type.to_s == "boolean" + # define_method("#{name}=") do |prefix| + # (self.parameter_set ||= {})[name] = (prefix=="1" || prefix==true) + # end + # else + # define_method("#{name}=") do |prefix| + # (self.parameter_set ||= {})[name] = prefix + # end + # end + # end + + # public + + # def self.formats + # %w{Neptune Csv Gtfs Netex} + # end + + # def self.format_label(format) + # I18n.t 'exchange.format.'+format.downcase + # end + + # def delayed_import + # delay.import + # end + + # def save_requested? + # !parameter_set["no_save"] + # end + + # protected + + # option :no_save, :boolean + # option :format + # option :file_path + # option :references_type + + # validates_inclusion_of :no_save, :in => [ true, false] + # validates_inclusion_of :format, :in => self.formats + + # def chouette_command + # Chouette::Command.new(:schema => referential.slug) + # end + + # before_validation :define_default_attributes, :on => :create + # def define_default_attributes + # self.status ||= "pending" + # end + + # @@root = "#{Rails.root}/tmp/imports" + # cattr_accessor :root + + # def compliance_check_task_attributes + # {:referential_id => referential.id, + # :user_id => user_id, + # :user_name => user_name, + # :rule_parameter_set_id => rule_parameter_set_id} + # end + + # after_create :update_info, :save_resources + # def update_info + # self.file_path = saved_resources + # self.update_attribute :parameter_set, self.parameter_set + + # self.create_compliance_check_task( self.compliance_check_task_attributes) + # end + + # def save_resources + # # resources is a required attribute + # FileUtils.mkdir_p root + # FileUtils.cp resources.path, saved_resources + # end + + # after_destroy :destroy_resources + # def destroy_resources + # FileUtils.rm file_path if File.exists? file_path + # end + + # def saved_resources + # raise Exception.new("Illegal call") if self.new_record? + # "#{root}/#{id}#{File.extname(resources.original_filename)}" + # end + + # def chouette_command_args + # {:c => "import", :id => id} + # end + + # public + + # def failed? + # status == "failed" + # end + + # def completed? + # status == "completed" + # end + + # def file_path_extension + # extension = File.extname( self.file_path ) + # if extension == ".xml" + # "xml" + # elsif extension == ".zip" + # "zip" + # else + # "basic" + # end + # end + + # def name + # "#{ImportTask.model_name.human} #{self.format} #{self.id}" + # end + + # def full_name + # return name unless no_save + # "#{name} - #{I18n.t('activerecord.attributes.import_task.no_save')}" + # end + + # # Create ImportTask and ComplianceCheckTask associated and give import id to Chouette Loader + # def import + # return nil if self.new_record? + + # begin + # chouette_command.run! chouette_command_args + # reload + # update_attribute :status, "completed" + # compliance_check_task.update_attribute :status, "completed" + # rescue => e + # Rails.logger.error "Import #{id} failed : #{e}, #{e.backtrace}" + # reload + # update_attribute :status, "failed" + # compliance_check_task.update_attribute :status, "failed" + # end + # end + + # def self.new(attributes = {}, parameter_set = {}, &block) + # if self == ImportTask + # attributes[:format] = "Neptune" unless attributes[:format] + # Object.const_get( attributes[:format] + "Import").new(attributes, parameter_set) + # else + # super + # end + # end end diff --git a/app/models/neptune_import.rb b/app/models/neptune_import.rb index 24e3355d7..eab34e777 100644 --- a/app/models/neptune_import.rb +++ b/app/models/neptune_import.rb @@ -1,4 +1,5 @@ class NeptuneImport < ImportTask + # def import_options # super.merge() # end diff --git a/app/views/import_tasks/_import_task.erb b/app/views/import_tasks/_import_task.erb deleted file mode 100644 index 7ba2c1058..000000000 --- a/app/views/import_tasks/_import_task.erb +++ /dev/null @@ -1,30 +0,0 @@ -
<%= link_to image_tag("icons/file_#{import_task.file_path_extension}.png") + t("import_tasks.show.imported_file"), file_to_import_referential_import_task_path(@referential, import_task) %>
- <% if import_task.compliance_check_task.present? %> -<%= link_to image_tag( compliance_icon( import_task)) + t("import_tasks.compliance_check_task"), referential_compliance_check_task_path(@referential, import_task.compliance_check_task) %>
- <% end %> -<%= t('.'+import_partial_name(form)+'.warning')%>
+ <%= form.input :references_type, :as => :select, :collection => import_task.references_types.map { |c| [ c.model_name.human.capitalize.pluralize, c.name ] }, :include_blank => t(".all") %> +<% end %> diff --git a/app/views/import_tasks/_import_tasks.html.erb b/app/views/import_tasks/_import_tasks.html.erb deleted file mode 100644 index 6e3825817..000000000 --- a/app/views/import_tasks/_import_tasks.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -| # | -<%= t("import_tasks.show.table.line.name") %> | -<%= t("import_tasks.show.table.line.save") %> | -<%= t("import_tasks.show.table.line.routes") %> | -<%= t("import_tasks.show.table.line.connection_links") %> | -<%= t("import_tasks.show.table.line.time_tables") %> | -<%= t("import_tasks.show.table.line.stop_areas") %> | -<%= t("import_tasks.show.table.line.access_points") %> | -<%= t("import_tasks.show.table.line.vehicle_journeys") %> | -<%= t("import_tasks.show.table.line.journey_patterns") %> | -
|---|---|---|---|---|---|---|---|---|---|
| <%= index + 1 %> | -<%= line["name"] %> | -<%= t("import_tasks.show.table.line." + line["status"] ) %> | -<%= line["stats"]["route_count"] %> | -<%= line["stats"]["connection_link_count"] %> | -<%= line["stats"]["time_table_count"] %> | -<%= line["stats"]["stop_area_count"] %> | -<%= line["stats"]["acces_point_count"] %> | -<%= line["stats"]["vehicle_journey_count"] %> | -<%= line["stats"]["journey_pattern_count"] %> | -
<%= t('.'+import_partial_name(form)+'.warning')%>
- <%= form.input :references_type, :as => :select, :collection => import_task.references_types.map { |c| [ c.model_name.human.capitalize.pluralize, c.name ] }, :include_blank => t(".all") %> - <% end %> - - <% end %> - - <%= form.actions do %> - <%= form.action :submit, :as => :button , :label => t( 'formtastic.import' ) %> - <%= form.action :cancel, :as => :link %> - <% end %> + <%= render :partial => "import_task", :layout => "neptune_import", :locals => { :import_task => @neptune_import, :form => form } %> + + <%= form.actions do %> + <%= form.action :submit, :as => :button , :label => t( 'formtastic.import' ) %> + <%= form.action :cancel, :as => :link %> <% end %> <% end %> - - diff --git a/app/views/import_tasks/show.html.erb b/app/views/import_tasks/show.html.erb deleted file mode 100644 index fd167b7ef..000000000 --- a/app/views/import_tasks/show.html.erb +++ /dev/null @@ -1,22 +0,0 @@ -<% title = @import_task.save_requested? ? "" : "" %> -<%= title_tag "#{title} #{@import_task.name} #{ t('import_tasks.show.'+@import_task.status) }" %> -<% @title = "#{@import_task.name}" %> - -<%= link_to image_tag("icons/file_#{import.filename_extension}.png") + t("imports.show.imported_file"), imported_file_referential_import_path(@referential, import.id) %>