From 5e1b7a06a9958580fc18a0a4e33ff66ea6adcdf9 Mon Sep 17 00:00:00 2001 From: Zog Date: Mon, 29 Jan 2018 11:54:47 +0100 Subject: Refs #5754; Add a filter on purchase_windows on ReferentialVJs#index --- app/models/chouette/purchase_window.rb | 1 + app/models/chouette/vehicle_journey.rb | 7 +++++++ 2 files changed, 8 insertions(+) (limited to 'app/models') diff --git a/app/models/chouette/purchase_window.rb b/app/models/chouette/purchase_window.rb index 22bcc1de1..334493015 100644 --- a/app/models/chouette/purchase_window.rb +++ b/app/models/chouette/purchase_window.rb @@ -18,6 +18,7 @@ module Chouette validates_presence_of :name, :referential scope :contains_date, ->(date) { where('date ? <@ any (date_ranges)', date) } + scope :overlap_dates, ->(date_range) { where('daterange(?, ?) && any (date_ranges)', date_range.first, date_range.last + 1.day) } def self.ransackable_scopes(auth_object = nil) [:contains_date] diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index d94b69271..a252d4519 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -52,8 +52,15 @@ module Chouette end } + scope :in_purchase_window, ->(range){ + purchase_windows = Chouette::PurchaseWindow.overlap_dates(range) + sql = purchase_windows.joins(:vehicle_journeys).select('vehicle_journeys.id').uniq.to_sql + where("id IN (#{sql})") + } + # We need this for the ransack object in the filters ransacker :stop_area_ids + ransacker :purchase_window_date_gt # TODO: Remove this validator # We've eliminated this validation because it prevented vehicle journeys -- cgit v1.2.3