aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/import/netex.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/import/netex.rb')
-rw-r--r--app/models/import/netex.rb53
1 files changed, 47 insertions, 6 deletions
diff --git a/app/models/import/netex.rb b/app/models/import/netex.rb
index 49554ee90..e27f1a34c 100644
--- a/app/models/import/netex.rb
+++ b/app/models/import/netex.rb
@@ -4,6 +4,11 @@ class Import::Netex < Import::Base
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'
@@ -11,7 +16,22 @@ class Import::Netex < Import::Base
validates_presence_of :parent
+ def main_resource
+ @resource ||= parent.resources.find_or_create_by(name: self.name, resource_type: "referential", reference: self.name)
+ end
+
+ def notify_parent
+ super
+ main_resource.update_status_from_importer self.status
+ end
+
+ def create_message args
+ main_resource.messages.create args
+ end
+
def create_with_referential!
+ save unless persisted?
+
self.referential =
Referential.new(
name: self.name,
@@ -20,15 +40,35 @@ class Import::Netex < Import::Base
metadatas: [referential_metadata]
)
self.referential.save
- if self.referential.invalid?
+
+ if self.referential.valid?
+ main_resource.update referential: referential
+ call_iev_callback
+ save!
+ else
Rails.logger.info "Can't create referential for import #{self.id}: #{referential.inspect} #{referential.metadatas.inspect} #{referential.errors.messages}"
- if referential.metadatas.all?{|m| m.line_ids.present? && m.line_ids.empty?}
- parent.messages.create criticity: :error, message_key: "referential_creation_missing_lines", message_attributes: {referential_name: referential.name}
+ 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?
+ overlapped = Referential.find overlapped_referential_ids.last
+ create_message(
+ criticity: :error,
+ message_key: "referential_creation_overlapping_existing_referential",
+ message_attributes: {
+ referential_name: referential.name,
+ overlapped_name: overlapped.name,
+ overlapped_url: Rails.application.routes.url_helpers.referential_path(overlapped)
+ }
+ )
else
- parent.messages.create criticity: :error, message_key: "referential_creation", message_attributes: {referential_name: referential.name}
+ create_message(
+ criticity: :error,
+ message_key: "referential_creation",
+ message_attributes: {referential_name: referential.name},
+ resource_attributes: referential.errors.messages
+ )
end
- else
- save!
end
end
@@ -55,6 +95,7 @@ class Import::Netex < Import::Base
metadata.periodes = frame.periods
line_objectids = frame.line_refs.map { |ref| "STIF:CODIFLIGNE:Line:#{ref}" }
+ create_message criticity: :info, message_key: "referential_creation_lines_found", message_attributes: {line_objectids: line_objectids.to_sentence}
metadata.line_ids = workbench.lines.where(objectid: line_objectids).pluck(:id)
end
end