diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/export.rb | 1 | ||||
| -rw-r--r-- | app/models/export_report.rb | 1 | ||||
| -rw-r--r-- | app/models/import.rb | 2 | ||||
| -rw-r--r-- | app/models/import_report.rb | 1 | ||||
| -rw-r--r-- | app/models/import_task.rb | 1 | ||||
| -rw-r--r-- | app/models/validation.rb | 55 | ||||
| -rw-r--r-- | app/models/validation_export.rb | 54 | ||||
| -rw-r--r-- | app/models/validation_report.rb | 117 | 
8 files changed, 143 insertions, 89 deletions
diff --git a/app/models/export.rb b/app/models/export.rb index 5cd0db17e..95317504a 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -1,6 +1,7 @@  class Export    extend Enumerize    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Model      attr_reader :datas diff --git a/app/models/export_report.rb b/app/models/export_report.rb index f739bf1a9..a843d8148 100644 --- a/app/models/export_report.rb +++ b/app/models/export_report.rb @@ -1,5 +1,6 @@  class ExportReport    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Model    attr_reader :datas, :errors, :metadatas diff --git a/app/models/import.rb b/app/models/import.rb index 9629881d3..f596fe82a 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -1,6 +1,7 @@  class Import    extend Enumerize    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Model      # enumerize :status, in: %w{started scheduled terminated canceled aborted}, default: "created", predicates: true @@ -10,6 +11,7 @@ class Import    def initialize( response  )          @datas = response +    Validation.new(response)      # @status = @datas.status.downcase if @datas.status?      # @format = @datas.type.downcase if @datas.type?    end diff --git a/app/models/import_report.rb b/app/models/import_report.rb index fff209e8e..803460fb8 100644 --- a/app/models/import_report.rb +++ b/app/models/import_report.rb @@ -1,5 +1,6 @@  class ImportReport    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Model    attr_reader :datas diff --git a/app/models/import_task.rb b/app/models/import_task.rb index d53c04766..dc1ab1ba7 100644 --- a/app/models/import_task.rb +++ b/app/models/import_task.rb @@ -3,6 +3,7 @@ require "zip"  class ImportTask    extend Enumerize    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Validations    include ActiveModel::Conversion diff --git a/app/models/validation.rb b/app/models/validation.rb index d674c79dc..d97d854cc 100644 --- a/app/models/validation.rb +++ b/app/models/validation.rb @@ -1,29 +1,50 @@  class Validation    extend Enumerize    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Model      # enumerize :status, in: %w{created scheduled terminated canceled aborted}, default: "created", predicates: true    # enumerize :format, in: %w{neptune netex gtfs}, default: "neptune", predicates: true    attr_reader :datas - -  def initialize( response  )     +   +  def initialize(response)          @datas = response -    # @status = @datas.status.downcase if @datas.status? -    # @format = @datas.type.downcase if @datas.type?    end      def report -    report_path = datas.links.select{ |link| link["rel"] == "action_report"}.first.href +    report_path = datas.links.select{ |link| link["rel"] == "validation_report"}.first.href      if report_path              response = Ievkit.get(report_path)        ValidationReport.new(response)      else        raise Ievkit::IevError("Impossible to access report path link for validation")      end -  end  +  end +   +  def import +    if datas.action == "importer" +      Import.new(Ievkit.scheduled_job(referential_name, id, { :action => "importer" }) ) +    end +  end + +  def export +    if datas.action == "exporter" +      Export.new(Ievkit.scheduled_job(referential_name, id, { :action => "exporter" }) ) +    end +  end +  def rule_parameter_set +    rule_parameter_set = datas.links.select{ |link| link["rel"] == "validation_params"}.first.href +    if rule_parameter_set +      response = Ievkit.get(rule_parameter_set) +      rule_parameter_set = RuleParameterSet.new.tap { |rps| rps.parameters = response.validation } +    else +      raise Ievkit::Error("Impossible to access rule parameter set link for validation") +    end +  end +      def compliance_check      compliance_check_path = datas.links.select{ |link| link["rel"] == "validation_report"}.first.href      if compliance_check_path @@ -57,7 +78,23 @@ class Validation    end    def status -    datas.status +    # pending processing completed failed +    # CREATED, SCHEDULED, STARTED, TERMINATED, CANCELED, ABORTED, DELETED +    if datas.status == "CREATED" +      "pending" +    elsif datas.status == "SCHEDULED" +      "pending" +    elsif datas.status == "STARTED" +      "processing" +    elsif datas.status == "TERMINATED" +      "completed" +    elsif datas.status == "CANCELED" +      "failed" +    elsif datas.status == "ABORTED" +      "failed" +    elsif datas.status == "DELETED" +      "failed" +    end    end    def format @@ -81,6 +118,10 @@ class Validation        20      end    end + +  def referential_id +    Referential.where(:slug => referential_name).id +  end    def referential_name      datas.referential diff --git a/app/models/validation_export.rb b/app/models/validation_export.rb new file mode 100644 index 000000000..86ff2c477 --- /dev/null +++ b/app/models/validation_export.rb @@ -0,0 +1,54 @@ +require 'tempfile' + +class ValidationExport +  include ERB::Util +  include ValidationResultsHelper +   +  require 'zip' +   +  attr_accessor :template, :detailed_errors_template, :request +  attr_reader :validation +   +  def initialize(validation, referential_id, request) +    @request = request +    @validation = validation +    @referential_id = referential_id +    @template = File.open('app/views/validations/summary_errors_index.csv.erb' ) { |f| f.read } +    @detailed_errors_template = File.open('app/views/validations/detailed_errors_index.csv.erb' ) { |f| f.read } +  end +   +  def export +    begin +      Dir.mktmpdir("#{I18n.t('validation_results.file.zip_name_prefix')}_#{@referential_id}_#{@validation.id}_", Dir.tmpdir) { |temp_dir| +         +        File.open(temp_dir + "/#{I18n.t('validation_results.file.summary_errors_file_prefix')}" , "a") do |f| +          f.write(render) +          f.flush +        end +         +        File.open(temp_dir + "/#{I18n.t('validation_results.file.detailed_errors_file_prefix')}" , "a") do |f| +          f.write(detailed_errors_render) +          f.flush +        end +         +        zip_file = Tempfile.new(["#{I18n.t('validation_results.file.zip_name_prefix')}_#{@referential_id}_#{@validation.id}_", ".zip"]) +         +        ::Zip::File.open(zip_file.path, ::Zip::File::CREATE) do |zipfile| +          Dir[File.join(temp_dir, '*.csv')].each do |f| +            zipfile.add(File.basename(f), f) +          end +        end +        return zip_file +      } +    end +  end +   +  def render() +    ERB.new(@template).result(binding) +  end +   +  def detailed_errors_render() +    ERB.new(@detailed_errors_template).result(binding) +  end +   +end diff --git a/app/models/validation_report.rb b/app/models/validation_report.rb index 6c98776cd..7f9b8366d 100644 --- a/app/models/validation_report.rb +++ b/app/models/validation_report.rb @@ -1,111 +1,64 @@  class ValidationReport    extend ActiveModel::Naming +  extend ActiveModel::Translation    include ActiveModel::Model    attr_reader :datas -  def initialize( response ) -    @datas = response[:action_report] +  def initialize(response) +    @datas = response[:validation_report].tests.sort_by { |hash| [ hash[:severity], hash[:result], hash[:test_id]] }    end -  def zip_file -    datas.zip_file -  end - -  def error_files -    datas.files.select{ |file| file[:status] == "ERROR"} -  end - -  def ignored_files -    datas.files.select{ |file| file[:status] == "IGNORED"} -  end - -  def ok_files -    datas.files.select{ |file| file[:status] == "OK"} -  end -   -  def files -    datas.files -  end - -  def line_items -    [].tap do |line_items| -      datas.lines.each do |line| -        line_items << LineItem.new(line) -      end -    end -  end - -  def lines -    datas.stats.line_count if datas.stats.line_count? +  def ok_error +    @datas.select { |test| (test[:result] == "OK" && test[:severity] == "ERROR") }    end -  def routes -    datas.stats.route_count if datas.stats.route_count? +  def nok_error +    @datas.select { |test| (test[:result] == "NOK" && test[:severity] == "ERROR")}    end -  def connection_links -    datas.stats.connection_link_count if datas.stats.connection_link_count? +  def na_error +    @datas.select { |test| (test[:result] == "UNCHECK" && test[:severity] == "ERROR")}    end -   -  def time_tables -    datas.stats.time_table_count if datas.stats.time_table_count? -  end -   -  def stop_areas -    datas.stats.stop_area_count if datas.stats.stop_area_count? + +  def ok_warning +    @datas.select { |test| (test[:result] == "OK" && test[:severity] == "WARNING")}    end -  def access_points -    datas.stats.access_point_count if datas.stats.access_point_count? +  def nok_warning +    @datas.select { |test| (test[:result] == "NOK" && test[:severity] == "WARNING")}    end -  def vehicle_journeys -    datas.stats.vehicle_journey_count if datas.stats.vehicle_journey_count? +  def na_warning +    @datas.select { |test| (test[:result] == "UNCHECK" && test[:severity] == "WARNING")}    end -  def journey_patterns -    datas.stats.journey_pattern_count if datas.stats.journey_pattern_count? +  def mandatory_tests +    @datas.select { |test| test[:severity] == "ERROR"}    end -   -  class LineItem -    attr_reader :name, :status, :stats -     -    def initialize( options = Hashie::Mash.new ) -      @name = options.name if options.name? -      @status = options.status if options.status? -      @stats = options.stats if options.stats? -    end -     -    def routes -      stats.route_count -    end -    def connection_links -      stats.connection_link_count -    end +  def optional_tests +    @datas.select { |test| test[:severity] == "WARNING"} +  end -    def time_tables -      stats.time_table_count -    end +  def ok_tests +    @datas.select { |test| test[:result] == "OK"} +  end -    def stop_areas -      stats.stop_area_count -    end +  def nok_tests +    @datas.select { |test| test[:result] == "NOK"} +  end -    def access_points -      stats.access_point_count -    end -     -    def vehicle_journeys -      stats.vehicle_journey_count -    end +  def uncheck_tests +    @datas.select { |test| test[:result] == "UNCHECK"} +  end -    def journey_patterns -      stats.journey_pattern_count -    end +  def all(status, severity) +    @datas.select { |test| ( test[:result] == status && test[:severity] == severity ) } +  end +  def validation_results +    return @datas    end  end -  | 
