aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-02-20 11:51:58 +0100
committerXinhui2017-02-20 11:52:06 +0100
commit893cc9d5683ae04e202cbe0560261b2a7c2f90fb (patch)
tree5c6007073bb31d3879131ffb8edf6f99f12d6208
parent86cd6fb168b94debc3fc0eb99ac61f1a9b9b0049 (diff)
downloadchouette-core-893cc9d5683ae04e202cbe0560261b2a7c2f90fb.tar.bz2
Vehicle Journey update state for arrival & departure time
-rw-r--r--app/controllers/vehicle_journeys_collections_controller.rb7
-rw-r--r--app/models/chouette/vehicle_journey.rb27
-rw-r--r--app/views/vehicle_journeys/show.rabl2
-rw-r--r--db/schema.rb69
-rw-r--r--spec/models/chouette/vehicle_journey_spec.rb49
5 files changed, 119 insertions, 35 deletions
diff --git a/app/controllers/vehicle_journeys_collections_controller.rb b/app/controllers/vehicle_journeys_collections_controller.rb
index c32ffbbdd..caaa2258e 100644
--- a/app/controllers/vehicle_journeys_collections_controller.rb
+++ b/app/controllers/vehicle_journeys_collections_controller.rb
@@ -9,10 +9,9 @@ class VehicleJourneysCollectionsController < ChouetteController
def update
state = JSON.parse request.raw_post
- ap '-----------------'
- ap state
- ap '-----------------'
- errors = false
+ Chouette::VehicleJourney.state_update route, state
+ errors = state.any? {|item| item['errors']}
+
respond_to do |format|
format.json { render json: state, status: errors ? :unprocessable_entity : :ok }
end
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index b4bd38850..9b9d96df3 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -47,6 +47,33 @@ module Chouette
@presenter ||= ::VehicleJourneyPresenter.new( self)
end
+ def update_vehicle_journey_at_stops_state state
+ state.each do |vjas|
+ stop = vehicle_journey_at_stops.find(vjas['id'])
+ ['arrival_time', 'departure_time'].each do |field|
+ stop.assign_attributes({
+ field.to_sym => stop.send(field).change({ hour: vjas[field]['hour'], min: vjas[field]['minute'] })
+ })
+ end
+ stop.save
+ end
+ end
+
+ def self.state_update route, state
+ transaction do
+ state.each do |item|
+ item.delete('errors')
+ vj = find_by(objectid: item['objectid'])
+ vj.update_vehicle_journey_at_stops_state(item['vehicle_journey_at_stops'])
+ item['errors'] = vj.errors if vj.errors.any?
+ end
+
+ if state.any? {|item| item['errors']}
+ raise ActiveRecord::Rollback
+ end
+ end
+ end
+
def increasing_times
previous = nil
vehicle_journey_at_stops.select{|vjas| vjas.departure_time && vjas.arrival_time}.each do |vjas|
diff --git a/app/views/vehicle_journeys/show.rabl b/app/views/vehicle_journeys/show.rabl
index 58c82ea45..9dc1d6d40 100644
--- a/app/views/vehicle_journeys/show.rabl
+++ b/app/views/vehicle_journeys/show.rabl
@@ -34,7 +34,7 @@ end
child :vehicle_journey_at_stops, :object_root => false do |vehicle_stops|
node do |vehicle_stop|
node(:stop_area_object_id) { vehicle_stop.stop_point.stop_area.objectid }
- [:connecting_service_id, :boarding_alighting_possibility].map do |att|
+ [:id, :connecting_service_id, :boarding_alighting_possibility].map do |att|
node(att) { vehicle_stop.send(att) } unless vehicle_stop.send(att).nil?
end
diff --git a/db/schema.rb b/db/schema.rb
index 2a1c0334c..1436aee37 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,8 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20170213163747) do
-
+ActiveRecord::Schema.define(version: 20170215163027) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "postgis"
@@ -22,7 +21,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "access_point_id", limit: 8
t.integer "stop_area_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -45,7 +44,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
create_table "access_points", force: true do |t|
t.string "objectid"
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -117,8 +116,8 @@ ActiveRecord::Schema.define(version: 20170213163747) do
add_index "clean_ups", ["referential_id"], :name => "index_clean_ups_on_referential_id"
create_table "companies", force: true do |t|
- t.string "objectid", null: false
- t.integer "object_version"
+ t.string "objectid", null: false
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "short_name"
@@ -145,7 +144,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "departure_id", limit: 8
t.integer "arrival_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -184,7 +183,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "connection_link_id", limit: 8
t.integer "stop_point_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.datetime "creation_time"
t.string "creator_id"
t.string "name"
@@ -223,8 +222,8 @@ ActiveRecord::Schema.define(version: 20170213163747) do
end
create_table "group_of_lines", force: true do |t|
- t.string "objectid", null: false
- t.integer "object_version"
+ t.string "objectid", null: false
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -272,7 +271,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
create_table "journey_patterns", force: true do |t|
t.integer "route_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -333,7 +332,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "network_id", limit: 8
t.integer "company_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "number"
@@ -363,8 +362,8 @@ ActiveRecord::Schema.define(version: 20170213163747) do
add_index "lines", ["secondary_company_ids"], :name => "index_lines_on_secondary_company_ids"
create_table "networks", force: true do |t|
- t.string "objectid", null: false
- t.integer "object_version"
+ t.string "objectid", null: false
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.date "version_date"
t.string "description"
@@ -401,7 +400,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "end_of_link_id", limit: 8
t.integer "route_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -466,7 +465,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "departure_id", limit: 8
t.integer "arrival_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.float "distance"
t.boolean "no_processing"
@@ -479,7 +478,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
create_table "routes", force: true do |t|
t.integer "line_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -496,12 +495,12 @@ ActiveRecord::Schema.define(version: 20170213163747) do
create_table "routing_constraint_zones", force: true do |t|
t.string "name"
- t.integer "stop_area_ids", array: true
+ t.integer "stop_area_ids", array: true
t.integer "line_id"
t.datetime "created_at"
t.datetime "updated_at"
- t.string "objectid", null: false
- t.integer "object_version"
+ t.string "objectid", null: false
+ t.integer "object_version", limit: 8
t.string "creator_id"
end
@@ -557,7 +556,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
create_table "stop_areas", force: true do |t|
t.integer "parent_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
t.string "comment"
@@ -600,7 +599,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "route_id", limit: 8
t.integer "stop_area_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.integer "position"
t.string "for_boarding"
@@ -650,12 +649,12 @@ ActiveRecord::Schema.define(version: 20170213163747) do
add_index "time_table_periods", ["time_table_id"], :name => "index_time_table_periods_on_time_table_id"
create_table "time_tables", force: true do |t|
- t.string "objectid", null: false
- t.integer "object_version", default: 1
+ t.string "objectid", null: false
+ t.integer "object_version", limit: 8, default: 1
t.string "creator_id"
t.string "version"
t.string "comment"
- t.integer "int_day_types", default: 0
+ t.integer "int_day_types", default: 0
t.date "start_date"
t.date "end_date"
t.integer "calendar_id"
@@ -675,12 +674,22 @@ ActiveRecord::Schema.define(version: 20170213163747) do
add_index "time_tables_vehicle_journeys", ["vehicle_journey_id"], :name => "index_time_tables_vehicle_journeys_on_vehicle_journey_id"
create_table "timebands", force: true do |t|
- t.string "objectid", null: false
- t.integer "object_version"
+ t.string "objectid", null: false
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "name"
- t.time "start_time", null: false
- t.time "end_time", null: false
+ t.time "start_time", null: false
+ t.time "end_time", null: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "translations", force: true do |t|
+ t.string "locale"
+ t.string "key"
+ t.text "value"
+ t.text "interpolations"
+ t.boolean "is_proc", default: false
t.datetime "created_at"
t.datetime "updated_at"
end
@@ -744,7 +753,7 @@ ActiveRecord::Schema.define(version: 20170213163747) do
t.integer "journey_pattern_id", limit: 8
t.integer "company_id", limit: 8
t.string "objectid", null: false
- t.integer "object_version"
+ t.integer "object_version", limit: 8
t.string "creator_id"
t.string "comment"
t.string "status_value"
diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb
index 91f519a59..4f55ba774 100644
--- a/spec/models/chouette/vehicle_journey_spec.rb
+++ b/spec/models/chouette/vehicle_journey_spec.rb
@@ -1,6 +1,55 @@
require 'spec_helper'
describe Chouette::VehicleJourney, :type => :model do
+ describe "state_update" do
+ def vehicle_journey_to_state vj
+ vj.attributes.slice('objectid', 'published_journey_name', 'journey_pattern_id').tap do |item|
+ item['vehicle_journey_at_stops'] = []
+
+ vj.vehicle_journey_at_stops.each do |vs|
+ at_stops = {'stop_area_object_id' => vs.stop_point.stop_area.objectid }
+ [:id, :connecting_service_id, :boarding_alighting_possibility].map do |att|
+ at_stops[att.to_s] = vs.send(att) unless vs.send(att).nil?
+ end
+
+ [:arrival_time, :departure_time].map do |att|
+ at_stops[att.to_s] = {
+ 'hour' => vs.send(att).strftime('%H'),
+ 'minute' => vs.send(att).strftime('%M'),
+ }
+ end
+ item['vehicle_journey_at_stops'] << at_stops
+ end
+ end
+ end
+
+ let(:route) { create :route }
+ let(:vehicle_journey) { create :vehicle_journey, route: route }
+ let(:state) { vehicle_journey_to_state(vehicle_journey) }
+
+ it 'should update arrival_time' do
+ stop = state['vehicle_journey_at_stops'].first
+ stop['arrival_time']['hour'] = "10"
+ stop['arrival_time']['minute'] = "10"
+
+ vehicle_journey.update_vehicle_journey_at_stops_state(state['vehicle_journey_at_stops'])
+ stop = vehicle_journey.vehicle_journey_at_stops.find(stop['id'])
+ expect(stop.arrival_time).to eq('2000-01-01 10:10:00 UTC')
+ end
+
+ it 'should update departure_time' do
+ stop = state['vehicle_journey_at_stops'].first
+ stop['departure_time']['hour'] = "12"
+ stop['departure_time']['minute'] = "12"
+
+ vehicle_journey.update_vehicle_journey_at_stops_state(state['vehicle_journey_at_stops'])
+ stop = vehicle_journey.vehicle_journey_at_stops.find(stop['id'])
+ expect(stop.departure_time).to eq('2000-01-01 12:12:00 UTC')
+ end
+ end
+
+
+
subject { create(:vehicle_journey_odd) }
describe "in_relation_to_a_journey_pattern methods" do