aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorZog2018-03-14 10:09:35 +0100
committerZog2018-03-15 16:57:54 +0100
commite7b6d6679e3d2911ecb4c2d0875dd016dbade70a (patch)
tree32e5cc384e0af4d024f95d63991dcfad39c0070c /app
parentb2a1d762cb3e7a72f0864e70843342de2566dfdf (diff)
downloadchouette-core-5956-merge-purchase-windows.tar.bz2
Refs #5956; Clone PurchaseWindows when merging Referentials5956-merge-purchase-windows
Diffstat (limited to 'app')
-rw-r--r--app/models/merge.rb42
1 files changed, 41 insertions, 1 deletions
diff --git a/app/models/merge.rb b/app/models/merge.rb
index e72c794fe..ecaccd2ef 100644
--- a/app/models/merge.rb
+++ b/app/models/merge.rb
@@ -340,7 +340,7 @@ class Merge < ActiveRecord::Base
unless existing_time_table
objectid = Chouette::TimeTable.where(objectid: time_table.objectid).exists? ? nil : time_table.objectid
- candidate_time_table.objectid = objectid
+ candidate_time_table.objectid = objectid
candidate_time_table.save!
@@ -359,6 +359,10 @@ class Merge < ActiveRecord::Base
end
end
end
+
+
+ # PurchaseWindows
+ merge_purchase_windows new, referential
end
def save_current
@@ -378,6 +382,42 @@ class Merge < ActiveRecord::Base
end
+ protected
+ def merge_purchase_windows new, referential
+ referential_purchase_windows = referential.switch do
+ Hash[referential.purchase_windows.joins(:vehicle_journeys).pluck(:id, "vehicle_journeys.checksum").inject(Hash.new { |h,k| h[k] = [] }) do |hash, row|
+ id, vehicle_journey_checksum = row
+ hash[referential.purchase_windows.find(id)] << vehicle_journey_checksum
+ hash
+ end]
+ end
+
+ new.switch do
+ referential_purchase_windows.each do |purchase_window, vehicle_journey_checksums|
+
+ new_purchase_window = new.purchase_windows.find_by name: purchase_window.name
+ new_purchase_window ||= begin
+ attributes = purchase_window.attributes.merge(id: nil)
+
+ new_purchase_window = new.purchase_windows.build attributes
+ new_purchase_window.intersect_periods! new.metadatas.map(&:periodes).flatten
+
+ objectid = Chouette::PurchaseWindow.where(objectid: new_purchase_window.objectid).exists? ? nil : new_purchase_window.objectid
+ new_purchase_window.objectid = objectid
+
+ new_purchase_window.save!
+ new_purchase_window
+ end
+
+ vehicle_journey_checksums.each do |vehicle_journey_checksum|
+ # associate VehicleJourney
+ associated_vehicle_journey = new.vehicle_journeys.find_by!(checksum: vehicle_journey_checksum)
+ associated_vehicle_journey.purchase_windows << new_purchase_window
+ end
+ end
+ end
+ end
+
class MetadatasMerger
attr_reader :merge_metadatas, :referential