aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/referential.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/referential.rb')
-rw-r--r--app/models/referential.rb30
1 files changed, 25 insertions, 5 deletions
diff --git a/app/models/referential.rb b/app/models/referential.rb
index c7c22604d..2449d767d 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -59,12 +59,12 @@ class Referential < ApplicationModel
scope :pending, -> { where(ready: false, failed_at: nil, archived_at: nil) }
- scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) }
+ scope :active, -> { where(ready: true, failed_at: nil, archived_at: nil) }
scope :failed, -> { where.not(failed_at: nil) }
scope :archived, -> { where.not(archived_at: nil) }
- scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) }
- scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) }
+ scope :ready, -> { where(ready: true) }
+
scope :in_periode, ->(periode) { where(id: referential_ids_in_periode(periode)) }
scope :include_metadatas_lines, ->(line_ids) { where('referential_metadata.line_ids && ARRAY[?]::bigint[]', line_ids) }
scope :order_by_validity_period, ->(dir) { joins(:metadatas).order("unnest(periodes) #{dir}") }
@@ -122,6 +122,20 @@ class Referential < ApplicationModel
@_models_with_checksum || []
end
+ OPERATIONS = [Import::Netex, Import::Gtfs, CleanUp]
+
+ def last_operation
+ operations = []
+ Referential::OPERATIONS.each do |klass|
+ operations << klass.for_referential(self).limit(1).select("'#{klass.name}' as kind, id, created_at").order('created_at DESC').to_sql
+ end
+ sql = "SELECT * FROM ((#{operations.join(') UNION (')})) AS subquery ORDER BY subquery.created_at DESC"
+ res = ActiveRecord::Base.connection.execute(sql).first
+ if res
+ res["kind"].constantize.find(res["id"])
+ end
+ end
+
def lines
if metadatas.blank?
workbench ? workbench.lines : associated_lines
@@ -538,7 +552,7 @@ class Referential < ApplicationModel
def state
return :failed if failed_at.present?
return :archived if archived_at.present?
- ready ? :ready : :pending
+ ready? ? :active : :pending
end
def pending!
@@ -549,7 +563,7 @@ class Referential < ApplicationModel
update ready: false, failed_at: Time.now, archived_at: nil
end
- def ready!
+ def active!
update ready: true, failed_at: nil, archived_at: nil
end
@@ -557,6 +571,12 @@ class Referential < ApplicationModel
update failed_at: nil, archived_at: Time.now
end
+ %i(pending active failed archived).each do |s|
+ define_method "#{s}?" do
+ state == s
+ end
+ end
+
def pending_while
vals = attributes.slice(*%w(ready archived_at failed_at))
pending!