aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/compliance_check_task.rb
blob: 7a344066f0aa76b84e0c2b56a71325c6aa356adc (plain)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
class ComplianceCheckTask
  extend Enumerize
  extend ActiveModel::Naming
  extend ActiveModel::Translation
  include ActiveModel::Model  
  attr_reader :datas
  
  def initialize(response)    
    @datas = response
  end
  
  def compliance_check_result
    report_path = datas.links.select{ |link| link["rel"] == "validation_report"}.first.href
    if report_path      
      response = Ievkit.get(report_path)
      ComplianceCheckResult.new(response)
    else
      raise Ievkit::IevError("Impossible to access report path link for validation")
    end
  end
  
  def import_task
    if datas.action == "importer"
      Import.new(Ievkit.scheduled_job(referential_name, id, { :action => "importer" }) )
    end
  end

  def export_task
    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
      response = Ievkit.get(compliance_check_path)
      ComplianceCheck.new(response)
    else
      raise Ievkit::Error("Impossible to access compliance check path link for validation")
    end
  end

  def delete
    delete_path =  datas.links.select{ |link| link["rel"] == "delete"}.first.href
    if delete_path
      Ievkit.delete(delete_path)
    else
      raise Ievkit::Error("Impossible to access delete path link for validation")
    end
  end

  def cancel
    cancel_path = datas.links.select{ |link| link["rel"] == "cancel"}.first.href
    if cancel_path
      Ievkit.delete(cancel_path)
    else
      raise Ievkit::Error("Impossible to access cancel path link for validation")
    end
  end

  def id
    datas.id
  end

  def 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
    datas.type
  end

  # def filename
  #   datas.links.select{ |link| link["rel"] == "data"}.first.href.gsub( /\/.*\//, "" )
  # end

  # def filename_extension
  #   File.extname(filename) if filename
  # end

  def percentage_progress
    if %w{created}.include? status
      0
    elsif %w{ terminated canceled aborted }.include? status
      100
    else
      20
    end
  end

  def referential_id
    Referential.where(:slug => referential_name).id
  end
  
  def referential_name
    datas.referential
  end
  
  def name
    datas.action_parameters.name
  end
  
  def user_name    
    datas.action_parameters.user_name
  end

  def no_save
    datas.action_parameters.no_save
  end

  def created_at?
    datas.created?
  end
  
  def created_at
    Time.at(datas.created.to_i / 1000) if created_at?
  end

  def updated_at?
    datas.updated?
  end

  def updated_at
    Time.at(datas.updated.to_i / 1000) if updated_at?
  end
end