aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/chouette
diff options
context:
space:
mode:
authorLuc Donnet2018-04-04 21:13:13 +0200
committerGitHub2018-04-04 21:13:13 +0200
commitfe8e3583fd2a135a14fad6cc27cc089d76b7946e (patch)
tree22da40370a0aa5dfb89e717e713e0596c83981b6 /app/models/chouette
parenta5759a79bae1db95c0c90dc4620bf91620df6cfe (diff)
parent91ab685998fb6052efd4d7a74778eb82585eccbb (diff)
downloadchouette-core-fe8e3583fd2a135a14fad6cc27cc089d76b7946e.tar.bz2
Merge pull request #390 from af83/6226-create-opposite-route
6226 Add a button to automatically create opposite routes
Diffstat (limited to 'app/models/chouette')
-rw-r--r--app/models/chouette/route.rb24
-rw-r--r--app/models/chouette/stop_point.rb3
2 files changed, 17 insertions, 10 deletions
diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb
index 13288bc6b..65947c392 100644
--- a/app/models/chouette/route.rb
+++ b/app/models/chouette/route.rb
@@ -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/stop_point.rb b/app/models/chouette/stop_point.rb
index 6b363cd93..da2da998a 100644
--- a/app/models/chouette/stop_point.rb
+++ b/app/models/chouette/stop_point.rb
@@ -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