| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 | class ComplianceCheckTask < ActiveRecord::Base
  attr_accessor :rule_parameter_set_id
  belongs_to :referential
  belongs_to :import_task
  validates_presence_of :referential
  validates_presence_of :user_id
  validates_presence_of :user_name
  validates_inclusion_of :status, :in => %w{ pending processing completed failed }
  has_many :compliance_check_results, :order => :status
  serialize :parameter_set, JSON
  include ::TypeIdsModelable
  def any_error_severity_failure?
    return false if compliance_check_results.empty? || compliance_check_results.nil?
    compliance_check_results.any? { |r| r.error_severity_failure? }
  end
  def failed?
    status == "failed"
  end
  
  def chouette_command
    Chouette::Command.new(:schema => referential.slug)
  end
  before_validation :define_default_attributes, :on => :create
  def define_default_attributes
    self.status ||= "pending"
    if self.rule_parameter_set
      self.parameter_set = self.rule_parameter_set.parameters
      self.parameter_set_name = self.rule_parameter_set.name
    end
  end
  @@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company, Chouette::GroupOfLine ]
  cattr_reader :references_types
  #validates_inclusion_of :references_type, :in => references_types.map(&:to_s), :allow_blank => true, :allow_nil => true
  after_destroy :destroy_import_task
  def destroy_import_task
    import_task.destroy if import_task
  end
  def delayed_validate
    delay.validate if import_task.blank?
  end
  def name
    "#{self.class.model_name.human} #{id}"
  end
  def levels
    [].tap do |l|
      l.concat( [1 , 2]) if self.import_task
      l << 3 if self.parameter_set
    end
  end
  def level1?
    levels.include?( 1)
  end
  def level2?
    levels.include?( 2)
  end
  def level3?
    levels.include?( 3)
  end
  def rule_parameter_set_archived
    return nil unless parameter_set
    RuleParameterSet.new( :name => parameter_set_name).tap do |rs|
      rs.parameters = parameter_set
    end
  end
  def rule_parameter_set
    return nil if self.rule_parameter_set_id.blank?
    RuleParameterSet.find( self.rule_parameter_set_id)
  end
  def chouette_command_args
    {:c => "validate", :id => id}
  end
  def validate
    begin
      chouette_command.run! chouette_command_args
      update_attribute :status, "completed"
    rescue => e
      Rails.logger.error "Validation #{id} failed : #{e}, #{e.backtrace}"
      update_attribute :status, "failed"
    end
  end
end
 |