diff options
| author | Alban Peignier | 2018-04-25 22:14:16 +0200 |
|---|---|---|
| committer | GitHub | 2018-04-25 22:14:16 +0200 |
| commit | b930761de0a269c45876b2242e085e23070f8325 (patch) | |
| tree | fb6806471027a222d7d56ce0f3c7de301d7216b9 | |
| parent | 8b5c5f0cabbeefbeaf7a18a362670230658adaf6 (diff) | |
| parent | 8f403e9a17b27ca22f5acb5a1946c078cd97f9d3 (diff) | |
| download | chouette-core-b930761de0a269c45876b2242e085e23070f8325.tar.bz2 | |
Merge pull request #518 from af83/5372-clean-with-metadata-2
Use referential metadata in the cleanup operation. Fixes #5372
| -rw-r--r-- | app/models/clean_up.rb | 54 | ||||
| -rw-r--r-- | app/models/referential_cloning.rb | 2 |
2 files changed, 47 insertions, 9 deletions
diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb index ec47489e9..761fc47be 100644 --- a/app/models/clean_up.rb +++ b/app/models/clean_up.rb @@ -23,17 +23,29 @@ class CleanUp < ApplicationModel end def clean + referential.switch + {}.tap do |result| - processed = send("destroy_time_tables_#{self.date_type}") - if processed - result['time_table'] = processed[:time_tables].try(:count) - result['vehicle_journey'] = processed[:vehicle_journeys].try(:count) - end - result['time_table_date'] = send("destroy_time_tables_dates_#{self.date_type}").try(:count) - result['time_table_period'] = send("destroy_time_tables_periods_#{self.date_type}").try(:count) - self.overlapping_periods.each do |period| - exclude_dates_in_overlapping_period(period) + if date_type + processed = send("destroy_time_tables_#{self.date_type}") + if processed + result['time_table'] = processed[:time_tables].try(:count) + result['vehicle_journey'] = processed[:vehicle_journeys].try(:count) + end + result['time_table_date'] = send("destroy_time_tables_dates_#{self.date_type}").try(:count) + result['time_table_period'] = send("destroy_time_tables_periods_#{self.date_type}").try(:count) + self.overlapping_periods.each do |period| + exclude_dates_in_overlapping_period(period) + end end + + destroy_vehicle_journeys_outside_referential + # Disabled for the moment. See #5372 + # destroy_time_tables_outside_referential + + destroy_vehicle_journeys + destroy_journey_patterns + destroy_routes end end @@ -76,6 +88,30 @@ class CleanUp < ApplicationModel Chouette::TimeTablePeriod.where('period_start > ? AND period_end < ?', self.begin_date, self.end_date).destroy_all end + def destroy_time_tables_outside_referential + # For the moment, only timetable outside of metadatas min/max dates are removed + metadatas_period = referential.metadatas_period + time_tables = Chouette::TimeTable.where('end_date < ? or start_date > ?', metadatas_period.min, metadatas_period.max) + destroy_time_tables(time_tables) + end + + def destroy_vehicle_journeys_outside_referential + line_ids = referential.metadatas.pluck(:line_ids).flatten.uniq + Chouette::VehicleJourney.joins(:route).where(["routes.line_id not in (?)", line_ids]).destroy_all + end + + def destroy_vehicle_journeys + Chouette::VehicleJourney.where("id not in (select distinct vehicle_journey_id from time_tables_vehicle_journeys)").destroy_all + end + + def destroy_journey_patterns + Chouette::JourneyPattern.where("id not in (select distinct journey_pattern_id from vehicle_journeys)").destroy_all + end + + def destroy_routes + Chouette::Route.where("id not in (select distinct route_id from journey_patterns)").destroy_all + end + def overlapping_periods self.end_date = self.begin_date if self.date_type != 'between' Chouette::TimeTablePeriod.where('(period_start, period_end) OVERLAPS (?, ?)', self.begin_date, self.end_date) diff --git a/app/models/referential_cloning.rb b/app/models/referential_cloning.rb index f2c81009a..5065dc660 100644 --- a/app/models/referential_cloning.rb +++ b/app/models/referential_cloning.rb @@ -25,6 +25,8 @@ class ReferentialCloning < ApplicationModel .clone_schema end target_referential.check_migration_count(report) + + CleanUp.new(referential: target_referential).clean end private |
