diff options
Diffstat (limited to 'app/models/import/netex.rb')
| -rw-r--r-- | app/models/import/netex.rb | 53 |
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 |
