diff options
| -rw-r--r-- | app/models/import/base.rb | 1 | ||||
| -rw-r--r-- | app/models/import/gtfs.rb | 3 | ||||
| -rw-r--r-- | app/models/import/netex.rb | 7 | ||||
| -rw-r--r-- | app/views/imports/import/_netex.html.slim | 43 | ||||
| -rw-r--r-- | app/views/imports/import/_workbench.html.slim | 51 | ||||
| -rw-r--r-- | app/views/imports/show.html.slim | 52 | ||||
| -rw-r--r-- | config/initializers/stif.rb | 37 | ||||
| -rw-r--r-- | config/locales/import_messages.fr.yml | 2 | ||||
| -rw-r--r-- | db/schema.rb | 6 | 
9 files changed, 126 insertions, 76 deletions
| diff --git a/app/models/import/base.rb b/app/models/import/base.rb index 333fb0f56..606c39974 100644 --- a/app/models/import/base.rb +++ b/app/models/import/base.rb @@ -44,6 +44,7 @@ class Import::Base < ApplicationModel    end    def aborted! +    Rails.logger.info "=== aborted ==="      update status: :aborted    end diff --git a/app/models/import/gtfs.rb b/app/models/import/gtfs.rb index e1bac36a6..4f0dde9d1 100644 --- a/app/models/import/gtfs.rb +++ b/app/models/import/gtfs.rb @@ -28,10 +28,11 @@ class Import::Gtfs < Import::Base      import_without_status      update status: 'successful', ended_at: Time.now -    referential&.ready! +    referential&.active!    rescue Exception => e      update status: 'failed', ended_at: Time.now      Rails.logger.error "Error in GTFS import: #{e} #{e.backtrace.join('\n')}" +    create_message criticity: :error, message_key: :full_text, message_attributes: {text: e.message}      referential&.failed!    ensure      notify_parent diff --git a/app/models/import/netex.rb b/app/models/import/netex.rb index e27f1a34c..f64a18e98 100644 --- a/app/models/import/netex.rb +++ b/app/models/import/netex.rb @@ -2,15 +2,12 @@ require 'net/http'  class Import::Netex < Import::Base    before_destroy :destroy_non_ready_referential -  after_commit :call_iev_callback, on: :create -    after_commit do      main_resource.update_status_from_importer self.status      true    end    before_save do -    self.status = 'aborted' unless referential      self.referential&.failed! if self.status == 'aborted' || self.status == 'failed'    end @@ -47,7 +44,7 @@ class Import::Netex < Import::Base        save!      else        Rails.logger.info "Can't create referential for import #{self.id}: #{referential.inspect} #{referential.metadatas.inspect} #{referential.errors.messages}" -      aborted! +        if referential.metadatas.all?{|m| m.line_ids.empty? && m.line_ids.empty?}          create_message criticity: :error, message_key: "referential_creation_missing_lines", message_attributes: {referential_name: referential.name}        elsif (overlapped_referential_ids = referential.overlapped_referential_ids).any? @@ -69,6 +66,8 @@ class Import::Netex < Import::Base            resource_attributes: referential.errors.messages          )        end +      self.referential = nil +      aborted!      end    end diff --git a/app/views/imports/import/_netex.html.slim b/app/views/imports/import/_netex.html.slim new file mode 100644 index 000000000..5542e389f --- /dev/null +++ b/app/views/imports/import/_netex.html.slim @@ -0,0 +1,43 @@ +.row +  .col-lg-6.col-md-6.col-sm-12.col-xs-12 +    - metadata = { t('.parent') => link_to(@import.parent.name, [@import.parent.workbench, @import.parent]) } +    - metadata = metadata.update({t('.status') => import_status(@import.status, verbose: true) }) +    = definition_list t('metadatas'), metadata + +.col-lg-12 +  .error_messages +    = render 'shared/iev_interfaces/messages', messages: @import.main_resource.messages + +- if @import.resources.present? +  .col-lg-12 +    h2 = t('.table_title') +  .col-lg-12 +    = t('.table_explanation') +  .col-lg-12 +    = table_builder_2 @import.resources.where(resource_type: :file), +      [ \ +        TableBuilderHelper::Column.new( \ +          key: :name, \ +          attribute: 'name', \ +          sortable: false, \ +        ), \ +        TableBuilderHelper::Column.new( \ +          key: :status, \ +          attribute: Proc.new { |n| import_resource_status(n.status) }, \ +          sortable: false, \ +        ), \ +        TableBuilderHelper::Column.new( \ +          name: 'Résultat des tests' , \ +          attribute: Proc.new { |n| I18n.t('import_resources.index.metrics', n.metrics.deep_symbolize_keys) }, \ +          sortable: false, \ +        ), \ +        TableBuilderHelper::Column.new( \ +          name: 'Téléchargement' , \ +          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 \ +        ), \ +      ], +      cls: 'table has-search' diff --git a/app/views/imports/import/_workbench.html.slim b/app/views/imports/import/_workbench.html.slim new file mode 100644 index 000000000..d384cbbe2 --- /dev/null +++ b/app/views/imports/import/_workbench.html.slim @@ -0,0 +1,51 @@ +.row +  .col-lg-6.col-md-6.col-sm-12.col-xs-12 +    - metadata = { t('.data_recovery') => '-', t('.filename') => @import.try(:file_identifier)} +    - metadata = metadata.update({t('.status') => import_status(@import.status, verbose: true) }) +    = definition_list t('metadatas'), metadata + +.col-lg-12 +  .error_messages +    = render 'shared/iev_interfaces/messages', messages: @import.messages + +- if @import.resources.any? +  .col-lg-12 +    = table_builder_2 @import.resources, +      [ \ +        TableBuilderHelper::Column.new( \ +          name: t('.referential_name'), \ +          attribute: 'name', \ +          sortable: false, \ +          link_to: lambda do |item| \ +            referential_path(item.referential) if item.referential.present? \ +          end \ +        ), \ +        TableBuilderHelper::Column.new( \ +          key: :status, \ +          attribute: Proc.new { |n| import_status(n.status) }, \ +          sortable: false, \ +          link_to: lambda do |item| \ +            item.netex_import.present? ? [@import.workbench, item.netex_import] : [@import.workbench, @import, item] \ +          end \ +        ), \ +        TableBuilderHelper::Column.new( \ +          name: t('.stif_control'), \ +          attribute: '', \ +          sortable: false, \ +        ), \ +        TableBuilderHelper::Column.new( \ +          name: t('.organisation_control'), \ +          attribute: '', \ +          sortable: false, \ +        ) \ +      ], +      cls: 'table', +      overhead: [ \ +        {}, \ +        {}, \ +        { \ +          title: I18n.t('imports.show.summary').html_safe, \ +          width: 2, \ +          cls: 'overheaded-default colspan="2"' \ +        } \ +      ] diff --git a/app/views/imports/show.html.slim b/app/views/imports/show.html.slim index 99458c7fe..10552129d 100644 --- a/app/views/imports/show.html.slim +++ b/app/views/imports/show.html.slim @@ -4,54 +4,4 @@  .page_content    .container-fluid -    .row -      .col-lg-6.col-md-6.col-sm-12.col-xs-12 -        - metadata = { t('.data_recovery') => '-', t('.filename') => @import.try(:file_identifier)} -        - metadata = metadata.update({t('.status') => import_status(@import.status, verbose: true) }) -        = definition_list t('metadatas'), metadata - -    .col-lg-12 -      .error_messages -        = render 'shared/iev_interfaces/messages', messages: @import.messages - -    - if @import.resources.any? -      .col-lg-12 -        = table_builder_2 @import.resources, -          [ \ -            TableBuilderHelper::Column.new( \ -              name: t('.referential_name'), \ -              attribute: 'name', \ -              sortable: false, \ -              link_to: lambda do |item| \ -                referential_path(item.referential) if item.referential.present? \ -              end \ -            ), \ -            TableBuilderHelper::Column.new( \ -              key: :status, \ -              attribute: Proc.new { |n| import_status(n.status) }, \ -              sortable: false, \ -              link_to: lambda do |item| \ -                workbench_import_import_resource_path(@import.workbench_id, @import, item) \ -              end \ -            ), \ -            TableBuilderHelper::Column.new( \ -              name: t('.stif_control'), \ -              attribute: '', \ -              sortable: false, \ -            ), \ -            TableBuilderHelper::Column.new( \ -              name: t('.organisation_control'), \ -              attribute: '', \ -              sortable: false, \ -            ) \ -          ], -          cls: 'table', -          overhead: [ \ -            {}, \ -            {}, \ -            { \ -              title: I18n.t('imports.show.summary').html_safe, \ -              width: 2, \ -              cls: 'overheaded-default colspan="2"' \ -            } \ -          ] +    = render partial: "imports/#{@import.type.tableize.singularize}" diff --git a/config/initializers/stif.rb b/config/initializers/stif.rb index 2ddadbc7e..ab2410b33 100644 --- a/config/initializers/stif.rb +++ b/config/initializers/stif.rb @@ -1,27 +1,30 @@  # coding: utf-8 -Rails.application.config.to_prepare do -  Organisation.after_create do |organisation| -    line_referential      = LineReferential.find_by(name: "CodifLigne") -    stop_area_referential = StopAreaReferential.find_by(name: "Reflex") -    line_referential.organisations << organisation -    stop_area_referential.organisations << organisation +unless ENV.fetch("SEED", false) || Rails.env.test? +  Rails.application.config.to_prepare do +    Organisation.after_create do |organisation| +      line_referential      = LineReferential.find_by(name: "CodifLigne") +      stop_area_referential = StopAreaReferential.find_by(name: "Reflex") -    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 -    end +      line_referential.organisations << organisation +      stop_area_referential.organisations << organisation -    workbench = organisation.workbenches.find_or_create_by(name: "Gestion de l'offre") do |w| -      w.line_referential      = line_referential -      w.stop_area_referential = stop_area_referential -      w.objectid_format       = Workbench.objectid_format.stif_netex -      w.workgroup             = workgroup +      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 +      end -      Rails.logger.debug "Create Workbench for #{organisation.name}" +      workbench = organisation.workbenches.find_or_create_by(name: "Gestion de l'offre") do |w| +        w.line_referential      = line_referential +        w.stop_area_referential = stop_area_referential +        w.objectid_format       = Workbench.objectid_format.stif_netex +        w.workgroup             = workgroup + +        Rails.logger.debug "Create Workbench for #{organisation.name}" +      end      end    end -end unless Rails.env.test? +end  Rails.application.config.to_prepare do    Organisation.before_validation(on: :create) do |organisation| diff --git a/config/locales/import_messages.fr.yml b/config/locales/import_messages.fr.yml index c05b8dc85..e76ad7381 100644 --- a/config/locales/import_messages.fr.yml +++ b/config/locales/import_messages.fr.yml @@ -18,7 +18,7 @@ fr:        trips:          imported: "%{count} course(s) importé(s)"        calendars: -        imported: "%{count} calndrier(s) importé(s)" +        imported: "%{count} calendrier(s) importé(s)"      1_netexstif_2: "Le fichier %{source_filename} ne respecte pas la syntaxe XML ou la XSD NeTEx : erreur '%{error_value}' rencontré"      1_netexstif_5: "%{source_filename}-Ligne %{source_line_number}-Colonne %{source_column_number} : l'objet %{source_label} d'identifiant %{source_objectid} a une date de mise à jour dans le futur"      2_netexstif_1_1: "Le fichier commun.xml ne contient pas de frame nommée NTEX_COMMUN" diff --git a/db/schema.rb b/db/schema.rb index 9a94dc270..b97af8f5c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -18,7 +18,6 @@ ActiveRecord::Schema.define(version: 20180425160730) do    enable_extension "postgis"    enable_extension "hstore"    enable_extension "unaccent" -  enable_extension "objectid"    create_table "access_links", id: :bigserial, force: :cascade do |t|      t.integer  "access_point_id",                        limit: 8 @@ -443,7 +442,7 @@ ActiveRecord::Schema.define(version: 20180425160730) do    add_index "import_messages", ["resource_id"], name: "index_import_messages_on_resource_id", using: :btree    create_table "import_resources", id: :bigserial, force: :cascade do |t| -    t.integer  "import_id",     limit: 8 +    t.integer  "import_id",      limit: 8      t.string   "status"      t.datetime "created_at"      t.datetime "updated_at" @@ -451,9 +450,11 @@ ActiveRecord::Schema.define(version: 20180425160730) do      t.string   "reference"      t.string   "name"      t.hstore   "metrics" +    t.integer  "referential_id"    end    add_index "import_resources", ["import_id"], name: "index_import_resources_on_import_id", using: :btree +  add_index "import_resources", ["referential_id"], name: "index_import_resources_on_referential_id", using: :btree    create_table "imports", id: :bigserial, force: :cascade do |t|      t.string   "status" @@ -1110,6 +1111,7 @@ ActiveRecord::Schema.define(version: 20180425160730) do    add_foreign_key "compliance_controls", "compliance_control_blocks"    add_foreign_key "compliance_controls", "compliance_control_sets"    add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade +  add_foreign_key "import_resources", "referentials"    add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify    add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify    add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade | 
