diff options
| author | Xinhui | 2017-02-20 11:51:58 +0100 |
|---|---|---|
| committer | Xinhui | 2017-02-20 11:52:06 +0100 |
| commit | 893cc9d5683ae04e202cbe0560261b2a7c2f90fb (patch) | |
| tree | 5c6007073bb31d3879131ffb8edf6f99f12d6208 | |
| parent | 86cd6fb168b94debc3fc0eb99ac61f1a9b9b0049 (diff) | |
| download | chouette-core-893cc9d5683ae04e202cbe0560261b2a7c2f90fb.tar.bz2 | |
Vehicle Journey update state for arrival & departure time
| -rw-r--r-- | app/controllers/vehicle_journeys_collections_controller.rb | 7 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 27 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/show.rabl | 2 | ||||
| -rw-r--r-- | db/schema.rb | 69 | ||||
| -rw-r--r-- | spec/models/chouette/vehicle_journey_spec.rb | 49 |
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 |
