diff options
| author | Xinhui | 2017-04-12 12:36:22 +0200 |
|---|---|---|
| committer | Xinhui | 2017-04-12 12:36:32 +0200 |
| commit | d7c6d5ce602219b9bfa47686542dd575f1fe2e50 (patch) | |
| tree | b418dd68f2a796b172fda0d90f960606f9fb8865 | |
| parent | 0ee6e6c7a85fa72d325ad32d8aa33583919692fd (diff) | |
| download | chouette-core-d7c6d5ce602219b9bfa47686542dd575f1fe2e50.tar.bz2 | |
Remove auto create vjas on jv create if all departure time is set to 00:00
Refs #3101
| -rw-r--r-- | app/controllers/vehicle_journeys_controller.rb | 48 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 13 | ||||
| -rw-r--r-- | config/initializers/ransack.rb | 13 | ||||
| -rw-r--r-- | spec/models/chouette/vehicle_journey_spec.rb | 15 |
4 files changed, 69 insertions, 20 deletions
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index 5382b1d4c..0f1d2142b 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -2,7 +2,6 @@ class VehicleJourneysController < ChouetteController defaults :resource_class => Chouette::VehicleJourney before_action :check_policy, only: [:edit, :update, :destroy] before_action :user_permissions, only: :index - before_action :ransack_params, only: :index respond_to :json, :only => :index respond_to :js, :only => [:select_journey_pattern, :edit, :new, :index] @@ -61,8 +60,7 @@ class VehicleJourneysController < ChouetteController } end - @jp_origin = Chouette::JourneyPattern.find_by(objectid: params[:jp]) - + @jp_origin = Chouette::JourneyPattern.find_by(objectid: params[:jp]) index! do if collection.out_of_bounds? @@ -80,14 +78,40 @@ class VehicleJourneysController < ChouetteController protected def collection + scope = route.vehicle_journeys.joins(:journey_pattern)# + scope = scope.joins('LEFT JOIN "vehicle_journey_at_stops" ON "vehicle_journey_at_stops"."vehicle_journey_id" = "vehicle_journeys"."id"') + + @q = scope.search filtered_ransack_params + grouping = ransack_periode_filter + @q.build_grouping(grouping) if grouping + @ppage = 20 - @q = route.sorted_vehicle_journeys('vehicle_journeys').search params[:q] - @vehicle_journeys = @q.result.paginate(:page => params[:page], :per_page => @ppage) + @vehicle_journeys = @q.result(distinct: true).paginate(:page => params[:page], :per_page => @ppage) @footnotes = route.line.footnotes.to_json @matrix = resource_class.matrix(@vehicle_journeys) @vehicle_journeys end + def ransack_periode_filter + if params[:q] + params[:q] = params[:q].reject{|k| params[:q][k] == 'undefined'} + between = [:departure_time_gteq, :departure_time_lteq].map do |filter| + "2000-01-01 #{params[:q]["vehicle_journey_at_stops_#{filter}"]}:00 UTC" + end + { + :m => 'or', + :vehicle_journey_at_stops_departure_time_between => between.join(' to '), + :vehicle_journey_at_stops_id_null => params[:q][:vehicle_journey_without_departure_time] + } + end + end + + def filtered_ransack_params + if params[:q] + params[:q].except(:vehicle_journey_at_stops_departure_time_gteq, :vehicle_journey_at_stops_departure_time_lteq) + end + end + def adapted_params params.tap do |adapted_params| adapted_params.merge!( :route => parent) @@ -121,20 +145,6 @@ class VehicleJourneysController < ChouetteController end private - def ransack_params - if params[:q] - params[:q] = params[:q].reject{|k| params[:q][k] == 'undefined'} - [:departure_time_gteq, :departure_time_lteq].each do |filter| - time = params[:q]["vehicle_journey_at_stops_#{filter}"] - params[:q]["vehicle_journey_at_stops_#{filter}"] = "2000-01-01 #{time}:00 UTC" - end - - if params[:q]['vehicle_journey_without_departure_time'] == 'false' - params[:q]["vehicle_journey_at_stops_departure_time_not_eq"] = '2000-01-01 00:00 UTC' - end - end - end - def vehicle_journey_params params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name, :published_journey_identifier, :comment, :transport_mode, diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index a4a363348..d4a235c68 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -81,6 +81,14 @@ module Chouette end end + def state_update_vjas? vehicle_journey_at_stops + departure_times = vehicle_journey_at_stops.map do |vjas| + "#{vjas['departure_time']['hour']}:#{vjas['departure_time']['minute']}" + end + times = departure_times.uniq + (times.count == 1 && times[0] == '00:00') ? false : true + end + def self.state_update route, state transaction do state.each do |item| @@ -88,7 +96,10 @@ module Chouette vj = find_by(objectid: item['objectid']) || state_create_instance(route, item) next if item['deletable'] && vj.persisted? && vj.destroy - vj.update_vjas_from_state(item['vehicle_journey_at_stops']) + if vj.state_update_vjas?(item['vehicle_journey_at_stops']) + vj.update_vjas_from_state(item['vehicle_journey_at_stops']) + end + vj.update_attributes(state_permited_attributes(item)) item['errors'] = vj.errors if vj.errors.any? end diff --git a/config/initializers/ransack.rb b/config/initializers/ransack.rb new file mode 100644 index 000000000..659ee4a79 --- /dev/null +++ b/config/initializers/ransack.rb @@ -0,0 +1,13 @@ +Ransack.configure do |config| + config.add_predicate 'between', + arel_predicate: 'between', + formatter: proc { |v| v.split(' to ') }, + type: :string +end +module Arel + module Predications + def between other + gteq(other[0]).and(lt(other[1])) + end + end +end diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb index c922731a7..8349199d2 100644 --- a/spec/models/chouette/vehicle_journey_spec.rb +++ b/spec/models/chouette/vehicle_journey_spec.rb @@ -59,6 +59,21 @@ describe Chouette::VehicleJourney, :type => :model do }.to change {Chouette::VehicleJourneyAtStop.count}.by(1) end + it 'should note save vehicle_journey_at_stops of newly created vj if all departure time is set to 00:00' do + new_vj = build(:vehicle_journey, objectid: nil, published_journey_name: 'dummy', route: route, journey_pattern: journey_pattern) + 2.times do + new_vj.vehicle_journey_at_stops << build(:vehicle_journey_at_stop, + :vehicle_journey => new_vj, + :stop_point => create(:stop_point), + :arrival_time => '2000-01-01 00:00:00 UTC', + :departure_time => '2000-01-01 00:00:00 UTC') + end + collection << vehicle_journey_to_state(new_vj) + expect { + Chouette::VehicleJourney.state_update(route, collection) + }.not_to change {Chouette::VehicleJourneyAtStop.count} + end + it 'should update vj journey_pattern' do state['journey_pattern'] = create(:journey_pattern).attributes.slice('id', 'name', 'objectid') Chouette::VehicleJourney.state_update(route, collection) |
