diff options
| author | Alban Peignier | 2017-12-20 22:20:02 +0100 | 
|---|---|---|
| committer | GitHub | 2017-12-20 22:20:02 +0100 | 
| commit | b012deb3ec8626d2d114dd725cfaeed363e08e25 (patch) | |
| tree | de17c3b082391b104b868b9f591dbdd3acf2187b /app | |
| parent | 6b4b00a57d2c96ea9f2c663dd9892ccdd4fdbd29 (diff) | |
| parent | c683f940f274d9f9a9cbfb00e33c6f45a3526960 (diff) | |
| download | chouette-core-b012deb3ec8626d2d114dd725cfaeed363e08e25.tar.bz2 | |
Merge pull request #163 from af83/5341-create-referential-vehiclejourneys-controller
Create ReferentialVehicleJourneysController. Refs #5341
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/referential_vehicle_journeys_controller.rb | 17 | ||||
| -rw-r--r-- | app/decorators/referential_decorator.rb | 25 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey_at_stop.rb | 11 | ||||
| -rw-r--r-- | app/views/referential_vehicle_journeys/_filters.html.slim | 11 | ||||
| -rw-r--r-- | app/views/referential_vehicle_journeys/index.html.slim | 58 | 
5 files changed, 116 insertions, 6 deletions
| diff --git a/app/controllers/referential_vehicle_journeys_controller.rb b/app/controllers/referential_vehicle_journeys_controller.rb new file mode 100644 index 000000000..ad08699a5 --- /dev/null +++ b/app/controllers/referential_vehicle_journeys_controller.rb @@ -0,0 +1,17 @@ +# +# Browse all VehicleJourneys of the Referential +# +class ReferentialVehicleJourneysController < ChouetteController +  include ReferentialSupport +  defaults :resource_class => Chouette::VehicleJourney, collection_name: :vehicle_journeys + +  requires_feature :referential_vehicle_journeys + +  private + +  def collection +    @q ||= end_of_association_chain.ransack(params[:q]) +    @vehicle_journeys ||= @q.result.includes(:vehicle_journey_at_stops).paginate page: params[:page], per_page: 10 +  end + +end diff --git a/app/decorators/referential_decorator.rb b/app/decorators/referential_decorator.rb index 4103790aa..9ebb6f330 100644 --- a/app/decorators/referential_decorator.rb +++ b/app/decorators/referential_decorator.rb @@ -3,12 +3,19 @@ class ReferentialDecorator < Draper::Decorator    def action_links      policy = h.policy(object) -    links = [ -      Link.new( -        content: h.t('time_tables.index.title'), -        href: h.referential_time_tables_path(object) +    links = [] + +    if has_feature?(:referential_vehicle_journeys) +      links << Link.new( +        content: h.t('referential_vehicle_journeys.index.title'), +        href: h.referential_vehicle_journeys_path(object)        ) -    ] +    end + +    links << Link.new( +      content: h.t('time_tables.index.title'), +      href: h.referential_time_tables_path(object) +    )      if policy.clone?        links << Link.new( @@ -63,4 +70,12 @@ class ReferentialDecorator < Draper::Decorator      links    end + +  private + +  # TODO move to a base Decorator (ApplicationDecorator) +  def has_feature?(*feature) +    h.has_feature?(*features) rescue false +  end +  end diff --git a/app/models/chouette/vehicle_journey_at_stop.rb b/app/models/chouette/vehicle_journey_at_stop.rb index 6f0119e74..6b3c1e7de 100644 --- a/app/models/chouette/vehicle_journey_at_stop.rb +++ b/app/models/chouette/vehicle_journey_at_stop.rb @@ -75,5 +75,14 @@ module Chouette          attrs << self.arrival_day_offset.to_s        end      end + +    def departure +      departure_time.utc.strftime "%H:%M" if departure_time +    end + +    def arrival +      arrival_time.utc.strftime "%H:%M" if arrival_time +    end +    end -end
\ No newline at end of file +end diff --git a/app/views/referential_vehicle_journeys/_filters.html.slim b/app/views/referential_vehicle_journeys/_filters.html.slim new file mode 100644 index 000000000..963da8cea --- /dev/null +++ b/app/views/referential_vehicle_journeys/_filters.html.slim @@ -0,0 +1,11 @@ += search_form_for @q, url: referential_vehicle_journeys_path(@referential), html: {method: :get}, class: 'form form-filter' do |f| +  .ffg-row +    .input-group.search_bar +      = f.search_field :published_journey_name_or_objectid_cont, placeholder: t('.published_journey_name_or_objectid'), class: 'form-control' +      span.input-group-btn +        button.btn.btn-default#search-btn type='submit' +          span.fa.fa-search + +  .actions +    = link_to 'Effacer', referential_vehicle_journeys_path(@referential), class: 'btn btn-link' +    = f.submit 'Filtrer', class: 'btn btn-default' diff --git a/app/views/referential_vehicle_journeys/index.html.slim b/app/views/referential_vehicle_journeys/index.html.slim new file mode 100644 index 000000000..394f4a3f7 --- /dev/null +++ b/app/views/referential_vehicle_journeys/index.html.slim @@ -0,0 +1,58 @@ +- breadcrumb :referential_vehicle_journeys, @referential +- content_for :page_header_title, t('.title') + +.page_content +  .container-fluid +    - if params[:q].present? or @vehicle_journeys.present? +      .row +        .col-lg-12 +          = render 'filters' + +    - if @vehicle_journeys.present? +      .row +        .col-lg-12 +          .select_table +            = table_builder_2 @vehicle_journeys, +              [ \ +                TableBuilderHelper::Column.new( \ +                  name: t('objectid'), \ +                  attribute: Proc.new { |n| n.get_objectid.short_id }, \ +                  sortable: false \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :published_journey_name, \ +                  attribute: 'published_journey_name', \ +                  link_to: lambda do |vehicle_journey| \ +                    referential_line_route_vehicle_journeys_path(@referential, vehicle_journey.route.line, vehicle_journey.route) \ +                  end, \ +                  sortable: false \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :line, \ +                  attribute: Proc.new {|v| v.route.line.name}, \ +                  sortable: false \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :route, \ +                  attribute: Proc.new {|v| v.route.name}, \ +                  sortable: false \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :departure_time, \ +                  attribute: Proc.new {|v| v.vehicle_journey_at_stops.first&.departure }, \ +                  sortable: false \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :arrival_time, \ +                  attribute: Proc.new {|v| v.vehicle_journey_at_stops.last&.arrival }, \ +                  sortable: false \ +                ), \ +              ], +              cls: 'table has-filter has-search' + +          = new_pagination @vehicle_journeys, 'pull-right' + +    - unless @vehicle_journeys.any? +      .row.mt-xs +        .col-lg-12 +          = replacement_msg t('.search_no_results') | 
