diff options
| author | Alban Peignier | 2018-04-24 17:06:16 +0200 | 
|---|---|---|
| committer | Alban Peignier | 2018-04-24 17:06:16 +0200 | 
| commit | 8f403e9a17b27ca22f5acb5a1946c078cd97f9d3 (patch) | |
| tree | 0531b49116bc58b93e833ee024233a56ae0e9f23 /app/models | |
| parent | 6dda629122b0d9a1523d7589ff925f7ea2d96057 (diff) | |
| download | chouette-core-8f403e9a17b27ca22f5acb5a1946c078cd97f9d3.tar.bz2 | |
Restore 'data' clean (vehicle_journey/journey_pattern/route). Use referential metadata to clean routes. Make date_type/begin_date/end_date optionnal for internal usage. Refs #53725372-clean-with-metadata-2
Diffstat (limited to 'app/models')
| -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 | 
