diff options
| author | Zog | 2018-04-04 15:41:37 +0200 |
|---|---|---|
| committer | Zog | 2018-04-04 15:41:37 +0200 |
| commit | b7a70ae0cea3221667b4b490dbae8bc0712321b0 (patch) | |
| tree | 12d2ad997f4255ac2a8dfe7ebd58347efcc04f02 /app/models | |
| parent | 23318bbe07b73cef50ec69d5e597386a116e2b82 (diff) | |
| download | chouette-core-b7a70ae0cea3221667b4b490dbae8bc0712321b0.tar.bz2 | |
Refs 6226; Add a button to create opposite routes
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/chouette/route.rb | 24 | ||||
| -rw-r--r-- | app/models/chouette/stop_point.rb | 3 |
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 42a207774..27407243b 100644 --- a/app/models/chouette/stop_point.rb +++ b/app/models/chouette/stop_point.rb @@ -46,11 +46,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 |
