| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 | class JourneyPatternsCollectionsController < ChouetteController
  include ReferentialSupport
  defaults :resource_class => Chouette::JourneyPattern
  before_action :user_permissions, only: :show
  respond_to :html
  respond_to :json
  belongs_to :referential do
    belongs_to :line, :parent_class => Chouette::Line do
      belongs_to :route, :parent_class => Chouette::Route
    end
  end
  alias_method :vehicle_journeys, :collection
  alias_method :route, :parent
  alias_method :vehicle_journey, :resource
  def show
    @q = route.journey_patterns
    if params[:q].present?
      ids = @q.search(params[:q]).result(distinct: true).pluck(:id)
      @q = @q.where(id: ids)
    end
    @q = @q.includes(:stop_points)
    @ppage = 10
    @journey_patterns ||= @q.paginate(page: params[:page], per_page: @ppage).order(:name)
    @custom_fields = Chouette::JourneyPattern.custom_fields_definitions(referential.workgroup)
    respond_to do |format|
      format.json do
        @journey_patterns = @journey_patterns.includes(stop_points: {stop_area: :stop_area_referential})
      end
      format.html do
        @stop_points_list = []
        route.stop_points.includes(:stop_area).each do |sp|
          @stop_points_list << {
            :id => sp.stop_area.id,
            :route_id => sp.try(:route_id),
            :object_id => sp.try(:objectid),
            :stop_area_object_id => sp.stop_area.try(:objectid),
            :position => sp.try(:position),
            :for_boarding => sp.try(:for_boarding),
            :for_alighting => sp.try(:for_alighting),
            :name => sp.stop_area.try(:name),
            :zip_code => sp.stop_area.try(:zip_code),
            :city_name => sp.stop_area.try(:city_name),
            :country_name => sp.stop_area.try(:country_name),
            :time_zone_formatted_offset => sp.stop_area.try(:time_zone_formatted_offset),
            :comment => sp.stop_area.try(:comment),
            :area_type => sp.stop_area.try(:area_type),
            :registration_number => sp.stop_area.try(:registration_number),
            :nearest_topic_name => sp.stop_area.try(:nearest_topic_name),
            :fare_code => sp.stop_area.try(:fare_code),
            :longitude => sp.stop_area.try(:longitude),
            :latitude => sp.stop_area.try(:latitude),
            :long_lat_type => sp.stop_area.try(:long_lat_type),
            :country_code => sp.stop_area.try(:country_code),
            :street_name => sp.stop_area.try(:street_name)
          }
        end
        @stop_points_list = @stop_points_list.sort_by {|a| a[:position] }
      end
    end
  end
  def user_permissions
    @features = Hash[*current_organisation.features.map{|f| [f, true]}.flatten].to_json
    policy = policy(:journey_pattern)
    @perms =
      %w{create destroy update}.inject({}) do | permissions, action |
        permissions.merge( "journey_patterns.#{action}" => policy.authorizes_action?(action) )
      end.to_json
  end
  def update
    state  = JSON.parse request.raw_post
    Chouette::JourneyPattern.state_update route, state
    @resources = route.journey_patterns
    errors = state.any? {|item| item['errors']}
    respond_to do |format|
      format.json { render json: state, status: errors ? :unprocessable_entity : :ok }
    end
  end
  protected
end
 |