From 6b6809da4476fd9c84fe6cd3fa01c2eec21ef72a Mon Sep 17 00:00:00 2001 From: halilsen Date: Thu, 18 Feb 2021 10:53:19 +0100 Subject: [PATCH 1/2] Fix: do not return a diffrent object at each call --- models/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/base.rb b/models/base.rb index e5ca90b45..641d03582 100644 --- a/models/base.rb +++ b/models/base.rb @@ -53,7 +53,7 @@ def self.has_many(name, options = {}) super define_method(name) do - self[name] || [] + self[name] ||= [] end define_method("#{name}=") do |vals| From ef57b46ff2eacff9da3404e0df1f4676bea181e6 Mon Sep 17 00:00:00 2001 From: halilsen Date: Thu, 25 Feb 2021 14:48:15 +0100 Subject: [PATCH 2/2] Reference relations and services --- models/concerns/expand_data.rb | 8 ++++++++ models/relation.rb | 1 + models/service.rb | 1 + models/vrp.rb | 10 ++++++++++ 4 files changed, 20 insertions(+) diff --git a/models/concerns/expand_data.rb b/models/concerns/expand_data.rb index 0c7c75edf..3b69f037b 100644 --- a/models/concerns/expand_data.rb +++ b/models/concerns/expand_data.rb @@ -45,6 +45,14 @@ def adapt_relations_between_shipments } end + def add_relation_references + self.relations.each{ |relation| + relation.linked_services.each{ |service| + service.relations << relation + } + } + end + def add_sticky_vehicle_if_routes_and_partitions return if self.preprocessing_partitions.empty? diff --git a/models/relation.rb b/models/relation.rb index 7ad432c3c..9273bb3e4 100644 --- a/models/relation.rb +++ b/models/relation.rb @@ -22,6 +22,7 @@ class Relation < Base field :type, default: :same_route field :lapse, default: nil field :linked_ids, default: [] + has_many :linked_services, class_name: 'Models::Service' field :linked_vehicle_ids, default: [] field :periodicity, default: 1 diff --git a/models/service.rb b/models/service.rb index 742ed558a..ef145d1d1 100644 --- a/models/service.rb +++ b/models/service.rb @@ -56,5 +56,6 @@ class Service < Base has_many :activities, class_name: 'Models::Activity' has_many :sticky_vehicles, class_name: 'Models::Vehicle' has_many :quantities, class_name: 'Models::Quantity' + has_many :relations, class_name: 'Models::Relation' end end diff --git a/models/vrp.rb b/models/vrp.rb index 7309ad2e9..959875585 100644 --- a/models/vrp.rb +++ b/models/vrp.rb @@ -228,6 +228,7 @@ def self.check_consistency(hash) end def self.expand_data(vrp) + vrp.add_relation_references vrp.add_sticky_vehicle_if_routes_and_partitions vrp.adapt_relations_between_shipments vrp.expand_unavailable_days @@ -325,6 +326,7 @@ def self.filter(hash) self.remove_unecessary_units(hash) self.generate_schedule_indices_from_date(hash) + self.generate_linked_service_ids_for_relations(hash) end def self.remove_unecessary_units(hash) @@ -477,6 +479,14 @@ def self.generate_schedule_indices_from_date(hash) hash end + def self.generate_linked_service_ids_for_relations(hash) + hash[:relations]&.each{ |relation| + next unless relation[:linked_ids]&.any? + + relation[:linked_service_ids] = relation[:linked_ids].select{ |id| hash[:services]&.any?{ |s| s[:id] == id } } + } + end + def configuration=(configuration) self.config = configuration self.preprocessing = configuration[:preprocessing] if configuration[:preprocessing]