aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/export.rb1
-rw-r--r--app/models/export_report.rb1
-rw-r--r--app/models/import.rb2
-rw-r--r--app/models/import_report.rb1
-rw-r--r--app/models/import_task.rb1
-rw-r--r--app/models/validation.rb55
-rw-r--r--app/models/validation_export.rb54
-rw-r--r--app/models/validation_report.rb117
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
-