ievkit_views 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +4 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/javascripts/ievkit_views/application.js +17 -0
  6. data/app/assets/stylesheets/ievkit_views/application.css +4 -0
  7. data/app/assets/stylesheets/ievkit_views/report_results.scss +76 -0
  8. data/app/controllers/ievkit_views/application_controller.rb +5 -0
  9. data/app/helpers/ievkit_views/application_helper.rb +32 -0
  10. data/app/services/ievkit_views/action_report.rb +86 -0
  11. data/app/services/ievkit_views/report.rb +104 -0
  12. data/app/services/ievkit_views/validation_report.rb +37 -0
  13. data/app/services/ievkit_views/validation_service.rb +253 -0
  14. data/app/views/ievkit_views/_element_count.html.erb +3 -0
  15. data/app/views/ievkit_views/_file_details.html.erb +13 -0
  16. data/app/views/ievkit_views/_paginate.html.erb +1 -0
  17. data/app/views/ievkit_views/_report.html.erb +33 -0
  18. data/app/views/ievkit_views/_report_badges.html.erb +80 -0
  19. data/app/views/ievkit_views/_report_filters.html.erb +34 -0
  20. data/app/views/ievkit_views/_report_links.html.erb +31 -0
  21. data/app/views/ievkit_views/_report_results.html.erb +58 -0
  22. data/app/views/ievkit_views/_report_results_error_name.html.erb +1 -0
  23. data/app/views/ievkit_views/_report_results_files.html.erb +41 -0
  24. data/app/views/ievkit_views/_report_results_tests.html.erb +38 -0
  25. data/app/views/ievkit_views/_report_results_transport_datas.html.erb +47 -0
  26. data/config/initializers/numeric.rb +5 -0
  27. data/config/routes.rb +2 -0
  28. data/lib/ievkit_views/engine.rb +5 -0
  29. data/lib/ievkit_views/version.rb +3 -0
  30. data/lib/ievkit_views.rb +4 -0
  31. data/lib/tasks/ievkit_views_tasks.rake +4 -0
  32. data/test/dummy/README.rdoc +28 -0
  33. data/test/dummy/Rakefile +6 -0
  34. data/test/dummy/app/assets/javascripts/application.js +13 -0
  35. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  36. data/test/dummy/app/controllers/application_controller.rb +5 -0
  37. data/test/dummy/app/helpers/application_helper.rb +2 -0
  38. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  39. data/test/dummy/bin/bundle +3 -0
  40. data/test/dummy/bin/rails +4 -0
  41. data/test/dummy/bin/rake +4 -0
  42. data/test/dummy/bin/setup +29 -0
  43. data/test/dummy/config/application.rb +26 -0
  44. data/test/dummy/config/boot.rb +5 -0
  45. data/test/dummy/config/database.yml +30 -0
  46. data/test/dummy/config/environment.rb +5 -0
  47. data/test/dummy/config/environments/development.rb +41 -0
  48. data/test/dummy/config/environments/production.rb +79 -0
  49. data/test/dummy/config/environments/test.rb +42 -0
  50. data/test/dummy/config/initializers/assets.rb +11 -0
  51. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  52. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  53. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  54. data/test/dummy/config/initializers/inflections.rb +16 -0
  55. data/test/dummy/config/initializers/mime_types.rb +4 -0
  56. data/test/dummy/config/initializers/session_store.rb +3 -0
  57. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  58. data/test/dummy/config/locales/en.yml +23 -0
  59. data/test/dummy/config/routes.rb +4 -0
  60. data/test/dummy/config/secrets.yml +22 -0
  61. data/test/dummy/config.ru +4 -0
  62. data/test/dummy/log/development.log +0 -0
  63. data/test/dummy/public/404.html +67 -0
  64. data/test/dummy/public/422.html +67 -0
  65. data/test/dummy/public/500.html +66 -0
  66. data/test/dummy/public/favicon.ico +0 -0
  67. data/test/ievkit_views_test.rb +7 -0
  68. data/test/integration/navigation_test.rb +8 -0
  69. data/test/test_helper.rb +21 -0
  70. metadata +206 -0
