aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-04-30 07:12:49 +0200
committerZog2018-05-07 15:03:07 +0200
commit657fea85b193fb9908dcaa42391bec230e93d857 (patch)
treea14caaca05bdd7a500a765ca768c15986b7fd740
parent42ac1fa61ea79fe612bcd98f2b38bad5b6f24421 (diff)
downloadchouette-core-657fea85b193fb9908dcaa42391bec230e93d857.tar.bz2
Fix NETEX imports
-rw-r--r--app/models/import/base.rb1
-rw-r--r--app/models/import/gtfs.rb3
-rw-r--r--app/models/import/netex.rb7
-rw-r--r--app/views/imports/import/_netex.html.slim43
-rw-r--r--app/views/imports/import/_workbench.html.slim51
-rw-r--r--app/views/imports/show.html.slim52
-rw-r--r--config/initializers/stif.rb37
-rw-r--r--config/locales/import_messages.fr.yml2
-rw-r--r--db/schema.rb6
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