diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/chouette/route.rb | 6 | ||||
| -rw-r--r-- | app/models/chouette/stop_area.rb | 30 | ||||
| -rw-r--r-- | app/models/chouette/stop_point.rb | 3 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 1 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey_at_stop.rb | 4 | ||||
| -rw-r--r-- | app/models/simple_importer.rb | 16 | ||||
| -rw-r--r-- | app/models/simple_interface.rb | 7 | ||||
| -rw-r--r-- | app/models/simple_interfaces_group.rb | 4 | 
8 files changed, 53 insertions, 18 deletions
| diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb index 949b18d6f..6a02203ad 100644 --- a/app/models/chouette/route.rb +++ b/app/models/chouette/route.rb @@ -63,6 +63,9 @@ module Chouette          where(" position between ? and ? ", between_positions.first, between_positions.last)        end      end + +    has_many :vehicle_journey_at_stops, through: :vehicle_journeys +      has_many :stop_areas, -> { order('stop_points.position ASC') }, :through => :stop_points do        def between(departure, arrival)          departure, arrival = [departure, arrival].map do |endpoint| @@ -166,7 +169,8 @@ module Chouette      end      def time_tables -      vehicle_journeys.joins(:time_tables).map(&:"time_tables").flatten.uniq +      ids = vehicle_journeys.joins(:time_tables).pluck('time_tables.id').uniq +      Chouette::TimeTable.where(id: ids)      end      def sorted_vehicle_journeys(journey_category_model) diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb index b933e1944..25a0010d8 100644 --- a/app/models/chouette/stop_area.rb +++ b/app/models/chouette/stop_area.rb @@ -383,6 +383,28 @@ module Chouette        end      end +    def self.ransackable_scopes(auth_object = nil) +      [:by_status] +    end + + +    def self.by_status(*statuses) +      return Chouette::StopArea.all if statuses.reject(&:blank?).length == 3 || statuses.reject(&:blank?).empty? + +      status = { +        in_creation: statuses.include?('in_creation'), +        confirmed: statuses.include?('confirmed'), +        deactivated: statuses.include?('deactivated'), +      } + +      query = [] +      query << "deleted_at IS NOT NULL" if statuses.include?('deactivated') +      query << "(confirmed_at IS NULL AND deleted_at IS NULL)" if statuses.include?('in_creation') +      query << "(confirmed_at IS NOT NULL AND deleted_at IS NULL)" if statuses.include?('confirmed') + +      Chouette::StopArea.where(query.join(' OR ')) +    end +      def activated?        !!(deleted_at.nil? && confirmed_at)      end @@ -410,7 +432,7 @@ module Chouette      end      def status -      return :deleted if deleted_at +      return :deactivated if deleted_at        return :confirmed if confirmed_at        :in_creation @@ -418,7 +440,7 @@ module Chouette      def status=(status)        case status&.to_sym -      when :deleted +      when :deactivated          deactivate        when :confirmed          activate @@ -428,7 +450,7 @@ module Chouette      end      def self.statuses -      %i{in_creation confirmed deleted} +      %i{in_creation confirmed deactivated}      end      def time_zone_offset @@ -441,7 +463,7 @@ module Chouette        return unless ActiveSupport::TimeZone[time_zone].present?        ActiveSupport::TimeZone[time_zone].tzinfo.name      end -     +      def country        return unless country_code        country = ISO3166::Country[country_code] diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb index edb0e81fd..82bedc6ab 100644 --- a/app/models/chouette/stop_point.rb +++ b/app/models/chouette/stop_point.rb @@ -10,6 +10,7 @@ module Chouette      include ObjectidSupport      belongs_to :stop_area +    belongs_to :stop_area_light, -> {select(:name, :city_name, :zip_code, :time_zone)}, class_name: "Chouette::StopArea", foreign_key: :stop_area_id      belongs_to :route, inverse_of: :stop_points      has_many :journey_patterns, through: :route      has_many :vehicle_journey_at_stops, :dependent => :destroy @@ -27,7 +28,7 @@ module Chouette      scope :default_order, -> { order("position") } -    delegate :name, :registration_number, :kind, :area_type, to: :stop_area +    delegate :name, :registration_number, :kind, :area_type, to: :stop_area_light      before_destroy :remove_dependent_journey_pattern_stop_points      def remove_dependent_journey_pattern_stop_points diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 818287b04..3bbd89f7b 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -21,6 +21,7 @@ module Chouette      belongs_to :company      belongs_to :route      belongs_to :journey_pattern +    belongs_to :journey_pattern_only_objectid, -> {select("journey_patterns.objectid")}, class_name: "Chouette::JourneyPattern", foreign_key: :journey_pattern_id      has_many :stop_areas, through: :journey_pattern      has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote' diff --git a/app/models/chouette/vehicle_journey_at_stop.rb b/app/models/chouette/vehicle_journey_at_stop.rb index 3f5bd5abf..797571070 100644 --- a/app/models/chouette/vehicle_journey_at_stop.rb +++ b/app/models/chouette/vehicle_journey_at_stop.rb @@ -101,8 +101,8 @@ module Chouette      end      def time_zone_offset -      return 0 unless stop_point&.stop_area&.time_zone.present? -      ActiveSupport::TimeZone[stop_point.stop_area.time_zone]&.utc_offset || 0 +      return 0 unless stop_point&.stop_area_light&.time_zone.present? +      ActiveSupport::TimeZone[stop_point.stop_area_light.time_zone]&.utc_offset || 0      end      private diff --git a/app/models/simple_importer.rb b/app/models/simple_importer.rb index 4cfe90cff..d47ff6a92 100644 --- a/app/models/simple_importer.rb +++ b/app/models/simple_importer.rb @@ -42,8 +42,10 @@ class SimpleImporter < SimpleInterface    end    def dump_csv_from_context -    dir = context[:logs_output_dir] || "log/importers" -    filepath = File.join dir, "#{self.configuration_name}_#{Time.now.strftime "%y%m%d%H%M"}.csv" +    dir = @output_dir +    FileUtils.mkdir_p dir + +    filepath = File.join dir, "#{self.configuration_name}_#{Time.now.strftime "%y%m%d%H%M"}_dump.csv"      # for some reason, context[:csv].to_csv does not work      CSV.open(filepath, 'w') do |csv|        header = true @@ -131,14 +133,16 @@ class SimpleImporter < SimpleInterface            @current_attribute = col[:attribute]            val = col[:value]            if val.nil? || val.is_a?(Proc) -            if row.has_key? col.name -              if val.is_a?(Proc) +            if val.is_a?(Proc) +              if row.has_key? col.name                  val = instance_exec(row[col.name], &val)                else -                val = row[col.name] +                val = instance_exec(&val)                end +            elsif row.has_key? col.name +              val = row[col.name]              else -              push_in_journal({event: :column_not_found, message: "Column not found: #{col.name}", kind: :warning}) +              push_in_journal({event: :column_not_found, message: "Column not found: #{col.name || col.attribute}", kind: :warning})                self.status ||= :success_with_warnings              end            end diff --git a/app/models/simple_interface.rb b/app/models/simple_interface.rb index 7b04a07df..d5feafb07 100644 --- a/app/models/simple_interface.rb +++ b/app/models/simple_interface.rb @@ -97,13 +97,14 @@ class SimpleInterface < ApplicationModel    def write_output_to_csv      cols = %i(line kind event message error) -    if self.journal.size > 0 && self.journal.first[:row].present? +    journal = self.journal && self.journal.map(&:symbolize_keys) +    if journal && journal.size > 0 && journal.first[:row].present?        log "Writing output log"        FileUtils.mkdir_p @output_dir -      keys = self.journal.first[:row].map(&:first) +      keys = journal.first[:row].map(&:first)        CSV.open(output_filepath, "w") do |csv|          csv << cols + keys -        self.journal.each do |j| +        journal.each do |j|            csv << cols.map{|c| j[c]} + j[:row].map(&:last)          end        end diff --git a/app/models/simple_interfaces_group.rb b/app/models/simple_interfaces_group.rb index 808be6570..1e13bd0b5 100644 --- a/app/models/simple_interfaces_group.rb +++ b/app/models/simple_interfaces_group.rb @@ -30,7 +30,9 @@ class SimpleInterfacesGroup      name = "### #{self.name} ###"      centered_name = " " * ([width - name.size, 0].max / 2) + name -    banner = [centered_name, ""] +    banner = [centered_name] +    banner << "Output to: #{shared_options[:output_dir]}" if shared_options && shared_options[:output_dir] +    banner << ""      banner << @interfaces.each_with_index.map do |interface, i|        if interface[:interface].status.present?          SimpleInterface.colorize interface[:name], SimpleInterface.status_color(interface[:interface].status) | 
