aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/chouette/time_table.rb
diff options
context:
space:
mode:
authorcedricnjanga2017-07-25 14:03:00 +0200
committercedricnjanga2017-07-25 15:22:25 +0200
commitee252340561ef9338d8c0aa454d256ec58a0e296 (patch)
tree5c0e192e33d195890c4241cafcf87df3a145e2e5 /app/models/chouette/time_table.rb
parent62ac1ecf0fd61f1785f46ebb577ca5c1e65311a1 (diff)
downloadchouette-core-ee252340561ef9338d8c0aa454d256ec58a0e296.tar.bz2
Timetable#merge! remove excluded dates if other tt doesn't have them
Diffstat (limited to 'app/models/chouette/time_table.rb')
-rw-r--r--app/models/chouette/time_table.rb32
1 files changed, 21 insertions, 11 deletions
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb
index f8d45f9b8..8e8e31d9e 100644
--- a/app/models/chouette/time_table.rb
+++ b/app/models/chouette/time_table.rb
@@ -480,29 +480,35 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
transaction do
chunks.each do |chunk|
self.periods.create!(period_start: chunk.first.period_start, period_end: chunk.last.period_end)
- self.periods.delete(chunk)
+ self.periods.delete chunk
end
end
end
#update a period if a in_day is just before or after
def optimize_continuous_dates_and_periods
+ return self.periods if self.included_days.empty? || periods.empty?
-
- in_days = self.dates.where(in_out: true).sort_by(&:date)
periods = self.clone_periods
optimized = []
- periods.each do |period|
- in_days.each do |day|
+ i = 0
+ while i < periods.length
+ period = periods[i]
+ j = 0
+ in_days = self.reload.dates.where(in_out: true).sort_by(&:date)
+ while j < in_days.length
+ day = in_days[j]
if period.period_start - 1.day === day.date
period.period_start = day.date
- self.dates.delete(day)
+ self.dates.delete day
elsif period.period_end + 1.day === day.date
period.period_end = day.date
- self.dates.delete(day)
+ self.dates.delete day
end
+ j += 1
end
+ i += 1
optimized << period
end
optimized
@@ -530,13 +536,17 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
another_tt.included_days.map{ |d| add_included_day(d) }
# For excluded dates
- existing_out_date = self.dates.where(in_out: false).map(&:date)
- another_tt.dates.where(in_out: false).each do |d|
- unless existing_out_date.include?(d.date)
- self.dates << Chouette::TimeTableDate.new(:date => d.date, :in_out => false)
+ self.dates.where(in_out: false).each do |d|
+ self.dates.delete d if another_tt.include_in_periods?(d.date) && !another_tt.excluded_date?(d.date)
+ end
+
+ another_tt.excluded_days.each do |d|
+ unless self.reload.excluded_date?(d)
+ self.dates.create!(:date => d, :in_out => false)
end
self.save!
end
+
self.convert_continuous_dates_to_periods
self.periods = self.optimize_continuous_dates_and_periods
self.convert_continuous_periods_into_one