ievkit_views 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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