aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2018-04-25 22:14:16 +0200
committerGitHub2018-04-25 22:14:16 +0200
commitb930761de0a269c45876b2242e085e23070f8325 (patch)
treefb6806471027a222d7d56ce0f3c7de301d7216b9
parent8b5c5f0cabbeefbeaf7a18a362670230658adaf6 (diff)
parent8f403e9a17b27ca22f5acb5a1946c078cd97f9d3 (diff)
downloadchouette-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.rb54
-rw-r--r--app/models/referential_cloning.rb2
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