@@ -0,0 +1,253 @@
1
+ module IevkitViews
2
+ class ValidationService
3
+ attr_reader :reports, :lines, :filenames, :tests, :search, :filter, :count_errors
4
+ attr_accessor :default_view
5
+
6
+ def initialize(validation_report, action_report, q = nil)
7
+ @validations = validation_report
8
+ @action_report = action_report
9
+ @search = q && q['search'] ? q['search'].split(',').compact.collect(&:strip).map(&:to_s).map(&:downcase) : nil
10
+ @filter = q && q['filter'] ? q['filter'] : { 'lines': nil, 'status': nil }
11
+ @default_view = :files
12
+ @reports = []
13
+ @lines = []
14
+ @filenames = []
15
+ @tests = []
16
+ @count_errors = { files: {}, lines: {} }
17
+ do_report if @validations
18
+ end
19
+
20
+ def do_report
21
+ @validations['validation_report']['tests'].each do |test|
22
+ report = OpenStruct.new
23
+ report.test_id = test['test_id']
24
+ report.error_count = test['error_count']
25
+ report.severity = test['severity']
26
+ report.result = test['result']
27
+ if test['errors']
28
+ test['errors'].each do |error|
29
+ @report_dup = report.dup
30
+
31
+ @report_dup.error_id = error['error_id']
32
+ @report_dup.source_label = error['source']['label']
33
+ @report_dup.source_objectid = error['source']['objectid']
34
+ @report_dup.error_value = error['error_value']
35
+ @report_dup.reference_value = error['reference_value']
36
+
37
+ if error['target']
38
+ error['target'].each_with_index do |target, index|
39
+ @report_dup.send("target_#{index}_label=", target['label'])
40
+ @report_dup.send("target_#{index}_objectid=", target['objectid'])
41
+ end
42
+ end
43
+
44
+ file_infos = error['source']['file']
45
+ parse_files(file_infos)
46
+ line_infos = error['source']['line']
47
+ parse_lines(line_infos)
48
+
49
+ @report_dup.error_subtitle = I18n.t("compliance_check_results.details.#{@report_dup.test_id}")
50
+ @report_dup.error_description = I18n.t("compliance_check_results.details.detail_#{@report_dup.error_id}", @report_dup.to_h)
51
+
52
+ next unless parse_search?
53
+ next unless parse_filter?(file_infos, error)
54
+
55
+ if file_infos
56
+ status = @action_report[:files].select{ |datas| datas['name'] == file_infos['filename'] }
57
+ status = status.any? ? status.first['status'] : nil
58
+ @filenames << { name: file_infos['filename'], status: status }
59
+ end
60
+
61
+ # TODO - Wait for IEV update
62
+ # if line_infos
63
+ # status = @action_report[:lines].select{ |datas| datas['name'] == line_infos['label'] }
64
+ # status = status.any? ? status.first['status'] : nil
65
+ # @lines << { name: line_infos['label'], status: status }
66
+ # end
67
+
68
+ @tests << test['test_id'] if test['test_id'].present?
69
+ @reports << @report_dup
70
+ end
71
+ else
72
+ @reports << report
73
+ end
74
+ end
75
+ clean_datas
76
+ end
77
+
78
+ def to_csv
79
+ CSV.generate(headers: true, col_sep: ';') do |csv|
80
+ csv << csv_headers
81
+ send("csv_body_#{default_view}") { |datas| csv << datas }
82
+ end
83
+ end
84
+
85
+ private
86
+
87
+ def parse_search?
88
+ if @search.present?
89
+ count = @report_dup.to_h.count do |_key, value|
90
+ @search.count { |search_value| value.to_s.downcase =~ /#{search_value}/i } > 0
91
+ end
92
+ return count > 0 ? true : false
93
+ end
94
+ true
95
+ end
96
+
97
+ def parse_filter?(file_infos, error)
98
+ if @filter['lines'].present?
99
+ return false unless error['source']['label'].present?
100
+ return false if @filter['lines'] != 'conform_line'
101
+ end
102
+ if @filter['status'].present? && file_infos
103
+ count = @action_report[:files].count{ |datas|
104
+ datas['name'] == file_infos['filename'] && datas['status']&.downcase == @filter['status'].downcase
105
+ }
106
+ return false if count == 0
107
+ end
108
+ true
109
+ end
110
+
111
+ def parse_lines(line_infos)
112
+ # TODO - Wait for IEV update
113
+ if line_infos && line_infos.key?(' ')
114
+ @report_dup.linename = line_infos[' ']
115
+ @count_errors[:lines][@report_dup.linename] ||= { error: 0, warning: 0 }
116
+ @count_errors[:lines][@report_dup.linename][get_status(@report_dup)] += 1
117
+ end
118
+ end
119
+
120
+ def parse_files(file_infos)
121
+ if file_infos && file_infos.key?('filename')
122
+ @report_dup.filename = file_infos['filename']
123
+ @report_dup.line_number = file_infos['line_number'] if file_infos.key? 'line_number'
124
+ @report_dup.column_number = file_infos['column_number'] if file_infos.key? 'column_number'
125
+ @count_errors[:files][@report_dup.filename] ||= { error: 0, warning: 0 }
126
+ @count_errors[:files][@report_dup.filename][get_status(@report_dup)] += 1
127
+ end
128
+ end
129
+
130
+ def csv_headers
131
+ if @default_view.to_sym == :files
132
+ ['Statut', 'Fichier', 'Ligne/Colonne', 'Code', 'Contrôle', 'Détail de l\'erreur']
133
+ else
134
+ ['Statut', 'Ligne', 'Fichier', 'Ligne/Colonne', 'Code', 'Contrôle', 'Détail de l\'erreur']
135
+ end
136
+ end
137
+
138
+ def csv_body_lines
139
+ # TODO - Wait for IEV update
140
+ # @lines.each do |line|
141
+ # reports2 = reports.select{ |r| r.source_label == line[:name] }
142
+ # @filenames.each do |filename|
143
+ # reports3 = reports2.select{ |r| r.filename == filename[:name] }
144
+ # reports3.each_with_index do |report, index|
145
+ # break if index > 10
146
+ # yield [
147
+ # I18n.t("compliance_check_results.severities.#{line[:status].downcase}_txt"),
148
+ # line[:name],
149
+ # filename[:name],
150
+ # get_line_column(report),
151
+ # report.test_id,
152
+ # I18n.t("compliance_check_results.details.#{report.test_id}"),
153
+ # I18n.t("compliance_check_results.details.detail_#{report.error_id}", report.to_h)
154
+ # ]
155
+ # end
156
+ # end
157
+ # (reports-reports2).each_with_index do |report, index|
158
+ # break if index > 10
159
+ # yield [
160
+ # I18n.t("compliance_check_results.severities.#{line[:status].downcase}_txt"),
161
+ # line[:name],
162
+ # '',
163
+ # '',
164
+ # report.test_id,
165
+ # I18n.t("compliance_check_results.details.#{report.test_id}"),
166
+ # I18n.t("compliance_check_results.details.detail_#{report.error_id}", report.to_h)
167
+ # ]
168
+ # end
169
+ # end
170
+ end
171
+
172
+ def csv_body_files
173
+ @filenames.each do |filename|
174
+ reports2 = reports.select{ |r| r.filename == filename[:name] }
175
+ if reports2.present?
176
+ reports2.each_with_index do |report, index|
177
+ status = I18n.t("compliance_check_results.severities.#{filename[:status] ? filename[:status].downcase : 'none'}_txt")
178
+ yield [
179
+ status,
180
+ filename[:name],
181
+ get_line_column(report),
182
+ report.test_id,
183
+ I18n.t("compliance_check_results.details.#{report.test_id}"),
184
+ I18n.t("compliance_check_results.details.detail_#{report.error_id}", report.to_h)
185
+ ]
186
+ end
187
+ else
188
+ yield [I18n.t('compliance_check_results.severities.ok_txt'), filename[:name]]
189
+ end
190
+ end
191
+ end
192
+
193
+ def get_line_column(report)
194
+ line_column = []
195
+ if report.line_number.to_i > 0 && report.column_number.to_i > 0
196
+ line_column << "#{I18n.t('report.file.line')} #{report.line_number}"
197
+ line_column << "#{I18n.t('report.file.column')} #{report.column_number}"
198
+ end
199
+ line_column.join(' ')
200
+ end
201
+
202
+ def add_others
203
+ if (@filter['status'].blank? || @filter['status'] == 'success') && @action_report[:files]
204
+ @action_report[:files].each do |file|
205
+ next if @count_errors[:files][file['name']]
206
+ if @search.present?
207
+ next if @search.count { |search_value| file['name'].to_s.downcase =~ /#{search_value}/i } == 0
208
+ end
209
+ @filenames << { name: file['name'], status: file['status'] }
210
+ @count_errors[:files][file['name']] ||= { error: 0, warning: 0 }
211
+ end
212
+ end
213
+ if (@filter['lines'].blank? || @filter['lines'] == 'conform_line') && @action_report[:lines]
214
+ @action_report[:lines].each do |line|
215
+ next if @count_errors[:lines][line['name']]
216
+ if @search.present?
217
+ next if @search.count { |search_value| line['name'].to_s.downcase =~ /#{search_value}/i } == 0
218
+ end
219
+ @lines << { name: line['name'], status: line['status'] }
220
+ @count_errors[:lines][line['name']] ||= { error: 0, warning: 0 }
221
+ end
222
+ end
223
+ end
224
+
225
+ def clean_datas
226
+ add_others
227
+ filenames_sorted = { error: [], warning: [], ok: [], ignored: [], '': [] }
228
+ if @filenames.present?
229
+ @filenames.compact.reject! { |f| f[:name].blank? }
230
+ @filenames.uniq! { |f| f[:name] }
231
+ @filenames.each do |f|
232
+ filenames_sorted[f[:status].to_s.downcase.to_sym] << f
233
+ end
234
+ @filenames = []
235
+ filenames_sorted.map{ |_key, value| @filenames << value }
236
+ @filenames.flatten!
237
+ end
238
+ if @lines.present?
239
+ @lines.compact.reject! { |f| f[:name].blank? }
240
+ @lines.uniq! { |f| f[:name] }
241
+ @lines.sort_by! { |a| a[:name] }
242
+ end
243
+ @tests = @tests.compact.reject(&:blank?).uniq.sort if @tests.present?
244
+ end
245
+
246
+ def get_status(report)
247
+ severity = report.severity.downcase.to_sym
248
+ result = report.result.downcase.to_sym
249
+ return if result == :ok
250
+ severity
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,3 @@
1
+ <% if element[:error_or_warning] && errors_count < (element[:count_warning].to_i + element[:count_error].to_i) %>
2
+ <li class="ievkit-AccordionBlock-errorId">...<%= (element[:count_warning].to_i + element[:count_error].to_i) - errors_count %> de plus.</li>
3
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% filename = true if local_assigns[:filename].nil? %>
2
+ <% if detail[:source][:file] && detail[:source][:file][:filename] %>
3
+ <strong>
4
+ <%= detail[:source][:file][:filename] if filename %>
5
+ <% if detail[:source][:file][:line_number].to_i > 0 %>
6
+ <%= t('report.file.line') %> <%= detail[:source][:file][:line_number] %>
7
+ <% end %>
8
+ <% if detail[:source][:file][:column_number].to_i > 0 %>
9
+ <%= t('report.file.column') %> <%= detail[:source][:file][:column_number] %>
10
+ <% end %>
11
+ </strong>
12
+ -
13
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= paginate datas %>
@@ -0,0 +1,33 @@
1
+ <div class="row">
2
+ <div class="col-sm-12">
3
+ <%= render 'ievkit_views/report_links' %>
4
+ </div>
5
+ </div>
6
+ <% if @elements_to_paginate.any? %>
7
+ <div class="row">
8
+ <div class="col-sm-12">
9
+ <%= render 'ievkit_views/report_badges' %>
10
+ </div>
11
+ </div>
12
+ <% end %>
13
+ <% if @default_view != :transport_datas || (@default_view == :transport_datas && @transport_datas_selected.present?) %>
14
+ <% if @datas.count > 0 %>
15
+ <div class="row">
16
+ <div class="col-sm-12">
17
+ <%= render 'ievkit_views/report_filters' %>
18
+ </div>
19
+ </div>
20
+ <% end %>
21
+ <div class="row">
22
+ <div class="col-sm-12">
23
+ <p>
24
+ <% if @default_view == :transport_datas && @transport_datas_selected != 'all' %>
25
+ <%= t("report.total_results.synthesis.#{@transport_datas_selected}", count: @datas.count) %>
26
+ <% else %>
27
+ <%= t("report.total_results.#{@default_view}", count: @datas.count) %>
28
+ <% end %>
29
+ </p>
30
+ <%= render 'ievkit_views/report_results' %>
31
+ </div>
32
+ </div>
33
+ <% end %>
@@ -0,0 +1,80 @@
1
+ <div class="table-responsive" style="margin-top:20px;">
2
+ <table class="table table-bordered table-striped">
3
+ <tr>
4
+ <td>
5
+ <% if @default_view == :transport_datas %>
6
+ <strong>
7
+ Synthèse par données de transport
8
+ </strong>
9
+ <% end %>
10
+ </td>
11
+ <td>
12
+ <% if @default_view == :tests %>
13
+ Succès
14
+ <% else %>
15
+ Conforme
16
+ <% end %>
17
+ </td>
18
+ <td>
19
+ <% if @default_view == :tests %>
20
+ Échec
21
+ <% else %>
22
+ Non conforme
23
+ <% end %>
24
+ </td>
25
+ <% if @default_view != :transport_datas %>
26
+ <td>Ignoré</td>
27
+ <% end %>
28
+ </tr>
29
+ <% if @sum_report %>
30
+ <% @sum_report.each do |key, value| %>
31
+ <% key = @default_view unless key %>
32
+ <tr>
33
+ <td>
34
+ <% type_name = t("report.default_view.#{key}")%>
35
+ <% if @default_view == :transport_datas %>
36
+ <%= link_to url_for(default_view: 'transport_datas', type_td: key.to_s) do %>
37
+ <span class="glyphicon glyphicon-eye-open"></span>
38
+ <%= type_name %>
39
+ <% end %>
40
+ <% else %>
41
+ Nombre de <%= type_name.downcase %>
42
+ <% end %>
43
+ </td>
44
+ <td>
45
+ <% if @default_view == :transport_datas && key != 'line' %>
46
+ <% if value[:ok] > 0 %>
47
+ <% icon = get_icon(:ok) %>
48
+ <span class="ievkit-ColorBlock-<%= icon %> glyphicon glyphicon-<%= icon %>"></span>
49
+ <% end %>
50
+ <% else %>
51
+ <span class="badge"><%= value[:ok] %></span>
52
+ <% end %>
53
+ </td>
54
+ <td>
55
+ <% if @default_view == :transport_datas && key != 'line' %>
56
+ <% if value[:error] > 0 %>
57
+ <% icon = get_icon(:error, value[:error]) %>
58
+ <span class="ievkit-ColorBlock-<%= icon %> glyphicon glyphicon-<%= icon %>"></span>
59
+ <% end %>
60
+ <% else %>
61
+ <span class="badge"><%= value[:error] %></span>
62
+ <% end %>
63
+ </td>
64
+ <% if @default_view != :transport_datas %>
65
+ <td>
66
+ <span class="badge"><%= value[:ignored] %></span>
67
+ </td>
68
+ <% end %>
69
+ </tr>
70
+ <% end %>
71
+ <% end %>
72
+ </table>
73
+ </div>
74
+ <% if @default_view == :transport_datas && @transport_datas_selected != 'all' %>
75
+ <div>
76
+ <%= link_to url_for(default_view: 'transport_datas', type_td: 'all') do %>
77
+ Afficher toutes les données de transport
78
+ <% end %>
79
+ </div>
80
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <%= form_tag url_for, method: :get, class: 'form-inline ievkit-SearchBlock' do %>
2
+ <%= hidden_field_tag(:default_view, @default_view) %>
3
+ <div class="form-group cvd-SearchBlock-search">
4
+ <%= label_tag t('report.search_form.label.search') %>
5
+ <%= search_field_tag 'q[search]', @job.search, { class: 'form-control' } %>
6
+ </div>
7
+ <% if false %>
8
+ <div class="form-group">
9
+ <%= label_tag t('report.search_form.label.state') %>
10
+ <% if @default_view == :files %>
11
+ <%= select_tag 'q[filter][status]', options_for_select([[t('compliance_check_results.severities.error_txt'), 'error'],
12
+ [t('compliance_check_results.severities.ignored_txt'), 'ignored'],
13
+ [t('compliance_check_results.severities.success_txt'), 'ok']], nil),
14
+ class: 'form-control', prompt: 'Tous' %>
15
+ <% else %>
16
+ <%= select_tag 'q[filter][transport_datas]', options_for_select([[t('report.conform_lines'), 'conform_line'],
17
+ [t('report.nonconforming_lines'), 'nonconform_line']],
18
+ nil),
19
+ class: 'form-control', prompt: 'Tous' %>
20
+ <% end %>
21
+ </div>
22
+ <% end %>
23
+ <%= submit_tag t('report.search_form.submit', default: 'Submit'), class: 'btn btn-primary' %>
24
+ <% end %>
25
+
26
+ <% if @search.present? %>
27
+ <script>
28
+ $(document).on('page:change', function() {
29
+ <% @search.each do |q| %>
30
+ $('#accordion').highlightRegex(/<%= q.html_safe %>/gi);
31
+ <% end %>
32
+ });
33
+ </script>
34
+ <% end %>
@@ -0,0 +1,31 @@
1
+ <div class="btn-group pull-right" role="group">
2
+ <% if @elements_to_paginate.any? %>
3
+ <%=
4
+ link_to @download_page,
5
+ class: 'btn btn-primary',
6
+ 'data-toggle': 'tooltip',
7
+ 'data-placement': 'top',
8
+ 'title': t("report.download_by.#{@default_view}"),
9
+ 'data-no-turbolink': true do
10
+ t('report.download')
11
+ end
12
+ %>
13
+ <% end %>
14
+ </div>
15
+ <div class="btn-group pull-left" role="group">
16
+ <%=
17
+ link_to url_for(default_view: 'transport_datas'), class: "btn btn-#{@default_view == :transport_datas ? 'warning' : 'default'}" do
18
+ t('report.default_view.transport_datas')
19
+ end
20
+ %>
21
+ <%=
22
+ link_to url_for(default_view: 'files'), class: "btn btn-#{@default_view == :files ? 'warning' : 'default'}" do
23
+ t('report.default_view.files')
24
+ end
25
+ %>
26
+ <%=
27
+ link_to url_for(default_view: 'tests'), class: "btn btn-#{@default_view == :tests ? 'warning' : 'default'}" do
28
+ t('report.default_view.tests')
29
+ end
30
+ %>
31
+ </div>
@@ -0,0 +1,58 @@
1
+ <div class="panel-group ievkit-AccordionBlock" id="accordion" role="tablist" aria-multiselectable="true">
2
+ <% @elements_to_paginate.each_with_index do |element, index| %>
3
+ <div class="panel panel-default">
4
+ <div class="panel-heading"
5
+ role="tab"
6
+ id="heading-<%= index %>">
7
+ <h4 class="panel-title">
8
+ <% if element[:error_or_warning] %>
9
+ <a class="collapsed"
10
+ role="button"
11
+ data-toggle="collapse"
12
+ data-parent="#accordion"
13
+ data-jump-to="<%= index %>"
14
+ href="#collapse-<%= index %>"
15
+ aria-expanded="false"
16
+ aria-controls="collapse-<%= index %>">
17
+ <% end %>
18
+ <% icon = get_icon(element[:status], element[:count_error], element[:count_warning]) %>
19
+ <% fs_status = element[:status].present? ? element[:status] : 'none' %>
20
+ <span class="ievkit-ColorBlock-<%= icon %> glyphicon glyphicon-<%= icon %>"
21
+ data-toggle="tooltip"
22
+ data-placement="top"
23
+ title="<%= get_icon_title(fs_status, element[:count_error], element[:count_warning]) %>"></span>
24
+ <%= element[:name].truncate(110) %>
25
+ <% if element[:error_or_warning] %></a><% end %>
26
+ <% if @default_view == :tests %>
27
+ <%= link_to "#{ENV['SPEC_VALIDATION_URL']}/#{I18n.locale}/#{element[:name]}.html", target: '_blank', rel: 'noreferrer' do %>
28
+ <span class="glyphicon glyphicon-link"></span>
29
+ <% end %>
30
+ <% end %>
31
+ <% if element[:count_error] %>
32
+ <span class="pull-right badge<%= ' ievkit-BgColorBlock-remove' if element[:count_error ] > 0 %>">
33
+ <%= t('count_errors', count: element[:count_error]) %>
34
+ </span>
35
+ <% end %>
36
+ <% if element[:count_warning] %>
37
+ <span class="pull-right badge<%= ' ievkit-BgColorBlock-alert' if element[:count_warning] > 0 %>"
38
+ style="margin-right:4px;">
39
+ <%= t('count_warnings', count: element[:count_warning]) %>
40
+ </span>
41
+ <% end %>
42
+ </h4>
43
+ </div>
44
+ <% if element[:error_or_warning] %>
45
+ <div id="collapse-<%= index %>"
46
+ class="panel-collapse collapse"
47
+ role="tabpanel"
48
+ aria-labelledby="heading-<%= index %>">
49
+ <div class="panel-body ievkit-ReportBlock-results">
50
+ <%= render "ievkit_views/report_results_#{@default_view}", element: element %>
51
+ </div>
52
+ </div>
53
+ <% end %>
54
+ </div>
55
+ <% end %>
56
+ </div>
57
+
58
+ <%= render 'ievkit_views/paginate', { datas: @elements_to_paginate } %>
@@ -0,0 +1 @@
1
+ <%= error[:error_name] %>
@@ -0,0 +1,41 @@
1
+ <% if element[:check_point_errors] %>
2
+ <% errors_list = {} %>
3
+ <% errors_count = 0 %>
4
+ <ul>
5
+ <% element[:check_point_errors].each do |error_key| %>
6
+ <% error = @errors[error_key] %>
7
+ <% next unless error %>
8
+ <% error_test_id = error[:test_id].present? ? error[:test_id] : 'Problème de cohérence entre différents fichiers' %>
9
+ <% errors_list[error_test_id] ||= [] %>
10
+ <% errors_list[error_test_id] << error %>
11
+ <% end %>
12
+ <% errors_list.each do |key, values| %>
13
+ <li>
14
+ <strong>
15
+ <%= button_tag type: :button, class: 'hide show-js ievkit-AccordionBlock-details', 'data-toggle': 'tooltip',
16
+ 'data-placement': 'top', 'title': 'Déplier/Plier' do %>
17
+ <span class="glyphicon glyphicon-plus"></span>
18
+ <% end %>
19
+ <%= key %>
20
+ <%= link_to "#{ENV['SPEC_VALIDATION_URL']}/#{I18n.locale}/#{key}.html", target: '_blank', rel: 'noreferrer' do %>
21
+ <span class="glyphicon glyphicon-link"></span>
22
+ <% end %>
23
+ -
24
+ <%= values.first[:test_name] %>
25
+ </strong>
26
+ <div class="hide-js">
27
+ <ul>
28
+ <% errors_count += values.count %>
29
+ <% values.each do |detail| %>
30
+ <li>
31
+ <%= render 'ievkit_views/file_details', detail: detail, filename: false %>
32
+ <%= render 'ievkit_views/report_results_error_name', error: detail %>
33
+ </li>
34
+ <% end %>
35
+ </ul>
36
+ </div>
37
+ </li>
38
+ <% end %>
39
+ <%= render 'ievkit_views/element_count', element: element, errors_count: errors_count %>
40
+ </ul>
41
+ <% end %>
@@ -0,0 +1,38 @@
1
+ <% if element[:check_point_errors] %>
2
+ <% errors_list = {} %>
3
+ <% errors_count = 0 %>
4
+ <ul>
5
+ <% element[:check_point_errors].each do |error_key| %>
6
+ <% error = @errors[error_key] %>
7
+ <% next unless error %>
8
+ <% if error[:source] %>
9
+ <% filename = error[:source][:file].present? ? error[:source][:file][:filename] : 'Problème de cohérence entre différents tests' %>
10
+ <% errors_list[filename] ||= [] %>
11
+ <% errors_list[filename] << error %>
12
+ <% end %>
13
+ <% end %>
14
+ <% errors_list.each do |key, values| %>
15
+ <% errors_count += values.count %>
16
+ <li>
17
+ <strong>
18
+ <%= button_tag type: :button, class: 'hide show-js ievkit-AccordionBlock-details', 'data-toggle': 'tooltip',
19
+ 'data-placement': 'top', 'title': 'Déplier/Plier' do %>
20
+ <span class="glyphicon glyphicon-plus"></span>
21
+ <% end %>
22
+ <%= key %>
23
+ </strong>
24
+ <div class="hide-js">
25
+ <ul>
26
+ <% values.each do |detail| %>
27
+ <li>
28
+ <%= render 'ievkit_views/file_details', detail: detail, filename: false %>
29
+ <%= render 'ievkit_views/report_results_error_name', error: detail %>
30
+ </li>
31
+ <% end %>
32
+ </ul>
33
+ </div>
34
+ </li>
35
+ <% end %>
36
+ <%= render 'ievkit_views/element_count', element: element, errors_count: errors_count %>
37
+ </ul>
38
+ <% end %>
@@ -0,0 +1,47 @@
1
+ <% if element[:check_point_errors] %>
2
+ <% errors_list = {} %>
3
+ <% errors_count = 0 %>
4
+ <ul>
5
+ <% element[:check_point_errors].each do |error_key| %>
6
+ <% error = @errors[error_key] %>
7
+ <% next unless error %>
8
+ <% if error[:source] %>
9
+ <% filename = error[:source][:file].present? ? error[:source][:file][:filename] : 'Problème de cohérence entre différentes données de transport' %>
10
+ <% errors_list[filename] ||= [] %>
11
+ <% errors_list[filename] << error %>
12
+ <% end %>
13
+ <% end %>
14
+ <% errors_list.each do |key, values| %>
15
+ <% errors_count += values.count %>
16
+ <li>
17
+ <strong>
18
+ <%= button_tag type: :button, class: 'hide show-js ievkit-AccordionBlock-details', 'data-toggle': 'tooltip',
19
+ 'data-placement': 'top', 'title': 'Déplier/Plier' do %>
20
+ <span class="glyphicon glyphicon-plus"></span>
21
+ <% end %>
22
+ <%= key %>
23
+ </strong>
24
+ <div class="hide-js">
25
+ <ul>
26
+ <% values.each do |detail| %>
27
+ <li>
28
+ <% if detail[:test_id].present? %>
29
+ <strong>
30
+ <%= detail[:test_id] %>
31
+ <%= link_to "#{ENV['SPEC_VALIDATION_URL']}/#{I18n.locale}/#{detail[:test_id]}.html", target: '_blank', rel: 'noreferrer' do %>
32
+ <span class="glyphicon glyphicon-link"></span>
33
+ <% end %>
34
+ -
35
+ </strong>
36
+ <% end %>
37
+ <%= render 'ievkit_views/file_details', detail: detail, filename: false %>
38
+ <%= render 'ievkit_views/report_results_error_name', error: detail %>
39
+ </li>
40
+ <% end %>
41
+ </ul>
42
+ </div>
43
+ </li>
44
+ <% end %>
45
+ <%= render 'ievkit_views/element_count', element: element, errors_count: errors_count %>
46
+ </ul>
47
+ <% end %>
@@ -0,0 +1,5 @@
1
+ class Numeric
2
+ def percent_of(n)
3
+ to_f / n.to_f * 100.0
4
+ end
5
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ IevkitViews::Engine.routes.draw do
2
+ end
@@ -0,0 +1,5 @@
1
+ module IevkitViews
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace IevkitViews
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module IevkitViews
2
+ VERSION = "0.2.0"
3
+ end