diff options
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/api/v1/netex_imports_controller.rb | 39 | ||||
| -rw-r--r-- | app/controllers/application_controller.rb | 3 | ||||
| -rw-r--r-- | app/controllers/chouette_controller.rb | 1 | ||||
| -rw-r--r-- | app/controllers/concerns/metadata_controller_support.rb | 26 | ||||
| -rw-r--r-- | app/controllers/concerns/paper_trail_support.rb | 11 | ||||
| -rw-r--r-- | app/controllers/journey_patterns_collections_controller.rb | 1 | ||||
| -rw-r--r-- | app/controllers/lines_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/purchase_windows_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/time_tables_controller.rb | 46 | ||||
| -rw-r--r-- | app/controllers/vehicle_journeys_collections_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/vehicle_journeys_controller.rb | 2 | 
11 files changed, 78 insertions, 63 deletions
| diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb index 2654fa088..186ddc35c 100644 --- a/app/controllers/api/v1/netex_imports_controller.rb +++ b/app/controllers/api/v1/netex_imports_controller.rb @@ -25,56 +25,19 @@ module Api        def create_models          find_workbench -        create_referential          create_netex_import        end        def create_netex_import          attributes = netex_import_params.merge creator: "Webservice" - -        attributes = attributes.merge referential_id: @new_referential.id -          @netex_import = Import::Netex.new attributes          @netex_import.save! - -        unless @netex_import.referential -          Rails.logger.info "Can't create referential for import #{@netex_import.id}: #{@new_referential.inspect} #{@new_referential.metadatas.inspect} #{@new_referential.errors.full_messages}" -          @netex_import.messages.create criticity: :error, message_key: "referential_creation" -        end +        @netex_import.create_referential!        rescue ActiveRecord::RecordInvalid          render json: {errors: @netex_import.errors}, status: 406          finish_action!        end -      def create_referential -        @new_referential = -          Referential.new( -            name: netex_import_params['name'], -            organisation_id: @workbench.organisation_id, -            workbench_id: @workbench.id, -            metadatas: [metadata] -          ) -        @new_referential.save -      end - -      def metadata -        metadata = ReferentialMetadata.new - -        if netex_import_params['file'] -          netex_file = STIF::NetexFile.new(netex_import_params['file'].to_io) -          frame = netex_file.frames.first - -          if frame -            metadata.periodes = frame.periods - -            line_objectids = frame.line_refs.map { |ref| "STIF:CODIFLIGNE:Line:#{ref}" } -            metadata.line_ids = @workbench.lines.where(objectid: line_objectids).pluck(:id) -          end -        end - -        metadata -      end -        def netex_import_params          params            .require('netex_import') diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9a83394e2..8b66e6097 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,5 @@  class ApplicationController < ActionController::Base -  include PaperTrailSupport +  include MetadataControllerSupport    include Pundit    include FeatureChecker @@ -10,7 +10,6 @@ class ApplicationController < ActionController::Base    before_action :authenticate_user!    before_action :set_locale -    # Load helpers in rails engine    helper LanguageEngine::Engine.helpers diff --git a/app/controllers/chouette_controller.rb b/app/controllers/chouette_controller.rb index 3e4f3af27..e6e7c0a8a 100644 --- a/app/controllers/chouette_controller.rb +++ b/app/controllers/chouette_controller.rb @@ -1,4 +1,3 @@  class ChouetteController < InheritedResources::Base -  include PaperTrailSupport    include ApplicationHelper  end diff --git a/app/controllers/concerns/metadata_controller_support.rb b/app/controllers/concerns/metadata_controller_support.rb new file mode 100644 index 000000000..db83e79ae --- /dev/null +++ b/app/controllers/concerns/metadata_controller_support.rb @@ -0,0 +1,26 @@ +module MetadataControllerSupport +  extend ActiveSupport::Concern + +  included do +    after_action :set_creator_metadata, only: :create +    after_action :set_modifier_metadata, only: :update +  end + +  def user_for_metadata +    current_user ? current_user.username : '' +  end + +  def set_creator_metadata +    if resource.valid? +      resource.try(:set_metadata!, :creator_username, user_for_metadata) +      resource.try(:set_metadata!, :modifier_username, user_for_metadata) +    end +  end + +  def set_modifier_metadata +    _resource = @resources || [resource] +    _resource.flatten.each do |r| +      r.try :set_metadata!, :modifier_username, user_for_metadata +    end +  end +end diff --git a/app/controllers/concerns/paper_trail_support.rb b/app/controllers/concerns/paper_trail_support.rb deleted file mode 100644 index 4b0b1a7c7..000000000 --- a/app/controllers/concerns/paper_trail_support.rb +++ /dev/null @@ -1,11 +0,0 @@ -module PaperTrailSupport -  extend ActiveSupport::Concern - -  included do -    before_action :set_paper_trail_whodunnit - -    def user_for_paper_trail -      current_user ? current_user.name : '' -    end -  end -end diff --git a/app/controllers/journey_patterns_collections_controller.rb b/app/controllers/journey_patterns_collections_controller.rb index da567779e..db92d48f3 100644 --- a/app/controllers/journey_patterns_collections_controller.rb +++ b/app/controllers/journey_patterns_collections_controller.rb @@ -74,6 +74,7 @@ class JourneyPatternsCollectionsController < ChouetteController    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| diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb index ae8c9ed0c..cd8091252 100644 --- a/app/controllers/lines_controller.rb +++ b/app/controllers/lines_controller.rb @@ -122,7 +122,7 @@ class LinesController < ChouetteController    end    def line_params -    params.require(:line).permit( +    out = params.require(:line).permit(        :transport_mode,        :network_id,        :company_id, @@ -148,6 +148,8 @@ class LinesController < ChouetteController        :secondary_company_ids => [],        footnotes_attributes: [:code, :label, :_destroy, :id]      ) +    out[:secondary_company_ids] = (out[:secondary_company_ids] || []).select(&:present?) +    out    end     # Fake ransack filter diff --git a/app/controllers/purchase_windows_controller.rb b/app/controllers/purchase_windows_controller.rb index 293a7d8e4..cf73d0ed1 100644 --- a/app/controllers/purchase_windows_controller.rb +++ b/app/controllers/purchase_windows_controller.rb @@ -63,7 +63,9 @@ class PurchaseWindowsController < ChouetteController    def ransack_contains_date      date =[] -    if params[:q] && params[:q]['contains_date(1i)'].present? +    if params[:q] && params[:q]['contains_date'].present? +      params[:q]['contains_date'] = @date = params[:q]['contains_date'].to_date +    elsif params[:q] && params[:q]['contains_date(1i)'].present?        ['contains_date(1i)', 'contains_date(2i)', 'contains_date(3i)'].each do |key|          date << params[:q][key].to_i          params[:q].delete(key) diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb index 0dcadad1e..2ac8532e0 100644 --- a/app/controllers/time_tables_controller.rb +++ b/app/controllers/time_tables_controller.rb @@ -128,12 +128,43 @@ class TimeTablesController < ChouetteController      scope = self.ransack_period_range(scope: scope, error_message: t('referentials.errors.validity_period'), query: :overlapping)      @q = scope.search(params[:q]) -    if sort_column && sort_direction -      @time_tables ||= @q.result(:distinct => true).order("#{sort_column} #{sort_direction}") -    else -      @time_tables ||= @q.result(:distinct => true).order(:comment) +    @time_tables ||= begin +      time_tables = @q.result(:distinct => true) +      if sort_column == "bounding_dates" +        time_tables = @q.result(:distinct => false).paginate(page: params[:page], per_page: 10) +        ids = time_tables.pluck(:id).uniq +        query = """ +        WITH time_tables_dates AS( +        SELECT time_tables.id, time_table_dates.date FROM time_tables +        LEFT JOIN time_table_dates ON time_table_dates.time_table_id = time_tables.id +        WHERE time_table_dates.in_out IS NULL OR time_table_dates.in_out = 't' +        UNION +        SELECT time_tables.id, time_table_periods.period_start FROM time_tables +        LEFT JOIN time_table_periods ON time_table_periods.time_table_id = time_tables.id +        ) +        SELECT time_tables.id, MIN(time_tables_dates.date) AS min_date FROM time_tables +        INNER JOIN time_tables_dates ON time_tables_dates.id = time_tables.id +        WHERE time_tables.id IN (#{ids.map(&:to_s).join(',')}) +        GROUP BY time_tables.id +        ORDER BY min_date #{sort_direction} +  """ + +        ordered_ids =  ActiveRecord::Base.connection.exec_query(query).map {|r| r["id"]} +        order_by = ["CASE"] +        ordered_ids.each_with_index do |id, index| +          order_by << "WHEN id='#{id}' THEN #{index}" +        end +        order_by << "END" +        time_tables = time_tables.order(order_by.join(" ")) +      elsif sort_column == "vehicle_journeys_count" +        time_tables = time_tables.joins("LEFT JOIN time_tables_vehicle_journeys ON time_tables_vehicle_journeys.time_table_id = time_tables.id LEFT JOIN vehicle_journeys ON vehicle_journeys.id = time_tables_vehicle_journeys.vehicle_journey_id")\ +          .group("time_tables.id").select('time_tables.*, COUNT(vehicle_journeys.id) as vehicle_journeys_count').order("#{sort_column} #{sort_direction}") +      else +        time_tables = time_tables.order("#{sort_column} #{sort_direction}") +      end +      time_tables = time_tables.paginate(page: params[:page], per_page: 10) +      time_tables      end -    @time_tables = @time_tables.paginate(page: params[:page], per_page: 10)    end    def select_time_tables @@ -155,7 +186,10 @@ class TimeTablesController < ChouetteController    private    def sort_column -    referential.time_tables.column_names.include?(params[:sort]) ? params[:sort] : 'comment' +    valid_cols = referential.time_tables.column_names +    valid_cols << "bounding_dates" +    valid_cols << "vehicle_journeys_count" +    valid_cols.include?(params[:sort]) ? params[:sort] : 'comment'    end    def sort_direction      %w[asc desc].include?(params[:direction]) ?  params[:direction] : 'asc' diff --git a/app/controllers/vehicle_journeys_collections_controller.rb b/app/controllers/vehicle_journeys_collections_controller.rb index 712bcc154..a117888ab 100644 --- a/app/controllers/vehicle_journeys_collections_controller.rb +++ b/app/controllers/vehicle_journeys_collections_controller.rb @@ -9,8 +9,8 @@ class VehicleJourneysCollectionsController < ChouetteController    alias_method :route, :parent    def update -    state  = JSON.parse request.raw_post -    Chouette::VehicleJourney.state_update route, state +    state = JSON.parse request.raw_post +    @resources = Chouette::VehicleJourney.state_update route, state      errors = state.any? {|item| item['errors']}      respond_to do |format| diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index 821ea83ff..220f2d29e 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -154,7 +154,7 @@ class VehicleJourneysController < ChouetteController    private    def load_custom_fields -    @custom_fields = referential.workgroup&.custom_fields_definitions || {} +    @custom_fields = Chouette::VehicleJourney.custom_fields_definitions(referential.workgroup)      @extra_headers = Rails.application.config.vehicle_journeys_extra_headers.dup.delete_if do |header|        header[:type] == :custom_field and not @custom_fields.has_key?(header[:name].to_s) | 
