aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/chouette
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/chouette')
-rw-r--r--app/models/chouette/access_link.rb2
-rw-r--r--app/models/chouette/access_point.rb2
-rw-r--r--app/models/chouette/active_record.rb3
-rw-r--r--app/models/chouette/company.rb4
-rw-r--r--app/models/chouette/connection_link.rb2
-rw-r--r--app/models/chouette/for_alighting_enumerations.rb2
-rw-r--r--app/models/chouette/for_boarding_enumerations.rb2
-rw-r--r--app/models/chouette/group_of_line.rb2
-rw-r--r--app/models/chouette/journey_pattern.rb2
-rw-r--r--app/models/chouette/line.rb10
-rw-r--r--app/models/chouette/network.rb2
-rw-r--r--app/models/chouette/pt_link.rb2
-rw-r--r--app/models/chouette/purchase_window.rb2
-rw-r--r--app/models/chouette/route.rb28
-rw-r--r--app/models/chouette/routing_constraint_zone.rb2
-rw-r--r--app/models/chouette/stop_area.rb7
-rw-r--r--app/models/chouette/stop_point.rb5
-rw-r--r--app/models/chouette/time_table.rb2
-rw-r--r--app/models/chouette/timeband.rb2
-rw-r--r--app/models/chouette/vehicle_journey.rb29
20 files changed, 79 insertions, 33 deletions
diff --git a/app/models/chouette/access_link.rb b/app/models/chouette/access_link.rb
index 6b08443be..7ab8ca715 100644
--- a/app/models/chouette/access_link.rb
+++ b/app/models/chouette/access_link.rb
@@ -1,6 +1,6 @@
module Chouette
class AccessLink < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
include ObjectidSupport
attr_accessor :access_link_type, :link_orientation_type, :link_key
diff --git a/app/models/chouette/access_point.rb b/app/models/chouette/access_point.rb
index ac6580015..884460881 100644
--- a/app/models/chouette/access_point.rb
+++ b/app/models/chouette/access_point.rb
@@ -4,7 +4,7 @@ require 'geo_ruby'
module Chouette
class AccessPoint < Chouette::ActiveRecord
- has_paper_trail
+ has_metadata
include Geokit::Mappable
include ProjectionFields
diff --git a/app/models/chouette/active_record.rb b/app/models/chouette/active_record.rb
index c2aab9d50..27f5426b3 100644
--- a/app/models/chouette/active_record.rb
+++ b/app/models/chouette/active_record.rb
@@ -1,7 +1,8 @@
#require "active_record"
require 'deep_cloneable'
module Chouette
- class ActiveRecord < ::ActiveRecord::Base
+ class ActiveRecord < ::ApplicationModel
+
self.abstract_class = true
before_save :nil_if_blank, :set_data_source_ref
diff --git a/app/models/chouette/company.rb b/app/models/chouette/company.rb
index f5ed4e0f8..9d5737a6c 100644
--- a/app/models/chouette/company.rb
+++ b/app/models/chouette/company.rb
@@ -1,9 +1,11 @@
module Chouette
class Company < Chouette::ActiveRecord
+ has_metadata
+
include CompanyRestrictions
include LineReferentialSupport
include ObjectidSupport
- has_paper_trail class_name: 'PublicVersion'
+ include CustomFieldsSupport
has_many :lines
diff --git a/app/models/chouette/connection_link.rb b/app/models/chouette/connection_link.rb
index c53d6f5f1..fb93e5f90 100644
--- a/app/models/chouette/connection_link.rb
+++ b/app/models/chouette/connection_link.rb
@@ -1,6 +1,6 @@
module Chouette
class ConnectionLink < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
include ObjectidSupport
include ConnectionLinkRestrictions
diff --git a/app/models/chouette/for_alighting_enumerations.rb b/app/models/chouette/for_alighting_enumerations.rb
index ab07a670d..2e15fcb58 100644
--- a/app/models/chouette/for_alighting_enumerations.rb
+++ b/app/models/chouette/for_alighting_enumerations.rb
@@ -3,6 +3,6 @@ module Chouette
extend Enumerize
extend ActiveModel::Naming
- enumerize :for_alighting, in: %w[normal forbidden request_stop is_flexible]
+ enumerize :for_alighting, in: %w[normal forbidden request_stop is_flexible], default: :normal
end
end
diff --git a/app/models/chouette/for_boarding_enumerations.rb b/app/models/chouette/for_boarding_enumerations.rb
index 48f8762c2..0190bf805 100644
--- a/app/models/chouette/for_boarding_enumerations.rb
+++ b/app/models/chouette/for_boarding_enumerations.rb
@@ -3,6 +3,6 @@ module Chouette
extend Enumerize
extend ActiveModel::Naming
- enumerize :for_boarding, in: %w[normal forbidden request_stop is_flexible]
+ enumerize :for_boarding, in: %w[normal forbidden request_stop is_flexible], default: :normal
end
end
diff --git a/app/models/chouette/group_of_line.rb b/app/models/chouette/group_of_line.rb
index 3b6a7cea7..a30c34ce7 100644
--- a/app/models/chouette/group_of_line.rb
+++ b/app/models/chouette/group_of_line.rb
@@ -1,6 +1,6 @@
module Chouette
class GroupOfLine < Chouette::ActiveRecord
- has_paper_trail
+ has_metadata
include ObjectidSupport
include GroupOfLineRestrictions
include LineReferentialSupport
diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb
index 5a5132200..830a6a808 100644
--- a/app/models/chouette/journey_pattern.rb
+++ b/app/models/chouette/journey_pattern.rb
@@ -1,6 +1,6 @@
module Chouette
class JourneyPattern < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
include ChecksumSupport
include JourneyPatternRestrictions
include ObjectidSupport
diff --git a/app/models/chouette/line.rb b/app/models/chouette/line.rb
index 9f05b611a..4b5d1a68d 100644
--- a/app/models/chouette/line.rb
+++ b/app/models/chouette/line.rb
@@ -1,6 +1,6 @@
module Chouette
class Line < Chouette::ActiveRecord
- has_paper_trail class_name: 'PublicVersion'
+ has_metadata
include LineRestrictions
include LineReferentialSupport
include ObjectidSupport
@@ -51,6 +51,14 @@ module Chouette
)
}
+ scope :for_organisation, ->(organisation){
+ if objectids = organisation&.lines_scope
+ where(objectid: objectids)
+ else
+ all
+ end
+ }
+
def self.nullable_attributes
[:published_name, :number, :comment, :url, :color, :text_color, :stable_id]
end
diff --git a/app/models/chouette/network.rb b/app/models/chouette/network.rb
index 942fc5d67..4802d7592 100644
--- a/app/models/chouette/network.rb
+++ b/app/models/chouette/network.rb
@@ -1,6 +1,6 @@
module Chouette
class Network < Chouette::ActiveRecord
- has_paper_trail class_name: 'PublicVersion'
+ has_metadata
include NetworkRestrictions
include LineReferentialSupport
include ObjectidSupport
diff --git a/app/models/chouette/pt_link.rb b/app/models/chouette/pt_link.rb
index 399539d44..680632a14 100644
--- a/app/models/chouette/pt_link.rb
+++ b/app/models/chouette/pt_link.rb
@@ -2,7 +2,7 @@ require 'geokit'
module Chouette
class PtLink < Chouette::ActiveRecord
- has_paper_trail
+ has_metadata
include Geokit::Mappable
def geometry
diff --git a/app/models/chouette/purchase_window.rb b/app/models/chouette/purchase_window.rb
index 4c8014780..e10b106ec 100644
--- a/app/models/chouette/purchase_window.rb
+++ b/app/models/chouette/purchase_window.rb
@@ -11,7 +11,7 @@ module Chouette
enumerize :color, in: %w(#9B9B9B #FFA070 #C67300 #7F551B #41CCE3 #09B09C #3655D7 #6321A0 #E796C6 #DD2DAA)
- has_paper_trail
+ has_metadata
belongs_to :referential
has_and_belongs_to_many :vehicle_journeys, :class_name => 'Chouette::VehicleJourney'
diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb
index 13288bc6b..9c7a3e6d9 100644
--- a/app/models/chouette/route.rb
+++ b/app/models/chouette/route.rb
@@ -1,6 +1,7 @@
module Chouette
class Route < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
+
include RouteRestrictions
include ChecksumSupport
include ObjectidSupport
@@ -9,7 +10,6 @@ module Chouette
enumerize :direction, in: %i(straight_forward backward clockwise counter_clockwise north north_west west south_west south south_east east north_east)
enumerize :wayback, in: %i(outbound inbound), default: :outbound
-
def self.nullable_attributes
[:published_name, :comment, :number, :name, :direction, :wayback]
end
@@ -68,28 +68,34 @@ module Chouette
validates_presence_of :published_name
validates_presence_of :line
validates :wayback, inclusion: { in: self.wayback.values }
-
after_save :calculate_costs!, if: ->() { TomTom.enabled? }
-
- def duplicate
+
+ def duplicate opposite=false
overrides = {
'opposite_route_id' => nil,
'name' => I18n.t('activerecord.copy', name: self.name)
}
+ keys_for_create = attributes.keys - %w{id objectid created_at updated_at}
atts_for_create = attributes
- .slice!(*%w{id objectid created_at updated_at})
+ .slice(*keys_for_create)
.merge(overrides)
+ if opposite
+ atts_for_create[:wayback] = self.opposite_wayback
+ atts_for_create[:name] = I18n.t('routes.opposite', name: self.name)
+ atts_for_create[:published_name] = atts_for_create[:name]
+ atts_for_create[:opposite_route_id] = self.id
+ end
new_route = self.class.create!(atts_for_create)
- duplicate_stop_points(for_route: new_route)
+ duplicate_stop_points(for_route: new_route, opposite: opposite)
new_route
end
- def duplicate_stop_points(for_route:)
- stop_points.each(&duplicate_stop_point(for_route: for_route))
+ def duplicate_stop_points(for_route:, opposite: false)
+ stop_points.each(&duplicate_stop_point(for_route: for_route, opposite: opposite))
end
- def duplicate_stop_point(for_route:)
+ def duplicate_stop_point(for_route:, opposite: false)
-> stop_point do
- stop_point.duplicate(for_route: for_route)
+ stop_point.duplicate(for_route: for_route, opposite: opposite)
end
end
diff --git a/app/models/chouette/routing_constraint_zone.rb b/app/models/chouette/routing_constraint_zone.rb
index 58703598e..886eadc6c 100644
--- a/app/models/chouette/routing_constraint_zone.rb
+++ b/app/models/chouette/routing_constraint_zone.rb
@@ -1,6 +1,6 @@
module Chouette
class RoutingConstraintZone < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
include ChecksumSupport
include ObjectidSupport
diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb
index 5f2c92acb..4ddc7403b 100644
--- a/app/models/chouette/stop_area.rb
+++ b/app/models/chouette/stop_area.rb
@@ -2,11 +2,12 @@ require 'geokit'
require 'geo_ruby'
module Chouette
class StopArea < Chouette::ActiveRecord
- has_paper_trail class_name: 'PublicVersion'
+ has_metadata
include ProjectionFields
include StopAreaRestrictions
include StopAreaReferentialSupport
include ObjectidSupport
+ include CustomFieldsSupport
extend Enumerize
enumerize :area_type, in: Chouette::AreaType::ALL
@@ -49,7 +50,7 @@ module Chouette
validate :registration_number_is_set
before_validation do
- self.registration_number ||= self.stop_area_referential.generate_registration_number
+ self.registration_number = self.stop_area_referential.generate_registration_number unless self.registration_number.present?
end
def self.nullable_attributes
@@ -90,7 +91,7 @@ module Chouette
end
unless self.stop_area_referential.validates_registration_number(self.registration_number)
- errors.add(:registration_number, I18n.t('stop_areas.errors.registration_number.invalid'))
+ errors.add(:registration_number, I18n.t('stop_areas.errors.registration_number.invalid', mask: self.stop_area_referential.registration_number_format))
end
end
diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb
index 6b363cd93..1df1a664a 100644
--- a/app/models/chouette/stop_point.rb
+++ b/app/models/chouette/stop_point.rb
@@ -1,6 +1,6 @@
module Chouette
class StopPoint < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
def self.policy_class
RoutePolicy
end
@@ -39,11 +39,12 @@ module Chouette
end
end
- def duplicate(for_route:)
+ def duplicate(for_route:, opposite: false)
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)
+ atts_for_create["position"] = self.route.stop_points.size - atts_for_create["position"] if opposite
self.class.create!(atts_for_create)
end
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb
index 506e498b8..b59c95665 100644
--- a/app/models/chouette/time_table.rb
+++ b/app/models/chouette/time_table.rb
@@ -1,6 +1,6 @@
module Chouette
class TimeTable < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
include ChecksumSupport
include TimeTableRestrictions
include ObjectidSupport
diff --git a/app/models/chouette/timeband.rb b/app/models/chouette/timeband.rb
index 5a4e17b98..38260b755 100644
--- a/app/models/chouette/timeband.rb
+++ b/app/models/chouette/timeband.rb
@@ -9,7 +9,7 @@ module Chouette
class Timeband < Chouette::TridentActiveRecord
include ObjectidSupport
- has_paper_trail
+ has_metadata
validates :start_time, :end_time, presence: true
validates_with Chouette::TimebandValidator
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index 525036077..54aad290c 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -1,7 +1,7 @@
# coding: utf-8
module Chouette
class VehicleJourney < Chouette::TridentActiveRecord
- has_paper_trail
+ has_metadata
include ChecksumSupport
include CustomFieldsSupport
include VehicleJourneyRestrictions
@@ -346,6 +346,33 @@ module Chouette
end
end
+ def fill_passing_time_at_borders
+ encountered_borders = []
+ previous_stop = nil
+ vehicle_journey_at_stops.each do |vjas|
+ sp = vjas.stop_point
+ if sp.stop_area.area_type == "border"
+ encountered_borders << vjas
+ else
+ if encountered_borders.any?
+ before_cost = journey_pattern.costs_between previous_stop.stop_point, encountered_borders.first.stop_point
+ after_cost = journey_pattern.costs_between encountered_borders.last.stop_point, sp
+ if before_cost && before_cost[:distance] && after_cost && after_cost[:distance]
+ before_distance = before_cost[:distance].to_f
+ after_distance = after_cost[:distance].to_f
+ time = previous_stop.departure_time + before_distance / (before_distance+after_distance) * (vjas.arrival_time - previous_stop.departure_time)
+ encountered_borders.each do |b|
+ b.update_attribute :arrival_time, time
+ b.update_attribute :departure_time, time
+ end
+ end
+ encountered_borders = []
+ end
+ previous_stop = vjas
+ end
+ end
+ end
+
def self.matrix(vehicle_journeys)
Hash[*VehicleJourneyAtStop.where(vehicle_journey_id: vehicle_journeys.pluck(:id)).map do |vjas|
[ "#{vjas.vehicle_journey_id}-#{vjas.stop_point_id}", vjas]