diff options
Diffstat (limited to 'app/models/chouette')
| -rw-r--r-- | app/models/chouette/route.rb | 27 | ||||
| -rw-r--r-- | app/models/chouette/stop_point.rb | 15 | 
2 files changed, 36 insertions, 6 deletions
| diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb index e8c7755c7..49493d5b5 100644 --- a/app/models/chouette/route.rb +++ b/app/models/chouette/route.rb @@ -16,6 +16,7 @@ class Chouette::Route < Chouette::TridentActiveRecord    end    belongs_to :line +  belongs_to :opposite_route, :class_name => 'Chouette::Route', :foreign_key => :opposite_route_id    has_many :routing_constraint_zones    has_many :journey_patterns, :dependent => :destroy @@ -30,7 +31,6 @@ class Chouette::Route < Chouette::TridentActiveRecord        Chouette::Route.vehicle_journeys_timeless(proxy_association.owner.journey_patterns.pluck( :departure_stop_point_id))      end    end -  belongs_to :opposite_route, :class_name => 'Chouette::Route', :foreign_key => :opposite_route_id    has_many :stop_points, -> { order("position") }, :dependent => :destroy do      def find_by_stop_area(stop_area)        stop_area_ids = Integer === stop_area ? [stop_area] : (stop_area.children_in_depth + [stop_area]).map(&:id) @@ -56,12 +56,13 @@ class Chouette::Route < Chouette::TridentActiveRecord    end    has_many :stop_areas, -> { order('stop_points.position ASC') }, :through => :stop_points do      def between(departure, arrival) -      departure, arrival = [departure, arrival].collect do |endpoint| +      departure, arrival = [departure, arrival].map do |endpoint|          String === endpoint ? Chouette::StopArea.find_by_objectid(endpoint) : endpoint        end        proxy_owner.stop_points.between(departure, arrival).includes(:stop_area).collect(&:stop_area)      end    end +    accepts_nested_attributes_for :stop_points, :allow_destroy => :true    validates_presence_of :name @@ -75,6 +76,28 @@ class Chouette::Route < Chouette::TridentActiveRecord    after_commit :journey_patterns_control_route_sections +  def duplicate +    overrides = { +      'opposite_route_id' => nil +    } +    keys_for_create = attributes.keys - %w{id objectid created_at updated_at} +    atts_for_create = attributes +      .slice(*keys_for_create) +      .merge(overrides) +    new_route = self.class.create!(atts_for_create) +    duplicate_stop_points(for_route: new_route) +    new_route +  end + +  def duplicate_stop_points(for_route:) +    stop_points.each(&duplicate_stop_point(for_route: for_route)) +  end +  def duplicate_stop_point(for_route:) +    -> stop_point do +      stop_point.duplicate(for_route: for_route) +    end +  end +    def local_id      "IBOO-#{self.referential.id}-#{self.line.objectid.local_id}-#{self.id}"    end diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb index 8fe79dc0c..89c492b91 100644 --- a/app/models/chouette/stop_point.rb +++ b/app/models/chouette/stop_point.rb @@ -20,6 +20,11 @@ module Chouette      validates_presence_of :stop_area      validate :stop_area_id_validation +    def stop_area_id_validation +      if stop_area_id.nil? +        errors.add(:stop_area_id, I18n.t("stop_areas.errors.empty")) +      end +    end      scope :default_order, -> { order("position") } @@ -34,10 +39,12 @@ module Chouette        end      end -    def stop_area_id_validation -      if stop_area_id.nil? -        errors.add(:stop_area_id, I18n.t("stop_areas.errors.empty")) -      end +    def duplicate(for_route:) +      keys_for_create = attributes.keys - %w{id objectid created_at updated_at} +      atts_for_create = attributes +        .slice(*keys_for_create) +        .merge('route_id' => for_route.id) +      self.class.create!(atts_for_create)      end      def self.area_candidates | 
